issues: 722437965
This data as json
id | node_id | number | title | user | state | locked | assignee | milestone | comments | created_at | updated_at | closed_at | author_association | active_lock_reason | draft | pull_request | body | reactions | performed_via_github_app | state_reason | repo | type |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
722437965 | MDU6SXNzdWU3MjI0Mzc5NjU= | 4514 | encode_cf_datetime: reference_date can not be "2000-02-30" | 10194086 | closed | 0 | 3 | 2020-10-15T15:25:10Z | 2021-01-05T15:42:37Z | 2021-01-05T15:42:37Z | MEMBER | What happened: I try to save the result of What you expected to happen: The dataset can be saved. Minimal Complete Verifiable Example: ```python import cftime import xarray as xr time = xr.cftime_range("2000-02-30", "2001-01-01", freq="3M", calendar="360_day") dates = np.asarray(time) reference_date = xr.coding.times.infer_datetime_units(dates) 'days since 2000-02-30 00:00:00.000000'xr.coding.times.encode_cf_datetime(time) ValueError``` Traceback:
```python-traceback
---------------------------------------------------------------------------
OutOfBoundsDatetime Traceback (most recent call last)
~/.conda/envs/ipcc_ar6/lib/python3.7/site-packages/xarray/coding/times.py in encode_cf_datetime(dates, units, calendar)
367 # parse with cftime instead
--> 368 raise OutOfBoundsDatetime
369 assert dates.dtype == "datetime64[ns]"
OutOfBoundsDatetime:
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-157-727cb22f83b1> in <module>
4 time = xr.cftime_range("2000-02-30", "2001-01-01", freq="3M", calendar="360_day")
5
----> 6 xr.coding.times.encode_cf_datetime(time)
~/.conda/envs/ipcc_ar6/lib/python3.7/site-packages/xarray/coding/times.py in encode_cf_datetime(dates, units, calendar)
385
386 except (OutOfBoundsDatetime, OverflowError):
--> 387 num = _encode_datetime_with_cftime(dates, units, calendar)
388
389 num = cast_to_int_if_safe(num)
~/.conda/envs/ipcc_ar6/lib/python3.7/site-packages/xarray/coding/times.py in _encode_datetime_with_cftime(dates, units, calendar)
332 return np.nan if d is None else cftime.date2num(d, units, calendar)
333
--> 334 return np.vectorize(encode_datetime)(dates)
335
336
~/.conda/envs/ipcc_ar6/lib/python3.7/site-packages/numpy/lib/function_base.py in __call__(self, *args, **kwargs)
2089 vargs.extend([kwargs[_n] for _n in names])
2090
-> 2091 return self._vectorize_call(func=func, args=vargs)
2092
2093 def _get_ufunc_and_otypes(self, func, args):
~/.conda/envs/ipcc_ar6/lib/python3.7/site-packages/numpy/lib/function_base.py in _vectorize_call(self, func, args)
2159 res = func()
2160 else:
-> 2161 ufunc, otypes = self._get_ufunc_and_otypes(func=func, args=args)
2162
2163 # Convert args to object arrays first
~/.conda/envs/ipcc_ar6/lib/python3.7/site-packages/numpy/lib/function_base.py in _get_ufunc_and_otypes(self, func, args)
2119
2120 inputs = [arg.flat[0] for arg in args]
-> 2121 outputs = func(*inputs)
2122
2123 # Performance note: profiling indicates that -- for simple
~/.conda/envs/ipcc_ar6/lib/python3.7/site-packages/xarray/coding/times.py in encode_datetime(d)
330
331 def encode_datetime(d):
--> 332 return np.nan if d is None else cftime.date2num(d, units, calendar)
333
334 return np.vectorize(encode_datetime)(dates)
cftime/_cftime.pyx in cftime._cftime.date2num()
cftime/_cftime.pyx in cftime._cftime._dateparse()
ValueError: day is out of range for month
```
Anything else we need to know?: This goes wrong here: https://github.com/pydata/xarray/blob/15537497136345ed67e9e8b089bcd4573df0b2ea/xarray/coding/times.py#L249-L250 A possible fix is to add the following lines:
To workaround set the encoding manually:
|
{ "url": "https://api.github.com/repos/pydata/xarray/issues/4514/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | 13221727 | issue |