7
7
import pandas ._testing as tm
8
8
9
9
10
+ def astype_non_nano (dti_nano , unit ):
11
+ # TODO(2.0): remove once DTI/DTA.astype supports non-nano
12
+ if unit == "ns" :
13
+ return dti_nano
14
+
15
+ dta_nano = dti_nano ._data
16
+ arr_nano = dta_nano ._ndarray
17
+
18
+ arr = arr_nano .astype (f"M8[{ unit } ]" )
19
+ if dti_nano .tz is None :
20
+ dtype = arr .dtype
21
+ else :
22
+ dtype = type (dti_nano .dtype )(tz = dti_nano .tz , unit = unit )
23
+ dta = type (dta_nano )._simple_new (arr , dtype = dtype )
24
+ dti = DatetimeIndex (dta , name = dti_nano .name )
25
+ assert dti .dtype == dtype
26
+ return dti
27
+
28
+
10
29
@pytest .mark .filterwarnings ("ignore::DeprecationWarning" )
11
30
@pytest .mark .parametrize ("tz" , [None , "Asia/Shanghai" , "Europe/Berlin" ])
12
31
@pytest .mark .parametrize ("name" , [None , "my_dti" ])
13
- def test_dti_snap (name , tz ):
32
+ @pytest .mark .parametrize ("unit" , ["ns" , "us" , "ms" , "s" ])
33
+ def test_dti_snap (name , tz , unit ):
14
34
dti = DatetimeIndex (
15
35
[
16
36
"1/1/2002" ,
@@ -25,10 +45,12 @@ def test_dti_snap(name, tz):
25
45
tz = tz ,
26
46
freq = "D" ,
27
47
)
48
+ dti = astype_non_nano (dti , unit )
28
49
29
50
result = dti .snap (freq = "W-MON" )
30
51
expected = date_range ("12/31/2001" , "1/7/2002" , name = name , tz = tz , freq = "w-mon" )
31
52
expected = expected .repeat ([3 , 4 ])
53
+ expected = astype_non_nano (expected , unit )
32
54
tm .assert_index_equal (result , expected )
33
55
assert result .tz == expected .tz
34
56
assert result .freq is None
@@ -38,6 +60,7 @@ def test_dti_snap(name, tz):
38
60
39
61
expected = date_range ("1/1/2002" , "1/7/2002" , name = name , tz = tz , freq = "b" )
40
62
expected = expected .repeat ([1 , 1 , 1 , 2 , 2 ])
63
+ expected = astype_non_nano (expected , unit )
41
64
tm .assert_index_equal (result , expected )
42
65
assert result .tz == expected .tz
43
66
assert result .freq is None
0 commit comments