| import numpy as np |
| import pytest |
|
|
| import pandas as pd |
| from pandas.core.interchange.utils import dtype_to_arrow_c_fmt |
|
|
| |
| |
| |
| |
| |
|
|
|
|
| @pytest.mark.parametrize( |
| "pandas_dtype, c_string", |
| [ |
| (np.dtype("bool"), "b"), |
| (np.dtype("int8"), "c"), |
| (np.dtype("uint8"), "C"), |
| (np.dtype("int16"), "s"), |
| (np.dtype("uint16"), "S"), |
| (np.dtype("int32"), "i"), |
| (np.dtype("uint32"), "I"), |
| (np.dtype("int64"), "l"), |
| (np.dtype("uint64"), "L"), |
| (np.dtype("float16"), "e"), |
| (np.dtype("float32"), "f"), |
| (np.dtype("float64"), "g"), |
| (pd.Series(["a"]).dtype, "u"), |
| ( |
| pd.Series([0]).astype("datetime64[ns]").dtype, |
| "tsn:", |
| ), |
| (pd.CategoricalDtype(["a"]), "l"), |
| (np.dtype("O"), "u"), |
| ], |
| ) |
| def test_dtype_to_arrow_c_fmt(pandas_dtype, c_string): |
| """Test ``dtype_to_arrow_c_fmt`` utility function.""" |
| assert dtype_to_arrow_c_fmt(pandas_dtype) == c_string |
|
|
|
|
| @pytest.mark.parametrize( |
| "pa_dtype, args_kwargs, c_string", |
| [ |
| ["null", {}, "n"], |
| ["bool_", {}, "b"], |
| ["uint8", {}, "C"], |
| ["uint16", {}, "S"], |
| ["uint32", {}, "I"], |
| ["uint64", {}, "L"], |
| ["int8", {}, "c"], |
| ["int16", {}, "S"], |
| ["int32", {}, "i"], |
| ["int64", {}, "l"], |
| ["float16", {}, "e"], |
| ["float32", {}, "f"], |
| ["float64", {}, "g"], |
| ["string", {}, "u"], |
| ["binary", {}, "z"], |
| ["time32", ("s",), "tts"], |
| ["time32", ("ms",), "ttm"], |
| ["time64", ("us",), "ttu"], |
| ["time64", ("ns",), "ttn"], |
| ["date32", {}, "tdD"], |
| ["date64", {}, "tdm"], |
| ["timestamp", {"unit": "s"}, "tss:"], |
| ["timestamp", {"unit": "ms"}, "tsm:"], |
| ["timestamp", {"unit": "us"}, "tsu:"], |
| ["timestamp", {"unit": "ns"}, "tsn:"], |
| ["timestamp", {"unit": "ns", "tz": "UTC"}, "tsn:UTC"], |
| ["duration", ("s",), "tDs"], |
| ["duration", ("ms",), "tDm"], |
| ["duration", ("us",), "tDu"], |
| ["duration", ("ns",), "tDn"], |
| ["decimal128", {"precision": 4, "scale": 2}, "d:4,2"], |
| ], |
| ) |
| def test_dtype_to_arrow_c_fmt_arrowdtype(pa_dtype, args_kwargs, c_string): |
| |
| pa = pytest.importorskip("pyarrow") |
| if not args_kwargs: |
| pa_type = getattr(pa, pa_dtype)() |
| elif isinstance(args_kwargs, tuple): |
| pa_type = getattr(pa, pa_dtype)(*args_kwargs) |
| else: |
| pa_type = getattr(pa, pa_dtype)(**args_kwargs) |
| arrow_type = pd.ArrowDtype(pa_type) |
| assert dtype_to_arrow_c_fmt(arrow_type) == c_string |
|
|