| 123456789101112131415161718192021222324252627282930313233343536373839 |
- from io import StringIO
- import numpy as np
- import pytest
- import pandas as pd
- import pandas._testing as tm
- from pandas.core.arrays import ExtensionArray
- class BaseParsingTests:
- @pytest.mark.parametrize("engine", ["c", "python"])
- def test_EA_types(self, engine, data, request):
- if isinstance(data.dtype, pd.CategoricalDtype):
- # in parsers.pyx _convert_with_dtype there is special-casing for
- # Categorical that pre-empts _from_sequence_of_strings
- pass
- elif isinstance(data.dtype, pd.core.dtypes.dtypes.NumpyEADtype):
- # These get unwrapped internally so are treated as numpy dtypes
- # in the parsers.pyx code
- pass
- elif (
- type(data)._from_sequence_of_strings.__func__
- is ExtensionArray._from_sequence_of_strings.__func__
- ):
- # i.e. the EA hasn't overridden _from_sequence_of_strings
- mark = pytest.mark.xfail(
- reason="_from_sequence_of_strings not implemented",
- raises=NotImplementedError,
- )
- request.node.add_marker(mark)
- df = pd.DataFrame({"with_dtype": pd.Series(data, dtype=str(data.dtype))})
- csv_output = df.to_csv(index=False, na_rep=np.nan)
- result = pd.read_csv(
- StringIO(csv_output), dtype={"with_dtype": str(data.dtype)}, engine=engine
- )
- expected = df
- tm.assert_frame_equal(result, expected)
|