diff --git a/pandas/core/arrays/integer.py b/pandas/core/arrays/integer.py index f8f87ff1c96f1..b3dde6bf2bd93 100644 --- a/pandas/core/arrays/integer.py +++ b/pandas/core/arrays/integer.py @@ -36,6 +36,11 @@ class _IntegerDtype(ExtensionDtype): type = None na_value = np.nan + def __repr__(self): + sign = 'U' if self.is_unsigned_integer else '' + return "{sign}Int{size}Dtype()".format(sign=sign, + size=8 * self.itemsize) + @cache_readonly def is_signed_integer(self): return self.kind == 'i' diff --git a/pandas/core/arrays/numpy_.py b/pandas/core/arrays/numpy_.py index b1dc77e65eee8..47517782e2bbf 100644 --- a/pandas/core/arrays/numpy_.py +++ b/pandas/core/arrays/numpy_.py @@ -38,8 +38,12 @@ def __init__(self, dtype): self._name = dtype.name self._type = dtype.type + def __repr__(self): + return "PandasDtype({!r})".format(self.name) + @property def numpy_dtype(self): + """The NumPy dtype this PandasDtype wraps.""" return self._dtype @property @@ -72,6 +76,7 @@ def kind(self): @property def itemsize(self): + """The element size of this data-type object.""" return self._dtype.itemsize diff --git a/pandas/tests/arrays/test_integer.py b/pandas/tests/arrays/test_integer.py index 173f9707e76c2..09298bb5cd08d 100644 --- a/pandas/tests/arrays/test_integer.py +++ b/pandas/tests/arrays/test_integer.py @@ -57,6 +57,20 @@ def test_dtypes(dtype): assert dtype.name is not None +@pytest.mark.parametrize('dtype, expected', [ + (Int8Dtype(), 'Int8Dtype()'), + (Int16Dtype(), 'Int16Dtype()'), + (Int32Dtype(), 'Int32Dtype()'), + (Int64Dtype(), 'Int64Dtype()'), + (UInt8Dtype(), 'UInt8Dtype()'), + (UInt16Dtype(), 'UInt16Dtype()'), + (UInt32Dtype(), 'UInt32Dtype()'), + (UInt64Dtype(), 'UInt64Dtype()'), +]) +def test_repr_dtype(dtype, expected): + assert repr(dtype) == expected + + def test_repr_array(): result = repr(integer_array([1, None, 3])) expected = ( diff --git a/pandas/tests/arrays/test_numpy.py b/pandas/tests/arrays/test_numpy.py index b17e509c24e71..a77f1f8a7b3d1 100644 --- a/pandas/tests/arrays/test_numpy.py +++ b/pandas/tests/arrays/test_numpy.py @@ -71,6 +71,17 @@ def test_is_boolean(dtype, expected): assert dtype._is_boolean is expected +def test_repr(): + dtype = PandasDtype(np.dtype("int64")) + assert repr(dtype) == "PandasDtype('int64')" + + +def test_constructor_from_string(): + result = PandasDtype.construct_from_string("int64") + expected = PandasDtype(np.dtype("int64")) + assert result == expected + + # ---------------------------------------------------------------------------- # Construction