def test_is_dtype(self): self.assertTrue(DatetimeTZDtype.is_dtype(self.dtype)) self.assertTrue(DatetimeTZDtype.is_dtype('datetime64[ns, US/Eastern]')) self.assertFalse(DatetimeTZDtype.is_dtype('foo')) self.assertTrue(DatetimeTZDtype.is_dtype(DatetimeTZDtype( 'ns', 'US/Pacific'))) self.assertFalse(DatetimeTZDtype.is_dtype(np.float64))
def test_datetimetz_dtype(self): for dtype in ['datetime64[ns, US/Eastern]', 'datetime64[ns, Asia/Tokyo]', 'datetime64[ns, UTC]']: self.assertIs(pandas_dtype(dtype), DatetimeTZDtype(dtype)) self.assertEqual(pandas_dtype(dtype), DatetimeTZDtype(dtype)) self.assertEqual(pandas_dtype(dtype), dtype)
def test_construction_from_string(self): result = DatetimeTZDtype('datetime64[ns, US/Eastern]') self.assertTrue(is_dtype_equal(self.dtype, result)) result = DatetimeTZDtype.construct_from_string( 'datetime64[ns, US/Eastern]') self.assertTrue(is_dtype_equal(self.dtype, result)) self.assertRaises(TypeError, lambda: DatetimeTZDtype.construct_from_string('foo'))
def test_parser(self): # pr #11245 for tz, constructor in product(('UTC', 'US/Eastern'), ('M8', 'datetime64')): self.assertEqual( DatetimeTZDtype('%s[ns, %s]' % (constructor, tz)), DatetimeTZDtype('ns', tz), )
def test_datetimetz_dtype(self): dtype = DatetimeTZDtype(unit='ns', tz='US/Eastern') self.assertEqual(_find_common_type([dtype, dtype]), 'datetime64[ns, US/Eastern]') for dtype2 in [DatetimeTZDtype(unit='ns', tz='Asia/Tokyo'), np.dtype('datetime64[ns]'), np.object, np.int64]: self.assertEqual(_find_common_type([dtype, dtype2]), np.object) self.assertEqual(_find_common_type([dtype2, dtype]), np.object)
def test_hash_vs_equality(self): # make sure that we satisfy is semantics dtype = self.dtype dtype2 = DatetimeTZDtype('ns', 'US/Eastern') dtype3 = DatetimeTZDtype(dtype2) self.assertTrue(dtype == dtype2) self.assertTrue(dtype2 == dtype) self.assertTrue(dtype3 == dtype) self.assertTrue(dtype is dtype2) self.assertTrue(dtype2 is dtype) self.assertTrue(dtype3 is dtype) self.assertTrue(hash(dtype) == hash(dtype2)) self.assertTrue(hash(dtype) == hash(dtype3))
def test_equality(self): self.assertTrue( is_dtype_equal(self.dtype, 'datetime64[ns, US/Eastern]')) self.assertTrue( is_dtype_equal(self.dtype, DatetimeTZDtype('ns', 'US/Eastern'))) self.assertFalse(is_dtype_equal(self.dtype, 'foo')) self.assertFalse( is_dtype_equal(self.dtype, DatetimeTZDtype('ns', 'CET'))) self.assertFalse( is_dtype_equal(DatetimeTZDtype('ns', 'US/Eastern'), DatetimeTZDtype('ns', 'US/Pacific'))) # numpy compat self.assertTrue(is_dtype_equal(np.dtype("M8[ns]"), "datetime64[ns]"))
def test_datetime_with_tz_dtypes(self): tzframe = DataFrame({'A': date_range('20130101', periods=3), 'B': date_range('20130101', periods=3, tz='US/Eastern'), 'C': date_range('20130101', periods=3, tz='CET')}) tzframe.iloc[1, 1] = pd.NaT tzframe.iloc[1, 2] = pd.NaT result = tzframe.dtypes.sort_index() expected = Series([np.dtype('datetime64[ns]'), DatetimeTZDtype('datetime64[ns, US/Eastern]'), DatetimeTZDtype('datetime64[ns, CET]')], ['A', 'B', 'C']) assert_series_equal(result, expected)
def test_pandas_dtype(): assert pandas_dtype('datetime64[ns, US/Eastern]') == DatetimeTZDtype( 'datetime64[ns, US/Eastern]') assert pandas_dtype('category') == CategoricalDtype() for dtype in ['M8[ns]', 'm8[ns]', 'object', 'float64', 'int64']: assert pandas_dtype(dtype) == np.dtype(dtype)
def test_period_dtype(self): dtype = PeriodDtype(freq='D') self.assertEqual(_find_common_type([dtype, dtype]), 'period[D]') for dtype2 in [DatetimeTZDtype(unit='ns', tz='Asia/Tokyo'), PeriodDtype(freq='2D'), PeriodDtype(freq='H'), np.dtype('datetime64[ns]'), np.object, np.int64]: self.assertEqual(_find_common_type([dtype, dtype2]), np.object) self.assertEqual(_find_common_type([dtype2, dtype]), np.object)
def test_is_dtype(self): self.assertFalse(DatetimeTZDtype.is_dtype(None)) self.assertTrue(DatetimeTZDtype.is_dtype(self.dtype)) self.assertTrue(DatetimeTZDtype.is_dtype('datetime64[ns, US/Eastern]')) self.assertFalse(DatetimeTZDtype.is_dtype('foo')) self.assertTrue(DatetimeTZDtype.is_dtype(DatetimeTZDtype( 'ns', 'US/Pacific'))) self.assertFalse(DatetimeTZDtype.is_dtype(np.float64))
def test_as_json_table_type_date_dtypes(self): # TODO: datedate.date? datetime.time? dates = [ np.datetime64, np.dtype("<M8[ns]"), PeriodDtype(), DatetimeTZDtype('ns', 'US/Central') ] for t in dates: self.assertEqual(as_json_table_type(t), 'datetime')
def test_dtype_equal(): assert is_dtype_equal(np.int64, np.int64) assert not is_dtype_equal(np.int64, np.float64) p1 = PeriodDtype('D') p2 = PeriodDtype('D') assert is_dtype_equal(p1, p2) assert not is_dtype_equal(np.int64, p1) p3 = PeriodDtype('2D') assert not is_dtype_equal(p1, p3) assert not DatetimeTZDtype.is_dtype(np.int64) assert not PeriodDtype.is_dtype(np.int64)
def test_na_value_for_dtype(): for dtype in [np.dtype('M8[ns]'), np.dtype('m8[ns]'), DatetimeTZDtype('datetime64[ns, US/Eastern]')]: assert na_value_for_dtype(dtype) is NaT for dtype in ['u1', 'u2', 'u4', 'u8', 'i1', 'i2', 'i4', 'i8']: assert na_value_for_dtype(np.dtype(dtype)) == 0 for dtype in ['bool']: assert na_value_for_dtype(np.dtype(dtype)) is False for dtype in ['f2', 'f4', 'f8']: assert np.isnan(na_value_for_dtype(np.dtype(dtype))) for dtype in ['O']: assert np.isnan(na_value_for_dtype(np.dtype(dtype)))
def setUp(self): self.dtype = DatetimeTZDtype('ns', 'US/Eastern')
def test_empty(self): dt = DatetimeTZDtype() with tm.assertRaises(AttributeError): str(dt)
def test_construction(self): self.assertRaises(ValueError, lambda: DatetimeTZDtype('ms', 'US/Eastern'))
def test_subclass(self): a = DatetimeTZDtype('datetime64[ns, US/Eastern]') b = DatetimeTZDtype('datetime64[ns, CET]') self.assertTrue(issubclass(type(a), type(a))) self.assertTrue(issubclass(type(a), type(b)))
def test_coerce_to_dtype(self): self.assertEqual(_coerce_to_dtype('datetime64[ns, US/Eastern]'), DatetimeTZDtype('ns', 'US/Eastern')) self.assertEqual(_coerce_to_dtype('datetime64[ns, Asia/Tokyo]'), DatetimeTZDtype('ns', 'Asia/Tokyo'))