6
6
import pandas as pd
7
7
from pandas import Timedelta
8
8
import pandas ._testing as tm
9
- from pandas .core .arrays import TimedeltaArray
9
+ from pandas .core .arrays import (
10
+ DatetimeArray ,
11
+ TimedeltaArray ,
12
+ )
10
13
11
14
12
15
class TestNonNano :
@@ -25,6 +28,11 @@ def reso(self, unit):
25
28
else :
26
29
raise NotImplementedError (unit )
27
30
31
+ @pytest .fixture
32
+ def tda (self , unit ):
33
+ arr = np .arange (5 , dtype = np .int64 ).view (f"m8[{ unit } ]" )
34
+ return TimedeltaArray ._simple_new (arr , dtype = arr .dtype )
35
+
28
36
def test_non_nano (self , unit , reso ):
29
37
arr = np .arange (5 , dtype = np .int64 ).view (f"m8[{ unit } ]" )
30
38
tda = TimedeltaArray ._simple_new (arr , dtype = arr .dtype )
@@ -33,39 +41,55 @@ def test_non_nano(self, unit, reso):
33
41
assert tda [0 ]._reso == reso
34
42
35
43
@pytest .mark .parametrize ("field" , TimedeltaArray ._field_ops )
36
- def test_fields (self , unit , field ):
37
- arr = np .arange (5 , dtype = np .int64 ).view (f"m8[{ unit } ]" )
38
- tda = TimedeltaArray ._simple_new (arr , dtype = arr .dtype )
39
-
40
- as_nano = arr .astype ("m8[ns]" )
44
+ def test_fields (self , tda , field ):
45
+ as_nano = tda ._ndarray .astype ("m8[ns]" )
41
46
tda_nano = TimedeltaArray ._simple_new (as_nano , dtype = as_nano .dtype )
42
47
43
48
result = getattr (tda , field )
44
49
expected = getattr (tda_nano , field )
45
50
tm .assert_numpy_array_equal (result , expected )
46
51
47
- def test_to_pytimedelta (self , unit ):
48
- arr = np .arange (5 , dtype = np .int64 ).view (f"m8[{ unit } ]" )
49
- tda = TimedeltaArray ._simple_new (arr , dtype = arr .dtype )
50
-
51
- as_nano = arr .astype ("m8[ns]" )
52
+ def test_to_pytimedelta (self , tda ):
53
+ as_nano = tda ._ndarray .astype ("m8[ns]" )
52
54
tda_nano = TimedeltaArray ._simple_new (as_nano , dtype = as_nano .dtype )
53
55
54
56
result = tda .to_pytimedelta ()
55
57
expected = tda_nano .to_pytimedelta ()
56
58
tm .assert_numpy_array_equal (result , expected )
57
59
58
- def test_total_seconds (self , unit ):
59
- arr = np .arange (5 , dtype = np .int64 ).view (f"m8[{ unit } ]" )
60
- tda = TimedeltaArray ._simple_new (arr , dtype = arr .dtype )
61
-
62
- as_nano = arr .astype ("m8[ns]" )
60
+ def test_total_seconds (self , unit , tda ):
61
+ as_nano = tda ._ndarray .astype ("m8[ns]" )
63
62
tda_nano = TimedeltaArray ._simple_new (as_nano , dtype = as_nano .dtype )
64
63
65
64
result = tda .total_seconds ()
66
65
expected = tda_nano .total_seconds ()
67
66
tm .assert_numpy_array_equal (result , expected )
68
67
68
+ @pytest .mark .parametrize (
69
+ "nat" , [np .datetime64 ("NaT" , "ns" ), np .datetime64 ("NaT" , "us" )]
70
+ )
71
+ def test_add_nat_datetimelike_scalar (self , nat , tda ):
72
+ result = tda + nat
73
+ assert isinstance (result , DatetimeArray )
74
+ assert result ._reso == tda ._reso
75
+ assert result .isna ().all ()
76
+
77
+ result = nat + tda
78
+ assert isinstance (result , DatetimeArray )
79
+ assert result ._reso == tda ._reso
80
+ assert result .isna ().all ()
81
+
82
+ def test_add_pdnat (self , tda ):
83
+ result = tda + pd .NaT
84
+ assert isinstance (result , TimedeltaArray )
85
+ assert result ._reso == tda ._reso
86
+ assert result .isna ().all ()
87
+
88
+ result = pd .NaT + tda
89
+ assert isinstance (result , TimedeltaArray )
90
+ assert result ._reso == tda ._reso
91
+ assert result .isna ().all ()
92
+
69
93
70
94
class TestTimedeltaArray :
71
95
@pytest .mark .parametrize ("dtype" , [int , np .int32 , np .int64 , "uint32" , "uint64" ])
0 commit comments