Skip to content

Commit dba299b

Browse files
spencerkclarkshoyer
authored andcommitted
Improve test for GH 2649 (#2654)
1 parent a0bbea8 commit dba299b

File tree

1 file changed

+24
-12
lines changed

1 file changed

+24
-12
lines changed

xarray/tests/test_coding_times.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
_import_cftime, cftime_to_nptime, decode_cf_datetime, encode_cf_datetime)
1313
from xarray.conventions import _update_bounds_attributes
1414
from xarray.core.common import contains_cftime_datetimes
15+
from xarray.testing import assert_equal
1516

1617
from . import (
1718
assert_array_equal, has_cftime, has_cftime_or_netCDF4, has_dask,
@@ -752,17 +753,28 @@ def test_encode_cf_datetime_pandas_min():
752753
assert calendar == expected_calendar
753754

754755

755-
def test_encode_cf_datetime_units_with_tz():
756+
@pytest.mark.skipif(not has_cftime_or_netCDF4, reason='cftime not installed')
757+
def test_time_units_with_timezone_roundtrip(calendar):
756758
# Regression test for GH 2649
757-
units = 'days since 2000-01-01T00:00:00-05:00'
758-
calendar = 'proleptic_gregorian'
759-
dates = pd.date_range('2000', periods=3, tz='US/Eastern').values
760-
num, units, calendar = encode_cf_datetime(dates,
761-
units=units,
762-
calendar=calendar)
763-
expected_num = np.array([0, 1, 2])
764759
expected_units = 'days since 2000-01-01T00:00:00-05:00'
765-
expected_calendar = 'proleptic_gregorian'
766-
np.testing.assert_array_equal(num, expected_num)
767-
assert units == expected_units
768-
assert calendar == expected_calendar
760+
expected_num_dates = np.array([1, 2, 3])
761+
dates = decode_cf_datetime(expected_num_dates, expected_units, calendar)
762+
763+
# Check that dates were decoded to UTC; here the hours should all
764+
# equal 5.
765+
result_hours = DataArray(dates).dt.hour
766+
expected_hours = DataArray([5, 5, 5])
767+
assert_equal(result_hours, expected_hours)
768+
769+
# Check that the encoded values are accurately roundtripped.
770+
result_num_dates, result_units, result_calendar = encode_cf_datetime(
771+
dates, expected_units, calendar)
772+
773+
if calendar in _STANDARD_CALENDARS:
774+
np.testing.assert_array_equal(result_num_dates, expected_num_dates)
775+
else:
776+
# cftime datetime arithmetic is not quite exact.
777+
np.testing.assert_allclose(result_num_dates, expected_num_dates)
778+
779+
assert result_units == expected_units
780+
assert result_calendar == calendar

0 commit comments

Comments
 (0)