@@ -786,28 +786,19 @@ def departures(
786
786
787
787
# 5. Align time dimension names using the labeled time dimension name.
788
788
# ----------------------------------------------------------------------
789
- # The climatology's time dimension is renamed to the labeled time
790
- # dimension in step #4 above (e.g., "time" -> "season"). xarray requires
791
- # dimension names to be aligned to perform grouped arithmetic, which we
792
- # use for calculating departures in step #5. Otherwise, this error is
793
- # raised: "`ValueError: incompatible dimensions for a grouped binary
794
- # operation: the group variable '<FREQ ARG>' is not a dimension on the
795
- # other argument`".
796
789
dv_climo = ds_climo [data_var ]
797
- dv_climo = dv_climo .rename ({self .dim : self ._labeled_time .name })
798
790
799
791
# 6. Calculate the departures for the data variable.
800
792
# ----------------------------------------------------------------------
801
793
# departures = observation - climatology
802
794
with xr .set_options (keep_attrs = True ):
803
795
dv_departs = dv_obs_grouped - dv_climo
804
796
dv_departs = self ._add_operation_attrs (dv_departs )
805
- ds_obs [data_var ] = dv_departs
806
797
807
- # The original time dimension name is restored after grouped
808
- # arithmetic, so the labeled time dimension name is no longer needed
809
- # and therefore dropped.
810
- ds_obs = ds_obs . drop_vars ( str ( self . _labeled_time . name ))
798
+ # The original time dimension is dropped from the dataset to
799
+ # accomodate the new time dimension and its associated coordinates.
800
+ ds_obs = ds_obs . drop_dims ( str ( self . dim ))
801
+ ds_obs [ data_var ] = dv_departs
811
802
812
803
if weighted and keep_weights :
813
804
self ._weights = ds_climo .time_wts
@@ -1196,6 +1187,7 @@ def _group_average(self, ds: xr.Dataset, data_var: str) -> xr.DataArray:
1196
1187
# Label the time coordinates for grouping weights and the data variable
1197
1188
# values.
1198
1189
self ._labeled_time = self ._label_time_coords (dv [self .dim ])
1190
+ dv = dv .assign_coords ({self .dim : self ._labeled_time })
1199
1191
1200
1192
if self ._weighted :
1201
1193
time_bounds = ds .bounds .get_bounds ("T" , var_key = data_var )
@@ -1222,14 +1214,6 @@ def _group_average(self, ds: xr.Dataset, data_var: str) -> xr.DataArray:
1222
1214
else :
1223
1215
dv = self ._group_data (dv ).mean ()
1224
1216
1225
- # After grouping and aggregating the data variable values, the
1226
- # original time dimension is replaced with the grouped time dimension.
1227
- # For example, grouping on "year_season" replaces the time dimension
1228
- # with "year_season". This dimension needs to be renamed back to
1229
- # the original time dimension name before the data variable is added
1230
- # back to the dataset so that the original name is preserved.
1231
- dv = dv .rename ({self ._labeled_time .name : self .dim })
1232
-
1233
1217
# After grouping and aggregating, the grouped time dimension's
1234
1218
# attributes are removed. Xarray's `keep_attrs=True` option only keeps
1235
1219
# attributes for data variables and not their coordinates, so the
@@ -1321,7 +1305,7 @@ def _group_data(self, data_var: xr.DataArray) -> DataArrayGroupBy:
1321
1305
if self ._mode == "average" :
1322
1306
dv_gb = dv .groupby (f"{ self .dim } .{ self ._freq } " )
1323
1307
else :
1324
- dv . coords [ self ._labeled_time . name ] = self ._labeled_time
1308
+ dv = dv . assign_coords ({ self .dim : self ._labeled_time })
1325
1309
dv_gb = dv .groupby (self ._labeled_time .name )
1326
1310
1327
1311
return dv_gb
@@ -1374,9 +1358,9 @@ def _label_time_coords(self, time_coords: xr.DataArray) -> xr.DataArray:
1374
1358
dt_objects = self ._convert_df_to_dt (df_dt_components )
1375
1359
1376
1360
time_grouped = xr .DataArray (
1377
- name = "_" . join ( df_dt_components . columns ) ,
1361
+ name = self . dim ,
1378
1362
data = dt_objects ,
1379
- coords = {self .dim : time_coords [ self . dim ] },
1363
+ coords = {self .dim : dt_objects },
1380
1364
dims = [self .dim ],
1381
1365
attrs = time_coords [self .dim ].attrs ,
1382
1366
)
0 commit comments