Skip to content

Commit 1543a75

Browse files
jbrockmendeljreback
authored andcommitted
Continue Collecting Arithmetic Tests (#22267)
1 parent 7390963 commit 1543a75

File tree

8 files changed

+843
-800
lines changed

8 files changed

+843
-800
lines changed

pandas/tests/arithmetic/test_datetime64.py

+116-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import operator
66
from datetime import datetime, timedelta
77
import warnings
8+
from itertools import product, starmap
89

910
import numpy as np
1011
import pytest
@@ -64,6 +65,32 @@ def test_tz_aware_scalar_comparison(self, timestamps):
6465

6566

6667
class TestDatetime64SeriesComparison(object):
68+
# TODO: moved from tests.series.test_operators; needs cleanup
69+
def test_comparison_invalid(self):
70+
# GH#4968
71+
# invalid date/int comparisons
72+
ser = Series(range(5))
73+
ser2 = Series(pd.date_range('20010101', periods=5))
74+
75+
for (x, y) in [(ser, ser2), (ser2, ser)]:
76+
77+
result = x == y
78+
expected = Series([False] * 5)
79+
tm.assert_series_equal(result, expected)
80+
81+
result = x != y
82+
expected = Series([True] * 5)
83+
tm.assert_series_equal(result, expected)
84+
85+
with pytest.raises(TypeError):
86+
x >= y
87+
with pytest.raises(TypeError):
88+
x > y
89+
with pytest.raises(TypeError):
90+
x < y
91+
with pytest.raises(TypeError):
92+
x <= y
93+
6794
@pytest.mark.parametrize('data', [
6895
[Timestamp('2011-01-01'), NaT, Timestamp('2011-01-03')],
6996
[Timedelta('1 days'), NaT, Timedelta('3 days')],
@@ -1360,7 +1387,95 @@ def test_dti_sub_pi(self, dti_freq, pi_freq, op, box):
13601387
with pytest.raises(TypeError):
13611388
op(dti, pi)
13621389

1363-
# -------------------------------------------------------------
1390+
# -------------------------------------------------------------------
1391+
# TODO: Most of this block is moved from series or frame tests, needs
1392+
# cleanup, box-parametrization, and de-duplication
1393+
1394+
@pytest.mark.parametrize('op', [operator.add, operator.sub])
1395+
def test_timedelta64_equal_timedelta_supported_ops(self, op):
1396+
ser = Series([Timestamp('20130301'),
1397+
Timestamp('20130228 23:00:00'),
1398+
Timestamp('20130228 22:00:00'),
1399+
Timestamp('20130228 21:00:00')])
1400+
1401+
intervals = ['D', 'h', 'm', 's', 'us']
1402+
1403+
# TODO: unused
1404+
# npy16_mappings = {'D': 24 * 60 * 60 * 1000000,
1405+
# 'h': 60 * 60 * 1000000,
1406+
# 'm': 60 * 1000000,
1407+
# 's': 1000000,
1408+
# 'us': 1}
1409+
1410+
def timedelta64(*args):
1411+
return sum(starmap(np.timedelta64, zip(args, intervals)))
1412+
1413+
for d, h, m, s, us in product(*([range(2)] * 5)):
1414+
nptd = timedelta64(d, h, m, s, us)
1415+
pytd = timedelta(days=d, hours=h, minutes=m, seconds=s,
1416+
microseconds=us)
1417+
lhs = op(ser, nptd)
1418+
rhs = op(ser, pytd)
1419+
1420+
tm.assert_series_equal(lhs, rhs)
1421+
1422+
def test_ops_nat_mixed_datetime64_timedelta64(self):
1423+
# GH#11349
1424+
timedelta_series = Series([NaT, Timedelta('1s')])
1425+
datetime_series = Series([NaT, Timestamp('19900315')])
1426+
nat_series_dtype_timedelta = Series([NaT, NaT],
1427+
dtype='timedelta64[ns]')
1428+
nat_series_dtype_timestamp = Series([NaT, NaT], dtype='datetime64[ns]')
1429+
single_nat_dtype_datetime = Series([NaT], dtype='datetime64[ns]')
1430+
single_nat_dtype_timedelta = Series([NaT], dtype='timedelta64[ns]')
1431+
1432+
# subtraction
1433+
tm.assert_series_equal(datetime_series - single_nat_dtype_datetime,
1434+
nat_series_dtype_timedelta)
1435+
1436+
tm.assert_series_equal(datetime_series - single_nat_dtype_timedelta,
1437+
nat_series_dtype_timestamp)
1438+
tm.assert_series_equal(-single_nat_dtype_timedelta + datetime_series,
1439+
nat_series_dtype_timestamp)
1440+
1441+
# without a Series wrapping the NaT, it is ambiguous
1442+
# whether it is a datetime64 or timedelta64
1443+
# defaults to interpreting it as timedelta64
1444+
tm.assert_series_equal(nat_series_dtype_timestamp -
1445+
single_nat_dtype_datetime,
1446+
nat_series_dtype_timedelta)
1447+
1448+
tm.assert_series_equal(nat_series_dtype_timestamp -
1449+
single_nat_dtype_timedelta,
1450+
nat_series_dtype_timestamp)
1451+
tm.assert_series_equal(-single_nat_dtype_timedelta +
1452+
nat_series_dtype_timestamp,
1453+
nat_series_dtype_timestamp)
1454+
1455+
with pytest.raises(TypeError):
1456+
timedelta_series - single_nat_dtype_datetime
1457+
1458+
# addition
1459+
tm.assert_series_equal(nat_series_dtype_timestamp +
1460+
single_nat_dtype_timedelta,
1461+
nat_series_dtype_timestamp)
1462+
tm.assert_series_equal(single_nat_dtype_timedelta +
1463+
nat_series_dtype_timestamp,
1464+
nat_series_dtype_timestamp)
1465+
1466+
tm.assert_series_equal(nat_series_dtype_timestamp +
1467+
single_nat_dtype_timedelta,
1468+
nat_series_dtype_timestamp)
1469+
tm.assert_series_equal(single_nat_dtype_timedelta +
1470+
nat_series_dtype_timestamp,
1471+
nat_series_dtype_timestamp)
1472+
1473+
tm.assert_series_equal(nat_series_dtype_timedelta +
1474+
single_nat_dtype_datetime,
1475+
nat_series_dtype_timestamp)
1476+
tm.assert_series_equal(single_nat_dtype_datetime +
1477+
nat_series_dtype_timedelta,
1478+
nat_series_dtype_timestamp)
13641479

13651480
def test_ufunc_coercions(self):
13661481
idx = date_range('2011-01-01', periods=3, freq='2D', name='x')

0 commit comments

Comments
 (0)