@@ -116,21 +116,14 @@ def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray:
116116
117117 # perform aggregations in case of multi-year monthly average
118118 if TimeOperationType .MULTI_YEAR_MONTHLY_AVERAGE == settings .operation_type :
119- filtered_values = self .filter_years (time_dim_name , value_array )
120- grouped_values = filtered_values .groupby (f"{ time_dim_name } .month" )
121- result = self ._perform_grouping_operation (grouped_values )
122- # create a new aggregated time dimension based on original time dimension
123- result_time_dim_name = f"{ time_dim_name } _monthly"
124- result = result .rename ({"month" : result_time_dim_name })
119+ result , result_time_dim_name = self ._handle_grouping_operation (
120+ time_dim_name , value_array
121+ )
125122 # perform the operation in case of other operation types
126123 else :
127- aggregated_values = value_array . resample (
128- { time_dim_name : dim_name }, skipna = True
124+ result , result_time_dim_name = self . _handle_aggregation_operation (
125+ settings , dim_name , time_dim_name , value_array
129126 )
130- # create a new aggregated time dimension based on original time dimension
131- result = self ._perform_operation (aggregated_values , settings .operation_type )
132- result_time_dim_name = f"{ time_dim_name } _{ settings .time_scale } "
133- result = result .rename ({time_dim_name : result_time_dim_name })
134127
135128 for key , value in value_array [time_dim_name ].attrs .items ():
136129 if value :
@@ -144,6 +137,39 @@ def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray:
144137
145138 return result
146139
140+ def _handle_grouping_operation (
141+ self ,
142+ time_dim_name : str ,
143+ value_array : _xr .DataArray ,
144+ ) -> tuple [_xr .DataArray , str ]:
145+ """Handles the grouping operation for multi-year monthly average"""
146+ filtered_values = self .filter_years (time_dim_name , value_array )
147+ grouped_values = filtered_values .groupby (f"{ time_dim_name } .month" )
148+ grouping_result = self ._perform_grouping_operation (grouped_values )
149+ # create a new aggregated time dimension based on original time dimension
150+ _result_time_dim_name = f"{ time_dim_name } _monthly"
151+ grouping_result = grouping_result .rename ({"month" : _result_time_dim_name })
152+ return grouping_result , _result_time_dim_name
153+
154+ def _handle_aggregation_operation (
155+ self ,
156+ settings : TimeOperationSettings ,
157+ dim_name : str ,
158+ time_dim_name : str ,
159+ value_array : _xr .DataArray ,
160+ ) -> tuple [_xr .DataArray , str ]:
161+ """Handles the aggregation operation for other operation types"""
162+ aggregated_values = value_array .resample ({time_dim_name : dim_name }, skipna = True )
163+ # create a new aggregated time dimension based on original time dimension
164+ aggregation_result = self ._perform_operation (
165+ aggregated_values , settings .operation_type
166+ )
167+ _result_time_dim_name = f"{ time_dim_name } _{ settings .time_scale } "
168+ aggregation_result = aggregation_result .rename (
169+ {time_dim_name : _result_time_dim_name }
170+ )
171+ return aggregation_result , _result_time_dim_name
172+
147173 def _perform_grouping_operation (
148174 self ,
149175 grouped_values ,
0 commit comments