summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numpy/core/tests/test_datetime.py457
1 files changed, 254 insertions, 203 deletions
diff --git a/numpy/core/tests/test_datetime.py b/numpy/core/tests/test_datetime.py
index ae4b99056..7e4e48963 100644
--- a/numpy/core/tests/test_datetime.py
+++ b/numpy/core/tests/test_datetime.py
@@ -328,16 +328,20 @@ class TestDateTime(TestCase):
np.array('10000-04-27T00:00:00Z', dtype=dt2))
assert_equal(np.array('today', dtype=dt1),
np.array('today', dtype=dt2))
+ assert_equal(np.datetime64('1932-02-17', unit1),
+ np.datetime64('1932-02-17T00:00:00Z', unit2))
+ assert_equal(np.datetime64('10000-04-27', unit1),
+ np.datetime64('10000-04-27T00:00:00Z', unit2))
+ assert_equal(np.datetime64('today', unit1),
+ np.datetime64('today', unit2))
# Shouldn't be able to compare datetime and timedelta
# TODO: Changing to 'same_kind' or 'safe' casting in the ufuncs by
# default is needed to properly catch this kind of thing...
- #a = np.array('2012-12-21', dtype='M8[D]')
- #b = np.array(3, dtype='m8[D]')
+ a = np.array('2012-12-21', dtype='M8[D]')
+ b = np.array(3, dtype='m8[D]')
#assert_raises(TypeError, np.less, a, b)
- #a = np.array('2012-12-21', dtype='M8[D]')
- #b = np.array(3, dtype='m8[D]')
- #assert_raises(TypeError, np.less, a, b, casting='same_kind')
+ assert_raises(TypeError, np.less, a, b, casting='same_kind')
def test_datetime_like(self):
a = np.array([3], dtype='m8[4D]//6')
@@ -351,210 +355,253 @@ class TestDateTime(TestCase):
assert_equal(np.empty_like(b).dtype, b.dtype)
def test_datetime_unary(self):
- tda = np.array(3, dtype='m8[D]')
- tdb = np.array(-3, dtype='m8[D]')
- tdzero = np.array(0, dtype='m8[D]')
- tdone = np.array(1, dtype='m8[D]')
- tdmone = np.array(-1, dtype='m8[D]')
-
- # negative ufunc
- assert_equal(-tdb, tda)
- assert_equal((-tdb).dtype, tda.dtype)
- assert_equal(np.negative(tdb), tda)
- assert_equal(np.negative(tdb).dtype, tda.dtype)
-
- # absolute ufunc
- assert_equal(np.absolute(tdb), tda)
- assert_equal(np.absolute(tdb).dtype, tda.dtype)
-
- # sign ufunc
- assert_equal(np.sign(tda), tdone)
- assert_equal(np.sign(tdb), tdmone)
- assert_equal(np.sign(tdzero), tdzero)
- assert_equal(np.sign(tda).dtype, tda.dtype)
+ for tda, tdb, tdzero, tdone, tdmone in \
+ [
+ # One-dimensional arrays
+ (np.array([3], dtype='m8[D]'),
+ np.array([-3], dtype='m8[D]'),
+ np.array([0], dtype='m8[D]'),
+ np.array([1], dtype='m8[D]'),
+ np.array([-1], dtype='m8[D]')),
+ # NumPy scalars
+ (np.timedelta64(3, '[D]'),
+ np.timedelta64(-3, '[D]'),
+ np.timedelta64(0, '[D]'),
+ np.timedelta64(1, '[D]'),
+ np.timedelta64(-1, '[D]'))]:
+ # negative ufunc
+ assert_equal(-tdb, tda)
+ assert_equal((-tdb).dtype, tda.dtype)
+ assert_equal(np.negative(tdb), tda)
+ assert_equal(np.negative(tdb).dtype, tda.dtype)
+
+ # absolute ufunc
+ assert_equal(np.absolute(tdb), tda)
+ assert_equal(np.absolute(tdb).dtype, tda.dtype)
+
+ # sign ufunc
+ assert_equal(np.sign(tda), tdone)
+ assert_equal(np.sign(tdb), tdmone)
+ assert_equal(np.sign(tdzero), tdzero)
+ assert_equal(np.sign(tda).dtype, tda.dtype)
def test_datetime_add(self):
- dta = np.array('2012-12-21', dtype='M8[D]')
- dtb = np.array('2012-12-24', dtype='M8[D]')
- dtc = np.array('1940-12-24', dtype='M8[D]')
- dtnat = np.array('NaT', dtype='M8[D]')
- tda = np.array(3, dtype='m8[D]')
- tdb = np.array(11, dtype='m8[h]')
- tdc = np.array(3*24 + 11, dtype='m8[h]')
-
- # m8 + m8
- assert_equal(tda + tdb, tdc)
- assert_equal((tda + tdb).dtype, np.dtype('m8[h]'))
- # m8 + bool
- assert_equal(tdb + True, tdb + 1)
- assert_equal((tdb + True).dtype, np.dtype('m8[h]'))
- # m8 + int
- assert_equal(tdb + 3*24, tdc)
- assert_equal((tdb + 3*24).dtype, np.dtype('m8[h]'))
- # bool + m8
- assert_equal(False + tdb, tdb)
- assert_equal((False + tdb).dtype, np.dtype('m8[h]'))
- # int + m8
- assert_equal(3*24 + tdb, tdc)
- assert_equal((3*24 + tdb).dtype, np.dtype('m8[h]'))
- # M8 + bool
- assert_equal(dta + True, dta + 1)
- assert_equal(dtnat + True, dtnat)
- assert_equal((dta + True).dtype, np.dtype('M8[D]'))
- # M8 + int
- assert_equal(dta + 3, dtb)
- assert_equal(dtnat + 3, dtnat)
- assert_equal((dta + 3).dtype, np.dtype('M8[D]'))
- # bool + M8
- assert_equal(False + dta, dta)
- assert_equal(False + dtnat, dtnat)
- assert_equal((False + dta).dtype, np.dtype('M8[D]'))
- # int + M8
- assert_equal(3 + dta, dtb)
- assert_equal(3 + dtnat, dtnat)
- assert_equal((3 + dta).dtype, np.dtype('M8[D]'))
- # M8 + m8
- assert_equal(dta + tda, dtb)
- assert_equal(dtnat + tda, dtnat)
- assert_equal((dta + tda).dtype, np.dtype('M8[D]'))
- # m8 + M8
- assert_equal(tda + dta, dtb)
- assert_equal(tda + dtnat, dtnat)
- assert_equal((tda + dta).dtype, np.dtype('M8[D]'))
-
- # In M8 + m8, the M8 controls the result type
- assert_equal(dta + tdb, dta)
- assert_equal((dta + tdb).dtype, np.dtype('M8[D]'))
- assert_equal(dtc + tdb, dtc)
- assert_equal((dtc + tdb).dtype, np.dtype('M8[D]'))
- assert_equal(tdb + dta, dta)
- assert_equal((tdb + dta).dtype, np.dtype('M8[D]'))
- assert_equal(tdb + dtc, dtc)
- assert_equal((tdb + dtc).dtype, np.dtype('M8[D]'))
-
- # M8 + M8
- assert_raises(TypeError, np.add, dta, dtb)
+ for dta, dtb, dtc, dtnat, tda, tdb, tdc in \
+ [
+ # One-dimensional arrays
+ (np.array(['2012-12-21'], dtype='M8[D]'),
+ np.array(['2012-12-24'], dtype='M8[D]'),
+ np.array(['1940-12-24'], dtype='M8[D]'),
+ np.array(['NaT'], dtype='M8[D]'),
+ np.array([3], dtype='m8[D]'),
+ np.array([11], dtype='m8[h]'),
+ np.array([3*24 + 11], dtype='m8[h]')),
+ # NumPy scalars
+ (np.datetime64('2012-12-21', '[D]'),
+ np.datetime64('2012-12-24', '[D]'),
+ np.datetime64('1940-12-24', '[D]'),
+ np.datetime64('NaT', '[D]'),
+ np.timedelta64(3, '[D]'),
+ np.timedelta64(11, '[h]'),
+ np.timedelta64(3*24 + 11, '[h]'))]:
+ # m8 + m8
+ assert_equal(tda + tdb, tdc)
+ assert_equal((tda + tdb).dtype, np.dtype('m8[h]'))
+ # m8 + bool
+ assert_equal(tdb + True, tdb + 1)
+ assert_equal((tdb + True).dtype, np.dtype('m8[h]'))
+ # m8 + int
+ assert_equal(tdb + 3*24, tdc)
+ assert_equal((tdb + 3*24).dtype, np.dtype('m8[h]'))
+ # bool + m8
+ assert_equal(False + tdb, tdb)
+ assert_equal((False + tdb).dtype, np.dtype('m8[h]'))
+ # int + m8
+ assert_equal(3*24 + tdb, tdc)
+ assert_equal((3*24 + tdb).dtype, np.dtype('m8[h]'))
+ # M8 + bool
+ assert_equal(dta + True, dta + 1)
+ assert_equal(dtnat + True, dtnat)
+ assert_equal((dta + True).dtype, np.dtype('M8[D]'))
+ # M8 + int
+ assert_equal(dta + 3, dtb)
+ assert_equal(dtnat + 3, dtnat)
+ assert_equal((dta + 3).dtype, np.dtype('M8[D]'))
+ # bool + M8
+ assert_equal(False + dta, dta)
+ assert_equal(False + dtnat, dtnat)
+ assert_equal((False + dta).dtype, np.dtype('M8[D]'))
+ # int + M8
+ assert_equal(3 + dta, dtb)
+ assert_equal(3 + dtnat, dtnat)
+ assert_equal((3 + dta).dtype, np.dtype('M8[D]'))
+ # M8 + m8
+ assert_equal(dta + tda, dtb)
+ assert_equal(dtnat + tda, dtnat)
+ assert_equal((dta + tda).dtype, np.dtype('M8[D]'))
+ # m8 + M8
+ assert_equal(tda + dta, dtb)
+ assert_equal(tda + dtnat, dtnat)
+ assert_equal((tda + dta).dtype, np.dtype('M8[D]'))
+
+ # In M8 + m8, the M8 controls the result type
+ assert_equal(dta + tdb, dta)
+ assert_equal((dta + tdb).dtype, np.dtype('M8[D]'))
+ assert_equal(dtc + tdb, dtc)
+ assert_equal((dtc + tdb).dtype, np.dtype('M8[D]'))
+ assert_equal(tdb + dta, dta)
+ assert_equal((tdb + dta).dtype, np.dtype('M8[D]'))
+ assert_equal(tdb + dtc, dtc)
+ assert_equal((tdb + dtc).dtype, np.dtype('M8[D]'))
+
+ # M8 + M8
+ assert_raises(TypeError, np.add, dta, dtb)
def test_datetime_subtract(self):
- dta = np.array('2012-12-21', dtype='M8[D]')
- dtb = np.array('2012-12-24', dtype='M8[D]')
- dtc = np.array('1940-12-24', dtype='M8[D]')
- dtd = np.array('1940-12-24', dtype='M8[h]')
- dtnat = np.array('NaT', dtype='M8[D]')
- tda = np.array(3, dtype='m8[D]')
- tdb = np.array(11, dtype='m8[h]')
- tdc = np.array(3*24 - 11, dtype='m8[h]')
-
- # m8 - m8
- assert_equal(tda - tdb, tdc)
- assert_equal((tda - tdb).dtype, np.dtype('m8[h]'))
- assert_equal(tdb - tda, -tdc)
- assert_equal((tdb - tda).dtype, np.dtype('m8[h]'))
- # m8 - bool
- assert_equal(tdc - True, tdc - 1)
- assert_equal((tdc - True).dtype, np.dtype('m8[h]'))
- # m8 - int
- assert_equal(tdc - 3*24, -tdb)
- assert_equal((tdc - 3*24).dtype, np.dtype('m8[h]'))
- # int - m8
- assert_equal(False - tdb, -tdb)
- assert_equal((False - tdb).dtype, np.dtype('m8[h]'))
- # int - m8
- assert_equal(3*24 - tdb, tdc)
- assert_equal((3*24 - tdb).dtype, np.dtype('m8[h]'))
- # M8 - bool
- assert_equal(dtb - True, dtb - 1)
- assert_equal(dtnat - True, dtnat)
- assert_equal((dtb - True).dtype, np.dtype('M8[D]'))
- # M8 - int
- assert_equal(dtb - 3, dta)
- assert_equal(dtnat - 3, dtnat)
- assert_equal((dtb - 3).dtype, np.dtype('M8[D]'))
- # M8 - m8
- assert_equal(dtb - tda, dta)
- assert_equal(dtnat - tda, dtnat)
- assert_equal((dtb - tda).dtype, np.dtype('M8[D]'))
-
- # In M8 - m8, the M8 controls the result type
- assert_equal(dta - tdb, dta)
- assert_equal((dta - tdb).dtype, np.dtype('M8[D]'))
- assert_equal(dtc - tdb, dtc)
- assert_equal((dtc - tdb).dtype, np.dtype('M8[D]'))
-
- # M8 - M8 with different metadata
- assert_raises(TypeError, np.subtract, dtc, dtd)
- # m8 - M8
- assert_raises(TypeError, np.subtract, tda, dta)
- # bool - M8
- assert_raises(TypeError, np.subtract, False, dta)
- # int - M8
- assert_raises(TypeError, np.subtract, 3, dta)
+ for dta, dtb, dtc, dtd, dtnat, tda, tdb, tdc in \
+ [
+ # One-dimensional arrays
+ (np.array(['2012-12-21'], dtype='M8[D]'),
+ np.array(['2012-12-24'], dtype='M8[D]'),
+ np.array(['1940-12-24'], dtype='M8[D]'),
+ np.array(['1940-12-24'], dtype='M8[h]'),
+ np.array(['NaT'], dtype='M8[D]'),
+ np.array([3], dtype='m8[D]'),
+ np.array([11], dtype='m8[h]'),
+ np.array([3*24 - 11], dtype='m8[h]')),
+ # NumPy scalars
+ (np.datetime64('2012-12-21', '[D]'),
+ np.datetime64('2012-12-24', '[D]'),
+ np.datetime64('1940-12-24', '[D]'),
+ np.datetime64('1940-12-24', '[h]'),
+ np.datetime64('NaT', '[D]'),
+ np.timedelta64(3, '[D]'),
+ np.timedelta64(11, '[h]'),
+ np.timedelta64(3*24 - 11, '[h]'))]:
+ # m8 - m8
+ assert_equal(tda - tdb, tdc)
+ assert_equal((tda - tdb).dtype, np.dtype('m8[h]'))
+ assert_equal(tdb - tda, -tdc)
+ assert_equal((tdb - tda).dtype, np.dtype('m8[h]'))
+ # m8 - bool
+ assert_equal(tdc - True, tdc - 1)
+ assert_equal((tdc - True).dtype, np.dtype('m8[h]'))
+ # m8 - int
+ assert_equal(tdc - 3*24, -tdb)
+ assert_equal((tdc - 3*24).dtype, np.dtype('m8[h]'))
+ # int - m8
+ assert_equal(False - tdb, -tdb)
+ assert_equal((False - tdb).dtype, np.dtype('m8[h]'))
+ # int - m8
+ assert_equal(3*24 - tdb, tdc)
+ assert_equal((3*24 - tdb).dtype, np.dtype('m8[h]'))
+ # M8 - bool
+ assert_equal(dtb - True, dtb - 1)
+ assert_equal(dtnat - True, dtnat)
+ assert_equal((dtb - True).dtype, np.dtype('M8[D]'))
+ # M8 - int
+ assert_equal(dtb - 3, dta)
+ assert_equal(dtnat - 3, dtnat)
+ assert_equal((dtb - 3).dtype, np.dtype('M8[D]'))
+ # M8 - m8
+ assert_equal(dtb - tda, dta)
+ assert_equal(dtnat - tda, dtnat)
+ assert_equal((dtb - tda).dtype, np.dtype('M8[D]'))
+
+ # In M8 - m8, the M8 controls the result type
+ assert_equal(dta - tdb, dta)
+ assert_equal((dta - tdb).dtype, np.dtype('M8[D]'))
+ assert_equal(dtc - tdb, dtc)
+ assert_equal((dtc - tdb).dtype, np.dtype('M8[D]'))
+
+ # M8 - M8 with different metadata
+ assert_raises(TypeError, np.subtract, dtc, dtd)
+ # m8 - M8
+ assert_raises(TypeError, np.subtract, tda, dta)
+ # bool - M8
+ assert_raises(TypeError, np.subtract, False, dta)
+ # int - M8
+ assert_raises(TypeError, np.subtract, 3, dta)
def test_datetime_multiply(self):
- dta = np.array('2012-12-21', dtype='M8[D]')
- tda = np.array(6, dtype='m8[h]')
- tdb = np.array(9, dtype='m8[h]')
- tdc = np.array(12, dtype='m8[h]')
-
- # m8 * int
- assert_equal(tda * 2, tdc)
- assert_equal((tda * 2).dtype, np.dtype('m8[h]'))
- # int * m8
- assert_equal(2 * tda, tdc)
- assert_equal((2 * tda).dtype, np.dtype('m8[h]'))
- # m8 * float
- assert_equal(tda * 1.5, tdb)
- assert_equal((tda * 1.5).dtype, np.dtype('m8[h]'))
- # float * m8
- assert_equal(1.5 * tda, tdb)
- assert_equal((1.5 * tda).dtype, np.dtype('m8[h]'))
-
- # m8 * m8
- assert_raises(TypeError, np.multiply, tda, tdb)
- # m8 * M8
- assert_raises(TypeError, np.multiply, dta, tda)
- # M8 * m8
- assert_raises(TypeError, np.multiply, tda, dta)
- # M8 * int
- assert_raises(TypeError, np.multiply, dta, 2)
- # int * M8
- assert_raises(TypeError, np.multiply, 2, dta)
- # M8 * float
- assert_raises(TypeError, np.multiply, dta, 1.5)
- # float * M8
- assert_raises(TypeError, np.multiply, 1.5, dta)
+ for dta, tda, tdb, tdc in \
+ [
+ # One-dimensional arrays
+ (np.array(['2012-12-21'], dtype='M8[D]'),
+ np.array([6], dtype='m8[h]'),
+ np.array([9], dtype='m8[h]'),
+ np.array([12], dtype='m8[h]')),
+ # NumPy scalars
+ (np.datetime64('2012-12-21', '[D]'),
+ np.timedelta64(6, '[h]'),
+ np.timedelta64(9, '[h]'),
+ np.timedelta64(12, '[h]'))]:
+ # m8 * int
+ assert_equal(tda * 2, tdc)
+ assert_equal((tda * 2).dtype, np.dtype('m8[h]'))
+ # int * m8
+ assert_equal(2 * tda, tdc)
+ assert_equal((2 * tda).dtype, np.dtype('m8[h]'))
+ # m8 * float
+ assert_equal(tda * 1.5, tdb)
+ assert_equal((tda * 1.5).dtype, np.dtype('m8[h]'))
+ # float * m8
+ assert_equal(1.5 * tda, tdb)
+ assert_equal((1.5 * tda).dtype, np.dtype('m8[h]'))
+
+ # m8 * m8
+ assert_raises(TypeError, np.multiply, tda, tdb)
+ # m8 * M8
+ assert_raises(TypeError, np.multiply, dta, tda)
+ # M8 * m8
+ assert_raises(TypeError, np.multiply, tda, dta)
+ # M8 * int
+ assert_raises(TypeError, np.multiply, dta, 2)
+ # int * M8
+ assert_raises(TypeError, np.multiply, 2, dta)
+ # M8 * float
+ assert_raises(TypeError, np.multiply, dta, 1.5)
+ # float * M8
+ assert_raises(TypeError, np.multiply, 1.5, dta)
def test_datetime_divide(self):
- dta = np.array('2012-12-21', dtype='M8[D]')
- tda = np.array(6, dtype='m8[h]')
- tdb = np.array(9, dtype='m8[h]')
- tdc = np.array(12, dtype='m8[h]')
-
- # m8 / int
- assert_equal(tdc / 2, tda)
- assert_equal((tdc / 2).dtype, np.dtype('m8[h]'))
- # m8 / float
- assert_equal(tda / 0.5, tdc)
- assert_equal((tda / 0.5).dtype, np.dtype('m8[h]'))
-
- # int / m8
- assert_raises(TypeError, np.divide, 2, tdb)
- # float / m8
- assert_raises(TypeError, np.divide, 0.5, tdb)
- # m8 / m8
- assert_raises(TypeError, np.divide, tda, tdb)
- # m8 / M8
- assert_raises(TypeError, np.divide, dta, tda)
- # M8 / m8
- assert_raises(TypeError, np.divide, tda, dta)
- # M8 / int
- assert_raises(TypeError, np.divide, dta, 2)
- # int / M8
- assert_raises(TypeError, np.divide, 2, dta)
- # M8 / float
- assert_raises(TypeError, np.divide, dta, 1.5)
- # float / M8
- assert_raises(TypeError, np.divide, 1.5, dta)
+ for dta, tda, tdb, tdc in \
+ [
+ # One-dimensional arrays
+ (np.array(['2012-12-21'], dtype='M8[D]'),
+ np.array([6], dtype='m8[h]'),
+ np.array([9], dtype='m8[h]'),
+ np.array([12], dtype='m8[h]')),
+ # NumPy scalars
+ (np.datetime64('2012-12-21', '[D]'),
+ np.timedelta64(6, '[h]'),
+ np.timedelta64(9, '[h]'),
+ np.timedelta64(12, '[h]'))]:
+ # m8 / int
+ assert_equal(tdc / 2, tda)
+ assert_equal((tdc / 2).dtype, np.dtype('m8[h]'))
+ # m8 / float
+ assert_equal(tda / 0.5, tdc)
+ assert_equal((tda / 0.5).dtype, np.dtype('m8[h]'))
+
+ # int / m8
+ assert_raises(TypeError, np.divide, 2, tdb)
+ # float / m8
+ assert_raises(TypeError, np.divide, 0.5, tdb)
+ # m8 / m8
+ assert_raises(TypeError, np.divide, tda, tdb)
+ # m8 / M8
+ assert_raises(TypeError, np.divide, dta, tda)
+ # M8 / m8
+ assert_raises(TypeError, np.divide, tda, dta)
+ # M8 / int
+ assert_raises(TypeError, np.divide, dta, 2)
+ # int / M8
+ assert_raises(TypeError, np.divide, 2, dta)
+ # M8 / float
+ assert_raises(TypeError, np.divide, dta, 1.5)
+ # float / M8
+ assert_raises(TypeError, np.divide, 1.5, dta)
def test_datetime_minmax(self):
# The metadata of the result should become the GCD
@@ -600,12 +647,16 @@ class TestDateTime(TestCase):
#
# TODO: Allowing unsafe casting by
# default in ufuncs strikes again... :(
- #a = np.array(3, dtype='m8[h]')
- #b = np.array('1999-03-12T12Z', dtype='M8[s]')
+ a = np.array(3, dtype='m8[h]')
+ b = np.array('1999-03-12T12Z', dtype='M8[s]')
#assert_raises(TypeError, np.minimum, a, b)
#assert_raises(TypeError, np.maximum, a, b)
#assert_raises(TypeError, np.fmin, a, b)
#assert_raises(TypeError, np.fmax, a, b)
+ assert_raises(TypeError, np.minimum, a, b, casting='same_kind')
+ assert_raises(TypeError, np.maximum, a, b, casting='same_kind')
+ assert_raises(TypeError, np.fmin, a, b, casting='same_kind')
+ assert_raises(TypeError, np.fmax, a, b, casting='same_kind')
def test_hours(self):
t = np.ones(3, dtype='M8[s]')