import numpy as np import pytest from pandas.core.dtypes.cast import construct_1d_arraylike_from_scalar from pandas.core.dtypes.dtypes import CategoricalDtype from pandas import ( Categorical, Timedelta, ) import pandas._testing as tm def test_cast_1d_array_like_from_scalar_categorical(): # see gh-19565 # # Categorical result from scalar did not maintain # categories and ordering of the passed dtype. cats = ["a", "b", "c"] cat_type = CategoricalDtype(categories=cats, ordered=False) expected = Categorical(["a", "a"], categories=cats) result = construct_1d_arraylike_from_scalar("a", len(expected), cat_type) tm.assert_categorical_equal(result, expected) def test_cast_1d_array_like_from_timestamp(fixed_now_ts): # check we dont lose nanoseconds ts = fixed_now_ts + Timedelta(1) res = construct_1d_arraylike_from_scalar(ts, 2, np.dtype("M8[ns]")) assert res[0] == ts def test_cast_1d_array_like_from_timedelta(): # check we dont lose nanoseconds td = Timedelta(1) res = construct_1d_arraylike_from_scalar(td, 2, np.dtype("m8[ns]")) assert res[0] == td def test_cast_1d_array_like_mismatched_datetimelike(): td = np.timedelta64("NaT", "ns") dt = np.datetime64("NaT", "ns") with pytest.raises(TypeError, match="Cannot cast"): construct_1d_arraylike_from_scalar(td, 2, dt.dtype) with pytest.raises(TypeError, match="Cannot cast"): construct_1d_arraylike_from_scalar(np.timedelta64(4, "ns"), 2, dt.dtype) with pytest.raises(TypeError, match="Cannot cast"): construct_1d_arraylike_from_scalar(dt, 2, td.dtype) with pytest.raises(TypeError, match="Cannot cast"): construct_1d_arraylike_from_scalar(np.datetime64(4, "ns"), 2, td.dtype)