forked from pandas-dev/pandas
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtest_timedeltas.py
110 lines (81 loc) · 3.32 KB
/
test_timedeltas.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# -*- coding: utf-8 -*-
import numpy as np
import pytest
import pandas as pd
from pandas.core.arrays import TimedeltaArrayMixin as TimedeltaArray
import pandas.util.testing as tm
class TestTimedeltaArrayConstructor(object):
def test_copy(self):
data = np.array([1, 2, 3], dtype='m8[ns]')
arr = TimedeltaArray(data, copy=False)
assert arr._data is data
arr = TimedeltaArray(data, copy=True)
assert arr._data is not data
assert arr._data.base is not data
class TestTimedeltaArray(object):
def test_from_sequence_dtype(self):
msg = r"Only timedelta64\[ns\] dtype is valid"
with pytest.raises(ValueError, match=msg):
TimedeltaArray._from_sequence([], dtype=object)
with pytest.raises(ValueError, match=msg):
TimedeltaArray([], dtype=object)
def test_abs(self):
vals = np.array([-3600 * 10**9, 'NaT', 7200 * 10**9], dtype='m8[ns]')
arr = TimedeltaArray(vals)
evals = np.array([3600 * 10**9, 'NaT', 7200 * 10**9], dtype='m8[ns]')
expected = TimedeltaArray(evals)
result = abs(arr)
tm.assert_timedelta_array_equal(result, expected)
def test_neg(self):
vals = np.array([-3600 * 10**9, 'NaT', 7200 * 10**9], dtype='m8[ns]')
arr = TimedeltaArray(vals)
evals = np.array([3600 * 10**9, 'NaT', -7200 * 10**9], dtype='m8[ns]')
expected = TimedeltaArray(evals)
result = -arr
tm.assert_timedelta_array_equal(result, expected)
def test_neg_freq(self):
tdi = pd.timedelta_range('2 Days', periods=4, freq='H')
arr = TimedeltaArray(tdi, freq=tdi.freq)
expected = TimedeltaArray(-tdi._data, freq=-tdi.freq)
result = -arr
tm.assert_timedelta_array_equal(result, expected)
@pytest.mark.parametrize("dtype", [
int, np.int32, np.int64, 'uint32', 'uint64',
])
def test_astype_int(self, dtype):
arr = TimedeltaArray._from_sequence([pd.Timedelta('1H'),
pd.Timedelta('2H')])
result = arr.astype(dtype)
if np.dtype(dtype).kind == 'u':
expected_dtype = np.dtype('uint64')
else:
expected_dtype = np.dtype('int64')
expected = arr.astype(expected_dtype)
assert result.dtype == expected_dtype
tm.assert_numpy_array_equal(result, expected)
def test_setitem_clears_freq(self):
a = TimedeltaArray(pd.timedelta_range('1H', periods=2, freq='H'))
a[0] = pd.Timedelta("1H")
assert a.freq is None
class TestReductions(object):
def test_min_max(self):
arr = TimedeltaArray._from_sequence([
'3H', '3H', 'NaT', '2H', '5H', '4H',
])
result = arr.min()
expected = pd.Timedelta('2H')
assert result == expected
result = arr.max()
expected = pd.Timedelta('5H')
assert result == expected
result = arr.min(skipna=False)
assert result is pd.NaT
result = arr.max(skipna=False)
assert result is pd.NaT
@pytest.mark.parametrize('skipna', [True, False])
def test_min_max_empty(self, skipna):
arr = TimedeltaArray._from_sequence([])
result = arr.min(skipna=skipna)
assert result is pd.NaT
result = arr.max(skipna=skipna)
assert result is pd.NaT