def test_period_dtype(self): for dtype in [ 'period[D]', 'period[3M]', 'period[U]', 'Period[D]', 'Period[3M]', 'Period[U]' ]: self.assertIs(pandas_dtype(dtype), PeriodDtype(dtype)) self.assertEqual(pandas_dtype(dtype), PeriodDtype(dtype)) self.assertEqual(pandas_dtype(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_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_dtype_equal_strict(): # we are strict on kind equality for dtype in [np.int8, np.int16, np.int32]: assert not is_dtype_equal(np.int64, dtype) for dtype in [np.float32]: assert not is_dtype_equal(np.float64, dtype) # strict w.r.t. PeriodDtype assert not is_dtype_equal(PeriodDtype('D'), PeriodDtype('2D')) # strict w.r.t. datetime64 assert not is_dtype_equal( pandas_dtype('datetime64[ns, US/Eastern]'), pandas_dtype('datetime64[ns, CET]'))
def test_construction(self): with tm.assertRaises(ValueError): PeriodDtype('xx') for s in ['period[D]', 'Period[D]', 'D']: dt = PeriodDtype(s) self.assertEqual(dt.freq, pd.tseries.offsets.Day()) self.assertTrue(is_period_dtype(dt)) for s in ['period[3D]', 'Period[3D]', '3D']: dt = PeriodDtype(s) self.assertEqual(dt.freq, pd.tseries.offsets.Day(3)) self.assertTrue(is_period_dtype(dt)) for s in ['period[26H]', 'Period[26H]', '26H', 'period[1D2H]', 'Period[1D2H]', '1D2H']: dt = PeriodDtype(s) self.assertEqual(dt.freq, pd.tseries.offsets.Hour(26)) self.assertTrue(is_period_dtype(dt))
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_equality(self): self.assertTrue(is_dtype_equal(self.dtype, 'period[D]')) self.assertTrue(is_dtype_equal(self.dtype, PeriodDtype('D'))) self.assertTrue(is_dtype_equal(self.dtype, PeriodDtype('D'))) self.assertTrue(is_dtype_equal(PeriodDtype('D'), PeriodDtype('D'))) self.assertFalse(is_dtype_equal(self.dtype, 'D')) self.assertFalse(is_dtype_equal(PeriodDtype('D'), PeriodDtype('2D')))
def test_is_dtype(self): self.assertTrue(PeriodDtype.is_dtype(self.dtype)) self.assertTrue(PeriodDtype.is_dtype('period[D]')) self.assertTrue(PeriodDtype.is_dtype('period[3D]')) self.assertTrue(PeriodDtype.is_dtype(PeriodDtype('3D'))) self.assertTrue(PeriodDtype.is_dtype('period[U]')) self.assertTrue(PeriodDtype.is_dtype('period[S]')) self.assertTrue(PeriodDtype.is_dtype(PeriodDtype('U'))) self.assertTrue(PeriodDtype.is_dtype(PeriodDtype('S'))) self.assertFalse(PeriodDtype.is_dtype('D')) self.assertFalse(PeriodDtype.is_dtype('3D')) self.assertFalse(PeriodDtype.is_dtype('U')) self.assertFalse(PeriodDtype.is_dtype('S')) self.assertFalse(PeriodDtype.is_dtype('foo')) self.assertFalse(PeriodDtype.is_dtype(np.object_)) self.assertFalse(PeriodDtype.is_dtype(np.int64)) self.assertFalse(PeriodDtype.is_dtype(np.float64))
def test_construction_from_string(self): result = PeriodDtype('period[D]') self.assertTrue(is_dtype_equal(self.dtype, result)) result = PeriodDtype.construct_from_string('period[D]') self.assertTrue(is_dtype_equal(self.dtype, result)) with tm.assertRaises(TypeError): PeriodDtype.construct_from_string('foo') with tm.assertRaises(TypeError): PeriodDtype.construct_from_string('period[foo]') with tm.assertRaises(TypeError): PeriodDtype.construct_from_string('foo[D]') with tm.assertRaises(TypeError): PeriodDtype.construct_from_string('datetime64[ns]') with tm.assertRaises(TypeError): PeriodDtype.construct_from_string('datetime64[ns, US/Eastern]')
def test_coerce_to_dtype(self): self.assertEqual(_coerce_to_dtype('period[D]'), PeriodDtype('period[D]')) self.assertEqual(_coerce_to_dtype('period[3M]'), PeriodDtype('period[3M]'))
def test_identity(self): self.assertEqual(PeriodDtype('period[D]'), PeriodDtype('period[D]')) self.assertIs(PeriodDtype('period[D]'), PeriodDtype('period[D]')) self.assertEqual(PeriodDtype('period[3D]'), PeriodDtype('period[3D]')) self.assertIs(PeriodDtype('period[3D]'), PeriodDtype('period[3D]')) self.assertEqual(PeriodDtype('period[1S1U]'), PeriodDtype('period[1000001U]')) self.assertIs(PeriodDtype('period[1S1U]'), PeriodDtype('period[1000001U]'))
def test_subclass(self): a = PeriodDtype('period[D]') b = PeriodDtype('period[3D]') self.assertTrue(issubclass(type(a), type(a))) self.assertTrue(issubclass(type(a), type(b)))
def test_not_string(self): # though PeriodDtype has object kind, it cannot be string self.assertFalse(is_string_dtype(PeriodDtype('D')))
def test_categorical_dtype(self): self.assertEqual(pandas_dtype('category'), CategoricalDtype()) def test_period_dtype(self): for dtype in ['period[D]', 'period[3M]', 'period[U]', 'Period[D]', 'Period[3M]', 'Period[U]']: self.assertIs(pandas_dtype(dtype), PeriodDtype(dtype)) self.assertEqual(pandas_dtype(dtype), PeriodDtype(dtype)) self.assertEqual(pandas_dtype(dtype), dtype) dtypes = dict(datetime_tz=pandas_dtype('datetime64[ns, US/Eastern]'), datetime=pandas_dtype('datetime64[ns]'), timedelta=pandas_dtype('timedelta64[ns]'), period=PeriodDtype('D'), integer=np.dtype(np.int64), float=np.dtype(np.float64), object=np.dtype(np.object), category=pandas_dtype('category')) @pytest.mark.parametrize('name1,dtype1', list(dtypes.items()), ids=lambda x: str(x)) @pytest.mark.parametrize('name2,dtype2', list(dtypes.items()), ids=lambda x: str(x)) def test_dtype_equal(name1, dtype1, name2, dtype2): # match equal to self, but not equal to other
def test_empty(self): dt = PeriodDtype() with tm.assertRaises(AttributeError): str(dt)
def dtype(self): return PeriodDtype.construct_from_string(self.freq)
def setUp(self): self.dtype = PeriodDtype('D')