diff --git a/pandas/tests/extension/test_arrow.py b/pandas/tests/extension/test_arrow.py index 861cc44310751..7e0792a6010a7 100644 --- a/pandas/tests/extension/test_arrow.py +++ b/pandas/tests/extension/test_arrow.py @@ -563,13 +563,209 @@ def test_fillna_frame(self, data_missing, using_array_manager, request): super().test_fillna_frame(data_missing) +class TestBasePrinting(base.BasePrintingTests): + def test_series_repr(self, data, request): + pa_dtype = data.dtype.pyarrow_dtype + if ( + pa.types.is_date(pa_dtype) + or pa.types.is_duration(pa_dtype) + or (pa.types.is_timestamp(pa_dtype) and pa_dtype.tz is None) + ): + request.node.add_marker( + pytest.mark.xfail( + raises=TypeError, + reason="GH 47514: _concat_datetime expects axis arg.", + ) + ) + super().test_series_repr(data) + + def test_dataframe_repr(self, data, request): + pa_dtype = data.dtype.pyarrow_dtype + if ( + pa.types.is_date(pa_dtype) + or pa.types.is_duration(pa_dtype) + or (pa.types.is_timestamp(pa_dtype) and pa_dtype.tz is None) + ): + request.node.add_marker( + pytest.mark.xfail( + raises=TypeError, + reason="GH 47514: _concat_datetime expects axis arg.", + ) + ) + super().test_dataframe_repr(data) + + +class TestBaseReshaping(base.BaseReshapingTests): + @pytest.mark.parametrize("in_frame", [True, False]) + def test_concat(self, data, in_frame, request): + pa_dtype = data.dtype.pyarrow_dtype + if ( + pa.types.is_date(pa_dtype) + or pa.types.is_duration(pa_dtype) + or (pa.types.is_timestamp(pa_dtype) and pa_dtype.tz is None) + ): + request.node.add_marker( + pytest.mark.xfail( + raises=TypeError, + reason="GH 47514: _concat_datetime expects axis arg.", + ) + ) + super().test_concat(data, in_frame) + + @pytest.mark.parametrize("in_frame", [True, False]) + def test_concat_all_na_block(self, data_missing, in_frame, request): + pa_dtype = data_missing.dtype.pyarrow_dtype + if ( + pa.types.is_date(pa_dtype) + or pa.types.is_duration(pa_dtype) + or (pa.types.is_timestamp(pa_dtype) and pa_dtype.tz is None) + ): + request.node.add_marker( + pytest.mark.xfail( + raises=TypeError, + reason="GH 47514: _concat_datetime expects axis arg.", + ) + ) + super().test_concat_all_na_block(data_missing, in_frame) + + def test_concat_columns(self, data, na_value, request): + tz = getattr(data.dtype.pyarrow_dtype, "tz", None) + if pa_version_under2p0 and tz not in (None, "UTC"): + request.node.add_marker( + pytest.mark.xfail( + reason=f"Not supported by pyarrow < 2.0 with timestamp type {tz}" + ) + ) + super().test_concat_columns(data, na_value) + + def test_concat_extension_arrays_copy_false(self, data, na_value, request): + tz = getattr(data.dtype.pyarrow_dtype, "tz", None) + if pa_version_under2p0 and tz not in (None, "UTC"): + request.node.add_marker( + pytest.mark.xfail( + reason=f"Not supported by pyarrow < 2.0 with timestamp type {tz}" + ) + ) + super().test_concat_extension_arrays_copy_false(data, na_value) + + def test_concat_with_reindex(self, data, request, using_array_manager): + pa_dtype = data.dtype.pyarrow_dtype + if pa.types.is_duration(pa_dtype): + request.node.add_marker( + pytest.mark.xfail( + raises=TypeError, + reason="GH 47514: _concat_datetime expects axis arg.", + ) + ) + elif pa.types.is_date(pa_dtype) or ( + pa.types.is_timestamp(pa_dtype) and pa_dtype.tz is None + ): + request.node.add_marker( + pytest.mark.xfail( + raises=AttributeError if not using_array_manager else TypeError, + reason="GH 34986", + ) + ) + super().test_concat_with_reindex(data) + + def test_align(self, data, na_value, request): + tz = getattr(data.dtype.pyarrow_dtype, "tz", None) + if pa_version_under2p0 and tz not in (None, "UTC"): + request.node.add_marker( + pytest.mark.xfail( + reason=f"Not supported by pyarrow < 2.0 with timestamp type {tz}" + ) + ) + super().test_align(data, na_value) + + def test_align_frame(self, data, na_value, request): + tz = getattr(data.dtype.pyarrow_dtype, "tz", None) + if pa_version_under2p0 and tz not in (None, "UTC"): + request.node.add_marker( + pytest.mark.xfail( + reason=f"Not supported by pyarrow < 2.0 with timestamp type {tz}" + ) + ) + super().test_align_frame(data, na_value) + + def test_align_series_frame(self, data, na_value, request): + tz = getattr(data.dtype.pyarrow_dtype, "tz", None) + if pa_version_under2p0 and tz not in (None, "UTC"): + request.node.add_marker( + pytest.mark.xfail( + reason=f"Not supported by pyarrow < 2.0 with timestamp type {tz}" + ) + ) + super().test_align_series_frame(data, na_value) + + def test_merge(self, data, na_value, request): + tz = getattr(data.dtype.pyarrow_dtype, "tz", None) + if pa_version_under2p0 and tz not in (None, "UTC"): + request.node.add_marker( + pytest.mark.xfail( + reason=f"Not supported by pyarrow < 2.0 with timestamp type {tz}" + ) + ) + super().test_merge(data, na_value) + + def test_merge_on_extension_array(self, data, request): + pa_dtype = data.dtype.pyarrow_dtype + if pa.types.is_date(pa_dtype) or ( + pa.types.is_timestamp(pa_dtype) and pa_dtype.tz is None + ): + request.node.add_marker( + pytest.mark.xfail( + raises=AttributeError, + reason="GH 34986", + ) + ) + super().test_merge_on_extension_array(data) + + def test_merge_on_extension_array_duplicates(self, data, request): + pa_dtype = data.dtype.pyarrow_dtype + if pa.types.is_date(pa_dtype) or ( + pa.types.is_timestamp(pa_dtype) and pa_dtype.tz is None + ): + request.node.add_marker( + pytest.mark.xfail( + raises=AttributeError, + reason="GH 34986", + ) + ) + super().test_merge_on_extension_array_duplicates(data) + + def test_ravel(self, data, request): + tz = getattr(data.dtype.pyarrow_dtype, "tz", None) + if pa_version_under2p0 and tz not in (None, "UTC"): + request.node.add_marker( + pytest.mark.xfail( + reason=f"Not supported by pyarrow < 2.0 with timestamp type {tz}" + ) + ) + super().test_ravel(data) + + @pytest.mark.xfail(reason="GH 45419: pyarrow.ChunkedArray does not support views") + def test_transpose(self, data): + super().test_transpose(data) + + def test_transpose_frame(self, data, request): + tz = getattr(data.dtype.pyarrow_dtype, "tz", None) + if pa_version_under2p0 and tz not in (None, "UTC"): + request.node.add_marker( + pytest.mark.xfail( + reason=f"Not supported by pyarrow < 2.0 with timestamp type {tz}" + ) + ) + super().test_transpose_frame(data) + + class TestBaseSetitem(base.BaseSetitemTests): def test_setitem_scalar_series(self, data, box_in_series, request): tz = getattr(data.dtype.pyarrow_dtype, "tz", None) if pa_version_under2p0 and tz not in (None, "UTC"): request.node.add_marker( pytest.mark.xfail( - reason=(f"Not supported by pyarrow < 2.0 with timestamp type {tz}") + reason=f"Not supported by pyarrow < 2.0 with timestamp type {tz}" ) ) super().test_setitem_scalar_series(data, box_in_series)