Skip to content

another cftime failure #3427

@dcherian

Description

@dcherian
________ TestNetCDF3ViaNetCDF4Data.test_roundtrip_cftime_datetime_data _________

dates = array([cftime.DatetimeProlepticGregorian(0001-01-01 00:00:00),
       cftime.DatetimeProlepticGregorian(0001-01-02 00:00:00)],
      dtype=object)
units = 'days since 0001-01-01 00:00:00.000000'
calendar = 'proleptic_gregorian'

    def encode_cf_datetime(dates, units=None, calendar=None):
        """Given an array of datetime objects, returns the tuple `(num, units,
        calendar)` suitable for a CF compliant time variable.
    
        Unlike `date2num`, this function can handle datetime64 arrays.
    
        See also
        --------
        cftime.date2num
        """
        dates = np.asarray(dates)
    
        if units is None:
            units = infer_datetime_units(dates)
        else:
            units = _cleanup_netcdf_time_units(units)
    
        if calendar is None:
            calendar = infer_calendar_name(dates)
    
        delta, ref_date = _unpack_netcdf_time_units(units)
        try:
            if calendar not in _STANDARD_CALENDARS or dates.dtype.kind == "O":
                # parse with cftime instead
>               raise OutOfBoundsDatetime
E               pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime

xarray/coding/times.py:400: OutOfBoundsDatetime

During handling of the above exception, another exception occurred:

self = <xarray.tests.test_backends.TestNetCDF3ViaNetCDF4Data object at 0x7fd54f4cb780>

    @requires_cftime
    def test_roundtrip_cftime_datetime_data(self):
        from .test_coding_times import _all_cftime_date_types
    
        date_types = _all_cftime_date_types()
        for date_type in date_types.values():
            times = [date_type(1, 1, 1), date_type(1, 1, 2)]
            expected = Dataset({"t": ("t", times), "t0": times[0]})
            kwargs = {"encoding": {"t0": {"units": "days since 0001-01-01"}}}
            expected_decoded_t = np.array(times)
            expected_decoded_t0 = np.array([date_type(1, 1, 1)])
            expected_calendar = times[0].calendar
    
            with warnings.catch_warnings():
                if expected_calendar in {"proleptic_gregorian", "gregorian"}:
                    warnings.filterwarnings("ignore", "Unable to decode time axis")
    
>               with self.roundtrip(expected, save_kwargs=kwargs) as actual:

xarray/tests/test_backends.py:483: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/contextlib.py:81: in __enter__
    return next(self.gen)
xarray/tests/test_backends.py:243: in roundtrip
    self.save(data, path, **save_kwargs)
xarray/tests/test_backends.py:265: in save
    path, engine=self.engine, format=self.file_format, **kwargs
xarray/core/dataset.py:1536: in to_netcdf
    invalid_netcdf=invalid_netcdf,
xarray/backends/api.py:1071: in to_netcdf
    dataset, store, writer, encoding=encoding, unlimited_dims=unlimited_dims
xarray/backends/api.py:1117: in dump_to_store
    store.store(variables, attrs, check_encoding, writer, unlimited_dims=unlimited_dims)
xarray/backends/common.py:293: in store
    variables, attributes = self.encode(variables, attributes)
xarray/backends/common.py:382: in encode
    variables, attributes = cf_encoder(variables, attributes)
xarray/conventions.py:748: in cf_encoder
    new_vars = {k: encode_cf_variable(v, name=k) for k, v in variables.items()}
xarray/conventions.py:748: in <dictcomp>
    new_vars = {k: encode_cf_variable(v, name=k) for k, v in variables.items()}
xarray/conventions.py:250: in encode_cf_variable
    var = coder.encode(var, name=name)
xarray/coding/times.py:446: in encode
    data, encoding.pop("units", None), encoding.pop("calendar", None)
xarray/coding/times.py:419: in encode_cf_datetime
    num = _encode_datetime_with_cftime(dates, units, calendar)
xarray/coding/times.py:366: in _encode_datetime_with_cftime
    return np.vectorize(encode_datetime)(dates)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/numpy/lib/function_base.py:2755: in __call__
    return self._vectorize_call(func=func, args=vargs)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/numpy/lib/function_base.py:2825: in _vectorize_call
    ufunc, otypes = self._get_ufunc_and_otypes(func=func, args=args)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/numpy/lib/function_base.py:2785: in _get_ufunc_and_otypes
    outputs = func(*inputs)
xarray/coding/times.py:364: in encode_datetime
    return np.nan if d is None else cftime.date2num(d, units, calendar)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   AttributeError: 'cftime._cftime.DatetimeProlepticGregorian' object has no attribute 'tzinfo'

cftime/_cftime.pyx:186: AttributeError

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions