-
Notifications
You must be signed in to change notification settings - Fork 23
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
A clear and concise description of what the bug is.
Reproducible Minimal Working Example
Provide a concise Python code snippet that demonstrates the issue. To display the code clearly, use GitHub Flavored Markdown for formatting:
My data looks like:
<xarray.Dataset> Size: 5MB
Dimensions: (time: 420, bnds: 2, plev: 1, lat: 21, lon: 128)
Coordinates:
* plev (plev) float64 8B 5e+04
* lat (lat) float64 168B -87.86 -85.1 -82.31 ... -37.67 -34.88 -32.09
* lon (lon) float64 1kB -177.2 -174.4 -171.6 ... 174.4 177.2 180.0
* time (time) object 3kB 2015-01-16 12:00:00 ... 2049-12-16 12:00:00
Dimensions without coordinates: bnds
Data variables:
time_bnds (time, bnds) object 7kB ...
lat_bnds (lat, bnds) float64 336B -90.0 -86.58 -86.58 ... -33.49 -30.7
lon_bnds (lon, bnds) float64 2kB -178.6 -175.8 -175.8 ... 178.6 -178.6
zg (time, plev, lat, lon) float32 5MB 5.057e+03 ... 5.836e+03...Expected behavior
I ran the following expecting spatial patterns and PCs of the variable.
model = xe.single.EOF(use_coslat=True)Converted lat-lon,
if 'longitude' in H500_f.coords:
H500_f = H500_f.rename({'lon_bnds': 'lon'})
if 'latitude' in H500_f.coords:
H500_f = H500_f.rename({'lat_bnds': 'lat'})Yet, When I fit the model:
model.fit(H500_f, dim="time")I get the following error:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
File ~\anaconda3\envs\xEOF\Lib\site-packages\xarray\core\dataarray.py:892, in DataArray._getitem_coord(self, key)
891 try:
--> 892 var = self._coords[key]
893 except KeyError:
KeyError: 'lat'
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_10480\2310289397.py in ?()
----> 1 model.fit(H500_f, dim="time")
~\anaconda3\envs\xEOF\Lib\site-packages\xeofs\single\base_model_single_set.py in ?(self, X, dim, weights)
147
148 self.sample_dims = convert_to_dim_type(dim)
149
150 # Preprocess the data & transform to 2D
--> 151 data2D: DataArray = self.preprocessor.fit_transform(
152 X, self.sample_dims, weights
153 )
154
~\anaconda3\envs\xEOF\Lib\site-packages\sklearn\utils\_set_output.py in ?(self, X, *args, **kwargs)
317 @wraps(f)
318 def wrapped(self, X, *args, **kwargs):
--> 319 data_to_wrap = f(self, X, *args, **kwargs)
320 if isinstance(data_to_wrap, tuple):
321 # only wrap the first output for cross decomposition
322 return_tuple = (
~\anaconda3\envs\xEOF\Lib\site-packages\xeofs\preprocessing\preprocessor.py in ?(self, X, sample_dims, weights)
265 weights: list[Data] | Data | None = None,
266 ) -> DataArray:
267 # Take advantage of the fact that `.fit()` already transforms the data
268 # to avoid duplicate computation
--> 269 self, X = self._fit_algorithm(X, sample_dims, weights)
270 return X
~\anaconda3\envs\xEOF\Lib\site-packages\xeofs\preprocessing\preprocessor.py in ?(self, X, sample_dims, weights)
206 weights = process_parameter("weights", weights, None, self.n_data)
207
208 # 1 | Center, scale and weigh the data
209 scaler_iterkwargs = {"weights": weights}
--> 210 X = self.scaler.fit_transform(
211 X=X,
212 sample_dims=sample_dims,
213 feature_dims=feature_dims,
~\anaconda3\envs\xEOF\Lib\site-packages\xeofs\preprocessing\list_processor.py in ?(self, X, sample_dims, feature_dims, iter_kwargs)
83 sample_dims: Dims,
84 feature_dims: DimsList,
85 iter_kwargs: dict[str, list[Any]] = {},
86 ) -> list[Data]:
---> 87 return self.fit(X, sample_dims, feature_dims, iter_kwargs).transform(X) # type: ignore
~\anaconda3\envs\xEOF\Lib\site-packages\xeofs\preprocessing\list_processor.py in ?(self, X, sample_dims, feature_dims, iter_kwargs)
66 # Add transformer specific keyword arguments
67 # For iterable kwargs, use the i-th element of the iterable
68 kwargs = {k: v[i] for k, v in self._iter_kwargs.items()}
69 proc: T = self.transformer_class(**self.init_kwargs)
---> 70 proc.fit(x, sample_dims, feature_dims[i], **kwargs)
71 self.transformers.append(proc)
72 return self
~\anaconda3\envs\xEOF\Lib\site-packages\xeofs\preprocessing\scaler.py in ?(self, X, sample_dims, feature_dims, weights)
107 min=np.finfo(np.float32).eps
108 )
109
110 if params["with_coslat"]:
--> 111 self.coslat_weights_: DataVar = compute_sqrt_cos_lat_weights(
112 data=X, feature_dims=self.feature_dims
113 )
114
~\anaconda3\envs\xEOF\Lib\site-packages\xeofs\utils\xarray_utils.py in ?(data, feature_dims)
127 weights.name = "coslat_weights"
128 return weights
129 elif isinstance(data, xr.Dataset):
130 return xr.Dataset(
--> 131 {
132 var: compute_sqrt_cos_lat_weights(da, feature_dims)
133 for var, da in data.data_vars.items()
134 }
~\anaconda3\envs\xEOF\Lib\site-packages\xeofs\utils\xarray_utils.py in ?(.0)
131 def compute_sqrt_cos_lat_weights(data: DataVar, feature_dims: Dims) -> DataVar:
--> 132 """Compute the square root of cosine of latitude weights.
133
134 Parameters
135 ----------
~\anaconda3\envs\xEOF\Lib\site-packages\xeofs\utils\xarray_utils.py in ?(data, feature_dims)
119
120 if isinstance(data, xr.DataArray):
121 lat_dim = extract_latitude_dimension(feature_dims)
122
--> 123 latitudes = data.coords[lat_dim]
124 weights = sqrt_cos_lat_weights(latitudes)
125 # Features that cannot be associated to a latitude receive a weight of 1
126 # weights = weights.where(weights.notnull(), 1)
~\anaconda3\envs\xEOF\Lib\site-packages\xarray\core\coordinates.py in ?(self, key)
927 def __getitem__(self, key: Hashable) -> T_DataArray:
--> 928 return self._data._getitem_coord(key)
~\anaconda3\envs\xEOF\Lib\site-packages\xarray\core\dataarray.py in ?(self, key)
891 try:
892 var = self._coords[key]
893 except KeyError:
894 dim_sizes = dict(zip(self.dims, self.shape, strict=True))
--> 895 _, key, var = _get_virtual_variable(self._coords, key, dim_sizes)
896
897 return self._replace_maybe_drop_dims(var, name=key)
~\anaconda3\envs\xEOF\Lib\site-packages\xarray\core\dataset.py in ?(variables, key, dim_sizes)
217 raise KeyError(key)
218
219 split_key = key.split(".", 1)
220 if len(split_key) != 2:
--> 221 raise KeyError(key)
222
223 ref_name, var_name = split_key
224 ref_var = variables[ref_name]
KeyError: 'lat'Desktop (please complete the following information):
- OS: Windows
xeofsversion 3.0.4
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working