@@ -1867,7 +1867,10 @@ def test_decode_timedelta_via_units(
1867
1867
var = Variable (["time" ], timedeltas , encoding = attrs )
1868
1868
encoded = Variable (["time" ], np .array ([0 , 1 , 2 ]), attrs = attrs )
1869
1869
if warns :
1870
- with pytest .warns (FutureWarning , match = "decode_timedelta" ):
1870
+ with pytest .warns (
1871
+ FutureWarning ,
1872
+ match = "xarray will not decode the variable 'foo' into a timedelta64 dtype" ,
1873
+ ):
1871
1874
decoded = conventions .decode_cf_variable (
1872
1875
"foo" ,
1873
1876
encoded ,
@@ -1886,45 +1889,56 @@ def test_decode_timedelta_via_units(
1886
1889
1887
1890
1888
1891
_DECODE_TIMEDELTA_VIA_DTYPE_TESTS = {
1889
- "default" : (True , None , np .dtype ("timedelta64[ns]" )),
1890
- "decode_timedelta=False" : (True , False , np .dtype ("int64" )),
1891
- "decode_timedelta=True" : (True , True , np .dtype ("timedelta64[ns]" )),
1892
+ "default" : (True , None , "ns" , np .dtype ("timedelta64[ns]" )),
1893
+ "decode_timedelta=False" : (True , False , "ns" , np .dtype ("int64" )),
1894
+ "decode_timedelta=True" : (True , True , "ns" , np .dtype ("timedelta64[ns]" )),
1895
+ "use-original-units" : (True , True , "s" , np .dtype ("timedelta64[s]" )),
1892
1896
"inherit-time_unit-from-decode_times" : (
1893
1897
CFDatetimeCoder (time_unit = "s" ),
1894
1898
None ,
1899
+ "ns" ,
1895
1900
np .dtype ("timedelta64[s]" ),
1896
1901
),
1897
1902
"set-time_unit-via-CFTimedeltaCoder-decode_times=True" : (
1898
1903
True ,
1899
1904
CFTimedeltaCoder (time_unit = "s" ),
1905
+ "ns" ,
1900
1906
np .dtype ("timedelta64[s]" ),
1901
1907
),
1902
1908
"set-time_unit-via-CFTimedeltaCoder-decode_times=False" : (
1903
1909
False ,
1904
1910
CFTimedeltaCoder (time_unit = "s" ),
1911
+ "ns" ,
1905
1912
np .dtype ("timedelta64[s]" ),
1906
1913
),
1907
1914
"override-time_unit-from-decode_times" : (
1908
1915
CFDatetimeCoder (time_unit = "ns" ),
1909
1916
CFTimedeltaCoder (time_unit = "s" ),
1917
+ "ns" ,
1910
1918
np .dtype ("timedelta64[s]" ),
1911
1919
),
1920
+ "decode-different-units" : (
1921
+ True ,
1922
+ CFTimedeltaCoder (time_unit = "us" ),
1923
+ "s" ,
1924
+ np .dtype ("timedelta64[us]" ),
1925
+ ),
1912
1926
}
1913
1927
1914
1928
1915
1929
@pytest .mark .parametrize (
1916
- ("decode_times" , "decode_timedelta" , "expected_dtype" ),
1930
+ ("decode_times" , "decode_timedelta" , "original_unit" , " expected_dtype" ),
1917
1931
list (_DECODE_TIMEDELTA_VIA_DTYPE_TESTS .values ()),
1918
1932
ids = list (_DECODE_TIMEDELTA_VIA_DTYPE_TESTS .keys ()),
1919
1933
)
1920
1934
def test_decode_timedelta_via_dtype (
1921
- decode_times , decode_timedelta , expected_dtype
1935
+ decode_times , decode_timedelta , original_unit , expected_dtype
1922
1936
) -> None :
1923
- timedeltas = pd .timedelta_range (0 , freq = "D" , periods = 3 )
1937
+ timedeltas = pd .timedelta_range (0 , freq = "D" , periods = 3 , unit = original_unit ) # type: ignore[call-arg]
1924
1938
encoding = {"units" : "days" }
1925
1939
var = Variable (["time" ], timedeltas , encoding = encoding )
1926
1940
encoded = conventions .encode_cf_variable (var )
1927
- assert encoded .attrs ["dtype" ] == "timedelta64[ns ]"
1941
+ assert encoded .attrs ["dtype" ] == f "timedelta64[{ original_unit } ]"
1928
1942
assert encoded .attrs ["units" ] == encoding ["units" ]
1929
1943
decoded = conventions .decode_cf_variable (
1930
1944
"foo" , encoded , decode_times = decode_times , decode_timedelta = decode_timedelta
0 commit comments