diff --git a/ci/cudf_pandas_scripts/pandas-tests/run.sh b/ci/cudf_pandas_scripts/pandas-tests/run.sh index dbda96927fbb..4a610c714205 100755 --- a/ci/cudf_pandas_scripts/pandas-tests/run.sh +++ b/ci/cudf_pandas_scripts/pandas-tests/run.sh @@ -26,7 +26,7 @@ LIBCUDF_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcudf_${RAPIDS_PY_CUDA_SUFFIX}" rap PYLIBCUDF_WHEELHOUSE=$(rapids-download-from-github "$(rapids-package-name "wheel_python" pylibcudf --stable --cuda "$RAPIDS_CUDA_VERSION")") # echo to expand wildcard before adding `[extra]` requires for pip -python -m pip install \ +rapids-pip-retry install \ "$(echo "${CUDF_WHEELHOUSE}"/cudf_"${RAPIDS_PY_CUDA_SUFFIX}"*.whl)[test,pandas-tests]" \ "$(echo "${LIBCUDF_WHEELHOUSE}"/libcudf_"${RAPIDS_PY_CUDA_SUFFIX}"*.whl)" \ "$(echo "${PYLIBCUDF_WHEELHOUSE}"/pylibcudf_"${RAPIDS_PY_CUDA_SUFFIX}"*.whl)" diff --git a/ci/test_narwhals.sh b/ci/test_narwhals.sh index d6b60062dc63..bb2a313bc883 100755 --- a/ci/test_narwhals.sh +++ b/ci/test_narwhals.sh @@ -44,6 +44,12 @@ python -c "import narwhals; print(narwhals.show_versions())" # test_first_last_expr_over_order_by[cudf] - now passing but tests expect failure # test_cast_datetime_tz_aware[cudf]: Passes as of https://github.com/rapidsai/cudf/pull/21451 # test_nested_structures: Passes as of https://github.com/rapidsai/cudf/pull/21514 +# test_group_by_depth_1_agg_bool_ops[cudf-*]: xpass(strict) - cudf groupby any/all on nullable bool now passes +# test_replace_time_zone[cudf], test_replace_time_zone_series[cudf]: xpass(strict) - cudf tz replace + strftime now correct +# test_convert_time_zone[cudf], test_convert_time_zone_series[cudf], test_convert_time_zone_from_none[cudf]: xpass(strict) - cudf tz convert + strftime now correct +# test_contains_case_sensitive[cudf], test_contains_series_case_sensitive[cudf], test_contains_literal[cudf], test_contains_series_literal[cudf]: +# cudf's default ``str`` dtype mirrors pandas 3 ``str`` (fills nulls with False on ``str.contains``); narwhals +# expects ``None`` because it treats cudf strings as nullable. Compatibility mismatch, not a cudf bug. TESTS_THAT_NEED_NARWHALS_FIX_FOR_CUDF=" \ test_to_numpy[cudf] or \ test_fill_null_strategies_with_limit_as_none[cudf] or \ @@ -69,7 +75,14 @@ test_first_last_expr_over_order_by[cudf] or \ test_series_rfloordiv_by_zero[cudf-0] or \ test_expr_rfloordiv_by_zero[cudf-0] or \ test_cast_datetime_tz_aware[cudf] or \ -test_nested_structures \ +test_nested_structures or \ +(test_group_by_depth_1_agg_bool_ops and cudf) or \ +(test_replace_time_zone and cudf) or \ +(test_convert_time_zone and cudf) or \ +(test_contains_case_sensitive and cudf) or \ +(test_contains_series_case_sensitive and cudf) or \ +(test_contains_literal and cudf) or \ +(test_contains_series_literal and cudf) \ " rapids-logger "Run narwhals tests for cuDF" @@ -174,6 +187,8 @@ test_pandas_object_series \ # test_check_row_order_nested_only[pandas]: Nested dtype row ordering check not raising NotImplementedError as expected # test_cast_string: String casting issues with cudf.pandas # test_contains_case_insensitive[pandas], test_contains_series_case_insensitive[pandas]: String contains with case_insensitive returns False instead of None for nulls +# test_fill_null_pandas_downcast: asserts dtype is 'object' after fill_null on [True, None]; cudf.pandas reports 'bool' +# because cudf represents nullable bool natively (not as object) — fundamental design difference, not fixable in cudf TESTS_THAT_NEED_NARWHALS_FIX_FOR_CUDF_PANDAS=" \ test_dtypes or \ test_explode_multiple_cols or \ @@ -193,7 +208,8 @@ test_sqrt_dtype_pandas or \ test_check_row_order_nested_only[pandas] or \ test_cast_string or \ (test_contains_case_insensitive and pandas) or \ -(test_contains_series_case_insensitive and pandas) \ +(test_contains_series_case_insensitive and pandas) or \ +test_fill_null_pandas_downcast \ " PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 \ diff --git a/ci/test_python_cudf.sh b/ci/test_python_cudf.sh index 13c18fa88c02..6ca3c29ec2eb 100755 --- a/ci/test_python_cudf.sh +++ b/ci/test_python_cudf.sh @@ -31,13 +31,6 @@ version_gte() { [ "$2" = "$(echo -e "$2\n$1" | sort -V | head -n1)" ] } -# If the RAPIDS_PY_VERSION is 3.13, set CUDF_TEST_COPY_ON_WRITE to '1' to enable copy-on-write tests. -if version_gte "${RAPIDS_PY_VERSION}" "3.13"; then - echo "Running tests with CUDF_TEST_COPY_ON_WRITE enabled" - export CUDF_TEST_COPY_ON_WRITE='1' -else - echo "Running tests with CUDF_TEST_COPY_ON_WRITE disabled" -fi rapids-logger "pytest cudf" timeout 40m ./ci/run_cudf_pytests.sh \ --junitxml="${RAPIDS_TESTS_DIR}/junit-cudf.xml" \ diff --git a/conda/environments/all_cuda-129_arch-aarch64.yaml b/conda/environments/all_cuda-129_arch-aarch64.yaml index 2d31b364937d..df4a495cd939 100644 --- a/conda/environments/all_cuda-129_arch-aarch64.yaml +++ b/conda/environments/all_cuda-129_arch-aarch64.yaml @@ -65,7 +65,7 @@ dependencies: - nvtx>=0.2.1 - openpyxl - packaging -- pandas>=2.0,<2.4.0 +- pandas>=3.0.0,<3.1.0 - pandoc - polars>=1.35,<1.39 - pre-commit diff --git a/conda/environments/all_cuda-129_arch-x86_64.yaml b/conda/environments/all_cuda-129_arch-x86_64.yaml index 251031017507..e95fc711b1e4 100644 --- a/conda/environments/all_cuda-129_arch-x86_64.yaml +++ b/conda/environments/all_cuda-129_arch-x86_64.yaml @@ -65,7 +65,7 @@ dependencies: - nvtx>=0.2.1 - openpyxl - packaging -- pandas>=2.0,<2.4.0 +- pandas>=3.0.0,<3.1.0 - pandoc - polars>=1.35,<1.39 - pre-commit diff --git a/conda/environments/all_cuda-132_arch-aarch64.yaml b/conda/environments/all_cuda-132_arch-aarch64.yaml index bba394685d26..74af84c5666b 100644 --- a/conda/environments/all_cuda-132_arch-aarch64.yaml +++ b/conda/environments/all_cuda-132_arch-aarch64.yaml @@ -65,7 +65,7 @@ dependencies: - nvtx>=0.2.1 - openpyxl - packaging -- pandas>=2.0,<2.4.0 +- pandas>=3.0.0,<3.1.0 - pandoc - polars>=1.35,<1.39 - pre-commit diff --git a/conda/environments/all_cuda-132_arch-x86_64.yaml b/conda/environments/all_cuda-132_arch-x86_64.yaml index f3477b2eb291..c0e1a5b36a13 100644 --- a/conda/environments/all_cuda-132_arch-x86_64.yaml +++ b/conda/environments/all_cuda-132_arch-x86_64.yaml @@ -65,7 +65,7 @@ dependencies: - nvtx>=0.2.1 - openpyxl - packaging -- pandas>=2.0,<2.4.0 +- pandas>=3.0.0,<3.1.0 - pandoc - polars>=1.35,<1.39 - pre-commit diff --git a/conda/recipes/cudf/recipe.yaml b/conda/recipes/cudf/recipe.yaml index d4c8b5edb9d5..f8516466a588 100644 --- a/conda/recipes/cudf/recipe.yaml +++ b/conda/recipes/cudf/recipe.yaml @@ -88,7 +88,7 @@ requirements: - cuda-version =${{ cuda_version }} run: - python - - pandas >=2.0,<2.4.0 + - pandas >=3.0.0,<3.1.0 - cupy >=13.6.0,!=14.0.0 - numba-cuda >=0.22.2,<0.29.0 - numba >=0.60.0,<0.65.0 diff --git a/cpp/src/io/statistics/statistics_type_identification.cuh b/cpp/src/io/statistics/statistics_type_identification.cuh index 825e50860438..ed7812419afe 100644 --- a/cpp/src/io/statistics/statistics_type_identification.cuh +++ b/cpp/src/io/statistics/statistics_type_identification.cuh @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2021-2024, NVIDIA CORPORATION. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION. * SPDX-License-Identifier: Apache-2.0 */ @@ -37,9 +37,11 @@ struct conversion_map; template struct conversion_map { using types = std::tuple, + std::pair, std::pair, std::pair, std::pair, + std::pair, std::pair, std::pair>; }; diff --git a/cpp/tests/rolling/rolling_test.cpp b/cpp/tests/rolling/rolling_test.cpp index de2d0229b73e..b885e60de0de 100644 --- a/cpp/tests/rolling/rolling_test.cpp +++ b/cpp/tests/rolling/rolling_test.cpp @@ -811,7 +811,7 @@ TYPED_TEST_SUITE(RollingTest, cudf::test::FixedWidthTypesWithoutFixedPoint); // simple example from Pandas docs TYPED_TEST(RollingTest, SimpleStatic) { - // https://pandas.pydata.org/pandas-docs/version/2.3.3/reference/api/pandas.DataFrame.rolling.html + // https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html auto const col_data = cudf::test::make_type_param_vector({0, 1, 2, 0, 4}); const std::vector col_mask = {1, 1, 1, 0, 1}; @@ -958,7 +958,7 @@ TYPED_TEST(RollingTest, NegativeWindowSizes) // simple example from Pandas docs: TYPED_TEST(RollingTest, SimpleDynamic) { - // https://pandas.pydata.org/pandas-docs/version/2.3.3/reference/api/pandas.DataFrame.rolling.html + // https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html auto const col_data = cudf::test::make_type_param_vector({0, 1, 2, 0, 4}); const std::vector col_mask = {1, 1, 1, 0, 1}; diff --git a/dependencies.yaml b/dependencies.yaml index 193539cef28b..f50d7814eb26 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -783,7 +783,7 @@ dependencies: - output_types: [conda, requirements, pyproject] packages: - fsspec>=0.6.0 - - &pandas pandas>=2.0,<2.4.0 + - &pandas pandas>=3.0.0,<3.1.0 run_pylibcudf: common: - output_types: [conda, requirements, pyproject] @@ -901,11 +901,11 @@ dependencies: - matrix: {dependencies: "oldest"} packages: - numba==0.60.0 - - pandas==2.0.* + - pandas==3.0.* - numba-cuda==0.22.2,<0.29.0 - matrix: {dependencies: "latest"} packages: - - pandas==2.3.3 + - pandas==3.0.3 - matrix: packages: - output_types: conda diff --git a/docs/cudf/source/conf.py b/docs/cudf/source/conf.py index 6c58e57db742..24afd929b948 100644 --- a/docs/cudf/source/conf.py +++ b/docs/cudf/source/conf.py @@ -327,7 +327,7 @@ def clean_all_xml_files(path): "numpy": ("https://numpy.org/doc/stable", None), # Temporarily disable nitpick warnings for pandas: https://github.com/pandas-dev/pandas/issues/64584 # "pandas": ( - # "https://pandas.pydata.org/pandas-docs/version/2.3.3/", + # "https://pandas.pydata.org/pandas-docs/stable/", # None, # ), "polars": ("https://docs.pola.rs/api/python/stable/", None), diff --git a/docs/cudf/source/cudf_pandas/faq.md b/docs/cudf/source/cudf_pandas/faq.md index f6094d846305..92165a32266f 100644 --- a/docs/cudf/source/cudf_pandas/faq.md +++ b/docs/cudf/source/cudf_pandas/faq.md @@ -195,7 +195,7 @@ This means that automatic conversion between GPU and CPU types and automatic fal There are a few known limitations that you should be aware of: - Because fallback involves copying data from GPU to CPU and back, - [value mutability](https://pandas.pydata.org/pandas-docs/version/2.3.3/getting_started/overview.html#mutability-and-copying-of-data) + [value mutability](https://pandas.pydata.org/pandas-docs/stable/getting_started/overview.html#mutability-and-copying-of-data) of Pandas objects is not always guaranteed. You should follow the pandas recommendation to favor immutable operations. - For performance reasons, joins and join-based operations are not diff --git a/docs/cudf/source/user_guide/api_docs/dataframe.rst b/docs/cudf/source/user_guide/api_docs/dataframe.rst index 42ec3ed910c5..ffaca216659c 100644 --- a/docs/cudf/source/user_guide/api_docs/dataframe.rst +++ b/docs/cudf/source/user_guide/api_docs/dataframe.rst @@ -107,7 +107,6 @@ Function application, GroupBy & window DataFrame.agg DataFrame.apply - DataFrame.applymap DataFrame.groupby DataFrame.map DataFrame.pipe @@ -167,9 +166,7 @@ Reindexing / selection / label manipulation DataFrame.drop_duplicates DataFrame.duplicated DataFrame.equals - DataFrame.first DataFrame.head - DataFrame.last DataFrame.reindex DataFrame.rename DataFrame.reset_index @@ -189,7 +186,6 @@ Missing data handling .. autosummary:: :toctree: api/ - DataFrame.backfill DataFrame.bfill DataFrame.dropna DataFrame.ffill @@ -200,7 +196,6 @@ Missing data handling DataFrame.nans_to_nulls DataFrame.notna DataFrame.notnull - DataFrame.pad DataFrame.replace Reshaping, sorting, transposing @@ -252,6 +247,8 @@ Metadata :toctree: api/ DataFrame.attrs + DataFrame.flags + DataFrame.set_flags Serialization / IO / conversion ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/cudf/source/user_guide/api_docs/index_objects.rst b/docs/cudf/source/user_guide/api_docs/index_objects.rst index 092bd643f6a0..017ac1f3064e 100644 --- a/docs/cudf/source/user_guide/api_docs/index_objects.rst +++ b/docs/cudf/source/user_guide/api_docs/index_objects.rst @@ -51,13 +51,6 @@ Modifying and computations Index.drop_duplicates Index.equals Index.factorize - Index.is_boolean - Index.is_categorical - Index.is_floating - Index.is_integer - Index.is_interval - Index.is_numeric - Index.is_object Index.min Index.max Index.rename diff --git a/docs/cudf/source/user_guide/api_docs/series.rst b/docs/cudf/source/user_guide/api_docs/series.rst index f6d76beca7b8..678d8de787e7 100644 --- a/docs/cudf/source/user_guide/api_docs/series.rst +++ b/docs/cudf/source/user_guide/api_docs/series.rst @@ -175,10 +175,8 @@ Reindexing / selection / label manipulation Series.drop_duplicates Series.duplicated Series.equals - Series.first Series.head Series.isin - Series.last Series.reindex Series.rename Series.reset_index @@ -195,7 +193,6 @@ Missing data handling .. autosummary:: :toctree: api/ - Series.backfill Series.bfill Series.dropna Series.ffill @@ -206,7 +203,6 @@ Missing data handling Series.nans_to_nulls Series.notna Series.notnull - Series.pad Series.replace Reshaping, sorting @@ -243,6 +239,8 @@ Metadata :toctree: api/ Series.attrs + Series.flags + Series.set_flags Accessors --------- diff --git a/docs/cudf/source/user_guide/groupby.md b/docs/cudf/source/user_guide/groupby.md index 6e7ac22054fa..53ff971a64f2 100644 --- a/docs/cudf/source/user_guide/groupby.md +++ b/docs/cudf/source/user_guide/groupby.md @@ -9,7 +9,7 @@ myst: # GroupBy cuDF supports a small (but important) subset of Pandas' [groupby -API](https://pandas.pydata.org/pandas-docs/version/2.3.3/user_guide/groupby.html). +API](https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html). ## Summary of supported operations @@ -28,7 +28,7 @@ API](https://pandas.pydata.org/pandas-docs/version/2.3.3/user_guide/groupby.html equivalent Pandas function. See the section on [apply](#groupby-apply) for more details. 9. `GroupBy.pipe` similar to - [Pandas](https://pandas.pydata.org/pandas-docs/version/2.3.3/user_guide/groupby.html#piping-function-calls). + [Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#piping-function-calls). ## Grouping @@ -271,4 +271,4 @@ a 4 4 5 9 ``` -[describe]: https://pandas.pydata.org/pandas-docs/version/2.3.3/user_guide/groupby.html#flexible-apply +[describe]: https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#flexible-apply diff --git a/python/cudf/cudf/_typing.py b/python/cudf/cudf/_typing.py index 414c5fc1d04a..b26d36890ddf 100644 --- a/python/cudf/cudf/_typing.py +++ b/python/cudf/cudf/_typing.py @@ -6,7 +6,7 @@ import numpy as np import pandas as pd -from packaging.version import parse +from pandas.api.typing import NoDefault # noqa: F401 import pylibcudf as plc @@ -53,8 +53,3 @@ def __call__( ] Axis = Literal[0, 1, "index", "columns"] - -if parse(pd.__version__) >= parse("3.0.0"): - from pandas.api.typing import NoDefault -else: - NoDefault = Any diff --git a/python/cudf/cudf/api/extensions/accessor.py b/python/cudf/cudf/api/extensions/accessor.py index 025f3626c7a6..f7f49d397c83 100644 --- a/python/cudf/cudf/api/extensions/accessor.py +++ b/python/cudf/cudf/api/extensions/accessor.py @@ -1,10 +1,8 @@ -# SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import warnings -from pandas.core.accessor import CachedAccessor - from cudf.core.dataframe import DataFrame from cudf.core.index import Index from cudf.core.series import Series @@ -25,8 +23,8 @@ Notes ----- - The `{klass}` object will be passed to your custom accessor upon first - invocation. And will be cached for future calls. + The `{klass}` object will be passed to your custom accessor upon each + invocation. If the data passed to your accessor is of wrong datatype, you should raise an `AttributeError` in consistent with other cudf methods. @@ -132,12 +130,25 @@ ) +class _Accessor: + """Custom property-like object. A descriptor for accessors.""" + + def __init__(self, name, accessor): + self._name = name + self._accessor = accessor + + def __get__(self, obj, cls): + if obj is None: + return self._accessor + return self._accessor(obj) + + def _register_accessor(name, cls): def decorator(accessor): if hasattr(cls, name): msg = f"Attribute {name} will be overridden in {cls.__name__}" warnings.warn(msg) - cached_accessor = CachedAccessor(name, accessor) + cached_accessor = _Accessor(name, accessor) cls._accessors.add(name) setattr(cls, name, cached_accessor) diff --git a/python/cudf/cudf/api/types.py b/python/cudf/cudf/api/types.py index 5facd4700731..ac24419ba763 100644 --- a/python/cudf/cudf/api/types.py +++ b/python/cudf/cudf/api/types.py @@ -20,7 +20,10 @@ import pylibcudf as plc import cudf -from cudf.core._compat import PANDAS_LT_300 +from cudf.core.dtype.validators import ( + is_dtype_obj_numeric, + is_dtype_obj_string, +) from cudf.core.dtypes import ( # noqa: F401 _BaseDtype, _is_categorical_dtype, @@ -35,7 +38,6 @@ is_list_dtype, is_struct_dtype, ) -from cudf.utils.dtypes import CUDF_STRING_DTYPE if TYPE_CHECKING: from cudf.core.index import CategoricalIndex @@ -74,7 +76,7 @@ def is_numeric_dtype(obj): ): return False if isinstance(obj, cudf.Index): - return obj._is_numeric() + return is_dtype_obj_numeric(obj.dtype, include_decimal=False) return pd_types.is_numeric_dtype(obj) @@ -104,7 +106,7 @@ def is_string_dtype(obj): return ( ( isinstance(obj, (cudf.Index, cudf.Series)) - and obj.dtype == CUDF_STRING_DTYPE + and is_dtype_obj_string(obj.dtype) ) or (isinstance(obj, pd.StringDtype)) or ( @@ -300,7 +302,7 @@ def is_bool_dtype(arr_or_dtype): True """ if isinstance(arr_or_dtype, cudf.Index): - return arr_or_dtype._is_boolean() + return arr_or_dtype.dtype.kind == "b" elif isinstance(arr_or_dtype, cudf.Series): if isinstance(arr_or_dtype.dtype, cudf.CategoricalDtype): return is_bool_dtype(arr_or_dtype=arr_or_dtype.dtype) @@ -344,7 +346,7 @@ def is_object_dtype(arr_or_dtype): False """ if isinstance(arr_or_dtype, cudf.Index): - return arr_or_dtype._is_object() + return is_dtype_obj_string(arr_or_dtype.dtype) elif isinstance(arr_or_dtype, cudf.Series): return pd_types.is_object_dtype(arr_or_dtype=arr_or_dtype.dtype) else: @@ -384,7 +386,7 @@ def is_float_dtype(arr_or_dtype) -> bool: True """ if isinstance(arr_or_dtype, cudf.Index): - return arr_or_dtype._is_floating() + return arr_or_dtype.dtype.kind == "f" return _wrap_pandas_is_dtype_api(pd_types.is_float_dtype)(arr_or_dtype) @@ -435,7 +437,7 @@ def is_integer_dtype(arr_or_dtype) -> bool: False """ if isinstance(arr_or_dtype, cudf.Index): - return arr_or_dtype._is_integer() + return arr_or_dtype.dtype.kind in "iu" return _wrap_pandas_is_dtype_api(pd_types.is_integer_dtype)(arr_or_dtype) @@ -479,22 +481,13 @@ def is_any_real_numeric_dtype(arr_or_dtype) -> bool: ) -def _is_datetime64tz_dtype(obj): - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - assert PANDAS_LT_300, "Need to drop after pandas-3.0 support is added." - return _wrap_pandas_is_dtype_api(pd_types.is_datetime64tz_dtype)(obj) - - def is_datetime64tz_dtype(obj): - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, "Need to drop after pandas-3.0 support is added." warnings.warn( "is_datetime64tz_dtype is deprecated and will be removed in a future " "version.", FutureWarning, ) - return _is_datetime64tz_dtype(obj) + return _wrap_pandas_is_dtype_api(pd_types.is_datetime64tz_dtype)(obj) # TODO: The below alias is removed for now since improving cudf categorical @@ -531,7 +524,6 @@ def is_datetime64tz_dtype(obj): is_complex = pd_types.is_complex is_float = pd_types.is_float is_hashable = pd_types.is_hashable -is_interval = pd_types.is_interval is_number = pd_types.is_number is_re = pd_types.is_re is_re_compilable = pd_types.is_re_compilable diff --git a/python/cudf/cudf/core/_compat.py b/python/cudf/cudf/core/_compat.py index 295e6c33ac34..3c6e5ef22eaf 100644 --- a/python/cudf/cudf/core/_compat.py +++ b/python/cudf/cudf/core/_compat.py @@ -1,15 +1,8 @@ -# SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd from packaging import version -PANDAS_CURRENT_SUPPORTED_VERSION = version.parse("2.3.3") +PANDAS_CURRENT_SUPPORTED_VERSION = version.parse("3.0.2") PANDAS_VERSION = version.parse(pd.__version__) - - -PANDAS_GE_210 = PANDAS_VERSION >= version.parse("2.1.0") -PANDAS_GT_214 = PANDAS_VERSION > version.parse("2.1.4") -PANDAS_GE_220 = PANDAS_VERSION >= version.parse("2.2.0") -PANDAS_GE_230 = PANDAS_VERSION >= version.parse("2.3.0") -PANDAS_LT_300 = PANDAS_VERSION < version.parse("3.0.0") diff --git a/python/cudf/cudf/core/accessors/base_accessor.py b/python/cudf/cudf/core/accessors/base_accessor.py index d3f28140cb6f..29048eced050 100644 --- a/python/cudf/cudf/core/accessors/base_accessor.py +++ b/python/cudf/cudf/core/accessors/base_accessor.py @@ -98,7 +98,12 @@ def _return_or_inplace( # type: ignore[misc] index=self._parent.index, # type: ignore[union-attr] attrs=self._parent.attrs, # type: ignore[union-attr] ) - if len(table) == 0: + keys = ( + tuple(table.keys()) if isinstance(table, dict) else () + ) + if len(table) == 0 or ( + keys and keys == tuple(range(len(keys))) + ): df._data.rangeindex = True return df elif isinstance(self._parent, cudf.Series): diff --git a/python/cudf/cudf/core/accessors/categorical.py b/python/cudf/cudf/core/accessors/categorical.py index 41a8c7c8915a..405eef35bb14 100644 --- a/python/cudf/cudf/core/accessors/categorical.py +++ b/python/cudf/cudf/core/accessors/categorical.py @@ -53,7 +53,7 @@ class CategoricalAccessor(BaseAccessor): 1 2 dtype: category - Categories (5, object): ['a', 'b', 'c', 'd', 'e'] + Categories (5, str): ['a', 'b', 'c', 'd', 'e'] >>> s.cat.as_ordered() 0 1 1 2 diff --git a/python/cudf/cudf/core/accessors/string.py b/python/cudf/cudf/core/accessors/string.py index e29c63695e48..01ca1b37abf7 100644 --- a/python/cudf/cudf/core/accessors/string.py +++ b/python/cudf/cudf/core/accessors/string.py @@ -24,7 +24,7 @@ from cudf.core.column.column import ColumnBase, as_column, column_empty from cudf.core.dtypes import ListDtype from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, + DEFAULT_STRING_DTYPE, can_convert_to_column, ) @@ -54,7 +54,7 @@ def _massage_string_arg( if allow_col: if isinstance(value, list): - return as_column(value, dtype=CUDF_STRING_DTYPE) # type: ignore[return-value] + return as_column(value, dtype=DEFAULT_STRING_DTYPE) # type: ignore[return-value] from cudf.core.column.string import StringColumn @@ -287,9 +287,9 @@ def cat(self, others=None, sep=None, na_rep=None): >>> s.str.cat(['A', 'B', 'C', 'D'], sep=',') 0 a,A 1 b,B - 2 None + 2 NaN 3 d,D - dtype: object + dtype: str Missing values will remain missing in the result, but can again be represented using na_rep @@ -299,7 +299,7 @@ def cat(self, others=None, sep=None, na_rep=None): 1 b,B 2 -,C 3 d,D - dtype: object + dtype: str If sep is not specified, the values are concatenated without separation. @@ -309,7 +309,7 @@ def cat(self, others=None, sep=None, na_rep=None): 1 bB 2 -C 3 dD - dtype: object + dtype: str """ if sep is None: sep = "" @@ -339,14 +339,14 @@ def cat(self, others=None, sep=None, na_rep=None): ( as_column( frame.reindex(parent_index), - dtype=CUDF_STRING_DTYPE, + dtype=DEFAULT_STRING_DTYPE, ) if ( parent_index is not None and isinstance(frame, cudf.Series) and not frame.index.equals(parent_index) ) - else as_column(frame, dtype=CUDF_STRING_DTYPE) + else as_column(frame, dtype=DEFAULT_STRING_DTYPE) ) for frame in others ) @@ -358,10 +358,10 @@ def cat(self, others=None, sep=None, na_rep=None): ): others = others.reindex(parent_index) - other_cols = [as_column(others, dtype=CUDF_STRING_DTYPE)] + other_cols = [as_column(others, dtype=DEFAULT_STRING_DTYPE)] else: raise TypeError( - "others must be Series, Index, DataFrame, np.ndarrary " + "others must be Series, Index, DataFrame, np.ndarray " "or list-like (either containing only strings or " "containing only objects of type Series/Index/" "np.ndarray[1-dim])" @@ -441,7 +441,7 @@ def join( 1 d-e 2 f 3 g- -h - dtype: object + dtype: str ``sep`` can an array-like input: @@ -450,7 +450,7 @@ def join( 1 d+e 2 f 3 g= =h - dtype: object + dtype: str If the actual series doesn't have lists, each character is joined by `sep`: @@ -460,12 +460,12 @@ def join( 0 abc 1 def 2 ghi - dtype: object + dtype: str >>> ser.str.join(sep='_') 0 a_b_c 1 d_e_f 2 g_h_i - dtype: object + dtype: str We can replace ``/`None` values present in lists using ``string_na_rep`` if the lists contain at least one valid string @@ -480,20 +480,20 @@ def join( dtype: list >>> ser.str.join(sep='_', string_na_rep='k') 0 a_b_k - 1 None - 2 None + 1 NaN + 2 NaN 3 c_d - dtype: object + dtype: str We can replace ``/`None` values present in lists of ``sep`` using ``sep_na_rep``: >>> ser.str.join(sep=[None, '^', '.', '-'], sep_na_rep='+') 0 a+b+ - 1 None - 2 None + 1 NaN + 2 NaN 3 c-d - dtype: object + dtype: str """ if sep is None: sep = "" @@ -594,7 +594,7 @@ def extract( 0 1 0 a 1 1 b 2 - 2 None None + 2 NaN NaN A pattern with one group will return a DataFrame with one column if expand=True. @@ -603,15 +603,15 @@ def extract( 0 0 1 1 2 - 2 None + 2 NaN A pattern with one group will return a Series if expand=False. >>> s.str.extract(r'[ab](\d)', expand=False) 0 1 1 2 - 2 None - dtype: object + 2 NaN + dtype: str .. pandas-compat:: :meth:`pandas.Series.str.extract` @@ -706,14 +706,14 @@ def contains( 1 dog 2 house and parrot 3 23 - 4 None - dtype: object + 4 NaN + dtype: str >>> s1.str.contains('og', regex=False) 0 False 1 True 2 False 3 False - 4 + 4 False dtype: bool Returning an Index of booleans using only a literal pattern. @@ -721,9 +721,9 @@ def contains( >>> data = ['Mouse', 'dog', 'house and parrot', '23.0', np.nan] >>> idx = cudf.Index(data) >>> idx - Index(['Mouse', 'dog', 'house and parrot', '23.0', ], dtype='object') + Index(['Mouse', 'dog', 'house and parrot', '23.0', nan], dtype='str') >>> idx.str.contains('23', regex=False) - Index([False, False, False, True, ], dtype='bool') + Index([False, False, False, True, False], dtype='bool') Returning 'house' or 'dog' when either expression occurs in a string. @@ -732,7 +732,7 @@ def contains( 1 True 2 True 3 False - 4 + 4 False dtype: bool Returning any digit using regular expression. @@ -742,7 +742,7 @@ def contains( 1 False 2 False 3 True - 4 + 4 False dtype: bool Ensure ``pat`` is a not a literal pattern when ``regex`` is set @@ -768,7 +768,7 @@ def contains( 1 True 2 True 3 True - 4 + 4 False dtype: bool .. pandas-compat:: @@ -786,10 +786,8 @@ def contains( and not isinstance(na, bool) ): # GH#59561 - warnings.warn( - "Allowing a non-bool 'na' in obj.str.contains is deprecated " - "and will raise in a future version.", - FutureWarning, + raise ValueError( + f"na must be None, pd.NA, np.nan, True, or False;got {na!r}" ) if regex and isinstance(pat, re.Pattern): flags = pat.flags & ~re.U @@ -817,13 +815,19 @@ def contains( result_col = input_column.str_contains(pat_normed) else: # TODO: we silently ignore the `regex=` flag here - col_pat = as_column(pat, dtype=CUDF_STRING_DTYPE) + col_pat = as_column(pat, dtype=DEFAULT_STRING_DTYPE) if case is False: input_column = self._column.to_lower() col_pat = col_pat.to_lower() # type: ignore[attr-defined] else: input_column = self._column result_col = input_column.str_contains(col_pat) # type: ignore[arg-type] + if ( + na is no_default + and self._column._PANDAS_NA_VALUE in {np.nan, None} + and self._column.has_nulls() + ): + result_col = result_col.fillna(False) if na is not no_default: result_col = result_col.fillna(na) return self._return_or_inplace(result_col) @@ -920,7 +924,7 @@ def repeat( 0 a 1 b 2 c - dtype: object + dtype: str Single int repeats string in Series @@ -928,7 +932,7 @@ def repeat( 0 aa 1 bb 2 cc - dtype: object + dtype: str Sequence of int repeats corresponding string in Series @@ -936,8 +940,10 @@ def repeat( 0 a 1 bb 2 ccc - dtype: object + dtype: str """ + if isinstance(repeats, int) and repeats < 0: + raise ValueError("Negative repeats is not allowed.") if can_convert_to_column(repeats): repeats = as_column(repeats, dtype=np.dtype(np.int64)) # type: ignore[assignment] return self._return_or_inplace(self._column.repeat_strings(repeats)) # type: ignore[arg-type] @@ -984,8 +990,8 @@ def replace( >>> s 0 foo 1 fuz - 2 None - dtype: object + 2 NaN + dtype: str When pat is a string and regex is True (the default), the given pat is compiled as a regex. When repl is a string, it replaces matching @@ -995,8 +1001,8 @@ def replace( >>> s.str.replace('f.', 'ba', regex=True) 0 bao 1 baz - 2 None - dtype: object + 2 NaN + dtype: str When pat is a string and `regex` is False, every pat is replaced with repl as with ``str.replace()``: @@ -1004,8 +1010,8 @@ def replace( >>> s.str.replace('f.', 'ba', regex=False) 0 foo 1 fuz - 2 None - dtype: object + 2 NaN + dtype: str .. pandas-compat:: :meth:`pandas.Series.str.replace` @@ -1034,12 +1040,12 @@ def replace( ) result = self._column.replace_re( list(pat), - as_column(repl, dtype=CUDF_STRING_DTYPE), # type: ignore[arg-type] + as_column(repl, dtype=DEFAULT_STRING_DTYPE), # type: ignore[arg-type] ) else: result = self._column.replace_multiple( - as_column(pat, dtype=CUDF_STRING_DTYPE), # type: ignore[arg-type] - as_column(repl, dtype=CUDF_STRING_DTYPE), # type: ignore[arg-type] + as_column(pat, dtype=DEFAULT_STRING_DTYPE), # type: ignore[arg-type] + as_column(repl, dtype=DEFAULT_STRING_DTYPE), # type: ignore[arg-type] ) return self._return_or_inplace(result) @@ -1089,7 +1095,7 @@ def replace_with_backrefs(self, pat: str, repl: str) -> Series | Index: >>> s.str.replace_with_backrefs('(\\d)(\\d)', 'V\\2\\1') 0 AV453 1 ZV576 - dtype: object + dtype: str """ # If 'pat' is re.Pattern then get the pattern string from it if isinstance(pat, re.Pattern): @@ -1140,32 +1146,32 @@ def slice( 0 koala 1 fox 2 chameleon - dtype: object + dtype: str >>> s.str.slice(start=1) 0 oala 1 ox 2 hameleon - dtype: object + dtype: str >>> s.str.slice(start=-1) 0 a 1 x 2 n - dtype: object + dtype: str >>> s.str.slice(stop=2) 0 ko 1 fo 2 ch - dtype: object + dtype: str >>> s.str.slice(step=2) 0 kaa 1 fx 2 caeen - dtype: object + dtype: str >>> s.str.slice(start=0, stop=5, step=3) 0 kl 1 f 2 cm - dtype: object + dtype: str """ return self._return_or_inplace( self._column.slice_strings(start, stop, step) @@ -1900,7 +1906,7 @@ def lower(self) -> Series | Index: 1 capitals 2 this is a sentence 3 swapcase - dtype: object + dtype: str """ return self._return_or_inplace(self._column.to_lower()) @@ -1945,13 +1951,13 @@ def upper(self) -> Series | Index: 1 CAPITALS 2 this is a sentence 3 SwApCaSe - dtype: object + dtype: str >>> s.str.upper() 0 LOWER 1 CAPITALS 2 THIS IS A SENTENCE 3 SWAPCASE - dtype: object + dtype: str """ return self._return_or_inplace(self._column.to_upper()) @@ -1974,12 +1980,12 @@ def capitalize(self) -> Series | Index: 1 Capitals 2 This is a sentence 3 Swapcase - dtype: object + dtype: str >>> s = cudf.Series(["hello, friend","goodbye, friend"]) >>> s.str.capitalize() 0 Hello, friend 1 Goodbye, friend - dtype: object + dtype: str """ return self._return_or_inplace(self._column.capitalize()) @@ -2020,13 +2026,13 @@ def swapcase(self) -> Series | Index: 1 CAPITALS 2 this is a sentence 3 SwApCaSe - dtype: object + dtype: str >>> s.str.swapcase() 0 LOWER 1 capitals 2 THIS IS A SENTENCE 3 sWaPcAsE - dtype: object + dtype: str """ return self._return_or_inplace(self._column.swapcase()) @@ -2066,13 +2072,13 @@ def title(self) -> Series | Index: 1 CAPITALS 2 this is a sentence 3 SwApCaSe - dtype: object + dtype: str >>> s.str.title() 0 Lower 1 Capitals 2 This Is A Sentence 3 Swapcase - dtype: object + dtype: str """ return self._return_or_inplace(self._column.title()) @@ -2129,7 +2135,7 @@ def filter_alphanum( 1 plums 34 2 Temp 72 3 100K - dtype: object + dtype: str """ if repl is None: repl = "" @@ -2192,13 +2198,13 @@ def slice_from(self, starts: Series, stops: Series) -> Series | Index: >>> s 0 hello 1 there - dtype: object + dtype: str >>> starts = cudf.Series([1, 3]) >>> stops = cudf.Series([5, 5]) >>> s.str.slice_from(starts, stops) 0 ello 1 re - dtype: object + dtype: str """ return self._return_or_inplace( self._column.slice_strings(starts._column, stops._column) @@ -2245,7 +2251,7 @@ def slice_replace( 2 abc 3 abdc 4 abcde - dtype: object + dtype: str Specify just `start`, meaning replace `start` until the `end` of the string with `repl`. @@ -2256,7 +2262,7 @@ def slice_replace( 2 aX 3 aX 4 aX - dtype: object + dtype: str Specify just `stop`, meaning the `start` of the string to `stop` is replaced with `repl`, and the rest of the string is included. @@ -2267,7 +2273,7 @@ def slice_replace( 2 Xc 3 Xdc 4 Xcde - dtype: object + dtype: str Specify `start` and `stop`, meaning the slice from `start` to `stop` is replaced with `repl`. Everything before or @@ -2279,7 +2285,7 @@ def slice_replace( 2 aX 3 aXc 4 aXde - dtype: object + dtype: str """ if start is None: start = 0 @@ -2331,21 +2337,21 @@ def insert( >>> s.str.insert(2, '_') 0 ab_cdefghij 1 01_23456789 - dtype: object + dtype: str When no `repl` is passed, nothing is inserted. >>> s.str.insert(2) 0 abcdefghij 1 0123456789 - dtype: object + dtype: str Negative values are also supported for `start`. >>> s.str.insert(-1,'_') 0 abcdefghij_ 1 0123456789_ - dtype: object + dtype: str """ return self.slice_replace(start, start, repl) @@ -2370,17 +2376,17 @@ def get(self, i: int = 0) -> Series | Index: 0 hello world 1 rapids 2 cudf - dtype: object + dtype: str >>> s.str.get(10) 0 d - 1 None - 2 None - dtype: object + 1 NaN + 2 NaN + dtype: str >>> s.str.get(1) 0 e 1 a 2 u - dtype: object + dtype: str ``get`` also accepts negative index number. @@ -2388,7 +2394,7 @@ def get(self, i: int = 0) -> Series | Index: 0 d 1 s 2 f - dtype: object + dtype: str """ if isinstance(self._column.dtype, ListDtype): return ListMethods(self._parent).get(i) @@ -2457,7 +2463,7 @@ def get_json_object( ... ) >>> series.str.get_json_object("$.store.book") 0 [{"category":"reference","author":"Nigel Rees"... - dtype: object + dtype: str """ return self._return_or_inplace( self._column.get_json_object( @@ -2545,8 +2551,8 @@ def split( >>> s 0 this is a regular sentence 1 https://docs.python.org/index.html - 2 None - dtype: object + 2 NaN + dtype: str In the default setting, the string is split by whitespace. @@ -2589,8 +2595,8 @@ def split( >>> s.str.split(expand=True) 0 1 2 3 4 0 this is a regular sentence - 1 https://docs.python.org/index.html None None None None - 2 None None None None None + 1 https://docs.python.org/index.html NaN NaN NaN NaN + 2 NaN NaN NaN NaN NaN """ if expand not in (True, False): @@ -2724,8 +2730,8 @@ def rsplit( >>> s 0 this is a regular sentence 1 https://docs.python.org/3/tutorial/index.html - 2 None - dtype: object + 2 NaN + dtype: str In the default setting, the string is split by whitespace. @@ -2765,8 +2771,8 @@ def rsplit( >>> s.str.rsplit(n=2, expand=True) 0 1 2 0 this is a regular sentence - 1 https://docs.python.org/3/tutorial/index.html None None - 2 None None None + 1 https://docs.python.org/3/tutorial/index.html NaN NaN + 2 NaN NaN NaN For slightly more complex use cases like splitting the html document name from a url, a combination of parameter @@ -2774,9 +2780,9 @@ def rsplit( >>> s.str.rsplit("/", n=1, expand=True) 0 1 - 0 this is a regular sentence None + 0 this is a regular sentence NaN 1 https://docs.python.org/3/tutorial index.html - 2 None None + 2 NaN NaN """ if expand not in (True, False): @@ -2849,8 +2855,8 @@ def split_part( >>> s.str.split_part(delimiter="_", index=1) 0 b 1 e - 2 None - dtype: object + 2 NaN + dtype: str """ if delimiter is None: @@ -2896,7 +2902,7 @@ def partition(self, sep: str = " ", expand: bool = True) -> Series | Index: >>> s 0 Linda van der Berg 1 George Pitt-Rivers - dtype: object + dtype: str >>> s.str.partition() 0 1 2 @@ -2914,7 +2920,7 @@ def partition(self, sep: str = " ", expand: bool = True) -> Series | Index: >>> idx = cudf.Index(['X 123', 'Y 999']) >>> idx - Index(['X 123', 'Y 999'], dtype='object') + Index(['X 123', 'Y 999'], dtype='str') Which will create a MultiIndex: @@ -2984,7 +2990,7 @@ def rpartition( >>> s 0 Linda van der Berg 1 George Pitt-Rivers - dtype: object + dtype: str >>> s.str.rpartition() 0 1 2 0 Linda van der Berg @@ -2994,7 +3000,7 @@ def rpartition( >>> idx = cudf.Index(['X 123', 'Y 999']) >>> idx - Index(['X 123', 'Y 999'], dtype='object') + Index(['X 123', 'Y 999'], dtype='str') Which will create a MultiIndex: @@ -3075,17 +3081,17 @@ def pad( >>> s.str.pad(width=10) 0 caribou 1 tiger - dtype: object + dtype: str >>> s.str.pad(width=10, side='right', fillchar='-') 0 caribou--- 1 tiger----- - dtype: object + dtype: str >>> s.str.pad(width=10, side='both', fillchar='-') 0 -caribou-- 1 --tiger--- - dtype: object + dtype: str """ if not isinstance(fillchar, str): msg = ( @@ -3156,8 +3162,8 @@ def zfill(self, width: int) -> Series | Index: 0 -1 1 1 2 1000 - 3 None - dtype: object + 3 NaN + dtype: str Note that ``None`` is not string, therefore it is converted to ``None``. ``1000`` remains unchanged as @@ -3167,8 +3173,8 @@ def zfill(self, width: int) -> Series | Index: 0 -01 1 001 2 1000 - 3 None - dtype: object + 3 NaN + dtype: str """ if not is_integer(width): msg = f"width must be of integer type, not {type(width).__name__}" @@ -3203,33 +3209,33 @@ def center(self, width: int, fillchar: str = " ") -> Series | Index: >>> s.str.center(1) 0 a 1 b - 2 None + 2 NaN 3 d - dtype: object + dtype: str >>> s.str.center(1, fillchar='-') 0 a 1 b - 2 None + 2 NaN 3 d - dtype: object + dtype: str >>> s.str.center(2, fillchar='-') 0 a- 1 b- - 2 None + 2 NaN 3 d- - dtype: object + dtype: str >>> s.str.center(5, fillchar='-') 0 --a-- 1 --b-- - 2 None + 2 NaN 3 --d-- - dtype: object + dtype: str >>> s.str.center(6, fillchar='-') 0 --a--- 1 --b--- - 2 None + 2 NaN 3 --d--- - dtype: object + dtype: str """ return self.pad(width, "both", fillchar) @@ -3261,14 +3267,14 @@ def ljust(self, width: int, fillchar: str = " ") -> Series | Index: >>> s.str.ljust(10, fillchar="_") 0 hello world 1 rapids ai_ - dtype: object + dtype: str >>> s = cudf.Series(["a", "", "ab", "__"]) >>> s.str.ljust(1, fillchar="-") 0 a 1 - 2 ab 3 __ - dtype: object + dtype: str """ return self.pad(width, "right", fillchar) @@ -3300,14 +3306,14 @@ def rjust(self, width: int, fillchar: str = " ") -> Series | Index: >>> s.str.rjust(20, fillchar="_") 0 _________hello world 1 ___________rapids ai - dtype: object + dtype: str >>> s = cudf.Series(["a", "", "ab", "__"]) >>> s.str.rjust(1, fillchar="-") 0 a 1 - 2 ab 3 __ - dtype: object + dtype: str """ return self.pad(width, "left", fillchar) @@ -3348,20 +3354,20 @@ def strip(self, to_strip: str | None = None) -> Series | Index: 0 1. Ant. 1 2. Bee!\n 2 3. Cat?\t - 3 None - dtype: object + 3 NaN + dtype: str >>> s.str.strip() 0 1. Ant. 1 2. Bee! 2 3. Cat? - 3 None - dtype: object + 3 NaN + dtype: str >>> s.str.strip('123.!? \n\t') 0 Ant 1 Bee 2 Cat - 3 None - dtype: object + 3 NaN + dtype: str """ if not (isinstance(to_strip, str) or to_strip is None): raise TypeError( @@ -3408,8 +3414,8 @@ def lstrip(self, to_strip: str | None = None) -> Series | Index: 0 Ant. 1 Bee!\n 2 Cat?\t - 3 None - dtype: object + 3 NaN + dtype: str """ if not (isinstance(to_strip, str) or to_strip is None): raise TypeError( @@ -3458,14 +3464,14 @@ def rstrip(self, to_strip: str | None = None) -> Series | Index: 0 1. Ant. 1 2. Bee!\n 2 3. Cat?\t - 3 None - dtype: object + 3 NaN + dtype: str >>> s.str.rstrip('.!? \n\t') 0 1. Ant 1 2. Bee 2 3. Cat - 3 None - dtype: object + 3 NaN + dtype: str """ if not (isinstance(to_strip, str) or to_strip is None): raise TypeError( @@ -3518,7 +3524,7 @@ def wrap(self, width: int, **kwargs) -> Series | Index: >>> s.str.wrap(12, expand_tabs=False, break_long_words=False, break_on_hyphens=False) 0 line to be\nwrapped 1 another line\nto be\nwrapped - dtype: object + dtype: str """ if not is_integer(width): msg = f"width must be of integer type, not {type(width).__name__}" @@ -3780,7 +3786,7 @@ def find_multiple(self, patterns: Series | Index) -> Series: 1 to 2 search 3 in - dtype: object + dtype: str >>> t = cudf.Series(["a", "string", "g", "inn", "o", "r", "sea"]) >>> t 0 a @@ -3790,7 +3796,7 @@ def find_multiple(self, patterns: Series | Index) -> Series: 4 o 5 r 6 sea - dtype: object + dtype: str >>> s.str.find_multiple(t) 0 [-1, 0, 5, -1, -1, 2, -1] 1 [-1, -1, -1, -1, 1, -1, -1] @@ -3806,7 +3812,7 @@ def find_multiple(self, patterns: Series | Index) -> Series: f"found {type(patterns)}" ) - if patterns_column.dtype != CUDF_STRING_DTYPE: + if not is_string_dtype(patterns_column.dtype): raise TypeError( "patterns can only be of 'string' dtype, " f"got: {patterns_column.dtype}" @@ -3947,13 +3953,13 @@ def endswith(self, pat: str | tuple[str, ...]) -> Series | Index: 0 bat 1 bear 2 caT - 3 None - dtype: object + 3 NaN + dtype: str >>> s.str.endswith('t') 0 True 1 False 2 False - 3 + 3 False dtype: bool .. pandas-compat:: @@ -3998,13 +4004,13 @@ def startswith(self, pat: str | tuple[str, ...]) -> Series | Index: 0 bat 1 Bear 2 cat - 3 None - dtype: object + 3 NaN + dtype: str >>> s.str.startswith('b') 0 True 1 False 2 False - 3 + 3 False dtype: bool """ return self._starts_ends_with(plc.strings.find.starts_with, pat) @@ -4033,12 +4039,12 @@ def removesuffix(self, suffix: str) -> Series | Index: 0 foo_str 1 bar_str 2 no_suffix - dtype: object + dtype: str >>> s.str.removesuffix("_str") 0 foo 1 bar 2 no_suffix - dtype: object + dtype: str """ if suffix is None or len(suffix) == 0: return self._return_or_inplace(self._column) @@ -4072,12 +4078,12 @@ def removeprefix(self, prefix: str) -> Series | Index: 0 str_foo 1 str_bar 2 no_prefix - dtype: object + dtype: str >>> s.str.removeprefix("str_") 0 foo 1 bar 2 no_prefix - dtype: object + dtype: str """ if prefix is None or len(prefix) == 0: return self._return_or_inplace(self._column) @@ -4390,6 +4396,8 @@ def match( result = self._column.matches_re(pat, flags) if na is not no_default: result = result.fillna(na) + elif self._column._PANDAS_NA_VALUE in {np.nan, None}: + result = result.fillna(False) return self._return_or_inplace(result) def url_decode(self) -> Series | Index: @@ -4410,14 +4418,14 @@ def url_decode(self) -> Series | Index: 0 A/B-C/D 1 e f.g 2 4-5,6 - dtype: object + dtype: str >>> data = ["https%3A%2F%2Frapids.ai%2Fstart.html", ... "https%3A%2F%2Fmedium.com%2Frapids-ai"] >>> s = cudf.Series(data) >>> s.str.url_decode() 0 https://rapids.ai/start.html 1 https://medium.com/rapids-ai - dtype: object + dtype: str """ return self._return_or_inplace(self._column.url_decode()) @@ -4441,14 +4449,14 @@ def url_encode(self) -> Series | Index: 0 A%2FB-C%2FD 1 e%20f.g 2 4-5%2C6 - dtype: object + dtype: str >>> data = ["https://rapids.ai/start.html", ... "https://medium.com/rapids-ai"] >>> s = cudf.Series(data) >>> s.str.url_encode() 0 https%3A%2F%2Frapids.ai%2Fstart.html 1 https%3A%2F%2Fmedium.com%2Frapids-ai - dtype: object + dtype: str """ return self._return_or_inplace(self._column.url_encode()) @@ -4519,13 +4527,13 @@ def translate(self, table: dict) -> Series | Index: 1 CAPITALS 2 this is 1 sentence 3 SwApC1Se - dtype: object + dtype: str >>> s.str.translate({'a': "1", "e":"#"}) 0 low#r 1 CAPITALS 2 this is 1 s#nt#nc# 3 SwApC1S# - dtype: object + dtype: str """ return self._return_or_inplace(self._column.translate(table)) @@ -4566,12 +4574,12 @@ def filter_characters( 0 aei 1 OU 2 456 - dtype: object + dtype: str >>> s.str.filter_characters({'a':'l', 'M':'Z', '4':'6'}, False, "_") 0 ___ou 1 AEI__ 2 0123___789 - dtype: object + dtype: str """ if repl is None: repl = "" @@ -4603,7 +4611,7 @@ def normalize_spaces(self) -> Series | Index: >>> ser.str.normalize_spaces() 0 hello world 1 test string - dtype: object + dtype: str """ return self._return_or_inplace(self._column.normalize_spaces()) @@ -4634,7 +4642,7 @@ def tokenize(self, delimiter: str = " ") -> Series | Index: 1 world 2 hello 2 goodbye - dtype: object + dtype: str """ delim = _massage_string_arg(delimiter, "delimiter", allow_col=True) @@ -4688,7 +4696,7 @@ def detokenize( 0 hello world 1 one two 2 three - dtype: object + dtype: str """ sep = _massage_string_arg(separator, "separator") return self._return_or_inplace( @@ -4741,7 +4749,7 @@ def character_tokenize(self) -> Series | Index: 1 o 1 u 1 . - dtype: object + dtype: str """ result_col = ColumnBase.create( self._column.character_tokenize().plc_column.children()[1], @@ -4820,13 +4828,13 @@ def ngrams(self, n: int = 2, separator: str = "_") -> Series | Index: >>> str_series = cudf.Series(['this is my', 'favorite book']) >>> str_series.str.ngrams(2, "_") 0 this is my_favorite book - dtype: object + dtype: str >>> str_series = cudf.Series(['abc','def','xyz','hhh']) >>> str_series.str.ngrams(2, "_") 0 abc_def 1 def_xyz 2 xyz_hhh - dtype: object + dtype: str """ sep = _massage_string_arg(separator, "separator") return self._return_or_inplace( @@ -4862,14 +4870,14 @@ def character_ngrams( 1 gh 2 xy 2 yz - dtype: object + dtype: str >>> str_series.str.character_ngrams(3) 0 abc 0 bcd 1 efg 1 fgh 2 xyz - dtype: object + dtype: str >>> str_series.str.character_ngrams(3,True) 0 [abc, bcd] 1 [efg, fgh] @@ -4960,7 +4968,7 @@ def ngrams_tokenize( 0 this_is 1 is_the 2 best_book - dtype: object + dtype: str """ delim = _massage_string_arg(delimiter, "delimiter") sep = _massage_string_arg(separator, "separator") @@ -5004,13 +5012,13 @@ def replace_tokens( 0 this _ _ 1 theme music 2 - dtype: object + dtype: str >>> sr = cudf.Series(["this;is;me", "theme;music", ""]) >>> sr.str.replace_tokens(targets=targets, replacements=":") 0 this;is;me 1 theme;music 2 - dtype: object + dtype: str """ if can_convert_to_column(targets): targets_column = as_column(targets) @@ -5090,13 +5098,13 @@ def filter_tokens( 0 this _ _ 1 theme music 2 - dtype: object + dtype: str >>> sr = cudf.Series(["this;is;me", "theme;music", ""]) >>> sr.str.filter_tokens(5,None,";") 0 ;; 1 theme;music 2 - dtype: object + dtype: str """ if replacement is None: diff --git a/python/cudf/cudf/core/algorithms.py b/python/cudf/cudf/core/algorithms.py index 6c7dd7837c20..1598cfc9bce3 100644 --- a/python/cudf/cudf/core/algorithms.py +++ b/python/cudf/cudf/core/algorithms.py @@ -58,7 +58,7 @@ def factorize( >>> codes array([0, 1, 1]) >>> uniques - Index(['a', 'c'], dtype='object') + Index(['a', 'c'], dtype='str') When ``use_na_sentinel=True`` (the default), missing values are indicated in the `codes` with the sentinel value ``-1`` and missing values are not @@ -68,7 +68,7 @@ def factorize( >>> codes array([ 0, -1, 1, 2, 0]) >>> uniques - Index(['b', 'a', 'c'], dtype='object') + Index(['b', 'a', 'c'], dtype='str') If NA is in the values, and we want to include NA in the uniques of the values, it can be achieved by setting ``use_na_sentinel=False``. @@ -78,14 +78,31 @@ def factorize( >>> codes array([ 0, 1, 0, -1]) >>> uniques - Index([1.0, 2.0], dtype='float64') + array([1., 2.]) >>> codes, uniques = cudf.factorize(values, use_na_sentinel=False) >>> codes array([0, 1, 0, 2]) >>> uniques - Index([1.0, 2.0, ], dtype='float64') + array([ 1., 2., nan]) """ - return_cupy_array = isinstance(values, cp.ndarray) + if size_hint: + warnings.warn("size_hint is not applicable for cudf.factorize") + + # cupy/numpy arrays: run column logic directly and return an array + # for ``cats`` so the call is closed under array inputs (mirrors + # ``pd.factorize(np.ndarray)``). + if isinstance(values, cp.ndarray): + labels, cats = as_column(values).factorize(sort, use_na_sentinel) + return labels, cats.values + if isinstance(values, np.ndarray): + labels, cats = as_column(values).factorize(sort, use_na_sentinel) + return labels.get(), cats.to_pandas().to_numpy() + + # cudf objects: delegate to the type's ``_factorize`` so subclasses + # (e.g. ``RangeIndex``) can specialize while sharing the common + # column-level ``Column.factorize`` path by default. + if isinstance(values, (cudf.Series, cudf.Index, cudf.MultiIndex)): + return values._factorize(sort=sort, use_na_sentinel=use_na_sentinel) if not can_convert_to_column(values): raise TypeError( @@ -93,31 +110,9 @@ def factorize( f"got {type(values)}" ) - values = as_column(values) - - if size_hint: - warnings.warn("size_hint is not applicable for cudf.factorize") - - if use_na_sentinel: - cats = values.dropna() - else: - cats = values - - cats = cats.unique().astype(values.dtype) - - if sort: - cats = cats.sort_values() - - labels = values._label_encoding( - cats=cats, - dtype=np.dtype("int64"), - ).values - + labels, cats = as_column(values).factorize(sort, use_na_sentinel) # TODO: Avoid accessing Index from the top level namespace - return ( - labels, - cats.values if return_cupy_array else cudf.Index._from_column(cats), - ) + return labels, cudf.Index._from_column(cats) def unique(values): @@ -161,7 +156,7 @@ def unique(values): >>> import pandas as pd >>> cudf.unique(cudf.Series([pd.Timestamp("20160101"), pd.Timestamp("20160101")])) 0 2016-01-01 - dtype: datetime64[ns] + dtype: datetime64[us] >>> cudf.unique( ... cudf.Series( @@ -174,7 +169,7 @@ def unique(values): ... ) 0 2016-01-01 00:00:00-05:00 1 2016-01-03 00:00:00-05:00 - dtype: datetime64[ns, US/Eastern] + dtype: datetime64[us, US/Eastern] >>> cudf.unique( ... cudf.Index( @@ -185,7 +180,7 @@ def unique(values): ... ] ... ) ... ) - DatetimeIndex(['2016-01-01 00:00:00-05:00', '2016-01-03 00:00:00-05:00'], dtype='datetime64[ns, US/Eastern]') + DatetimeIndex(['2016-01-01 00:00:00-05:00', '2016-01-03 00:00:00-05:00'], dtype='datetime64[us, US/Eastern]') An unordered Categorical will return categories in the order of appearance. @@ -195,14 +190,14 @@ def unique(values): 1 a 2 c dtype: category - Categories (3, object): ['a', 'b', 'c'] + Categories (3, str): ['a', 'b', 'c'] >>> cudf.unique(cudf.Series(pd.Categorical(list("baabc"), categories=list("abc")))) 0 b 1 a 2 c dtype: category - Categories (3, object): ['a', 'b', 'c'] + Categories (3, str): ['a', 'b', 'c'] An ordered Categorical preserves the category ordering. @@ -215,7 +210,7 @@ def unique(values): 1 a 2 c dtype: category - Categories (3, object): ['a' < 'b' < 'c'] + Categories (3, str): ['a' < 'b' < 'c'] """ # TODO: Avoid accessing Index and Series from the top level namespace if not isinstance(values, (cudf.Series, cudf.Index, cp.ndarray)): diff --git a/python/cudf/cudf/core/buffer/buffer.py b/python/cudf/cudf/core/buffer/buffer.py index f278b67a36a0..fd99f85246ff 100644 --- a/python/cudf/cudf/core/buffer/buffer.py +++ b/python/cudf/cudf/core/buffer/buffer.py @@ -14,7 +14,6 @@ from cudf.core.abc import Serializable from cudf.core.buffer.string import format_bytes -from cudf.options import get_option if TYPE_CHECKING: from collections.abc import Mapping @@ -254,8 +253,7 @@ def __init__( self._access_mode_stack: list[Literal["read", "write"]] = [] self._access_context = _BufferAccessContext(self) # Track this slice for copy-on-write - if get_option("copy_on_write"): - self._owner._slices.add(self) + self._owner._slices.add(self) @property def size(self) -> int: @@ -281,7 +279,7 @@ def ptr(self) -> int: mode = ( self._access_mode_stack[-1] if self._access_mode_stack else "read" ) - if mode == "write" and get_option("copy_on_write"): + if mode == "write": self.make_single_owner_inplace() return self._owner.ptr + self._offset @@ -318,21 +316,10 @@ def copy(self, deep: bool = True) -> Self: Parameters ---------- deep : bool, default True - The semantics when copy-on-write is disabled: - - If deep=True, returns a deep copy of the underlying data. - - If deep=False, returns a shallow copy of the Buffer pointing - to the same underlying data. - The semantics when copy-on-write is enabled: - - From the users perspective, always a deep copy of the - underlying data. However, the data isn't actually copied - until someone writes to the returned buffer. - - Returns - ------- - Buffer - A new buffer that either refers to either a new or an existing - `BufferOwner` depending on the expose status of the owner and the - copy-on-write option (see above). + If deep=True, returns a deep copy of the underlying data. + If deep=False, returns a shallow copy that shares the same + underlying data via copy-on-write. The data isn't actually + copied until someone writes to the returned buffer. """ # When doing a shallow copy, we just return a new slice if not deep: diff --git a/python/cudf/cudf/core/buffer/spillable_buffer.py b/python/cudf/cudf/core/buffer/spillable_buffer.py index 992571d3a0c9..87a7bbc30e20 100644 --- a/python/cudf/cudf/core/buffer/spillable_buffer.py +++ b/python/cudf/cudf/core/buffer/spillable_buffer.py @@ -21,7 +21,6 @@ host_memory_allocation, ) from cudf.core.buffer.string import format_bytes -from cudf.options import get_option from cudf.utils.performance_tracking import _get_color_for_nvtx if TYPE_CHECKING: @@ -531,8 +530,7 @@ def serialize(self) -> tuple[dict, list]: return header, frames def copy(self, deep: bool = True) -> Self: - if get_option("copy_on_write"): - deep = deep or self._owner.exposed + deep = deep or self._owner.exposed if not deep: return super().copy(deep=False) diff --git a/python/cudf/cudf/core/column/categorical.py b/python/cudf/cudf/core/column/categorical.py index c2ec784fe52a..254a8f7be2f7 100644 --- a/python/cudf/cudf/core/column/categorical.py +++ b/python/cudf/cudf/core/column/categorical.py @@ -3,7 +3,6 @@ from __future__ import annotations -import warnings from functools import cached_property from typing import TYPE_CHECKING, Any, Self, cast @@ -304,19 +303,21 @@ def to_pandas( if arrow_type: raise NotImplementedError(f"{arrow_type=} is not supported.") - if self.categories.dtype.kind == "f": - new_mask, null_count = self.notnull().fillna(False).as_mask() - col = self.set_mask(new_mask, null_count) - else: - col = self - - signed_dtype = min_signed_type(len(col.categories)) + signed_dtype = min_signed_type(len(self.categories)) codes = ( - col.codes.astype(signed_dtype) + self.codes.astype(signed_dtype) .fillna(_DEFAULT_CATEGORICAL_VALUE) .to_numpy() ) + if self.categories.dtype.kind == "f": + # NaN categories need to be mapped to "missing" (-1) in pandas. + codes[~self.notnull().fillna(False).to_numpy()] = ( + _DEFAULT_CATEGORICAL_VALUE + ) + + col = self + cats = col.categories.nans_to_nulls() if not isinstance(cats.dtype, IntervalDtype): # leaving out dropna because it temporarily changes an interval @@ -335,7 +336,9 @@ def to_arrow(self) -> pa.Array: if self.size > 0 else np.dtype(np.int8) ) - assert self.ordered is not None + assert self.ordered is not None, ( + "Categorical 'ordered' attribute must be set to convert to Arrow" + ) return pa.DictionaryArray.from_arrays( self.codes.astype(signed_type).to_arrow(), self.categories.to_arrow(), @@ -529,13 +532,8 @@ def find_and_replace( new_cats_col = ColumnBase.create(new_cats_plc, cats_col.dtype) result_dtype = CategoricalDtype(new_cats_col, self.dtype.ordered) if result_dtype != self.dtype: - warnings.warn( - "The behavior of replace with " - "CategoricalDtype is deprecated. In a future version, replace " - "will only be used for cases that preserve the categories. " - "To change the categories, use ser.cat.rename_categories " - "instead.", - FutureWarning, + raise TypeError( + f"Cannot setitem on a Categorical with a new category ({result_dtype}), set the categories first" ) return cast("Self", ColumnBase.create(new_codes, result_dtype)) diff --git a/python/cudf/cudf/core/column/column.py b/python/cudf/cudf/core/column/column.py index 013b3f5ab2c9..a79713f74675 100644 --- a/python/cudf/cudf/core/column/column.py +++ b/python/cudf/cudf/core/column/column.py @@ -34,7 +34,6 @@ is_dtype_equal, is_scalar, ) -from cudf.core._compat import PANDAS_GE_210 from cudf.core._internals import ( aggregation, copying, @@ -76,7 +75,7 @@ from cudf.core.mixins import BinaryOperand, Reducible from cudf.errors import MixedTypeError from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, + DEFAULT_STRING_DTYPE, SIZE_TYPE_DTYPE, _get_nan_for_dtype, _maybe_convert_to_default_type, @@ -86,9 +85,11 @@ dtype_to_pylibcudf_type, find_common_type, get_dtype_of_same_kind, + is_arrow_null_dtype, is_column_like, is_mixed_with_object_dtype, is_pandas_nullable_extension_dtype, + is_pandas_nullable_numpy_dtype, min_signed_type, np_dtypes_to_pandas_dtypes, pyarrow_dtype_to_cudf_dtype, @@ -114,11 +115,6 @@ from cudf.core.column.timedelta import TimeDeltaColumn from cudf.core.index import Index -if PANDAS_GE_210: - NumpyExtensionArray = pd.arrays.NumpyExtensionArray -else: - NumpyExtensionArray = pd.arrays.PandasArray - class ColumnList: """Tag type to mark a group of columns for plc.Table construction. @@ -213,6 +209,7 @@ def policy(result: plc.Column, dtypes: "list[DtypeObj]") -> "DtypeObj": bool_same_kind_policy = same_kind_dtype_policy(np.dtype(np.bool_)) int16_same_kind_policy = same_kind_dtype_policy(np.dtype(np.int16)) int32_same_kind_policy = same_kind_dtype_policy(np.dtype(np.int32)) +int64_same_kind_policy = same_kind_dtype_policy(np.dtype(np.int64)) def list_dtype_policy( @@ -227,6 +224,17 @@ def pylibcudf_result_dtype_policy( return dtype_from_pylibcudf_column(result) +def pylibcudf_result_same_kind_dtype_policy( + result: plc.Column, dtypes: "list[DtypeObj]" +) -> "DtypeObj": + """Like ``pylibcudf_result_dtype_policy`` but preserves the first input + dtype's "kind" (pandas-nullable / ArrowDtype) on the result. + """ + return get_dtype_of_same_kind( + dtypes[0], dtype_from_pylibcudf_column(result) + ) + + def pandas_compatible_string_dtype_policy( target_dtype: np.dtype, ) -> "DtypePolicy": @@ -293,6 +301,10 @@ def _can_values_be_equal(left: DtypeObj, right: DtypeObj) -> bool: return _can_values_be_equal(left.categories.dtype, right) elif isinstance(right, CategoricalDtype): return _can_values_be_equal(left, right.categories.dtype) + elif isinstance(left, pd.StringDtype) and is_dtype_obj_string(right): + return True + elif isinstance(right, pd.StringDtype) and is_dtype_obj_string(left): + return True elif is_dtype_obj_numeric(left) and is_dtype_obj_numeric(right): return True elif left.kind == right.kind and left.kind in "mM": @@ -346,11 +358,9 @@ def _normalize_types_column(col: plc.Column) -> plc.Column: return plc.unary.cast(col, plc.DataType(plc.TypeId.TIMESTAMP_SECONDS)) if type_id == plc.TypeId.EMPTY: - plc_dtype = plc.DataType(plc.TypeId.INT8) - if col.size() == 0: - return plc.column_factories.make_empty_column(plc_dtype) - return plc.column_factories.make_numeric_column( - plc_dtype, col.size(), plc.types.MaskState.ALL_NULL + return plc.Column.from_scalar( + plc.Scalar.from_py(None, plc.DataType(plc.TypeId.STRING)), + col.size(), ) normalized_children = [ @@ -380,6 +390,10 @@ def _wrap_and_validate(col: plc.Column, dtype: DtypeObj) -> plc.Column: "Normalize to np.dtype('O') before calling " "ColumnBase.create." ) + if is_arrow_null_dtype(dtype) and col.null_count() != col.size(): + raise ValueError( + f"dtype {dtype} can only be used with all-null columns." + ) dtype_kind = dtype.kind children: list[plc.Column] = [] @@ -517,24 +531,28 @@ def size(self) -> int: ) -def _handle_nulls(arrow_array: pa.Array) -> pa.Array: +def _handle_nulls(arrow_array: pa.Array, nested: bool = False) -> pa.Array: # Recursively replace all-null nested arrays with arrow NullArrays and make all # types nullable in the schema even if the columns contain no nulls array_type = arrow_array.type - # Empty nested (except interval types) or string types should become pyarrow null arrays instead of the - # normal array classes to match how pyarrow ingests such pandas objects. + # All-null nested (except interval types) should become pyarrow null + # arrays to match how pyarrow ingests such pandas objects. + # All-null string arrays nested inside list/struct children should also + # become null arrays, but top-level string columns should preserve their + # string type to match pandas str dtype behavior. is_interval_type = ( pa.types.is_struct(array_type) and len(array_type) == 2 and array_type[0].name == "left" and array_type[1].name == "right" ) - if ( - (pa.types.is_nested(array_type) and not is_interval_type) - or pa.types.is_string(array_type) - or pa.types.is_large_string(array_type) - ) and arrow_array.null_count == len(arrow_array): + is_all_null = arrow_array.null_count == len(arrow_array) + is_nested_type = pa.types.is_nested(array_type) and not is_interval_type + is_string_type = pa.types.is_string( + array_type + ) or pa.types.is_large_string(array_type) + if is_all_null and (is_nested_type or (nested and is_string_type)): return pa.NullArray.from_buffers( pa.null(), len(arrow_array), [pa.py_buffer(b"")] ) @@ -552,7 +570,7 @@ def _handle_nulls(arrow_array: pa.Array) -> pa.Array: or pa.types.is_string(field_type) or pa.types.is_large_string(field_type) ): - new_field_array = _handle_nulls(field_array) + new_field_array = _handle_nulls(field_array, nested=True) new_fields.append(new_field_array) # Reconstruct if we replaced nulls in children or need nullability change requires_reconstruction = ( @@ -582,7 +600,7 @@ def _handle_nulls(arrow_array: pa.Array) -> pa.Array: arrow_array = cast("pa.ListArray", arrow_array) values = arrow_array.values - new_values = _handle_nulls(values) + new_values = _handle_nulls(values, nested=True) value_field = array_type.value_field has_non_nullable_field = ( @@ -1113,18 +1131,24 @@ def __repr__(self) -> str: f"dtype: {self.dtype}" ) - def _prep_pandas_compat_repr(self) -> StringColumn | Self: + def _prep_pandas_compat_repr( + self, nan_rep: str | None = None + ) -> StringColumn | Self: """ Preprocess Column to be compatible with pandas repr, namely handling nulls. * null (datetime/timedelta) = str(pd.NaT) * null (other types)= str(pd.NA) """ + if nan_rep is None: + nan_rep = "NaN" if self.has_nulls(): return cast( - "StringColumn", - self.astype(CUDF_STRING_DTYPE).fillna( - str(self._PANDAS_NA_VALUE) + "cudf.core.column.StringColumn", + self.astype(np.dtype("str")).fillna( + nan_rep + if self._PANDAS_NA_VALUE is np.nan + else str(self._PANDAS_NA_VALUE) ), ) return self @@ -1162,8 +1186,10 @@ def to_pandas( else: # xref https://github.com/rapidsai/cudf/issues/21120 # TODO: Revisit using pa_array.to_pandas() once pandas 3.0 is supported + np_array = pa_array.to_numpy(zero_copy_only=False, writable=True) return pd.Index( - pa_array.to_numpy(zero_copy_only=False, writable=True), + np_array, + dtype=np_array.dtype, copy=False, ) @@ -1397,6 +1423,8 @@ def dropna(self) -> Self: return self.copy() def to_arrow(self) -> pa.Array: + if is_arrow_null_dtype(self.dtype): + return pa.nulls(len(self)) with self.access(mode="read", scope="internal"): return _handle_nulls( self.plc_column.to_arrow( @@ -1550,7 +1578,7 @@ def _fill( if end <= begin or begin >= self.size: return self if inplace else self.copy() - if not inplace or self.dtype == CUDF_STRING_DTYPE: + if not inplace or is_dtype_obj_string(self.dtype): with self.access(mode="read", scope="internal"): result = cast( "Self", @@ -1564,7 +1592,7 @@ def _fill( self.dtype, ), ) - if self.dtype == CUDF_STRING_DTYPE: + if is_dtype_obj_string(self.dtype): return self._mimic_inplace(result, inplace=True) return result @@ -1613,14 +1641,9 @@ def copy(self, deep: bool = True) -> Self: deep : bool, default True If True, a true physical copy of the column is made. - If False and `copy_on_write` is False, the same - memory is shared between the buffers of the Column - and changes made to one Column will propagate to - its copy and vice-versa. - If False and `copy_on_write` is True, the same - memory is shared between the buffers of the Column - until there is a write operation being performed on - them. + If False, the same memory is shared between the + buffers of the Column via copy-on-write. A physical + copy is made when a write operation is performed. """ plc_col = self.plc_column if deep: @@ -1916,9 +1939,10 @@ def repeat(self, repeats: int) -> Self: def fillna( self, fill_value: ScalarLike | ColumnLike, - method: Literal["ffill", "bfill", None] = None, + method: plc.replace.ReplacePolicy | None = None, ) -> Self: - """Fill null values with ``value``. + """ + Fill null values with ``value``. Supports .fillna, .bfill, .ffill. Returns a copy with null filled. """ @@ -1947,17 +1971,14 @@ def fillna( input_col = self.nans_to_nulls() with self.access(mode="read", scope="internal"): - plc_replace: plc.replace.ReplacePolicy | plc.Scalar - if method: - plc_replace = ( - plc.replace.ReplacePolicy.PRECEDING - if method == "ffill" - else plc.replace.ReplacePolicy.FOLLOWING - ) - elif isinstance(fill_value, plc.Scalar): - plc_replace = fill_value + plc_replace: plc.replace.ReplacePolicy | plc.Scalar | plc.Column + if method is None: + if isinstance(fill_value, plc.Scalar): + plc_replace = fill_value + else: + plc_replace = fill_value.plc_column else: - plc_replace = fill_value.plc_column + plc_replace = method plc_column = plc.replace.replace_nulls( input_col.plc_column, plc_replace, @@ -1998,12 +2019,22 @@ def notnull(self) -> ColumnBase: ).execute_with_args(self) def interpolate(self, index: Index) -> ColumnBase: + if is_dtype_obj_string(self.dtype): + # TODO: Should raise for other types? + raise TypeError( + f"Cannot interpolate with column of dtype {self.dtype}" + ) + if self.nullable: + col = self.astype(np.dtype(np.float64)).fillna(np.nan) + else: + col = self + # figure out where the nans are mask = self.isnull() # trivial cases, all nan or no nans if not mask.any() or mask.all(): - return self.copy() + return col.copy() from cudf.core.index import RangeIndex @@ -2013,7 +2044,7 @@ def interpolate(self, index: Index) -> ColumnBase: known_x = cp.flatnonzero(valid_locs.values) else: known_x = index._column.apply_boolean_mask(valid_locs).values - known_y = self.apply_boolean_mask(valid_locs).values + known_y = col.apply_boolean_mask(valid_locs).values result = cp.interp(index.to_cupy(), known_x, known_y) @@ -2282,6 +2313,8 @@ def cast(self, dtype: DtypeObj) -> ColumnBase: def astype(self, dtype: DtypeObj, copy: bool | None = False) -> ColumnBase: if self.dtype == dtype: result = self + elif isinstance(dtype, CategoricalDtype): + result = self.as_categorical_column(dtype) elif len(self) == 0: if isinstance(dtype, np.dtype) and dtype.kind == "U": dtype = np.dtype("object") @@ -2289,9 +2322,7 @@ def astype(self, dtype: DtypeObj, copy: bool | None = False) -> ColumnBase: self if self.dtype == dtype else column_empty(0, dtype=dtype) ) else: - if isinstance(dtype, CategoricalDtype): - result = self.as_categorical_column(dtype) - elif is_dtype_obj_interval(dtype): + if is_dtype_obj_interval(dtype): result = self.as_interval_column(dtype) # type: ignore[arg-type] elif is_dtype_obj_list(dtype) or is_dtype_obj_struct(dtype): if isinstance(dtype, pd.ArrowDtype): @@ -2330,18 +2361,23 @@ def astype(self, dtype: DtypeObj, copy: bool | None = False) -> ColumnBase: def as_categorical_column( self, dtype: CategoricalDtype ) -> CategoricalColumn: + na_sentinel = -1 if dtype._categories is not None: # Re-label self w.r.t. the provided categories codes = self._label_encoding(cats=dtype._categories) else: # Compute categories from self cats = self.unique().sort_values() - codes = self._label_encoding(cats=cats) # Only dropna if cats actually has nulls (self having nulls doesn't mean cats does) if cats.has_nulls(): cats = cats.dropna() + codes = self._label_encoding(cats=cats) dtype = CategoricalDtype(categories=cats, ordered=dtype.ordered) codes_with_mask = codes.set_mask(self.mask, self.null_count) + codes_with_mask = codes_with_mask.copy_if_else( + plc.Scalar.from_py(None, dtype_to_pylibcudf_type(codes.dtype)), + codes_with_mask != na_sentinel, + ) codes_typed = cast( "cudf.core.column.numerical.NumericalColumn", codes_with_mask ).astype(dtype._codes_dtype) @@ -2431,7 +2467,9 @@ def __cuda_array_interface__(self) -> Mapping[str, Any]: output = { "shape": (len(self),), "strides": (self.dtype.itemsize,), - "typestr": self.dtype.str, + "typestr": self.dtype.numpy_dtype.str + if not isinstance(self.dtype, np.dtype) + else self.dtype.str, "data": ( data_buf.ptr + self.offset * self.dtype.itemsize, False, @@ -2513,6 +2551,26 @@ def unique(self) -> Self: ), ) + def factorize( + self, sort: bool, use_na_sentinel: bool + ) -> tuple["cp.ndarray", Self]: + """ + Column-level factorize. Returns ``(labels, cats_col)``. + + ``cats_col`` is the column of unique values; ``labels`` are the + codes mapping each element of ``self`` to its position in + ``cats_col`` (with ``-1`` for nulls when ``use_na_sentinel=True``). + """ + cats = self.dropna() if use_na_sentinel else self + cats = cast("Self", cats.unique().astype(self.dtype)) + if sort: + cats = cast("Self", cats.sort_values()) + labels = self._label_encoding( + cats=cats, + dtype=np.dtype("int64"), + ).values + return labels, cats + def _is_sliced(self) -> bool: """ Check if this column is a sliced view of a larger buffer. @@ -2676,9 +2734,9 @@ def serialize(self) -> tuple[dict, list]: header["dtype-is-cudf-serialized"] = True except AttributeError: header["dtype"] = ( - pickle.dumps(col_to_serialize.dtype) - if is_pandas_nullable_extension_dtype(col_to_serialize.dtype) - else col_to_serialize.dtype.str + col_to_serialize.dtype.str + if isinstance(col_to_serialize.dtype, np.dtype) + else pickle.dumps(col_to_serialize.dtype) ) header["dtype-is-cudf-serialized"] = False @@ -2978,7 +3036,7 @@ def rank( null_precedence: plc.types.NullOrder, pct: bool, ) -> Self: - return cast( + result = cast( "Self", PylibcudfFunction( plc.sorting.rank, @@ -2987,6 +3045,7 @@ def rank( self, method, column_order, null_handling, null_precedence, pct ), ) + return result.astype(_rank_out_dtype(self.dtype, method, pct)) # type: ignore[return-value] def label_bins( self, @@ -3057,10 +3116,23 @@ def _cast_self_and_other_for_where( raise TypeError(mixed_err) if other_col.dtype != self.dtype: + if cudf.get_option("mode.pandas_compatible") and ( + ( + self.dtype.kind in {"i", "u"} + and other_col.dtype.kind == "f" + and not other_col.can_cast_safely(self.dtype) + ) + or ( + self.dtype.kind in {"M", "m"} + and other_col.dtype.kind in {"i", "u", "f", "b"} + ) + ): + raise TypeError( + f"Invalid value '{other}' for dtype '{self.dtype}'" + ) try: - warn = ( - find_common_type((other_col.dtype, self.dtype)) - == CUDF_STRING_DTYPE + warn = is_dtype_obj_string( + find_common_type((other_col.dtype, self.dtype)), ) except NotImplementedError: warn = True @@ -3121,7 +3193,7 @@ def where( def column_empty( row_count: int, - dtype: DtypeObj = CUDF_STRING_DTYPE, + dtype: DtypeObj = DEFAULT_STRING_DTYPE, ) -> ColumnBase: """ Allocate a new column with the given row_count and dtype. @@ -3289,6 +3361,14 @@ def as_column( column = column.astype(dtype) return column elif isinstance(arbitrary, (pa.Array, pa.ChunkedArray)): + if isinstance(arbitrary, pa.NullArray) and dtype is None: + dtype = np.dtype("object") + elif is_arrow_null_dtype(dtype): + if arbitrary.null_count != len(arbitrary): + raise ValueError( + f"dtype {dtype} can only be used with all-null data." + ) + arbitrary = pa.nulls(len(arbitrary)) column = ColumnBase.from_arrow(arbitrary) if nan_as_null is not False: column = column.nans_to_nulls() @@ -3325,14 +3405,21 @@ def as_column( if isinstance( arbitrary.dtype.categories.dtype, pd.DatetimeTZDtype ): + # pa.array(arbitrary, from_pandas=True) drops the tz from + # the dictionary value type; cast back to a tz-aware + # dictionary type to restore the categories' timezone. + # pyarrow bug: https://github.com/apache/arrow/issues/49875 new_tz = get_compatible_timezone( arbitrary.dtype.categories.dtype ) - new_cats = arbitrary.dtype.categories.astype(new_tz) - new_dtype = pd.CategoricalDtype( - categories=new_cats, ordered=arbitrary.dtype.ordered + pa_arbitrary = pa.array(arbitrary, from_pandas=True) + arbitrary = pa_arbitrary.cast( + pa.dictionary( + pa_arbitrary.type.index_type, + pa.timestamp(new_tz.unit, str(new_tz.tz)), + ordered=pa_arbitrary.type.ordered, + ) ) - arbitrary = arbitrary.astype(new_dtype) elif dtype is None: # Going through Arrow below erases pandas extension dtypes # of the categories, if any, so always along pass the exact type @@ -3370,13 +3457,13 @@ def as_column( ) elif isinstance( arbitrary.dtype, pd.api.extensions.ExtensionDtype - ) and not isinstance(arbitrary, NumpyExtensionArray): + ) and not isinstance(arbitrary, pd.arrays.NumpyExtensionArray): raise NotImplementedError( "Custom pandas ExtensionDtypes are not supported" ) elif arbitrary.dtype.kind in "fiubmM": # numpy dtype like - if isinstance(arbitrary, NumpyExtensionArray): + if isinstance(arbitrary, pd.arrays.NumpyExtensionArray): arbitrary = np.array(arbitrary) arb_dtype = np.dtype(arbitrary.dtype) if arb_dtype.kind == "f" and arb_dtype.itemsize == 2: @@ -3397,7 +3484,7 @@ def as_column( ) elif arbitrary.dtype.kind == "O": pyarrow_array = None - if isinstance(arbitrary, NumpyExtensionArray): + if isinstance(arbitrary, pd.arrays.NumpyExtensionArray): # infer_dtype does not handle NumpyExtensionArray arbitrary = np.array(arbitrary, dtype=object) inferred_dtype = infer_dtype( @@ -3459,9 +3546,32 @@ def as_column( pa.types.is_list(pyarrow_array.type) or pa.types.is_struct(pyarrow_array.type) or pa.types.is_string(pyarrow_array.type) + or pa.types.is_null(pyarrow_array.type) ) ): raise MixedTypeError("Cannot create column with mixed types") + + if dtype is None and ( + inferred_dtype in {"string", "empty"} + or ( + inferred_dtype == "mixed" + and pa.types.is_string(pyarrow_array.type) + and isinstance(arbitrary, (pd.Series, pd.Index)) + ) + ): + # The Series/Index restriction in (2) is load-bearing. Consider: + # + # pd.Series(["a", None], dtype=object) + # -> user explicitly chose object; preserve it + # (test_grouping_grouper, test_to_numpy depend on this). + # + # pd.arrays.NumpyExtensionArray(np.array(["a", None], dtype=object)) + # -> by this point ``arbitrary`` has been unwrapped to a raw + # np.ndarray whose ``dtype=object`` is incidental (numpy's + # default for arrays containing None), not user intent. + # We want it to fall through to string inference, matching + # pandas (test_from_numpyextensionarray_string_object_pandas_compat_mode). + dtype = arbitrary.dtype return as_column( pyarrow_array, dtype=dtype, @@ -3479,6 +3589,11 @@ def as_column( elif length < 0: raise ValueError(f"{length=} must be >=0.") + if is_arrow_null_dtype(dtype): + if is_na_like(arbitrary): + return column_empty(length, dtype=dtype) + pa.scalar(arbitrary, type=dtype.pyarrow_dtype) + pa_type = None if isinstance(arbitrary, pd.Interval) or _is_categorical_dtype(dtype): return as_column( @@ -3507,10 +3622,15 @@ def as_column( raise ValueError( "Need to pass dtype when passing pd.NA or None" ) - elif ( - isinstance(arbitrary, (pd.Timestamp, pd.Timedelta)) - or arbitrary is pd.NaT - ): + elif arbitrary is pd.NaT: + # NaT.to_numpy() defaults to ns resolution, but pandas 3.0 + # defaults NaT to seconds resolution. Use the dtype's kind + # if provided to distinguish datetime vs timedelta. + if dtype is not None and dtype.kind == "m": + arbitrary = arbitrary.to_numpy("timedelta64[s]") + else: + arbitrary = arbitrary.to_numpy("datetime64[s]") + elif isinstance(arbitrary, (pd.Timestamp, pd.Timedelta)): arbitrary = arbitrary.to_numpy() elif isinstance(arbitrary, (np.datetime64, np.timedelta64)): unit = np.datetime_data(arbitrary.dtype)[0] @@ -3691,9 +3811,6 @@ def as_column( ser = ser.cat.set_categories( dtype.categories, ordered=dtype.ordered ) - elif dtype == object and not cudf.get_option("mode.pandas_compatible"): - # Unlike pandas, interpret object as "str" instead of "python object" - ser = pd.Series(arbitrary, dtype="str") else: ser = pd.Series(arbitrary, dtype=dtype) return as_column(ser, nan_as_null=nan_as_null) @@ -3709,6 +3826,13 @@ def as_column( from_pandas = nan_as_null is None or nan_as_null if dtype is not None: + if is_arrow_null_dtype(dtype): + arbitrary = pa.array( + arbitrary, + type=dtype.pyarrow_dtype, + from_pandas=True, + ) + return as_column(arbitrary, nan_as_null=nan_as_null, dtype=dtype) try: arbitrary = pa.array( arbitrary, @@ -3921,9 +4045,69 @@ def concat_columns(objs: Sequence[ColumnBase]) -> ColumnBase: with access_columns( # type: ignore[assignment] *objs_with_len, mode="read", scope="internal" ) as objs_with_len: - return ColumnBase.create( + result = ColumnBase.create( plc.concatenate.concatenate( [col.plc_column for col in objs_with_len] ), objs_with_len[0].dtype, ) + # Preserve cached `_local_time` for DatetimeTZColumn when every input has + # it. The stored UTC values produced by `tz_localize` can be inaccurate + # near DST transitions (the transition table is not globally sorted), so + # `_local_time` is the authoritative source for producing correct pandas + # output. + if isinstance(result, cudf.core.column.datetime.DatetimeTZColumn) and all( + isinstance(o, cudf.core.column.datetime.DatetimeTZColumn) + and "_local_time" in o.__dict__ + for o in objs_with_len + ): + result._local_time = concat_columns( + [o._local_time for o in objs_with_len] # type: ignore[attr-defined] + ) # type: ignore[assignment] + return result + + +def _rank_out_dtype( + orig_dtype: "DtypeObj", + method: plc.aggregation.RankMethod, + pct: bool, +) -> "DtypeObj": + """Determine the output dtype for rank() to match pandas 3 semantics. + + Pandas 3 rank() output dtypes by input dtype: + Float64 / Int64 / UInt64 (nullable numpy-backed): + average or pct=True → Float64, otherwise → UInt64 + float64[pyarrow] / int64[pyarrow] (Arrow numeric): + average or pct=True → double[pyarrow], otherwise → uint64[pyarrow] + string[pyarrow] (StringDtype with pyarrow storage): + always → Float64 + str / string[python] / float64 / … (non-nullable or non-numeric ext): + → float64 (unchanged) + """ + is_average = method == plc.aggregation.RankMethod.AVERAGE + if isinstance(orig_dtype, pd.ArrowDtype): + if pa.types.is_floating( + orig_dtype.pyarrow_dtype + ) or pa.types.is_integer(orig_dtype.pyarrow_dtype): + if is_average or pct: + return pd.ArrowDtype(pa.float64()) + else: + return pd.ArrowDtype(pa.uint64()) + # Non-numeric Arrow types (e.g. string): fall through to float64 + elif isinstance(orig_dtype, pd.StringDtype): + # string[pyarrow] uses pyarrow storage + pd.NA → Float64 + # str / string[python] → float64 (no change) + if ( + orig_dtype.na_value is pd.NA + and getattr(orig_dtype, "storage", None) == "pyarrow" + ): + return pd.Float64Dtype() + elif is_pandas_nullable_numpy_dtype(orig_dtype) and not isinstance( + orig_dtype, (pd.StringDtype, pd.BooleanDtype) + ): + # Float64, Int64, UInt64, etc. + if is_average or pct: + return pd.Float64Dtype() + else: + return pd.UInt64Dtype() + return np.dtype("float64") diff --git a/python/cudf/cudf/core/column/datetime.py b/python/cudf/cudf/core/column/datetime.py index 92db86abdeb6..216eeb2a43a1 100644 --- a/python/cudf/cudf/core/column/datetime.py +++ b/python/cudf/cudf/core/column/datetime.py @@ -4,11 +4,11 @@ from __future__ import annotations import calendar +import datetime import functools import locale import os import re -import warnings import zoneinfo from locale import nl_langinfo from typing import TYPE_CHECKING, Any, Literal, cast @@ -28,13 +28,17 @@ from cudf.core.column.column import ( ColumnBase, PylibcudfFunction, + bool_same_kind_policy, int16_same_kind_policy, pylibcudf_result_dtype_policy, same_dtype_policy, ) -from cudf.core.column.temporal_base import TemporalBaseColumn +from cudf.core.column.temporal_base import ( + TemporalBaseColumn, + _raise_on_invalid_ordering_scalar, +) +from cudf.core.dtype.validators import is_dtype_obj_datetime_tz from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, _get_base_dtype, cudf_dtype_from_pa_type, dtype_from_pylibcudf_column, @@ -45,7 +49,6 @@ from cudf.utils.utils import _EQUALITY_OPS, is_na_like if TYPE_CHECKING: - import datetime from collections.abc import Callable from typing import Self @@ -63,6 +66,10 @@ "datetime64[us]": "%Y-%m-%d %H:%M:%S.%6f", "datetime64[ms]": "%Y-%m-%d %H:%M:%S.%3f", "datetime64[s]": "%Y-%m-%d %H:%M:%S", + "timestamp[ns][pyarrow]": "%Y-%m-%d %H:%M:%S.%9f", + "timestamp[us][pyarrow]": "%Y-%m-%d %H:%M:%S.%6f", + "timestamp[ms][pyarrow]": "%Y-%m-%d %H:%M:%S.%3f", + "timestamp[s][pyarrow]": "%Y-%m-%d %H:%M:%S", } @@ -281,14 +288,28 @@ def weekday(self) -> ColumnBase: @functools.cached_property def day_of_year(self) -> ColumnBase: - return PylibcudfFunction( + result = PylibcudfFunction( plc.datetime.day_of_year, pylibcudf_result_dtype_policy, ).execute_with_args(self) + if isinstance(self.dtype, pd.ArrowDtype): + # pyarrow temporal kernels return int64; match pandas. + result = result.astype( + get_dtype_of_same_kind(self.dtype, np.dtype(np.int64)) + ) + return result + + def _maybe_fillna_false(self, col: ColumnBase) -> ColumnBase: + # For nullable extension dtype sources (e.g. ArrowDtype), preserve + # nulls in the result to match pandas. Otherwise fill with False + # so the result is a plain bool column. + if isinstance(self.dtype, pd.ArrowDtype): + return col + return col.fillna(False) @functools.cached_property def is_month_start(self) -> ColumnBase: - return (self.day == 1).fillna(False) + return self._maybe_fillna_false(self.day == 1) @functools.cached_property def is_month_end(self) -> ColumnBase: @@ -301,17 +322,19 @@ def is_month_end(self) -> ColumnBase: plc_result, dtype_from_pylibcudf_column(plc_result), ) - return (self.day == cast("Self", last_day_col).day).fillna(False) + return self._maybe_fillna_false( + self.day == cast("Self", last_day_col).day + ) @functools.cached_property def is_quarter_end(self) -> ColumnBase: last_month = self.month.isin([3, 6, 9, 12]) - return (self.is_month_end & last_month).fillna(False) + return self._maybe_fillna_false(self.is_month_end & last_month) @functools.cached_property def is_quarter_start(self) -> ColumnBase: first_month = self.month.isin([1, 4, 7, 10]) - return (self.is_month_start & first_month).fillna(False) + return self._maybe_fillna_false(self.is_month_start & first_month) @functools.cached_property def is_year_end(self) -> ColumnBase: @@ -320,25 +343,33 @@ def is_year_end(self) -> ColumnBase: leap = day_of_year == 366 non_leap = day_of_year == 365 - return leap.copy_if_else(non_leap, leap_dates).fillna(False) + return self._maybe_fillna_false( + leap.copy_if_else(non_leap, leap_dates) + ) @functools.cached_property def is_leap_year(self) -> ColumnBase: return PylibcudfFunction( plc.datetime.is_leap_year, - pylibcudf_result_dtype_policy, + bool_same_kind_policy, ).execute_with_args(self) @functools.cached_property def is_year_start(self) -> ColumnBase: - return (self.day_of_year == 1).fillna(False) + return self._maybe_fillna_false(self.day_of_year == 1) @functools.cached_property def days_in_month(self) -> ColumnBase: - return PylibcudfFunction( + result = PylibcudfFunction( plc.datetime.days_in_month, pylibcudf_result_dtype_policy, ).execute_with_args(self) + if isinstance(self.dtype, pd.ArrowDtype): + # pyarrow temporal kernels return int64; match pandas. + result = result.astype( + get_dtype_of_same_kind(self.dtype, np.dtype(np.int64)) + ) + return result @functools.cached_property def day_of_week(self) -> ColumnBase: @@ -404,7 +435,13 @@ def _get_dt_field( ), get_dtype_of_same_kind(self.dtype, np.dtype(np.int16)), ) - if result.dtype == np.dtype("int16"): + if isinstance(self.dtype, pd.ArrowDtype): + # pyarrow's temporal compute kernels return int64; match that + # when the source is an ArrowDtype. + result = result.astype( + get_dtype_of_same_kind(self.dtype, np.dtype(np.int64)) + ) + elif result.dtype == np.dtype("int16"): result = result.astype(np.dtype("int32")) return result @@ -443,23 +480,7 @@ def _round_dt( ], freq: str, ) -> ColumnBase: - # https://pandas.pydata.org/pandas-docs/version/2.3.3/reference/api/pandas.Timedelta.resolution_string.html - old_to_new_freq_map = { - "H": "h", - "N": "ns", - "T": "min", - "L": "ms", - "U": "us", - "S": "s", - } - if freq in old_to_new_freq_map: - warnings.warn( - f"{freq} is deprecated and will be " - "removed in a future version, please use " - f"{old_to_new_freq_map[freq]} instead.", - FutureWarning, - ) - freq = old_to_new_freq_map[freq] + # https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Timedelta.resolution_string.html rounding_fequency_map = { "D": plc.datetime.RoundingFrequency.DAY, "h": plc.datetime.RoundingFrequency.HOUR, @@ -486,12 +507,23 @@ def round(self, freq: str) -> ColumnBase: return self._round_dt(plc.datetime.round_datetimes, freq) def isocalendar(self) -> dict[str, ColumnBase]: - return { - field: self.strftime(format=directive).astype(np.dtype(np.uint32)) + # pyarrow's isocalendar returns int64 fields and fills nulls with 0; + # pandas' isocalendar for datetime64 returns UInt32 with NA preserved. + is_arrow = isinstance(self.dtype, pd.ArrowDtype) + target_dtype: DtypeObj = ( + np.dtype(np.int64) if is_arrow else np.dtype(np.uint32) + ) + result = { + field: self.strftime( + format=directive, dtype=np.dtype("object") + ).astype(get_dtype_of_same_kind(self.dtype, target_dtype)) for field, directive in zip( ["year", "week", "day"], ["%G", "%V", "%u"], strict=True ) } + if is_arrow: + result = {field: col.fillna(0) for field, col in result.items()} + return result def as_datetime_column(self, dtype: np.dtype) -> DatetimeColumn: if dtype == self.dtype: @@ -559,9 +591,9 @@ def _strftime_names(self) -> plc.Column: ] ) - def strftime(self, format: str) -> StringColumn: + def strftime(self, format: str, dtype: DtypeObj) -> StringColumn: if len(self) == 0: - return super().strftime(format) + return super().strftime(format, dtype) if re.search("%[aAbB]", format): names = self._strftime_names else: @@ -577,7 +609,7 @@ def strftime(self, format: str) -> StringColumn: format, names, ), - CUDF_STRING_DTYPE, + dtype, ), ) @@ -620,17 +652,83 @@ def as_string_column(self, dtype: DtypeObj) -> StringColumn: format = format.split(" ")[0] elif not (has_seconds or has_minutes or has_hours): format = format.split(" ")[0] - return self.strftime(format) + if isinstance(dtype, np.dtype) and dtype.kind == "U": + dtype = np.dtype("object") + return self.strftime(format, dtype) def _binaryop(self, other: ColumnBinaryOperand, op: str) -> ColumnBase: reflect, op = self._check_reflected_op(op) + if isinstance( + other, (pd.tseries.offsets.Tick, pd.tseries.offsets.Week) + ): + other = cudf.DateOffset._from_pandas_ticks_or_weeks(other) if isinstance(other, cudf.DateOffset): return other._datetime_binop(self, op, reflect=reflect) + + pandas_compatible = cudf.get_option("mode.pandas_compatible") + + # pandas raises TypeError on inequality ops against None / NaN + # (which are not datetime-like). Equality ops still allow these + # by returning False/True. + if ( + pandas_compatible + and op in {"__lt__", "__le__", "__gt__", "__ge__"} + and ( + other is None or (isinstance(other, float) and np.isnan(other)) + ) + ): + raise TypeError( + f"Invalid comparison between dtype={self.dtype} and " + f"{type(other).__name__}" + ) + + _raise_on_invalid_ordering_scalar(self.dtype, other, op) + # pandas treats a bare ``datetime.date`` as not comparable with a + # datetime64 column — ``==`` yields all False, ``!=`` yields all + # True. Short-circuit here so cudf doesn't implicitly promote the + # date to a midnight datetime and produce a spurious match. + if ( + op in {"__eq__", "__ne__"} + and isinstance(other, datetime.date) + and not isinstance(other, datetime.datetime) + ): + fill_value = op == "__ne__" + result = self._all_bools_with_nulls( + self, bool_fill_value=fill_value + ) + return result.fillna(fill_value) other = self._normalize_binop_operand(other) if other is NotImplemented: return NotImplemented + # tz-mismatch detection: pandas raises TypeError when comparing or + # adding/subtracting tz-naive vs tz-aware datetime-like operands. + if pandas_compatible: + self_is_tz = isinstance(self, DatetimeTZColumn) + # Ternary (True/False/None) is required here: True/False + # differentiate tz-aware vs tz-naive datetime-like operands, while + # None means the operand is not datetime-like at all (and so the + # tz-mismatch check should be skipped). + other_is_tz_dt: bool | None = None + if isinstance(other, DatetimeColumn): + other_is_tz_dt = isinstance(other, DatetimeTZColumn) + elif isinstance(other, pa.Scalar) and pa.types.is_timestamp( + other.type + ): + other_is_tz_dt = other.type.tz is not None + if other_is_tz_dt is not None and self_is_tz != other_is_tz_dt: + if op in {"__lt__", "__le__", "__gt__", "__ge__"}: + raise TypeError( + f"Invalid comparison between dtype={self.dtype} and " + f"{type(other).__name__}" + ) + if op in {"__sub__"}: + raise TypeError( + "Cannot subtract tz-naive and tz-aware " + "datetime-like objects" + ) + other_is_null_scalar = False if reflect: lhs = other @@ -658,7 +756,49 @@ def _binaryop(self, other: ColumnBinaryOperand, op: str) -> ColumnBase: other_is_timedelta = other_dtype.kind == "m" other_is_datetime64 = other_dtype.kind == "M" + # Determine tz awareness of each operand. pandas raises for any + # datetime-datetime operation (subtraction, ordering comparison) + # that mixes a tz-aware and a tz-naive operand, and preserves the + # tz when adding/subtracting a timedelta. + self_is_tz = is_dtype_obj_datetime_tz(self.dtype) + other_is_tz = is_dtype_obj_datetime_tz(other_dtype) + if ( + other_is_datetime64 + and self_is_tz != other_is_tz + and not other_is_null_scalar + and op in {"__sub__", "__lt__", "__le__", "__gt__", "__ge__"} + ): + raise TypeError( + "Invalid comparison between tz-naive and tz-aware " + "datetime-like objects." + ) + + def _preserve_tz(result_dtype: np.dtype) -> DtypeObj: + # When the operation should yield another datetime and self + # is tz-aware, carry the tz forward with the resolved unit. + if self_is_tz and result_dtype.kind == "M": + tz_dtype = cast(pd.DatetimeTZDtype, self.dtype) + unit = np.datetime_data( + cast(np.dtype[np.datetime64], result_dtype) + )[0] + return pd.DatetimeTZDtype(unit, tz_dtype.tz) + return result_dtype + out_dtype = None + if ( + other_is_datetime64 + and self_is_tz != other_is_tz + and not other_is_null_scalar + and op in {"__eq__", "__ne__"} + ): + # pandas treats tz-aware and tz-naive datetimes as unequal; + # short-circuit instead of byte-comparing the UTC values. + fill_value = op == "__ne__" + other_col = other if isinstance(other, ColumnBase) else self + result = self._all_bools_with_nulls( + other_col, bool_fill_value=fill_value + ) + return result.fillna(fill_value) if ( op in { @@ -677,8 +817,10 @@ def _binaryop(self, other: ColumnBinaryOperand, op: str) -> ColumnBase: # `timedelta + datetime`. Both result in DatetimeColumns. out_dtype = get_dtype_of_same_kind( self.dtype, - np.dtype( - f"datetime64[{_resolve_binop_resolution(lhs_unit, rhs_unit)}]" # type: ignore[arg-type] + _preserve_tz( + np.dtype( + f"datetime64[{_resolve_binop_resolution(lhs_unit, rhs_unit)}]" # type: ignore[arg-type] + ) ), ) if other_is_null_scalar: @@ -702,8 +844,10 @@ def _binaryop(self, other: ColumnBinaryOperand, op: str) -> ColumnBase: elif other_is_timedelta and not reflect: out_dtype = get_dtype_of_same_kind( self.dtype, - np.dtype( - f"datetime64[{_resolve_binop_resolution(lhs_unit, rhs_unit)}]" # type: ignore[arg-type] + _preserve_tz( + np.dtype( + f"datetime64[{_resolve_binop_resolution(lhs_unit, rhs_unit)}]" # type: ignore[arg-type] + ) ), ) if other_is_null_scalar: @@ -819,6 +963,7 @@ def tz_localize( ambiguous, nonexistent = _check_ambiguous_and_nonexistent( ambiguous, nonexistent ) + is_arrow = isinstance(self.dtype, pd.ArrowDtype) dtype = get_compatible_timezone(pd.DatetimeTZDtype(self.time_unit, tz)) tzname = dtype.tz.key ambiguous_col, nonexistent_col = self._find_ambiguous_and_nonexistent( @@ -840,6 +985,8 @@ def tz_localize( ) offsets_to_utc = offsets.take(indices, nullify=True) gmt_data = localized - offsets_to_utc + if is_arrow: + dtype = pd.ArrowDtype(pa.timestamp(self.time_unit, tz)) # type: ignore[call-overload] result = cast( DatetimeTZColumn, ColumnBase.create(gmt_data.plc_column, dtype) ) @@ -868,12 +1015,22 @@ def to_pandas( ) else: # TODO: Using self._utc_time.to_pandas().tz_localize("UTC").tz_convert(self.tz) - # would be the more definitive conversion, but test_localize_nonexistent - # and test_localize_ambiguous fail (off by ~1 hour) for some obscure timezones - return self._local_time.to_pandas().tz_localize( - self.tz, - ambiguous="NaT", - nonexistent="NaT", + # would be the more definitive conversion + if "_local_time" in self.__dict__: + # _local_time was explicitly cached (e.g., by tz_localize) and holds + # the original naive timestamps; re-localizing with pandas is correct. + return self._local_time.to_pandas().tz_localize( + self.tz, + ambiguous="NaT", + nonexistent="NaT", + ) + # When _local_time is not cached, computing it via searchsorted on the + # timezone transition table can return wrong results due to the table + # not being globally sorted. Use UTC directly instead. + return ( + self._utc_time.to_pandas() + .tz_localize("UTC") + .tz_convert(self.tz) ) @functools.cached_property @@ -885,10 +1042,16 @@ def time_unit(self) -> str: @property def _utc_time(self) -> DatetimeColumn: """Return UTC time as naive timestamps.""" + if isinstance(self.dtype, pd.ArrowDtype): + target_dtype: DtypeObj = pd.ArrowDtype( + pa.timestamp(self.time_unit) # type: ignore[call-overload] + ) + else: + target_dtype = _get_base_dtype(self.dtype) return cast( "DatetimeColumn", DatetimeColumn.create( - self.plc_column, _get_base_dtype(self.dtype), validate=False + self.plc_column, target_dtype, validate=False ), ) @@ -904,11 +1067,32 @@ def _local_time(self) -> DatetimeColumn: - 1 ) offsets_from_utc = offsets.take(indices, nullify=True) - return self + offsets_from_utc + # Perform the add on the tz-naive UTC view so the result is naive + # (``self + offsets`` now preserves tz by default). The local-time + # column must be tz-naive to represent the wall-clock values. + return cast(DatetimeColumn, self._utc_time + offsets_from_utc) def as_string_column(self, dtype: DtypeObj) -> StringColumn: return self._local_time.as_string_column(dtype) + def strftime(self, format: str, dtype: DtypeObj) -> StringColumn: + if len(self) == 0: + return super().strftime(format, dtype) + if re.search(r"(? DatetimeColumn: @@ -999,12 +1183,15 @@ def tz_convert(self, tz: str | None) -> DatetimeColumn | DatetimeTZColumn: elif tz == str(self.tz): return self.copy() + if isinstance(self.dtype, pd.ArrowDtype): + target_dtype: DtypeObj = pd.ArrowDtype( + pa.timestamp(self.time_unit, tz) # type: ignore[call-overload] + ) + else: + target_dtype = get_compatible_timezone( + pd.DatetimeTZDtype(self.time_unit, tz) + ) return cast( DatetimeTZColumn, - ColumnBase.create( - self.plc_column, - get_compatible_timezone( - pd.DatetimeTZDtype(self.time_unit, tz) - ), - ), + ColumnBase.create(self.plc_column, target_dtype), ) diff --git a/python/cudf/cudf/core/column/lists.py b/python/cudf/cudf/core/column/lists.py index f1457d63f3ed..6a99f977a689 100644 --- a/python/cudf/cudf/core/column/lists.py +++ b/python/cudf/cudf/core/column/lists.py @@ -50,7 +50,9 @@ def _get_sliced_child(self) -> ColumnBase: sliced_plc_col = self.plc_column.list_view().get_sliced_child() return ColumnBase.create(sliced_plc_col, self.element_type) - def _prep_pandas_compat_repr(self) -> StringColumn | Self: + def _prep_pandas_compat_repr( + self, nan_rep: str | None = None + ) -> StringColumn | Self: """ Preprocess Column to be compatible with pandas repr, namely handling nulls. @@ -178,6 +180,14 @@ def as_string_column(self, dtype: DtypeObj) -> StringColumn: ), self._string_separators, ) + # format_list_column converts top-level nulls to the na_rep + # string ("None"). Re-apply the original null mask so that + # top-level nulls remain as actual nulls, matching pandas. + if self.null_count > 0: + plc_column = plc_column.with_mask( + self.plc_column.null_mask(), + self.null_count, + ) return cast( "cudf.core.column.string.StringColumn", ColumnBase.create(plc_column, dtype), diff --git a/python/cudf/cudf/core/column/numerical.py b/python/cudf/cudf/core/column/numerical.py index 359e13f5df4f..504d3db9e73c 100644 --- a/python/cudf/cudf/core/column/numerical.py +++ b/python/cudf/cudf/core/column/numerical.py @@ -27,9 +27,12 @@ same_dtype_policy, ) from cudf.core.column.numerical_base import NumericalBaseColumn +from cudf.core.dtype.validators import ( + is_dtype_obj_string, +) from cudf.core.mixins import BinaryOperand from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, + DEFAULT_STRING_DTYPE, cudf_dtype_from_pa_type, cudf_dtype_to_pa_type, dtype_from_pylibcudf_column, @@ -99,11 +102,7 @@ class NumericalColumn(NumericalBaseColumn): @property def _PANDAS_NA_VALUE(self) -> ScalarLike: """Float columns return np.nan as NA value in pandas compatibility mode.""" - if ( - cudf.get_option("mode.pandas_compatible") - and self.dtype.kind == "f" - and not is_pandas_nullable_extension_dtype(self.dtype) - ): + if self.dtype.kind == "f" and isinstance(self.dtype, np.dtype): return np.nan return super()._PANDAS_NA_VALUE @@ -128,6 +127,24 @@ def __contains__(self, item: ScalarLike) -> bool: ), ).any() + def dropna(self) -> Self: + if self.has_nulls(include_nan=True): + with self.access(mode="read", scope="internal") as accessed: + plc_table = plc.Table([accessed.plc_column]) + plc_result = plc.stream_compaction.drop_nulls( + plc_table, [0], 1 + ) + if self.dtype.kind == "f": + plc_result = plc.stream_compaction.drop_nans( + plc_result, [0], 1 + ) + return cast( + "Self", + ColumnBase.create(plc_result.columns()[0], dtype=self.dtype), + ) + else: + return self.copy() + @property def values(self) -> cp.ndarray: """ @@ -245,7 +262,25 @@ def element_indexing(self, index: int) -> ScalarLike | None: def _cast_setitem_value(self, value: Any) -> plc.Scalar | ColumnBase: if is_scalar(value): - if value is cudf.NA or value is None: + nan_value = isinstance(value, float) and np.isnan(value) + pandas_compatible = cudf.get_option("mode.pandas_compatible") + # Only treat ``np.nan`` as null in pandas-compatible mode. In + # legacy cudf mode, ``np.nan`` is stored as the float value + # ``nan`` in the data buffer (no null mask). Changing this + # silently turns any ``loc[...] = np.nan`` assignment into a + # masked-null, which breaks consumers that read the raw data + # buffer (e.g. the ``engine="jit"`` groupby kernel). + if ( + value is cudf.NA + or value is None + or (nan_value and pandas_compatible) + ): + if self.dtype.kind == "b" and pandas_compatible: + # pandas raises TypeError when setting a null into bool + # because bool dtype cannot hold NA without dtype change. + raise TypeError( + f"Invalid value '{value}' for dtype '{self.dtype}'" + ) scalar = pa.scalar( None, type=cudf_dtype_to_pa_type(self.dtype) ) @@ -272,6 +307,17 @@ def _cast_setitem_value(self, value: Any) -> plc.Scalar | ColumnBase: raise TypeError( f"Invalid value {value} for dtype {self.dtype}" ) + if ( + cudf.get_option("mode.pandas_compatible") + and self.dtype.kind in {"i", "u"} + and col.dtype.kind == "f" + and not col.can_cast_safely(self.dtype) + ): + # pandas rejects float→int assignment when values can't be + # losslessly cast. + raise TypeError( + f"Invalid value '{value}' for dtype '{self.dtype}'" + ) return col.astype(self.dtype) def __invert__(self) -> ColumnBase: @@ -432,6 +478,11 @@ def _binaryop(self, other: ColumnBinaryOperand, op: str) -> ColumnBase: and isinstance(rhs, NumericalColumn) ): rhs = rhs.nans_to_nulls() + if op in cmp_ops and is_pandas_nullable_extension_dtype(out_dtype): + if lhs_dtype.kind == "f" and isinstance(lhs, NumericalColumn): + lhs = lhs.nans_to_nulls() + if rhs_dtype.kind == "f" and isinstance(rhs, NumericalColumn): + rhs = rhs.nans_to_nulls() lhs_binaryop: plc.Scalar | ColumnBase = ( pa_scalar_to_plc_scalar(lhs) if isinstance(lhs, pa.Scalar) else lhs ) @@ -510,7 +561,14 @@ def _binaryop(self, other: ColumnBinaryOperand, op: str) -> ColumnBase: cudf.get_option("mode.pandas_compatible") and op in cmp_ops and not is_pandas_nullable_extension_dtype(self.dtype) + and self.dtype.kind != "b" ): + # For numeric dtypes, pandas converts nulls to NaN and the + # comparison follows NumPy semantics (NaN == anything is False, + # NaN != anything is True). Fill so we match that. Bool dtype + # is excluded: a nullable cudf bool column maps to pandas' + # ``boolean`` extension dtype, which preserves nulls in + # comparisons. res = res.fillna(op == "__ne__") return res @@ -541,9 +599,10 @@ def _normalize_binop_operand(self, other: Any) -> pa.Scalar | ColumnBase: if is_scalar(other): if is_na_like(other): - if isinstance( - other, (np.datetime64, np.timedelta64) - ) and np.isnat(other): + if other is pd.NaT or ( + isinstance(other, (np.datetime64, np.timedelta64)) + and np.isnat(other) + ): return NotImplemented return pa.scalar(None, type=cudf_dtype_to_pa_type(self.dtype)) if not isinstance(other, (int, float, complex)): @@ -577,7 +636,7 @@ def _normalize_binop_operand(self, other: Any) -> pa.Scalar | ColumnBase: ) else: common_dtype = np.result_type(self.dtype, other) # noqa: TID251 - if common_dtype.kind in {"b", "i", "u", "f"}: # type: ignore[union-attr] + if common_dtype.kind in {"b", "i", "u", "f"}: if self.dtype.kind == "b" and not isinstance(other, bool): common_dtype = min_signed_type(other) return pa.scalar( @@ -615,7 +674,7 @@ def as_string_column(self, dtype: DtypeObj) -> StringColumn: if len(self) == 0: return cast( cudf.core.column.StringColumn, - column_empty(0, dtype=CUDF_STRING_DTYPE), + column_empty(0, dtype=DEFAULT_STRING_DTYPE), ) conv_func: Callable[[plc.Column], plc.Column] @@ -758,7 +817,7 @@ def _process_values_for_isin( return super()._process_values_for_isin(values.tolist()) else: raise - if lhs.dtype != rhs.dtype and rhs.dtype != CUDF_STRING_DTYPE: + if lhs.dtype != rhs.dtype and not is_dtype_obj_string(rhs.dtype): if rhs.can_cast_safely(lhs.dtype): rhs = rhs.astype(lhs.dtype) elif lhs.can_cast_safely(rhs.dtype): @@ -1014,6 +1073,10 @@ def _reduction_result_dtype(self, reduction_op: str) -> DtypeObj: return self.dtype elif self.dtype.kind == "u": return np.dtype("uint64") + elif self.dtype.kind == "b" and isinstance( + self.dtype, pd.ArrowDtype + ): + return np.dtype("uint64") return np.dtype("int64") elif reduction_op == "sum_of_squares": return find_common_type((self.dtype, np.dtype(np.uint64))) diff --git a/python/cudf/cudf/core/column/numerical_base.py b/python/cudf/cudf/core/column/numerical_base.py index 74b821027e62..0fa1fd774977 100644 --- a/python/cudf/cudf/core/column/numerical_base.py +++ b/python/cudf/cudf/core/column/numerical_base.py @@ -16,6 +16,7 @@ ColumnBase, PylibcudfFunction, pylibcudf_result_dtype_policy, + pylibcudf_result_same_kind_dtype_policy, same_dtype_policy, ) from cudf.core.missing import NA @@ -91,10 +92,16 @@ def kurtosis(self, skipna: bool = True) -> float: if len(self) == 0 or self._can_return_nan(skipna=skipna): return _get_nan_for_dtype(self.dtype) # type: ignore[return-value] + original_dtype = self.dtype self = self.nans_to_nulls().dropna() if len(self) < 4: - return _get_nan_for_dtype(self.dtype) # type: ignore[return-value] + return _get_nan_for_dtype(original_dtype) # type: ignore[return-value] + + if original_dtype.kind == "f" and original_dtype.itemsize < 8: + # Compute in float64 to match pandas precision for narrower + # floating point dtypes (e.g. float32). + self = self.astype(np.dtype(np.float64)) # type: ignore[assignment] n = len(self) miu = self.mean() @@ -102,12 +109,14 @@ def kurtosis(self, skipna: bool = True) -> float: V = self.var() if V == 0: - return np.float64(0) + return original_dtype.type(0) term_one_section_one = (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3)) term_one_section_two = m4_numerator / (V**2) term_two = ((n - 1) ** 2) / ((n - 2) * (n - 3)) kurt = term_one_section_one * term_one_section_two - 3 * term_two + if original_dtype.kind == "f" and original_dtype.itemsize < 8: + kurt = original_dtype.type(kurt) return kurt def skew(self, skipna: bool = True) -> ScalarLike: @@ -143,6 +152,10 @@ def quantile( exact: bool, return_scalar: bool, ) -> NumericalBaseColumn: + if self.dtype.kind == "b": + raise NotImplementedError( + "quantile is not implemented for boolean dtype" + ) if np.logical_or(q < 0, q > 1).any(): raise ValueError( "percentiles should all be in the interval [0, 1]" @@ -164,13 +177,20 @@ def quantile( ) interpolation_type = plc.types.Interpolation[interpolation.upper()] + # For non-arithmetic interpolations the chosen value is an + # actual element of the input - ask libcudf to preserve the + # input dtype rather than casting through float64, which + # would lose precision for int64 values exceeding 2**53 + # (e.g. nanosecond timestamps). + plc_exact = exact and interpolation in {"linear", "midpoint"} + result = cast( cudf.core.column.numerical_base.NumericalBaseColumn, PylibcudfFunction( plc.quantiles.quantile, - pylibcudf_result_dtype_policy, + pylibcudf_result_same_kind_dtype_policy, ).execute_with_args( - no_nans, q, interpolation_type, indices, exact + no_nans, q, interpolation_type, indices, plc_exact ), ) if return_scalar: diff --git a/python/cudf/cudf/core/column/string.py b/python/cudf/cudf/core/column/string.py index f64f9b8a8156..fd768b888bfd 100644 --- a/python/cudf/cudf/core/column/string.py +++ b/python/cudf/cudf/core/column/string.py @@ -17,7 +17,6 @@ import cudf from cudf.api.types import is_scalar -from cudf.core._compat import PANDAS_GE_220 from cudf.core._internals import binaryop from cudf.core.column.column import ( ColumnBase, @@ -145,6 +144,52 @@ def _validate_fillna_value( raise MixedTypeError("Cannot fill `np.nan` in string column") return super()._validate_fillna_value(fill_value) + def _cast_setitem_value(self, value: Any) -> plc.Scalar | ColumnBase: + if cudf.get_option("mode.pandas_compatible"): + # pandas string dtype rejects non-string values (int/float/bool). + if is_scalar(value): + if ( + value is not None + and not is_na_like(value) + and not isinstance(value, (str, np.str_)) + ): + raise TypeError( + f"Invalid value '{value}' for dtype '{self.dtype}'" + ) + elif isinstance(value, ColumnBase): + if value.dtype.kind in {"i", "u", "f", "b"}: + raise TypeError( + f"Invalid value '{value}' for dtype '{self.dtype}'" + ) + elif getattr(getattr(value, "dtype", None), "kind", None) in { + "i", + "u", + "f", + "b", + }: + raise TypeError( + f"Invalid value '{value}' for dtype '{self.dtype}'" + ) + else: + # Plain Python sequences without a dtype attribute (e.g. + # list/tuple): inspect element types. + try: + iterator = iter(value) + except TypeError: + iterator = None + if iterator is not None: + for v in iterator: + if ( + v is None + or is_na_like(v) + or isinstance(v, (str, np.str_)) + ): + continue + raise TypeError( + f"Invalid value '{value}' for dtype '{self.dtype}'" + ) + return super()._cast_setitem_value(value) + def sum( self, skipna: bool = True, @@ -171,7 +216,10 @@ def any( ) -> ScalarLike: """Check if any string value is truthy (non-empty).""" if not skipna and self.has_nulls(): - raise TypeError("boolean value of NA is ambiguous") + # pandas 3 treats the NaN null sentinel as truthy, matching + # numpy semantics, so any(skipna=False) returns True when nulls + # are present. + return True elif skipna and self.null_count == self.size: return False raise NotImplementedError("`any` not implemented for `StringColumn`") @@ -183,7 +231,10 @@ def all( if skipna and self.null_count == self.size: return True elif not skipna and self.has_nulls(): - raise TypeError("boolean value of NA is ambiguous") + # pandas 3 treats the NaN null sentinel as truthy, matching + # numpy semantics, so all(skipna=False) returns True when all + # values are null. + return True raise NotImplementedError("`all` not implemented for `StringColumn`") def _reduce( @@ -207,26 +258,6 @@ def __contains__(self, item: ScalarLike) -> bool: other = [item] if is_scalar(item) else item return self.contains(as_column(other, dtype=self.dtype)).any() - def _get_pandas_compatible_dtype(self, target_dtype: np.dtype) -> DtypeObj: - """ - Get the appropriate dtype for pandas-compatible mode. - - For StringDtype with na_value=np.nan, returns get_dtype_of_same_kind(self.dtype, target_dtype). - Otherwise, returns get_dtype_of_same_kind(pd.StringDtype() or self.dtype, target_dtype). - """ - if ( - isinstance(self.dtype, pd.StringDtype) - and self.dtype.na_value is np.nan - ): - return get_dtype_of_same_kind(self.dtype, target_dtype) - else: - return get_dtype_of_same_kind( - pd.StringDtype() - if isinstance(self.dtype, pd.StringDtype) - else self.dtype, - target_dtype, - ) - def as_numerical_column(self, dtype: np.dtype) -> NumericalColumn: if dtype.kind == "b": result = self.count_characters() > np.int8(0) @@ -353,6 +384,18 @@ def as_string_column(self, dtype: DtypeObj) -> Self: if isinstance(dtype, np.dtype) and dtype.kind == "U": dtype = np.dtype("object") if dtype != self.dtype: + if ( + cudf.get_option("mode.pandas_compatible") + and self.null_count != 0 + and isinstance(dtype, np.dtype) + and dtype == np.dtype("O") + and isinstance(self.dtype, (pd.StringDtype, pd.ArrowDtype)) + and self.dtype.na_value is pd.NA + ): + raise NotImplementedError( + "Casting nullable string columns with pd.NA to object " + "is not supported." + ) return cast(Self, ColumnBase.create(self.plc_column, dtype)) return self @@ -364,23 +407,45 @@ def values(self) -> cp.ndarray: # dask checks for a TypeError instead of NotImplementedError raise TypeError(f"cupy does not support {self.dtype}") + @property + def _should_use_large_string(self) -> bool: + """Whether this column's dtype maps to arrow large_string.""" + dtype = self.dtype + if isinstance(dtype, pd.StringDtype): + return dtype.storage == "pyarrow" + if isinstance(dtype, pd.ArrowDtype): + return pa.types.is_large_string(dtype.pyarrow_dtype) + return False + + def to_arrow(self) -> pa.Array: + result = super().to_arrow() + # libcudf produces arrow string (32-bit offsets), but pandas 3.0 + # uses large_string (64-bit offsets) for pyarrow-backed string + # dtypes. Cast to large_string to match pandas arrow output. + if pa.types.is_string(result.type) and self._should_use_large_string: + result = result.cast(pa.large_string()) + return result + def to_pandas( self, *, nullable: bool = False, arrow_type: bool = False, ) -> pd.Index: - if isinstance(self.dtype, pd.StringDtype) and self.dtype.storage in [ - "pyarrow", - "python", - ]: + if arrow_type and nullable: + raise ValueError( + f"{arrow_type=} and {nullable=} cannot both be set." + ) + if arrow_type: + # Use the raw column arrow (without large_string cast) + # so that ArrowExtensionArray preserves the original type. + pa_array = ColumnBase.to_arrow(self) + return pd.Index( + pd.arrays.ArrowExtensionArray(pa_array), copy=False + ) + if not nullable and isinstance(self.dtype, pd.StringDtype): if self.dtype.storage == "pyarrow": pa_array = self.to_arrow() - if PANDAS_GE_220: - # Prior versions only expect pa.string() - pa_array = pa_array.cast(pa.large_string()) - else: - pa_array = pa_array.cast(pa.string()) pandas_array = self.dtype.__from_arrow__(pa_array) elif self.dtype.na_value is np.nan: pandas_array = pd.array( @@ -1401,7 +1466,7 @@ def contains_re(self, pattern: str, flags: int) -> Self: plc_flags_from_re_flags(flags), ), ) - dtype = self._get_pandas_compatible_dtype(np.dtype(np.bool_)) + dtype = get_dtype_of_same_kind(self.dtype, np.dtype(np.bool_)) return cast(Self, ColumnBase.create(plc_column, dtype)) def str_contains(self, pattern: str | Self) -> Self: @@ -1564,7 +1629,7 @@ def all_characters_of_type( plc_result = plc.strings.char_types.all_characters_of_type( self.plc_column, char_type, case_type ) - dtype = self._get_pandas_compatible_dtype(np.dtype(np.bool_)) + dtype = get_dtype_of_same_kind(self.dtype, np.dtype(np.bool_)) result = cast( "cudf.core.column.numerical.NumericalColumn", ColumnBase.create(plc_result, dtype), @@ -1697,7 +1762,7 @@ def count_re(self, pattern: str, flags: int) -> NumericalColumn: ) res = ColumnBase.create( plc_result, - self._get_pandas_compatible_dtype(np.dtype(np.int32)), + get_dtype_of_same_kind(self.dtype, np.dtype(np.int32)), ) return cast(cudf.core.column.numerical.NumericalColumn, res) @@ -1782,8 +1847,11 @@ def starts_ends_with( raise TypeError( f"expected a str or tuple[str, ...], not {type(pat).__name__}" ) - dtype = self._get_pandas_compatible_dtype(np.dtype(np.bool_)) - return cast(Self, ColumnBase.create(plc_result, dtype)) + dtype = get_dtype_of_same_kind(self.dtype, np.dtype(np.bool_)) + result = cast(Self, ColumnBase.create(plc_result, dtype)) + if self._PANDAS_NA_VALUE in {np.nan, None}: + result = result.fillna(False) + return result def find( self, @@ -1806,7 +1874,7 @@ def find( Self, ColumnBase.create( plc_result, - self._get_pandas_compatible_dtype(np.dtype("int64")), + get_dtype_of_same_kind(self.dtype, np.dtype("int64")), ), ) @@ -1818,7 +1886,7 @@ def matches_re(self, pattern: str, flags: int) -> Self: pattern, plc_flags_from_re_flags(flags) ), ) - dtype = self._get_pandas_compatible_dtype(np.dtype(np.bool_)) + dtype = get_dtype_of_same_kind(self.dtype, np.dtype(np.bool_)) return cast(Self, ColumnBase.create(plc_result, dtype)) def code_points(self) -> Self: diff --git a/python/cudf/cudf/core/column/struct.py b/python/cudf/cudf/core/column/struct.py index de411af9dbb7..7bebc6ac2154 100644 --- a/python/cudf/cudf/core/column/struct.py +++ b/python/cudf/cudf/core/column/struct.py @@ -86,7 +86,9 @@ def _get_sliced_child(self, loc: int | str) -> tuple[ColumnBase, str]: sub_type = self.fields[field_label] return ColumnBase.create(sliced_plc_col, sub_type), field_label - def _prep_pandas_compat_repr(self) -> StringColumn | Self: + def _prep_pandas_compat_repr( + self, nan_rep: str | None = None + ) -> StringColumn | Self: """ Preprocess Column to be compatible with pandas repr, namely handling nulls. diff --git a/python/cudf/cudf/core/column/temporal_base.py b/python/cudf/cudf/core/column/temporal_base.py index 6d492cd446b5..07b3d5047885 100644 --- a/python/cudf/cudf/core/column/temporal_base.py +++ b/python/cudf/cudf/core/column/temporal_base.py @@ -5,7 +5,6 @@ import datetime import functools -import warnings from typing import TYPE_CHECKING, Any, ClassVar, cast import cupy as cp @@ -18,10 +17,13 @@ import cudf from cudf.api.types import is_scalar from cudf.core.column.column import ColumnBase, as_column, column_empty +from cudf.core.dtype.validators import ( + is_dtype_obj_datetime_tz, + is_dtype_obj_string, +) from cudf.core.mixins import Scannable from cudf.errors import MixedTypeError from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, cudf_dtype_from_pa_type, cudf_dtype_to_pa_type, dtype_to_pylibcudf_type, @@ -29,6 +31,35 @@ ) from cudf.utils.utils import is_na_like + +def _raise_on_invalid_ordering_scalar( + self_dtype: DtypeObj, other: Any, op: str +) -> None: + """Raise TypeError for ordering ops against pandas-invalid scalars. + + pandas raises ``Invalid comparison between dtype= and `` + when a datetime64/timedelta64 array is compared (``<``, ``<=``, + ``>``, ``>=``) against ``None``, a plain (non-typed) ``float`` NaN, + or a ``datetime.date`` that is not a ``datetime.datetime``. Without + this guard those scalars silently coerce to NaT in cudf and + ``_binaryop`` would return an incorrect boolean column. + """ + if op not in {"__lt__", "__le__", "__gt__", "__ge__"}: + return + if ( + other is None + or (isinstance(other, float) and np.isnan(other)) + or ( + isinstance(other, datetime.date) + and not isinstance(other, datetime.datetime) + ) + ): + raise TypeError( + f"Invalid comparison between dtype={self_dtype} " + f"and {type(other).__name__}" + ) + + if TYPE_CHECKING: from collections.abc import Sequence from typing import Self @@ -99,27 +130,44 @@ def _cast_setitem_value(self, value: Any) -> plc.Scalar | ColumnBase: value = self._PD_SCALAR(value) elif value is pd.NaT: value = None + elif cudf.get_option("mode.pandas_compatible"): + # pyarrow silently coerces int/float to epoch values; pandas + # raises TypeError for these. + value_is_scalar = is_scalar(value) + if ( + value_is_scalar + and not is_na_like(value) + and not isinstance(value, (bool, np.bool_)) + and isinstance(value, (int, float, np.integer, np.floating)) + ): + raise TypeError( + f"Invalid value '{value}' for dtype '{self.dtype}'" + ) + if ( + not value_is_scalar + and not isinstance(value, ColumnBase) + and getattr(getattr(value, "dtype", None), "kind", None) + in {"i", "u", "f", "b"} + ): + raise TypeError( + f"Invalid value '{value}' for dtype '{self.dtype}'" + ) + if isinstance(value, ColumnBase) and value.dtype.kind in { + "i", + "u", + "f", + "b", + }: + raise TypeError( + f"Invalid value '{value}' for dtype '{self.dtype}'" + ) return super()._cast_setitem_value(value) def _process_values_for_isin( self, values: Sequence ) -> tuple[ColumnBase, ColumnBase]: lhs, rhs = super()._process_values_for_isin(values) - if len(rhs) and rhs.dtype.kind == "O": - try: - rhs = rhs.astype(lhs.dtype) - except ValueError: - pass - else: - warnings.warn( - f"The behavior of 'isin' with dtype={lhs.dtype} and " - "castable values (e.g. strings) is deprecated. In a " - "future version, these will not be considered matching " - "by isin. Explicitly cast to the appropriate dtype before " - "calling isin instead.", - FutureWarning, - ) - elif isinstance(rhs, type(self)): + if isinstance(rhs, type(self)): rhs = rhs.astype(lhs.dtype) return lhs, rhs @@ -138,22 +186,39 @@ def _normalize_binop_operand(self, other: Any) -> pa.Scalar | ColumnBase: arrow_type = cudf_dtype_to_pa_type(other.dtype) except pa.ArrowNotImplementedError: arrow_type = cudf_dtype_to_pa_type( - np.dtype(f"{other.dtype.type.__name__}[ns]") + np.dtype( + f"{other.dtype.type.__name__}[{self.time_unit}]" + ) ) else: arrow_type = cudf_dtype_to_pa_type(self.dtype) return pa.scalar(None, type=arrow_type) elif self.dtype.kind == "M" and isinstance(other, pd.Timestamp): - if other.tz is not None: - raise NotImplementedError( - "Binary operations with timezone aware operands is not supported." + self_tz = getattr(self.dtype, "tz", None) + if (other.tz is None) != (self_tz is None): + raise TypeError( + f"Invalid comparison between dtype={self.dtype} " + f"and {type(other).__name__}" ) - other = other.to_numpy() + if other.tz is None: + other = other.to_numpy() + else: + return pa.scalar(other) elif self.dtype.kind == "M" and isinstance(other, str): try: - other = pd.Timestamp(other) + ts = pd.Timestamp(other) except ValueError: return NotImplemented + if is_dtype_obj_datetime_tz(self.dtype): + # pandas parses the string and interprets it in the + # column's tz for comparison, so localize here. + if isinstance(self.dtype, pd.DatetimeTZDtype): + tz = self.dtype.tz + else: + tz = cast("pd.ArrowDtype", self.dtype).pyarrow_dtype.tz + other = ts.tz_localize(tz) + else: + other = ts elif self.dtype.kind == "m" and isinstance(other, pd.Timedelta): other = other.to_numpy() elif isinstance(other, (np.datetime64, np.timedelta64)): @@ -182,9 +247,11 @@ def _normalize_binop_operand(self, other: Any) -> pa.Scalar | ColumnBase: other = datetime.datetime(other.year, other.month, other.day) scalar = pa.scalar(other) if pa.types.is_timestamp(scalar.type): - if scalar.type.tz is not None: - raise NotImplementedError( - "Binary operations with timezone aware operands is not supported." + self_tz = getattr(self.dtype, "tz", None) + if (scalar.type.tz is None) != (self_tz is None): + raise TypeError( + f"Invalid comparison between dtype={self.dtype} " + f"and {type(other).__name__}" ) return scalar elif pa.types.is_duration(scalar.type): @@ -228,7 +295,7 @@ def values(self) -> cp.ndarray: def element_indexing(self, index: int) -> ScalarLike: result = super().element_indexing(index) if isinstance(result, (datetime.datetime, datetime.timedelta)): - return self._PD_SCALAR(result) + return self._PD_SCALAR(result).as_unit(self.time_unit) return result def to_pandas( @@ -245,6 +312,11 @@ def to_pandas( return super().to_pandas(nullable=nullable, arrow_type=arrow_type) def as_numerical_column(self, dtype: np.dtype) -> NumericalColumn: + if cudf.get_option("mode.pandas_compatible") and dtype.kind == "f": + # pandas raises TypeError for datetime/timedelta → float casts + # (only integer casts are allowed via Series constructor). + kind_name = "Datetime" if self.dtype.kind == "M" else "Timedelta" + raise TypeError(f"Cannot cast {kind_name}Array to dtype {dtype}") new_plc_column = plc.Column( data_type=dtype_to_pylibcudf_type(self._UNDERLYING_DTYPE), size=self.size, @@ -270,9 +342,9 @@ def floor(self, freq: str) -> ColumnBase: def round(self, freq: str) -> ColumnBase: raise NotImplementedError("round is currently not implemented") - def strftime(self, format: str) -> StringColumn: + def strftime(self, format: str, dtype: DtypeObj) -> StringColumn: if len(self) == 0: - return column_empty(0, dtype=CUDF_STRING_DTYPE) # type:ignore[return-value] + return column_empty(0, dtype=dtype) # type:ignore[return-value] else: raise NotImplementedError("strftime is currently not implemented") @@ -332,8 +404,8 @@ def can_cast_safely(self, to_dtype: DtypeObj) -> bool: to_res, # type: ignore[call-overload] ).astype(f"m8[{self.time_unit}]", copy=False) return bool(max_dist <= max_to_res and min_dist <= max_to_res) - elif ( - to_dtype == self._UNDERLYING_DTYPE or to_dtype == CUDF_STRING_DTYPE + elif to_dtype == self._UNDERLYING_DTYPE or is_dtype_obj_string( + to_dtype ): # can safely cast to representation, or string return True @@ -404,7 +476,12 @@ def quantile( return_scalar=return_scalar, ) if return_scalar: - return self._PD_SCALAR(result, unit=self.time_unit).as_unit( + ts = self._PD_SCALAR(result, unit=self.time_unit).as_unit( self.time_unit ) + # For tz-aware datetimes the underlying int64 stores UTC; the + # scalar above is tz-naive, so re-attach the original tz. + if (tz := getattr(self, "tz", None)) is not None: + ts = ts.tz_localize("UTC").tz_convert(tz) + return ts return result.astype(self.dtype) diff --git a/python/cudf/cudf/core/column/timedelta.py b/python/cudf/cudf/core/column/timedelta.py index 6aa6fc729ca5..82cd246f7108 100644 --- a/python/cudf/cudf/core/column/timedelta.py +++ b/python/cudf/cudf/core/column/timedelta.py @@ -21,10 +21,12 @@ as_column, fixed_dtype_policy, ) -from cudf.core.column.temporal_base import TemporalBaseColumn +from cudf.core.column.temporal_base import ( + TemporalBaseColumn, + _raise_on_invalid_ordering_scalar, +) from cudf.errors import MixedTypeError from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, cudf_dtype_from_pa_type, cudf_dtype_to_pa_type, dtype_to_pylibcudf_type, @@ -120,6 +122,7 @@ def __contains__(self, item: DatetimeLikeScalar) -> bool: def _binaryop(self, other: ColumnBinaryOperand, op: str) -> ColumnBase: reflect, op = self._check_reflected_op(op) + _raise_on_invalid_ordering_scalar(self.dtype, other, op) other = self._normalize_binop_operand(other) if other is NotImplemented: return NotImplemented @@ -218,7 +221,7 @@ def total_seconds(self) -> ColumnBase: conversion = unit_to_nanoseconds_conversion[self.time_unit] / 1e9 # Typecast to decimal128 to avoid floating point precision issues # https://github.com/rapidsai/cudf/issues/17664 - return ( + result = ( (self.astype(self._UNDERLYING_DTYPE) * conversion) .astype( cudf.Decimal128Dtype(cudf.Decimal128Dtype.MAX_PRECISION, 9) @@ -226,17 +229,20 @@ def total_seconds(self) -> ColumnBase: .round(decimals=abs(int(math.log10(conversion)))) .astype(np.dtype(np.float64)) ) + if isinstance(self.dtype, pd.ArrowDtype): + result = result.astype( + get_dtype_of_same_kind(self.dtype, np.dtype(np.float64)) + ) + return result def as_datetime_column(self, dtype: np.dtype) -> None: # type: ignore[override] raise TypeError( f"cannot astype a timedelta from {self.dtype} to {dtype}" ) - def strftime( - self, format: str, dtype: DtypeObj = CUDF_STRING_DTYPE - ) -> StringColumn: + def strftime(self, format: str, dtype: DtypeObj) -> StringColumn: if len(self) == 0: - return super().strftime(format) + return super().strftime(format, dtype) return cast( cudf.core.column.string.StringColumn, PylibcudfFunction( @@ -256,30 +262,25 @@ def as_string_column(self, dtype: DtypeObj) -> StringColumn: ) if isinstance(dtype, np.dtype) and dtype.kind == "U": dtype = np.dtype("object") - if cudf.get_option("mode.pandas_compatible"): - components = self.components - has_hours = components["hours"].any() - has_minutes = components["minutes"].any() - has_seconds = components["seconds"].any() - has_millis = ( - self.time_unit in {"ns", "us", "ms"} - and components["milliseconds"].any() - ) - has_micros = ( - self.time_unit in {"ns", "us"} and self.microseconds.any() - ) - has_nanos = self.time_unit == "ns" and self.nanoseconds.any() - - has_subday = has_hours or has_minutes or has_seconds - has_fraction = has_millis or has_micros or has_nanos - return self._as_string_pandas_compat( - dtype, - has_subday=has_subday, - has_fraction=has_fraction, - has_nanos=has_nanos, - ) - - return self.strftime("%D days %H:%M:%S", dtype=dtype) + components = self.components + has_hours = components["hours"].any() + has_minutes = components["minutes"].any() + has_seconds = components["seconds"].any() + has_millis = ( + self.time_unit in {"ns", "us", "ms"} + and components["milliseconds"].any() + ) + has_micros = self.time_unit in {"ns", "us"} and self.microseconds.any() + has_nanos = self.time_unit == "ns" and self.nanoseconds.any() + + has_subday = has_hours or has_minutes or has_seconds + has_fraction = has_millis or has_micros or has_nanos + return self._as_string_pandas_compat( + dtype, + has_subday=has_subday, + has_fraction=has_fraction, + has_nanos=has_nanos, + ) def _as_string_pandas_compat( self, @@ -290,10 +291,6 @@ def _as_string_pandas_compat( has_nanos: bool, ) -> StringColumn: """Convert to string using pandas-compatible formatting.""" - nat_scalar = pa_scalar_to_plc_scalar( - pa.scalar("NaT", type=pa.string()) - ) - if not (has_subday or has_fraction): fmt = "%D days" else: @@ -350,9 +347,6 @@ def _as_string_pandas_compat( r"\1", ) - # Fill nulls with "NaT". - plc_result = plc.replace.replace_nulls(plc_result, nat_scalar) - return cast( cudf.core.column.string.StringColumn, ColumnBase.create(plc_result, dtype), diff --git a/python/cudf/cudf/core/column_accessor.py b/python/cudf/cudf/core/column_accessor.py index 8ce614fcd568..2157d8adb914 100644 --- a/python/cudf/cudf/core/column_accessor.py +++ b/python/cudf/cudf/core/column_accessor.py @@ -22,7 +22,7 @@ from cudf.api.types import infer_dtype, is_scalar from cudf.core import column from cudf.errors import MixedTypeError -from cudf.utils.dtypes import is_mixed_with_object_dtype +from cudf.utils.dtypes import DEFAULT_STRING_DTYPE, is_mixed_with_object_dtype if TYPE_CHECKING: from typing import Self @@ -61,7 +61,7 @@ def from_zip(cls, data: Iterator): def __getitem__(self, key): """Recursively apply dict.__getitem__ for nested elements.""" # As described in the pandas docs - # https://pandas.pydata.org/pandas-docs/version/2.3.3/user_guide/advanced.html#advanced-indexing-with-hierarchical-index + # https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html#advanced-indexing-with-hierarchical-index # accessing nested elements of a multiindex must be done using a tuple. # Lists and other sequences are treated as accessing multiple elements # at the top level of the index. @@ -320,11 +320,17 @@ def to_pandas_index(self) -> pd.Index: diff, ) return pd.RangeIndex(new_range, name=self.name) + # Avoid pandas returning Index[object] + dtype = ( + self.label_dtype + if self.label_dtype is not None or len(self.names) > 0 + else DEFAULT_STRING_DTYPE + ) result = pd.Index( self.names, name=self.name, tupleize_cols=False, - dtype=self.label_dtype, + dtype=dtype, ) return result @@ -394,10 +400,7 @@ def copy(self, deep: bool = False) -> Self: """ Make a copy of this ColumnAccessor. """ - if deep or cudf.get_option("copy_on_write"): - data = {k: v.copy(deep=deep) for k, v in self._data.items()} - else: - data = self._data.copy() + data = {k: v.copy(deep=deep) for k, v in self._data.items()} return self.__class__( data=data, multiindex=self.multiindex, @@ -527,8 +530,7 @@ def swaplevel(self, i: Hashable = -2, j: Hashable = -1) -> Self: new_keys[n][i], new_keys[n][j] = row[j], row[i] # type: ignore[call-overload, index] new_dict.update({row: tuple(new_keys[n])}) - # TODO: Change to deep=False when copy-on-write is default - new_data = {new_dict[k]: v.copy(deep=True) for k, v in self.items()} + new_data = {new_dict[k]: v.copy(deep=False) for k, v in self.items()} # swap level_names for i and j new_names = list(self.level_names) diff --git a/python/cudf/cudf/core/dataframe.py b/python/cudf/cudf/core/dataframe.py index 6b95c939aa6a..7a1e988be88f 100644 --- a/python/cudf/cudf/core/dataframe.py +++ b/python/cudf/cudf/core/dataframe.py @@ -51,7 +51,6 @@ is_scalar, ) from cudf.core import indexing_utils, reshape -from cudf.core._compat import PANDAS_LT_300 from cudf.core.column import ( CategoricalColumn, ColumnBase, @@ -63,7 +62,10 @@ from cudf.core.column.column import _normalize_types_column from cudf.core.column_accessor import ColumnAccessor from cudf.core.copy_types import BooleanMask -from cudf.core.dtype.validators import is_dtype_obj_numeric +from cudf.core.dtype.validators import ( + is_dtype_obj_numeric, + is_dtype_obj_string, +) from cudf.core.dtypes import ( CategoricalDtype, Decimal32Dtype, @@ -102,7 +104,7 @@ from cudf.options import get_option from cudf.utils import docutils, ioutils, queryutils from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, + DEFAULT_STRING_DTYPE, SIZE_TYPE_DTYPE, SUPPORTED_NUMPY_TO_PYLIBCUDF_TYPES, can_convert_to_column, @@ -132,6 +134,7 @@ Axis, ColumnLike, Dtype, + NoDefault, ScalarLike, ) @@ -557,7 +560,7 @@ def _listlike_to_column_accessor( index = cudf.RangeIndex(0) if columns is not None: col_data = { - col_label: column_empty(len(index), dtype=CUDF_STRING_DTYPE) + col_label: column_empty(len(index), dtype=DEFAULT_STRING_DTYPE) for col_label in columns } else: @@ -660,13 +663,7 @@ def _listlike_to_column_accessor( ) transpose = temp_frame.T else: - with warnings.catch_warnings(): - warnings.filterwarnings( - "ignore", - message="The behavior of array concatenation", - category=FutureWarning, - ) - transpose = cudf.concat(data, axis=1).T + transpose = cudf.concat(data, axis=1).T if columns is None: columns = pd.RangeIndex(transpose._num_columns) @@ -942,8 +939,8 @@ class DataFrame(IndexedFrame, GetAttrGetItemMixin): ... ]) >>> df 0 1 2 3 4 - 0 5 cats jump None - 1 2 dogs dig 7.5 None + 0 5 cats jump NaN NaN + 1 2 dogs dig 7.5 NaN 2 3 cows moo -2.1 occasionally Convert from a Pandas DataFrame: @@ -958,11 +955,11 @@ class DataFrame(IndexedFrame, GetAttrGetItemMixin): 3 3 0.3 >>> df = cudf.from_pandas(pdf) >>> df - a b - 0 0 0.1 - 1 1 0.2 - 2 2 - 3 3 0.3 + a b + 0 0 0.1 + 1 1 0.2 + 2 2 NaN + 3 3 0.3 """ _PROTECTED_KEYS = frozenset( @@ -1013,8 +1010,10 @@ def __init__( second_index = None second_columns = None attrs = None + allows_duplicate_labels = True if isinstance(data, (DataFrame, pd.DataFrame)): attrs = deepcopy(data.attrs) + allows_duplicate_labels = data.flags.allows_duplicate_labels if isinstance(data, pd.DataFrame): cols = { i: as_column(col_value.array, nan_as_null=nan_as_null) @@ -1062,7 +1061,7 @@ def __init__( index = index[:0] col_accessor = ColumnAccessor( { - col: column_empty(0, dtype=CUDF_STRING_DTYPE) + col: column_empty(0, dtype=DEFAULT_STRING_DTYPE) for col in columns }, verify=False, @@ -1082,7 +1081,7 @@ def __init__( if columns is not None: col_accessor = ColumnAccessor( { - k: column_empty(len(index), dtype=CUDF_STRING_DTYPE) + k: column_empty(len(index), dtype=DEFAULT_STRING_DTYPE) for k in columns }, verify=False, @@ -1196,7 +1195,9 @@ def __init__( new_data = { second_label: col_accessor[second_label] if second_label in col_accessor - else column_empty(col_accessor.nrows, dtype=CUDF_STRING_DTYPE) + else column_empty( + col_accessor.nrows, dtype=DEFAULT_STRING_DTYPE + ) for second_label in second_columns } col_accessor = ColumnAccessor( @@ -1208,7 +1209,12 @@ def __init__( label_dtype=second_columns.dtype, ) - super().__init__(col_accessor, index=index, attrs=attrs) + super().__init__( + col_accessor, + index=index, + attrs=attrs, + allows_duplicate_labels=allows_duplicate_labels, + ) if second_index is not None: reindexed = self.reindex(index=second_index, copy=False) self._data = reindexed._data @@ -1224,8 +1230,14 @@ def _from_data( # type: ignore[override] index: Index | None = None, columns: Any = None, attrs: dict | None = None, + allows_duplicate_labels: bool = True, ) -> Self: - out = super()._from_data(data=data, index=index, attrs=attrs) + out = super()._from_data( + data=data, + index=index, + attrs=attrs, + allows_duplicate_labels=allows_duplicate_labels, + ) if columns is not None: out.columns = columns return out @@ -1280,8 +1292,8 @@ def dtypes(self) -> pd.Series: >>> df.dtypes float float64 int int64 - datetime datetime64[ns] - string object + datetime datetime64[us] + string str dtype: object """ result_dict = dict(self._dtypes) @@ -1382,10 +1394,12 @@ def _getitem_preprocessed( inputs. """ if col_is_scalar: - series = Series._from_data(ca, index=self.index, attrs=self.attrs) + series = Series._from_data(ca, index=self.index) + self._propagate_metadata(series) return series._getitem_preprocessed(spec) if ca.names != self._column_names: - frame = self._from_data(ca, index=self.index, attrs=self.attrs) + frame = self._from_data(ca, index=self.index) + self._propagate_metadata(frame) else: frame = self if isinstance(spec, indexing_utils.MapIndexer): @@ -1417,7 +1431,7 @@ def _getitem_preprocessed( ) result.index = result_index result.name = new_name - result._attrs = frame.attrs + frame._propagate_metadata(result) return result except TypeError: if get_option("mode.pandas_compatible"): @@ -1514,12 +1528,11 @@ def __getitem__(self, arg): and all(n == "" for n in out._column_names[0]) ) ): - out = self._constructor_sliced._from_data( - out._data, attrs=self.attrs - ) + out = self._constructor_sliced._from_data(out._data) out._data.multiindex = False out.index = self.index out.name = arg + self._propagate_metadata(out) return out elif isinstance(arg, slice): @@ -2113,6 +2126,19 @@ def _concat( # Reassign index and column names if objs[0]._data.multiindex: out._set_columns_like(objs[0]._data) + elif ( + all(obj._data.rangeindex for obj in objs) + and all( + obj._num_columns == 0 + or ( + obj._column_names[0] == 0 + and obj._column_names[-1] == obj._num_columns - 1 + ) + for obj in objs + ) + and tuple(names) == tuple(range(len(names))) + ): + out.columns = cudf.RangeIndex(len(names)) else: out.columns = names if not ignore_index: @@ -2255,11 +2281,9 @@ def _get_renderable_dataframe(self) -> Self: lower_left = self.tail(lower_rows).iloc[:, :left_cols] lower_right = self.tail(lower_rows).iloc[:, right_cols:] - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - upper = cudf.concat([upper_left, upper_right], axis=1) - lower = cudf.concat([lower_left, lower_right], axis=1) - output = cudf.concat([upper, lower]) + upper = cudf.concat([upper_left, upper_right], axis=1) + lower = cudf.concat([lower_left, lower_right], axis=1) + output = cudf.concat([upper, lower]) return output._pandas_repr_compatible() @@ -2408,6 +2432,9 @@ def _fill_same_ca_attributes( else: raise ValueError("other must be a DataFrame or Series.") + if isinstance(column_names_list, pd.MultiIndex): + ca_attributes["multiindex"] = True + ca_attributes["level_names"] = tuple(column_names_list.names) sorted_dict = {key: operands[key] for key in column_names_list} return sorted_dict, index, ca_attributes return operands, index, ca_attributes @@ -2723,7 +2750,7 @@ def scatter_by_map( map_index = map_index.astype(SIZE_TYPE_DTYPE) # Convert string or categorical to integer - if map_index.dtype == CUDF_STRING_DTYPE: + if is_dtype_obj_string(map_index.dtype): map_index = map_index._label_encoding(map_index.unique()) warnings.warn( "Using StringColumn for map_index in scatter_by_map. " @@ -2950,12 +2977,16 @@ def columns(self, columns): pd_columns = pd.Index(columns.to_pandas()) label_dtype = pd_columns.dtype else: + has_dtype = isinstance(columns, (np.ndarray, pd.Series, pd.Index)) pd_columns = pd.Index(columns) if pd_columns.nunique(dropna=False) != len(pd_columns): raise ValueError("Duplicate column names are not allowed") rangeindex = isinstance(pd_columns, pd.RangeIndex) level_names = (pd_columns.name,) - label_dtype = pd_columns.dtype + if not has_dtype and not rangeindex and len(pd_columns) == 0: + label_dtype = self._data.label_dtype + else: + label_dtype = pd_columns.dtype if len(pd_columns) != self._num_columns: raise ValueError( @@ -3062,8 +3093,8 @@ def reindex( >>> df.reindex(new_index) http_status response_time Safari 404 0.07 - Iceweasel - Comodo Dragon + Iceweasel NaN + Comodo Dragon NaN IE10 404 0.08 Chrome 200 0.02 @@ -3090,21 +3121,21 @@ def reindex( >>> df.reindex(columns=['http_status', 'user_agent']) http_status user_agent - Firefox 200 - Chrome 200 - Safari 404 - IE10 404 - Konqueror 301 + Firefox 200 NaN + Chrome 200 NaN + Safari 404 NaN + IE10 404 NaN + Konqueror 301 NaN Or we can use "axis-style" keyword arguments >>> df.reindex(columns=['http_status', 'user_agent']) http_status user_agent - Firefox 200 - Chrome 200 - Safari 404 - IE10 404 - Konqueror 301 + Firefox 200 NaN + Chrome 200 NaN + Safari 404 NaN + IE10 404 NaN + Konqueror 301 NaN """ if labels is None and index is None and columns is None: @@ -3255,6 +3286,11 @@ def set_index( raise TypeError("append must be a boolean") if not isinstance(inplace, bool): raise TypeError("inplace must be a boolean") + if inplace and not self._flags.allows_duplicate_labels: + raise ValueError( + "Cannot specify 'inplace=True' when " + "'self.flags.allows_duplicate_labels' is False." + ) if append: keys = [self.index, *keys] @@ -3311,8 +3347,7 @@ def set_index( idx = MultiIndex._from_data(dict(enumerate(data_to_add))) idx.names = names - # TODO: Change to deep=False when copy-on-write is default - df = self if inplace else self.copy(deep=True) + df = self if inplace else self.copy(deep=False) if verify_integrity and not idx.is_unique: raise ValueError(f"Values in Index are not unique: {idx}") @@ -3325,8 +3360,57 @@ def set_index( @_performance_tracking def fillna( - self, value=None, method=None, axis=None, inplace=False, limit=None - ): + self, + value, + *, + axis: Axis | None = None, + inplace: bool = False, + limit: int | None = None, + ) -> Self | None: + """Fill null values with ``value``. + + Parameters + ---------- + value : scalar, Series-like or dict + Value to use to fill nulls. If Series-like, null values + are filled with values in corresponding indices. + A dict can be used to provide different values to fill nulls + in different columns. + + Returns + ------- + result : DataFrame, Series, or Index + Copy with nulls filled. + + Examples + -------- + >>> import cudf + >>> df = cudf.DataFrame({'a': [1, 2, None], 'b': [3, None, 5]}) + >>> df + a b + 0 1 3 + 1 2 + 2 5 + >>> df.fillna(4) + a b + 0 1 3 + 1 2 4 + 2 4 5 + >>> df.fillna({'a': 3, 'b': 4}) + a b + 0 1 3 + 1 2 4 + 2 3 5 + + ``fillna`` can also supports inplace operation: + + >>> df.fillna({'a': 3, 'b': 4}, inplace=True) + >>> df + a b + 0 1 3 + 1 2 4 + 2 3 5 + """ if isinstance(value, (pd.Series, pd.DataFrame)): value = from_pandas(value) if isinstance(value, Series): @@ -3345,8 +3429,8 @@ def fillna( else value for key, value in value.items() } - return super().fillna( - value=value, method=method, axis=axis, inplace=inplace, limit=limit + return super()._fillna( + value=value, axis=axis, inplace=inplace, limit=limit ) @_performance_tracking @@ -3437,19 +3521,19 @@ class max_speed falcon bird 389.0 parrot bird 24.0 lion mammal 80.5 - monkey mammal + monkey mammal NaN >>> df.reset_index() index class max_speed 0 falcon bird 389.0 1 parrot bird 24.0 2 lion mammal 80.5 - 3 monkey mammal + 3 monkey mammal NaN >>> df.reset_index(drop=True) class max_speed 0 bird 389.0 1 bird 24.0 2 mammal 80.5 - 3 mammal + 3 mammal NaN You can also use ``reset_index`` with MultiIndex. @@ -3470,14 +3554,14 @@ class name bird falcon 389.0 fly parrot 24.0 fly mammal lion 80.5 run - monkey jump + monkey NaN jump >>> df.reset_index(level='class') class speed type name falcon bird 389.0 fly parrot bird 24.0 fly lion mammal 80.5 run - monkey mammal jump + monkey mammal NaN jump """, ) ) @@ -3491,6 +3575,11 @@ def reset_index( allow_duplicates: bool = False, names: Hashable | Sequence[Hashable] | None = None, ): + if inplace and not self._flags.allows_duplicate_labels: + raise ValueError( + "Cannot specify 'inplace=True' when " + "'self.flags.allows_duplicate_labels' is False." + ) data, index = self._reset_index( level=level, drop=drop, @@ -3499,10 +3588,9 @@ def reset_index( allow_duplicates=allow_duplicates, names=names, ) - return self._mimic_inplace( - DataFrame._from_data(data=data, index=index, attrs=self.attrs), - inplace=inplace, - ) + out = DataFrame._from_data(data=data, index=index) + self._propagate_metadata(out) + return self._mimic_inplace(out, inplace=inplace) @_external_only_api( "Use ._insert with ignore_index=True to avoid expensive index " @@ -3583,10 +3671,26 @@ def _insert(self, loc, name, value, nan_as_null=None, ignore_index=True): if isinstance(value, (np.ndarray, cupy.ndarray)): dtype = value.dtype if dtype.kind == "U": - dtype = CUDF_STRING_DTYPE + dtype = DEFAULT_STRING_DTYPE value = value.item() + if dtype.kind == "O" and isinstance(value, str): + dtype = DEFAULT_STRING_DTYPE if is_na_like(value): - dtype = CUDF_STRING_DTYPE + if isinstance(value, (np.timedelta64, np.datetime64)): + # Fall back to "ns" for unsupported units + # (e.g. ``np.timedelta64("NaT")``), matching pandas. + unit, _ = np.datetime_data(value.dtype) + if unit not in {"s", "ms", "us", "ns"}: + kind = ( + "timedelta64" + if isinstance(value, np.timedelta64) + else "datetime64" + ) + dtype = np.dtype(f"{kind}[ns]") + else: + dtype = value.dtype + else: + dtype = DEFAULT_STRING_DTYPE value = as_column( value, length=len(self), @@ -3641,8 +3745,7 @@ def axes(self): >>> cdf1["val"] = [1,2,3,4] >>> cdf1["temp"] = [-1,2,2,3] >>> cdf1.axes - [RangeIndex(start=0, stop=4, step=1), - Index(['key', 'k2', 'val', 'temp'], dtype='object')] + [RangeIndex(start=0, stop=4, step=1), Index(['key', 'k2', 'val', 'temp'], dtype='str')] """ return [self.index, self._data.to_pandas_index] @@ -3976,8 +4079,7 @@ def rename( def add_prefix(self, prefix, axis=None): if axis is not None: raise NotImplementedError("axis is currently not implemented.") - # TODO: Change to deep=False when copy-on-write is default - out = self.copy(deep=True) + out = self.copy(deep=False) out.columns = [prefix + col_name for col_name in self._column_names] return out @@ -3985,8 +4087,7 @@ def add_prefix(self, prefix, axis=None): def add_suffix(self, suffix, axis=None): if axis is not None: raise NotImplementedError("axis is currently not implemented.") - # TODO: Change to deep=False when copy-on-write is default - out = self.copy(deep=True) + out = self.copy(deep=False) out.columns = [col_name + suffix for col_name in self._column_names] return out @@ -4027,7 +4128,7 @@ def agg(self, aggs, axis=None): ): raise MixedTypeError("Cannot create a column with mixed types") - if any(dt == CUDF_STRING_DTYPE for dt in dtypes): + if any(is_dtype_obj_string(dt) for dt in dtypes): raise NotImplementedError( "DataFrame.agg() is not supported for " "frames containing string columns" @@ -4311,8 +4412,7 @@ def swaplevel(self, i=-2, j=-1, axis=0): weight 1.0 0.8 length 0.3 0.2 """ - # TODO: Change to deep=False when copy-on-write is default - result = self.copy(deep=True) + result = self.copy(deep=False) # To get axis number axis = self._get_axis_from_axis_arg(axis) @@ -4560,8 +4660,16 @@ def merge( lhs, rhs = self, right merge_cls = Merge - if how == "right": - # Merge doesn't support right, so just swap + is_right_join = how == "right" + if is_right_join: + # Merge doesn't support right, so just swap. + # Capture original key params before swap so we can restore + # the expected column order (self columns first) after the merge. + orig_on = on + orig_left_on = left_on + orig_right_on = right_on + orig_left_index = left_index + orig_right_index = right_index how = "left" lhs, rhs = right, self left_on, right_on = right_on, left_on @@ -4570,7 +4678,7 @@ def merge( elif how in {"leftsemi", "leftanti"}: merge_cls = MergeSemi - return merge_cls( + result = merge_cls( lhs, rhs, on=on, @@ -4584,6 +4692,63 @@ def merge( suffixes=suffixes, ).perform_merge() + if is_right_join: + # After the swap, result columns are ordered as: + # [key_cols (k), right_non_key_cols, self_non_key_cols] + # Pandas expects: + # [key_cols (k), self_non_key_cols, right_non_key_cols] + # Reorder using integer positions to avoid issues with None/NaN + # column names: new positions = [0..k-1, N_r..n-1, k..N_r-1] + N_r = right._num_columns + n_result = result._num_columns + if orig_on is not None: + # `on` names data columns shared by both sides; they appear once. + k = 1 if is_scalar(orig_on) else len(orig_on) + elif ( + orig_left_on is not None + and orig_right_on is not None + and not orig_left_index + and not orig_right_index + ): + # Count same-name (lk, rk) key-column pairs. + orig_left_on_list = ( + [orig_left_on] + if is_scalar(orig_left_on) + else list(orig_left_on) + ) + orig_right_on_list = ( + [orig_right_on] + if is_scalar(orig_right_on) + else list(orig_right_on) + ) + k = sum( + lk == rk + for lk, rk in zip( + orig_left_on_list, orig_right_on_list, strict=True + ) + ) + elif ( + not orig_left_on + and not orig_right_on + and not orig_left_index + and not orig_right_index + ): + # Auto-detect: intersection of column names are the keys. + k = len(set(self._column_names) & set(right._column_names)) + else: + k = 0 + # Only reorder when there are both right non-key cols and self + # non-key cols to swap; use integer positions to avoid NaN issues. + if k < N_r < n_result: + new_indices = ( + list(range(k)) + + list(range(N_r, n_result)) + + list(range(k, N_r)) + ) + result = result.iloc[:, new_indices] + + return result + @_performance_tracking def join( self, @@ -4656,6 +4821,17 @@ def join( df.index.name = ( None if self.index.name != other.index.name else self.index.name ) + + # Preserve a CategoricalIndex columns axis when both inputs share the + # same categorical dtype on their column labels (matches pandas). + self_pd_cols = self._data.to_pandas_index + other_pd_cols = other._data.to_pandas_index + if ( + isinstance(self_pd_cols, pd.CategoricalIndex) + and isinstance(other_pd_cols, pd.CategoricalIndex) + and self_pd_cols.dtype == other_pd_cols.dtype + ): + df.columns = self_pd_cols.append(other_pd_cols) return df @_performance_tracking @@ -4679,7 +4855,7 @@ def groupby( level=None, as_index=True, sort=no_default, - group_keys=False, + group_keys=no_default, observed=True, dropna=True, ): @@ -4940,7 +5116,7 @@ def apply( ... }) >>> df.apply(f, axis=1) 0 1.5 - 1 + 1 NaN 2 6.14 dtype: float64 @@ -4979,9 +5155,9 @@ def apply( ... 'e': [7, 1, 6] ... }) >>> df.apply(f, axis=1) - 0 - 1 4.8 - 2 5.0 + 0 NaN + 1 4.8 + 2 5.0 dtype: float64 UDFs manipulating string data are allowed, as long as @@ -5039,39 +5215,6 @@ def apply( return self._apply(func, DataFrameApplyKernel, *args, **kwargs) - def applymap( - self, - func: Callable[[Any], Any], - na_action: str | None = None, - **kwargs, - ) -> DataFrame: - """ - Apply a function to a Dataframe elementwise. - - This method applies a function that accepts and returns a scalar - to every element of a DataFrame. - - Parameters - ---------- - func : callable - Python function, returns a single value from a single value. - na_action : {None, 'ignore'}, default None - If 'ignore', propagate NaN values, without passing them to func. - - Returns - ------- - DataFrame - Transformed DataFrame. - """ - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, "Need to drop after pandas-3.0 support is added." - warnings.warn( - "DataFrame.applymap has been deprecated. Use DataFrame.map " - "instead.", - FutureWarning, - ) - return self.map(func=func, na_action=na_action, **kwargs) - def map( self, func: Callable[[Any], Any], @@ -5099,7 +5242,7 @@ def map( if kwargs: raise NotImplementedError( - "DataFrame.applymap does not yet support **kwargs." + "DataFrame.map does not yet support **kwargs." ) if na_action not in {"ignore", None}: @@ -5298,10 +5441,10 @@ def info( # Column Non-Null Count Dtype --- ------ -------------- ----- 0 int_col 5 non-null int64 - 1 text_col 5 non-null object + 1 text_col 5 non-null str 2 float_col 5 non-null float64 - dtypes: float64(1), int64(1), object(1) - memory usage: 130.0+ bytes + dtypes: float64(1), int64(1), str(1) + memory usage: 130.0 bytes Prints a summary of columns count and its dtypes but not per column information: @@ -5310,8 +5453,8 @@ def info( RangeIndex: 5 entries, 0 to 4 Columns: 3 entries, int_col to float_col - dtypes: float64(1), int64(1), object(1) - memory usage: 130.0+ bytes + dtypes: float64(1), int64(1), str(1) + memory usage: 130.0 bytes Pipe output of DataFrame.info to a buffer instead of sys.stdout and print buffer contents: @@ -5326,10 +5469,10 @@ def info( # Column Non-Null Count Dtype --- ------ -------------- ----- 0 int_col 5 non-null int64 - 1 text_col 5 non-null object + 1 text_col 5 non-null str 2 float_col 5 non-null float64 - dtypes: float64(1), int64(1), object(1) - memory usage: 130.0+ bytes + dtypes: float64(1), int64(1), str(1) + memory usage: 130.0 bytes The `memory_usage` parameter allows deep introspection mode, specially useful for big DataFrames and fine-tune memory optimization: @@ -5348,10 +5491,10 @@ def info( Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- - 0 column_1 1000000 non-null object - 1 column_2 1000000 non-null object - 2 column_3 1000000 non-null object - dtypes: object(3) + 0 column_1 1000000 non-null str + 1 column_2 1000000 non-null str + 2 column_3 1000000 non-null str + dtypes: str(3) memory usage: 14.3 MB """ if buf is None: @@ -5566,17 +5709,14 @@ def describe( None, ) - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - res = cudf.concat( - [ - series.reindex(names, copy=False) - for series in describe_series_list - ], - axis=1, - sort=False, - ) - return res + return cudf.concat( + [ + series.reindex(names, copy=False) + for series in describe_series_list + ], + axis=1, + sort=False, + ) @_performance_tracking def to_pandas( @@ -5618,7 +5758,7 @@ def to_pandas( 1 1 2 2 2 0 >>> type(pdf) - + ``nullable=True`` converts the result to pandas nullable types: @@ -5665,6 +5805,9 @@ def to_pandas( out_df = pd.DataFrame(out_data, index=out_index) out_df.columns = self._data.to_pandas_index out_df.attrs = deepcopy(self.attrs) + out_df.flags.allows_duplicate_labels = ( + self._flags.allows_duplicate_labels + ) return out_df @@ -5706,6 +5849,10 @@ def from_arrow(cls, table: pa.Table) -> Self: it does not support automatically setting index column(s). """ out = super().from_arrow(table) + if table.num_columns == 0: + # Match pyarrow's to_pandas: empty tables produce object dtype + # columns, not the cudf default string dtype. + out._data.label_dtype = np.dtype("O") if isinstance(table.schema.pandas_metadata, dict): # Maybe set .index or .columns attributes pd_meta = table.schema.pandas_metadata @@ -5937,20 +6084,22 @@ def from_records( ) num_cols = len(data[0]) - - if columns is None and data.dtype.names is None: - names = range(num_cols) - - elif data.dtype.names is not None: - names = data.dtype.names - - else: - if len(columns) != num_cols: + if columns is not None: + if (names := data.dtype.names) is not None: + if diff := set(columns) - set(names): + raise ValueError( + f"Found columns that don't exist in data: {diff}" + ) + if len(columns) > num_cols: raise ValueError( f"columns length expected {num_cols} " f"but found {len(columns)}" ) names = columns + elif data.dtype.names is None: + names = range(num_cols) + else: + names = data.dtype.names if data.ndim == 2: ca_data = { @@ -5975,7 +6124,7 @@ def from_records( df = cls._from_data( ColumnAccessor( - data=ca_data, # type: ignore[arg-type] + data=ca_data, multiindex=isinstance( columns, (pd.MultiIndex, cudf.MultiIndex) ), @@ -6093,36 +6242,6 @@ def _from_arrays( index=index, ) - @_performance_tracking - def interpolate( - self, - method="linear", - axis=0, - limit=None, - inplace: bool = False, - limit_direction=None, - limit_area=None, - downcast=None, - **kwargs, - ): - if all(dt == CUDF_STRING_DTYPE for _, dt in self._dtypes): - raise TypeError( - "Cannot interpolate with all object-dtype " - "columns in the DataFrame. Try setting at " - "least one column to a numeric dtype." - ) - - return super().interpolate( - method=method, - axis=axis, - limit=limit, - inplace=inplace, - limit_direction=limit_direction, - limit_area=limit_area, - downcast=downcast, - **kwargs, - ) - @_performance_tracking def quantile( self, @@ -6277,7 +6396,15 @@ def quantile( if len(res) == 0: res = column_empty(row_count=len(qs), dtype=ser.dtype) result[k] = res - result = DataFrame._from_data(result, attrs=self.attrs) + result_ca = ColumnAccessor( + result, + multiindex=data_df._data.multiindex, + level_names=data_df._data.level_names, + rangeindex=data_df._data.rangeindex, + label_dtype=data_df._data.label_dtype, + verify=False, + ) + result = DataFrame._from_data(result_ca, attrs=self.attrs) if q_is_number and numeric_only: result = result.fillna(np.nan).iloc[0] @@ -6399,8 +6526,8 @@ def make_false_column_like_self(): else: # These checks must happen after the conversions above # since numpy can't handle categorical dtypes. - self_is_str = self_col.dtype == CUDF_STRING_DTYPE - other_is_str = other_col.dtype == CUDF_STRING_DTYPE + self_is_str = is_dtype_obj_string(self_col.dtype) + other_is_str = is_dtype_obj_string(other_col.dtype) if self_is_str != other_is_str: # Strings can't compare to anything else. @@ -6455,11 +6582,12 @@ def _prepare_for_rowwise_op(self, method, skipna, numeric_only): dtypes = [dtype for _, dtype in filtered._dtypes] is_pure_dt = all(dt.kind == "M" for dt in dtypes) - common_dtype = find_common_type(dtypes) + common_dtype = find_common_type(dtypes) if dtypes else None if ( not numeric_only - and common_dtype == CUDF_STRING_DTYPE - and any(dtype != CUDF_STRING_DTYPE for dtype in dtypes) + and common_dtype is not None + and is_dtype_obj_string(common_dtype) + and any(not is_dtype_obj_string(dtype) for dtype in dtypes) ): raise TypeError( f"Cannot perform row-wise {method} across mixed-dtype columns," @@ -6539,33 +6667,17 @@ def count(self, axis: Axis = 0, numeric_only: bool = False) -> Series: def _reduce( self, op: str, - axis=None, + axis: Axis | None = 0, numeric_only: bool = False, **kwargs, ) -> ScalarLike: source = self if axis is None: - assert PANDAS_LT_300, "Replace if/else with just axis=2" - # TODO(pandas3.0): Remove if/else for just axis = 2 - if op in {"sum", "product", "std", "var"}: - # pandas only raises FutureWarning for these ops - # though it applies for all reductions - warnings.warn( - f"In a future version, {type(self).__name__}" - f".{op}(axis=None) will return a scalar {op} over " - "the entire DataFrame. To retain the old behavior, " - f"use '{type(self).__name__}.{op}(axis=0)' or " - f"just '{type(self)}.{op}()'", - FutureWarning, - ) - axis = 0 - else: - axis = 2 - elif axis is no_default: - axis = 0 + # Both axis + reduction_axis = 2 else: - axis = source._get_axis_from_axis_arg(axis) + reduction_axis = source._get_axis_from_axis_arg(axis) if numeric_only: numeric_cols = ( @@ -6577,7 +6689,7 @@ def _reduce( if source.empty: res = Series( index=self._data.to_pandas_index[:0] - if axis == 0 + if reduction_axis == 0 else source.index, dtype="float64", ) @@ -6588,13 +6700,13 @@ def _apply_reduction(col, op, kwargs): return getattr(col, op)(**kwargs) if ( - axis == 2 + reduction_axis == 2 and op in {"kurtosis", "skew"} and self._num_rows < 4 and self._num_columns > 1 ): return getattr(concat_columns(source._columns), op)(**kwargs) - elif axis == 1: + elif reduction_axis == 1: return source._apply_cupy_method_axis_1(op, **kwargs) else: axis_0_results = [] @@ -6614,18 +6726,21 @@ def _apply_reduction(col, op, kwargs): ) from err else: raise - if axis == 2: + if reduction_axis == 2: return _apply_reduction( as_column(axis_0_results, nan_as_null=False), op, kwargs ) else: source_dtypes = [dtype for _, dtype in source._dtypes] - # TODO: What happens if common_dtype is None? - common_dtype = find_common_type(source_dtypes) + common_dtype = ( + find_common_type(source_dtypes) if source_dtypes else None + ) if ( - common_dtype == CUDF_STRING_DTYPE + common_dtype is not None + and is_dtype_obj_string(common_dtype) and any( - dtype != CUDF_STRING_DTYPE for dtype in source_dtypes + not is_dtype_obj_string(dtype) + for dtype in source_dtypes ) or common_dtype is not None and common_dtype.kind != "b" @@ -6651,9 +6766,26 @@ def _apply_reduction(col, op, kwargs): # For max/min operations, preserve the original dtype since # Python scalars (int, float) would otherwise widen to int64/float64 result_dtype = common_dtype if op in {"max", "min"} else None + # For duration/timestamp reductions, preserve the kind so + # NaT scalars don't default to datetime64[s] + if ( + result_dtype is None + and common_dtype is not None + and ( + ( + common_dtype.kind == "m" + and op in {"sum", "mean", "median", "std"} + ) + or ( + common_dtype.kind == "M" + and op in {"mean", "median"} + ) + ) + ): + result_dtype = common_dtype res = as_column( axis_0_results, - nan_as_null=not cudf.get_option("mode.pandas_compatible"), + nan_as_null=False, dtype=result_dtype, ) @@ -6675,6 +6807,12 @@ def _apply_reduction(col, op, kwargs): and common_dtype.kind == "u" ): res_dtype = np.dtype("uint64") + elif ( + common_dtype is not None + and common_dtype.kind == "b" + and isinstance(common_dtype, pd.ArrowDtype) + ): + res_dtype = np.dtype("uint64") else: res_dtype = np.dtype("int64") elif op == "sum_of_squares": @@ -6701,6 +6839,19 @@ def _apply_reduction(col, op, kwargs): res_dtype = np.dtype("float64") elif op in {"max", "min"}: res_dtype = common_dtype + elif ( + common_dtype is not None + and common_dtype.kind == "m" + and op + in {"sum", "mean", "median", "std", "max", "min"} + ): + res_dtype = common_dtype + elif ( + common_dtype is not None + and common_dtype.kind == "M" + and op in {"mean", "median", "max", "min"} + ): + res_dtype = common_dtype if op in {"any", "all"}: res_dtype = np.dtype(np.bool_) res = res.nans_to_nulls() @@ -6772,9 +6923,9 @@ def mode(self, axis=0, numeric_only=False, dropna=True): >>> df species legs wings 0 bird 2 2.0 - 1 mammal 4 + 1 mammal 4 NaN 2 arthropod 8 0.0 - 3 bird 2 + 3 bird 2 NaN By default, missing values are not considered, and the mode of wings are both 0 and 2. The second row of species and legs contains ``NA``, @@ -6783,14 +6934,14 @@ def mode(self, axis=0, numeric_only=False, dropna=True): >>> df.mode() species legs wings 0 bird 2 0.0 - 1 None 2.0 + 1 NaN 2.0 Setting ``dropna=False``, ``NA`` values are considered and they can be the mode (like for wings). >>> df.mode(dropna=False) species legs wings - 0 bird 2 + 0 bird 2 NaN Setting ``numeric_only=True``, only the mode of numeric columns is computed, and columns of other types are ignored. @@ -6822,12 +6973,7 @@ def mode(self, axis=0, numeric_only=False, dropna=True): if len(mode_results) == 0: return DataFrame() - with warnings.catch_warnings(): - assert PANDAS_LT_300, ( - "Need to drop after pandas-3.0 support is added." - ) - warnings.simplefilter("ignore", FutureWarning) - df = cudf.concat(mode_results, axis=1) + df = cudf.concat(mode_results, axis=1) if isinstance(df, Series): df = df.to_frame() @@ -6839,7 +6985,7 @@ def mode(self, axis=0, numeric_only=False, dropna=True): @_performance_tracking def all( self, - axis: Axis = 0, + axis: Axis | None = 0, bool_only: bool = False, skipna: bool = True, **kwargs, @@ -7161,7 +7307,12 @@ def cudf_dtype_from_pydata_dtype(dtype): for label, dtype in self._dtypes if cudf_dtype_from_pydata_dtype(dtype) in inclusion ] - return self.loc[:, to_select] + result = self.loc[:, to_select] + if not to_select and self._data.rangeindex: + # Preserve RangeIndex columns through an empty selection so that + # downstream operations match pandas' column metadata. + result._data.rangeindex = True + return result @ioutils.doc_to_parquet() def to_parquet( @@ -7295,7 +7446,10 @@ def to_orc( @_performance_tracking def stack( - self, level=-1, dropna=no_default, future_stack=False + self, + level=-1, + dropna: bool | NoDefault = no_default, + future_stack: bool = True, ) -> DataFrame | Series: """Stack the prescribed level(s) from columns to index @@ -7356,10 +7510,10 @@ def stack( cat 0 1 dog 2 3 >>> df_single_level_cols.stack() - cat height 1 - weight 0 - dog height 3 - weight 2 + cat weight 0 + height 1 + dog weight 2 + height 3 dtype: int64 **Multi level columns: simple case** @@ -7405,10 +7559,10 @@ def stack( dog 3.0 4.0 >>> df_multi_level_cols2.stack() weight height - cat kg 1.0 - m 2.0 - dog kg 3.0 - m 4.0 + cat kg 1.0 NaN + m NaN 2.0 + dog kg 3.0 NaN + m NaN 4.0 **Prescribing the level(s) to be stacked** @@ -7416,16 +7570,16 @@ def stack( >>> df_multi_level_cols2.stack(0) kg m - cat height 2.0 - weight 1.0 - dog height 4.0 - weight 3.0 + cat weight 1.0 NaN + height NaN 2.0 + dog weight 3.0 NaN + height NaN 4.0 >>> df_multi_level_cols2.stack([0, 1]) - cat height m 2.0 - weight kg 1.0 - dog height m 4.0 - weight kg 3.0 + cat weight kg 1.0 + height m 2.0 + dog weight kg 3.0 + height m 4.0 dtype: float64 """ @@ -7438,14 +7592,13 @@ def stack( "version of cudf." ) else: - if dropna is not no_default or self._data.nlevels > 1: - warnings.warn( - "The previous implementation of stack is deprecated and " - "will be removed in a future version of cudf. Specify " - "future_stack=True to adopt the new implementation and " - "silence this warning.", - FutureWarning, - ) + warnings.warn( + "The previous implementation of stack is deprecated and " + "will be removed in a future version of cudf. Do not specify the " + "future_stack argument to adopt the new implementation and " + "silence this warning.", + FutureWarning, + ) if dropna is no_default: dropna = True @@ -7821,7 +7974,7 @@ def keys(self): 1 2 b 2 3 c >>> df.keys() - Index(['one', 'five'], dtype='object') + Index(['one', 'five'], dtype='str') >>> df = cudf.DataFrame(columns=[0, 1, 2, 3]) >>> df Empty DataFrame @@ -7943,88 +8096,6 @@ def explode(self, column, ignore_index=False): """ return super()._explode(column, ignore_index) - def pct_change( - self, - periods=1, - fill_method=no_default, - limit=no_default, - freq=None, - **kwargs, - ): - """ - Calculates the percent change between sequential elements - in the DataFrame. - - Parameters - ---------- - periods : int, default 1 - Periods to shift for forming percent change. - fill_method : str, default 'ffill' - How to handle NAs before computing percent changes. - - .. deprecated:: 24.04 - All options of `fill_method` are deprecated - except `fill_method=None`. - limit : int, optional - The number of consecutive NAs to fill before stopping. - Not yet implemented. - - .. deprecated:: 24.04 - `limit` is deprecated. - freq : str, optional - Increment to use from time series API. - Not yet implemented. - **kwargs - Additional keyword arguments are passed into - `DataFrame.shift`. - - Returns - ------- - DataFrame - """ - if limit is not no_default: - raise NotImplementedError("limit parameter not supported yet.") - if freq is not None: - raise NotImplementedError("freq parameter not supported yet.") - elif fill_method not in { - no_default, - None, - "ffill", - "pad", - "bfill", - "backfill", - }: - raise ValueError( - "fill_method must be one of None, 'ffill', 'pad', " - "'bfill', or 'backfill'." - ) - - if fill_method not in (no_default, None) or limit is not no_default: - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, ( - "Need to drop after pandas-3.0 support is added." - ) - warnings.warn( - "The 'fill_method' and 'limit' keywords in " - f"{type(self).__name__}.pct_change are deprecated and will be " - "removed in a future version. Either fill in any non-leading " - "NA values prior to calling pct_change or specify " - "'fill_method=None' to not fill NA values.", - FutureWarning, - ) - if fill_method is no_default: - fill_method = "ffill" - if limit is no_default: - limit = None - - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - data = self.fillna(method=fill_method, limit=limit) - - return data.diff(periods=periods) / data.shift( - periods=periods, freq=freq, **kwargs - ) - def nunique(self, axis=0, dropna: bool = True) -> Series: """ Count number of distinct elements in specified axis. @@ -8129,7 +8200,7 @@ def interleave_columns(self): 3 B2 4 A3 5 B3 - dtype: object + dtype: str Returns ------- @@ -8665,7 +8736,7 @@ def from_pandas(obj, nan_as_null=no_default): >>> type(gdf) >>> type(pdf) - + Converting a Pandas Series to cuDF Series: @@ -8675,18 +8746,18 @@ def from_pandas(obj, nan_as_null=no_default): 1 b 2 c 3 d - Name: apple, dtype: object + Name: apple, dtype: str >>> gsr = cudf.from_pandas(psr) >>> gsr 0 a 1 b 2 c 3 d - Name: apple, dtype: object + Name: apple, dtype: str >>> type(gsr) >>> type(psr) - + Converting a Pandas Index to cuDF Index: @@ -8699,7 +8770,7 @@ def from_pandas(obj, nan_as_null=no_default): >>> type(gidx) >>> type(pidx) - + Converting a Pandas MultiIndex to cuDF MultiIndex: @@ -8726,7 +8797,7 @@ def from_pandas(obj, nan_as_null=no_default): >>> type(gmidx) >>> type(pmidx) - + """ if nan_as_null is no_default: nan_as_null = False if get_option("mode.pandas_compatible") else None diff --git a/python/cudf/cudf/core/dtype/validators.py b/python/cudf/cudf/core/dtype/validators.py index 37210dff311d..44cde19d7775 100644 --- a/python/cudf/cudf/core/dtype/validators.py +++ b/python/cudf/cudf/core/dtype/validators.py @@ -9,7 +9,6 @@ import pyarrow as pa import cudf -from cudf.utils.dtypes import CUDF_STRING_DTYPE if TYPE_CHECKING: from cudf._typing import DtypeObj @@ -29,13 +28,14 @@ def is_dtype_obj_string(obj: DtypeObj) -> bool: Whether or not the dtype object is a cuDF string type. """ return ( - obj == CUDF_STRING_DTYPE + obj == np.dtype("object") or isinstance(obj, pd.StringDtype) or ( isinstance(obj, pd.ArrowDtype) and ( pa.types.is_string(obj.pyarrow_dtype) or pa.types.is_large_string(obj.pyarrow_dtype) + or pa.types.is_null(obj.pyarrow_dtype) ) ) ) diff --git a/python/cudf/cudf/core/dtypes.py b/python/cudf/cudf/core/dtypes.py index 10506c3afffe..ef3c049aeeb3 100644 --- a/python/cudf/cudf/core/dtypes.py +++ b/python/cudf/cudf/core/dtypes.py @@ -20,7 +20,6 @@ import pylibcudf as plc import cudf -from cudf.core._compat import PANDAS_GE_210, PANDAS_LT_300 from cudf.core.abc import Serializable from cudf.core.dtype.validators import ( is_dtype_obj_datetime_tz, @@ -32,18 +31,13 @@ ) from cudf.utils.docutils import doc_apply from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, + DEFAULT_STRING_DTYPE, SUPPORTED_NUMPY_TO_PYLIBCUDF_TYPES, cudf_dtype_from_pa_type, cudf_dtype_to_pa_type, min_unsigned_type, ) -if PANDAS_GE_210: - PANDAS_NUMPY_DTYPE = pd.core.dtypes.dtypes.NumpyEADtype -else: - PANDAS_NUMPY_DTYPE = pd.core.dtypes.dtypes.PandasDtype - if TYPE_CHECKING: from collections.abc import Callable, Mapping from typing import Self @@ -54,6 +48,9 @@ from cudf.core.index import Index +PANDAS_NUMPY_DTYPE = pd.core.dtypes.dtypes.NumpyEADtype + + def dtype(arbitrary: Any) -> DtypeObj: """ Return the cuDF-supported dtype corresponding to `arbitrary`. @@ -80,18 +77,21 @@ def dtype(arbitrary: Any) -> DtypeObj: "but got the class instead. Try instantiating 'dtype'." ) raise TypeError(msg) + + if arbitrary is str or (isinstance(arbitrary, str) and arbitrary == "str"): + # "str" -> pd.StringDtype + # str -> pd.StringDtype + return pd.api.types.pandas_dtype(arbitrary) # noqa: TID251 + # next, try interpreting arbitrary as a NumPy dtype that we support: try: np_dtype = np.dtype(arbitrary) except TypeError: pass else: - if np_dtype.kind == "O": - return CUDF_STRING_DTYPE - elif np_dtype.kind == "U": + if np_dtype.kind == "U": # Like pandas, allow users to pass this object to signal "string" - # but the dtype metadata must result in np.dtype(object) - # which is handled in Column.create + # but the dtype metadata should result in np.dtype(object) return np_dtype elif np_dtype not in SUPPORTED_NUMPY_TO_PYLIBCUDF_TYPES: raise TypeError(f"Unsupported type {np_dtype}") @@ -198,7 +198,7 @@ class CategoricalDtype(_BaseDtype): 2 a 3 dtype: category - Categories (2, object): ['b' < 'a'] + Categories (2, str): ['b' < 'a'] """ def __init__(self, categories=None, ordered: bool | None = False) -> None: @@ -217,10 +217,10 @@ def categories(self) -> Index: >>> import cudf >>> dtype = cudf.CategoricalDtype(categories=['b', 'a'], ordered=True) >>> dtype.categories - Index(['b', 'a'], dtype='object') + Index(['b', 'a'], dtype='str') """ if self._categories is None: - col = cudf.core.column.column_empty(0, dtype=CUDF_STRING_DTYPE) + col = cudf.core.column.column_empty(0, dtype=DEFAULT_STRING_DTYPE) else: col = self._categories return cudf.Index._from_column(col) @@ -258,9 +258,9 @@ def to_pandas(self) -> pd.CategoricalDtype: >>> import cudf >>> dtype = cudf.CategoricalDtype(categories=['b', 'a'], ordered=True) >>> dtype - CategoricalDtype(categories=['b', 'a'], ordered=True, categories_dtype=object) + CategoricalDtype(categories=['b', 'a'], ordered=True, categories_dtype=str) >>> dtype.to_pandas() - CategoricalDtype(categories=['b', 'a'], ordered=True, categories_dtype=object) + CategoricalDtype(categories=['b', 'a'], ordered=True, categories_dtype=str) """ if self._categories is None: categories = None @@ -281,7 +281,7 @@ def _init_categories(self, categories: Any) -> ColumnBase | None: getattr(categories, "dtype", None), (IntervalDtype, pd.IntervalDtype), ): - dtype = CUDF_STRING_DTYPE + dtype = getattr(categories, "dtype", DEFAULT_STRING_DTYPE) else: dtype = None @@ -479,9 +479,10 @@ def from_arrow(cls, typ: pa.ListType) -> Self: ListDtype(int64) """ # PyArrow infers empty lists as list, but libcudf uses int8 as - # the default for empty lists. Use int8 to match the plc structure. + # the default for empty lists. cudf uses `np.dtype(object)` + # to match pandas. if pa.types.is_null(typ.value_type): - return cls(np.dtype("int8")) + return cls(np.dtype("object")) return cls(cudf_dtype_from_pa_type(typ.value_type)) def to_arrow(self) -> pa.ListType: @@ -654,7 +655,7 @@ def from_arrow(cls, typ: pa.StructType) -> Self: >>> pa_struct_type StructType(struct) >>> cudf.StructDtype.from_arrow(pa_struct_type) - StructDtype({'x': dtype('int32'), 'y': dtype('O')}) + StructDtype({'x': dtype('int32'), 'y': }) """ return cls( {field.name: cudf_dtype_from_pa_type(field.type) for field in typ} @@ -1222,8 +1223,6 @@ def is_categorical_dtype(obj): bool Whether or not the array-like or dtype is of a categorical dtype. """ - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, "Need to drop after pandas-3.0 support is added." warnings.warn( "is_categorical_dtype is deprecated and will be removed in a future " "version. Use isinstance(dtype, cudf.CategoricalDtype) instead", @@ -1319,7 +1318,10 @@ def _is_interval_dtype(obj): ), ) or obj is IntervalDtype - or (isinstance(obj, cudf.Index) and obj._is_interval()) + or ( + isinstance(obj, cudf.Index) + and isinstance(obj.dtype, IntervalDtype) + ) or (isinstance(obj, str) and obj == IntervalDtype.name) or ( isinstance( diff --git a/python/cudf/cudf/core/frame.py b/python/cudf/cudf/core/frame.py index 54aedcb30670..c248c4f7562c 100644 --- a/python/cudf/cudf/core/frame.py +++ b/python/cudf/cudf/core/frame.py @@ -19,7 +19,6 @@ import cudf from cudf.api.extensions import no_default from cudf.api.types import is_dtype_equal, is_scalar, is_string_dtype -from cudf.core._compat import PANDAS_LT_300 from cudf.core._internals import copying, sorting from cudf.core.abc import Serializable from cudf.core.column import ( @@ -30,7 +29,10 @@ serialize_columns, ) from cudf.core.column_accessor import ColumnAccessor -from cudf.core.dtype.validators import is_dtype_obj_numeric +from cudf.core.dtype.validators import ( + is_dtype_obj_numeric, + is_dtype_obj_string, +) from cudf.core.mixins import BinaryOperand, Scannable from cudf.utils.dtypes import ( dtype_from_pylibcudf_column, @@ -115,7 +117,13 @@ def serialize(self): ) header["dtype-is-cudf-serialized"] = True except AttributeError: - header["column_label_dtype"] = label_dtype.str + if isinstance(label_dtype, pd.StringDtype): + header["column_label_dtype"] = ( + label_dtype.storage, + label_dtype.na_value, + ) + else: + header["column_label_dtype"] = label_dtype.str header["columns"], column_frames = serialize_columns(self._columns) column_names, column_names_numpy_type = ( @@ -153,10 +161,12 @@ def deserialize(cls, header, frames): header, frames[:count] ) frames = frames[count:] + elif isinstance(dtype_header, tuple): + kwargs["label_dtype"] = pd.StringDtype(*dtype_header) + elif isinstance(dtype_header, str): + kwargs["label_dtype"] = np.dtype(dtype_header) else: - kwargs["label_dtype"] = ( - np.dtype(dtype_header) if dtype_header is not None else None - ) + kwargs["label_dtype"] = dtype_header columns = deserialize_columns(header["columns"], frames) for metadata in [ @@ -480,7 +490,7 @@ def astype( dtype.get(col_name, col.dtype) == col.dtype for col_name, col in self._column_labels_and_values ): - return self + return self.copy(deep=False) casted = ( col.astype(dtype.get(col_name, col.dtype), copy=copy) for col_name, col in self._column_labels_and_values @@ -733,12 +743,18 @@ def to_array( elif to_dtype.kind in "ui": to_dtype = np.dtype("float64") - if is_pandas_nullable_extension_dtype(to_dtype): + if is_pandas_nullable_extension_dtype( + to_dtype + ) or is_dtype_obj_string(to_dtype): to_dtype = getattr(to_dtype, "numpy_dtype", to_dtype) - if getattr(to_dtype, "kind", None) == "U": + if getattr(to_dtype, "kind", None) in {"U", "O"}: to_dtype = np.dtype(object) if isinstance(to_dtype, cudf.CategoricalDtype): to_dtype = to_dtype.categories.dtype + # In pandas 3.0+ string categories have StringDtype, which is + # not a numpy dtype. Map it to object so numpy can hold it. + if is_dtype_obj_string(to_dtype): + to_dtype = np.dtype(object) if not isinstance(to_dtype, np.dtype): raise NotImplementedError( @@ -994,13 +1010,15 @@ def where(self, cond, other=None, inplace: bool = False) -> Self | None: raise NotImplementedError @_performance_tracking - def fillna( + def _fillna( self, value: None | ScalarLike | Series = None, - method: Literal["ffill", "bfill", "pad", "backfill", None] = None, + *, + method: None | plc.replace.ReplacePolicy = None, axis: Axis | None = None, inplace: bool = False, limit: int | None = None, + limit_area: Literal["inside", "outside", None] = None, ) -> Self | None: """Fill null values with ``value`` or specified ``method``. @@ -1101,32 +1119,14 @@ def fillna( """ if limit is not None: raise NotImplementedError("The limit keyword is not supported") + if limit_area is not None: + raise NotImplementedError("limit_area is currently not supported.") if axis: raise NotImplementedError("The axis keyword is not supported") if value is not None and method is not None: raise ValueError("Cannot specify both 'value' and 'method'.") - if method: - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, ( - "Need to drop after pandas-3.0 support is added." - ) - warnings.warn( - f"{type(self).__name__}.fillna with 'method' is " - "deprecated and will raise in a future version. " - "Use obj.ffill() or obj.bfill() instead.", - FutureWarning, - ) - if method not in {"ffill", "bfill", "pad", "backfill"}: - raise NotImplementedError( - f"Fill method {method} is not supported" - ) - if method == "pad": - method = "ffill" - elif method == "backfill": - method = "bfill" - if is_scalar(value): value = {name: value for name in self._column_names} elif not isinstance(value, (Mapping, cudf.Series)): @@ -1150,9 +1150,11 @@ def fillna( inplace=inplace, ) - def _pandas_repr_compatible(self) -> Self: + def _pandas_repr_compatible(self, nan_rep=None) -> Self: """Return Self but with columns prepared for a pandas-like repr.""" - columns = (col._prep_pandas_compat_repr() for col in self._columns) + columns = ( + col._prep_pandas_compat_repr(nan_rep) for col in self._columns + ) return self._from_data_like_self( self._data._from_columns_like_self(columns, verify=False) ) @@ -1261,9 +1263,9 @@ def isna(self) -> Self: ... 'toy': [None, 'Batmobile', 'Joker']}) >>> df age born name toy - 0 5 NaT Alfred None - 1 6 1939-05-27 00:00:00.000000000 Batman Batmobile - 2 1940-04-25 00:00:00.000000000 Joker + 0 5 NaT Alfred NaN + 1 6 1939-05-27 00:00:00.000000 Batman Batmobile + 2 1940-04-25 00:00:00.000000 Joker >>> df.isna() age born name toy 0 False True False True @@ -1276,7 +1278,7 @@ def isna(self) -> Self: >>> ser 0 5.0 1 6.0 - 2 + 2 NaN 3 Inf 4 -Inf dtype: float64 @@ -1292,7 +1294,7 @@ def isna(self) -> Self: >>> idx = cudf.Index([1, 2, None, np.nan, 0.32, np.inf]) >>> idx - Index([1.0, 2.0, , , 0.32, Inf], dtype='float64') + Index([1.0, 2.0, NaN, NaN, 0.32, Inf], dtype='float64') >>> idx.isna() array([False, False, True, True, False, False]) """ @@ -1342,9 +1344,9 @@ def notna(self) -> Self: ... 'toy': [None, 'Batmobile', 'Joker']}) >>> df age born name toy - 0 5 NaT Alfred None - 1 6 1939-05-27 00:00:00.000000000 Batman Batmobile - 2 1940-04-25 00:00:00.000000000 Joker + 0 5 NaT Alfred NaN + 1 6 1939-05-27 00:00:00.000000 Batman Batmobile + 2 1940-04-25 00:00:00.000000 Joker >>> df.notna() age born name toy 0 True False True False @@ -1357,7 +1359,7 @@ def notna(self) -> Self: >>> ser 0 5.0 1 6.0 - 2 + 2 NaN 3 Inf 4 -Inf dtype: float64 @@ -1373,7 +1375,7 @@ def notna(self) -> Self: >>> idx = cudf.Index([1, 2, None, np.nan, 0.32, np.inf]) >>> idx - Index([1.0, 2.0, , , 0.32, Inf], dtype='float64') + Index([1.0, 2.0, NaN, NaN, 0.32, Inf], dtype='float64') >>> idx.notna() array([ True, True, False, False, True, True]) """ @@ -1732,25 +1734,32 @@ def _colwise_binop( right_is_column = isinstance(right_column, ColumnBase) if fill_value is not None: if left_is_column and right_is_column: - # If both columns are nullable, pandas semantics dictate - # that nulls that are present in both left_column and - # right_column are not filled. - if left_column.nullable and right_column.nullable: + # ``has_nulls(include_nan=True)`` covers both validity-mask + # nulls and NaN-as-null floats (the latter is how columns + # are represented in ``mode.pandas_compatible``). + left_has_nulls = left_column.has_nulls(include_nan=True) + right_has_nulls = right_column.has_nulls(include_nan=True) + if left_has_nulls and right_has_nulls: + # Pandas semantics: nulls that are present in both + # left and right at the same position remain null in + # the output even when ``fill_value`` is given. + output_validity = ( + left_column.notnull() | right_column.notnull() + ) output_mask, output_null_count = ( - left_column._get_mask_as_column() - | right_column._get_mask_as_column() - ).as_mask() + output_validity.as_mask() + ) left_column = left_column.fillna(fill_value) right_column = right_column.fillna(fill_value) - elif left_column.nullable: + elif left_has_nulls: left_column = left_column.fillna(fill_value) - elif right_column.nullable: + elif right_has_nulls: right_column = right_column.fillna(fill_value) elif left_is_column: - if left_column.nullable: + if left_column.has_nulls(include_nan=True): left_column = left_column.fillna(fill_value) elif right_is_column: - if right_column.nullable: + if right_column.has_nulls(include_nan=True): right_column = right_column.fillna(fill_value) else: assert False, "At least one operand must be a column." @@ -1799,6 +1808,8 @@ def _apply_cupy_ufunc_to_operands( # dispatch those (or any other) functions that we could implement # without cupy. + from cudf.utils.dtypes import get_dtype_of_same_kind + with access_columns( *( col @@ -1813,7 +1824,14 @@ def _apply_cupy_ufunc_to_operands( data: list[dict[Any, ColumnBase]] = [{} for _ in range(ufunc.nout)] for name, (left, right, _, _) in operands.items(): cupy_inputs = [] + source_dtype = None for inp in (left, right) if ufunc.nin == 2 else (left,): + if ( + isinstance(inp, ColumnBase) + and source_dtype is None + and is_pandas_nullable_extension_dtype(inp.dtype) + ): + source_dtype = inp.dtype if isinstance(inp, ColumnBase) and inp.has_nulls(): new_mask = inp._get_mask_as_column() mask = new_mask if mask is None else mask & new_mask @@ -1833,9 +1851,14 @@ def _apply_cupy_ufunc_to_operands( else: mask_buff, null_count = mask.as_mask() for i, out in enumerate(cp_output): - data[i][name] = as_column(out).set_mask( - mask_buff, null_count + target_dtype = ( + get_dtype_of_same_kind(source_dtype, out.dtype) + if source_dtype is not None + else None ) + data[i][name] = as_column( + out, dtype=target_dtype + ).set_mask(mask_buff, null_count) return data # Unary logical operators @@ -1871,7 +1894,7 @@ def __bool__(self) -> None: def _reduce( self, op: str, - axis=no_default, + axis: Axis | None = 0, numeric_only: bool = False, **kwargs, ) -> ScalarLike: @@ -1895,7 +1918,7 @@ def _scan( @_performance_tracking def min( self, - axis: Axis = 0, + axis: Axis | None = 0, skipna: bool = True, numeric_only: bool = False, **kwargs, @@ -1946,7 +1969,7 @@ def min( @_performance_tracking def max( self, - axis: Axis = 0, + axis: Axis | None = 0, skipna: bool = True, numeric_only: bool = False, **kwargs, @@ -1992,7 +2015,7 @@ def max( ) @_performance_tracking - def all(self, axis: Axis = 0, skipna: bool = True, **kwargs): + def all(self, axis: Axis | None = 0, skipna: bool = True, **kwargs): """ Return whether all elements are True in DataFrame. @@ -2045,7 +2068,7 @@ def all(self, axis: Axis = 0, skipna: bool = True, **kwargs): ) @_performance_tracking - def any(self, axis: Axis = 0, skipna: bool = True, **kwargs): + def any(self, axis: Axis | None = 0, skipna: bool = True, **kwargs): """ Return whether any elements is True in DataFrame. diff --git a/python/cudf/cudf/core/groupby/groupby.py b/python/cudf/cudf/core/groupby/groupby.py index 959488c7d9e3..4d94bb2685eb 100644 --- a/python/cudf/cudf/core/groupby/groupby.py +++ b/python/cudf/cudf/core/groupby/groupby.py @@ -18,9 +18,7 @@ import pylibcudf as plc -from cudf.api.extensions import no_default from cudf.api.types import is_list_like, is_scalar -from cudf.core._compat import PANDAS_LT_300 from cudf.core._internals import aggregation, sorting from cudf.core.abc import Serializable from cudf.core.column import access_columns @@ -34,7 +32,10 @@ from cudf.core.column_accessor import ColumnAccessor from cudf.core.common import pipe from cudf.core.copy_types import GatherMap -from cudf.core.dtype.validators import is_dtype_obj_numeric +from cudf.core.dtype.validators import ( + is_dtype_obj_numeric, + is_dtype_obj_string, +) from cudf.core.dtypes import ( CategoricalDtype, DecimalDtype, @@ -50,7 +51,6 @@ from cudf.core.udf.groupby_utils import _can_be_jitted, jit_groupby_apply from cudf.options import get_option from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, SIZE_TYPE_DTYPE, cudf_dtype_to_pa_type, dtype_from_pylibcudf_column, @@ -104,11 +104,14 @@ @singledispatch def get_valid_aggregation(dtype): - if dtype == CUDF_STRING_DTYPE: - return _STRING_AGGS return "ALL" +@get_valid_aggregation.register +def _(dtype: pd.StringDtype): + return _STRING_AGGS + + @get_valid_aggregation.register def _(dtype: ListDtype): return _LIST_AGGS @@ -145,8 +148,7 @@ def _is_unsupported_agg_for_type(dtype, str_agg: str) -> bool: @_is_unsupported_agg_for_type.register -def _(dtype: np.dtype, str_agg: str) -> bool: - # string specifically +def _(dtype: pd.StringDtype, str_agg: str) -> bool: cumulative_agg = str_agg in {"cumsum", "cummin", "cummax"} basic_agg = any( a in str_agg @@ -161,10 +163,8 @@ def _(dtype: np.dtype, str_agg: str) -> bool: "nth", ) ) - return ( - dtype.kind == "O" - and str_agg not in _STRING_AGGS - and (cumulative_agg or not (basic_agg or str_agg == "")) + return str_agg not in _STRING_AGGS and ( + cumulative_agg or not (basic_agg or str_agg == "") ) @@ -452,6 +452,33 @@ def __exit__(self, exc_type, exc_val, exc_tb): return False +def _collect_series_key_column_names(obj, by) -> dict[int, Hashable]: + """For each Series grouping key in ``by``, map ``id`` of the Series' + underlying column to the name of the matching column in ``obj`` (when + one exists by object identity). Mirrors pandas' behavior of excluding + such columns from aggregation values. + + Only applies when ``obj`` is a DataFrame: for Series inputs, the single + column *is* the value column, so identity-based exclusion would empty + the aggregation result. Keying by ``id(series._column)`` makes the + match robust to ordering, the presence of non-Series keys, and to + repeated Series keys. + """ + import cudf + + result: dict[int, Hashable] = {} + if not isinstance(obj, cudf.DataFrame): + return result + by_list = by if isinstance(by, list) else [by] + for key in by_list: + if isinstance(key, cudf.Series): + for col_name, col in obj._column_labels_and_values: + if col is key._column: + result[id(key._column)] = col_name + break + return result + + class GroupBy(Serializable, Reducible, Scannable): obj: Series | DataFrame @@ -526,6 +553,11 @@ def __init__( dropna : bool, optional If True (default), do not include the "null" group. """ + # Determine which column names in `obj` correspond to the grouping + # key Series by column identity (mirrors pandas' behavior). + # Must be done before ``nans_to_nulls`` which breaks identity. + by_series_col_names = _collect_series_key_column_names(obj, by) + if get_option("mode.pandas_compatible"): obj = obj.nans_to_nulls() self.obj = obj @@ -535,12 +567,15 @@ def __init__( self._sort = sort self._dropna = dropna self._group_keys = group_keys + self._selection: tuple[Any, ...] | None = None if isinstance(self._by, _Grouping): self._by._obj = self.obj self.grouping = self._by else: - self.grouping = _Grouping(obj, self._by, level) + self.grouping = _Grouping( + obj, self._by, level, by_series_col_names + ) self._groupby_manager = _GroupByContextManager( self.grouping, self._dropna @@ -574,43 +609,6 @@ def ngroups(self) -> int: def ndim(self) -> int: return self.obj.ndim - @property - def dtypes(self): - """ - Return the dtypes in this group. - - .. deprecated:: 24.04 - Use `.dtypes` on base object instead. - - Returns - ------- - pandas.DataFrame - The data type of each column of the group. - - Examples - -------- - >>> import cudf - >>> df = cudf.DataFrame({'a': [1, 2, 3, 3], 'b': ['x', 'y', 'z', 'a'], - ... 'c':[10, 11, 12, 12]}) - >>> df.groupby("a").dtypes - a b c - a - 1 int64 object int64 - 2 int64 object int64 - 3 int64 object int64 - """ - warnings.warn( - f"{type(self).__name__}.dtypes is deprecated and will be " - "removed in a future version. Check the dtypes on the " - "base object instead", - FutureWarning, - ) - index = self.grouping.keys.unique().sort_values().to_pandas() - return pd.DataFrame( - {name: [dtype] * len(index) for name, dtype in self.obj._dtypes}, - index=index, - ) - @cached_property def groups(self): """ @@ -624,6 +622,15 @@ def groups(self): f"GroupBy.groups() performance scales poorly with " f"number of groups. Got {len(group_names)} groups." ) + if isinstance(self._by, list) and len(self._by) == 1: + warnings.warn( + "In a future version, the keys of `groups` will be a " + f"tuple with a single element, e.g. ({self._by[0]},) , " + f"instead of a scalar, e.g. {self._by[0]}, when grouping " + "by a list with a single element. Use ``df.groupby(by='a').groups`` " + "instead of ``df.groupby(by=['a']).groups`` to avoid this warning", + FutureWarning, + ) return dict( zip( @@ -685,7 +692,7 @@ def indices(self) -> dict[ScalarLike, cp.ndarray]: ) @_performance_tracking - def get_group(self, name, obj=None): + def get_group(self, name): """ Construct DataFrame from group with provided name. @@ -693,10 +700,6 @@ def get_group(self, name, obj=None): ---------- name : object The name of the group to get as a DataFrame. - obj : DataFrame, default None - The DataFrame to take the DataFrame out of. If - it is None, the object groupby was called on will - be used. Returns ------- @@ -717,21 +720,12 @@ def get_group(self, name, obj=None): 0 A 1 2 A 3 """ - if obj is None: - obj = self.obj - else: - warnings.warn( - "obj is deprecated and will be removed in a future version. " - "Use ``df.iloc[gb.indices.get(name)]`` " - "instead of ``gb.get_group(name, obj=df)``.", - FutureWarning, - ) if is_list_like(self._by) and len(self._by) == 1: if isinstance(name, tuple) and len(name) == 1: name = name[0] else: raise KeyError(name) - return obj.iloc[self.indices[name]] + return self.obj.iloc[self.indices[name]] @_performance_tracking def size(self) -> Series: @@ -746,7 +740,8 @@ def size(self) -> Series: .groupby(self.grouping, sort=self._sort, dropna=self._dropna) .agg("size") ) - if isinstance(getattr(self.obj, "dtype", None), pd.ArrowDtype): + obj_dtype = getattr(self.obj, "dtype", None) + if isinstance(obj_dtype, pd.ArrowDtype): # TODO: Remove once groupby.agg preserves pandas extension dtypes. arrow_dtype = pd.ArrowDtype(pa.int64()) if isinstance(result, Series): @@ -757,6 +752,23 @@ def size(self) -> Series: result._data["size"] = ColumnBase.create( result._data["size"].plc_column, arrow_dtype ) + elif ( + isinstance(obj_dtype, pd.StringDtype) + and obj_dtype.storage == "pyarrow" + and obj_dtype.na_value is pd.NA + ): + # Series.groupby.size() on ``string[pyarrow]`` returns Int64. + int64_dtype = pd.Int64Dtype() + if isinstance(result, Series): + result = Series._from_column( + ColumnBase.create(result._column.plc_column, int64_dtype), + name=result.name, + index=result.index, + ) + elif "size" in result._column_names: + result._data["size"] = ColumnBase.create( + result._data["size"].plc_column, int64_dtype + ) if not self._as_index: result = result.rename("size").reset_index() return result @@ -966,18 +978,13 @@ def _shift( ) def _replace_nulls( - self, values: tuple[ColumnBase, ...], method: str + self, values: tuple[ColumnBase, ...], method: plc.replace.ReplacePolicy ) -> Generator[ColumnBase]: with access_columns(*values, mode="read", scope="internal"): with self._groupby as plc_groupby: _, replaced = plc_groupby.replace_nulls( plc.Table([col.plc_column for col in values]), - [ - plc.replace.ReplacePolicy.PRECEDING - if method == "ffill" - else plc.replace.ReplacePolicy.FOLLOWING - ] - * len(values), + [method] * len(values), ) return ( @@ -1086,6 +1093,7 @@ def agg(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs): raise NotImplementedError( "Passing args to func is currently not supported." ) + from cudf.core.dataframe import DataFrame column_names, columns, normalized_aggs = self._normalize_aggs( func, **kwargs @@ -1132,12 +1140,16 @@ def agg(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs): ) # Override for specific aggregation types that need dtype adjustments if agg_kind in {"COUNT", "SIZE", "ARGMIN", "ARGMAX"}: - cast_dtype = get_dtype_of_same_kind( - orig_dtype, np.dtype(np.int64) - ) + if isinstance(orig_dtype, pd.StringDtype): + cast_dtype = np.dtype(np.int64) + else: + cast_dtype = get_dtype_of_same_kind( + orig_dtype, np.dtype(np.int64) + ) + elif agg_kind == "NUNIQUE": + cast_dtype = np.dtype(np.int64) elif ( - self.obj.empty - and ( + ( isinstance(agg_name, str) and agg_name in Reducible._SUPPORTED_REDUCTIONS ) @@ -1161,12 +1173,25 @@ def agg(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs): if cast_dtype is not None: result_col = result_col.astype(cast_dtype) data[key] = result_col - data = ColumnAccessor(data, multiindex=multilevel) + # Preserve the column axis label-dtype/level_names from the source + # DataFrame so that aggregations such as ``nunique`` keep the column + # axis name (matching pandas behavior). + if ( + not multilevel + and self.obj.ndim == 2 + and self.obj._data.level_names != (None,) + ): + data = ColumnAccessor( + data, + multiindex=False, + level_names=self.obj._data.level_names, + label_dtype=self.obj._data.label_dtype, + ) + else: + data = ColumnAccessor(data, multiindex=multilevel) if not multilevel: data = data.rename_levels({np.nan: None}, level=0) - from cudf.core.dataframe import DataFrame - result = DataFrame._from_data(data, index=result_index) if self._sort: @@ -1251,6 +1276,37 @@ def agg(self, func=None, *args, engine=None, engine_kwargs=None, **kwargs): return result + def _wrap_idxmin_idxmax(self, result: DataFrame | Series, *, skipna: bool): + if skipna and ( + (result.ndim == 2 and result.isna().any().any()) + or (result.ndim == 1 and result.isna().any()) + ): + raise ValueError( + "Encountered all NA values in a group with skipna=True" + ) + # idxmin/idxmax return positional/label indices, which take their + # dtype from the source object's row index — not from the values + # being reduced. Cast the (non-key) result columns accordingly to + # match pandas, where reducing an Int64 column still yields int64 + # indices for a default RangeIndex. Skip the cast when the source + # uses a MultiIndex (no single representative dtype) to avoid + # lossy/unsupported casts. + from cudf.core.multiindex import MultiIndex + + if isinstance(self.obj.index, MultiIndex): + return result + index_dtype = self.obj.index.dtype + key_names = set(self.grouping.names) + if result.ndim == 2: + for name, col in result._column_labels_and_values: + if name in key_names: + continue + if col.dtype != index_dtype: + result._data[name] = col.astype(index_dtype) + elif result.dtype != index_dtype: + result = result.astype(index_dtype) + return result + def _reduce_numeric_only(self, op: str): raise NotImplementedError( f"numeric_only is not implemented for {type(self)}" @@ -1287,18 +1343,124 @@ def _reduce( The numeric_only, min_count """ - if min_count != 0: - raise NotImplementedError( - "min_count parameter is not implemented yet" - ) if numeric_only: return self._reduce_numeric_only(op) - return self.agg(op) + + if op == "sum" and self._has_string_value_column(): + return self._string_sum( + skipna=kwargs.get("skipna", True), min_count=min_count + ) + + result = self.agg(op) + if min_count and min_count > 0: + counts = self.agg("count") + result = result.where(counts >= min_count, None) + return result def _scan(self, op: str, *args, **kwargs): """{op_name} for each group.""" return self.agg(op) + def _has_string_value_column(self) -> bool: + from cudf.core.series import Series + + if isinstance(self.obj, Series): + return isinstance(self.obj.dtype, pd.StringDtype) + for col_name in self.grouping._values_column_names: + if isinstance(self.obj._data[col_name].dtype, pd.StringDtype): + return True + return False + + def _string_sum(self, *, skipna: bool, min_count: int): + """Implement groupby sum for StringDtype columns as per-group + string concatenation. + """ + from cudf.core.column import ColumnBase + from cudf.core.dataframe import DataFrame + from cudf.core.series import Series + + is_series = isinstance(self.obj, Series) + if is_series: + value_cols: list[tuple[Any, ColumnBase]] = [ + (self.obj.name, self.obj._column) + ] + else: + value_cols = [] + for col_name in self.grouping._values_column_names: + col = self.obj._data[col_name] + if not isinstance(col.dtype, pd.StringDtype): + # TODO: handle mixed dtype frames + raise NotImplementedError( + "sum on mixed string and non-string columns is " + "not yet supported" + ) + value_cols.append((col_name, col)) + + # Build a single batched groupby aggregation: one request per value + # column, computing collect_list and (when min_count > 0) count. + aggs = [plc.aggregation.collect_list()] + if min_count > 0: + aggs.append(plc.aggregation.count()) + requests = [ + plc.groupby.GroupByRequest(col.plc_column, aggs) + for _, col in value_cols + ] + columns_for_access = [col for _, col in value_cols] + with access_columns( + *columns_for_access, mode="read", scope="internal" + ): + with self._groupby_manager as plc_groupby: + keys, results = plc_groupby.aggregate(requests) + + sep = plc.Scalar.from_py("") + sep_narep = plc.Scalar.from_py("") + if skipna: + string_narep = plc.Scalar.from_py("") + empty_policy = plc.strings.combine.OutputIfEmptyList.EMPTY_STRING + else: + string_narep = plc.Scalar.from_py( + None, plc.DataType(plc.TypeId.STRING) + ) + empty_policy = plc.strings.combine.OutputIfEmptyList.NULL_ELEMENT + null_str = plc.Scalar.from_py(None, plc.DataType(plc.TypeId.STRING)) + + out_data: dict[Any, ColumnBase] = {} + for (col_name, col), table in zip(value_cols, results, strict=True): + agg_columns = table.columns() + joined = plc.strings.combine.join_list_elements( + agg_columns[0], + sep, + sep_narep, + string_narep, + plc.strings.combine.SeparatorOnNulls.YES, + empty_policy, + ) + if min_count > 0: + keep_mask_plc = plc.binaryop.binary_operation( + agg_columns[1], + plc.Scalar.from_py(min_count), + plc.binaryop.BinaryOperator.GREATER_EQUAL, + plc.DataType(plc.TypeId.BOOL8), + ) + joined = plc.copying.copy_if_else( + joined, null_str, keep_mask_plc + ) + out_data[col_name] = ColumnBase.create(joined, col.dtype) + + key_dtypes = [col.dtype for col in self.grouping._key_columns] + index = self.grouping.keys._from_columns_like_self( + [ + ColumnBase.create(key, dtype) + for key, dtype in zip(keys.columns(), key_dtypes, strict=True) + ] + ) + + if is_series: + return Series._from_column( + out_data[self.obj.name], name=self.obj.name, index=index + ) + return DataFrame._from_data(out_data, index=index) + aggregate = agg def _head_tail(self, n, *, take_head: bool, preserve_order: bool): @@ -1760,6 +1922,8 @@ def deserialize(cls, header, frames): return cls(obj, grouping, **kwargs) def _grouped(self, *, include_groups: bool = True): + from cudf.core.dataframe import DataFrame + offsets, grouped_key_cols, grouped_value_cols = self._groups( itertools.chain(self.obj.index._columns, self.obj._columns) ) @@ -1775,9 +1939,13 @@ def _grouped(self, *, include_groups: bool = True): column_names=self.obj._column_names, index_names=self.obj._index_names, # type: ignore[arg-type] ) - if not include_groups: + if not include_groups and isinstance(grouped_values, DataFrame): + selection = getattr(self, "_selection", None) for col_name in to_drop: - del grouped_values[col_name] + if col_name in grouped_values._column_names and ( + selection is None or col_name not in selection + ): + del grouped_values[col_name] group_names = grouped_keys.unique().sort_values() return (group_names, offsets, grouped_keys, grouped_values) @@ -1841,7 +2009,7 @@ def _raise_invalid_type(x): columns, aggs_per_column = zip( *( (self.obj._data[x[0]], x[1]) - if isinstance(x, tuple) + if isinstance(x, (tuple, NamedAgg)) else _raise_invalid_type(x) for x in kwargs.values() ), @@ -1972,9 +2140,7 @@ def _post_process_chunk_results( # group is a row-like "Series" where the index labels # are the same as the original calling DataFrame if _is_row_of(chunk_results[0], self.obj): - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - result = concat(chunk_results, axis=1).T + result = concat(chunk_results, axis=1).T result.index = group_names result.index.names = self.grouping.names # When the UDF is like df.x + df.y, the result for each @@ -1983,9 +2149,7 @@ def _post_process_chunk_results( len(self.obj), len(group_names), }: - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - result = concat(chunk_results) + result = concat(chunk_results) if total_rows == len(group_names): result.index = group_names # TODO: Is there a better way to determine what @@ -2009,9 +2173,7 @@ def _post_process_chunk_results( f"type {type(chunk_results[0])}" ) else: - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - result = concat(chunk_results) + result = concat(chunk_results) if self._group_keys: index_data = group_keys._data.copy(deep=True) index_data[None] = grouped_values.index._column @@ -2020,7 +2182,12 @@ def _post_process_chunk_results( @_performance_tracking def apply( - self, func, *args, engine="auto", include_groups: bool = True, **kwargs + self, + func, + *args, + engine="auto", + include_groups: bool = False, + **kwargs, ): """Apply a python transformation function over the grouped chunk. @@ -2045,10 +2212,9 @@ def apply( The default value `auto` will attempt to use the numba JIT pipeline where possible and will fall back to the iterative algorithm if necessary. - include_groups : bool, default True + include_groups : bool, default False When True, will attempt to apply ``func`` to the groupings in - the case that they are columns of the DataFrame. In the future, - this will default to ``False``. + the case that they are columns of the DataFrame. kwargs : dict Optional keyword arguments to pass to the function. Currently not supported @@ -2352,13 +2518,13 @@ def describe(self, percentiles=None, include=None, exclude=None): 2 24.0 90 3 26.0 80 >>> gdf.groupby('Score').describe() - Speed - count mean std min 25% 50% 75% max + Speed + count mean std min 25% 50% 75% max Score - 30 1 370.0 370.0 370.0 370.0 370.0 370.0 - 50 1 380.0 380.0 380.0 380.0 380.0 380.0 - 80 1 26.0 26.0 26.0 26.0 26.0 26.0 - 90 1 24.0 24.0 24.0 24.0 24.0 24.0 + 30 1 370.0 NaN 370.0 370.0 370.0 370.0 370.0 + 50 1 380.0 NaN 380.0 380.0 380.0 380.0 380.0 + 80 1 26.0 NaN 26.0 26.0 26.0 26.0 26.0 + 90 1 24.0 NaN 24.0 24.0 24.0 24.0 24.0 """ if percentiles is not None: @@ -2794,9 +2960,13 @@ def diff(self, periods=1, axis=0): values.index = self.obj.index return values - self.shift(periods=periods) - def _scan_fill(self, method: str, limit: int) -> DataFrameOrSeries: + def _scan_fill( + self, method: plc.replace.ReplacePolicy, limit: int | None + ) -> DataFrameOrSeries: """Internal implementation for `ffill` and `bfill`""" values = self.grouping.values + from cudf.core.dataframe import DataFrame + result = self.obj._from_data( dict( zip( @@ -2806,9 +2976,31 @@ def _scan_fill(self, method: str, limit: int) -> DataFrameOrSeries: ) ) ) + # Pandas' groupby.ffill/bfill builds the result columns via a ``take`` + # on the input columns, which converts integer-valued column labels + # to object dtype. Reproduce that here so column metadata matches. + if ( + isinstance(result, DataFrame) + and isinstance(self.obj, DataFrame) + and result._num_columns < self.obj._num_columns + ): + source_pd_cols = self.obj._data.to_pandas_index + if ( + source_pd_cols.dtype.kind in {"i", "u"} + or source_pd_cols.dtype == object + ): + indexer = source_pd_cols.get_indexer(result._column_names) + if not (indexer == -1).any(): + taken = source_pd_cols.take(indexer) + if ( + not isinstance(taken, pd.MultiIndex) + and taken.dtype != object + ): + taken = taken.astype(object) + result.columns = taken return self._mimic_pandas_order(result) - def ffill(self, limit=None): + def ffill(self, limit: int | None = None): """Forward fill NA values. Parameters @@ -2816,13 +3008,9 @@ def ffill(self, limit=None): limit : int, default None Unsupported """ + return self._scan_fill(plc.replace.ReplacePolicy.PRECEDING, limit) - if limit is not None: - raise NotImplementedError("Does not support limit param yet.") - - return self._scan_fill("ffill", limit) - - def bfill(self, limit=None): + def bfill(self, limit: int | None = None): """Backward fill NA values. Parameters @@ -2830,76 +3018,7 @@ def bfill(self, limit=None): limit : int, default None Unsupported """ - if limit is not None: - raise NotImplementedError("Does not support limit param yet.") - - return self._scan_fill("bfill", limit) - - @_performance_tracking - def fillna( - self, - value=None, - method=None, - axis=0, - inplace=False, - limit=None, - downcast=None, - ): - """Fill NA values using the specified method. - - Parameters - ---------- - value : scalar, dict - Value to use to fill the holes. Cannot be specified with method. - method : { 'bfill', 'ffill', None}, default None - Method to use for filling holes in reindexed Series - - - ffill: propagate last valid observation forward to next valid - - bfill: use next valid observation to fill gap - axis : {0 or 'index', 1 or 'columns'} - Unsupported - inplace : bool, default False - If `True`, fill inplace. Note: this will modify other views on this - object. - limit : int, default None - Unsupported - downcast : dict, default None - Unsupported - - Returns - ------- - DataFrame or Series - """ - warnings.warn( - "groupby fillna is deprecated and " - "will be removed in a future version. Use groupby ffill " - "or groupby bfill for forward or backward filling instead.", - FutureWarning, - ) - if inplace: - raise NotImplementedError("Does not support inplace yet.") - if limit is not None: - raise NotImplementedError("Does not support limit param yet.") - if downcast is not None: - raise NotImplementedError("Does not support downcast yet.") - if not axis == 0: - raise NotImplementedError("Only support axis == 0.") - - if value is None and method is None: - raise ValueError("Must specify a fill 'value' or 'method'.") - if value is not None and method is not None: - raise ValueError("Cannot specify both 'value' and 'method'.") - - if method is not None: - if method not in {"ffill", "bfill"}: - raise ValueError("Method can only be of 'ffill', 'bfill'.") - return getattr(self, method, limit)() - - values = self.grouping.values - values.index = self.obj.index - return values.fillna( - value=value, inplace=inplace, axis=axis, limit=limit - ) + return self._scan_fill(plc.replace.ReplacePolicy.FOLLOWING, limit) @_performance_tracking def shift( @@ -2980,10 +3099,8 @@ def shift( @_performance_tracking def pct_change( self, - periods=1, - fill_method=no_default, - axis=0, - limit=no_default, + periods: int = 1, + fill_method: None = None, freq=None, ): """ @@ -2995,17 +3112,7 @@ def pct_change( periods : int, default 1 Periods to shift for forming percent change. fill_method : str, default 'ffill' - How to handle NAs before computing percent changes. - - .. deprecated:: 24.04 - All options of `fill_method` are deprecated - except `fill_method=None`. - limit : int, optional - The number of consecutive NAs to fill before stopping. - Not yet implemented. - - .. deprecated:: 24.04 - `limit` is deprecated. + Must be None. freq : str, optional Increment to use from time series API. Not yet implemented. @@ -3015,39 +3122,12 @@ def pct_change( Series or DataFrame Percentage changes within each group """ - if not axis == 0: - raise NotImplementedError("Only axis=0 is supported.") - if limit is not no_default: - raise NotImplementedError("limit parameter not supported yet.") if freq is not None: raise NotImplementedError("freq parameter not supported yet.") - elif fill_method not in {no_default, None, "ffill", "bfill"}: - raise ValueError("fill_method must be one of 'ffill', or'bfill'.") - - if fill_method not in (no_default, None) or limit is not no_default: - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, ( - "Need to drop after pandas-3.0 support is added." - ) - warnings.warn( - "The 'fill_method' keyword being not None and the 'limit' " - f"keywords in {type(self).__name__}.pct_change are " - "deprecated and will be removed in a future version. " - "Either fill in any non-leading NA values prior " - "to calling pct_change or specify 'fill_method=None' " - "to not fill NA values.", - FutureWarning, - ) - - if fill_method in (no_default, None): - fill_method = "ffill" - if limit is no_default: - limit = None - - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - filled = self.fillna(method=fill_method, limit=limit) + if fill_method is not None: + raise ValueError(f"fill_method must be None; got {fill_method=}.") + filled = self.ffill() fill_grp = filled.groupby(self.grouping) shifted = fill_grp.shift(periods=periods, freq=freq) return (filled / shifted) - 1 @@ -3147,18 +3227,84 @@ def ewm(self, *args, **kwargs): def any(self, skipna: bool = True, min_count: int = 0, **kwargs: Any): """ Return True if any value in the group is truthful, else False. - - Currently not implemented. """ - raise NotImplementedError("any is currently not implemented") + return self._bool_reduce("any", skipna=skipna, min_count=min_count) def all(self, skipna: bool = True, min_count: int = 0, **kwargs: Any): """ Return True if all values in the group are truthful, else False. - - Currently not implemented. """ - raise NotImplementedError("all is currently not implemented") + return self._bool_reduce("all", skipna=skipna, min_count=min_count) + + def _bool_reduce(self, op: str, *, skipna: bool, min_count: int): + """Implement all/any as min/max on bool-coerced value columns.""" + from cudf.core.dataframe import DataFrame + from cudf.core.series import Series + + agg_name = {"all": "min", "any": "max"}[op] + # Empty-group fill value: vacuously True for all, vacuously False for any + fill_value = op == "all" + + is_series = isinstance(self.obj, Series) + + # Coerce each value column to a (nullable) bool column so that + # nulls are preserved through the aggregation (min/max skip + # nulls). For ``skipna=False``, nulls are replaced with True so + # they don't flip ``all`` to False and always make ``any`` True. + bool_dtype = np.dtype(np.bool_) + + def _to_bool_col(col): + if is_dtype_obj_string(col.dtype): + bool_col = col.count_characters() > np.int8(0) + else: + # For numeric/bool inputs, cast to bool preserving nulls. + bool_col = col != 0 + # Normalize away pandas-extension bool dtypes so the downstream + # aggregation always sees ``np.bool_``. + bool_col = bool_col.astype(bool_dtype, copy=False) + if not skipna: + bool_col = bool_col.fillna(True) + return bool_col + + if is_series: + new_obj = Series._from_column( + _to_bool_col(self.obj._column), name=self.obj.name + ) + else: + new_data = { + col_name: _to_bool_col(self.obj._data[col_name]) + for col_name in self.grouping._values_column_names + } + new_obj = DataFrame._from_data(new_data, index=self.obj.index) + + # Reuse the same grouping so key columns match ``new_obj`` exactly, + # avoiding label-based lookup when the key column was excluded. + bool_gb = type(self)( + new_obj, + by=self.grouping, + level=None, + sort=self._sort, + as_index=self._as_index, + dropna=self._dropna, + ) + result = bool_gb.agg(agg_name) + + # Empty groups (skipna=True with all-NA values) yield NA from + # min/max — pandas treats these as ``True`` for ``all`` and + # ``False`` for ``any``. + bool_np = np.dtype(np.bool_) + if isinstance(result, Series): + result = result.fillna(fill_value).astype(bool_np) + else: + for col_name in result._column_names: + result[col_name] = ( + result[col_name].fillna(fill_value).astype(bool_np) + ) + + if min_count and min_count > 0: + counts = self.agg("count") + result = result.where(counts >= min_count, None) + return result class DataFrameGroupBy(GroupBy, GetAttrGetItemMixin): @@ -3177,13 +3323,40 @@ def _reduce_numeric_only(self, op: str): return self[columns].agg(op) def __getitem__(self, key): - return self.obj[key].groupby( + new = self.obj[key].groupby( by=self.grouping.keys, dropna=self._dropna, sort=self._sort, group_keys=self._group_keys, as_index=self._as_index, ) + # Track explicit column selection so include_groups=False does not + # strip columns the user explicitly asked for (matches pandas + # behavior of returning group-key columns when reselected). + new._selection = ( + tuple(key) if isinstance(key, (list, tuple)) else (key,) + ) + return new + + def idxmin( + self, + skipna: bool = True, + min_count: int = 0, + numeric_only: bool = False, + **kwargs: Any, + ) -> DataFrame: + result = self._reduce("idxmin", numeric_only=numeric_only) + return self._wrap_idxmin_idxmax(result, skipna=skipna) + + def idxmax( + self, + skipna: bool = True, + min_count: int = 0, + numeric_only: bool = False, + **kwargs: Any, + ) -> DataFrame: + result = self._reduce("idxmax", numeric_only=numeric_only) + return self._wrap_idxmin_idxmax(result, skipna=skipna) def value_counts( self, @@ -3486,6 +3659,18 @@ def apply(self, func, *args, **kwargs): return result + def idxmin( + self, skipna: bool = True, min_count: int = 0, **kwargs: Any + ) -> Series: + result = self._reduce("idxmin") + return self._wrap_idxmin_idxmax(result, skipna=skipna) + + def idxmax( + self, skipna: bool = True, min_count: int = 0, **kwargs: Any + ) -> Series: + result = self._reduce("idxmax") + return self._wrap_idxmin_idxmax(result, skipna=skipna) + @property def dtype(self) -> pd.Series: raise NotImplementedError("dtype is currently not implemented.") @@ -3588,7 +3773,7 @@ def __init__( class _Grouping(Serializable): - def __init__(self, obj, by=None, level=None): + def __init__(self, obj, by=None, level=None, series_key_column_names=None): self._obj = obj self._key_columns = [] self.names = [] @@ -3596,6 +3781,11 @@ def __init__(self, obj, by=None, level=None): # Need to keep track of named key columns # to support `as_index=False` correctly self._named_columns = [] + # ``id(series._column)`` -> name of the matching ``obj`` column, + # for each Series-typed grouping key that is identical (by object + # identity) to one of ``obj``'s columns. Used by ``_handle_series`` + # to mirror pandas' exclusion of such columns from value columns. + self._series_key_column_names = dict(series_key_column_names or {}) self._handle_by_or_level(by, level) if len(obj) and not len(self._key_columns): @@ -3674,9 +3864,17 @@ def _handle_callable(self, by): self.__init__(self._obj, by) def _handle_series(self, by): + # Mirror pandas: if the grouping Series' underlying column was one + # of the obj's columns (identity captured pre-transformation), + # exclude that column name from value columns during aggregation. + # Look up by ``id`` of the original column *before* alignment may + # produce a fresh column object. + matched = self._series_key_column_names.get(id(by._column)) by = by._align_to_index(self._obj.index, how="right") self._key_columns.append(by._column) self.names.append(by.name) + if matched is not None: + self._named_columns.append(matched) def _handle_index(self, by): self._key_columns.extend(by._columns) diff --git a/python/cudf/cudf/core/index.py b/python/cudf/cudf/core/index.py index 2b3fb4741405..0f7d6f4c113b 100644 --- a/python/cudf/cudf/core/index.py +++ b/python/cudf/cudf/core/index.py @@ -26,7 +26,6 @@ is_list_like, is_scalar, ) -from cudf.core._compat import PANDAS_LT_300 from cudf.core._internals import copying, sorting from cudf.core.accessors import StringMethods from cudf.core.column import ( @@ -48,14 +47,20 @@ ) from cudf.core.column_accessor import ColumnAccessor from cudf.core.copy_types import GatherMap -from cudf.core.dtype.validators import is_dtype_obj_numeric -from cudf.core.dtypes import CategoricalDtype, IntervalDtype +from cudf.core.dtype.validators import ( + is_dtype_obj_numeric, + is_dtype_obj_string, +) +from cudf.core.dtypes import ( + CategoricalDtype, + IntervalDtype, +) from cudf.core.join._join_helpers import _match_join_keys from cudf.core.single_column_frame import SingleColumnFrame from cudf.errors import MixedTypeError from cudf.utils.docutils import copy_docstring from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, + DEFAULT_STRING_DTYPE, SIZE_TYPE_DTYPE, _maybe_convert_to_default_type, cudf_dtype_from_pa_type, @@ -63,7 +68,9 @@ dtype_from_pylibcudf_column, dtype_to_pylibcudf_type, find_common_type, + get_dtype_of_same_kind, is_mixed_with_object_dtype, + is_pandas_nullable_extension_dtype, ) from cudf.utils.performance_tracking import _performance_tracking from cudf.utils.scalar import pa_scalar_to_plc_scalar @@ -270,6 +277,18 @@ def __array_function__(self, func, types, args, kwargs): @_performance_tracking def __array_ufunc__(self, ufunc, method, *inputs, **kwargs): + # Defer to Series (and DataFrame) which have higher priority than + # Index when participating in a numpy ufunc — pandas dispatches + # ``np.ufunc(Index, Series)`` to ``Series`` so the result is a + # ``Series``. Without this, cudf would handle it here and return an + # ``Index``. + if any( + isinstance(inp, (cudf.Series, cudf.DataFrame)) + for inp in inputs + if inp is not self + ): + return NotImplemented + ret = super().__array_ufunc__(ufunc, method, *inputs, **kwargs) if ret is not None: @@ -291,16 +310,8 @@ def __array_ufunc__(self, ufunc, method, *inputs, **kwargs): ufunc, cupy_func, inputs, **kwargs ) - out = [_index_from_data(out) for out in data] - - # pandas returns numpy arrays when the outputs are boolean. - for i, o in enumerate(out): - # We explicitly _do not_ use isinstance here: we want only - # boolean Indexes, not dtype-specific subclasses. - if type(o) is Index and o.dtype.kind == "b": - out[i] = o.values - - return out[0] if ufunc.nout == 1 else tuple(out) + out = tuple(_index_from_data(out) for out in data) + return out[0] if ufunc.nout == 1 else out return NotImplemented @@ -415,7 +426,7 @@ def from_arrow(cls, obj: pa.Array) -> Index | MultiIndex: >>> import cudf >>> import pyarrow as pa >>> cudf.Index.from_arrow(pa.array(["a", "b", None])) - Index(['a', 'b', ], dtype='object') + Index(['a', 'b', nan], dtype='str') """ try: return cls._from_column(ColumnBase.from_arrow(obj)) @@ -781,17 +792,21 @@ def union(self, other, sort: bool | None = None) -> Index: # mixed type for union in pandas. raise MixedTypeError("Cannot perform union with mixed types") - if not len(other) or self.equals(other): + if not len(other): + res = self._get_reconciled_name_object(other) + if sort: + return res.sort_values() # type: ignore[return-value] + return res + elif self.equals(other): common_dtype = find_common_type([self.dtype, other.dtype]) res = self._get_reconciled_name_object(other).astype(common_dtype) if sort: - return res.sort_values() + return res.sort_values() # type: ignore[return-value] return res elif not len(self): - common_dtype = find_common_type([self.dtype, other.dtype]) - res = other._get_reconciled_name_object(self).astype(common_dtype) + res = other._get_reconciled_name_object(self) if sort: - return res.sort_values() + return res.sort_values() # type: ignore[return-value] return res result = self._union(other, sort=sort) @@ -898,6 +913,13 @@ def intersection(self, other, sort: bool | None = False) -> Index: result = result.sort_values() # type: ignore[assignment] return result if not len(self) or not len(other): + if not len(self) and isinstance(other.dtype, CategoricalDtype): + # Preserve categorical dtype when self is empty, + # matching pandas behavior. + result = other[:0] + result.name = _get_result_name(self.name, other.name) + return result + common_dtype = find_common_type([self.dtype, other.dtype]) lhs = self.unique() if self.has_duplicates else self @@ -909,8 +931,14 @@ def intersection(self, other, sort: bool | None = False) -> Index: res_name = _get_result_name(self.name, other.name) - if (self._is_boolean() and other._is_numeric()) or ( - self._is_numeric() and other._is_boolean() + if ( + self.dtype.kind == "b" + and is_dtype_obj_numeric(other.dtype, include_decimal=False) + and other.dtype.kind != "b" + ) or ( + is_dtype_obj_numeric(self.dtype, include_decimal=False) + and self.dtype.kind != "b" + and other.dtype.kind == "b" ): if isinstance(self, cudf.MultiIndex): return self[:0].rename(res_name) @@ -1354,324 +1382,6 @@ def dropna(self, how: Literal["any", "all"] = "any") -> Self: self._column_names, ) - def is_numeric(self): - """ - Check if the Index only consists of numeric data. - - .. deprecated:: 23.04 - Use `cudf.api.types.is_any_real_numeric_dtype` instead. - - Returns - ------- - bool - Whether or not the Index only consists of numeric data. - - See Also - -------- - is_boolean : Check if the Index only consists of booleans. - is_integer : Check if the Index only consists of integers. - is_floating : Check if the Index is a floating type. - is_object : Check if the Index is of the object dtype. - is_categorical : Check if the Index holds categorical data. - is_interval : Check if the Index holds Interval objects. - - Examples - -------- - >>> import cudf - >>> idx = cudf.Index([1.0, 2.0, 3.0, 4.0]) - >>> idx.is_numeric() - True - >>> idx = cudf.Index([1, 2, 3, 4.0]) - >>> idx.is_numeric() - True - >>> idx = cudf.Index([1, 2, 3, 4]) - >>> idx.is_numeric() - True - >>> idx = cudf.Index([1, 2, 3, 4.0, np.nan]) - >>> idx.is_numeric() - True - >>> idx = cudf.Index(["Apple", "cold"]) - >>> idx.is_numeric() - False - """ - # Do not remove until pandas removes this. - warnings.warn( - f"{type(self).__name__}.is_numeric is deprecated. " - "Use cudf.api.types.is_any_real_numeric_dtype instead", - FutureWarning, - ) - return self._is_numeric() - - def is_boolean(self): - """ - Check if the Index only consists of booleans. - - .. deprecated:: 23.04 - Use `cudf.api.types.is_bool_dtype` instead. - - Returns - ------- - bool - Whether or not the Index only consists of booleans. - - See Also - -------- - is_integer : Check if the Index only consists of integers. - is_floating : Check if the Index is a floating type. - is_numeric : Check if the Index only consists of numeric data. - is_object : Check if the Index is of the object dtype. - is_categorical : Check if the Index holds categorical data. - is_interval : Check if the Index holds Interval objects. - - Examples - -------- - >>> import cudf - >>> idx = cudf.Index([True, False, True]) - >>> idx.is_boolean() - True - >>> idx = cudf.Index(["True", "False", "True"]) - >>> idx.is_boolean() - False - >>> idx = cudf.Index([1, 2, 3]) - >>> idx.is_boolean() - False - """ - # Do not remove until pandas removes this. - warnings.warn( - f"{type(self).__name__}.is_boolean is deprecated. " - "Use cudf.api.types.is_bool_dtype instead", - FutureWarning, - ) - return self._is_boolean() - - def is_integer(self): - """ - Check if the Index only consists of integers. - - .. deprecated:: 23.04 - Use `cudf.api.types.is_integer_dtype` instead. - - Returns - ------- - bool - Whether or not the Index only consists of integers. - - See Also - -------- - is_boolean : Check if the Index only consists of booleans. - is_floating : Check if the Index is a floating type. - is_numeric : Check if the Index only consists of numeric data. - is_object : Check if the Index is of the object dtype. - is_categorical : Check if the Index holds categorical data. - is_interval : Check if the Index holds Interval objects. - - Examples - -------- - >>> import cudf - >>> idx = cudf.Index([1, 2, 3, 4]) - >>> idx.is_integer() - True - >>> idx = cudf.Index([1.0, 2.0, 3.0, 4.0]) - >>> idx.is_integer() - False - >>> idx = cudf.Index(["Apple", "Mango", "Watermelon"]) - >>> idx.is_integer() - False - """ - # Do not remove until pandas removes this. - warnings.warn( - f"{type(self).__name__}.is_integer is deprecated. " - "Use cudf.api.types.is_integer_dtype instead", - FutureWarning, - ) - return self._is_integer() - - def is_floating(self): - """ - Check if the Index is a floating type. - - The Index may consist of only floats, NaNs, or a mix of floats, - integers, or NaNs. - - .. deprecated:: 23.04 - Use `cudf.api.types.is_float_dtype` instead. - - Returns - ------- - bool - Whether or not the Index only consists of only consists - of floats, NaNs, or a mix of floats, integers, or NaNs. - - See Also - -------- - is_boolean : Check if the Index only consists of booleans. - is_integer : Check if the Index only consists of integers. - is_numeric : Check if the Index only consists of numeric data. - is_object : Check if the Index is of the object dtype. - is_categorical : Check if the Index holds categorical data. - is_interval : Check if the Index holds Interval objects. - - Examples - -------- - >>> import cudf - >>> idx = cudf.Index([1.0, 2.0, 3.0, 4.0]) - >>> idx.is_floating() - True - >>> idx = cudf.Index([1.0, 2.0, np.nan, 4.0]) - >>> idx.is_floating() - True - >>> idx = cudf.Index([1, 2, 3, 4, np.nan], nan_as_null=False) - >>> idx.is_floating() - True - >>> idx = cudf.Index([1, 2, 3, 4]) - >>> idx.is_floating() - False - """ - # Do not remove until pandas removes this. - warnings.warn( - f"{type(self).__name__}.is_floating is deprecated. " - "Use cudf.api.types.is_float_dtype instead", - FutureWarning, - ) - return self._is_floating() - - def is_object(self): - """ - Check if the Index is of the object dtype. - - .. deprecated:: 23.04 - Use `cudf.api.types.is_object_dtype` instead. - - Returns - ------- - bool - Whether or not the Index is of the object dtype. - - See Also - -------- - is_boolean : Check if the Index only consists of booleans. - is_integer : Check if the Index only consists of integers. - is_floating : Check if the Index is a floating type. - is_numeric : Check if the Index only consists of numeric data. - is_categorical : Check if the Index holds categorical data. - is_interval : Check if the Index holds Interval objects. - - Examples - -------- - >>> import cudf - >>> idx = cudf.Index(["Apple", "Mango", "Watermelon"]) - >>> idx.is_object() - True - >>> idx = cudf.Index(["Watermelon", "Orange", "Apple", - ... "Watermelon"]).astype("category") - >>> idx.is_object() - False - >>> idx = cudf.Index([1.0, 2.0, 3.0, 4.0]) - >>> idx.is_object() - False - """ - # Do not remove until pandas removes this. - warnings.warn( - f"{type(self).__name__}.is_object is deprecated. " - "Use cudf.api.types.is_object_dtype instead", - FutureWarning, - ) - return self._is_object() - - def is_categorical(self): - """ - Check if the Index holds categorical data. - - .. deprecated:: 23.04 - Use `cudf.api.types.is_categorical_dtype` instead. - - Returns - ------- - bool - True if the Index is categorical. - - See Also - -------- - CategoricalIndex : Index for categorical data. - is_boolean : Check if the Index only consists of booleans. - is_integer : Check if the Index only consists of integers. - is_floating : Check if the Index is a floating type. - is_numeric : Check if the Index only consists of numeric data. - is_object : Check if the Index is of the object dtype. - is_interval : Check if the Index holds Interval objects. - - Examples - -------- - >>> import cudf - >>> idx = cudf.Index(["Watermelon", "Orange", "Apple", - ... "Watermelon"]).astype("category") - >>> idx.is_categorical() - True - >>> idx = cudf.Index([1, 3, 5, 7]) - >>> idx.is_categorical() - False - >>> s = cudf.Series(["Peter", "Victor", "Elisabeth", "Mar"]) - >>> s - 0 Peter - 1 Victor - 2 Elisabeth - 3 Mar - dtype: object - >>> s.index.is_categorical() - False - """ - # Do not remove until pandas removes this. - warnings.warn( - f"{type(self).__name__}.is_categorical is deprecated. " - "Use cudf.api.types.is_categorical_dtype instead", - FutureWarning, - ) - return self._is_categorical() - - def is_interval(self): - """ - Check if the Index holds Interval objects. - - .. deprecated:: 23.04 - Use `cudf.api.types.is_interval_dtype` instead. - - Returns - ------- - bool - Whether or not the Index holds Interval objects. - - See Also - -------- - IntervalIndex : Index for Interval objects. - is_boolean : Check if the Index only consists of booleans. - is_integer : Check if the Index only consists of integers. - is_floating : Check if the Index is a floating type. - is_numeric : Check if the Index only consists of numeric data. - is_object : Check if the Index is of the object dtype. - is_categorical : Check if the Index holds categorical data. - - Examples - -------- - >>> import cudf - >>> import pandas as pd - >>> idx = cudf.from_pandas( - ... pd.Index([pd.Interval(left=0, right=5), - ... pd.Interval(left=5, right=10)]) - ... ) - >>> idx.is_interval() - True - >>> idx = cudf.Index([1, 3, 5, 7]) - >>> idx.is_interval() - False - """ - # Do not remove until pandas removes this. - warnings.warn( - f"{type(self).__name__}.is_interval is deprecated. " - "Use cudf.api.types.is_interval_dtype instead", - FutureWarning, - ) - return self._is_interval() - def _gather( self, gather_map, nullify: bool = False, check_bounds: bool = True ) -> Self: @@ -1727,7 +1437,7 @@ def take( -------- >>> idx = cudf.Index(['a', 'b', 'c', 'd', 'e']) >>> idx.take([2, 0, 4, 3]) - Index(['c', 'a', 'e', 'd'], dtype='object') + Index(['c', 'a', 'e', 'd'], dtype='str') """ if axis not in {0, "index"}: @@ -1779,6 +1489,16 @@ def _binaryop( other_name = getattr(other, "name", self.name) ret.name = self.name if _is_same_name(self.name, other_name) else None + # pandas preserves the freq on a DatetimeIndex when shifting it by a + # constant timedelta / Tick offset (vector shifts drop the freq). + if ( + isinstance(self, DatetimeIndex) + and self.freq is not None + and op in {"__add__", "__sub__"} + and isinstance(ret, DatetimeIndex) + and is_scalar(other) + ): + ret._freq = self._freq # pandas returns numpy arrays when the outputs are boolean. We # explicitly _do not_ use isinstance here: we want only boolean @@ -1787,45 +1507,20 @@ def _binaryop( if ret._column.has_nulls(): ret = ret.fillna(op == "__ne__") - return ret.values + if isinstance(ret, Index): + return ret.values return ret @classmethod @_performance_tracking def _concat(cls, objs): - non_empties = [index for index in objs if len(index)] - if len(objs) != len(non_empties): - # Do not remove until pandas-3.0 support is added. - assert PANDAS_LT_300, ( - "Need to drop after pandas-3.0 support is added." - ) - warning_msg = ( - "The behavior of array concatenation with empty entries is " - "deprecated. In a future version, this will no longer exclude " - "empty items when determining the result dtype. " - "To retain the old behavior, exclude the empty entries before " - "the concat operation." - ) - # Warn only if the type might _actually_ change - if len(non_empties) == 0: - if not all(objs[0].dtype == index.dtype for index in objs[1:]): - warnings.warn(warning_msg, FutureWarning) - else: - common_all_type = find_common_type( - [index.dtype for index in objs] - ) - common_non_empty_type = find_common_type( - [index.dtype for index in non_empties] - ) - if common_all_type != common_non_empty_type: - warnings.warn(warning_msg, FutureWarning) - if all(isinstance(obj, RangeIndex) for obj in non_empties): - result = _concat_range_index(non_empties) + if all(isinstance(obj, RangeIndex) for obj in objs): + result = _concat_range_index(objs) else: - data = concat_columns([o._column for o in non_empties]) + data = concat_columns([o._column for o in objs]) if cls is IntervalIndex: data = ColumnBase.create( - data.plc_column, non_empties[0]._column.dtype + data.plc_column, objs[0]._column.dtype ) result = Index._from_column(data) @@ -1852,16 +1547,16 @@ def inferred_type(self) -> str: >>> idx.inferred_type 'integer' """ - if self._is_object(): + if is_dtype_obj_string(self.dtype): if len(self) == 0: return "empty" else: return "string" - elif self._is_integer(): + elif self.dtype.kind in "iu": return "integer" - elif self._is_floating(): + elif self.dtype.kind == "f": return "floating" - elif self._is_boolean(): + elif self.dtype.kind == "b": return "boolean" raise NotImplementedError( f"inferred_type not implemented for dtype {self.dtype}" @@ -1879,6 +1574,18 @@ def __sizeof__(self): def is_unique(self) -> bool: return self._column.is_unique + def _maybe_check_unique(self) -> None: + """Raise :class:`~pandas.errors.DuplicateLabelError` if non-unique. + + Mirrors ``pandas.Index._maybe_check_unique``. Used by + ``NDFrame.flags.allows_duplicate_labels`` (``pandas.Flags``) + when setting the flag to ``False``. + """ + if not self.is_unique: + from pandas.errors import DuplicateLabelError + + raise DuplicateLabelError(f"Index has duplicates.\n{self}") + @_performance_tracking def equals(self, other) -> bool: if not isinstance(other, Index) or len(self) != len(other): @@ -2076,10 +1783,7 @@ def __repr__(self) -> str: if len(self) > mr and mr != 0: top = self[0:mr] bottom = self[-1 * mr :] - - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - preprocess = cudf.concat([top, bottom]) + preprocess = cudf.concat([top, bottom]) else: preprocess = self @@ -2089,12 +1793,12 @@ def __repr__(self) -> str: if isinstance(preprocess, CategoricalIndex): if preprocess.categories.dtype.kind == "f": output = repr( - preprocess.astype(CUDF_STRING_DTYPE) + preprocess.astype(DEFAULT_STRING_DTYPE) .to_pandas() .astype( dtype=pd.CategoricalDtype( categories=preprocess.dtype.categories.astype( - CUDF_STRING_DTYPE + DEFAULT_STRING_DTYPE ).to_pandas(), ordered=preprocess.dtype.ordered, ) @@ -2124,8 +1828,12 @@ def __repr__(self) -> str: output = output.replace("nan", str(cudf.NA)) elif preprocess._column.nullable: - if self.dtype == CUDF_STRING_DTYPE: - output = repr(self.to_pandas(nullable=True)) + if is_dtype_obj_string(self.dtype): + output = repr( + self.to_pandas( + nullable=is_pandas_nullable_extension_dtype(self.dtype) + ) + ) else: output = repr(self._pandas_repr_compatible().to_pandas()) # We should remove all the single quotes @@ -2186,30 +1894,6 @@ def notna(self) -> cupy.ndarray: notnull = notna - def _is_numeric(self) -> bool: - return ( - is_dtype_obj_numeric(self._column.dtype, include_decimal=False) - and self.dtype.kind != "b" - ) - - def _is_boolean(self) -> bool: - return self.dtype.kind == "b" - - def _is_integer(self) -> bool: - return self.dtype.kind in "iu" - - def _is_floating(self) -> bool: - return self.dtype.kind == "f" - - def _is_object(self) -> bool: - return self._column.dtype == CUDF_STRING_DTYPE - - def _is_categorical(self) -> bool: - return False - - def _is_interval(self) -> bool: - return False - @cached_property @_performance_tracking def hasnans(self) -> bool: @@ -2355,6 +2039,10 @@ def to_series( name=self.name if name is None else name, ) + @_performance_tracking + def fillna(self, value) -> Self: + return super()._fillna(value) + def append(self, other): if is_list_like(other): to_concat = [self] @@ -2373,12 +2061,12 @@ def append(self, other): if is_mixed_with_object_dtype(this, other): got_dtype = ( other.dtype - if this.dtype == CUDF_STRING_DTYPE + if is_dtype_obj_string(this.dtype) else this.dtype ) raise TypeError( f"cudf does not support appending an Index of " - f"dtype `{CUDF_STRING_DTYPE}` with an Index " + f"dtype `{DEFAULT_STRING_DTYPE}` with an Index " f"of dtype `{got_dtype}`, please type-cast " f"either one of them to same dtypes." ) @@ -2485,7 +2173,7 @@ def get_level_values(self, level: Hashable) -> Self: >>> import cudf >>> idx = cudf.Index(["a", "b", "c"]) >>> idx.get_level_values(0) - Index(['a', 'b', 'c'], dtype='object') + Index(['a', 'b', 'c'], dtype='str') """ if level == self.name: return self @@ -2686,30 +2374,9 @@ def step(self) -> int: def hasnans(self) -> bool: return False - def _pandas_repr_compatible(self) -> Self: + def _pandas_repr_compatible(self, nan_rep=None) -> Self: return self - def _is_numeric(self) -> bool: - return True - - def _is_boolean(self) -> bool: - return False - - def _is_integer(self) -> bool: - return True - - def _is_floating(self) -> bool: - return False - - def _is_object(self) -> bool: - return False - - def _is_categorical(self) -> bool: - return False - - def _is_interval(self) -> bool: - return False - @_performance_tracking def __contains__(self, item: Any) -> bool: hash(item) @@ -2751,7 +2418,7 @@ def astype(self, dtype: Dtype, copy: bool = True) -> Self: return self if not copy else self.copy() return self._as_int_index().astype(dtype, copy=copy) - def fillna(self, value, downcast=None) -> Self: + def fillna(self, value) -> Self: return self.copy() @_performance_tracking @@ -3179,7 +2846,7 @@ def _try_reconstruct_range_index(self, index: Index) -> Self | Index: return index # Evenly spaced values can return a # RangeIndex instead of a materialized Index. - if not index._column.has_nulls(): + if not index._column.has_nulls() and len(index) > 1: uniques = cupy.unique(cupy.diff(index.values)) if len(uniques) == 1 and (diff := uniques[0].get()) != 0: new_range = range(index[0], index[-1] + diff, diff) @@ -3199,20 +2866,13 @@ def sort_values( raise ValueError(f"invalid na_position: {na_position}") sorted_index = self - indexer = RangeIndex(range(len(self))) - - sorted_index = self - if ascending: - if self.step < 0: - sorted_index = self[::-1] - indexer = indexer[::-1] - else: - if self.step > 0: - sorted_index = self[::-1] - indexer = indexer = indexer[::-1] + if (ascending and self.step < 0) or (not ascending and self.step > 0): + sorted_index = self[::-1] if return_indexer: - return sorted_index, indexer + return sorted_index, self.argsort( + ascending=ascending, na_position=na_position + ) else: return sorted_index @@ -3302,9 +2962,12 @@ def searchsorted( return max(min(len(ri), offset), 0) @_performance_tracking - def factorize( - self, sort: bool = False, use_na_sentinel: bool = True + def _factorize( + self, sort: bool, use_na_sentinel: bool ) -> tuple[cupy.ndarray, Self]: + # Specialized: the uniques of a RangeIndex are the RangeIndex + # itself (or its reverse when ``sort`` flips a decreasing range), + # not a generic Index built from a materialized column. if sort and self.step < 0: codes = cupy.arange(len(self) - 1, -1, -1) uniques = self[::-1] @@ -3522,8 +3185,6 @@ def __init__( data=None, freq=None, tz=None, - normalize: bool = False, - closed=None, ambiguous: Literal["raise"] = "raise", dayfirst: bool = False, yearfirst: bool = False, @@ -3542,20 +3203,6 @@ def __init__( if tz is not None: raise NotImplementedError("tz is not yet supported") - if normalize is not False: - warnings.warn( - "The 'normalize' keyword is " - "deprecated and will be removed in a future version. ", - FutureWarning, - ) - raise NotImplementedError("normalize == True is not yet supported") - if closed is not None: - warnings.warn( - "The 'closed' keyword is " - "deprecated and will be removed in a future version. ", - FutureWarning, - ) - raise NotImplementedError("closed is not yet supported") if ambiguous != "raise": raise NotImplementedError("ambiguous is not yet supported") if dayfirst is not False: @@ -3583,8 +3230,18 @@ def __init__( elif not isinstance(data.dtype, pd.DatetimeTZDtype): data = data.astype(dtype) elif data.dtype.kind != "M": - # nanosecond default matches pandas - data = data.astype(np.dtype("datetime64[ns]")) + if is_dtype_obj_string(data.dtype): + # Pandas's array_to_datetime falls back to [s] when no + # concrete (non-NaT) datetime is observed — empty input or + # an all-NaT/None array (pandas-dev/pandas#55901). Otherwise + # parsed strings land on [us]. + if len(data) == 0 or data.null_count == len(data): + target_unit = "s" + else: + target_unit = "us" + data = data.astype(np.dtype(f"datetime64[{target_unit}]")) + else: + data = data.astype(np.dtype("datetime64[ns]")) if copy: data = data.copy() @@ -3594,23 +3251,8 @@ def __init__( ) self._freq = _validate_freq(freq) # existing pandas index needs no additional validation - if self._freq is not None and not was_pd_index: - unique_vals = self.to_series().diff().unique() - if self._freq == cudf.DateOffset(months=1): - possible = pd.Series(list(self.MONTHLY_PERIODS | {pd.NaT})) - if unique_vals.isin(possible).sum() != len(unique_vals): - raise ValueError("No unique frequency found") - elif self._freq == cudf.DateOffset(years=1): - possible = pd.Series(list(self.YEARLY_PERIODS | {pd.NaT})) - if unique_vals.isin(possible).sum() != len(unique_vals): - raise ValueError("No unique frequency found") - else: - if len(unique_vals) > 2 or ( - len(unique_vals) == 2 - and unique_vals[1] - != self._freq._maybe_as_fast_pandas_offset() - ): - raise ValueError("No unique frequency found") + if not was_pd_index: + self._validate_freq_against_data(self._freq) @_performance_tracking def serialize(self): @@ -3641,9 +3283,11 @@ def _from_columns_like_self( columns: list[ColumnBase], column_names: Iterable[str] | None = None, ): - result = super()._from_columns_like_self(columns, column_names) - result._freq = _validate_freq(self._freq) - return result + # Callers (e.g. _gather, sort_values) reorder or filter values, so we + # cannot assume self._freq still applies to the result. Leave _freq + # unset (None) and let callers that know the freq is preserved set it + # explicitly. Matches pandas, which drops freq on these operations. + return super()._from_columns_like_self(columns, column_names) @classmethod def _from_data( @@ -3732,7 +3376,11 @@ def strftime(self, date_format: str) -> Index: Date format string (e.g. "%Y-%m-%d"). """ return Index._from_column( - self._column.strftime(date_format), name=self.name + self._column.strftime( + date_format, + dtype=get_dtype_of_same_kind(self.dtype, DEFAULT_STRING_DTYPE), + ), + name=self.name, ) @cached_property @@ -3784,7 +3432,9 @@ def inferred_freq(self) -> DateOffset | MonthEnd | YearEnd | None: uniques_host = uniques.to_arrow().to_pylist() if uniques.size() == 1: # base case of a fixed frequency - freq = uniques_host[0] + # Arrow to_pylist() returns datetime.timedelta; wrap in pd.Timedelta + # so .components and comparisons work correctly. + freq = pd.Timedelta(uniques_host[0]) # special case of YS-JAN, YS-FEB, etc # 365 days is allowable, but if it's the first of the month, pandas @@ -3796,7 +3446,6 @@ def inferred_freq(self) -> DateOffset | MonthEnd | YearEnd | None: elif freq == pd.Timedelta("7 days"): raise NotImplementedError("Can't infer anchored week") - assert isinstance(freq, pd.Timedelta) # pacify mypy cmps = freq.components kwds = {} @@ -3834,22 +3483,58 @@ def _get_slice_frequency(self, slc=None): else: if slc: # fastpath: dont introspect - new_freq = slc.step * pd.Timedelta( - self._freq._maybe_as_fast_pandas_offset() - ) + # Multiply the pandas offset directly (pd.Timedelta(offset) + # fails for calendar-based offsets like Day in pandas 3). + new_freq = slc.step * self._freq._maybe_as_fast_pandas_offset() return cudf.DateOffset._from_freqstr( pd.tseries.frequencies.to_offset(new_freq).freqstr ) else: return self.inferred_freq + def _validate_freq_against_data(self, freq) -> None: + if freq is None: + return + unique_vals = cudf.Series._from_column( + self.to_series().diff()._column.unique() + ) + if freq == cudf.DateOffset(months=1): + possible = pd.Series(list(self.MONTHLY_PERIODS | {pd.NaT})) + if unique_vals.isin(possible).sum() != len(unique_vals): + raise ValueError( + f"Inferred frequency from passed values does not " + f"conform to passed frequency " + f"{freq._maybe_as_fast_pandas_offset().freqstr}" + ) + elif freq == cudf.DateOffset(years=1): + possible = pd.Series(list(self.YEARLY_PERIODS | {pd.NaT})) + if unique_vals.isin(possible).sum() != len(unique_vals): + raise ValueError( + f"Inferred frequency from passed values does not " + f"conform to passed frequency " + f"{freq._maybe_as_fast_pandas_offset().freqstr}" + ) + else: + if len(unique_vals) > 2 or ( + len(unique_vals) == 2 + and unique_vals[1].value + != freq._maybe_as_fast_pandas_offset().nanos + ): + raise ValueError( + f"Inferred frequency from passed values does not " + f"conform to passed frequency " + f"{freq._maybe_as_fast_pandas_offset().freqstr}" + ) + @property def freq(self) -> DateOffset | None: return self._freq @freq.setter - def freq(self) -> None: - raise NotImplementedError("Setting freq is currently not supported.") + def freq(self, value) -> None: + new_freq = _validate_freq(value) + self._validate_freq_against_data(new_freq) + self._freq = new_freq @property def freqstr(self) -> str: @@ -3901,7 +3586,7 @@ def to_julian_date(self) -> Index: self._column.to_julian_date(), name=self.name ) - def to_period(self, freq) -> pd.PeriodIndex: + def to_period(self, freq=None) -> pd.PeriodIndex: return self.to_pandas().to_period(freq=freq) def normalize(self) -> Self: @@ -4027,9 +3712,9 @@ def year(self) -> Index: >>> import cudf >>> import pandas as pd >>> datetime_index = cudf.Index(pd.date_range("2000-01-01", - ... periods=3, freq="Y")) + ... periods=3, freq="YE")) >>> datetime_index - DatetimeIndex(['2000-12-31', '2001-12-31', '2002-12-31'], dtype='datetime64[ns]', freq='YE-DEC') + DatetimeIndex(['2000-12-31', '2001-12-31', '2002-12-31'], dtype='datetime64[us]', freq='YE-DEC') >>> datetime_index.year Index([2000, 2001, 2002], dtype='int32') """ @@ -4047,9 +3732,9 @@ def month(self) -> Index: >>> import cudf >>> import pandas as pd >>> datetime_index = cudf.Index(pd.date_range("2000-01-01", - ... periods=3, freq="M")) + ... periods=3, freq="ME")) >>> datetime_index - DatetimeIndex(['2000-01-31', '2000-02-29', '2000-03-31'], dtype='datetime64[ns]', freq='ME') + DatetimeIndex(['2000-01-31', '2000-02-29', '2000-03-31'], dtype='datetime64[us]', freq='ME') >>> datetime_index.month Index([1, 2, 3], dtype='int32') """ @@ -4069,7 +3754,7 @@ def day(self) -> Index: >>> datetime_index = cudf.Index(pd.date_range("2000-01-01", ... periods=3, freq="D")) >>> datetime_index - DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03'], dtype='datetime64[ns]', freq='D') + DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03'], dtype='datetime64[us]', freq='D') >>> datetime_index.day Index([1, 2, 3], dtype='int32') """ @@ -4091,7 +3776,7 @@ def hour(self) -> Index: >>> datetime_index DatetimeIndex(['2000-01-01 00:00:00', '2000-01-01 01:00:00', '2000-01-01 02:00:00'], - dtype='datetime64[ns]', freq='h') + dtype='datetime64[us]', freq='h') >>> datetime_index.hour Index([0, 1, 2], dtype='int32') """ @@ -4109,11 +3794,11 @@ def minute(self) -> Index: >>> import pandas as pd >>> import cudf >>> datetime_index = cudf.Index(pd.date_range("2000-01-01", - ... periods=3, freq="T")) + ... periods=3, freq="min")) >>> datetime_index DatetimeIndex(['2000-01-01 00:00:00', '2000-01-01 00:01:00', '2000-01-01 00:02:00'], - dtype='datetime64[ns]', freq='min') + dtype='datetime64[us]', freq='min') >>> datetime_index.minute Index([0, 1, 2], dtype='int32') """ @@ -4135,7 +3820,7 @@ def second(self) -> Index: >>> datetime_index DatetimeIndex(['2000-01-01 00:00:00', '2000-01-01 00:00:01', '2000-01-01 00:00:02'], - dtype='datetime64[ns]', freq='s') + dtype='datetime64[us]', freq='s') >>> datetime_index.second Index([0, 1, 2], dtype='int32') """ @@ -4157,7 +3842,7 @@ def microsecond(self) -> Index: >>> datetime_index DatetimeIndex([ '2000-01-01 00:00:00', '2000-01-01 00:00:00.000001', '2000-01-01 00:00:00.000002'], - dtype='datetime64[ns]', freq='us') + dtype='datetime64[us]', freq='us') >>> datetime_index.microsecond Index([0, 1, 2], dtype='int32') """ @@ -4203,7 +3888,7 @@ def weekday(self) -> Index: DatetimeIndex(['2016-12-31', '2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08'], - dtype='datetime64[ns]', freq='D') + dtype='datetime64[us]', freq='D') >>> datetime_index.weekday Index([5, 6, 0, 1, 2, 3, 4, 5, 6], dtype='int32') """ @@ -4226,7 +3911,7 @@ def dayofweek(self) -> Index: DatetimeIndex(['2016-12-31', '2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08'], - dtype='datetime64[ns]', freq='D') + dtype='datetime64[us]', freq='D') >>> datetime_index.dayofweek Index([5, 6, 0, 1, 2, 3, 4, 5, 6], dtype='int32') """ @@ -4250,7 +3935,7 @@ def dayofyear(self) -> Index: DatetimeIndex(['2016-12-31', '2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08'], - dtype='datetime64[ns]', freq='D') + dtype='datetime64[us]', freq='D') >>> datetime_index.dayofyear Index([366, 1, 2, 3, 4, 5, 6, 7, 8], dtype='int16') """ @@ -4274,7 +3959,7 @@ def day_of_year(self) -> Index: DatetimeIndex(['2016-12-31', '2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08'], - dtype='datetime64[ns]', freq='D') + dtype='datetime64[us]', freq='D') >>> datetime_index.day_of_year Index([366, 1, 2, 3, 4, 5, 6, 7, 8], dtype='int16') """ @@ -4337,16 +4022,16 @@ def day_name(self, locale: str | None = None) -> Index: Examples -------- >>> import cudf - >>> datetime_index = cudf.date_range("2016-12-31", "2017-01-08", freq="D") + >>> datetime_index = cudf.date_range("2016-12-31", "2017-01-08", freq="24h") >>> datetime_index DatetimeIndex(['2016-12-31', '2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08'], - dtype='datetime64[ns]', freq='D') + dtype='datetime64[us]', freq='24h') >>> datetime_index.day_name() Index(['Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], - dtype='object') + dtype='str') """ day_names = self._column.get_day_names(locale) return Index._from_column(day_names, name=self.name) @@ -4363,9 +4048,9 @@ def month_name(self, locale: str | None = None) -> Index: >>> datetime_index DatetimeIndex(['2017-12-30', '2018-01-06', '2018-01-13', '2018-01-20', '2018-01-27', '2018-02-03'], - dtype='datetime64[ns]', freq='7D') + dtype='datetime64[us]', freq='W') >>> datetime_index.month_name() - Index(['December', 'January', 'January', 'January', 'January', 'February'], dtype='object') + Index(['December', 'January', 'January', 'January', 'January', 'February'], dtype='str') """ month_names = self._column.get_month_names(locale) return Index._from_column(month_names, name=self.name) @@ -4399,12 +4084,22 @@ def to_pandas( ) -> pd.DatetimeIndex: result = super().to_pandas(nullable=nullable, arrow_type=arrow_type) if not arrow_type and self._freq is not None: - result.freq = self._freq._maybe_as_fast_pandas_offset() + # Prefer pandas's inferred_freq because the cached self._freq may + # not conform (e.g. after deserialization or external assignment) + # and pandas validates the assignment against the index values. + # Fall back to the cached freq when inference is impossible + # (empty / single-element indexes), so resample round-trips + # preserve `freq` to match pandas. + inferred = result.inferred_freq + if inferred is None: + try: + result.freq = self._freq._maybe_as_fast_pandas_offset() + except ValueError: + pass + else: + result.freq = inferred return result - def _is_boolean(self) -> bool: - return False - @_performance_tracking def ceil(self, freq: str) -> Self: """ @@ -4413,7 +4108,7 @@ def ceil(self, freq: str) -> Self: Parameters ---------- freq : str - One of ["D", "H", "T", "min", "S", "L", "ms", "U", "us", "N"]. + One of ["D", "h", "min", "S", "L", "ms", "U", "us", "N"]. Must be a fixed frequency like 'S' (second) not 'ME' (month end). See `frequency aliases `__ @@ -4431,8 +4126,8 @@ def ceil(self, freq: str) -> Self: ... "2020-05-31 08:05:42", ... "1999-12-31 18:40:30", ... ]) - >>> gIndex.ceil("T") - DatetimeIndex(['2020-05-31 08:06:00', '1999-12-31 18:41:00'], dtype='datetime64[ns]') + >>> gIndex.ceil("min") + DatetimeIndex(['2020-05-31 08:06:00', '1999-12-31 18:41:00'], dtype='datetime64[us]') """ return type(self)._from_column(self._column.ceil(freq), name=self.name) @@ -4444,7 +4139,7 @@ def floor(self, freq: str) -> Self: Parameters ---------- freq : str - One of ["D", "H", "T", "min", "S", "L", "ms", "U", "us", "N"]. + One of ["D", "h", "min", "S", "L", "ms", "U", "us", "N"]. Must be a fixed frequency like 'S' (second) not 'ME' (month end). See `frequency aliases `__ @@ -4462,8 +4157,8 @@ def floor(self, freq: str) -> Self: ... "2020-05-31 08:59:59", ... "1999-12-31 18:44:59", ... ]) - >>> gIndex.floor("T") - DatetimeIndex(['2020-05-31 08:59:00', '1999-12-31 18:44:00'], dtype='datetime64[ns]') + >>> gIndex.floor("min") + DatetimeIndex(['2020-05-31 08:59:00', '1999-12-31 18:44:00'], dtype='datetime64[us]') """ return type(self)._from_column( self._column.floor(freq), name=self.name @@ -4477,7 +4172,7 @@ def round(self, freq: str) -> Self: Parameters ---------- freq : str - One of ["D", "H", "T", "min", "S", "L", "ms", "U", "us", "N"]. + One of ["D", "h", "min", "S", "L", "ms", "U", "us", "N"]. Must be a fixed frequency like 'S' (second) not 'ME' (month end). See `frequency aliases `__ @@ -4500,9 +4195,9 @@ def round(self, freq: str) -> Self: DatetimeIndex(['2001-01-01 00:04:45', '2001-01-01 00:04:58', '2001-01-01 00:05:04'], dtype='datetime64[ns]') - >>> dt_idx.round('H') + >>> dt_idx.round('h') DatetimeIndex(['2001-01-01', '2001-01-01', '2001-01-01'], dtype='datetime64[ns]') - >>> dt_idx.round('T') + >>> dt_idx.round('min') DatetimeIndex(['2001-01-01 00:05:00', '2001-01-01 00:05:00', '2001-01-01 00:05:00'], dtype='datetime64[ns]') """ return type(self)._from_column( @@ -4531,12 +4226,12 @@ def tz_localize( -------- >>> import cudf >>> import pandas as pd - >>> tz_naive = cudf.date_range('2018-03-01 09:00', periods=3, freq='D') + >>> tz_naive = cudf.date_range('2018-03-01 09:00', periods=3, freq='24h') >>> tz_aware = tz_naive.tz_localize("America/New_York") >>> tz_aware DatetimeIndex(['2018-03-01 09:00:00-05:00', '2018-03-02 09:00:00-05:00', '2018-03-03 09:00:00-05:00'], - dtype='datetime64[ns, America/New_York]', freq='D') + dtype='datetime64[us, America/New_York]', freq='24h') Ambiguous or nonexistent datetimes are converted to NaT. @@ -4544,10 +4239,10 @@ def tz_localize( ... '2018-10-28 02:36:00', ... '2018-10-28 03:46:00'])) >>> s.dt.tz_localize("CET") - 0 2018-10-28 01:20:00.000000000 - 1 NaT - 2 2018-10-28 03:46:00.000000000 - dtype: datetime64[ns, CET] + 0 2018-10-28 01:20:00.000000 + 1 NaT + 2 2018-10-28 03:46:00.000000 + dtype: datetime64[us, CET] Notes ----- @@ -4581,26 +4276,21 @@ def tz_convert(self, tz: str | None) -> Self: Examples -------- >>> import cudf - >>> dti = cudf.date_range('2018-03-01 09:00', periods=3, freq='D') + >>> dti = cudf.date_range('2018-03-01 09:00', periods=3, freq='24h') >>> dti = dti.tz_localize("America/New_York") >>> dti DatetimeIndex(['2018-03-01 09:00:00-05:00', '2018-03-02 09:00:00-05:00', '2018-03-03 09:00:00-05:00'], - dtype='datetime64[ns, America/New_York]', freq='D') + dtype='datetime64[us, America/New_York]', freq='24h') >>> dti.tz_convert("Europe/London") DatetimeIndex(['2018-03-01 14:00:00+00:00', '2018-03-02 14:00:00+00:00', '2018-03-03 14:00:00+00:00'], - dtype='datetime64[ns, Europe/London]') + dtype='datetime64[us, Europe/London]') """ result_col = self._column.tz_convert(tz) return DatetimeIndex._from_column(result_col, name=self.name) - def repeat(self, repeats, axis=None) -> Self: - res = super().repeat(repeats, axis=axis) - res._freq = None - return res - class TimedeltaIndex(Index): """ @@ -4611,14 +4301,10 @@ class TimedeltaIndex(Index): ---------- data : array-like (1-dimensional), optional Optional datetime-like data to construct index with. - unit : str, optional - This is not yet supported copy : bool Make a copy of input. freq : str, optional This is not yet supported - closed : str, optional - This is not yet supported dtype : str or :class:`numpy.dtype`, optional Data type for the output Index. If not specified, the default dtype will be ``timedelta64[ns]``. @@ -4661,9 +4347,7 @@ class TimedeltaIndex(Index): def __init__( self, data=None, - unit=None, freq=None, - closed=None, dtype=None, copy: bool = False, name=None, @@ -4672,28 +4356,9 @@ def __init__( if freq is not None: raise NotImplementedError("freq is not yet supported") - if closed is not None: - warnings.warn( - "The 'closed' keyword is " - "deprecated and will be removed in a future version. ", - FutureWarning, - ) - raise NotImplementedError("closed is not yet supported") - - if unit is not None: - warnings.warn( - "The 'unit' keyword is " - "deprecated and will be removed in a future version. ", - FutureWarning, - ) - raise NotImplementedError( - "unit is not yet supported, alternatively " - "dtype parameter is supported" - ) - name = _getdefault_name(data, name=name) col = as_column(data) - if col.dtype == CUDF_STRING_DTYPE: + if is_dtype_obj_string(col.dtype): # String -> Timedelta parsing via astype isn't rigorous enough yet # to cover cudf.pandas test cases, go through pandas instead. col = as_column(pd.to_timedelta(data)) @@ -4704,8 +4369,10 @@ def __init__( raise TypeError("dtype must be a timedelta type") col = col.astype(dtype) elif col.dtype.kind != "m": - # nanosecond default matches pandas - col = col.astype(np.dtype("timedelta64[ns]")) + if is_dtype_obj_string(col.dtype): + col = col.astype(np.dtype("timedelta64[us]")) + else: + col = col.astype(np.dtype("timedelta64[ns]")) if copy: col = col.copy() @@ -4902,9 +4569,6 @@ def inferred_freq(self): """ raise NotImplementedError("inferred_freq is not yet supported") - def _is_boolean(self) -> bool: - return False - class CategoricalIndex(Index): """ @@ -5089,12 +4753,6 @@ def categories(self) -> Index: """ return self.dtype.categories - def _is_boolean(self) -> bool: - return False - - def _is_categorical(self) -> bool: - return True - def add_categories(self, new_categories) -> Self: """ Add new categories. @@ -5265,11 +4923,12 @@ def interval_range( ) if periods is not None and not is_integer(periods): - warnings.warn( - "Non-integer 'periods' in cudf.date_range, and cudf.interval_range" - " are deprecated and will raise in a future version.", - FutureWarning, - ) + raise TypeError(f"periods must be an integer, got {periods}") + + # Track whether all three of start/end/freq were provided before + # computing the missing parameter, since the dtype logic differs. + have_all_sef = all(x is not None for x in (start, end, freq)) + if start is None: start = end - freq * periods elif freq is None: @@ -5295,13 +4954,32 @@ def interval_range( ): raise ValueError("start, end, periods, freq must be numeric values.") - common_dtype = find_common_type( - ( - cudf_dtype_from_pa_type(pa_start.type), - cudf_dtype_from_pa_type(pa_freq.type), - cudf_dtype_from_pa_type(pa_end.type), + # Determine output dtype matching pandas behaviour. + common_dtype: np.dtype = np.dtype("int64") + if have_all_sef: + if ( + isinstance(start, (np.integer, np.floating)) + and isinstance(end, (np.integer, np.floating)) + and start.dtype == end.dtype + ): + common_dtype = start.dtype + elif any( + isinstance(x, (float, np.floating)) for x in (start, end, freq) + ): + common_dtype = np.dtype("float64") + else: + common_dtype = find_common_type( + [x for x in (start, end) if x is not None] ) - ) + if all(is_integer(x) for x in (start, end) if x is not None): + common_dtype = np.dtype("int64") + + # If freq has a fractional part but common_dtype is integer, + # promote to float64 so the cast doesn't truncate. + if common_dtype.kind == "i" and isinstance(freq, (float, np.floating)): + if freq != int(freq): + common_dtype = np.dtype("float64") + pa_start = pa_start.cast(cudf_dtype_to_pa_type(common_dtype)) pa_freq = pa_freq.cast(cudf_dtype_to_pa_type(common_dtype)) @@ -5481,7 +5159,7 @@ def from_breaks( if ( len(breaks) == 0 and dtype is None - and breaks.dtype == CUDF_STRING_DTYPE + and is_dtype_obj_string(breaks.dtype) ): breaks = breaks.astype(np.dtype(np.int64)) if copy: @@ -5552,10 +5230,7 @@ def __getitem__(self, index): def _is_interval(self) -> bool: return True - def _is_boolean(self) -> bool: - return False - - def _pandas_repr_compatible(self) -> Self: + def _pandas_repr_compatible(self, nan_rep=None) -> Self: return self @property diff --git a/python/cudf/cudf/core/indexed_frame.py b/python/cudf/cudf/core/indexed_frame.py index 71e822832912..7fa18b703f8c 100644 --- a/python/cudf/cudf/core/indexed_frame.py +++ b/python/cudf/cudf/core/indexed_frame.py @@ -6,7 +6,6 @@ import copy import itertools -import operator import textwrap import warnings from collections import Counter @@ -38,7 +37,6 @@ is_scalar, is_string_dtype, ) -from cudf.core._compat import PANDAS_LT_300 from cudf.core._internals import copying from cudf.core.column import ( CategoricalColumn, @@ -51,7 +49,11 @@ from cudf.core.column_accessor import ColumnAccessor from cudf.core.common import pipe from cudf.core.copy_types import BooleanMask, GatherMap -from cudf.core.dtype.validators import is_dtype_obj_list, is_dtype_obj_numeric +from cudf.core.dtype.validators import ( + is_dtype_obj_list, + is_dtype_obj_numeric, + is_dtype_obj_string, +) from cudf.core.frame import Frame from cudf.core.groupby.groupby import GroupBy from cudf.core.index import Index, RangeIndex, _index_from_data, ensure_index @@ -69,7 +71,6 @@ from cudf.utils._numba import _CUDFNumbaConfig from cudf.utils.docutils import copy_docstring from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, SIZE_TYPE_DTYPE, can_convert_to_column, cudf_dtype_to_pa_type, @@ -79,13 +80,13 @@ is_column_like, is_mixed_with_object_dtype, is_pandas_nullable_extension_dtype, + is_pandas_nullable_numpy_dtype, ) from cudf.utils.performance_tracking import _performance_tracking from cudf.utils.utils import _warn_no_dask_cudf if TYPE_CHECKING: from collections.abc import ( - Callable, Hashable, Iterable, MutableMapping, @@ -234,19 +235,37 @@ def append_new_row(self, key, value, columns_df=None, column=None): name=idx.name, ) else: - idx_copy = idx._as_int_index() - _append_new_row_inplace(idx_copy._column, key_val) + int_idx = idx._as_int_index() + new_index_col = _append_new_row(int_idx._column, key_val) + idx_copy = cudf.Index._from_column( + new_index_col, name=int_idx.name + ) else: - idx_copy = idx.copy(deep=True) - _append_new_row_inplace(idx_copy._column, key_val) - - # Append value(s) to column(s) + new_index_col = _append_new_row(idx._column, key_val) + idx_copy = cudf.Index._from_column(new_index_col, name=idx.name) + + # Append value(s) to column(s) without mutating the existing + # column object. Column objects can be shared between Series + # and DataFrame views, so in-place mutation would corrupt views. + # Bypass ColumnAccessor's length-validation by writing to the + # underlying mapping directly; both `nrows` and the cached + # `columns` tuple are invalidated so the frame's view of its + # columns reflects the new lengths. + old_ncols = len(self._frame._data) if columns_df is not None: for col in columns_df._column_names: - _append_new_row_inplace(self._frame._data[col], value) + self._frame._data._data[col] = _append_new_row( + self._frame._data[col], value + ) elif column is not None: - _append_new_row_inplace(self._frame._column, value) + new_col = _append_new_row(self._frame._column, value) + self._frame._data._data[self._frame.name] = new_col + try: + del self._frame._data.nrows + except AttributeError: + pass + self._frame._data._clear_cache(old_ncols, len(self._frame._data)) self._frame._index = idx_copy @@ -295,6 +314,7 @@ def __init__( data: ColumnAccessor | MutableMapping[Any, ColumnBase], index: Index, attrs: dict[Hashable, Any] | None = None, + allows_duplicate_labels: bool = True, ): super().__init__(data=data) if not isinstance(index, Index): @@ -311,6 +331,9 @@ def __init__( self._attrs = {} else: self._attrs = attrs + self._flags = pd.Flags( + self, allows_duplicate_labels=allows_duplicate_labels + ) @property def _num_rows(self) -> int: @@ -356,12 +379,100 @@ def attrs(self) -> dict[Hashable, Any]: def attrs(self, value: Mapping[Hashable, Any]) -> None: self._attrs = dict(value) + @property + def flags(self) -> pd.Flags: + """ + Get the properties associated with this cudf object. + + The available flags are + + * :attr:`pandas.Flags.allows_duplicate_labels` + + See Also + -------- + pandas.Flags : Flags that apply to cudf objects. + DataFrame.attrs : Global metadata applying to this dataset. + + Notes + ----- + "Flags" differ from "metadata". Flags reflect properties of the + :class:`Series` or :class:`DataFrame` (e.g. whether it allows + duplicate labels). Metadata refer to properties of the dataset, + and should be stored in ``DataFrame.attrs``. + + Examples + -------- + >>> import cudf + >>> df = cudf.DataFrame({"A": [1, 2]}) + >>> df.flags + + + Flags can be set via ``set_flags`` or by directly mutating the + ``pandas.Flags`` object: + + >>> df.flags.allows_duplicate_labels = False + >>> df.flags + + """ + return self._flags + + def set_flags( + self, + *, + copy: bool = False, + allows_duplicate_labels: bool | None = None, + ) -> Self: + """ + Return a new object with updated flags. + + Parameters + ---------- + copy : bool, default False + Specify if a copy of the object should be made. The default + value is preserved for compatibility with pandas. + allows_duplicate_labels : bool, optional + Whether the returned object allows duplicate labels. + + Returns + ------- + Series or DataFrame + The same type as the caller. + + See Also + -------- + DataFrame.attrs : Global metadata applying to this dataset. + DataFrame.flags : Global flags applying to this object. + + Notes + ----- + This method returns a new object that's a view on the same data. + The returned object will have ``flags.allows_duplicate_labels`` + set to the value passed. Unlike the pandas version, the default + of ``copy=False`` does not share memory between the two objects + because cudf backs all operations with copy-on-write buffers. + + Examples + -------- + >>> import cudf + >>> df = cudf.DataFrame({"A": [1, 2]}) + >>> df.flags.allows_duplicate_labels + True + >>> df2 = df.set_flags(allows_duplicate_labels=False) + >>> df2.flags.allows_duplicate_labels + False + """ + df = self.copy(deep=copy) + if allows_duplicate_labels is not None: + df.flags["allows_duplicate_labels"] = allows_duplicate_labels + return df + @classmethod def _from_data( cls, data: MutableMapping, index: Index | None = None, attrs: dict | None = None, + allows_duplicate_labels: bool = True, ): out = super()._from_data(data) if index is None: @@ -373,8 +484,27 @@ def _from_data( ) out._index = index out._attrs = {} if attrs is None else attrs + out._flags = pd.Flags( + out, allows_duplicate_labels=allows_duplicate_labels + ) return out + def _propagate_metadata(self, result: "IndexedFrame") -> "IndexedFrame": + """Copy ``attrs`` and ``flags`` from ``self`` onto ``result``. + + Mirrors pandas' ``__finalize__``: ``attrs`` are deep-copied and + ``allows_duplicate_labels`` is propagated unchanged. The + :class:`~pandas.errors.DuplicateLabelError` check is performed by + :class:`pandas.Flags` when setting ``allows_duplicate_labels`` to + ``False``. + """ + result._attrs = copy.deepcopy(self._attrs) + result._flags = pd.Flags(result, allows_duplicate_labels=True) + result.flags.allows_duplicate_labels = ( + self._flags.allows_duplicate_labels + ) + return result + @_performance_tracking def _get_columns_by_label(self, labels) -> Self: """ @@ -382,17 +512,21 @@ def _get_columns_by_label(self, labels) -> Self: Akin to cudf.DataFrame(...).loc[:, labels] """ - return self._from_data( + out = self._from_data( self._data.select_by_label(labels), index=self.index, - attrs=self.attrs, ) + self._propagate_metadata(out) + return out @_performance_tracking def _from_data_like_self(self, data: MutableMapping): out = super()._from_data_like_self(data) out.index = self.index out._attrs = copy.deepcopy(self._attrs) + out._flags = pd.Flags( + out, allows_duplicate_labels=self._flags.allows_duplicate_labels + ) return out @_performance_tracking @@ -439,7 +573,9 @@ def _from_columns_like_self( index._freq = self.index._freq data = dict(zip(column_names, data_columns, strict=True)) - return type(self)._from_data(data, index, attrs=self.attrs) + out = type(self)._from_data(data, index) + self._propagate_metadata(out) + return out def __round__(self, digits=0): # Shouldn't be added to BinaryOperand @@ -453,6 +589,10 @@ def _mimic_inplace( if inplace: self._index = result.index self._attrs = result._attrs + self._flags = pd.Flags( + self, + allows_duplicate_labels=result._flags.allows_duplicate_labels, + ) return super()._mimic_inplace(result, inplace) @_performance_tracking @@ -590,8 +730,9 @@ def copy(self, deep: bool = True) -> Self: original object (see notes below). When ``deep=False``, a new object will be created without copying the calling object's data or index (only references to the data - and index are copied). Any changes to the data of the original - will be reflected in the shallow copy (and vice versa). + and index are copied). Data is shared via copy-on-write, so + modifications to either object will trigger a physical copy and + will not be reflected in the other. Parameters ---------- @@ -623,17 +764,18 @@ def copy(self, deep: bool = True) -> Self: >>> deep = s.copy() >>> shallow = s.copy(deep=False) - Updates to the data shared by shallow copy and original is reflected - in both; deep copy remains unchanged. + Shallow copy shares data via copy-on-write. Modifications to + either the original or the shallow copy trigger a physical copy, + so changes are not reflected in the other. >>> s['a'] = 3 >>> shallow['b'] = 4 >>> s a 3 - b 4 + b 2 dtype: int64 >>> shallow - a 3 + a 1 b 4 dtype: int64 >>> deep @@ -645,6 +787,7 @@ def copy(self, deep: bool = True) -> Self: self._data.copy(deep=deep), self.index.copy(deep=deep), attrs=copy.deepcopy(self.attrs) if deep else self._attrs, + allows_duplicate_labels=self._flags.allows_duplicate_labels, ) @_performance_tracking @@ -676,10 +819,9 @@ def replace( self, to_replace=None, value=no_default, + *, inplace: bool = False, - limit=None, regex: bool = False, - method=no_default, ) -> Self | None: """Replace values given in ``to_replace`` with ``value``. @@ -774,14 +916,14 @@ def replace( 2 a 3 b 4 a - dtype: object + dtype: str >>> s.replace({'a': None}) 0 b - 1 None - 2 None + 1 NaN + 2 NaN 3 b - 4 None - dtype: object + 4 NaN + dtype: str If there is a mismatch in types of the values in ``to_replace`` & ``value`` with the actual series, then @@ -794,15 +936,15 @@ def replace( 2 a 3 b 4 a - dtype: object + dtype: str >>> s.replace('a', 1) Traceback (most recent call last): ... - TypeError: to_replace and value should be of same types,got to_replace dtype: object and value dtype: int64 + TypeError: to_replace and value should be of same types,got to_replace dtype: str and value dtype: int64 >>> s.replace(['a', 'c'], [1, 2]) Traceback (most recent call last): ... - TypeError: to_replace and value should be of same types,got to_replace dtype: object and value dtype: int64 + TypeError: to_replace and value should be of same types,got to_replace dtype: str and value dtype: int64 **DataFrame** @@ -864,38 +1006,19 @@ def replace( .. pandas-compat:: :meth:`pandas.DataFrame.replace`, :meth:`pandas.Series.replace` - Parameters that are currently not supported are: `limit`, `regex`, - `method` + `regex` is not currently supported. """ - if limit is not None: - raise NotImplementedError("limit parameter is not implemented yet") - if regex: raise NotImplementedError("regex parameter is not implemented yet") - if method is not no_default: - warnings.warn( - "The 'method' keyword in " - f"{type(self).__name__}.replace is deprecated and " - "will be removed in a future version.", - FutureWarning, - ) - elif method not in {"pad", None, no_default}: - raise NotImplementedError("method parameter is not implemented") - - if ( - value is no_default - and method is no_default - and not is_dict_like(to_replace) - and regex is False + if value is no_default and not ( + is_dict_like(to_replace) or is_dict_like(regex) ): - warnings.warn( - f"{type(self).__name__}.replace without 'value' and with " - "non-dict-like 'to_replace' is deprecated " - "and will raise in a future version. " - "Explicitly specify the new values instead.", - FutureWarning, + raise ValueError( + f"{type(self).__name__}.replace must specify either 'value', " + "a dict-like 'to_replace', or dict-like 'regex'." ) + if not (to_replace is None and value is no_default): ( all_na_per_column, @@ -1186,7 +1309,10 @@ def dot(self, other, reflect=False): index=self.index if result_index is None else result_index, columns=result_cols, ) - return result.item() + # 0-d result: return a numpy scalar (e.g. np.int64) to match + # pandas' ``np.matmul(Series, Series)`` semantics rather than the + # Python ``int`` produced by ``cupy.ndarray.item``. + return result.get()[()] @_performance_tracking def __matmul__(self, other): @@ -1232,7 +1358,7 @@ def head(self, n=5): 6 shark 7 whale 8 zebra - dtype: object + dtype: str Viewing the first 5 lines @@ -1242,7 +1368,7 @@ def head(self, n=5): 2 falcon 3 lion 4 monkey - dtype: object + dtype: str Viewing the first `n` lines (three in this case) @@ -1250,7 +1376,7 @@ def head(self, n=5): 0 alligator 1 bee 2 falcon - dtype: object + dtype: str For negative values of `n` @@ -1261,7 +1387,7 @@ def head(self, n=5): 3 lion 4 monkey 5 parrot - dtype: object + dtype: str **DataFrame** @@ -1349,7 +1475,7 @@ def pipe(self, func, *args, **kwargs): @_performance_tracking def sum( self, - axis=no_default, + axis: Axis | None = 0, skipna: bool = True, numeric_only: bool = False, min_count: int = 0, @@ -1401,7 +1527,7 @@ def sum( @_performance_tracking def product( self, - axis=no_default, + axis: Axis | None = 0, skipna=True, numeric_only=False, min_count=0, @@ -1459,7 +1585,7 @@ def product( @_performance_tracking def mean( self, - axis: Axis = 0, + axis: Axis | None = 0, skipna: bool = True, numeric_only: bool = False, **kwargs, @@ -1501,9 +1627,10 @@ def mean( **kwargs, ) + @_performance_tracking def median( self, - axis=no_default, + axis: Axis | None = 0, skipna: bool = True, numeric_only: bool = False, **kwargs, @@ -1558,7 +1685,7 @@ def median( @_performance_tracking def std( self, - axis=no_default, + axis: Axis | None = 0, skipna: bool = True, ddof: int = 1, numeric_only: bool = False, @@ -1611,7 +1738,7 @@ def std( @_performance_tracking def var( self, - axis=no_default, + axis: Axis | None = 0, skipna: bool = True, ddof: int = 1, numeric_only: bool = False, @@ -1663,7 +1790,7 @@ def var( @_performance_tracking def kurtosis( self, - axis: Axis = 0, + axis: Axis | None = 0, skipna: bool = True, numeric_only: bool = False, **kwargs, @@ -1724,7 +1851,7 @@ def kurtosis( @_performance_tracking def skew( self, - axis: Axis = 0, + axis: Axis | None = 0, skipna: bool = True, numeric_only: bool = False, **kwargs, @@ -1933,14 +2060,14 @@ def nans_to_nulls(self) -> Self: 0 1.0 1 2.0 2 NaN - 3 + 3 NaN 4 10.0 dtype: float64 >>> series.nans_to_nulls() 0 1.0 1 2.0 - 2 - 3 + 2 NaN + 3 NaN 4 10.0 dtype: float64 @@ -1951,27 +2078,27 @@ def nans_to_nulls(self) -> Self: >>> df['b'] = cudf.Series([None, 3.14, np.nan], nan_as_null=False) >>> df a b - 0 1.0 - 1 3.14 - 2 NaN NaN + 0 1.0 NaN + 1 NaN 3.14 + 2 NaN NaN >>> df.nans_to_nulls() a b - 0 1.0 - 1 3.14 - 2 + 0 1.0 NaN + 1 NaN 3.14 + 2 NaN NaN """ return super().nans_to_nulls() @_performance_tracking def interpolate( self, - method="linear", - axis=0, - limit=None, + *, + method: str = "linear", + axis: Axis = 0, + limit: int | None = None, inplace: bool = False, - limit_direction=None, - limit_area=None, - downcast=None, + limit_direction: Literal["forward", "backward", "both"] | None = None, + limit_area: Literal["inside", "outside"] | None = None, **kwargs, ): """ @@ -1999,23 +2126,7 @@ def interpolate( some or all ``NaN`` values """ - if method in {"pad", "ffill"} and limit_direction != "forward": - raise ValueError( - f"`limit_direction` must be 'forward' for method `{method}`" - ) - if method in {"backfill", "bfill"} and limit_direction != "backward": - raise ValueError( - f"`limit_direction` must be 'backward' for method `{method}`" - ) - - if method.lower() in {"ffill", "bfill", "pad", "backfill"}: - warnings.warn( - f"{type(self).__name__}.interpolate with method={method} is " - "deprecated and will raise in a future version. " - "Use obj.ffill() or obj.bfill() instead.", - FutureWarning, - ) - elif method not in {"linear", "values", "index"}: + if method not in {"linear", "values", "index"}: raise ValueError(f"Interpolation method `{method}` not found") if not isinstance(inplace, bool): @@ -2023,17 +2134,14 @@ def interpolate( elif inplace is True: raise NotImplementedError("inplace is not supported") - data = self - if limit is not None: raise NotImplementedError("limit is not supported") if limit_direction is not None: raise NotImplementedError("limit_direction is not supported") if limit_area is not None: raise NotImplementedError("limit_area is not supported") - if downcast is not None: - raise NotImplementedError("downcast is not supported") + data = self if not isinstance(data.index, cudf.RangeIndex): perm_sort = data.index.argsort() data = data._gather( @@ -2048,21 +2156,11 @@ def interpolate( interp_index = RangeIndex(self._num_rows) else: interp_index = data.index - columns = [] - for col in data._columns: - if col.dtype == CUDF_STRING_DTYPE: - warnings.warn( - f"{type(self).__name__}.interpolate with object dtype is " - "deprecated and will raise in a future version.", - FutureWarning, - ) - if col.nullable: - col = col.astype(np.dtype(np.float64)).fillna(np.nan) - - columns.append(col.interpolate(index=interp_index)) result = self._from_data_like_self( - self._data._from_columns_like_self(columns) + self._data._from_columns_like_self( + [col.interpolate(index=interp_index) for col in data._columns] + ) ) result.index = data.index @@ -2702,13 +2800,13 @@ def sort_index( 2 b 1 c 4 d - dtype: object + dtype: str >>> series.sort_index() 1 c 2 b 3 a 4 d - dtype: object + dtype: str Sort Descending @@ -2717,7 +2815,7 @@ def sort_index( 3 a 2 b 1 c - dtype: object + dtype: str **DataFrame** @@ -2880,7 +2978,7 @@ def hash_values( 0 7be4bbacbfdb05fb3044e36c22b41e8b 1 947ca8d2c5f0f27437f156cfbfab0969 2 d0580ef52d27c043c8e341fd5039b166 - dtype: object + dtype: str >>> series.hash_values(method="murmur3", seed=42) 0 4279022973 1 1654398277 @@ -2905,7 +3003,7 @@ def hash_values( 0 57ce879751b5169c525907d5c563fae1 1 948d6221a7c4963d4be411bcead7e32b 2 fe061786ea286a515b772d91b0dfcd70 - dtype: object + dtype: str """ seed_hash_methods = {"murmur3", "xxhash32", "xxhash64"} if seed is None: @@ -3399,102 +3497,50 @@ def split_with_dtypes( @_performance_tracking def bfill( self, - value=None, - axis=None, + *, + axis: Axis | None = None, inplace: bool = False, - limit=None, - limit_area=None, - ) -> Self | None: - """ - Synonym for :meth:`Series.fillna` with ``method='bfill'``. - - Returns - ------- - Object with missing values filled or None if ``inplace=True``. - """ - if limit_area is not None: - raise NotImplementedError("limit_area is currently not supported.") - - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - return self.fillna( - method="bfill", - value=value, - axis=axis, - inplace=inplace, - limit=limit, - ) - - @_performance_tracking - def backfill( - self, value=None, axis=None, inplace: bool = False, limit=None + limit: None | int = None, + limit_area: Literal["inside", "outside", None] = None, ) -> Self | None: """ - Synonym for :meth:`Series.fillna` with ``method='bfill'``. - - .. deprecated:: 23.06 - Use `DataFrame.bfill/Series.bfill` instead. + Fill NA/NaN values by using the next valid observation to fill the gap. Returns ------- Object with missing values filled or None if ``inplace=True``. """ - # Do not remove until pandas removes this. - warnings.warn( - "DataFrame.backfill/Series.backfill is deprecated. Use " - "DataFrame.bfill/Series.bfill instead", - FutureWarning, + return self._fillna( + method=plc.replace.ReplacePolicy.FOLLOWING, + axis=axis, + inplace=inplace, + limit=limit, + limit_area=limit_area, ) - return self.bfill(value=value, axis=axis, inplace=inplace, limit=limit) @_performance_tracking def ffill( self, - value=None, - axis=None, + *, + axis: Axis | None = None, inplace: bool = False, - limit=None, + limit: None | int = None, limit_area: Literal["inside", "outside", None] = None, - ): - """ - Synonym for :meth:`Series.fillna` with ``method='ffill'``. - - Returns - ------- - Object with missing values filled or None if ``inplace=True``. - """ - if limit_area is not None: - raise NotImplementedError("limit_area is currently not supported.") - - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - return self.fillna( - method="ffill", - value=value, - axis=axis, - inplace=inplace, - limit=limit, - ) - - @_performance_tracking - def pad(self, value=None, axis=None, inplace: bool = False, limit=None): + ) -> Self | None: """ - Synonym for :meth:`Series.fillna` with ``method='ffill'``. - - .. deprecated:: 23.06 - Use `DataFrame.ffill/Series.ffill` instead. + Fill NA/NaN values by propagating the last valid observation to next valid. Returns ------- Object with missing values filled or None if ``inplace=True``. """ - # Do not remove until pandas removes this. - warnings.warn( - "DataFrame.pad/Series.pad is deprecated. Use " - "DataFrame.ffill/Series.ffill instead", - FutureWarning, + return self._fillna( + method=plc.replace.ReplacePolicy.PRECEDING, + axis=axis, + inplace=inplace, + limit=limit, + limit_area=limit_area, ) - return self.ffill(value=value, axis=axis, inplace=inplace, limit=limit) def add_prefix(self, prefix, axis=None): """ @@ -3640,7 +3686,7 @@ def _apply(self, func, kernel_class, *args, **kwargs): except Exception as e: raise RuntimeError("UDF kernel execution failed.") from e - if retty == CUDF_STRING_DTYPE: + if is_dtype_obj_string(retty): plc_col = strings_udf.column_from_managed_udf_string_array(ans_col) col = ColumnBase.create( plc_col, dtype=dtype_from_pylibcudf_column(plc_col) @@ -3786,16 +3832,22 @@ def _n_largest_or_smallest( method = "nlargest" if largest else "nsmallest" for col in columns: - if self._data[col].dtype == CUDF_STRING_DTYPE: + col_dtype = self._data[col].dtype + # pandas rejects nlargest/nsmallest on object, complex, string, + # and categorical dtypes. + if ( + is_dtype_obj_string(col_dtype) + or getattr(col_dtype, "kind", None) in {"O", "c"} + or isinstance(col_dtype, pd.CategoricalDtype) + ): if isinstance(self, cudf.DataFrame): error_msg = ( - f"Column '{col}' has dtype {self._data[col].dtype}, " + f"Column '{col}' has dtype {col_dtype}, " f"cannot use method '{method}' with this dtype" ) else: error_msg = ( - f"Cannot use method '{method}' with " - f"dtype {self._data[col].dtype}" + f"Cannot use method '{method}' with dtype {col_dtype}" ) raise TypeError(error_msg) if len(self) == 0: @@ -3971,11 +4023,13 @@ def _reindex( index = index if index is not None else df.index + label_dtype = None if column_names is None: names = list(df._column_names) level_names = self._data.level_names multiindex = self._data.multiindex rangeindex = self._data.rangeindex + label_dtype = self._data.label_dtype elif isinstance(column_names, (pd.Index, cudf.Index)): if isinstance(column_names, (pd.MultiIndex, cudf.MultiIndex)): multiindex = True @@ -3992,6 +4046,12 @@ def _reindex( rangeindex = isinstance( column_names, (pd.RangeIndex, cudf.RangeIndex) ) + if not rangeindex: + label_dtype = ( + column_names.dtype + if isinstance(column_names, pd.Index) + else column_names.to_pandas().dtype + ) level_names = tuple(column_names.names) else: names = column_names @@ -4024,6 +4084,7 @@ def _reindex( multiindex=multiindex, level_names=level_names, rangeindex=rangeindex, + label_dtype=label_dtype, ), index=index, attrs=self.attrs, @@ -4147,11 +4208,9 @@ def round(self, decimals=0, how="half_even"): def resample( self, rule, - axis=0, closed: Literal["right", "left"] | None = None, label: Literal["right", "left"] | None = None, convention: Literal["start", "end", "s", "e"] = "start", - kind=None, on=None, level=None, origin="start_day", @@ -4189,7 +4248,7 @@ def resample( -------- First, we create a time series with 1 minute intervals: - >>> index = cudf.date_range(start="2001-01-01", periods=10, freq="1T") + >>> index = cudf.date_range(start="2001-01-01", periods=10, freq="1min") >>> sr = cudf.Series(range(10), index=index) >>> sr 2001-01-01 00:00:00 0 @@ -4206,7 +4265,7 @@ def resample( Downsampling to 3 minute intervals, followed by a "sum" aggregation: - >>> sr.resample("3T").sum() + >>> sr.resample("3min").sum() 2001-01-01 00:00:00 3 2001-01-01 00:03:00 12 2001-01-01 00:06:00 21 @@ -4215,7 +4274,7 @@ def resample( Use the right side of each interval to label the bins: - >>> sr.resample("3T", label="right").sum() + >>> sr.resample("3min", label="right").sum() 2001-01-01 00:03:00 3 2001-01-01 00:06:00 12 2001-01-01 00:09:00 21 @@ -4224,7 +4283,7 @@ def resample( Close the right side of the interval instead of the left: - >>> sr.resample("3T", closed="right").sum() + >>> sr.resample("3min", closed="right").sum() 2000-12-31 23:57:00 0 2001-01-01 00:00:00 6 2001-01-01 00:03:00 15 @@ -4290,26 +4349,7 @@ def resample( """ from cudf.core.resample import DataFrameResampler, SeriesResampler - if kind is not None: - warnings.warn( - "The 'kind' keyword in is " - "deprecated and will be removed in a future version. ", - FutureWarning, - ) - raise NotImplementedError("kind is currently not supported.") - if axis != 0: - warnings.warn( - "The 'axis' keyword in is " - "deprecated and will be removed in a future version. ", - FutureWarning, - ) - raise NotImplementedError("axis is currently not supported.") if convention != "start": - warnings.warn( - "The 'convention' keyword in is " - "deprecated and will be removed in a future version. ", - FutureWarning, - ) raise NotImplementedError("convention is currently not supported.") if origin != "start_day": raise NotImplementedError("origin is currently not supported.") @@ -4388,7 +4428,7 @@ def dropna( >>> df name toy born 0 Alfred Batmobile 1940-04-25 00:00:00.000000000 - 1 Batman None NaT + 1 Batman NaN NaT 2 Catwoman Bullwhip NaT Drop the rows where at least one element is null. @@ -4410,7 +4450,7 @@ def dropna( >>> df.dropna(how='all') name toy born 0 Alfred Batmobile 1940-04-25 00:00:00.000000000 - 1 Batman None NaT + 1 Batman NaN NaT 2 Catwoman Bullwhip NaT Keep only the rows with at least 2 non-null values. @@ -4551,10 +4591,12 @@ def _apply_boolean_mask(self, boolean_mask: BooleanMask, keep_index=True): index_names=self.index.names if keep_index else None, ) - def _pandas_repr_compatible(self) -> Self: + def _pandas_repr_compatible(self, nan_rep=None) -> Self: """Return Self but with columns prepared for a pandas-like repr.""" - result = super()._pandas_repr_compatible() - result.index = self.index._pandas_repr_compatible() + if self.size == 0 and nan_rep is None: + nan_rep = "nan" + result = super()._pandas_repr_compatible(nan_rep=nan_rep) + result.index = self.index._pandas_repr_compatible(nan_rep=nan_rep) return result def take(self, indices, axis=0): @@ -4580,7 +4622,7 @@ def take(self, indices, axis=0): 0 a 4 e 3 d - dtype: object + dtype: str **DataFrame** @@ -4656,147 +4698,6 @@ def _reset_index( index, ) - def _first_or_last( - self, offset, idx: int, op: Callable, side: str, slice_func: Callable - ) -> "IndexedFrame": - """Shared code path for ``first`` and ``last``.""" - if not isinstance(self.index, cudf.DatetimeIndex): - raise TypeError("'first' only supports a DatetimeIndex index.") - if not isinstance(offset, str): - raise NotImplementedError( - f"Unsupported offset type {type(offset)}." - ) - - if len(self) == 0: - return self.copy() - - pd_offset = pd.tseries.frequencies.to_offset(offset) - to_search = op( - pd.Timestamp(self.index._column.element_indexing(idx)), pd_offset - ) - if ( - idx == 0 - and not isinstance(pd_offset, pd.tseries.offsets.Tick) - and pd_offset.is_on_offset(pd.Timestamp(self.index[0])) - ): - # Special handle is required when the start time of the index - # is on the end of the offset. See pandas gh29623 for detail. - to_search = to_search - pd_offset.base - return self.loc[:to_search] - needle = as_column(to_search, dtype=self.index.dtype) - end_point = int( - self.index._column.searchsorted( - needle, side=side - ).element_indexing(0) - ) - return slice_func(end_point) - - def first(self, offset): - """Select initial periods of time series data based on a date offset. - - When having a DataFrame with **sorted** dates as index, this function - can select the first few rows based on a date offset. - - Parameters - ---------- - offset: str - The offset length of the data that will be selected. For instance, - '1M' will display all rows having their index within the first - month. - - Returns - ------- - Series or DataFrame - A subset of the caller. - - Raises - ------ - TypeError - If the index is not a ``DatetimeIndex`` - - Examples - -------- - >>> i = cudf.date_range('2018-04-09', periods=4, freq='2D') - >>> ts = cudf.DataFrame({'A': [1, 2, 3, 4]}, index=i) - >>> ts - A - 2018-04-09 1 - 2018-04-11 2 - 2018-04-13 3 - 2018-04-15 4 - >>> ts.first('3D') - A - 2018-04-09 1 - 2018-04-11 2 - """ - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, "Need to drop after pandas-3.0 support is added." - warnings.warn( - "first is deprecated and will be removed in a future version. " - "Please create a mask and filter using `.loc` instead", - FutureWarning, - ) - return self._first_or_last( - offset, - idx=0, - op=operator.__add__, - side="left", - slice_func=lambda i: self.iloc[:i], - ) - - def last(self, offset): - """Select final periods of time series data based on a date offset. - - When having a DataFrame with **sorted** dates as index, this function - can select the last few rows based on a date offset. - - Parameters - ---------- - offset: str - The offset length of the data that will be selected. For instance, - '3D' will display all rows having their index within the last 3 - days. - - Returns - ------- - Series or DataFrame - A subset of the caller. - - Raises - ------ - TypeError - If the index is not a ``DatetimeIndex`` - - Examples - -------- - >>> i = cudf.date_range('2018-04-09', periods=4, freq='2D') - >>> ts = cudf.DataFrame({'A': [1, 2, 3, 4]}, index=i) - >>> ts - A - 2018-04-09 1 - 2018-04-11 2 - 2018-04-13 3 - 2018-04-15 4 - >>> ts.last('3D') - A - 2018-04-13 3 - 2018-04-15 4 - """ - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, "Need to drop after pandas-3.0 support is added." - warnings.warn( - "last is deprecated and will be removed in a future version. " - "Please create a mask and filter using `.loc` instead", - FutureWarning, - ) - return self._first_or_last( - offset, - idx=-1, - op=operator.__sub__, - side="right", - slice_func=lambda i: self.iloc[i:], - ) - @_performance_tracking def sample( self, @@ -5019,13 +4920,26 @@ def _binaryop( ) if operands is NotImplemented: return NotImplemented + # Mirror pandas' `__finalize__(self).__finalize__(other)` for binary + # ops: `other`'s attrs override `self`'s when non-empty, and + # `allows_duplicate_labels` is the AND of both inputs. + attrs = self.attrs + allows_duplicate_labels = self._flags.allows_duplicate_labels + if isinstance(other, IndexedFrame): + if other.attrs: + attrs = other.attrs + allows_duplicate_labels = ( + allows_duplicate_labels + and other._flags.allows_duplicate_labels + ) return self._from_data( ColumnAccessor( type(self)._colwise_binop(operands, op), **ca_attributes, ), index=out_index, - attrs=self.attrs, + attrs=copy.deepcopy(attrs), + allows_duplicate_labels=allows_duplicate_labels, ) def _make_operands_and_index_for_binop( @@ -5638,12 +5552,14 @@ def groupby( level=None, as_index=True, sort=no_default, - group_keys=False, + group_keys=no_default, observed=True, dropna=True, ): if sort is no_default: sort = cudf.get_option("mode.pandas_compatible") + if group_keys is no_default: + group_keys = cudf.get_option("mode.pandas_compatible") if axis not in (0, "index"): raise NotImplementedError("axis parameter is not yet implemented") @@ -5953,7 +5869,7 @@ def rmul(self, other, axis, level=None, fill_value=None): b NaN c NaN d 0.0 - e + e NaN dtype: float64 """ ), @@ -5994,7 +5910,7 @@ def mod(self, other, axis, level=None, fill_value=None): b 0.0 c 0.0 d NaN - e + e NaN dtype: float64 """ ), @@ -6117,7 +6033,7 @@ def rpow(self, other, axis, level=None, fill_value=None): b Inf c Inf d 0.0 - e + e NaN dtype: float64 """ ), @@ -6158,7 +6074,7 @@ def floordiv(self, other, axis, level=None, fill_value=None): b 0.0 c 0.0 d Inf - e + e NaN dtype: float64 """ ), @@ -6188,18 +6104,18 @@ def rfloordiv(self, other, axis, level=None, fill_value=None): ser_op_example=textwrap.dedent( """ >>> a.truediv(b) - a 1.0 - b - c - d - e + a 1.0 + b NaN + c NaN + d NaN + e NaN dtype: float64 >>> a.truediv(b, fill_value=0) - a 1.0 - b Inf - c Inf - d 0.0 - e + a 1.0 + b Inf + c Inf + d 0.0 + e NaN dtype: float64 """ ), @@ -6233,18 +6149,18 @@ def truediv(self, other, axis, level=None, fill_value=None): ser_op_example=textwrap.dedent( """ >>> a.rtruediv(b) - a 1.0 - b - c - d - e + a 1.0 + b NaN + c NaN + d NaN + e NaN dtype: float64 >>> a.rtruediv(b, fill_value=0) - a 1.0 - b 0.0 - c 0.0 - d Inf - e + a 1.0 + b 0.0 + c 0.0 + d Inf + e NaN dtype: float64 """ ), @@ -6655,7 +6571,7 @@ def rank( self._data._from_columns_like_self(result_columns) ) result.index = source.index - return result.astype(np.float64) + return result def convert_dtypes( self, @@ -6667,50 +6583,358 @@ def convert_dtypes( dtype_backend=None, ) -> Self: """ - Convert columns to the best possible nullable dtypes. + Convert columns from numpy dtypes to the best dtypes that support ``pd.NA``. + + Parameters + ---------- + infer_objects : bool, default True + Whether object dtypes should be converted to the best possible types. + convert_string : bool, default True + Whether object dtypes should be converted to ``StringDtype()``. + convert_integer : bool, default True + Whether, if possible, conversion can be done to integer extension types. + convert_boolean : bool, defaults True + Whether object dtypes should be converted to ``BooleanDtypes()``. + convert_floating : bool, defaults True + Whether, if possible, conversion can be done to floating extension types. + If `convert_integer` is also True, preference will be give to integer + dtypes if the floats can be faithfully casted to integers. + dtype_backend : {'numpy_nullable', 'pyarrow'}, default 'numpy_nullable' + Back-end data type applied to the resultant :class:`DataFrame` or + :class:`Series` (still experimental). Behaviour is as follows: + + * ``"numpy_nullable"``: returns nullable-dtype-backed + :class:`DataFrame` or :class:`Series`. + * ``"pyarrow"``: returns pyarrow-backed nullable ``ArrowDtype`` + :class:`DataFrame` or :class:`Series`. - If the dtype is numeric, and consists of all integers, convert - to an appropriate integer extension type. Otherwise, convert - to an appropriate floating type. + Returns + ------- + Series or DataFrame + Copy of input object with new dtype. - All other dtypes are always returned as-is as all dtypes in - cudf are nullable. + See Also + -------- + to_datetime : Convert argument to datetime. + to_numeric : Convert argument to a numeric type. + + Notes + ----- + By default, ``convert_dtypes`` will attempt to convert a Series (or each + Series in a DataFrame) to dtypes that support ``pd.NA``. By using the options + ``convert_string``, ``convert_integer``, ``convert_boolean`` and + ``convert_floating``, it is possible to turn off individual conversions + to ``StringDtype``, the integer extension types, ``BooleanDtype`` + or floating extension types, respectively. + + For object-dtyped columns, if ``infer_objects`` is ``True``, use the inference + rules as during normal Series/DataFrame construction. Then, if possible, + convert to ``StringDtype``, ``BooleanDtype`` or an appropriate integer + or floating extension type, otherwise leave as ``object``. + + If the dtype is integer, convert to an appropriate integer extension type. + + If the dtype is numeric, and consists of all integers, convert to an + appropriate integer extension type. Otherwise, convert to an + appropriate floating extension type. + + In the future, as new dtypes are added that support ``pd.NA``, the results + of this method will change to support those new dtypes. + + Examples + -------- + >>> import cudf + >>> import numpy as np + >>> df = cudf.DataFrame( + ... { + ... "a": cudf.Series([1, 2, 3], dtype=np.dtype("int32")), + ... "b": cudf.Series(["x", "y", "z"], dtype=np.dtype("O")), + ... "e": cudf.Series([10, np.nan, 20], dtype=np.dtype("float")), + ... "f": cudf.Series([np.nan, 100.5, 200], dtype=np.dtype("float")), + ... } + ... ) + + Start with a DataFrame with default dtypes. + + >>> df + a b e f + 0 1 x 10.0 NaN + 1 2 y NaN 100.5 + 2 3 z 20.0 200.0 + + >>> df.dtypes + a int32 + b object + e float64 + f float64 + dtype: object + + Convert the DataFrame to use best possible dtypes. + + >>> dfn = df.convert_dtypes() + >>> dfn + a b e f + 0 1 x 10 + 1 2 y 100.5 + 2 3 z 20 200.0 + + >>> dfn.dtypes + a Int32 + b string + e Int64 + f Float64 + dtype: object + + Start with a Series of strings and missing data represented by ``np.nan``. + + >>> s = cudf.Series(["a", "b", np.nan]) + >>> s + 0 a + 1 b + 2 NaN + dtype: str + + Obtain a Series with dtype ``StringDtype``. + + >>> s.convert_dtypes() + 0 a + 1 b + 2 + dtype: string """ - if dtype_backend == "pyarrow": - cols = [] - for col in self._columns: - arrow_dtype = pd.ArrowDtype( - pa.null() - if col.null_count == len(col) - else cudf_dtype_to_pa_type(col.dtype) - ) - cols.append(ColumnBase.create(col.plc_column, arrow_dtype)) - return self._from_data_like_self( - self._data._from_columns_like_self(cols, verify=False) + if dtype_backend not in (None, "numpy_nullable", "pyarrow"): + raise ValueError( + f"dtype_backend {dtype_backend} is invalid, only " + "'numpy_nullable' and 'pyarrow' are allowed." ) - if not (convert_floating and convert_integer): - return self.copy() - else: + numpy_to_nullable = { + "int8": pd.Int8Dtype(), + "int16": pd.Int16Dtype(), + "int32": pd.Int32Dtype(), + "int64": pd.Int64Dtype(), + "uint8": pd.UInt8Dtype(), + "uint16": pd.UInt16Dtype(), + "uint32": pd.UInt32Dtype(), + "uint64": pd.UInt64Dtype(), + "float32": pd.Float32Dtype(), + "float64": pd.Float64Dtype(), + } + cols = [] + # Tracks whether each column was "selected" by the convert-* flags + # (used by the ``dtype_backend="pyarrow"`` path below to decide whether + # the column should be converted to ``pd.ArrowDtype``). + converted = [] + for col in self._columns: + dtype = col.dtype + new_col = None + # Map ``pd.ArrowDtype`` inputs to their numpy-nullable equivalents + # only when explicitly asked via ``dtype_backend="numpy_nullable"``. + # Otherwise keep ``pd.ArrowDtype`` columns unchanged (matches pandas). if ( - cudf.get_option("mode.pandas_compatible") - and dtype_backend is None + isinstance(dtype, pd.ArrowDtype) + and dtype_backend == "numpy_nullable" ): - raise NotImplementedError( - "The `dtype_backend` argument is not supported in " - "pandas_compatible mode." + pa_dtype = dtype.pyarrow_dtype + pa_name = str(pa_dtype) + if pa_name in numpy_to_nullable: + eff_dtype = numpy_to_nullable[pa_name] + elif pa.types.is_boolean(pa_dtype): + eff_dtype = pd.BooleanDtype() + elif pa.types.is_string(pa_dtype) or pa.types.is_large_string( + pa_dtype + ): + eff_dtype = pd.StringDtype(na_value=pd.NA) + else: + eff_dtype = dtype + else: + eff_dtype = dtype + + # ``selected`` indicates that the column was actually transformed + # by one of the convert-* flags (used by the pyarrow-backend path + # to decide whether to map to ``pd.ArrowDtype``). + selected = False + if eff_dtype == np.dtype("bool") or isinstance( + eff_dtype, pd.BooleanDtype + ): + if convert_boolean: + selected = True + new_col = col.astype(pd.BooleanDtype(), copy=False) + elif convert_integer: + selected = True + new_col = col.astype(pd.Int64Dtype(), copy=False) + elif convert_floating: + selected = True + new_col = col.astype(pd.Float64Dtype(), copy=False) + elif ( + isinstance(eff_dtype, np.dtype) + and eff_dtype.kind in ("i", "u") + and eff_dtype.name in numpy_to_nullable + ): + if convert_integer: + selected = True + new_col = col.astype( + numpy_to_nullable[eff_dtype.name], copy=False + ) + elif is_pandas_nullable_numpy_dtype( + eff_dtype + ) and eff_dtype.kind in ( + "i", + "u", + ): + if convert_integer: + selected = True + new_col = col.astype(eff_dtype, copy=False) + elif ( + isinstance(eff_dtype, np.dtype) + and eff_dtype.kind == "f" + and eff_dtype.name in numpy_to_nullable + ): + col_filled = col.fillna(0) + as_int = col_filled.astype(np.dtype(np.int64)) + nan_blocks_int = ( + pd.options.future.distinguish_nan_and_na + and col.nan_count > 0 ) - cols = [] - for col in self._columns: - if col.dtype.kind == "f": - col_filled = col.fillna(0) - as_int = col_filled.astype(np.dtype(np.int64)) - if cp.allclose(col_filled, as_int): - cols.append(as_int) - continue - cols.append(col) - return self._from_data_like_self( - self._data._from_columns_like_self(cols, verify=False) + if ( + convert_integer + and not nan_blocks_int + and bool(cp.allclose(col_filled, as_int)) + ): + selected = True + new_col = col.nans_to_nulls().astype( + pd.Int64Dtype(), copy=False + ) + elif convert_floating: + selected = True + new_col = col.astype( + numpy_to_nullable[eff_dtype.name], copy=False + ) + elif ( + is_pandas_nullable_numpy_dtype(eff_dtype) + and eff_dtype.kind == "f" + ): + if convert_floating: + selected = True + new_col = col.astype(eff_dtype, copy=False) + elif isinstance(eff_dtype, pd.StringDtype): + # Empty string columns have no values to infer from; pandas + # leaves the corresponding object column unchanged in that + # case. Match that behavior by skipping conversion. + if convert_string and len(col) > 0: + selected = True + if eff_dtype.na_value is not pd.NA: + new_col = col.astype( + pd.StringDtype(na_value=pd.NA), copy=False + ) + elif eff_dtype == np.dtype("O"): + # Empty object columns have no values to infer from, so + # pandas leaves them as object. Skip conversion to match. + if len(col) == 0: + pass + elif convert_string: + selected = True + new_col = col.astype( + pd.StringDtype(na_value=pd.NA), copy=False + ) + elif infer_objects: + selected = True + new_col = col.astype( + pd.StringDtype(na_value=np.nan), copy=False + ) + was_converted = selected + if new_col is None: + # No conversion applied: still return a copy so that + # modifications to the result don't propagate to ``self`` + # (matches pandas' ``convert_dtypes`` copy semantics). + new_col = col.copy(deep=True) + elif new_col is col: + # ``astype(..., copy=False)`` can return the same column + # when the requested dtype already matches; ensure a copy. + new_col = col.copy(deep=True) + cols.append(new_col) + converted.append(was_converted) + + if dtype_backend == "pyarrow": + # Convert columns that the convert-* flags selected into the + # equivalent ``pd.ArrowDtype``; leave others untouched (matches + # pandas' ``test_pyarrow_backend_no_conversion`` semantics). + # Datetime / timedelta columns aren't matched by any convert-* + # flag, but pandas converts them when *any* flag is enabled. + any_convert = ( + convert_floating + or convert_integer + or convert_boolean + or convert_string ) + arrow_cols = [] + for new_col, was_converted in zip(cols, converted, strict=True): + if not was_converted: + dt = new_col.dtype + is_datetimelike = ( + isinstance(dt, np.dtype) and dt.kind in ("M", "m") + ) or isinstance(dt, pd.DatetimeTZDtype) + if not (any_convert and is_datetimelike): + arrow_cols.append(new_col) + continue + # Empty object columns stay as object (matches pandas' + # ``test_pyarrow_dtype_empty_object``). + if len(new_col) == 0 and is_dtype_obj_string(new_col.dtype): + arrow_cols.append(new_col) + continue + if len(new_col) != 0 and new_col.null_count == len(new_col): + arrow_cols.append( + as_column(new_col, dtype=pd.ArrowDtype(pa.null())) + ) + elif isinstance(new_col.dtype, pd.ArrowDtype): + arrow_cols.append(new_col) + else: + arrow_dtype = pd.ArrowDtype( + cudf_dtype_to_pa_type(new_col.dtype) + ) + arrow_cols.append( + ColumnBase.create(new_col.plc_column, arrow_dtype) + ) + cols = arrow_cols + + return self._from_data_like_self( + self._data._from_columns_like_self(cols, verify=False) + ) + + @_performance_tracking + def pct_change( + self, + periods: int = 1, + fill_method: None = None, + freq=None, + **kwargs, + ): + """ + Calculates the percent change between sequential elements. + + Parameters + ---------- + periods : int, default 1 + Periods to shift for forming percent change. + fill_method : None + Must be None. + freq : str, optional + Increment to use from time series API. + Not yet implemented. + **kwargs + Additional keyword arguments are passed into shift. + + Returns + ------- + Same type as caller. + """ + if freq is not None: + raise NotImplementedError("freq parameter not supported yet.") + if fill_method is not None: + raise ValueError(f"fill_method must be None; got {fill_method=}.") + + return self.diff(periods=periods) / self.shift( # type: ignore[attr-defined] + periods=periods, freq=freq, **kwargs + ) @_performance_tracking def serialize(self): @@ -7066,12 +7290,14 @@ def _is_same_dtype(lhs_dtype, rhs_dtype): and rhs_dtype.categories.dtype == lhs_dtype ): return True + elif is_dtype_obj_string(lhs_dtype) and is_dtype_obj_string(rhs_dtype): + return True else: return False -def _append_new_row_inplace(col: ColumnBase, value: ScalarLike) -> None: - """Append a scalar `value` to the end of `col` inplace. +def _append_new_row(col: ColumnBase, value: ScalarLike) -> ColumnBase: + """Return a new column with a scalar `value` appended to the end of `col`. Cast to common type if possible """ val_col = as_column( @@ -7124,4 +7350,4 @@ def _append_new_row_inplace(col: ColumnBase, value: ScalarLike) -> None: "Cannot append mixed types: " f"Column dtype {col.dtype} is not compatible with {res_col.dtype}" ) - col._mimic_inplace(res_col, inplace=True) + return res_col diff --git a/python/cudf/cudf/core/join/_join_helpers.py b/python/cudf/cudf/core/join/_join_helpers.py index 50130eff16ee..79d1c09d5d9e 100644 --- a/python/cudf/cudf/core/join/_join_helpers.py +++ b/python/cudf/cudf/core/join/_join_helpers.py @@ -3,14 +3,16 @@ from __future__ import annotations -import warnings from collections.abc import Iterable from typing import TYPE_CHECKING, Any import numpy as np from cudf.api.types import is_dtype_equal -from cudf.core.dtype.validators import is_dtype_obj_numeric +from cudf.core.dtype.validators import ( + is_dtype_obj_numeric, + is_dtype_obj_string, +) from cudf.core.dtypes import ( CategoricalDtype, Decimal32Dtype, @@ -86,7 +88,16 @@ def _match_join_keys( return _match_categorical_dtypes_both(lcol, rcol, how) # type: ignore[arg-type] elif left_is_categorical or right_is_categorical: if left_is_categorical: - if how in {"left", "leftsemi", "leftanti"}: + if how in {"leftsemi", "leftanti"}: + # Decategorize both sides and find a common type + # instead of casting right to left's categorical + # type, which would introduce spurious nulls for + # right values not in the left categories. + common_type = find_common_type( + (ltype.categories.dtype, rtype) # type: ignore[union-attr] + ) + return lcol.astype(common_type), rcol.astype(common_type) + if how == "left": return lcol, rcol.astype(ltype) common_type = get_dtype_of_same_kind(rtype, ltype.categories.dtype) # type: ignore[union-attr] else: @@ -109,11 +120,16 @@ def _match_join_keys( and is_dtype_obj_numeric(rtype) and not (ltype.kind == "m" or rtype.kind == "m") ): - common_type = ( - max(ltype, rtype) - if ltype.kind == rtype.kind - else find_common_type((ltype, rtype)) - ) + if ltype.kind == rtype.kind: + try: + common_type = max(ltype, rtype) + except TypeError: + # e.g. numpy bool and pandas BooleanDtype both have kind "b" + # but are not orderable via ``>``; fall back to the + # type-promotion helper that understands extension dtypes. + common_type = find_common_type((ltype, rtype)) + else: + common_type = find_common_type((ltype, rtype)) elif (ltype.kind == "M" and rtype.kind == "M") or ( ltype.kind == "m" and rtype.kind == "m" ): @@ -132,7 +148,10 @@ def _match_join_keys( if how == "left" and rcol.fillna(0).can_cast_safely(ltype): return lcol, rcol.astype(ltype) if common_type is None: - common_type = np.dtype(np.float64) + if is_dtype_obj_string(ltype) and is_dtype_obj_string(rtype): + common_type = find_common_type((ltype, rtype)) + else: + common_type = np.dtype(np.float64) return lcol.astype(common_type), rcol.astype(common_type) @@ -176,11 +195,9 @@ def _match_categorical_dtypes_both( return lcol, rcol._get_decategorized_column().astype(ltype) else: # merge categories - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - merged_categories = concat( - [ltype.categories, rtype.categories] - ).unique() + merged_categories = concat( + [ltype.categories, rtype.categories] + ).unique() common_type = CategoricalDtype( categories=merged_categories, ordered=False ) diff --git a/python/cudf/cudf/core/join/join.py b/python/cudf/cudf/core/join/join.py index 5d4845a45510..0be5697b1f38 100644 --- a/python/cudf/cudf/core/join/join.py +++ b/python/cudf/cudf/core/join/join.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 from __future__ import annotations +import copy import itertools from typing import TYPE_CHECKING, Any @@ -392,6 +393,17 @@ def perform_merge(self) -> DataFrame: result = self._sort_result(result) if self._return_rangeindex: result = result.reset_index(drop=True) + # Mirror pandas' merge `__finalize__` with `input_objs`: propagate + # attrs only when both inputs have equal non-empty attrs, and AND + # ``allows_duplicate_labels`` across inputs. + lhs_attrs = self.lhs.attrs + rhs_attrs = self.rhs.attrs + if lhs_attrs and rhs_attrs and lhs_attrs == rhs_attrs: + result._attrs = copy.deepcopy(lhs_attrs) + result.flags["allows_duplicate_labels"] = ( + self.lhs.flags.allows_duplicate_labels + and self.rhs.flags.allows_duplicate_labels + ) return result def _merge_results(self, left_result: DataFrame, right_result: DataFrame): diff --git a/python/cudf/cudf/core/multiindex.py b/python/cudf/cudf/core/multiindex.py index 334929c67d69..1e09143e7997 100644 --- a/python/cudf/cudf/core/multiindex.py +++ b/python/cudf/cudf/core/multiindex.py @@ -24,7 +24,9 @@ from cudf.core.column.column import ColumnBase, as_column from cudf.core.column.utils import access_columns from cudf.core.column_accessor import ColumnAccessor -from cudf.core.dtype.validators import is_dtype_obj_numeric +from cudf.core.dtype.validators import ( + is_dtype_obj_string, +) from cudf.core.frame import Frame from cudf.core.index import ( Index, @@ -36,11 +38,9 @@ from cudf.core.join._join_helpers import _match_join_keys from cudf.errors import MixedTypeError from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, SIZE_TYPE_DTYPE, dtype_from_pylibcudf_column, is_column_like, - is_pandas_nullable_extension_dtype, ) from cudf.utils.performance_tracking import _performance_tracking from cudf.utils.utils import ( @@ -214,24 +214,26 @@ def __init__( # Now we can gather and insert null automatically code[code == -1] = np.iinfo(SIZE_TYPE_DTYPE).min result_col = level._column.take(code, nullify=True) - if ( - cudf.get_option("mode.pandas_compatible") - and nan_as_null is False - and not is_dtype_obj_numeric(result_col.dtype) - and not is_pandas_nullable_extension_dtype(level.dtype) - and result_col.has_nulls(include_nan=False) - ): - raise MixedTypeError( - "MultiIndex levels cannot have mixed types when `mode.pandas_compatible` is True and `nan_as_null` is False." - ) - if ( - cudf.get_option("mode.pandas_compatible") - and not is_dtype_obj_numeric(result_col.dtype) - and result_col.has_nulls(include_nan=False) - and nan_as_null is False - and not is_pandas_nullable_extension_dtype(level.dtype) - ): - result_col = result_col.fillna(np.nan) + # TODO: Pandas-3.0: Investigate with pandas test suite and remove + # the following checks if they are obsolete now. + # if ( + # cudf.get_option("mode.pandas_compatible") + # and nan_as_null is False + # and not is_dtype_obj_numeric(result_col.dtype) + # and not is_pandas_nullable_extension_dtype(level.dtype) + # and result_col.has_nulls(include_nan=False) + # ): + # raise MixedTypeError( + # "MultiIndex levels cannot have mixed types when `mode.pandas_compatible` is True and `nan_as_null` is False." + # ) + # if ( + # cudf.get_option("mode.pandas_compatible") + # and not is_dtype_obj_numeric(result_col.dtype) + # and result_col.has_nulls(include_nan=False) + # and nan_as_null is False + # and not is_pandas_nullable_extension_dtype(level.dtype) + # ): + # result_col = result_col.fillna(np.nan) source_data[i] = ColumnBase.create( result_col.plc_column, level.dtype ) @@ -282,9 +284,9 @@ def to_series(self, index=None, name=None): @_performance_tracking def astype(self, dtype: Dtype, copy: bool = True) -> Self: - if cudf.dtype(dtype) != CUDF_STRING_DTYPE: + if not is_dtype_obj_string(cudf.dtype(dtype)): raise TypeError( - "Setting a MultiIndex dtype to anything other than object is " + "Setting a MultiIndex dtype to anything other than string is " "not supported" ) return self @@ -782,20 +784,19 @@ def _compute_validity_mask(self, index, row_tuple, max_length): verify=False, ) ) - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - data_table = cudf.concat( - [ - frame, - cudf.DataFrame._from_data( - ColumnAccessor( - {"idx": ColumnBase.from_range(range(len(frame)))}, - verify=False, - ) - ), - ], - axis=1, - ) + + data_table = cudf.concat( + [ + frame, + cudf.DataFrame._from_data( + ColumnAccessor( + {"idx": ColumnBase.from_range(range(len(frame)))}, + verify=False, + ) + ), + ], + axis=1, + ) # Sort indices in pandas compatible mode # because we want the indices to be fetched # in a deterministic order. @@ -1017,7 +1018,7 @@ def deserialize(cls, header, frames): @_performance_tracking def __getitem__(self, index): - flatten = isinstance(index, int) + flatten = is_integer(index) if isinstance(index, slice): start, stop, step = index.indices(len(self)) @@ -1197,27 +1198,6 @@ def get_level_values(self, level) -> Index: ) return level_values - def _is_numeric(self) -> bool: - return False - - def _is_boolean(self) -> bool: - return False - - def _is_integer(self) -> bool: - return False - - def _is_floating(self) -> bool: - return False - - def _is_object(self) -> bool: - return False - - def _is_categorical(self) -> bool: - return False - - def _is_interval(self) -> bool: - return False - @classmethod @_performance_tracking def _concat(cls, objs) -> Self: @@ -1306,7 +1286,7 @@ def dtypes(self) -> pd.Series: names=['number', 'color']) >>> idx.dtypes number int64 - color object + color str dtype: object """ # Not using DataFrame.dtypes to avoid expensive invocation of `._data.to_pandas_index` @@ -1803,11 +1783,11 @@ def fillna(self, value) -> Self: ... names=["x", "y"], ... ) >>> index - MultiIndex([( 'a', '1'), - ( 'a', '5'), - ( 'b', ), - ( 'c', ), - (, '1')], + MultiIndex([('a', '1'), + ('a', '5'), + ('b', nan), + ('c', nan), + (nan, '1')], names=['x', 'y']) >>> index.fillna('hello') MultiIndex([( 'a', '1'), @@ -1817,8 +1797,7 @@ def fillna(self, value) -> Self: ('hello', '1')], names=['x', 'y']) """ - - return super().fillna(value=value) + return super()._fillna(value=value) @_performance_tracking def unique(self, level: int | None = None) -> Self | Index: diff --git a/python/cudf/cudf/core/resample.py b/python/cudf/cudf/core/resample.py index 2f51b3230044..9bef8000e2bf 100644 --- a/python/cudf/cudf/core/resample.py +++ b/python/cudf/cudf/core/resample.py @@ -2,10 +2,8 @@ # SPDX-License-Identifier: Apache-2.0 from __future__ import annotations -import warnings from typing import TYPE_CHECKING -import numpy as np import pandas as pd import cudf @@ -19,6 +17,8 @@ ) if TYPE_CHECKING: + import pylibcudf as plc + from cudf._typing import DataFrameOrSeries from cudf.core.index import Index @@ -30,6 +30,19 @@ def __init__(self, obj, by, axis=None, kind=None): by = _ResampleGrouping(obj, by) super().__init__(obj, by=by) + def _restore_freq(self, result: DataFrameOrSeries) -> DataFrameOrSeries: + if self.grouping._freq is not None and isinstance( + result.index, cudf.DatetimeIndex + ): + if result is self.obj: + result = result.copy(deep=False) + result.index = cudf.DatetimeIndex._from_column( + result.index._column, + name=result.index.name, + freq=self.grouping._freq, + ) + return result + def agg(self, func, *args, engine=None, engine_kwargs=None, **kwargs): result = super().agg( func, *args, engine=engine, engine_kwargs=engine_kwargs, **kwargs @@ -38,21 +51,46 @@ def agg(self, func, *args, engine=None, engine_kwargs=None, **kwargs): index = cudf.Index( self.grouping.bin_labels, name=self.grouping.names[0] ) - return result._align_to_index( - index, how="right", sort=False, allow_non_unique=True + return self._restore_freq( + result._align_to_index( + index, how="right", sort=False, allow_non_unique=True + ) ) else: - return result.sort_index() + return self._restore_freq(result.sort_index()) def asfreq(self): - return self.obj._align_to_index( - self.grouping.bin_labels, - how="right", - sort=False, - allow_non_unique=True, + return self._restore_freq( + self.obj._align_to_index( + self.grouping.bin_labels, + how="right", + sort=False, + allow_non_unique=True, + ) ) - def _scan_fill(self, method: str, limit: int) -> DataFrameOrSeries: + def size(self): + # GroupBy.size bypasses _Resampler.agg and so doesn't pick up the + # bin-label freq. Re-align to the full set of bins (filling empty + # buckets with 0, since size is non-null in pandas) and re-attach + # the freq. + result = super().size() + if len(self.grouping.bin_labels) != len(result): + index = cudf.Index( + self.grouping.bin_labels, name=self.grouping.names[0] + ) + result = ( + result._align_to_index( + index, how="right", sort=False, allow_non_unique=True + ) + .fillna(0) + .astype(result.dtype) + ) + return self._restore_freq(result.sort_index()) + + def _scan_fill( + self, method: plc.replace.ReplacePolicy, limit: int | None + ) -> DataFrameOrSeries: # TODO: can this be more efficient? # first, compute the outer join between `self.obj` and the `bin_labels` @@ -64,18 +102,17 @@ def _scan_fill(self, method: str, limit: int) -> DataFrameOrSeries: allow_non_unique=True, ) - # fill the gaps: - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - filled = upsampled.fillna(method=method) + filled = upsampled._fillna(method=method, limit=limit) # filter the result to only include the values corresponding # to the bin labels: - return filled._align_to_index( - self.grouping.bin_labels, - how="right", - sort=False, - allow_non_unique=True, + return self._restore_freq( + filled._align_to_index( + self.grouping.bin_labels, + how="right", + sort=False, + allow_non_unique=True, + ) ) def serialize(self): @@ -164,6 +201,7 @@ def deserialize(cls, header, frames): return out def _handle_frequency_grouper(self, by): + from pandas.tseries.offsets import Day # if `by` is a time frequency grouper, we bin the key column # using bin intervals specified by `by.freq`, then use *that* # as the groupby key @@ -221,6 +259,13 @@ def _handle_frequency_grouper(self, by): closed=closed, ) + # Track the natural end before adding the safety margin. + # When closed='right' and max_date falls exactly on a bin right + # boundary, _get_timestamp_range_edges returns end == max_date + # (the "already the end of the road" case in _adjust_dates_anchored). + # In that case pandas includes one trailing empty bin, so we must too. + natural_end = end + # in some cases, an extra time stamp is required in order to # bin all the values. It's OK if we generate more labels than # we need, as we remove any unused labels below @@ -233,26 +278,12 @@ def _handle_frequency_grouper(self, by): freq=freq, ) - # We want the (resampled) column of timestamps in the result - # to have a resolution closest to the resampling - # frequency. For example, if resampling from '1T' to '1s', we - # want the resulting timestamp column to by of dtype - # 'datetime64[s]'. libcudf requires the bin labels and key - # column to have the same dtype, so we compute a `result_type` + # Pandas resample preserves the input column's resolution, so the + # resulting timestamp column should match `key_column.dtype` rather + # than be derived from the offset. libcudf requires the bin labels + # and key column to share a dtype, so we compute a `result_type` # and cast them both to that type. - if offset.rule_code.lower() in {"d", "h"}: - # unsupported resolution (we don't support resolutions >s) - result_type = np.dtype("datetime64[s]") - else: - try: - result_type = np.dtype(f"datetime64[{offset.rule_code}]") - # TODO: Ideally, we can avoid one cast by having `date_range` - # generate timestamps of a given dtype. Currently, it can - # only generate timestamps with 'ns' precision - except TypeError: - # unsupported resolution (we don't support resolutions >s) - # fall back to using datetime64[s] - result_type = np.dtype("datetime64[s]") + result_type = key_column.dtype cast_key_column = key_column.astype(result_type) cast_bin_labels = bin_labels.astype(result_type) @@ -269,8 +300,19 @@ def _handle_frequency_grouper(self, by): else: cast_bin_labels = cast_bin_labels[:-1] - # if we have more labels than bins, remove the extras labels: + # if we have more labels than bins, remove the extra labels. + # When closed='right' and max_date was exactly on a bin right boundary + # (natural_end == max_date), include one trailing empty bin to match + # pandas behavior. This only applies to Day offsets; sub-day Tick + # offsets (e.g. Second) do not exhibit this behaviour. + nbins = bin_numbers.max() + 1 + if ( + isinstance(offset, Day) + and closed == "right" + and natural_end == pd.Timestamp(max_date) + ): + nbins = min(nbins + 1, len(cast_bin_labels)) if len(cast_bin_labels) > nbins: cast_bin_labels = cast_bin_labels[:nbins] @@ -329,7 +371,7 @@ def _get_timestamp_range_edges( """ from pandas.tseries.offsets import Day, Tick - if isinstance(freq, Tick): + if isinstance(freq, (Tick, Day)): index_tz = first.tz if isinstance(origin, pd.Timestamp) and (origin.tz is None) != ( index_tz is None diff --git a/python/cudf/cudf/core/reshape.py b/python/cudf/cudf/core/reshape.py index f005a8358605..a10635c2eca2 100644 --- a/python/cudf/cudf/core/reshape.py +++ b/python/cudf/cudf/core/reshape.py @@ -2,8 +2,8 @@ # SPDX-License-Identifier: Apache-2.0 from __future__ import annotations +import copy import itertools -import warnings from typing import TYPE_CHECKING, Literal import numpy as np @@ -12,7 +12,6 @@ import cudf from cudf.api.extensions import no_default from cudf.api.types import is_list_like, is_scalar -from cudf.core._compat import PANDAS_LT_300 from cudf.core.column import ( ColumnBase, as_column, @@ -20,10 +19,13 @@ concat_columns, ) from cudf.core.column_accessor import ColumnAccessor +from cudf.core.dtype.validators import is_dtype_obj_string from cudf.core.dtypes import CategoricalDtype, dtype as cudf_dtype from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, + DEFAULT_STRING_DTYPE, SIZE_TYPE_DTYPE, + find_common_type, + is_pandas_nullable_extension_dtype, min_unsigned_type, ) @@ -106,7 +108,7 @@ def _get_combined_index(indexes, intersect: bool = False, sort=None): else: index = indexes[0] if sort is None: - sort = not index._is_object() + sort = not is_dtype_obj_string(index.dtype) for other in indexes[1:]: index = index.union(other, sort=False) @@ -128,7 +130,10 @@ def _normalize_series_and_dataframe( name = obj.name if name is None: if axis == 0: - name = 0 + # Preserve "unnamed" semantics so the resulting frame has + # a RangeIndex columns object (matching pandas). + objs[idx] = obj.to_frame() + continue else: name = sr_name sr_name += 1 @@ -136,6 +141,30 @@ def _normalize_series_and_dataframe( objs[idx] = obj.to_frame(name=name) +def _finalize_concat_metadata(result, inputs): + """Propagate ``attrs`` and ``flags`` onto a concat result. + + Mirrors pandas' ``__finalize__`` with ``input_objs``: ``attrs`` are + propagated only when all inputs carry identical non-empty ``attrs``, + and ``allows_duplicate_labels`` is the AND across inputs. The + :class:`~pandas.errors.DuplicateLabelError` check is performed by + :class:`pandas.Flags` when setting ``allows_duplicate_labels`` to + ``False``. + """ + inputs = [ + obj for obj in inputs if isinstance(obj, (cudf.Series, cudf.DataFrame)) + ] + if not inputs or not isinstance(result, (cudf.Series, cudf.DataFrame)): + return result + if all(bool(obj.attrs) for obj in inputs): + first_attrs = inputs[0].attrs + if all(obj.attrs == first_attrs for obj in inputs[1:]): + result._attrs = copy.deepcopy(first_attrs) + allows = all(obj.flags.allows_duplicate_labels for obj in inputs) + result.flags.allows_duplicate_labels = allows + return result + + def concat( objs, axis=0, @@ -192,17 +221,17 @@ def concat( >>> s1 0 a 1 b - dtype: object + dtype: str >>> s2 0 c 1 d - dtype: object + dtype: str >>> cudf.concat([s1, s2]) 0 a 1 b 0 c 1 d - dtype: object + dtype: str Clear the existing index and reset it in the result by setting the ``ignore_index`` option to ``True``. @@ -212,7 +241,7 @@ def concat( 1 b 2 c 3 d - dtype: object + dtype: str Combine two DataFrame objects with identical columns. @@ -247,8 +276,8 @@ def concat( 1 d 4 dog >>> cudf.concat([df1, df3], sort=False) letter number animal - 0 a 1 None - 1 b 2 None + 0 a 1 NaN + 1 b 2 NaN 0 c 3 cat 1 d 4 dog @@ -286,6 +315,38 @@ def concat( 0 a 1 c 3 1 b 2 d 4 """ + # Materialize the input sequence so both `concat`'s implementation and + # `_finalize_concat_metadata` see identical objects (concat consumes + # dicts/iterators). + if isinstance(objs, dict): + inputs = list(objs.values()) + else: + inputs = list(objs) + result = _concat_impl( + objs, + axis=axis, + join=join, + ignore_index=ignore_index, + keys=keys, + levels=levels, + names=names, + verify_integrity=verify_integrity, + sort=sort, + ) + return _finalize_concat_metadata(result, inputs) + + +def _concat_impl( + objs, + axis=0, + join="outer", + ignore_index=False, + keys=None, + levels=None, + names=None, + verify_integrity=False, + sort=None, +): if keys is not None: raise NotImplementedError("keys is currently not supported") if levels is not None: @@ -389,25 +450,9 @@ def concat( ) _normalize_series_and_dataframe(objs, axis=axis) - any_empty = any(obj.empty for obj in objs) - if any_empty: - # Do not remove until pandas-3.0 support is added. - assert PANDAS_LT_300, ( - "Need to drop after pandas-3.0 support is added." - ) - warnings.warn( - "The behavior of array concatenation with empty entries is " - "deprecated. In a future version, this will no longer exclude " - "empty items when determining the result dtype. " - "To retain the old behavior, exclude the empty entries before " - "the concat operation.", - FutureWarning, - ) # Inner joins involving empty data frames always return empty dfs, but # We must delay returning until we have set the column names. - empty_inner = any_empty and join == "inner" - - objs = [obj for obj in objs if obj.shape != (0, 0)] + empty_inner = join == "inner" and any(obj.empty for obj in objs) if len(objs) == 0: # TODO: https://github.com/rapidsai/cudf/issues/16550 @@ -537,7 +582,15 @@ def concat( elif typ is cudf.Series: new_objs = [obj for obj in objs if len(obj)] if len(new_objs) == 1 and not ignore_index: - return new_objs[0] + result = new_objs[0] + # Promote dtype for empty series with explicit dtypes, + # e.g. int64 + empty float64 should yield float64. + all_promote_dtypes = {obj.dtype for obj in objs if len(obj) == 0} + all_promote_dtypes.add(result.dtype) + if len(all_promote_dtypes) > 1: + common_dtype = find_common_type(list(all_promote_dtypes)) + result = result.astype(common_dtype) + return result else: return cudf.Series._concat(objs, axis=axis, index=not ignore_index) elif typ is cudf.MultiIndex: @@ -784,7 +837,7 @@ def get_dummies( 0 1.0 1 2.0 2 NaN - 3 + 3 NaN >>> cudf.get_dummies(df, dummy_na=True, columns=["a"]) a_1.0 a_2.0 a_nan a_ @@ -815,7 +868,7 @@ def get_dummies( dtype = cudf_dtype(dtype) if isinstance(data, cudf.DataFrame): - encode_fallback_dtypes = [CUDF_STRING_DTYPE, "category"] + encode_fallback_dtypes = [DEFAULT_STRING_DTYPE, "category"] if columns is None or len(columns) == 0: columns = data.select_dtypes( @@ -983,8 +1036,8 @@ def pivot( c b 1 2 3 a - 1 one two None - 2 None None three + 1 one two NaN + 2 NaN NaN three """ values_is_list = True @@ -1014,12 +1067,41 @@ def pivot( index_data = index_data.get_level_values(0) else: index_data = cudf.Index(index_data) + # An entirely empty input pivots to an empty result. Pandas uses the + # default ``object`` dtype for the resulting index axis in that case; + # mirror this so index metadata (dtype/inferred_type) matches. + if ( + len(data) == 0 + and not isinstance(index_data, cudf.MultiIndex) + and is_pandas_nullable_extension_dtype(index_data.dtype) + and is_dtype_obj_string(index_data.dtype) + ): + index_data = cudf.Index( + pd.Index([], name=index_data.name, dtype=object) + ) column_data = data.loc[:, columns] + # When `columns` is a scalar but the source DataFrame has a MultiIndex on + # the row axis, ``loc`` may return a 2-D selection in cuDF. Treat the + # selection as 1-D so we end up with a flat Index of column labels. + if is_scalar(columns) and column_data.ndim == 2: + column_data = column_data.iloc[:, 0] if column_data.ndim == 2: column_data = cudf.MultiIndex.from_frame(column_data) else: column_data = cudf.Index(column_data) + # An entirely empty input pivots to an empty result. Pandas reports the + # default ``object`` dtype for the resulting columns axis in that case; + # mirror this so column metadata (dtype/inferred_type) matches. + if ( + len(data) == 0 + and not isinstance(column_data, cudf.MultiIndex) + and is_pandas_nullable_extension_dtype(column_data.dtype) + and is_dtype_obj_string(column_data.dtype) + ): + column_data = cudf.Index( + pd.Index([], name=column_data.name, dtype=object) + ) # Create a DataFrame composed of columns from both # columns and index @@ -1170,13 +1252,12 @@ def unstack(df, level, fill_value=None, sort: bool = True): return df if not isinstance(df.index, cudf.MultiIndex): dtype = df._columns[0].dtype - for col in df._columns: - if not col.dtype == dtype: - raise ValueError( - "Calling unstack() on single index dataframe" - " with different column datatype is not supported." - ) - res = df.T.stack(future_stack=False) + if any(col_dtype != dtype for _, col_dtype in df._dtypes): + raise ValueError( + "Calling unstack() on single index dataframe" + " with different column datatype is not supported." + ) + res = df.T.stack(future_stack=True) # Result's index is a multiindex res.index.names = ( tuple(df._data.to_pandas_index.names) + df.index.names diff --git a/python/cudf/cudf/core/series.py b/python/cudf/cudf/core/series.py index 0a414b8e0523..7b0353c01afc 100644 --- a/python/cudf/cudf/core/series.py +++ b/python/cudf/cudf/core/series.py @@ -6,7 +6,6 @@ import functools import inspect import textwrap -import warnings from collections.abc import Mapping from copy import deepcopy from shutil import get_terminal_size @@ -28,7 +27,6 @@ is_scalar, ) from cudf.core import indexing_utils -from cudf.core._compat import PANDAS_LT_300 from cudf.core.accessors import ( CategoricalAccessor, ListMethods, @@ -41,7 +39,10 @@ ) from cudf.core.column.column import _normalize_types_column, concat_columns from cudf.core.column_accessor import ColumnAccessor -from cudf.core.dtype.validators import is_dtype_obj_numeric +from cudf.core.dtype.validators import ( + is_dtype_obj_numeric, + is_dtype_obj_string, +) from cudf.core.dtypes import CategoricalDtype, IntervalDtype from cudf.core.groupby.groupby import SeriesGroupBy, groupby_doc_template from cudf.core.index import ( @@ -62,7 +63,7 @@ from cudf.utils import docutils from cudf.utils.docutils import copy_docstring from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, + DEFAULT_STRING_DTYPE, _get_nan_for_dtype, dtype_from_pylibcudf_column, find_common_type, @@ -122,10 +123,7 @@ def _describe_timetype( **dict( zip( _format_percentile_names(percentiles), - obj.quantile(percentiles) - .astype(CUDF_STRING_DTYPE) - .to_numpy(na_value=np.nan) - .tolist(), + [str(typ(x)) for x in obj.quantile(percentiles).to_pandas()], strict=True, ) ), @@ -205,9 +203,8 @@ def __setitem__(self, key, value): if isinstance(key, tuple): key = list(key) - if ( - self._frame.dtype.kind in "uifb" - or self._frame.dtype == CUDF_STRING_DTYPE + if self._frame.dtype.kind in "uifb" or is_dtype_obj_string( + self._frame.dtype ): # normalize types if necessary: # In contrast to Column.__setitem__ (which downcasts the value to @@ -215,6 +212,14 @@ def __setitem__(self, key, value): # larger data type mimicking pandas if not (value is None or value is cudf.NA or value is np.nan): tmp_value = as_column(value) + if ( + self._frame.dtype.kind in "uifb" + and tmp_value.dtype.kind == "O" + ): + raise TypeError( + f"Invalid value '{value!s}' for dtype " + f"'{self._frame.dtype}'" + ) if ( not tmp_value.can_cast_safely(self._frame.dtype) and not is_pandas_nullable_extension_dtype( @@ -243,24 +248,12 @@ def __setitem__(self, key, value): to_dtype = find_common_type( (tmp_value.dtype, self._frame.dtype) ) - tmp_value = tmp_value.astype(to_dtype) if to_dtype != self._frame.dtype: - # Do not remove until pandas-3.0 support is added. - assert PANDAS_LT_300, ( - "Need to drop after pandas-3.0 support is added." - ) - warnings.warn( - f"Setting an item of incompatible dtype is deprecated " - "and will raise in a future error of pandas. " - f"Value '{value}' has dtype incompatible with " - f"{self._frame.dtype}, " - "please explicitly cast to a compatible dtype first.", - FutureWarning, - ) - self._frame._column._mimic_inplace( - self._frame._column.astype(to_dtype), inplace=True + raise TypeError( + f"Invalid value '{value}' for dtype '{self._frame.dtype}'" ) if is_scalar(value): + tmp_value = tmp_value.astype(to_dtype) value = tmp_value.element_indexing(0) self._frame._column[key] = value @@ -354,26 +347,6 @@ def _loc_to_iloc(self, arg): raise NotImplementedError( "Interval indexing is not supported." ) - if not is_dtype_obj_numeric( - index_dtype, include_decimal=False - ) and not ( - isinstance(index_dtype, CategoricalDtype) - and index_dtype.categories.dtype.kind in "iu" - ): - # TODO: switch to cudf.utils.dtypes.is_integer(arg) - if is_integer(arg): - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, ( - "Need to drop after pandas-3.0 support is added." - ) - warn_msg = ( - "Series.__getitem__ treating keys as positions is deprecated. " - "In a future version, integer keys will always be treated " - "as labels (consistent with DataFrame behavior). To access " - "a value by position, use `ser.iloc[pos]`" - ) - warnings.warn(warn_msg, FutureWarning) - return arg try: if isinstance(self._frame.index, RangeIndex): indices = self._frame.index._indices_of(arg) @@ -531,8 +504,8 @@ def from_arrow(cls, array: pa.Array) -> Self: >>> cudf.Series.from_arrow(pa.array(["a", "b", None])) 0 a 1 b - 2 None - dtype: object + 2 NaN + dtype: str """ return cls._from_column(ColumnBase.from_arrow(array)) @@ -552,15 +525,24 @@ def __init__( name_from_data = None if data is None: data = {} + if dtype is None and index is not None and len(index) > 0: + dtype = np.dtype("float64") if dtype is not None: dtype = cudf.dtype(dtype) attrs = None + allows_duplicate_labels = True if isinstance(data, (pd.Series, pd.Index, Index, Series)): attrs = deepcopy(getattr(data, "attrs", None)) - if copy and not isinstance(data, (pd.Series, pd.Index)): - data = data.copy(deep=True) + if isinstance(data, (pd.Series, Series)): + allows_duplicate_labels = data.flags.allows_duplicate_labels name_from_data = data.name column = as_column(data, nan_as_null=nan_as_null, dtype=dtype) + if not isinstance(data, (pd.Series, pd.Index)): + # Shallow copy so the new column gets its own Buffer + # reference in the BufferOwner's _slices WeakSet. + # This enables CoW: writes trigger + # make_single_owner_inplace() when len(_slices) > 1. + column = column.copy(deep=copy) if isinstance(data, (pd.Series, Series)): index_from_data = ensure_index(data.index) elif isinstance(data, ColumnAccessor): @@ -627,7 +609,12 @@ def __init__( first_index = index second_index = None - super().__init__({name: column}, index=first_index, attrs=attrs) + super().__init__( + {name: column}, + index=first_index, + attrs=attrs, + allows_duplicate_labels=allows_duplicate_labels, + ) if second_index is not None: reindexed = self.reindex(index=second_index, copy=False) self._data = reindexed._data @@ -654,8 +641,14 @@ def _from_data( index: Index | None = None, name: Any = no_default, attrs: dict | None = None, + allows_duplicate_labels: bool = True, ) -> Series: - out = super()._from_data(data=data, index=index, attrs=attrs) + out = super()._from_data( + data=data, + index=index, + attrs=attrs, + allows_duplicate_labels=allows_duplicate_labels, + ) if name is not no_default: out.name = name return out @@ -706,7 +699,7 @@ def dt(self): >>> s = cudf.Series(cudf.date_range( ... start='2001-02-03 12:00:00', ... end='2001-02-03 14:00:00', - ... freq='1H')) + ... freq='1h')) >>> s.dt.hour 0 12 1 13 @@ -946,7 +939,7 @@ def reindex( 11 b 12 c 13 d - dtype: object + dtype: str >>> series.reset_index() index 0 0 10 a @@ -958,7 +951,7 @@ def reindex( 1 b 2 c 3 d - dtype: object + dtype: str You can also use ``reset_index`` with MultiIndex. @@ -1038,19 +1031,19 @@ def to_frame(self, name: Hashable = no_default) -> DataFrame: 10 a 11 b 12 c - 13 None + 13 NaN 15 d - Name: sample, dtype: object + Name: sample, dtype: str >>> series.to_frame() sample 10 a 11 b 12 c - 13 None + 13 NaN 15 d """ res = self._to_frame(name=name, index=self.index) - res._attrs = self.attrs # type: ignore[has-type] + self._propagate_metadata(res) return res @_performance_tracking @@ -1177,9 +1170,9 @@ def map(self, arg, na_action: None | Literal["ignore"] = None) -> Self: >>> s 0 cat 1 dog - 2 None + 2 NaN 3 rabbit - dtype: object + dtype: str ``map`` accepts a ``dict`` or a ``Series``. Values that are not found in the ``dict`` are converted to ``NaN``, default values in dicts are @@ -1188,9 +1181,9 @@ def map(self, arg, na_action: None | Literal["ignore"] = None) -> Self: >>> s.map({'cat': 'kitten', 'dog': 'puppy'}) 0 kitten 1 puppy - 2 None - 3 None - dtype: object + 2 NaN + 3 NaN + dtype: str It also accepts numeric functions: @@ -1335,18 +1328,7 @@ def __getitem__(self, arg): or self.index.dtype.kind in {"i", "u", "f"} or isinstance(self.index.dtype, IntervalDtype) ): - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, ( - "Need to drop after pandas-3.0 support is added." - ) - warnings.warn( - "Series.__getitem__ treating keys as positions is deprecated " - "In a future version, integer keys will always be treated as labels " - "(consistent with DataFrame behavior) To access a value by position, " - "use `ser.iloc[pos]`", - FutureWarning, - ) - return self.iloc[arg] + raise KeyError(arg) else: return self.loc[arg] @@ -1371,9 +1353,7 @@ def __repr__(self) -> str: if max_rows not in (0, None) and len(self) > max_rows: top = self.head(int(max_rows / 2 + 1)) bottom = self.tail(int(max_rows / 2 + 1)) - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - preprocess = cudf.concat([top, bottom]) + preprocess = cudf.concat([top, bottom]) else: preprocess = self if isinstance(preprocess.dtype, CategoricalDtype): @@ -1385,22 +1365,7 @@ def __repr__(self) -> str: show_dimensions = pd.get_option("display.show_dimensions") preprocess = preprocess.copy(deep=False) preprocess.index = preprocess.index._pandas_repr_compatible() - if preprocess.dtype.categories.dtype.kind == "f": - pd_series = ( - preprocess.astype(CUDF_STRING_DTYPE) - .to_pandas() - .astype( - dtype=pd.CategoricalDtype( - categories=preprocess.dtype.categories.astype( - CUDF_STRING_DTYPE - ).to_pandas(), - ordered=preprocess.dtype.ordered, - ) - ) - ) - else: - pd_series = preprocess.to_pandas() - output = pd_series.to_string( + output = preprocess.to_pandas().to_string( name=self.name, dtype=self.dtype, min_rows=min_rows, @@ -1413,17 +1378,16 @@ def __repr__(self) -> str: lines = output.split("\n") if isinstance(preprocess.dtype, CategoricalDtype): - category_memory = lines[-1] - if preprocess.dtype.categories.dtype.kind == "f": - category_memory = category_memory.replace("'", "").split(": ") - category_memory = ( - category_memory[0].replace( - "object", preprocess.dtype.categories.dtype.name - ) - + ": " - + category_memory[1] - ) - lines = lines[:-1] + # The trailing "Categories (...): [...]" block can wrap across + # multiple lines (e.g. for datetime categories), so capture every + # line from "Categories" onwards instead of just the last line. + for cat_start in range(len(lines) - 1, -1, -1): + if lines[cat_start].startswith("Categories"): + break + else: + cat_start = len(lines) - 1 + category_memory = "\n".join(lines[cat_start:]) + lines = lines[:cat_start] if len(lines) > 1: if lines[-1].startswith("Name: "): lines = lines[:-1] @@ -1470,7 +1434,13 @@ def _make_operands_and_index_for_binop( raise ValueError( "Can only compare identically-labeled Series objects" ) + indices_differ = not self.index.equals(other.index) lhs, other = _align_indices([self, other], allow_non_unique=True) + # When indices differ, pandas returns freq=None for the result + # (the aligned union index may be regular but pandas doesn't infer + # it in this case). Clear freq to match pandas behaviour. + if indices_differ and isinstance(lhs.index, DatetimeIndex): + lhs.index._freq = None else: lhs = self @@ -1522,9 +1492,7 @@ def _concat(cls, objs, axis: Axis = 0, index: bool = True) -> Self: if isinstance(objs[0].index, cudf.MultiIndex): result_index = cudf.MultiIndex._concat([o.index for o in objs]) else: - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - result_index = Index._concat([o.index for o in objs]) + result_index = Index._concat([o.index for o in objs]) elif index is False: result_index = None else: @@ -1570,7 +1538,12 @@ def _concat(cls, objs, axis: Axis = 0, index: bool = True) -> Self: col = concat_columns([o._column for o in objs]) if len(objs): + local_time = col.__dict__.get("_local_time") col = ColumnBase.create(col.plc_column, objs[0].dtype) + if local_time is not None and isinstance( + col, cudf.core.column.datetime.DatetimeTZColumn + ): + col._local_time = local_time result = cls._from_column(col, name=name, index=result_index) if isinstance(result.index, DatetimeIndex): @@ -1699,13 +1672,13 @@ def dropna( >>> ser = cudf.Series(['', None, 'abc']) >>> ser 0 - 1 None + 1 NaN 2 abc - dtype: object + dtype: str >>> ser.dropna() 0 2 abc - dtype: object + dtype: str """ if axis not in (0, "index"): raise ValueError( @@ -1757,7 +1730,7 @@ def drop_duplicates( 3 beetle 4 lama 5 hippo - Name: animal, dtype: object + Name: animal, dtype: str With the `keep` parameter, the selection behavior of duplicated values can be changed. The value 'first' keeps the first @@ -1771,7 +1744,7 @@ def drop_duplicates( 1 cow 3 beetle 5 hippo - Name: animal, dtype: object + Name: animal, dtype: str The value 'last' for parameter `keep` keeps the last occurrence for each set of duplicated entries. @@ -1781,7 +1754,7 @@ def drop_duplicates( 3 beetle 4 lama 5 hippo - Name: animal, dtype: object + Name: animal, dtype: str The value `False` for parameter `keep` discards all sets of duplicated entries. Setting the value of 'inplace' to @@ -1792,7 +1765,7 @@ def drop_duplicates( 1 cow 3 beetle 5 hippo - Name: animal, dtype: object + Name: animal, dtype: str """ result = super().drop_duplicates(keep=keep, ignore_index=ignore_index) @@ -1801,20 +1774,62 @@ def drop_duplicates( @_performance_tracking def fillna( self, - value: None | ScalarLike | Series = None, - method: Literal["ffill", "bfill", "pad", "backfill"] | None = None, + value: None | ScalarLike | Series, + *, axis: Axis | None = None, inplace: bool = False, limit: int | None = None, ) -> Self | None: + """Fill null values with ``value``. + + Parameters + ---------- + value : scalar, Series-like or dict + Value to use to fill nulls. If Series-like, null values + are filled with values in corresponding indices. + A dict can be used to provide different values to fill nulls + in different columns. + + Returns + ------- + result : Series + Copy with nulls filled. + + Examples + -------- + >>> import cudf + >>> ser = cudf.Series(['a', 'b', None, 'c']) + >>> ser + 0 a + 1 b + 2 NaN + 3 c + dtype: str + >>> ser.fillna('z') + 0 a + 1 b + 2 z + 3 c + dtype: str + + ``fillna`` can also supports inplace operation: + + >>> ser.fillna('z', inplace=True) + >>> ser + 0 a + 1 b + 2 z + 3 c + dtype: str + """ if isinstance(value, (pd.Series, Mapping)): value = Series(value) if isinstance(value, cudf.Series): if not self.index.equals(value.index): value = value.reindex(self.index) value = {self.name: value._column} - return super().fillna( - value=value, method=method, axis=axis, inplace=inplace, limit=limit + return super()._fillna( + value=value, axis=axis, inplace=inplace, limit=limit ) def between( @@ -1916,7 +1931,7 @@ def between( @_performance_tracking def all( self, - axis: Axis = 0, + axis: Axis | None = 0, bool_only: bool | None = None, skipna: bool = True, **kwargs, @@ -1999,7 +2014,7 @@ def to_pandas( 2 0 dtype: int64 >>> type(pds) - + ``nullable=True`` converts the result to pandas nullable types: @@ -2042,6 +2057,9 @@ def to_pandas( name=self.name, ) res.attrs = self.attrs + res.flags.allows_duplicate_labels = ( + self._flags.allows_duplicate_labels # type: ignore[has-type] + ) return res @_performance_tracking @@ -2354,10 +2372,9 @@ def replace( self, to_replace=None, value=no_default, + *, inplace: bool = False, - limit=None, regex: bool = False, - method=no_default, ) -> Self | None: if is_dict_like(to_replace) and value not in {None, no_default}: raise ValueError( @@ -2369,9 +2386,7 @@ def replace( to_replace, value, inplace=inplace, - limit=limit, regex=regex, - method=method, ) @_performance_tracking @@ -2405,13 +2420,13 @@ def update(self, other): 0 a 1 b 2 c - dtype: object + dtype: str >>> s.update(cudf.Series(['d', 'e'], index=[0, 2])) >>> s 0 d 1 b 2 e - dtype: object + dtype: str >>> s = cudf.Series([1, 2, 3]) >>> s 0 1 @@ -2593,7 +2608,7 @@ def apply( ... return x + 1.5 >>> sr.apply(f) 0 2.5 - 1 + 1 NaN 2 4.5 dtype: float64 @@ -3053,17 +3068,17 @@ def unique(self) -> cp.ndarray | Self: 0 a 1 a 2 b - 3 None + 3 NaN 4 b - 5 None + 5 NaN 6 c - dtype: object + dtype: str >>> series.unique() 0 a 1 b - 2 None + 2 NaN 3 c - dtype: object + dtype: str """ res = self._column.unique() if cudf.get_option("mode.pandas_compatible"): @@ -3135,7 +3150,7 @@ def value_counts( 3 3.0 4 3.0 5 3.0 - 6 + 6 NaN dtype: float64 >>> sr.value_counts() 3.0 3 @@ -3168,16 +3183,16 @@ def value_counts( 1 2.0 2 2.0 3 3.0 - 4 + 4 NaN 5 3.0 6 3.0 - 7 + 7 NaN dtype: float64 >>> sr.value_counts(dropna=False).sort_index() 1.0 1 2.0 2 3.0 3 - 2 + NaN 2 Name: count, dtype: int64 >>> s = cudf.Series([3, 1, 2, 3, 4, np.nan]) @@ -3191,9 +3206,13 @@ def value_counts( series_bins = cudf.cut(self, bins, include_lowest=True) result_name = "proportion" if normalize else "count" if dropna and self._is_all_null: + count_dtype = get_dtype_of_same_kind( + self.dtype, + np.dtype(np.float64) if normalize else np.dtype(np.int64), + ) return Series( [], - dtype=np.int64, + dtype=count_dtype, name=result_name, index=cudf.Index([], dtype=self.dtype, name=self.name), ) @@ -3215,8 +3234,25 @@ def value_counts( # their occurrences as 0. # TODO: Remove this workaround once `observed` # parameter support is added to `groupby` + # + # When ``dropna=False`` and the column contains nulls, + # ``res`` includes a ``NaN`` group that we must preserve; + # only the existing categories should be reindexed/filled + # with 0. + nan_count = ( + res[res.index.isna()] + if not dropna and res.index.isna().any() + else None + ) + res = res[res.index.notna()] res = res.reindex(self.dtype.categories).fillna(0) res.index = res.index.astype(self.dtype) + if nan_count is not None: + res = cudf.concat([res, nan_count]) + # ``cudf.concat`` does not always preserve the + # ``ordered`` flag of the categorical index dtype, so + # restore it here. + res.index = res.index.astype(self.dtype) res.index.name = self.name @@ -3342,12 +3378,7 @@ def describe( "All percentiles must be between 0 and 1, inclusive." ) - # describe always includes 50th percentile - percentiles = list(percentiles) - if 0.5 not in percentiles: - percentiles.append(0.5) - - percentiles = np.sort(percentiles) + percentiles = np.sort(list(percentiles)) else: # pandas defaults percentiles = np.array([0.25, 0.5, 0.75]) @@ -3509,7 +3540,7 @@ def groupby( level=None, as_index=True, sort=no_default, - group_keys=False, + group_keys=no_default, observed=True, dropna=True, ): @@ -3598,17 +3629,16 @@ def rename( ".rename does not currently support relabeling the index." ) out_data = self._data.copy(deep=copy) - return Series._from_data( - out_data, self.index, name=index, attrs=self.attrs - ) + out = Series._from_data(out_data, self.index, name=index) + self._propagate_metadata(out) + return out @_performance_tracking def add_prefix(self, prefix, axis=None): if axis is not None: raise NotImplementedError("axis is currently not implemented.") return Series._from_data( - # TODO: Change to deep=False when copy-on-write is default - data=self._data.copy(deep=True), + data=self._data.copy(deep=False), index=prefix + self.index.astype(str), attrs=self.attrs, ) @@ -3618,8 +3648,7 @@ def add_suffix(self, suffix, axis=None): if axis is not None: raise NotImplementedError("axis is currently not implemented.") return Series._from_data( - # TODO: Change to deep=False when copy-on-write is default - data=self._data.copy(deep=True), + data=self._data.copy(deep=False), index=self.index.astype(str) + suffix, attrs=self.attrs, ) @@ -3654,7 +3683,7 @@ def keys(self): 0 a 1 b 2 c - dtype: object + dtype: str >>> sr.keys() RangeIndex(start=0, stop=3, step=1) >>> sr = cudf.Series([1, 2, 3], index=['a', 'b', 'c']) @@ -3664,7 +3693,7 @@ def keys(self): c 3 dtype: int64 >>> sr.keys() - Index(['a', 'b', 'c'], dtype='object') + Index(['a', 'b', 'c'], dtype='str') """ return self.index @@ -3705,88 +3734,6 @@ def explode(self, ignore_index=False): """ return super()._explode(self.name, ignore_index) - @_performance_tracking - def pct_change( - self, - periods=1, - fill_method=no_default, - limit=no_default, - freq=None, - **kwargs, - ): - """ - Calculates the percent change between sequential elements - in the Series. - - Parameters - ---------- - periods : int, default 1 - Periods to shift for forming percent change. - fill_method : str, default 'ffill' - How to handle NAs before computing percent changes. - - .. deprecated:: 24.04 - All options of `fill_method` are deprecated - except `fill_method=None`. - limit : int, optional - The number of consecutive NAs to fill before stopping. - Not yet implemented. - - .. deprecated:: 24.04 - `limit` is deprecated. - freq : str, optional - Increment to use from time series API. - Not yet implemented. - **kwargs - Additional keyword arguments are passed into - `Series.shift`. - - Returns - ------- - Series - """ - if limit is not no_default: - raise NotImplementedError("limit parameter not supported yet.") - if freq is not None: - raise NotImplementedError("freq parameter not supported yet.") - elif fill_method not in { - no_default, - None, - "ffill", - "pad", - "bfill", - "backfill", - }: - raise ValueError( - "fill_method must be one of None, 'ffill', 'pad', " - "'bfill', or 'backfill'." - ) - if fill_method not in (no_default, None) or limit is not no_default: - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, ( - "Need to drop after pandas-3.0 support is added." - ) - warnings.warn( - "The 'fill_method' and 'limit' keywords in " - f"{type(self).__name__}.pct_change are deprecated and will be " - "removed in a future version. Either fill in any non-leading " - "NA values prior to calling pct_change or specify " - "'fill_method=None' to not fill NA values.", - FutureWarning, - ) - - if fill_method is no_default: - fill_method = "ffill" - if limit is no_default: - limit = None - - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - data = self.fillna(method=fill_method, limit=limit) - diff = data.diff(periods=periods) - change = diff / data.shift(periods=periods, freq=freq, **kwargs) - return change - @_performance_tracking def where( self, cond, other=None, inplace: bool = False, axis=None, level=None @@ -3961,6 +3908,36 @@ def _return_result_like_self(self, column: ColumnBase) -> Series: return self.series._from_data_like_self(data) +def _expand_pyarrow_subsecond(date_format: str, subsecond_format: str) -> str: + # pyarrow's strftime appends sub-second fractions after %S based on the + # timestamp resolution. Insert that fraction directly into the format + # string for libcudf, but only when %S is not already followed by a + # subsecond directive. + out: list[str] = [] + i = 0 + n = len(date_format) + while i < n: + ch = date_format[i] + if ch == "%" and i + 1 < n: + out.append(date_format[i : i + 2]) + directive = date_format[i + 1] + i += 2 + if directive == "S": + # Only append if not already followed by a subsecond directive. + if ( + i + 1 < n + and date_format[i] == "." + and date_format[i + 1] in "0123456789" + ): + pass + else: + out.append(subsecond_format) + else: + out.append(ch) + i += 1 + return "".join(out) + + class DatetimeProperties(BaseDatelikeProperties): """ Accessor object for datetimelike properties of the Series values. @@ -4427,9 +4404,10 @@ def is_leap_year(self) -> Series: 12 True dtype: bool """ - return self._return_result_like_self( - self.series._column.is_leap_year.fillna(False) - ) + col = self.series._column.is_leap_year + if not isinstance(self.series.dtype, pd.ArrowDtype): + col = col.fillna(False) + return self._return_result_like_self(col) @property @_performance_tracking @@ -4490,11 +4468,12 @@ def day_name(self, locale: str | None = None) -> Series: 5 Thursday 6 Friday 7 Saturday - dtype: object + dtype: str """ - return self._return_result_like_self( - self.series._column.get_day_names(locale) - ) + col = self.series._column.get_day_names(locale) + if isinstance(self.series.dtype, pd.ArrowDtype): + col = col.astype(pd.ArrowDtype(pa.string())) + return self._return_result_like_self(col) @_performance_tracking def month_name(self, locale: str | None = None) -> Series: @@ -4520,11 +4499,12 @@ def month_name(self, locale: str | None = None) -> Series: 3 January 4 January 5 February - dtype: object + dtype: str """ - return self._return_result_like_self( - self.series._column.get_month_names(locale) - ) + col = self.series._column.get_month_names(locale) + if isinstance(self.series.dtype, pd.ArrowDtype): + col = col.astype(pd.ArrowDtype(pa.string())) + return self._return_result_like_self(col) @_performance_tracking def isocalendar(self) -> DataFrame: @@ -4556,7 +4536,7 @@ def isocalendar(self) -> DataFrame: 3 30 4 30 5 30 - Name: week, dtype: object + Name: week, dtype: UInt32 >>> serIndex = cudf.to_datetime(pd.Series(["2010-01-01", pd.NaT])) >>> serIndex.dt.isocalendar() @@ -4566,7 +4546,7 @@ def isocalendar(self) -> DataFrame: >>> serIndex.dt.isocalendar().year 0 2009 1 - Name: year, dtype: object + Name: year, dtype: UInt32 """ ca = ColumnAccessor(self.series._column.isocalendar(), verify=False) return self.series._constructor_expanddim._from_data( @@ -4973,17 +4953,17 @@ def strftime(self, date_format: str, *args, **kwargs) -> Series: 0 2000-03-31 1 2000-06-30 2 2000-09-30 - dtype: object + dtype: str >>> weekday_series.dt.strftime("%Y %d %m") 0 2000 31 03 1 2000 30 06 2 2000 30 09 - dtype: object + dtype: str >>> weekday_series.dt.strftime("%Y / %d / %m") 0 2000 / 31 / 03 1 2000 / 30 / 06 2 2000 / 30 / 09 - dtype: object + dtype: str .. pandas-compat:: :meth:`pandas.DatetimeIndex.strftime` @@ -5016,8 +4996,32 @@ def strftime(self, date_format: str, *args, **kwargs) -> Series: f"https://github.com/rapidsai/cudf/issues/5991 " f"for tracking purposes." ) + if isinstance(self.series.dtype, pd.ArrowDtype): + # pyarrow's strftime returns pa.string(), not pa.large_string(). + target_dtype = pd.ArrowDtype(pa.string()) + # pyarrow's "%S" includes the subsecond fraction at the + # timestamp's resolution. Translate to the equivalent libcudf + # format directive so the output matches. + unit = self.series.dtype.pyarrow_dtype.unit + subsecond_format = { + "s": "", + "ms": ".%3f", + "us": ".%6f", + "ns": ".%9f", + }.get(unit, "") + if subsecond_format: + date_format = _expand_pyarrow_subsecond( + date_format, subsecond_format + ) + else: + target_dtype = get_dtype_of_same_kind( + self.series.dtype, DEFAULT_STRING_DTYPE + ) return self._return_result_like_self( - self.series._column.strftime(format=date_format) + self.series._column.strftime( + format=date_format, + dtype=target_dtype, + ) ) @copy_docstring(DatetimeIndex.tz_localize) @@ -5046,6 +5050,13 @@ def tz_convert(self, tz: str | None) -> Series: self.series._column.tz_convert(tz) ) + @_performance_tracking + def to_pydatetime(self) -> pd.Series: + """ + Return the data as a Series of :class:`datetime.datetime` objects. + """ + return self.series.to_pandas().dt.to_pydatetime() + class TimedeltaProperties(BaseDatelikeProperties): """ @@ -5115,6 +5126,13 @@ class TimedeltaProperties(BaseDatelikeProperties): dtype: int64 """ + @_performance_tracking + def to_pytimedelta(self) -> np.ndarray: + """ + Return an array of native :class:`datetime.timedelta` objects. + """ + return self.series.to_pandas().dt.to_pytimedelta() + @property @_performance_tracking def days(self) -> Series: diff --git a/python/cudf/cudf/core/single_column_frame.py b/python/cudf/cudf/core/single_column_frame.py index 8a7c5ac24690..0f7741741782 100644 --- a/python/cudf/cudf/core/single_column_frame.py +++ b/python/cudf/cudf/core/single_column_frame.py @@ -52,11 +52,11 @@ class SingleColumnFrame(Frame, NotIterable): def _reduce( self, op: str, - axis=no_default, + axis: Axis | None = 0, numeric_only: bool = False, **kwargs, ) -> ScalarLike: - if axis not in (None, 0, no_default): + if axis not in (None, 0): raise NotImplementedError("axis parameter is not implemented yet") if numeric_only and not is_dtype_obj_numeric(self.dtype): @@ -212,7 +212,7 @@ def to_arrow(self) -> pa.Array: >>> import cudf >>> sr = cudf.Series(["a", "b", None]) >>> sr.to_arrow() # doctest: +ELLIPSIS - + [ "a", "b", @@ -220,7 +220,7 @@ def to_arrow(self) -> pa.Array: ] >>> ind = cudf.Index(["a", "b", None]) >>> ind.to_arrow() # doctest: +ELLIPSIS - + [ "a", "b", @@ -254,11 +254,22 @@ def tolist(self) -> None: def _to_frame(self, name: Hashable, index: Index | None) -> DataFrame: """Helper function for Series.to_frame, Index.to_frame""" + unnamed_default = False + col_name: Hashable if name is no_default: - col_name = 0 if self.name is None else self.name + if self.name is None: + col_name = 0 + unnamed_default = True + else: + col_name = self.name else: col_name = name - ca = ColumnAccessor({col_name: self._column}, verify=False) + ca = ColumnAccessor( + {col_name: self._column}, + multiindex=isinstance(col_name, tuple), + rangeindex=unnamed_default, + verify=False, + ) # TODO: Avoid accessing DataFrame from the top level namespace return cudf.DataFrame._from_data(ca, index=index) @@ -341,14 +352,21 @@ def factorize( >>> codes array([0, 0, 1]) >>> uniques - Index(['a', 'c'], dtype='object') + Index(['a', 'c'], dtype='str') + """ + return self._factorize(sort=sort, use_na_sentinel=use_na_sentinel) + + def _factorize( + self, sort: bool, use_na_sentinel: bool + ) -> tuple[cp.ndarray, Index]: + """Default factorize implementation for SingleColumnFrame subclasses. + + Subclasses (e.g. ``RangeIndex``) may override to specialize. """ - # TODO: Avoid accessing factorize from the top level namespace - return cudf.factorize( - self, - sort=sort, - use_na_sentinel=use_na_sentinel, + labels, cats = self._column.factorize( + sort=sort, use_na_sentinel=use_na_sentinel ) + return labels, cudf.Index._from_column(cats) @_performance_tracking def _make_operands_for_binop( diff --git a/python/cudf/cudf/core/tools/datetimes.py b/python/cudf/cudf/core/tools/datetimes.py index 293e014ec3d1..be6f515b72c1 100644 --- a/python/cudf/cudf/core/tools/datetimes.py +++ b/python/cudf/cudf/core/tools/datetimes.py @@ -5,6 +5,7 @@ import math import re import warnings +from decimal import Decimal from functools import lru_cache from typing import TYPE_CHECKING, Literal, Self, cast @@ -20,7 +21,7 @@ from cudf.core.dataframe import DataFrame from cudf.core.index import DatetimeIndex, Index, ensure_index from cudf.core.series import Series -from cudf.utils.dtypes import CUDF_STRING_DTYPE, dtype_from_pylibcudf_column +from cudf.utils.dtypes import DEFAULT_STRING_DTYPE, dtype_from_pylibcudf_column from cudf.utils.scalar import pa_scalar_to_plc_scalar from cudf.utils.temporal import infer_format, unit_to_nanoseconds_conversion @@ -65,6 +66,58 @@ } +_YEAR_DIRECTIVES = set("Yy") +_DAY_DIRECTIVES = set("dej") +_WEEKDAY_DIRECTIVES = set("Aawu") + + +def _validate_format_directives(format: str) -> None: + """Raise ValueError for incompatible strftime directive combinations.""" + directives: set[str] = set() + i = 0 + while i < len(format): + if format[i] == "%" and i + 1 < len(format): + directives.add(format[i + 1]) + i += 2 + else: + i += 1 + has_G = "G" in directives + has_V = "V" in directives + has_Y = bool(directives & _YEAR_DIRECTIVES) + has_weekday = bool(directives & _WEEKDAY_DIRECTIVES) + has_day = bool(directives & _DAY_DIRECTIVES) + has_j = "j" in directives + + if has_G and has_j: + raise ValueError( + "Day of the year directive '%j' is not compatible with ISO " + "year directive '%G'. Use '%Y' instead." + ) + if has_V and has_Y: + raise ValueError( + "ISO week directive '%V' is incompatible with the year " + "directive '%Y'. Use the ISO year '%G' instead." + ) + if has_V and not (has_G and has_weekday): + raise ValueError( + "ISO week directive '%V' must be used with the ISO year " + "directive '%G' and a weekday directive '%A', '%a', " + "'%w', or '%u'." + ) + if has_G and not (has_V and has_weekday): + raise ValueError( + "ISO year directive '%G' must be used with the ISO week " + "directive '%V' and a weekday directive '%A', '%a', " + "'%w', or '%u'." + ) + if ("W" in directives or "U" in directives) and not ( + has_Y and (has_day or has_weekday) + ): + # %W or %U requires both a year directive and either a day-of-month + # or weekday directive to identify a specific date. + raise ValueError("Cannot use '%W' or '%U' without day and year") + + def to_datetime( arg, errors: Literal["raise", "coerce", "warn", "ignore"] = "raise", @@ -73,8 +126,7 @@ def to_datetime( utc: bool = False, format: str | None = None, exact: bool = True, - unit: str = "ns", - infer_datetime_format: bool = True, + unit: str | None = None, origin="unix", cache: bool = True, ): @@ -111,11 +163,6 @@ def to_datetime( origin(unix epoch start). Example, with unit='ms' and origin='unix' (the default), this would calculate the number of milliseconds to the unix epoch start. - infer_datetime_format : bool, default True - If True and no `format` is given, attempt to infer the format of the - datetime strings, and if it can be inferred, switch to a faster - method of parsing them. In some cases this can increase the parsing - speed by ~5-10x. Returns ------- @@ -139,7 +186,7 @@ def to_datetime( >>> cudf.to_datetime(df) 0 2015-02-04 1 2016-03-05 - dtype: datetime64[s] + dtype: datetime64[us] >>> cudf.to_datetime(1490195805, unit='s') Timestamp('2017-03-22 15:16:45') >>> cudf.to_datetime(1490195805433502912, unit='ns') @@ -164,15 +211,8 @@ def to_datetime( FutureWarning, ) - if infer_datetime_format in {None, False}: - warnings.warn( - "`infer_datetime_format` is deprecated and will " - "be removed in a future version of cudf.", - FutureWarning, - ) - if arg is None: - return None + return pd.NaT if exact is False: raise NotImplementedError("exact support is not yet implemented") @@ -188,9 +228,39 @@ def to_datetime( raise NotImplementedError( "cuDF does not yet support timezone-aware datetimes" ) - elif "%f" in format: + _validate_format_directives(format) + if "%f" in format: format = format.replace("%f", "%9f") + if isinstance(arg, bool): + if errors == "coerce": + return pd.NaT + elif errors == "raise": + raise TypeError("dtype bool cannot be converted to datetime64[ns]") + + if not is_scalar(arg) and not isinstance(arg, DataFrame): + try: + iterator = iter(arg) + except TypeError: + iterator = None + if iterator is not None: + try: + first = next(iterator) + except StopIteration: + first = None + if first is not None and isinstance(first, Decimal): + raise TypeError( + " is not convertible to datetime" + ) + + if unit in ("Y", "M"): + # cuDF does not support calendrical addition for to_datetime + # with unit='Y' or 'M'. Defer to pandas via the cudf.pandas + # fast/slow proxy fallback. + raise NotImplementedError( + f"unit={unit!r} is not supported in cudf.to_datetime" + ) + try: if isinstance(arg, DataFrame): # we require at least Ymd @@ -218,39 +288,42 @@ def to_datetime( ) new_series = ( - arg[unit_rev["year"]].astype(CUDF_STRING_DTYPE) + arg[unit_rev["year"]].astype(DEFAULT_STRING_DTYPE) + "-" - + arg[unit_rev["month"]].astype(CUDF_STRING_DTYPE).str.zfill(2) + + arg[unit_rev["month"]] + .astype(DEFAULT_STRING_DTYPE) + .str.zfill(2) + "-" - + arg[unit_rev["day"]].astype(CUDF_STRING_DTYPE).str.zfill(2) + + arg[unit_rev["day"]] + .astype(DEFAULT_STRING_DTYPE) + .str.zfill(2) ) format = "%Y-%m-%d" + target_unit = "us" for u in ["h", "m", "s", "ms", "us", "ns"]: value = unit_rev.get(u) if value is not None and value in arg: arg_col = arg._data[value] if arg_col.dtype.kind == "f": - col = new_series._column.strptime( - np.dtype("datetime64[ns]"), format=format - ) + target_unit = "ns" break elif arg_col.dtype.kind == "O": string_col = cast("StringColumn", arg_col) if not string_col.is_all_integer(): - col = new_series._column.strptime( - np.dtype("datetime64[ns]"), format=format - ) + target_unit = "ns" break - else: - col = new_series._column.strptime( - np.dtype("datetime64[s]"), format=format - ) + elif u == "ns": + # An explicit nanosecond field forces ns precision + # (pandas widens to [ns] when ns is present). + target_unit = "ns" + col = new_series._column.strptime( + np.dtype(f"datetime64[{target_unit}]"), format=format + ) times_column = None - factor_denominator = ( - unit_to_nanoseconds_conversion["s"] - if np.datetime_data(col.dtype)[0] == "s" - else 1 + col_unit = np.datetime_data(col.dtype)[0] + factor_denominator = unit_to_nanoseconds_conversion.get( + col_unit, 1 ) for u in ["h", "m", "s", "ms", "us", "ns"]: value = unit_rev.get(u) @@ -268,9 +341,12 @@ def to_datetime( np.dtype(np.float64) ) - factor = ( - unit_to_nanoseconds_conversion[u] / factor_denominator - ) + factor_numerator = unit_to_nanoseconds_conversion[u] + factor: int | float + if factor_numerator % factor_denominator == 0: + factor = factor_numerator // factor_denominator + else: + factor = factor_numerator / factor_denominator if times_column is None: times_column = current_col * factor @@ -284,7 +360,6 @@ def to_datetime( col=col, unit=unit, dayfirst=dayfirst, - infer_datetime_format=infer_datetime_format, format=format, utc=utc, ) @@ -294,7 +369,6 @@ def to_datetime( col=as_column(arg), unit=unit, dayfirst=dayfirst, - infer_datetime_format=infer_datetime_format, format=format, utc=utc, ) @@ -319,21 +393,22 @@ def to_datetime( elif errors == "ignore": pass elif errors == "coerce": + if is_scalar(arg): + return pd.NaT return np.datetime64("nat", "ns" if unit is None else unit) # type: ignore[call-overload] return arg def _process_col( col, - unit: str, + unit: str | None, dayfirst: bool, - infer_datetime_format: bool, format: str | None, utc: bool, ): if col.dtype.kind == "f": if unit not in (None, "ns"): - col = col * unit_to_nanoseconds_conversion[unit] + col = col * unit_to_nanoseconds_conversion[unit] # type: ignore[index] if format is not None: # Converting to int because, @@ -342,13 +417,13 @@ def _process_col( # int column out of it to parse against `format`. # Instead we directly cast to int and perform # parsing against `format`. + # Pandas 3 defaults parsed datetimes to `datetime64[us]` + # regardless of format precision. col = ( col.astype(np.dtype(np.int64)) - .astype(CUDF_STRING_DTYPE) + .astype(DEFAULT_STRING_DTYPE) .strptime( - dtype=np.dtype("datetime64[us]") - if "%f" in format - else np.dtype("datetime64[s]"), + dtype=np.dtype("datetime64[us]"), format=format, ) ) @@ -364,14 +439,31 @@ def _process_col( col = col * factor if format is not None: - col = col.astype(CUDF_STRING_DTYPE).strptime( + if unit is None: + unit = "us" + col = col.astype(DEFAULT_STRING_DTYPE).strptime( dtype=np.dtype(_unit_dtype_map[unit]), format=format ) else: - col = col.astype(dtype=np.dtype(_unit_dtype_map[unit])) + if len(col) == 0 and unit is None: + unit = "s" + elif unit is None: + unit = "ns" + + col = col.astype( + dtype=np.dtype( + _unit_dtype_map.get(unit, _unit_dtype_map["us"]) + ) + ) elif col.dtype.kind == "O": - if unit not in (None, "ns") or col.is_all_null: + if col.is_all_null: + # Pandas converts all-null inputs to NaT at second precision + # regardless of `unit`/`format`; mirror that here without + # routing through the int/float path (which would land on + # the [ns]/[us] defaults). + return col.astype(np.dtype("datetime64[s]")) + if unit not in (None, "ns"): try: col = col.astype(np.dtype(np.int64)) except ValueError: @@ -380,28 +472,37 @@ def _process_col( col=col, unit=unit, dayfirst=dayfirst, - infer_datetime_format=infer_datetime_format, format=format, utc=utc, ) else: - if format is None: - if not infer_datetime_format and dayfirst: - raise NotImplementedError( - f"{dayfirst=} not implemented " - f"when {format=} and {infer_datetime_format=}." + if format is not None and "f" in format and unit is None: + col_ns = col.strptime( + dtype=np.dtype(_unit_dtype_map["ns"]), format=format + ) + col_us = col.strptime( + dtype=np.dtype(_unit_dtype_map["us"]), format=format + ) + res = col_ns != col_us + if res.any(): + col = col_ns + else: + col = col_us + else: + if format is None: + format = infer_format( + element=col.element_indexing(0), + dayfirst=dayfirst, ) - format = infer_format( - element=col.element_indexing(0), - dayfirst=dayfirst, + col = col.strptime( + dtype=np.dtype( + _unit_dtype_map.get(unit, _unit_dtype_map["us"]) # type: ignore[arg-type] + ), + format=format, ) - col = col.strptime( - dtype=np.dtype(_unit_dtype_map[unit]), - format=format, - ) elif col.dtype.kind != "M": raise TypeError( - f"dtype {col.dtype} cannot be converted to {_unit_dtype_map[unit]}" + f"dtype {col.dtype} cannot be converted to {_unit_dtype_map.get(unit, _unit_dtype_map['us'])}" # type: ignore[arg-type] ) if utc and not isinstance(col.dtype, pd.DatetimeTZDtype): return col.tz_localize("UTC") @@ -548,6 +649,8 @@ class DateOffset: def __eq__(self, other): if isinstance(other, str): return self._maybe_as_fast_pandas_offset() == other + if isinstance(other, (pd.DateOffset, pd.offsets.Tick)): + return self._maybe_as_fast_pandas_offset() == other if not isinstance(other, DateOffset): return NotImplemented return self.kwds == other.kwds @@ -698,7 +801,13 @@ def _datetime_binop( else: datetime_col += as_column(value, length=len(datetime_col)) - if tz is not None: + if tz is not None and not isinstance( + datetime_col.dtype, pd.DatetimeTZDtype + ): + # Older arithmetic stripped the tz; restore it. When the + # arithmetic already preserves tz (e.g. datetime+timedelta), + # the column is already tz-aware and another tz_localize + # would raise "Already tz-aware". datetime_col = datetime_col.tz_localize("UTC").tz_convert(tz) return datetime_col @@ -769,7 +878,15 @@ def _maybe_as_fast_pandas_offset(self): # Pandas computation between `n*offsets.Minute()` is faster than # `n*DateOffset`. If only single offset unit is in use, we return # the base offset for faster binary ops. - return pd.tseries.frequencies.to_offset(pd.Timedelta(**self.kwds)) + # Use the pandas offset class directly to avoid type mismatches + # (e.g. pd.Timedelta(days=1) -> <24 * Hours> instead of ). + unit, n = next(iter(self.kwds.items())) + units_to_offset = { + v: k for k, v in self._TICK_OR_WEEK_TO_UNITS.items() + } + offset_cls = units_to_offset.get(unit) + if offset_cls is not None: + return offset_cls(n) return pd.DateOffset(**self.kwds, n=1) @@ -824,8 +941,8 @@ def date_range( Currently only "both" is supported unit : str, default None - Specify the desired resolution of the result. Currently - not supported. + Specify the desired resolution of the result. If not specified, + the unit is inferred from `freq` (defaults to 'us'). Returns ------- @@ -862,12 +979,10 @@ def date_range( DatetimeIndex(['2021-08-23 08:00:00', '2022-10-23 08:00:00', '2023-12-23 08:00:00', '2025-02-23 08:00:00', '2026-04-23 08:00:00'], - dtype='datetime64[ns]', freq='') + dtype='datetime64[us]', freq='') """ if inclusive != "both": raise NotImplementedError(f"{inclusive=} is currently unsupported.") - if unit is not None: - raise NotImplementedError(f"{unit=} is currently unsupported.") if normalize is not False: raise NotImplementedError(f"{normalize=} is currently unsupported.") @@ -881,20 +996,26 @@ def date_range( ) if periods is not None and not is_integer(periods): - warnings.warn( - "Non-integer 'periods' in cudf.date_range, and cudf.interval_range" - " are deprecated and will raise in a future version.", - FutureWarning, - ) + raise TypeError(f"periods must be an integer, got {periods}") - dtype: np.dtype = np.dtype("datetime64[ns]") - unit, _ = np.datetime_data(dtype) + _unit = _infer_date_range_unit(freq, unit, start, end) + dtype: np.dtype = np.dtype(f"datetime64[{_unit}]") if freq is None: # `start`, `end`, `periods` is specified, we treat the timestamps as # integers and divide the number range evenly with `periods` elements. - start = dtype.type(start, unit).astype(np.dtype(np.int64)) - end = dtype.type(end, unit).astype(np.dtype(np.int64)) + start = ( + pd.Timestamp(start) + .as_unit(_unit) + .to_numpy() + .astype(np.dtype(np.int64)) + ) + end = ( + pd.Timestamp(end) + .as_unit(_unit) + .to_numpy() + .astype(np.dtype(np.int64)) + ) arr = np.linspace(start=start, stop=end, num=periods).astype(dtype) result = as_column(arr) return DatetimeIndex._from_column(result, name=name).tz_localize(tz) @@ -907,7 +1028,8 @@ def date_range( elif isinstance(freq, str): offset = pd.tseries.frequencies.to_offset(freq) if not isinstance( - offset, (pd.tseries.offsets.Tick, pd.tseries.offsets.Week) + offset, + (pd.tseries.offsets.Tick, pd.offsets.Day, pd.tseries.offsets.Week), ): raise ValueError( f"Unrecognized frequency string {freq}. cuDF does " @@ -929,26 +1051,26 @@ def date_range( _periods_not_specified = False if start is None: - end = dtype.type(end, unit) + end = pd.Timestamp(end).as_unit(_unit).to_numpy() start = ( pd.Timestamp(end) - (periods - 1) * offset._maybe_as_fast_pandas_offset() ).to_numpy() elif end is None: - start = dtype.type(start, unit) + start = pd.Timestamp(start).as_unit(_unit).to_numpy() elif periods is None: # When `periods` is unspecified, its upper bound estimated by - # dividing the number of nanoseconds between two timestamps with - # the lower bound of `freq` in nanoseconds. While the final result - # may contain extra elements that exceeds `end`, they are trimmed - # as a post processing step. [1] + # dividing the number of timestamps between two timestamps with + # the lower bound of `freq` in the target unit. While the final + # result may contain extra elements that exceeds `end`, they are + # trimmed as a post processing step. [1] _periods_not_specified = True - start = pd.Timestamp(start).as_unit("ns").to_numpy() - end = pd.Timestamp(end).as_unit("ns").to_numpy() + start = pd.Timestamp(start).as_unit(_unit).to_numpy() + end = pd.Timestamp(end).as_unit(_unit).to_numpy() _is_increment_sequence = end >= start periods = math.floor( - int(end - start) / _offset_to_nanoseconds_lower_bound(offset) + (end - start).view("int64") / _offset_to_lower_bound(offset, _unit) ) if periods < 0: @@ -1002,7 +1124,7 @@ def date_range( # treating `start`, `stop` and `step` as ints: stop = end_estim.astype(np.dtype(np.int64)) start = start.astype(np.dtype(np.int64)) - step = _offset_to_nanoseconds_lower_bound(offset) + step = _offset_to_lower_bound(offset, _unit) res = ColumnBase.from_range(range(int(start), int(stop), step)).astype( dtype ) @@ -1034,22 +1156,49 @@ def _has_non_fixed_frequency(freq: DateOffset) -> bool: return len(freq.kwds.keys() & non_fixed_frequencies) > 0 -def _offset_to_nanoseconds_lower_bound(offset: DateOffset) -> int: +def _infer_date_range_unit( + freq, unit: str | None, start=None, end=None +) -> str: + """Infer the datetime resolution for date_range. + + Matches pandas 3.0 behavior: default to microseconds ('us') for + string inputs, falling back to nanoseconds ('ns') when the freq + or input timestamps require nanosecond precision. + """ + if unit is not None: + return unit + # Preserve resolution of np.datetime64 inputs (pandas 3.0 behavior) + for val in (start, end): + if isinstance(val, np.datetime64): + val_unit, _ = np.datetime_data(val.dtype) + if val_unit == "ns": + return "ns" + # Check if freq has nanosecond components + if isinstance(freq, DateOffset): + if freq.kwds.get("nanoseconds", 0) != 0: + return "ns" + elif isinstance(freq, str): + offset = DateOffset._from_freqstr(freq) + return _infer_date_range_unit(offset, unit, start, end) + return "us" + + +def _offset_to_lower_bound(offset: DateOffset, unit: str = "ns") -> int: """Given a DateOffset, which can consist of either fixed frequency or non-fixed frequency offset, convert to the smallest possible fixed - frequency offset based in nanoseconds. + frequency offset in the specified unit. Specifically, the smallest fixed frequency conversion for {months=1} - is 28 * nano_seconds_per_day, because 1 month contains at least 28 days. + is 28 * units_per_day, because 1 month contains at least 28 days. Similarly, the smallest fixed frequency conversion for {year=1} is - 365 * nano_seconds_per_day. + 365 * units_per_day. This utility is used to compute the upper bound of the count of timestamps given a range of datetime and an offset. """ nanoseconds_per_day = 24 * 60 * 60 * 10**9 kwds = offset.kwds - return ( + total_ns = ( kwds.get("years", 0) * (365 * nanoseconds_per_day) + kwds.get("months", 0) * (28 * nanoseconds_per_day) + kwds.get("weeks", 0) * (7 * nanoseconds_per_day) @@ -1061,3 +1210,5 @@ def _offset_to_nanoseconds_lower_bound(offset: DateOffset) -> int: + kwds.get("microseconds", 0) * 10**3 + kwds.get("nanoseconds", 0) ) + _unit_to_ns = {"ns": 1, "us": 10**3, "ms": 10**6, "s": 10**9} + return total_ns // _unit_to_ns[unit] diff --git a/python/cudf/cudf/core/tools/numeric.py b/python/cudf/cudf/core/tools/numeric.py index ed34d0b0fd1e..e7d031e4bc61 100644 --- a/python/cudf/cudf/core/tools/numeric.py +++ b/python/cudf/cudf/core/tools/numeric.py @@ -9,12 +9,14 @@ import pandas as pd from cudf.core.column import as_column -from cudf.core.dtype.validators import is_dtype_obj_numeric +from cudf.core.dtype.validators import ( + is_dtype_obj_numeric, + is_dtype_obj_string, +) from cudf.core.dtypes import CategoricalDtype, ListDtype, StructDtype from cudf.core.index import ensure_index from cudf.core.series import Series from cudf.utils.dtypes import ( - CUDF_STRING_DTYPE, can_convert_to_column, ) @@ -25,8 +27,8 @@ def to_numeric( arg, - errors: Literal["raise", "coerce", "ignore"] = "raise", - downcast: Literal["integer", "signed", "unsigned", "float", None] = None, + errors: Literal["raise", "coerce"] = "raise", + downcast: Literal["integer", "signed", "unsigned", "float"] | None = None, dtype_backend=None, ): """ @@ -36,11 +38,10 @@ def to_numeric( ---------- arg : column-convertible The object to convert to numeric types - errors : {'raise', 'ignore', 'coerce'}, defaults 'raise' + errors : {'raise', 'coerce'}, defaults 'raise' Policy to handle errors during parsing. * 'raise' will notify user all errors encountered. - * 'ignore' will skip error and returns ``arg``. * 'coerce' will leave invalid values as nulls. downcast : {'integer', 'signed', 'unsigned', 'float'}, defaults None If set, will try to down-convert the datatype of the @@ -88,13 +89,8 @@ def to_numeric( 2 3000 dtype: int16 >>> s = cudf.Series(['apple', '1.0', '3e3']) - >>> cudf.to_numeric(s, errors='ignore') - 0 apple - 1 1.0 - 2 3e3 - dtype: object >>> cudf.to_numeric(s, errors='coerce') - 0 + 0 NaN 1 1.0 2 3000.0 dtype: float64 @@ -111,15 +107,8 @@ def to_numeric( raise NotImplementedError( "dtype_backend is not currently implemented." ) - if errors not in {"raise", "ignore", "coerce"}: + if errors not in {"raise", "coerce"}: raise ValueError("invalid error value specified") - elif errors == "ignore": - warnings.warn( - "errors='ignore' is deprecated and will raise in " - "a future version. Use to_numeric without passing `errors` " - "and catch exceptions explicitly instead", - FutureWarning, - ) if downcast not in {None, "integer", "signed", "unsigned", "float"}: raise ValueError("invalid downcasting method provided") @@ -139,25 +128,13 @@ def to_numeric( if cat_dtype.kind in "iufb": col = col.astype(cat_dtype) else: - try: - col = _convert_str_col( - col._get_decategorized_column(), # type: ignore[attr-defined] - errors, - downcast, - ) - except ValueError as e: - if errors == "ignore": - return arg - else: - raise e - elif dtype == CUDF_STRING_DTYPE or isinstance(dtype, pd.StringDtype): - try: - col = _convert_str_col(col, errors, downcast) # type: ignore[arg-type] - except ValueError as e: - if errors == "ignore": - return arg - else: - raise e + col = _convert_str_col( + col._get_decategorized_column(), # type: ignore[attr-defined] + errors, + downcast, + ) + elif is_dtype_obj_string(dtype): + col = _convert_str_col(col, errors, downcast) # type: ignore[arg-type] elif isinstance(dtype, (ListDtype, StructDtype)): raise ValueError("Input does not support nested datatypes") elif is_dtype_obj_numeric(dtype, include_decimal=False): @@ -201,8 +178,8 @@ def to_numeric( def _convert_str_col( col: StringColumn, - errors: Literal["raise", "coerce", "ignore"], - _downcast: Literal["integer", "signed", "unsigned", "float", None] = None, + errors: Literal["raise", "coerce"], + downcast: Literal["integer", "signed", "unsigned", "float"] | None = None, ) -> NumericalColumn: """ Converts a string column to numeric column @@ -219,14 +196,14 @@ def _convert_str_col( Parameters ---------- col : The string column to convert, must be string dtype - errors : {'raise', 'ignore', 'coerce'}, same as ``to_numeric`` - _downcast : Same as ``to_numeric``, see description for use + errors : {'raise', 'coerce'}, same as ``to_numeric`` + downcast : Same as ``to_numeric``, see description for use Returns ------- Converted numeric column """ - if col.dtype != CUDF_STRING_DTYPE: + if not is_dtype_obj_string(col.dtype): raise TypeError("col must be string dtype.") string_col = cast("StringColumn", col) @@ -246,7 +223,7 @@ def _convert_str_col( is_float = converted_col.is_float() if is_float.all(): - if _downcast in {"unsigned", "signed", "integer"}: + if downcast in {"unsigned", "signed", "integer"}: warnings.warn( UserWarning( "Downcasting from float to int will be " diff --git a/python/cudf/cudf/core/udf/groupby_utils.py b/python/cudf/cudf/core/udf/groupby_utils.py index 6cea908b6771..e1277cc5c934 100644 --- a/python/cudf/cudf/core/udf/groupby_utils.py +++ b/python/cudf/cudf/core/udf/groupby_utils.py @@ -13,6 +13,7 @@ from numba.np import numpy_support from cudf.core.column import as_column, column_empty +from cudf.core.column.column import ColumnBase from cudf.core.udf.groupby_typing import ( SUPPORTED_GROUPBY_NUMPY_TYPES, Group, @@ -116,6 +117,19 @@ def jit_groupby_apply(offsets, grouped_values, function, *args): ) launch_args += list(args) + # The JIT kernel does not consult null masks, and numba-cuda's argument + # marshalling rejects ``__cuda_array_interface__`` dicts that include a + # ``mask`` entry. Strip masks from any nullable column args so the kernel + # sees only the underlying data buffer. The user is responsible for + # ensuring that null values do not affect correctness when explicitly + # requesting ``engine="jit"``. + launch_args = [ + arg.set_mask(None, 0) + if isinstance(arg, ColumnBase) and arg.nullable + else arg + for arg in launch_args + ] + max_group_size = cp.diff(offsets).max() if max_group_size >= 256: diff --git a/python/cudf/cudf/core/udf/scalar_function.py b/python/cudf/cudf/core/udf/scalar_function.py index fb02d5f95336..8bf39e768025 100644 --- a/python/cudf/cudf/core/udf/scalar_function.py +++ b/python/cudf/cudf/core/udf/scalar_function.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 from functools import cache @@ -6,6 +6,7 @@ from numba import cuda from numba.np import numpy_support +from cudf.core.dtype.validators import is_dtype_obj_string from cudf.core.udf.api import Masked, pack_return from cudf.core.udf.masked_typing import MaskedType from cudf.core.udf.strings_typing import string_view @@ -38,7 +39,7 @@ def kernel_type(self): def _get_frame_type(self): return MaskedType( string_view - if self.frame.dtype == "O" + if is_dtype_obj_string(self.frame.dtype) else numpy_support.from_dtype(self.frame.dtype) ) diff --git a/python/cudf/cudf/core/udf/utils.py b/python/cudf/cudf/core/udf/utils.py index f23e4ab2d974..48401f1e781d 100644 --- a/python/cudf/cudf/core/udf/utils.py +++ b/python/cudf/cudf/core/udf/utils.py @@ -24,6 +24,7 @@ from cudf._lib import strings_udf from cudf.core.buffer import as_buffer +from cudf.core.dtype.validators import is_dtype_obj_string from cudf.core.udf.masked_typing import MaskedType from cudf.core.udf.nrt_utils import nrt_enabled from cudf.core.udf.strings_typing import ( @@ -34,7 +35,6 @@ ) from cudf.utils.dtypes import ( BOOL_TYPES, - CUDF_STRING_DTYPE, DATETIME_TYPES, NUMERIC_TYPES, SIZE_TYPE_DTYPE, @@ -83,7 +83,9 @@ def _all_dtypes_from_frame(frame, supported_types=JIT_SUPPORTED_TYPES): return { - colname: dtype if str(dtype) in supported_types else np.dtype("O") + colname: dtype + if str(dtype) in supported_types and not is_dtype_obj_string(dtype) + else np.dtype("O") for colname, dtype in frame._dtypes } @@ -112,7 +114,7 @@ def _masked_array_type_from_col(col): array of bools representing a mask. """ - if col.dtype == CUDF_STRING_DTYPE: + if is_dtype_obj_string(col.dtype): col_type = CPointer(string_view) else: nb_scalar_ty = numpy_support.from_dtype(col.dtype) @@ -242,7 +244,7 @@ def _get_input_args_from_frame(fr: IndexedFrame) -> list: args: list[Buffer | tuple[Buffer, Buffer]] = [] offsets = [] for col in _supported_cols_from_frame(fr).values(): - if col.dtype == CUDF_STRING_DTYPE: + if is_dtype_obj_string(col.dtype): data = column_to_string_view_array_init_heap(col.plc_column) else: data = col.data @@ -258,7 +260,7 @@ def _get_input_args_from_frame(fr: IndexedFrame) -> list: def _return_arr_from_dtype(dtype, size): - if dtype == CUDF_STRING_DTYPE: + if dtype == np.dtype("object"): return rmm.DeviceBuffer( size=size * _get_extensionty_size(managed_udf_string) ) diff --git a/python/cudf/cudf/core/window/rolling.py b/python/cudf/cudf/core/window/rolling.py index 22f33294231e..9bef2ef120db 100644 --- a/python/cudf/cudf/core/window/rolling.py +++ b/python/cudf/cudf/core/window/rolling.py @@ -99,11 +99,11 @@ class Rolling(GetAttrGetItemMixin, _RollingBase, Reducible): Rolling sum with window size 2. >>> print(a.rolling(2).sum()) - 0 + 0 NaN 1 3.0 2 5.0 - 3 - 4 + 3 NaN + 4 NaN dtype: float64 Rolling sum with window size 2 and min_periods 1. @@ -119,8 +119,8 @@ class Rolling(GetAttrGetItemMixin, _RollingBase, Reducible): Rolling count with window size 3. >>> print(a.rolling(3).count()) - 0 - 1 + 0 NaN + 1 NaN 2 3.0 3 2.0 4 2.0 @@ -130,11 +130,11 @@ class Rolling(GetAttrGetItemMixin, _RollingBase, Reducible): center of the window. >>> print(a.rolling(3, center=True).count()) - 0 + 0 NaN 1 3.0 2 2.0 3 2.0 - 4 + 4 NaN dtype: float64 Rolling max with variable window size specified by an offset; @@ -153,12 +153,12 @@ class Rolling(GetAttrGetItemMixin, _RollingBase, Reducible): ... ) >>> print(a.rolling('2s').max()) - 2019-01-01 09:00:00 1.0 - 2019-01-01 09:00:01 9.0 - 2019-01-01 09:00:02 9.0 - 2019-01-01 09:00:04 4.0 - 2019-01-01 09:00:07 - 2019-01-01 09:00:08 1.0 + 2019-01-01 09:00:00 1.0 + 2019-01-01 09:00:01 9.0 + 2019-01-01 09:00:02 9.0 + 2019-01-01 09:00:04 4.0 + 2019-01-01 09:00:07 NaN + 2019-01-01 09:00:08 1.0 dtype: float64 Apply custom function on the window with the *apply* method @@ -285,7 +285,13 @@ def _plc_windows(self) -> WindowTypePair: raise NotImplementedError( "center is not implemented for frequency-based windows" ) - pre = self.window.value + # Convert the timedelta to the same resolution as + # the datetime index so that the range-based window + # comparison uses matching units. + resolution = self.obj.index.unit + pre = int( + self.window.as_unit(resolution).to_numpy().view(np.int64) + ) fwd = 0 orderby_obj = self.obj.index._column.astype(np.dtype(np.int64)) else: @@ -685,6 +691,21 @@ def __init__(self, groupby, window, min_periods=None, center=False): super().__init__(obj, window, min_periods=min_periods, center=center) + def __getitem__(self, arg) -> Self: + if isinstance(arg, tuple): + arg = list(arg) + new = object.__new__(type(self)) + # Preserve grouping context when subsetting columns. + Rolling.__init__( + new, + self.obj[arg], + self.window, + min_periods=self.min_periods, + center=self.center, + ) + new._group_keys = self._group_keys + return new + def _apply_agg(self, agg_name: str, **agg_kwargs) -> DataFrame | Series: index = MultiIndex._from_data( dict( diff --git a/python/cudf/cudf/io/csv.py b/python/cudf/cudf/io/csv.py index 6f0f99504101..73c1bee73c16 100644 --- a/python/cudf/cudf/io/csv.py +++ b/python/cudf/cudf/io/csv.py @@ -3,7 +3,6 @@ from __future__ import annotations import itertools -import warnings from collections.abc import Collection, Mapping from io import BytesIO, StringIO from typing import TYPE_CHECKING, cast @@ -76,20 +75,12 @@ def read_csv( quoting: int = 0, doublequote: bool = True, comment: str | None = None, - delim_whitespace: bool = False, byte_range: list[int] | tuple[int, int] | None = None, storage_options=None, bytes_per_thread: int | None = None, ) -> DataFrame: """{docstring}""" - if delim_whitespace is not False: - warnings.warn( - "The 'delim_whitespace' keyword in pd.read_csv is deprecated and " - "will be removed in a future version. Use ``sep='\\s+'`` instead", - FutureWarning, - ) - if bytes_per_thread is None: bytes_per_thread = ioutils._BYTES_PER_THREAD_DEFAULT @@ -109,7 +100,6 @@ def read_csv( _validate_args( delimiter, sep, - delim_whitespace, decimal, thousands, nrows, @@ -229,7 +219,6 @@ def read_csv( .lineterminator(str(lineterminator)) .quotechar(quotechar) .decimal(decimal) - .delim_whitespace(delim_whitespace) .skipinitialspace(skipinitialspace) .skip_blank_lines(skip_blank_lines) .doublequote(doublequote) @@ -520,7 +509,6 @@ def _plc_write_csv( def _validate_args( delimiter: str | None, sep: str, - delim_whitespace: bool, decimal: str, thousands: str | None, nrows: int | None, @@ -528,12 +516,6 @@ def _validate_args( byte_range: list[int] | tuple[int, int] | None, skiprows: int, ) -> None: - if delim_whitespace: - if delimiter is not None: - raise ValueError("cannot set both delimiter and delim_whitespace") - if sep != ",": - raise ValueError("cannot set both sep and delim_whitespace") - # Alias sep -> delimiter. actual_delimiter = delimiter if delimiter else sep diff --git a/python/cudf/cudf/io/json.py b/python/cudf/cudf/io/json.py index 6b68b491766f..2ed1c1d18010 100644 --- a/python/cudf/cudf/io/json.py +++ b/python/cudf/cudf/io/json.py @@ -154,9 +154,7 @@ def read_json( filepaths_or_buffers = ioutils.get_reader_filepath_or_buffer( path_or_buf, iotypes=(BytesIO, StringIO), - allow_raw_text_input=True, storage_options=storage_options, - warn_on_raw_text_input=True, warn_meta=("json", "read_json"), expand_dir_pattern="*.json", ) @@ -245,7 +243,6 @@ def read_json( filepath_or_buffer = ioutils.get_reader_filepath_or_buffer( path_or_data=path_or_buf, iotypes=(BytesIO, StringIO), - allow_raw_text_input=True, storage_options=storage_options, ) filepath_or_buffer = ioutils._select_single_source( diff --git a/python/cudf/cudf/io/parquet.py b/python/cudf/cudf/io/parquet.py index 5467d3b12da6..bd2b7725bf21 100644 --- a/python/cudf/cudf/io/parquet.py +++ b/python/cudf/cudf/io/parquet.py @@ -1341,10 +1341,7 @@ def _parquet_to_frame( if len(dfs) > 1: # Concatenate dfs and return. # Assume we can ignore the index if it has no name. - with warnings.catch_warnings(): - warnings.simplefilter("ignore", FutureWarning) - res = concat(dfs, ignore_index=dfs[-1].index.name is None) - return res + return concat(dfs, ignore_index=dfs[-1].index.name is None) else: return dfs[0] @@ -2493,6 +2490,13 @@ def _process_metadata( df._data[col].dtype.precision = meta_data_per_column[col][ # type: ignore[union-attr] "metadata" ]["precision"] + elif ( + isinstance(df._data[col].dtype, pd.StringDtype) + and col in meta_data_per_column + and meta_data_per_column[col]["pandas_type"] == "empty" + and meta_data_per_column[col]["numpy_type"] == "object" + ): + df._data[col] = df._data[col].astype(np.dtype("object")) # Set the index column if index_col is not None and len(index_col) > 0: diff --git a/python/cudf/cudf/options.py b/python/cudf/cudf/options.py index 8c7a67ad7386..64f265f6a40d 100644 --- a/python/cudf/cudf/options.py +++ b/python/cudf/cudf/options.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 from __future__ import annotations @@ -155,13 +155,6 @@ def _validator(val): return _validator -def _cow_validator(val): - if val not in {False, True}: - raise ValueError( - f"{val} is not a valid option. Must be one of {{False, True}}." - ) - - def _spill_validator(val): if val not in {False, True}: raise ValueError( @@ -235,21 +228,6 @@ def _integer_and_none_validator(val): ) -_register_option( - "copy_on_write", - _env_get_bool("CUDF_COPY_ON_WRITE", False), - textwrap.dedent( - """ - If set to `False`, disables copy-on-write. - If set to `True`, enables copy-on-write. - Read more at: :ref:`copy-on-write-user-doc` - \tValid values are True or False. Default is False. - """ - ), - _cow_validator, -) - - _register_option( "spill_on_demand", _env_get_bool("CUDF_SPILL_ON_DEMAND", True), @@ -389,9 +367,9 @@ def __init__(self, *args) -> None: ) self.ops = tuple(zip(args[::2], args[1::2], strict=True)) + self.undo = tuple((pat, get_option(pat)) for pat, _ in self.ops) def __enter__(self) -> None: - self.undo = tuple((pat, get_option(pat)) for pat, _ in self.ops) for pat, val in self.ops: set_option(pat, val) diff --git a/python/cudf/cudf/pandas/_wrappers/numpy.py b/python/cudf/cudf/pandas/_wrappers/numpy.py index 5275359508ce..6a9977fe1773 100644 --- a/python/cudf/cudf/pandas/_wrappers/numpy.py +++ b/python/cudf/cudf/pandas/_wrappers/numpy.py @@ -222,6 +222,23 @@ def ndarray__array_function__(self, func, types, args, kwargs): ) +def _ndarray_fsproxy_fast_to_slow(self): + from ..fast_slow_proxy import _State + + # Preserve view semantics when the proxy was originally wrapped + # around a numpy view (``.base is not None``). Without this, a + # round-trip through cupy would convert the stored numpy view into + # a cupy array and then back into a freshly-allocated numpy array + # whose ``.base`` is None, breaking callers that rely on the view + # relationship. + if self._fsproxy_state is _State.FAST: + original = getattr(self, "_fsproxy_original_slow", None) + if original is not None: + return original + return cupy.ndarray.get(self._fsproxy_wrapped) + return self._fsproxy_wrapped + + ndarray = make_final_proxy_type( "ndarray", cupy.ndarray, @@ -287,6 +304,7 @@ def ndarray__array_function__(self, func, types, args, kwargs): "__iter__": custom_iter, # Special wrapping to handle scalar values "_fsproxy_wrap": classmethod(wrap_ndarray), + "_fsproxy_fast_to_slow": _ndarray_fsproxy_fast_to_slow, "base": _FastSlowAttribute("base", private=True), "data": _FastSlowAttribute("data", private=True), }, diff --git a/python/cudf/cudf/pandas/_wrappers/pandas.py b/python/cudf/cudf/pandas/_wrappers/pandas.py index 7c54687ceade..14a49bfe3798 100644 --- a/python/cudf/cudf/pandas/_wrappers/pandas.py +++ b/python/cudf/cudf/pandas/_wrappers/pandas.py @@ -4,7 +4,6 @@ import copyreg import datetime import functools -import importlib import inspect import os import pickle @@ -17,6 +16,7 @@ # I suspect it relates to pyarrow's pandas-shim that gets imported # with this module https://github.com/rapidsai/cudf/issues/14521#issue-2015198786 import pyarrow.dataset as ds # noqa: F401 +from pandas._libs.tslibs import offsets as liboffsets from pandas._testing import at, getitem, iat, iloc, loc, setitem from pandas.compat._optional import import_optional_dependency from pandas.tseries.holiday import ( @@ -36,7 +36,6 @@ ) import cudf -import cudf.core._compat from ..annotation import nvtx from ..fast_slow_proxy import ( @@ -68,13 +67,6 @@ XportReader as pd_XportReader, ) -# TODO(pandas2.1): Can import from pandas.api.typing -from pandas.core.resample import ( # isort: skip - Resampler as pd_Resampler, - TimeGrouper as pd_TimeGrouper, - DatetimeIndexResampler as pd_DatetimeIndexResampler, -) - try: from IPython import get_ipython @@ -83,36 +75,6 @@ ipython_shell = None -def _pandas_util_dir(): - # In pandas 2.0, pandas.util contains public APIs under - # __getattr__ but no __dir__ to find them - # https://github.com/pandas-dev/pandas/blob/2.2.x/pandas/util/__init__.py - res = list( - set( - [ - *list(importlib.import_module("pandas.util").__dict__.keys()), - "Appender", - "Substitution", - "_exceptions", - "_print_versions", - "cache_readonly", - "hash_array", - "hash_pandas_object", - "version", - "_tester", - "_validators", - "_decorators", - ] - ) - ) - if cudf.core._compat.PANDAS_GE_220: - res.append("capitalize_first_letter") - return res - - -pd.util.__dir__ = _pandas_util_dir - - def make_final_proxy_type( name, fast_type, @@ -137,20 +99,6 @@ def make_intermediate_proxy_type( ) -try: - # List Accessor in pandas was introduced in 2.2.0 only - pd_ListAccessor = pd.core.arrays.arrow.accessors.ListAccessor -except AttributeError: - pd_ListAccessor = _Unusable - - -try: - # Struct Accessor in pandas was introduced in 2.2.0 only - pd_StructAccessor = pd.core.arrays.arrow.accessors.StructAccessor -except AttributeError: - pd_StructAccessor = _Unusable - - class _AccessorAttr: """ Descriptor that ensures that accessors like `.dt` and `.str` @@ -249,7 +197,7 @@ def Timestamp_Timedelta__new__(cls, *args, **kwargs): ListMethods = make_intermediate_proxy_type( "ListMethods", cudf.core.accessors.lists.ListMethods, - pd_ListAccessor, + pd.core.arrays.arrow.accessors.ListAccessor, ) SparseAccessor = make_intermediate_proxy_type( @@ -261,7 +209,7 @@ def Timestamp_Timedelta__new__(cls, *args, **kwargs): StructAccessor = make_intermediate_proxy_type( "StructAccessor", cudf.core.accessors.struct.StructMethods, - pd_StructAccessor, + pd.core.arrays.arrow.accessors.StructAccessor, ) _CategoricalAccessor = make_intermediate_proxy_type( "CategoricalAccessor", @@ -442,6 +390,8 @@ def _argsort(self, *args, **kwargs): "attrs": _FastSlowAttribute("attrs"), "_mgr": _FastSlowAttribute("_mgr", private=True), "array": _FastSlowAttribute("array", private=True), + "_values": _FastSlowAttribute("_values", private=True), + "values": _FastSlowAttribute("values"), "sparse": _FastSlowAttribute("sparse", private=True), "_AXIS_LEN": _FastSlowAttribute("_AXIS_LEN", private=True), "_AXIS_TO_AXIS_NUMBER": _FastSlowAttribute( @@ -453,6 +403,23 @@ def _argsort(self, *args, **kwargs): ) +def _Index_values(self): + from cudf.utils.dtypes import is_pandas_nullable_extension_dtype + + # For nullable integer dtypes (Int8/Int16/Int32/Int64/UInt8/.../UInt64), + # cudf's .values returns a plain ndarray, but pandas returns an + # IntegerArray (ExtensionArray) that supports NA values. Using the cudf + # fast path here produces the wrong result type, so we always use the + # slow (pandas) path for these dtypes. + # Access dtype directly from the wrapped object to stay out of the proxy + # dispatch path and to avoid mutating the proxy state. + dtype = self._fsproxy_wrapped.dtype + if is_pandas_nullable_extension_dtype(dtype): + slow = self._fsproxy_fast_to_slow() + return _maybe_wrap_result(slow.values, None) + return _fast_slow_function_call(getattr, None, self, "values")[0] + + def Index__new__(cls, *args, **kwargs): # Call fast/slow constructor # This takes care of running __init__ as well, but must be paired @@ -514,6 +481,7 @@ def Index__setattr__(self, name, value): # TODO: Handle special cases like mergesort being unsupported # and raising for certain types like Categorical and RangeIndex "argsort": _argsort, + "values": property(_Index_values), }, ) @@ -570,6 +538,9 @@ def Index__setattr__(self, name, value): pd.arrays.SparseArray, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + additional_attributes={ + "_readonly": _FastSlowAttribute("_readonly", private=True), + }, ) CategoricalIndex = make_final_proxy_type( @@ -641,9 +612,11 @@ def Index__setattr__(self, name, value): slow_to_fast=_Unusable(), bases=(pd.api.extensions.ExtensionArray,), additional_attributes={ + "__array__": array_method, "__array_ufunc__": _FastSlowAttribute("__array_ufunc__"), "_data": _FastSlowAttribute("_data", private=True), "_mask": _FastSlowAttribute("_mask", private=True), + "_readonly": _FastSlowAttribute("_readonly", private=True), }, ) @@ -690,6 +663,7 @@ def Index__setattr__(self, name, value): additional_attributes={ "_ndarray": _FastSlowAttribute("_ndarray"), "_dtype": _FastSlowAttribute("_dtype"), + "_readonly": _FastSlowAttribute("_readonly", private=True), }, ) @@ -705,6 +679,7 @@ def Index__setattr__(self, name, value): additional_attributes={ "_ndarray": _FastSlowAttribute("_ndarray"), "_dtype": _FastSlowAttribute("_dtype"), + "_readonly": _FastSlowAttribute("_readonly", private=True), }, ) @@ -716,9 +691,11 @@ def Index__setattr__(self, name, value): slow_to_fast=_Unusable(), bases=(pd.api.extensions.ExtensionArray,), additional_attributes={ + "__array__": array_method, "__array_ufunc__": _FastSlowAttribute("__array_ufunc__"), "_data": _FastSlowAttribute("_data", private=True), "_mask": _FastSlowAttribute("_mask", private=True), + "_readonly": _FastSlowAttribute("_readonly", private=True), }, ) @@ -750,6 +727,8 @@ def Index__setattr__(self, name, value): additional_attributes={ "_data": _FastSlowAttribute("_data", private=True), "_mask": _FastSlowAttribute("_mask", private=True), + "_readonly": _FastSlowAttribute("_readonly", private=True), + "__array__": array_method, "__array_ufunc__": _FastSlowAttribute("__array_ufunc__"), }, ) @@ -801,7 +780,7 @@ def Index__setattr__(self, name, value): TimeGrouper = make_intermediate_proxy_type( "TimeGrouper", _Unusable, - pd_TimeGrouper, + pd.api.typing.TimeGrouper, ) Grouper = make_final_proxy_type( @@ -822,6 +801,14 @@ def Index__setattr__(self, name, value): if getattr(slow, k, None) is not None } ), + additional_attributes={ + "binner": _FastSlowAttribute("binner"), + "dropna": _FastSlowAttribute("dropna"), + "freq": _FastSlowAttribute("freq"), + "key": _FastSlowAttribute("key"), + "level": _FastSlowAttribute("level"), + "sort": _FastSlowAttribute("sort"), + }, ) StringArray = make_final_proxy_type( @@ -830,39 +817,17 @@ def Index__setattr__(self, name, value): pd.arrays.StringArray, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), - bases=(pd.api.extensions.ExtensionArray,), + bases=(NumpyExtensionArray, pd.api.extensions.ExtensionArray), additional_attributes={ "_data": _FastSlowAttribute("_data", private=True), "_mask": _FastSlowAttribute("_mask", private=True), + "_readonly": _FastSlowAttribute("_readonly", private=True), "__array__": _FastSlowAttribute("__array__"), "__array_ufunc__": _FastSlowAttribute("__array_ufunc__"), "__arrow_array__": _FastSlowAttribute("__arrow_array__"), }, ) -if cudf.core._compat.PANDAS_GE_210: - ArrowStringArrayNumpySemantics = make_final_proxy_type( - "ArrowStringArrayNumpySemantics", - _Unusable, - pd.core.arrays.string_arrow.ArrowStringArrayNumpySemantics, - fast_to_slow=_Unusable(), - slow_to_fast=_Unusable(), - additional_attributes={ - "_pa_array": _FastSlowAttribute("_pa_array", private=True), - "__array__": _FastSlowAttribute("__array__", private=True), - }, - ) - -if cudf.core._compat.PANDAS_GE_230: - StringArrayNumpySemantics = make_final_proxy_type( - "StringArrayNumpySemantics", - _Unusable, - pd.core.arrays.string_.StringArrayNumpySemantics, - bases=(StringArray,), - fast_to_slow=_Unusable(), - slow_to_fast=_Unusable(), - ) - ArrowStringArray = make_final_proxy_type( "ArrowStringArray", @@ -873,6 +838,7 @@ def Index__setattr__(self, name, value): bases=(pd.api.extensions.ExtensionArray,), additional_attributes={ "_pa_array": _FastSlowAttribute("_pa_array", private=True), + "_readonly": _FastSlowAttribute("_readonly", private=True), "__array__": _FastSlowAttribute("__array__", private=True), "__invert__": _FastSlowAttribute("__invert__"), "__neg__": _FastSlowAttribute("__neg__"), @@ -911,10 +877,11 @@ def Index__setattr__(self, name, value): pd.arrays.BooleanArray, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), - bases=(pd.api.extensions.ExtensionArray,), + bases=(pd.core.arrays.BaseMaskedArray,), additional_attributes={ "_data": _FastSlowAttribute("_data", private=True), "_mask": _FastSlowAttribute("_mask", private=True), + "_readonly": _FastSlowAttribute("_readonly", private=True), "__array_ufunc__": _FastSlowAttribute("__array_ufunc__"), }, ) @@ -925,7 +892,9 @@ def Index__setattr__(self, name, value): pd.BooleanDtype, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + bases=(pd.api.extensions.ExtensionDtype,), additional_attributes={ + "__from_arrow__": _FastSlowAttribute("__from_arrow__"), "__hash__": _FastSlowAttribute("__hash__"), }, ) @@ -936,11 +905,12 @@ def Index__setattr__(self, name, value): pd.arrays.IntegerArray, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), - bases=(pd.api.extensions.ExtensionArray,), + bases=(pd.core.arrays.BaseMaskedArray,), additional_attributes={ "__array_ufunc__": _FastSlowAttribute("__array_ufunc__"), "_data": _FastSlowAttribute("_data", private=True), "_mask": _FastSlowAttribute("_mask", private=True), + "_readonly": _FastSlowAttribute("_readonly", private=True), }, ) @@ -950,7 +920,9 @@ def Index__setattr__(self, name, value): pd.Int8Dtype, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + bases=(pd.api.extensions.ExtensionDtype,), additional_attributes={ + "__from_arrow__": _FastSlowAttribute("__from_arrow__"), "__hash__": _FastSlowAttribute("__hash__"), }, ) @@ -962,7 +934,9 @@ def Index__setattr__(self, name, value): pd.Int16Dtype, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + bases=(pd.api.extensions.ExtensionDtype,), additional_attributes={ + "__from_arrow__": _FastSlowAttribute("__from_arrow__"), "__hash__": _FastSlowAttribute("__hash__"), }, ) @@ -973,7 +947,9 @@ def Index__setattr__(self, name, value): pd.Int32Dtype, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + bases=(pd.api.extensions.ExtensionDtype,), additional_attributes={ + "__from_arrow__": _FastSlowAttribute("__from_arrow__"), "__hash__": _FastSlowAttribute("__hash__"), }, ) @@ -984,7 +960,9 @@ def Index__setattr__(self, name, value): pd.Int64Dtype, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + bases=(pd.api.extensions.ExtensionDtype,), additional_attributes={ + "__from_arrow__": _FastSlowAttribute("__from_arrow__"), "__hash__": _FastSlowAttribute("__hash__"), }, ) @@ -995,7 +973,9 @@ def Index__setattr__(self, name, value): pd.UInt8Dtype, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + bases=(pd.api.extensions.ExtensionDtype,), additional_attributes={ + "__from_arrow__": _FastSlowAttribute("__from_arrow__"), "__hash__": _FastSlowAttribute("__hash__"), }, ) @@ -1006,7 +986,9 @@ def Index__setattr__(self, name, value): pd.UInt16Dtype, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + bases=(pd.api.extensions.ExtensionDtype,), additional_attributes={ + "__from_arrow__": _FastSlowAttribute("__from_arrow__"), "__hash__": _FastSlowAttribute("__hash__"), }, ) @@ -1017,7 +999,9 @@ def Index__setattr__(self, name, value): pd.UInt32Dtype, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + bases=(pd.api.extensions.ExtensionDtype,), additional_attributes={ + "__from_arrow__": _FastSlowAttribute("__from_arrow__"), "__hash__": _FastSlowAttribute("__hash__"), }, ) @@ -1028,7 +1012,9 @@ def Index__setattr__(self, name, value): pd.UInt64Dtype, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + bases=(pd.api.extensions.ExtensionDtype,), additional_attributes={ + "__from_arrow__": _FastSlowAttribute("__from_arrow__"), "__hash__": _FastSlowAttribute("__hash__"), }, ) @@ -1062,6 +1048,9 @@ def Index__setattr__(self, name, value): "__array_ufunc__": _FastSlowAttribute("__array_ufunc__"), "_data": _FastSlowAttribute("_data", private=True), "_mask": _FastSlowAttribute("_mask", private=True), + "_readonly": _FastSlowAttribute("_readonly", private=True), + "_left": _FastSlowAttribute("_left", private=True), + "_right": _FastSlowAttribute("_right", private=True), }, ) @@ -1094,11 +1083,12 @@ def Index__setattr__(self, name, value): pd.arrays.FloatingArray, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), - bases=(pd.api.extensions.ExtensionArray,), + bases=(pd.core.arrays.BaseMaskedArray,), additional_attributes={ "__array_ufunc__": _FastSlowAttribute("__array_ufunc__"), "_data": _FastSlowAttribute("_data", private=True), "_mask": _FastSlowAttribute("_mask", private=True), + "_readonly": _FastSlowAttribute("_readonly", private=True), }, ) @@ -1108,7 +1098,9 @@ def Index__setattr__(self, name, value): pd.Float32Dtype, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + bases=(pd.api.extensions.ExtensionDtype,), additional_attributes={ + "__from_arrow__": _FastSlowAttribute("__from_arrow__"), "__hash__": _FastSlowAttribute("__hash__"), }, ) @@ -1119,7 +1111,9 @@ def Index__setattr__(self, name, value): pd.Float64Dtype, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + bases=(pd.api.extensions.ExtensionDtype,), additional_attributes={ + "__from_arrow__": _FastSlowAttribute("__from_arrow__"), "__hash__": _FastSlowAttribute("__hash__"), }, ) @@ -1194,6 +1188,10 @@ def Index__setattr__(self, name, value): pd.api.indexers.FixedForwardWindowIndexer, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + additional_attributes={ + "index_array": _FastSlowAttribute("index_array"), + "window_size": _FastSlowAttribute("window_size"), + }, ) VariableOffsetWindowIndexer = make_final_proxy_type( @@ -1202,6 +1200,12 @@ def Index__setattr__(self, name, value): pd.api.indexers.VariableOffsetWindowIndexer, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + additional_attributes={ + "index": _FastSlowAttribute("index"), + "index_array": _FastSlowAttribute("index_array"), + "offset": _FastSlowAttribute("offset"), + "window_size": _FastSlowAttribute("window_size"), + }, ) Window = make_intermediate_proxy_type( @@ -1247,25 +1251,41 @@ def Index__setattr__(self, name, value): ) Resampler = make_intermediate_proxy_type( - "Resampler", cudf.core.resample._Resampler, pd_Resampler + "Resampler", cudf.core.resample._Resampler, pd.api.typing.Resampler ) DataFrameResampler = make_intermediate_proxy_type( - "DataFrameResampler", cudf.core.resample.DataFrameResampler, pd_Resampler + "DataFrameResampler", + cudf.core.resample.DataFrameResampler, + pd.api.typing.Resampler, ) SeriesResampler = make_intermediate_proxy_type( - "SeriesResampler", cudf.core.resample.SeriesResampler, pd_Resampler + "SeriesResampler", + cudf.core.resample.SeriesResampler, + pd.api.typing.Resampler, ) DatetimeIndexResampler = make_intermediate_proxy_type( - "DatetimeIndexResampler", _Unusable, pd_DatetimeIndexResampler + "DatetimeIndexResampler", + _Unusable, + pd.core.resample.DatetimeIndexResampler, ) -StataReader = make_intermediate_proxy_type( +StataReader = make_final_proxy_type( "StataReader", _Unusable, pd.io.stata.StataReader, + fast_to_slow=_Unusable(), + slow_to_fast=_Unusable(), + additional_attributes={ + "_nvar": _FastSlowAttribute("_nvar", private=True), + "_typlist": _FastSlowAttribute("_typlist", private=True), + "_varlist": _FastSlowAttribute("_varlist", private=True), + "_fmtlist": _FastSlowAttribute("_fmtlist", private=True), + "_path_or_buf": _FastSlowAttribute("_path_or_buf", private=True), + "_chunk": _FastSlowAttribute("_chunk", private=True), + }, ) HDFStore = make_final_proxy_type( @@ -1283,7 +1303,11 @@ def Index__setattr__(self, name, value): pd.ExcelFile, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), - additional_attributes={"__hash__": _FastSlowAttribute("__hash__")}, + additional_attributes={ + "__hash__": _FastSlowAttribute("__hash__"), + "engine": _FastSlowAttribute("engine"), + "storage_options": _FastSlowAttribute("storage_options"), + }, ) ExcelWriter = make_final_proxy_type( @@ -1310,6 +1334,35 @@ def Index__setattr__(self, name, value): pd_StylerRenderer, fast_to_slow=_Unusable(), slow_to_fast=_Unusable(), + additional_attributes={ + "caption": _FastSlowAttribute("caption"), + "cell_context": _FastSlowAttribute("cell_context"), + "cell_ids": _FastSlowAttribute("cell_ids"), + "cellstyle_map": _FastSlowAttribute("cellstyle_map"), + "cellstyle_map_columns": _FastSlowAttribute( + "cellstyle_map_columns" + ), + "cellstyle_map_index": _FastSlowAttribute("cellstyle_map_index"), + "columns": _FastSlowAttribute("columns"), + "concatenated": _FastSlowAttribute("concatenated"), + "css": _FastSlowAttribute("css"), + "ctx": _FastSlowAttribute("ctx"), + "ctx_columns": _FastSlowAttribute("ctx_columns"), + "ctx_index": _FastSlowAttribute("ctx_index"), + "data": _FastSlowAttribute("data"), + "hidden_columns": _FastSlowAttribute("hidden_columns"), + "hidden_rows": _FastSlowAttribute("hidden_rows"), + "hide_column_names": _FastSlowAttribute("hide_column_names"), + "hide_columns_": _FastSlowAttribute("hide_columns_"), + "hide_index_": _FastSlowAttribute("hide_index_"), + "hide_index_names": _FastSlowAttribute("hide_index_names"), + "index": _FastSlowAttribute("index"), + "table_attributes": _FastSlowAttribute("table_attributes"), + "table_styles": _FastSlowAttribute("table_styles"), + "tooltips": _FastSlowAttribute("tooltips"), + "uuid": _FastSlowAttribute("uuid"), + "uuid_len": _FastSlowAttribute("uuid_len"), + }, ) Styler = make_final_proxy_type( @@ -1327,6 +1380,7 @@ def Index__setattr__(self, name, value): "_display_funcs": _FastSlowAttribute( "_display_funcs", private=True ), + "_compute": _FastSlowAttribute("_compute", private=True), "table_styles": _FastSlowAttribute("table_styles"), "columns": _FastSlowAttribute("columns"), "caption": _FastSlowAttribute("caption"), @@ -1336,12 +1390,30 @@ def Index__setattr__(self, name, value): "_display_funcs_index": _FastSlowAttribute( "_display_funcs_index", private=True ), + "_display_funcs_column_names": _FastSlowAttribute( + "_display_funcs_column_names", private=True + ), + "_display_funcs_index_names": _FastSlowAttribute( + "_display_funcs_index_names", private=True + ), "uuid": _FastSlowAttribute("uuid"), "hide_index_": _FastSlowAttribute("hide_index_"), "hide_index_names": _FastSlowAttribute("hide_index_names"), "hide_columns_": _FastSlowAttribute("hide_columns_"), "hide_column_names": _FastSlowAttribute("hide_column_names"), "table_attributes": _FastSlowAttribute("table_attributes"), + "cell_context": _FastSlowAttribute("cell_context"), + "cell_ids": _FastSlowAttribute("cell_ids"), + "cellstyle_map": _FastSlowAttribute("cellstyle_map"), + "cellstyle_map_columns": _FastSlowAttribute( + "cellstyle_map_columns" + ), + "cellstyle_map_index": _FastSlowAttribute("cellstyle_map_index"), + "concatenated": _FastSlowAttribute("concatenated"), + "hidden_columns": _FastSlowAttribute("hidden_columns"), + "hidden_rows": _FastSlowAttribute("hidden_rows"), + "tooltips": _FastSlowAttribute("tooltips"), + "uuid_len": _FastSlowAttribute("uuid_len"), }, ) except ImportError: @@ -1349,13 +1421,16 @@ def Index__setattr__(self, name, value): pass -def _find_user_frame(): +def _find_user_frame(level=0): frame = inspect.currentframe() + skip = 0 while frame: modname = frame.f_globals.get("__name__", "") # TODO: Remove "nvtx." entry once we cross nvtx-0.2.11 as minimum version if modname == "__main__" or not modname.startswith(("cudf.", "nvtx.")): - return frame + if skip == level: + return frame + skip += 1 frame = frame.f_back raise RuntimeError("Could not find the user's frame.") @@ -1379,7 +1454,7 @@ def _find_user_frame(): def _get_eval_locals_and_globals(level, local_dict=None, global_dict=None): - frame = _find_user_frame() + frame = _find_user_frame(level=level) local_dict = dict(frame.f_locals) if local_dict is None else local_dict global_dict = dict(frame.f_globals) if global_dict is None else global_dict return local_dict, global_dict @@ -1542,6 +1617,16 @@ def holiday_calendar_factory_wrapper(*args, **kwargs): slow_to_fast=_Unusable(), additional_attributes={ "__hash__": _FastSlowAttribute("__hash__"), + "day": _FastSlowAttribute("day"), + "days_of_week": _FastSlowAttribute("days_of_week"), + "end_date": _FastSlowAttribute("end_date"), + "exclude_dates": _FastSlowAttribute("exclude_dates"), + "month": _FastSlowAttribute("month"), + "name": _FastSlowAttribute("name"), + "observance": _FastSlowAttribute("observance"), + "offset": _FastSlowAttribute("offset"), + "start_date": _FastSlowAttribute("start_date"), + "year": _FastSlowAttribute("year"), }, ) USThanksgivingDay = make_final_proxy_type( @@ -1655,6 +1740,28 @@ def holiday_calendar_factory_wrapper(*args, **kwargs): }, ) +BHalfYearBegin = make_final_proxy_type( + "BHalfYearBegin", + _Unusable, + pd.offsets.BHalfYearBegin, + fast_to_slow=_Unusable(), + slow_to_fast=_Unusable(), + additional_attributes={ + "__hash__": _FastSlowAttribute("__hash__"), + }, +) + +BHalfYearEnd = make_final_proxy_type( + "BHalfYearEnd", + _Unusable, + pd.offsets.BHalfYearEnd, + fast_to_slow=_Unusable(), + slow_to_fast=_Unusable(), + additional_attributes={ + "__hash__": _FastSlowAttribute("__hash__"), + }, +) + BMonthBegin = make_final_proxy_type( "BMonthBegin", _Unusable, @@ -1842,6 +1949,19 @@ def holiday_calendar_factory_wrapper(*args, **kwargs): }, ) +# Pandas stores DateOffset kwargs (e.g., `day`, `months`) and the resolved +# `_offset` directly on the instance __dict__, so they don't appear in +# dir(pd.DateOffset) and aren't picked up by the proxy machinery. Register +# each one explicitly so attribute lookup falls back to the wrapped instance. +_DATEOFFSET_INSTANCE_ATTRS = { + name: _FastSlowAttribute(name, private=name.startswith("_")) + for name in ( + *liboffsets._relativedelta_kwds, + "_offset", + "_use_relativedelta", + ) +} + DateOffset = make_final_proxy_type( "DateOffset", _Unusable, @@ -1850,6 +1970,7 @@ def holiday_calendar_factory_wrapper(*args, **kwargs): slow_to_fast=_Unusable(), additional_attributes={ "__hash__": _FastSlowAttribute("__hash__"), + **_DATEOFFSET_INSTANCE_ATTRS, }, ) @@ -1861,6 +1982,7 @@ def holiday_calendar_factory_wrapper(*args, **kwargs): slow_to_fast=_Unusable(), additional_attributes={ "__hash__": _FastSlowAttribute("__hash__"), + **_DATEOFFSET_INSTANCE_ATTRS, }, ) @@ -1897,6 +2019,28 @@ def holiday_calendar_factory_wrapper(*args, **kwargs): }, ) +HalfYearBegin = make_final_proxy_type( + "HalfYearBegin", + _Unusable, + pd.offsets.HalfYearBegin, + fast_to_slow=_Unusable(), + slow_to_fast=_Unusable(), + additional_attributes={ + "__hash__": _FastSlowAttribute("__hash__"), + }, +) + +HalfYearEnd = make_final_proxy_type( + "HalfYearEnd", + _Unusable, + pd.offsets.HalfYearEnd, + fast_to_slow=_Unusable(), + slow_to_fast=_Unusable(), + additional_attributes={ + "__hash__": _FastSlowAttribute("__hash__"), + }, +) + Hour = make_final_proxy_type( "Hour", _Unusable, @@ -2115,6 +2259,9 @@ def holiday_calendar_factory_wrapper(*args, **kwargs): slow_to_fast=lambda slow: slow, additional_attributes={ "__hash__": _FastSlowAttribute("__hash__"), + "aggfunc": _FastSlowAttribute("aggfunc"), + "column": _FastSlowAttribute("column"), + "kwargs": _FastSlowAttribute("kwargs"), }, ) @@ -2135,6 +2282,7 @@ def _arrow_extension_array_astype(self, dtype=None, copy: bool = False): slow_to_fast=_Unusable(), additional_attributes={ "_pa_array": _FastSlowAttribute("_pa_array", private=True), + "_readonly": _FastSlowAttribute("_readonly", private=True), "__array__": _FastSlowAttribute("__array__", private=True), "__invert__": _FastSlowAttribute("__invert__"), "__neg__": _FastSlowAttribute("__neg__"), @@ -2213,13 +2361,69 @@ def _arrow_extension_array_astype(self, dtype=None, copy: bool = False): }, ) +# SQLTable and SQLiteTable set their instance attributes in __init__, +# so they aren't visible via dir(cls). Forward them explicitly because +# the proxy's __getattr__ fallback is only installed when the slow type +# defines __getattr__. +_SQL_TABLE_ATTRS = { + name: _FastSlowAttribute(name) + for name in ( + "dtype", + "frame", + "if_exists", + "index", + "keys", + "name", + "pd_sql", + "prefix", + "schema", + "table", + ) +} + +SQLTable = make_final_proxy_type( + "SQLTable", + _Unusable, + pd.io.sql.SQLTable, + fast_to_slow=_Unusable(), + slow_to_fast=_Unusable(), + additional_attributes={ + "__hash__": _FastSlowAttribute("__hash__"), + **_SQL_TABLE_ATTRS, + }, +) + +SQLiteTable = make_final_proxy_type( + "SQLiteTable", + _Unusable, + pd.io.sql.SQLiteTable, + fast_to_slow=_Unusable(), + slow_to_fast=_Unusable(), + additional_attributes={ + "__hash__": _FastSlowAttribute("__hash__"), + **_SQL_TABLE_ATTRS, + }, +) + +SQLDatabase = make_final_proxy_type( + "SQLDatabase", + _Unusable, + pd.io.sql.SQLDatabase, + fast_to_slow=_Unusable(), + slow_to_fast=_Unusable(), + additional_attributes={ + "__hash__": _FastSlowAttribute("__hash__"), + **{ + name: _FastSlowAttribute(name) + for name in ("con", "exit_stack", "meta", "returns_generator") + }, + }, +) + _PANDAS_OBJ_FINAL_TYPES = [ pd.core.indexes.accessors.PeriodProperties, pd.core.indexes.accessors.Properties, pd.plotting._core.PlotAccessor, - pd.io.sql.SQLiteTable, - pd.io.sql.SQLTable, - pd.io.sql.SQLDatabase, pd.io.sql.SQLiteDatabase, pd.io.sql.PandasSQL, ] @@ -2472,7 +2676,7 @@ def _unpickle_offset_obj(pickled_args): data = pickle.loads(pickled_args) data.pop("_offset") data.pop("_use_relativedelta") - obj = pd._libs.tslibs.offsets.DateOffset(**data) + obj = pd.DateOffset(**data) return obj @@ -2511,4 +2715,20 @@ def _unpickle_offset_obj(pickled_args): obj, _index_unpickle_obj ) -copyreg.dispatch_table[pd._libs.tslibs.offsets.DateOffset] = _reduce_offset_obj +copyreg.dispatch_table[pd.DateOffset] = _reduce_offset_obj + + +def _unpickle_NaT(): + return pd.NaT + + +def _reduce_NaT(obj): + # NaT.__reduce__ returns the cyfunction ``_nat_unpickle`` directly, + # but cudf.pandas replaces ``pandas._libs.tslibs.nattype._nat_unpickle`` + # with a function proxy. Pickle's identity check between the cyfunction + # and the module-level proxy then raises ``PicklingError``. Round-trip + # NaT via our own helper to avoid the lookup. + return _unpickle_NaT, () + + +copyreg.dispatch_table[type(pd.NaT)] = _reduce_NaT diff --git a/python/cudf/cudf/pandas/fast_slow_proxy.py b/python/cudf/cudf/pandas/fast_slow_proxy.py index 5ec7d782ffb0..64b21a15d908 100644 --- a/python/cudf/cudf/pandas/fast_slow_proxy.py +++ b/python/cudf/cudf/pandas/fast_slow_proxy.py @@ -57,12 +57,15 @@ def call_operator(fn, args, kwargs): for attr in functools.WRAPPER_ASSIGNMENTS # Skip __doc__ because we assign it on class creation using exec_body # callable that updates the namespace of the class. - # Skip __annotations__ because there are differences between Python - # versions on how it is initialized for a class that doesn't explicitly - # define it and we don't want to force eager evaluation of anything that - # would normally be lazy (mostly for consistency, shouldn't cause any - # significant issues). - if attr not in ("__annotations__", "__doc__") + # Skip __annotations__ / __annotate__ (PEP 749, added on 3.14) because + # there are differences between Python versions on how they're + # initialized for a class that doesn't explicitly define them and we + # don't want to force eager evaluation of anything that would normally + # be lazy. On 3.14 specifically, simply reading ``__annotate__`` causes + # ``__annotate_func__`` to materialize on the source class, which then + # shows up in ``dir()`` and diverges from the cached ``_fsproxy_slow_dir`` + # captured a few lines earlier. + if attr not in ("__annotations__", "__annotate__", "__doc__") ) @@ -693,6 +696,23 @@ def __dir__(self): def __setattr__(self, name, value): if name.startswith("_"): + # If the class declares this private name as a + # ``_FastSlowAttribute``, forward the write to the wrapped + # object so that behaviors driven by that attribute + # (e.g. ``_readonly`` propagation in + # ``ArrowExtensionArray.__getitem__``) are preserved. + descriptor = inspect.getattr_static(type(self), name, None) + if isinstance(descriptor, _FastSlowAttribute): + try: + wrapped = object.__getattribute__(self, "_fsproxy_wrapped") + except AttributeError: + wrapped = None + if wrapped is not None: + try: + setattr(wrapped, name, value) + return + except (AttributeError, TypeError): + pass object.__setattr__(self, name, value) return return _FastSlowAttribute("__setattr__").__get__(self, type(self))( @@ -784,9 +804,35 @@ def __setstate__(self, state): # Need a local import to avoid circular import issues from .module_accelerator import disable_module_accelerator - with disable_module_accelerator(): - unpickled_wrapped_obj = pickle.loads(state) - self._fsproxy_wrapped = unpickled_wrapped_obj + if isinstance(state, bytes): + # State produced by ``__reduce__`` above. + with disable_module_accelerator(): + unpickled_wrapped_obj = pickle.loads(state) + self._fsproxy_wrapped = unpickled_wrapped_obj + else: + # Native state from the slow class. Reached when raw + # ``pickle.load`` resolves a reference to one of our proxy + # classes via ordinary attribute lookup (no + # ``disable_module_accelerator`` shielding) and then drives + # ``__setstate__`` with whatever the slow class's own + # ``__reduce__`` produced (e.g. dict for CategoricalDtype, + # tuple for PeriodArray). The state may itself contain proxy + # objects, so unwrap them to the underlying slow values + # before handing the state to the slow class. + with disable_module_accelerator(): + slow_state = _slow_arg(state) + slow_type = type(self)._fsproxy_slow_type + wrapped = slow_type.__new__(slow_type) + if hasattr(wrapped, "__setstate__"): + wrapped.__setstate__(slow_state) + elif isinstance(slow_state, dict): + wrapped.__dict__.update(slow_state) + else: + raise TypeError( + f"Cannot restore proxy {type(self).__name__} from " + f"state of type {type(slow_state).__name__}" + ) + self._fsproxy_wrapped = wrapped class _IntermediateProxy(_FastSlowProxy): @@ -1060,6 +1106,25 @@ def __get__(self, instance, owner) -> Any: return self._attr + def __set__(self, instance, value) -> None: + # Implementing ``__set__`` makes this a data descriptor, which takes + # precedence over an entry of the same name in ``instance.__dict__``. + # Without it, ``object.__setattr__`` (called from the proxy's + # ``__setattr__`` for underscore-prefixed names) would write to the + # instance dict and shadow the descriptor on reads, so private attrs + # declared in ``additional_attributes`` would never reach the slow + # object. + if self._private: + # Forward to the slow object so pandas-internal state + # (e.g. the ``_readonly`` flag consulted by ``__setitem__``) stays + # in sync with what the user assigned on the proxy. + object.__setattr__(instance._fsproxy_slow, self._name, value) + else: + # Preserve the pre-data-descriptor behavior for non-private + # entries by writing to the instance dict directly (assigning via + # ``object.__setattr__`` would recurse through this descriptor). + instance.__dict__[self._name] = value + class _MethodProxy(_FunctionProxy): def __init__(self, fast, slow, _fsproxy_transfer_block=None): @@ -1080,6 +1145,10 @@ def __dir__(self): def __doc__(self): return self._fsproxy_slow.__doc__ + @property + def __func__(self): + return self._fsproxy_slow.__func__ + @property def __name__(self): return self._fsproxy_slow.__name__ diff --git a/python/cudf/cudf/pandas/proxy_base.py b/python/cudf/cudf/pandas/proxy_base.py index 420f1a7d7d51..81974ba5bf08 100644 --- a/python/cudf/cudf/pandas/proxy_base.py +++ b/python/cudf/cudf/pandas/proxy_base.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 import cupy as cp @@ -7,15 +7,29 @@ class ProxyNDarrayBase(np.ndarray): def __new__(cls, arr): + original_slow = None + if isinstance(arr, np.ndarray) and arr.base is not None: + # Preserve view semantics across fast/slow conversions by + # remembering the original view. Without this, a round-trip + # through cupy (e.g. when a proxied function first tries the + # fast path then falls back to slow) produces a fresh numpy + # array whose ``.base`` is None. + original_slow = arr if isinstance(arr, cp.ndarray): arr = arr.get() if not isinstance(arr, np.ndarray): raise TypeError( "Unsupported array type. Must be numpy.ndarray or cupy.ndarray" ) - return np.asarray(arr, dtype=arr.dtype).view(cls) + proxy = np.asarray(arr, dtype=arr.dtype).view(cls) + if original_slow is not None: + proxy._fsproxy_original_slow = original_slow + return proxy def __array_finalize__(self, obj): if obj is None: return self._fsproxy_wrapped = getattr(obj, "_fsproxy_wrapped", obj) + original_slow = getattr(obj, "_fsproxy_original_slow", None) + if original_slow is not None: + self._fsproxy_original_slow = original_slow diff --git a/python/cudf/cudf/pandas/scripts/conftest-patch.py b/python/cudf/cudf/pandas/scripts/conftest-patch.py index 12f1eae9e694..68d332a1249a 100644 --- a/python/cudf/cudf/pandas/scripts/conftest-patch.py +++ b/python/cudf/cudf/pandas/scripts/conftest-patch.py @@ -4,12 +4,10 @@ import contextlib import json import os -import re import sys import traceback from collections import defaultdict from functools import wraps -from itertools import chain import pytest @@ -87,9564 +85,7868 @@ def pytest_unconfigure(config): print(f"Function call counts have been written to {output_file}") # noqa: T201 -@pytest.fixture(autouse=True) -def set_copy_on_write_option(): - import pandas as xpd - - cudf = xpd._fsproxy_fast - pd = xpd._fsproxy_slow - with cudf.option_context("copy_on_write", True): - with pd.option_context("mode.copy_on_write", True): - yield - - -# TODO: Pass these tests with cudf.pandas enabled. -NODEIDS_THAT_FAIL_WITH_CUDF_PANDAS = { - "tests/frame/methods/test_drop.py::test_drop_with_non_unique_datetime_index_and_invalid_keys", - "tests/frame/methods/test_fillna.py::TestFillNA::test_fillna_dtype_conversion", - "tests/frame/methods/test_fillna.py::TestFillNA::test_fillna_with_multi_index_frame", - "tests/frame/methods/test_fillna.py::test_fillna_nones_inplace", - "tests/api/test_api.py::test_pandas_array_alias", - "tests/apply/test_frame_apply.py::test_apply[python]", - "tests/apply/test_frame_apply.py::test_apply_function_runs_once", - "tests/apply/test_frame_apply.py::test_apply_raw_function_runs_once[python]", - "tests/apply/test_frame_apply.py::test_mixed_column_raises[max-df0]", - "tests/apply/test_frame_apply.py::test_mixed_column_raises[min-df0]", - "tests/apply/test_frame_apply.py::test_mixed_column_raises[sum-df0]", - "tests/apply/test_frame_apply.py::test_nuiscance_columns", - "tests/apply/test_series_apply.py::test_apply[False]", - "tests/apply/test_series_apply.py::test_apply[compat]", - "tests/arithmetic/test_categorical.py::TestCategoricalComparisons::test_categorical_tuple_equality", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64_array_sub_dt_with_different_timezone[DataFrame]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64_array_sub_dt_with_different_timezone[Index]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64_array_sub_dt_with_different_timezone[Series]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64_array_sub_dt_with_different_timezone[array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['+01:15'-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['+01:15'-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['-02:15'-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['-02:15'-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['Asia/Tokyo'-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['Asia/Tokyo'-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['US/Eastern'-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['US/Eastern'-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['UTC'-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['UTC'-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['UTC+01:15'-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['UTC+01:15'-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['UTC-02:15'-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['UTC-02:15'-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['dateutil/Asia/Singapore'-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['dateutil/Asia/Singapore'-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['dateutil/US/Pacific'-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar['dateutil/US/Pacific'-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[None-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[None-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[datetime.timezone(datetime.timedelta(seconds=3600))-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[datetime.timezone(datetime.timedelta(seconds=3600))-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[datetime.timezone.utc-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[datetime.timezone.utc-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[pytz.FixedOffset(-300)-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[pytz.FixedOffset(-300)-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[pytz.FixedOffset(300)-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[pytz.FixedOffset(300)-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[tzlocal()-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[tzlocal()-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[tzutc()-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[tzutc()-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[zoneinfo.ZoneInfo(key='US/Pacific')-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[zoneinfo.ZoneInfo(key='US/Pacific')-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[zoneinfo.ZoneInfo(key='UTC')-timedelta640-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64Arithmetic::test_dt64arr_add_timedeltalike_scalar[zoneinfo.ZoneInfo(key='UTC')-timedelta641-array]", - "tests/arithmetic/test_datetime64.py::TestDatetime64ArrayLikeComparisons::test_dt64arr_cmp_scalar_invalid[None-DataFrame-None]", - "tests/arithmetic/test_datetime64.py::TestDatetime64ArrayLikeComparisons::test_dt64arr_cmp_scalar_invalid[None-DataFrame-other6]", - "tests/arithmetic/test_datetime64.py::TestDatetime64ArrayLikeComparisons::test_dt64arr_cmp_scalar_invalid[None-Series-None]", - "tests/arithmetic/test_datetime64.py::TestDatetime64ArrayLikeComparisons::test_dt64arr_cmp_scalar_invalid[None-Series-other6]", - "tests/arithmetic/test_datetime64.py::test_non_nano_dt64_addsub_np_nat_scalars_unsupported_unit", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[numexpr-add-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[numexpr-floordiv-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[numexpr-mod-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[numexpr-mul-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[numexpr-pow-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[numexpr-sub-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[numexpr-truediv-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[python-add-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[python-floordiv-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[python-mod-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[python-mul-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[python-pow-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[python-sub-slice]", - "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[python-truediv-slice]", - "tests/arithmetic/test_numeric.py::TestDivisionByZero::test_df_mod_zero_df[numexpr]", - "tests/arithmetic/test_numeric.py::TestDivisionByZero::test_df_mod_zero_df[python]", - "tests/arithmetic/test_numeric.py::TestDivisionByZero::test_ser_div_ser[numexpr-float32-int64]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2[numexpr]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2[python]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx0-2-expected0]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx1--3-expected1]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx4-50-expected4]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx5-3-expected5]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx6-4-expected6]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx7-2-expected7]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx0-2-expected0]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx1--3-expected1]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx4-50-expected4]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx5-3-expected5]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx6-4-expected6]", - "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx7-2-expected7]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index0-DataFrame-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index0-Index-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index0-Series-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-DataFrame-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-Index-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-Series-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.datetime64('2021-01-01T00:00:00')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.datetime64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.datetime64('NaT','ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.timedelta64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.timedelta64('NaT','D')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.timedelta64(111600000000000,'ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.timedelta64(31,'h')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-DataFrame-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-Index-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-Series-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.datetime64('2021-01-01T00:00:00')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.datetime64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.datetime64('NaT','ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.timedelta64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.timedelta64('NaT','D')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.timedelta64(111600000000000,'ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.timedelta64(31,'h')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-DataFrame-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-Index-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-Series-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.datetime64('2021-01-01T00:00:00')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.datetime64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.datetime64('NaT','ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.timedelta64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.timedelta64('NaT','D')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.timedelta64(111600000000000,'ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.timedelta64(31,'h')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index0-DataFrame-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index0-Index-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index0-Series-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-DataFrame-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-Index-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-Series-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.datetime64('2021-01-01T00:00:00')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.datetime64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.datetime64('NaT','ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.timedelta64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.timedelta64('NaT','D')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.timedelta64(111600000000000,'ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.timedelta64(31,'h')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-DataFrame-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-Index-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-Series-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.datetime64('2021-01-01T00:00:00')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.datetime64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.datetime64('NaT','ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.timedelta64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.timedelta64('NaT','D')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.timedelta64(111600000000000,'ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.timedelta64(31,'h')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-DataFrame-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-Index-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-Series-NaT]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.datetime64('2021-01-01T00:00:00')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.datetime64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.datetime64('NaT','ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.timedelta64('NaT')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.timedelta64('NaT','D')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.timedelta64(111600000000000,'ns')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.timedelta64(31,'h')]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index0-array-timedelta640]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index0-array-timedelta641]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index0-array-timedelta642]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index0-array-timedelta64_0]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index0-array-timedelta64_1]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index0-array-timedelta64_2]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index1-array-timedelta640]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index1-array-timedelta641]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index1-array-timedelta642]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index1-array-timedelta64_0]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index1-array-timedelta64_1]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index1-array-timedelta64_2]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index2-array-timedelta640]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index2-array-timedelta641]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index2-array-timedelta642]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index2-array-timedelta64_0]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index2-array-timedelta64_1]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index2-array-timedelta64_2]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-RangeIndex-array-timedelta640]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-RangeIndex-array-timedelta641]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-RangeIndex-array-timedelta642]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-RangeIndex-array-timedelta64_0]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-RangeIndex-array-timedelta64_1]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-RangeIndex-array-timedelta64_2]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index0-array-timedelta640]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index0-array-timedelta641]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index0-array-timedelta642]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index0-array-timedelta64_0]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index0-array-timedelta64_1]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index0-array-timedelta64_2]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index1-array-timedelta640]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index1-array-timedelta641]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index1-array-timedelta642]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index1-array-timedelta64_0]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index1-array-timedelta64_1]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index1-array-timedelta64_2]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index2-array-timedelta640]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index2-array-timedelta641]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index2-array-timedelta642]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index2-array-timedelta64_0]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index2-array-timedelta64_1]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index2-array-timedelta64_2]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-RangeIndex-array-timedelta640]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-RangeIndex-array-timedelta641]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-RangeIndex-array-timedelta642]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-RangeIndex-array-timedelta64_0]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-RangeIndex-array-timedelta64_1]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-RangeIndex-array-timedelta64_2]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta640-Index0-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta640-Index1-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta640-Index2-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta640-RangeIndex-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta641-Index0-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta641-Index1-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta641-Index2-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta641-RangeIndex-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_0-Index0-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_0-Index1-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_0-Index2-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_0-RangeIndex-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_1-Index0-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_1-Index1-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_1-Index2-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_1-RangeIndex-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta640-Index0-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta640-Index1-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta640-Index2-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta640-RangeIndex-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta641-Index0-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta641-Index1-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta641-Index2-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta641-RangeIndex-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_0-Index0-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_0-Index1-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_0-Index2-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_0-RangeIndex-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_1-Index0-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_1-Index1-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_1-Index2-array]", - "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_1-RangeIndex-array]", - "tests/arithmetic/test_object.py::TestObjectComparisons::test_object_comparisons[True]", - "tests/arithmetic/test_object.py::test_index_ops_defer_to_unknown_subclasses[datetime]", - "tests/arithmetic/test_object.py::test_index_ops_defer_to_unknown_subclasses[object]", - "tests/arithmetic/test_object.py::test_index_ops_defer_to_unknown_subclasses[period]", - "tests/arithmetic/test_object.py::test_index_ops_defer_to_unknown_subclasses[timedelta]", - "tests/arithmetic/test_period.py::TestPeriodIndexSeriesMethods::test_pi_sub_period", - "tests/arithmetic/test_period.py::TestPeriodIndexSeriesMethods::test_pi_sub_period_nat", - "tests/arithmetic/test_timedelta64.py::TestAddSubNaTMasking::test_tdi_add_overflow", - "tests/arithmetic/test_timedelta64.py::TestTimedelta64ArithmeticUnsorted::test_addition_ops", - "tests/arithmetic/test_timedelta64.py::TestTimedelta64ArithmeticUnsorted::test_dti_tdi_numeric_ops", - "tests/arithmetic/test_timedelta64.py::TestTimedelta64ArithmeticUnsorted::test_subtraction_ops", - "tests/arithmetic/test_timedelta64.py::TestTimedelta64ArithmeticUnsorted::test_subtraction_ops_with_tz[DataFrame]", - "tests/arithmetic/test_timedelta64.py::TestTimedelta64ArithmeticUnsorted::test_subtraction_ops_with_tz[Index]", - "tests/arithmetic/test_timedelta64.py::TestTimedelta64ArithmeticUnsorted::test_subtraction_ops_with_tz[Series]", - "tests/arithmetic/test_timedelta64.py::TestTimedelta64ArithmeticUnsorted::test_subtraction_ops_with_tz[array]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeAddSubOps::test_operators_timedelta64", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeAddSubOps::test_td64arr_add_timedeltalike[timedelta640-array]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeAddSubOps::test_td64arr_add_timedeltalike[timedelta641-array]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeAddSubOps::test_td64arr_sub_timedeltalike[timedelta640-array]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeAddSubOps::test_td64arr_sub_timedeltalike[timedelta641-array]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_div_nat_invalid[DataFrame]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_div_nat_invalid[Series]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_div_tdlike_scalar[timedelta640-array]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_div_tdlike_scalar[timedelta641-array]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_div_tdlike_scalar_with_nat[timedelta640-array]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_div_tdlike_scalar_with_nat[timedelta641-array]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_floordiv_td64arr_with_nat[DataFrame]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_floordiv_td64arr_with_nat[array]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_rmod_tdscalar[array-timedelta640]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_rmod_tdscalar[array-timedelta641]", - "tests/arrays/boolean/test_arithmetic.py::test_div", - "tests/arrays/boolean/test_construction.py::test_coerce_to_array_from_boolean_array", - "tests/arrays/boolean/test_construction.py::test_coerce_to_numpy_array", - "tests/arrays/boolean/test_construction.py::test_to_numpy_copy", - "tests/arrays/boolean/test_reduction.py::test_any_all[values1-False-False-exp_any_noskip1-False]", - "tests/arrays/boolean/test_reduction.py::test_any_all[values2-False-True-exp_any_noskip2-exp_all_noskip2]", - "tests/arrays/boolean/test_reduction.py::test_reductions_return_types[count-False]", - "tests/arrays/boolean/test_reduction.py::test_reductions_return_types[count-True]", - "tests/arrays/categorical/test_analytics.py::TestCategoricalAnalytics::test_searchsorted[False]", - "tests/arrays/categorical/test_analytics.py::TestCategoricalAnalytics::test_searchsorted[None]", - "tests/arrays/categorical/test_analytics.py::TestCategoricalAnalytics::test_searchsorted[True]", - "tests/arrays/categorical/test_api.py::TestCategoricalAPI::test_rename_categories", - "tests/arrays/categorical/test_api.py::TestCategoricalAPI::test_set_categories", - "tests/arrays/categorical/test_api.py::TestPrivateCategoricalAPI::test_codes_immutable", - "tests/arrays/categorical/test_astype.py::TestAstype::test_astype[False]", - "tests/arrays/categorical/test_astype.py::TestAstype::test_astype[True]", - "tests/arrays/categorical/test_astype.py::TestAstype::test_astype_nan_to_int[values0-CategoricalIndex]", - "tests/arrays/categorical/test_astype.py::TestAstype::test_astype_nan_to_int[values1-CategoricalIndex]", - "tests/arrays/categorical/test_constructors.py::TestCategoricalConstructors::test_constructor", - "tests/arrays/categorical/test_constructors.py::TestCategoricalConstructors::test_constructor_preserves_freq", - "tests/arrays/categorical/test_constructors.py::TestCategoricalConstructors::test_from_sequence_copy", - "tests/arrays/categorical/test_indexing.py::TestCategoricalIndexing::test_where_new_category_raises", - "tests/arrays/categorical/test_missing.py::TestCategoricalMissing::test_use_inf_as_na_outside_context[values2-expected2]", - "tests/arrays/categorical/test_replace.py::test_replace_categorical[a-a-result2-None]", - "tests/arrays/categorical/test_replace.py::test_replace_categorical[b-None-result3-Categorical.categories length are different]", - "tests/arrays/categorical/test_replace.py::test_replace_categorical[b-c-result0-Categorical.categories are different]", - "tests/arrays/categorical/test_replace.py::test_replace_categorical_ea_dtype", - "tests/arrays/categorical/test_replace.py::test_replace_categorical_series[to_replace11-value11-expected11-False]", - "tests/arrays/categorical/test_replace.py::test_replace_categorical_series[to_replace6-4-expected6-False]", - "tests/arrays/categorical/test_replace.py::test_replace_categorical_series[to_replace7-5-expected7-False]", - "tests/arrays/categorical/test_sorting.py::TestCategoricalSort::test_sort_values", - "tests/arrays/categorical/test_sorting.py::TestCategoricalSort::test_sort_values_na_position", - "tests/arrays/datetimes/test_constructors.py::TestDatetimeArrayConstructor::test_copy", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_empty[ms-Europe/Berlin]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_empty[ns-Asia/Kolkata]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_empty[ns-UTC]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_empty[s-UTC]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_empty[us-US/Eastern]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_integers", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[ms-ms-UTC-Europe/Berlin-data1]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[ms-us-US/Eastern-UTC-data6]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[ns-ns-US/Central-Asia/Kolkata-data3]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[ns-s-UTC-UTC-data4]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[s-ns-US/Central-Asia/Kolkata-data7]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[s-s-UTC-UTC-data0]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[us-ms-UTC-Europe/Berlin-data5]", - "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[us-us-US/Eastern-UTC-data2]", - "tests/arrays/floating/test_astype.py::test_astype_copy", - "tests/arrays/floating/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Float32Dtype]", - "tests/arrays/floating/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Float64Dtype]", - "tests/arrays/floating/test_construction.py::test_floating_array_constructor_copy", - "tests/arrays/floating/test_function.py::test_ufuncs_single[sign]", - "tests/arrays/floating/test_function.py::test_value_counts_empty", - "tests/arrays/floating/test_to_numpy.py::test_to_numpy_copy", - "tests/arrays/floating/test_to_numpy.py::test_to_numpy_string[Float32Dtype-series]", - "tests/arrays/floating/test_to_numpy.py::test_to_numpy_string[Float64Dtype-series]", - "tests/arrays/integer/test_arithmetic.py::test_values_multiplying_large_series_by_NA", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_scalar[ge-UInt64Dtype--1]", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_scalar[gt-UInt64Dtype--1]", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_scalar[le-UInt64Dtype--1]", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_scalar[lt-UInt64Dtype--1]", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Int16Dtype]", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Int32Dtype]", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Int64Dtype]", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Int8Dtype]", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[UInt16Dtype]", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[UInt32Dtype]", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[UInt64Dtype]", - "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[UInt8Dtype]", - "tests/arrays/integer/test_construction.py::test_integer_array_constructor_copy", - "tests/arrays/integer/test_dtypes.py::test_astype_copy", - "tests/arrays/integer/test_function.py::test_ufuncs_single_int[sign]", - "tests/arrays/integer/test_function.py::test_value_counts_empty", - "tests/arrays/interval/test_interval_pyarrow.py::test_arrow_array", - "tests/arrays/interval/test_interval_pyarrow.py::test_arrow_array_missing", - "tests/arrays/interval/test_interval_pyarrow.py::test_from_arrow_from_raw_struct_array", - "tests/arrays/masked/test_arithmetic.py::test_frame[boolean-__floordiv__]", - "tests/arrays/masked/test_arithmetic.py::test_frame[boolean-__pow__]", - "tests/arrays/masked/test_arithmetic.py::test_frame[boolean-__rfloordiv__]", - "tests/arrays/masked/test_arithmetic.py::test_frame[boolean-__rpow__]", - "tests/arrays/masked/test_arithmetic.py::test_frame[boolean-__rtruediv__]", - "tests/arrays/masked/test_arithmetic.py::test_series[boolean-__floordiv__]", - "tests/arrays/masked/test_arithmetic.py::test_series[boolean-__pow__]", - "tests/arrays/masked/test_arithmetic.py::test_series[boolean-__rfloordiv__]", - "tests/arrays/masked/test_arithmetic.py::test_series[boolean-__rpow__]", - "tests/arrays/masked/test_arithmetic.py::test_series[boolean-__rtruediv__]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Float32]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Float64]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Int16]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Int32]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Int64]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Int8]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[UInt16]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[UInt32]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[UInt64]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[UInt8]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[boolean]", - "tests/arrays/masked/test_arrow_compat.py::test_arrow_from_arrow_uint", - "tests/arrays/masked/test_arrow_compat.py::test_dataframe_from_arrow_types_mapper", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Float32-arr0]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Float32-arr1]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Float64-arr0]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Float64-arr1]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Int16-arr0]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Int16-arr1]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Int32-arr0]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Int32-arr1]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Int64-arr0]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Int64-arr1]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Int8-arr0]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[Int8-arr1]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[UInt16-arr0]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[UInt16-arr1]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[UInt32-arr0]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[UInt32-arr1]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[UInt64-arr0]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[UInt64-arr1]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[UInt8-arr0]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[UInt8-arr1]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[boolean-arr0]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_null[boolean-arr1]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Float32]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Float64]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Int16]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Int32]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Int64]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Int8]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[UInt16]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[UInt32]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[UInt64]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[UInt8]", - "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[boolean]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_float[Float32-1.0]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_float[Float32-1]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_float[Float64-1.0]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_float[Float64-1]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[Int16-1]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[Int32-1]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[Int64-1]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[Int8-1]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[UInt16-1]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[UInt32-1]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[UInt64-1]", - "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[UInt8-1]", - "tests/arrays/numpy_/test_numpy.py::test_factorize_unsigned", - "tests/arrays/numpy_/test_numpy.py::test_np_max_nested_tuples", - "tests/arrays/numpy_/test_numpy.py::test_np_reduce_2d", - "tests/arrays/numpy_/test_numpy.py::test_setitem_preserves_views", - "tests/arrays/numpy_/test_numpy.py::test_to_numpy", - "tests/arrays/numpy_/test_numpy.py::test_ufunc", - "tests/arrays/numpy_/test_numpy.py::test_ufunc_unary[absolute]", - "tests/arrays/numpy_/test_numpy.py::test_ufunc_unary[negative]", - "tests/arrays/numpy_/test_numpy.py::test_ufunc_unary[positive]", - "tests/arrays/period/test_arrow_compat.py::test_arrow_array_missing", - "tests/arrays/period/test_astype.py::test_astype_copies", - "tests/arrays/sparse/test_accessor.py::TestFrameAccessor::test_from_spmatrix_columns[columns1]", - "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[add-a0-b0]", - "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[add-a1-b1]", - "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[add-a2-b2]", - "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[add-a3-b3]", - "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[add-a4-b4]", - "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[greater-a0-b0]", - "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[greater-a1-b1]", - "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[greater-a2-b2]", - "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[greater-a3-b3]", - "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[greater-a4-b4]", - "tests/arrays/sparse/test_arithmetics.py::test_ufuncs[arr0-absolute]", - "tests/arrays/sparse/test_arithmetics.py::test_ufuncs[arr0-exp]", - "tests/arrays/sparse/test_arithmetics.py::test_ufuncs[arr1-absolute]", - "tests/arrays/sparse/test_arithmetics.py::test_ufuncs[arr1-exp]", - "tests/arrays/sparse/test_array.py::TestSparseArrayAnalytics::test_modf[0.0]", - "tests/arrays/sparse/test_array.py::TestSparseArrayAnalytics::test_modf[nan]", - "tests/arrays/sparse/test_array.py::TestSparseArrayAnalytics::test_ufunc", - "tests/arrays/sparse/test_array.py::TestSparseArrayAnalytics::test_ufunc_args", - "tests/arrays/sparse/test_array.py::test_array_interface", - "tests/arrays/sparse/test_constructors.py::TestConstructors::test_constructor_copy", - "tests/arrays/string_/test_string.py::test_arrow_array[pyarrow]", - "tests/arrays/string_/test_string.py::test_arrow_array[pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_arrow_array[string=str[pyarrow]]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[pyarrow-pyarrow]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[pyarrow-pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[pyarrow-python]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[pyarrow_numpy-pyarrow]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[pyarrow_numpy-pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[pyarrow_numpy-python]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[python-pyarrow]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[python-pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[python-python]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[string=str[pyarrow]-pyarrow]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[string=str[pyarrow]-python]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[string=str[python]-pyarrow]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[string=str[python]-python]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[string=string[pyarrow]-pyarrow]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[string=string[pyarrow]-python]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[string=string[python]-pyarrow]", - "tests/arrays/string_/test_string.py::test_arrow_load_from_zero_chunks[string=string[python]-python]", - "tests/arrays/string_/test_string.py::test_arrow_roundtrip[pyarrow-pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_arrow_roundtrip[pyarrow_numpy-pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_arrow_roundtrip[python-pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_astype_float[pyarrow-Float32]", - "tests/arrays/string_/test_string.py::test_astype_float[pyarrow-Float64]", - "tests/arrays/string_/test_string.py::test_astype_float[pyarrow_numpy-Float32]", - "tests/arrays/string_/test_string.py::test_astype_float[pyarrow_numpy-Float64]", - "tests/arrays/string_/test_string.py::test_astype_float[python-Float32]", - "tests/arrays/string_/test_string.py::test_astype_float[python-Float64]", - "tests/arrays/string_/test_string.py::test_astype_roundtrip[pyarrow]", - "tests/arrays/string_/test_string.py::test_astype_roundtrip[pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_astype_roundtrip[python]", - "tests/arrays/string_/test_string.py::test_isin[pyarrow]", - "tests/arrays/string_/test_string.py::test_isin[pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_isin[python]", - "tests/arrays/string_/test_string.py::test_isin[string=str[pyarrow]]", - "tests/arrays/string_/test_string.py::test_isin[string=str[python]]", - "tests/arrays/string_/test_string.py::test_isin[string=string[pyarrow]]", - "tests/arrays/string_/test_string.py::test_isin[string=string[python]]", - "tests/arrays/string_/test_string.py::test_min_max[pyarrow-False-max]", - "tests/arrays/string_/test_string.py::test_min_max[pyarrow-False-min]", - "tests/arrays/string_/test_string.py::test_min_max[pyarrow_numpy-False-max]", - "tests/arrays/string_/test_string.py::test_min_max[pyarrow_numpy-False-min]", - "tests/arrays/string_/test_string.py::test_min_max[python-False-max]", - "tests/arrays/string_/test_string.py::test_min_max[python-False-min]", - "tests/arrays/string_/test_string.py::test_min_max[string=str[pyarrow]-False-max]", - "tests/arrays/string_/test_string.py::test_min_max[string=str[pyarrow]-False-min]", - "tests/arrays/string_/test_string.py::test_min_max[string=str[python]-False-max]", - "tests/arrays/string_/test_string.py::test_min_max[string=str[python]-False-min]", - "tests/arrays/string_/test_string.py::test_min_max[string=string[pyarrow]-False-max]", - "tests/arrays/string_/test_string.py::test_min_max[string=string[pyarrow]-False-min]", - "tests/arrays/string_/test_string.py::test_min_max[string=string[python]-False-max]", - "tests/arrays/string_/test_string.py::test_min_max[string=string[python]-False-min]", - "tests/arrays/string_/test_string.py::test_repr[pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_repr[string=str[pyarrow]]", - "tests/arrays/string_/test_string.py::test_repr[string=str[python]]", - "tests/arrays/string_/test_string.py::test_to_numpy_returns_pdna_default[pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_value_counts_with_normalize[pyarrow]", - "tests/arrays/string_/test_string.py::test_value_counts_with_normalize[python]", - "tests/arrays/test_array.py::test_array_inference[data7-expected7]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['+01:15'-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['+01:15'-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['+01:15'-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['+01:15'-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['+01:15'-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['+01:15'-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['-02:15'-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['-02:15'-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['-02:15'-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['-02:15'-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['-02:15'-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['-02:15'-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['Asia/Tokyo'-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['Asia/Tokyo'-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['Asia/Tokyo'-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['Asia/Tokyo'-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['Asia/Tokyo'-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['Asia/Tokyo'-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['US/Eastern'-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['US/Eastern'-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['US/Eastern'-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['US/Eastern'-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['US/Eastern'-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['US/Eastern'-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC'-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC'-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC'-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC'-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC'-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC'-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC+01:15'-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC+01:15'-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC+01:15'-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC+01:15'-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC+01:15'-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC+01:15'-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC-02:15'-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC-02:15'-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC-02:15'-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC-02:15'-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC-02:15'-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['UTC-02:15'-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/Asia/Singapore'-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/Asia/Singapore'-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/Asia/Singapore'-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/Asia/Singapore'-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/Asia/Singapore'-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/Asia/Singapore'-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/US/Pacific'-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/US/Pacific'-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/US/Pacific'-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/US/Pacific'-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/US/Pacific'-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype['dateutil/US/Pacific'-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[None-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[None-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[None-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[None-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[None-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[None-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(seconds=3600))-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(seconds=3600))-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(seconds=3600))-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(seconds=3600))-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(seconds=3600))-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone(datetime.timedelta(seconds=3600))-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone.utc-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone.utc-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone.utc-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone.utc-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone.utc-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[datetime.timezone.utc-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(-300)-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(-300)-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(-300)-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(-300)-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(-300)-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(-300)-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(300)-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(300)-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(300)-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(300)-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(300)-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[pytz.FixedOffset(300)-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzlocal()-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzlocal()-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzlocal()-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzlocal()-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzlocal()-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzlocal()-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzutc()-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzutc()-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzutc()-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzutc()-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzutc()-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[tzutc()-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='UTC')-B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='UTC')-D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='UTC')-ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='UTC')-QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='UTC')-W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_i8_dtype[zoneinfo.ZoneInfo(key='UTC')-YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[B]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[D]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[ME]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[QE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[W]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[YE]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-B-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-B-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-B-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-B-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-B-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-B-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-D-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-D-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-D-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-D-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-D-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-D-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-ME-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-ME-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-ME-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-ME-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-ME-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-ME-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-QE-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-QE-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-QE-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-QE-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-QE-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-QE-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-W-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-W-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-W-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-W-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-W-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-W-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-YE-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-YE-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-YE-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-YE-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-YE-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='US/Pacific')-YE-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-B-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-B-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-B-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-B-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-B-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-B-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-D-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-D-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-D-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-D-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-D-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-D-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-ME-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-ME-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-ME-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-ME-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-ME-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-ME-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-QE-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-QE-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-QE-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-QE-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-QE-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-QE-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-W-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-W-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-W-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-W-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-W-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-W-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-YE-False-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-YE-False-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-YE-None-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-YE-None-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-YE-True-True-False]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_compare_categorical_dtype[zoneinfo.ZoneInfo(key='UTC')-YE-True-True-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_from_array_keeps_base", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-B-pyarrow_numpy-series]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-D-pyarrow_numpy-series]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-ME-pyarrow_numpy-series]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-QE-pyarrow_numpy-series]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-W-pyarrow_numpy-series]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-YE-pyarrow_numpy-series]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-B-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-D-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-ME-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-QE-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-W-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-YE-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-B-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-D-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-ME-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-QE-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-W-True]", - "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-YE-True]", - "tests/arrays/test_datetimelike.py::TestPeriodArray::test_array_interface[B]", - "tests/arrays/test_datetimelike.py::TestPeriodArray::test_array_interface[D]", - "tests/arrays/test_datetimelike.py::TestPeriodArray::test_array_interface[ME]", - "tests/arrays/test_datetimelike.py::TestPeriodArray::test_array_interface[QE]", - "tests/arrays/test_datetimelike.py::TestPeriodArray::test_array_interface[W]", - "tests/arrays/test_datetimelike.py::TestPeriodArray::test_array_interface[YE]", - "tests/arrays/test_datetimelike.py::TestTimedeltaArray::test_array_interface", - "tests/arrays/test_datetimelike.py::TestTimedeltaArray::test_searchsorted_castable_strings[pyarrow_numpy-series]", - "tests/arrays/test_datetimelike.py::test_searchsorted_datetimelike_with_listlike_invalid_dtype[arg0-values1]", - "tests/arrays/test_datetimes.py::TestDatetimeArray::test_array_interface", - "tests/arrays/test_datetimes.py::TestDatetimeArray::test_astype_to_same", - "tests/arrays/test_period.py::test_registered", - "tests/arrays/timedeltas/test_constructors.py::TestTimedeltaArrayConstructor::test_copy", - "tests/arrays/timedeltas/test_reductions.py::TestReductions::test_reductions_empty[False-max]", - "tests/arrays/timedeltas/test_reductions.py::TestReductions::test_reductions_empty[False-min]", - "tests/arrays/timedeltas/test_reductions.py::TestReductions::test_reductions_empty[True-max]", - "tests/arrays/timedeltas/test_reductions.py::TestReductions::test_reductions_empty[True-min]", - "tests/arrays/timedeltas/test_reductions.py::TestReductions::test_std[add0]", - "tests/arrays/timedeltas/test_reductions.py::TestReductions::test_std[add1]", - "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[DataFrame-array-datetime64[D]]", - "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[DataFrame-dict-datetime64[D]]", - "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[DataFrame-dict-object-datetime.datetime]", - "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[Index-datetime64[D]]", - "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[Series-datetime64[D]]", - "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[Series-object-datetime.datetime]", - "tests/base/test_conversion.py::test_array[index-arr0-_codes]", - "tests/base/test_conversion.py::test_array[index-arr1-_ndarray]", - "tests/base/test_conversion.py::test_array[index-arr2-_data]", - "tests/base/test_conversion.py::test_array[index-arr3-_left]", - "tests/base/test_conversion.py::test_array[index-arr4-_sparse_values]", - "tests/base/test_conversion.py::test_array[index-arr5-_ndarray]", - "tests/base/test_conversion.py::test_array[index-arr6-_ndarray]", - "tests/base/test_conversion.py::test_array[series-arr0-_codes]", - "tests/base/test_conversion.py::test_array[series-arr1-_ndarray]", - "tests/base/test_conversion.py::test_array[series-arr2-_data]", - "tests/base/test_conversion.py::test_array[series-arr3-_left]", - "tests/base/test_conversion.py::test_array[series-arr4-_sparse_values]", - "tests/base/test_conversion.py::test_array[series-arr5-_ndarray]", - "tests/base/test_conversion.py::test_array[series-arr6-_ndarray]", - "tests/base/test_conversion.py::test_to_numpy[array-arr0-expected0-True]", - "tests/base/test_conversion.py::test_to_numpy[array-arr1-expected1-False]", - "tests/base/test_conversion.py::test_to_numpy[array-arr1-expected1]", - "tests/base/test_conversion.py::test_to_numpy[array-arr2-expected2-False]", - "tests/base/test_conversion.py::test_to_numpy[array-arr3-expected3-False]", - "tests/base/test_conversion.py::test_to_numpy[array-arr3-expected3]", - "tests/base/test_conversion.py::test_to_numpy[array-arr4-expected4-False]", - "tests/base/test_conversion.py::test_to_numpy[array-arr5-expected5-False]", - "tests/base/test_conversion.py::test_to_numpy[array-arr6-expected6-True]", - "tests/base/test_conversion.py::test_to_numpy[array-arr6-expected6]", - "tests/base/test_conversion.py::test_to_numpy[array-arr7-expected7-False]", - "tests/base/test_conversion.py::test_to_numpy[array-arr8-expected8-True]", - "tests/base/test_conversion.py::test_to_numpy[array-arr8-expected8]", - "tests/base/test_conversion.py::test_to_numpy[array-arr9-expected9-False]", - "tests/base/test_conversion.py::test_to_numpy_copy[arr0-False]", - "tests/base/test_conversion.py::test_to_numpy_copy[arr0-True]", - "tests/base/test_conversion.py::test_to_numpy_copy[arr1-False]", - "tests/base/test_conversion.py::test_to_numpy_copy[arr1-True]", - "tests/base/test_conversion.py::test_values_consistent[arr0-ndarray-int64]", - "tests/base/test_conversion.py::test_values_consistent[arr1-ndarray-object]", - "tests/base/test_fillna.py::test_fillna[datetime]", - "tests/base/test_fillna.py::test_fillna[multi]", - "tests/base/test_fillna.py::test_fillna[tuples]", - "tests/base/test_misc.py::test_ndarray_compat_properties[multi]", - "tests/base/test_misc.py::test_ndarray_compat_properties[tuples]", - "tests/base/test_unique.py::test_unique[multi]", - "tests/base/test_unique.py::test_unique[tuples]", - "tests/base/test_value_counts.py::test_value_counts[multi]", - "tests/base/test_value_counts.py::test_value_counts[tuples]", - "tests/base/test_value_counts.py::test_value_counts_bins[index]", - "tests/base/test_value_counts.py::test_value_counts_bins[series]", - "tests/computation/test_eval.py::TestAlignment::test_performance_warning_for_poor_alignment[numexpr-pandas]", - "tests/computation/test_eval.py::TestAlignment::test_performance_warning_for_poor_alignment[numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_disallow_python_keywords", - "tests/computation/test_eval.py::TestMath::test_binary_functions[arctan2]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[abs]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[arccos]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[arccosh]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[arcsin]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[arcsinh]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[arctan]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[arctanh]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[ceil]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[cos]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[cosh]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[exp]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[expm1]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[floor]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[log10]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[log1p]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[log]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[sin]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[sinh]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[sqrt]", - "tests/computation/test_eval.py::TestMath::test_unary_functions[tanh]", - "tests/computation/test_eval.py::TestOperations::test_query_inplace", - "tests/computation/test_eval.py::test_eval_no_support_column_name[False]", - "tests/computation/test_eval.py::test_eval_no_support_column_name[True]", - "tests/computation/test_eval.py::test_numexpr_option_respected[False-python]", - "tests/copy_view/index/test_datetimeindex.py::test_index_values", - "tests/copy_view/index/test_index.py::test_assign_index_as_index", - "tests/copy_view/index/test_index.py::test_assign_index_as_series", - "tests/copy_view/index/test_index.py::test_index_from_index", - "tests/copy_view/index/test_index.py::test_index_from_series", - "tests/copy_view/index/test_index.py::test_index_from_series_copy", - "tests/copy_view/index/test_index.py::test_index_to_frame", - "tests/copy_view/index/test_index.py::test_index_values", - "tests/copy_view/index/test_index.py::test_set_index_series", - "tests/copy_view/test_array.py::test_dataframe_array_ea_dtypes", - "tests/copy_view/test_array.py::test_dataframe_array_string_dtype", - "tests/copy_view/test_array.py::test_dataframe_multiple_numpy_dtypes", - "tests/copy_view/test_array.py::test_dataframe_values[array]", - "tests/copy_view/test_array.py::test_dataframe_values[asarray]", - "tests/copy_view/test_array.py::test_dataframe_values[values]", - "tests/copy_view/test_array.py::test_ravel_read_only[C]", - "tests/copy_view/test_array.py::test_ravel_read_only[F]", - "tests/copy_view/test_array.py::test_series_array_ea_dtypes", - "tests/copy_view/test_array.py::test_series_to_numpy", - "tests/copy_view/test_array.py::test_series_values[array]", - "tests/copy_view/test_array.py::test_series_values[asarray]", - "tests/copy_view/test_array.py::test_series_values[values]", - "tests/copy_view/test_astype.py::test_astype_arrow_timestamp", - "tests/copy_view/test_astype.py::test_astype_avoids_copy[Int64-Int64]", - "tests/copy_view/test_astype.py::test_astype_avoids_copy[Int64-int64]", - "tests/copy_view/test_astype.py::test_astype_avoids_copy[int64-Int64]", - "tests/copy_view/test_astype.py::test_astype_avoids_copy[int64-int64]", - "tests/copy_view/test_astype.py::test_astype_avoids_copy[int64[pyarrow]-Int64]", - "tests/copy_view/test_astype.py::test_astype_avoids_copy[int64[pyarrow]-int64]", - "tests/copy_view/test_astype.py::test_astype_dict_dtypes", - "tests/copy_view/test_astype.py::test_astype_numpy_to_ea", - "tests/copy_view/test_astype.py::test_astype_single_dtype", - "tests/copy_view/test_astype.py::test_astype_string_and_object[object-string]", - "tests/copy_view/test_astype.py::test_astype_string_and_object[string-object]", - "tests/copy_view/test_astype.py::test_astype_string_and_object_update_original[object-string]", - "tests/copy_view/test_astype.py::test_astype_string_and_object_update_original[string-object]", - "tests/copy_view/test_astype.py::test_convert_dtypes", - "tests/copy_view/test_astype.py::test_convert_dtypes_infer_objects", - "tests/copy_view/test_clip.py::test_clip_chained_inplace", - "tests/copy_view/test_clip.py::test_clip_inplace", - "tests/copy_view/test_clip.py::test_clip_inplace_reference_no_op", - "tests/copy_view/test_clip.py::test_clip_no_op", - "tests/copy_view/test_constructors.py::test_dataframe_constructor_mgr_or_df[None-False]", - "tests/copy_view/test_constructors.py::test_dataframe_constructor_mgr_or_df[None-True]", - "tests/copy_view/test_constructors.py::test_dataframe_constructor_mgr_or_df[columns1-False]", - "tests/copy_view/test_constructors.py::test_dataframe_constructor_mgr_or_df[columns1-True]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-None-Int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-None-None]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-None-int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-index1-Int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-index1-None]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-index1-int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-None-Int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-None-None]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-None-int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-index1-Int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-index1-None]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-index1-int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns2-None-Int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns2-None-int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns2-index1-Int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns2-index1-int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series_with_dtype[None]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series_with_dtype[index1]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series_with_reindex[None]", - "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series_with_reindex[int64]", - "tests/copy_view/test_constructors.py::test_dataframe_from_records_with_dataframe", - "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[data0-None-Index]", - "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[data0-None-Series]", - "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[data1-int64-Index]", - "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[data1-int64-Series]", - "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[data2-None-Index]", - "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[data2-None-Series]", - "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[data2-object-Index]", - "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[data2-object-Series]", - "tests/copy_view/test_constructors.py::test_frame_from_dict_of_index", - "tests/copy_view/test_constructors.py::test_frame_from_numpy_array[False]", - "tests/copy_view/test_constructors.py::test_series_from_index[idx0]", - "tests/copy_view/test_constructors.py::test_series_from_index[idx1]", - "tests/copy_view/test_constructors.py::test_series_from_index[idx3]", - "tests/copy_view/test_constructors.py::test_series_from_index_different_dtypes", - "tests/copy_view/test_constructors.py::test_series_from_series[None]", - "tests/copy_view/test_constructors.py::test_series_from_series[int64]", - "tests/copy_view/test_constructors.py::test_series_from_series_with_reindex", - "tests/copy_view/test_core_functionalities.py::test_assigning_to_same_variable_removes_references", - "tests/copy_view/test_core_functionalities.py::test_delete", - "tests/copy_view/test_core_functionalities.py::test_delete_reference", - "tests/copy_view/test_core_functionalities.py::test_setitem_dont_track_unnecessary_references", - "tests/copy_view/test_functions.py::test_concat_copy_keyword[False]", - "tests/copy_view/test_functions.py::test_concat_copy_keyword[None]", - "tests/copy_view/test_functions.py::test_concat_copy_keyword[True]", - "tests/copy_view/test_functions.py::test_concat_frames", - "tests/copy_view/test_functions.py::test_concat_frames_chained", - "tests/copy_view/test_functions.py::test_concat_frames_updating_input", - "tests/copy_view/test_functions.py::test_concat_mixed_series_frame", - "tests/copy_view/test_functions.py::test_concat_series", - "tests/copy_view/test_functions.py::test_concat_series_chained", - "tests/copy_view/test_functions.py::test_concat_series_updating_input", - "tests/copy_view/test_functions.py::test_join_multiple_dataframes_on_key", - "tests/copy_view/test_functions.py::test_join_on_key[object]", - "tests/copy_view/test_functions.py::test_join_on_key[str]", - "tests/copy_view/test_functions.py::test_merge_copy_keyword[False]", - "tests/copy_view/test_functions.py::test_merge_copy_keyword[None]", - "tests/copy_view/test_functions.py::test_merge_copy_keyword[True]", - "tests/copy_view/test_functions.py::test_merge_on_index", - "tests/copy_view/test_functions.py::test_merge_on_key[0]", - "tests/copy_view/test_functions.py::test_merge_on_key[1]", - "tests/copy_view/test_functions.py::test_merge_on_key_enlarging_one[-left]", - "tests/copy_view/test_functions.py::test_merge_on_key_enlarging_one[-right]", - "tests/copy_view/test_indexing.py::test_column_as_series[nullable]", - "tests/copy_view/test_indexing.py::test_column_as_series[numpy]", - "tests/copy_view/test_indexing.py::test_column_as_series_no_item_cache[nullable-getitem]", - "tests/copy_view/test_indexing.py::test_column_as_series_no_item_cache[numpy-getitem]", - "tests/copy_view/test_indexing.py::test_dataframe_add_column_from_series[nullable]", - "tests/copy_view/test_indexing.py::test_dataframe_add_column_from_series[numpy]", - "tests/copy_view/test_indexing.py::test_del_frame[nullable]", - "tests/copy_view/test_indexing.py::test_del_frame[numpy]", - "tests/copy_view/test_indexing.py::test_del_series[nullable]", - "tests/copy_view/test_indexing.py::test_del_series[numpy]", - "tests/copy_view/test_indexing.py::test_getitem_midx_slice", - "tests/copy_view/test_indexing.py::test_loc_enlarging_with_dataframe", - "tests/copy_view/test_indexing.py::test_midx_read_only_bool_indexer", - "tests/copy_view/test_indexing.py::test_series_getitem_ellipsis", - "tests/copy_view/test_indexing.py::test_series_getitem_slice[nullable]", - "tests/copy_view/test_indexing.py::test_series_getitem_slice[numpy]", - "tests/copy_view/test_indexing.py::test_series_midx_slice", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-iloc-indexer1-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-iloc-indexer1-a]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-iloc-indexer3-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-iloc-indexer3-a]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-iloc-indexer5-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-iloc-indexer5-a]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-loc-indexer0-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-loc-indexer0-a]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-loc-indexer2-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-loc-indexer2-a]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-loc-indexer4-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-loc-indexer4-a]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-iloc-indexer1-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-iloc-indexer1-a]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-iloc-indexer3-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-iloc-indexer3-a]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-iloc-indexer5-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-iloc-indexer5-a]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-loc-indexer0-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-loc-indexer0-a]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-loc-indexer2-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-loc-indexer2-a]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-loc-indexer4-100]", - "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-loc-indexer4-a]", - "tests/copy_view/test_indexing.py::test_subset_column_selection[nullable]", - "tests/copy_view/test_indexing.py::test_subset_column_selection[numpy]", - "tests/copy_view/test_indexing.py::test_subset_column_selection_modify_parent[nullable]", - "tests/copy_view/test_indexing.py::test_subset_column_selection_modify_parent[numpy]", - "tests/copy_view/test_indexing.py::test_subset_column_slice[nullable-mixed-block]", - "tests/copy_view/test_indexing.py::test_subset_column_slice[nullable-single-block]", - "tests/copy_view/test_indexing.py::test_subset_column_slice[numpy-mixed-block]", - "tests/copy_view/test_indexing.py::test_subset_column_slice[numpy-single-block]", - "tests/copy_view/test_indexing.py::test_subset_row_slice[nullable]", - "tests/copy_view/test_indexing.py::test_subset_row_slice[numpy]", - "tests/copy_view/test_interp_fillna.py::test_fillna", - "tests/copy_view/test_interp_fillna.py::test_fillna_chained_assignment", - "tests/copy_view/test_interp_fillna.py::test_fillna_dict", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Float32]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Float64]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Int16]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Int32]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Int64]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Int8]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[UInt16]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[UInt32]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[UInt64]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[UInt8]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[double[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[float[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[int16[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[int32[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[int64[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[int8[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[uint16[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[uint32[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[uint64[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[uint8[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace[False]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace[None]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Float32]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Float64]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Int16]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Int32]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Int64]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Int8]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[UInt16]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[UInt32]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[UInt64]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[UInt8]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[double[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[float[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[int16[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[int32[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[int64[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[int8[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[uint16[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[uint32[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[uint64[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[uint8[pyarrow]]", - "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_reference", - "tests/copy_view/test_interp_fillna.py::test_fillna_series_empty_arg", - "tests/copy_view/test_interp_fillna.py::test_fillna_series_empty_arg_inplace", - "tests/copy_view/test_interp_fillna.py::test_interp_fill_functions[bfill]", - "tests/copy_view/test_interp_fillna.py::test_interp_fill_functions[ffill]", - "tests/copy_view/test_interp_fillna.py::test_interpolate_chained_assignment[bfill]", - "tests/copy_view/test_interp_fillna.py::test_interpolate_chained_assignment[ffill]", - "tests/copy_view/test_interp_fillna.py::test_interpolate_cleaned_fill_method", - "tests/copy_view/test_interp_fillna.py::test_interpolate_downcast", - "tests/copy_view/test_interp_fillna.py::test_interpolate_inplace_no_reference_no_copy[vals0]", - "tests/copy_view/test_interp_fillna.py::test_interpolate_inplace_no_reference_no_copy[vals1]", - "tests/copy_view/test_interp_fillna.py::test_interpolate_no_op[linear]", - "tests/copy_view/test_interp_fillna.py::test_interpolate_no_op[nearest]", - "tests/copy_view/test_interp_fillna.py::test_interpolate_no_op[pad]", - "tests/copy_view/test_interp_fillna.py::test_interpolate_object_convert_no_op", - "tests/copy_view/test_methods.py::test_add_prefix", - "tests/copy_view/test_methods.py::test_add_suffix", - "tests/copy_view/test_methods.py::test_align_copy_false", - "tests/copy_view/test_methods.py::test_align_frame[0]", - "tests/copy_view/test_methods.py::test_align_frame[1]", - "tests/copy_view/test_methods.py::test_align_frame[2]", - "tests/copy_view/test_methods.py::test_align_series", - "tests/copy_view/test_methods.py::test_align_with_series_copy_false", - "tests/copy_view/test_methods.py::test_assign_drop_duplicates[assign]", - "tests/copy_view/test_methods.py::test_assign_drop_duplicates[drop_duplicates]", - "tests/copy_view/test_methods.py::test_between_time[obj0]", - "tests/copy_view/test_methods.py::test_between_time[obj1]", - "tests/copy_view/test_methods.py::test_chained_methods[reset_index]", - "tests/copy_view/test_methods.py::test_chained_where_mask[mask]", - "tests/copy_view/test_methods.py::test_chained_where_mask[where]", - "tests/copy_view/test_methods.py::test_copy", - "tests/copy_view/test_methods.py::test_copy_shallow", - "tests/copy_view/test_methods.py::test_drop_on_column", - "tests/copy_view/test_methods.py::test_droplevel", - "tests/copy_view/test_methods.py::test_dropna[0-5.5]", - "tests/copy_view/test_methods.py::test_dropna[1-nan]", - "tests/copy_view/test_methods.py::test_dropna_series[5.5]", - "tests/copy_view/test_methods.py::test_dropna_series[5]", - "tests/copy_view/test_methods.py::test_eval", - "tests/copy_view/test_methods.py::test_eval_inplace", - "tests/copy_view/test_methods.py::test_filter[filter_kwargs0]", - "tests/copy_view/test_methods.py::test_filter[filter_kwargs1]", - "tests/copy_view/test_methods.py::test_filter[filter_kwargs2]", - "tests/copy_view/test_methods.py::test_frame_set_axis", - "tests/copy_view/test_methods.py::test_get[a]", - "tests/copy_view/test_methods.py::test_get[key1]", - "tests/copy_view/test_methods.py::test_groupby_column_index_in_references", - "tests/copy_view/test_methods.py::test_infer_objects", - "tests/copy_view/test_methods.py::test_insert_series", - "tests/copy_view/test_methods.py::test_isetitem", - "tests/copy_view/test_methods.py::test_isetitem_frame", - "tests/copy_view/test_methods.py::test_isetitem_series[mixed-block]", - "tests/copy_view/test_methods.py::test_isetitem_series[single-block]", - "tests/copy_view/test_methods.py::test_items", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[align-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[align-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[align-True]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[astype-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[astype-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[astype-True]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[infer_objects-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[infer_objects-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[infer_objects-True]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex-True]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex_like-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex_like-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex_like-True]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename-True]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis0-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis0-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis0-True]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis1-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis1-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis1-True]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_axis-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_axis-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_axis-True]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_flags-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_flags-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_flags-True]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[swapaxes-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[swapaxes-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[swapaxes-True]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[truncate-False]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[truncate-None]", - "tests/copy_view/test_methods.py::test_methods_copy_keyword[truncate-True]", - "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[astype-False]", - "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[astype-None]", - "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[astype-True]", - "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[reindex-False]", - "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[reindex-None]", - "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[reindex-True]", - "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[rename-False]", - "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[rename-None]", - "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[rename-True]", - "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[truncate-True]", - "tests/copy_view/test_methods.py::test_pipe", - "tests/copy_view/test_methods.py::test_pipe_modify_df", - "tests/copy_view/test_methods.py::test_pop", - "tests/copy_view/test_methods.py::test_putmask_aligns_rhs_no_reference[Float64]", - "tests/copy_view/test_methods.py::test_putmask_aligns_rhs_no_reference[float64]", - "tests/copy_view/test_methods.py::test_putmask_dont_copy_some_blocks[5-False-None]", - "tests/copy_view/test_methods.py::test_putmask_dont_copy_some_blocks[5.5-True-FutureWarning]", - "tests/copy_view/test_methods.py::test_putmask_no_reference[Int64]", - "tests/copy_view/test_methods.py::test_putmask_no_reference[int64]", - "tests/copy_view/test_methods.py::test_reindex_columns", - "tests/copy_view/test_methods.py::test_reindex_like", - "tests/copy_view/test_methods.py::test_reindex_rows[copy]", - "tests/copy_view/test_methods.py::test_reindex_rows[identical]", - "tests/copy_view/test_methods.py::test_reindex_rows[values]", - "tests/copy_view/test_methods.py::test_reindex_rows[view]", - "tests/copy_view/test_methods.py::test_rename_axis[kwargs0]", - "tests/copy_view/test_methods.py::test_rename_axis[kwargs1]", - "tests/copy_view/test_methods.py::test_rename_columns", - "tests/copy_view/test_methods.py::test_rename_columns_modify_parent", - "tests/copy_view/test_methods.py::test_reorder_levels", - "tests/copy_view/test_methods.py::test_reset_index", - "tests/copy_view/test_methods.py::test_reset_index_series_drop[index0]", - "tests/copy_view/test_methods.py::test_reset_index_series_drop[index1]", - "tests/copy_view/test_methods.py::test_round[-1]", - "tests/copy_view/test_methods.py::test_round[0]", - "tests/copy_view/test_methods.py::test_round[1]", - "tests/copy_view/test_methods.py::test_select_dtypes", - "tests/copy_view/test_methods.py::test_series_reorder_levels", - "tests/copy_view/test_methods.py::test_set_index", - "tests/copy_view/test_methods.py::test_shift_columns", - "tests/copy_view/test_methods.py::test_shift_no_op", - "tests/copy_view/test_methods.py::test_sort_index", - "tests/copy_view/test_methods.py::test_sort_values[obj0-kwargs0]", - "tests/copy_view/test_methods.py::test_sort_values[obj1-kwargs1]", - "tests/copy_view/test_methods.py::test_sort_values_inplace[obj0-kwargs0]", - "tests/copy_view/test_methods.py::test_sort_values_inplace[obj1-kwargs1]", - "tests/copy_view/test_methods.py::test_squeeze", - "tests/copy_view/test_methods.py::test_swapaxes_noop[columns]", - "tests/copy_view/test_methods.py::test_swapaxes_noop[index]", - "tests/copy_view/test_methods.py::test_swapaxes_single_block", - "tests/copy_view/test_methods.py::test_swaplevel[obj0]", - "tests/copy_view/test_methods.py::test_swaplevel[obj1]", - "tests/copy_view/test_methods.py::test_take[obj0]", - "tests/copy_view/test_methods.py::test_take[obj1]", - "tests/copy_view/test_methods.py::test_to_frame", - "tests/copy_view/test_methods.py::test_to_period[obj0]", - "tests/copy_view/test_methods.py::test_to_period[obj1]", - "tests/copy_view/test_methods.py::test_to_timestamp[obj0]", - "tests/copy_view/test_methods.py::test_to_timestamp[obj1]", - "tests/copy_view/test_methods.py::test_transpose[False]", - "tests/copy_view/test_methods.py::test_transpose[True]", - "tests/copy_view/test_methods.py::test_transpose_copy_keyword[False]", - "tests/copy_view/test_methods.py::test_transpose_copy_keyword[None]", - "tests/copy_view/test_methods.py::test_transpose_copy_keyword[True]", - "tests/copy_view/test_methods.py::test_truncate[kwargs0]", - "tests/copy_view/test_methods.py::test_truncate[kwargs1]", - "tests/copy_view/test_methods.py::test_update_chained_assignment", - "tests/copy_view/test_methods.py::test_update_frame", - "tests/copy_view/test_methods.py::test_where_mask_noop[0-Int64]", - "tests/copy_view/test_methods.py::test_where_mask_noop[0-int64]", - "tests/copy_view/test_methods.py::test_where_mask_noop[1-Int64]", - "tests/copy_view/test_methods.py::test_where_mask_noop[1-int64]", - "tests/copy_view/test_methods.py::test_where_mask_noop_on_single_column[0-Int64-10]", - "tests/copy_view/test_methods.py::test_where_mask_noop_on_single_column[0-int64-10.5]", - "tests/copy_view/test_methods.py::test_where_mask_noop_on_single_column[1-Int64-10]", - "tests/copy_view/test_methods.py::test_where_mask_noop_on_single_column[1-int64-10.5]", - "tests/copy_view/test_methods.py::test_xs[mixed-block-1-a]", - "tests/copy_view/test_methods.py::test_xs[single-block-0-0]", - "tests/copy_view/test_methods.py::test_xs[single-block-1-a]", - "tests/copy_view/test_methods.py::test_xs_multiindex[l1-0-0]", - "tests/copy_view/test_methods.py::test_xs_multiindex[l1-0-1]", - "tests/copy_view/test_replace.py::test_replace[replace_kwargs0]", - "tests/copy_view/test_replace.py::test_replace[replace_kwargs1]", - "tests/copy_view/test_replace.py::test_replace[replace_kwargs2]", - "tests/copy_view/test_replace.py::test_replace[replace_kwargs3]", - "tests/copy_view/test_replace.py::test_replace_categorical[1.5]", - "tests/copy_view/test_replace.py::test_replace_categorical[1]", - "tests/copy_view/test_replace.py::test_replace_categorical_inplace[1.5]", - "tests/copy_view/test_replace.py::test_replace_categorical_inplace[1]", - "tests/copy_view/test_replace.py::test_replace_chained_assignment", - "tests/copy_view/test_replace.py::test_replace_coerce_single_column", - "tests/copy_view/test_replace.py::test_replace_columnwise_no_op", - "tests/copy_view/test_replace.py::test_replace_columnwise_no_op_inplace", - "tests/copy_view/test_replace.py::test_replace_empty_list", - "tests/copy_view/test_replace.py::test_replace_inplace[1.5]", - "tests/copy_view/test_replace.py::test_replace_inplace[to_replace1]", - "tests/copy_view/test_replace.py::test_replace_inplace[to_replace2]", - "tests/copy_view/test_replace.py::test_replace_inplace_reference_no_op[100.5]", - "tests/copy_view/test_replace.py::test_replace_inplace_reference_no_op[a]", - "tests/copy_view/test_replace.py::test_replace_list_categorical", - "tests/copy_view/test_replace.py::test_replace_list_multiple_elements_inplace", - "tests/copy_view/test_replace.py::test_replace_list_none", - "tests/copy_view/test_replace.py::test_replace_listlike", - "tests/copy_view/test_replace.py::test_replace_listlike_inplace", - "tests/copy_view/test_replace.py::test_replace_mask_all_false_second_block", - "tests/copy_view/test_replace.py::test_replace_object_list_inplace[None]", - "tests/copy_view/test_replace.py::test_replace_object_list_inplace[d]", - "tests/copy_view/test_replace.py::test_replace_regex_inplace", - "tests/copy_view/test_replace.py::test_replace_regex_inplace_no_op", - "tests/copy_view/test_replace.py::test_replace_to_replace_wrong_dtype", - "tests/copy_view/test_setitem.py::test_set_column_with_series", - "tests/copy_view/test_setitem.py::test_set_columns_with_dataframe", - "tests/copy_view/test_setitem.py::test_setitem_series_no_copy", - "tests/copy_view/test_setitem.py::test_setitem_series_no_copy_single_block", - "tests/copy_view/test_setitem.py::test_setitem_series_no_copy_split_block", - "tests/copy_view/test_util.py::test_get_array_masked", - "tests/copy_view/test_util.py::test_get_array_numpy", - "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right0-left0]", - "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right1-left1]", - "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right2-left2]", - "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right3-left3]", - "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right4-left4]", - "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right5-left5]", - "tests/dtypes/cast/test_find_common_type.py::test_numpy_dtypes[source_dtypes16-object]", - "tests/dtypes/cast/test_find_common_type.py::test_numpy_dtypes[source_dtypes17-object]", - "tests/dtypes/cast/test_find_common_type.py::test_numpy_dtypes[source_dtypes18-object]", - "tests/dtypes/cast/test_find_common_type.py::test_numpy_dtypes[source_dtypes19-object]", - "tests/dtypes/cast/test_find_common_type.py::test_numpy_dtypes[source_dtypes20-object]", - "tests/dtypes/cast/test_find_common_type.py::test_numpy_dtypes[source_dtypes21-object]", - "tests/dtypes/cast/test_find_common_type.py::test_numpy_dtypes[source_dtypes22-object]", - "tests/dtypes/cast/test_find_common_type.py::test_numpy_dtypes[source_dtypes23-object]", - "tests/dtypes/cast/test_find_common_type.py::test_numpy_dtypes[source_dtypes24-object]", - "tests/dtypes/cast/test_find_common_type.py::test_numpy_dtypes[source_dtypes25-object]", - "tests/dtypes/cast/test_find_common_type.py::test_numpy_dtypes[source_dtypes30-object]", - "tests/dtypes/cast/test_find_common_type.py::test_raises_empty_input", - "tests/dtypes/test_dtypes.py::TestCategoricalDtype::test_repr_range_categories", - "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_categorical_equality[None-False]", - "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_categorical_equality[None-None]", - "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_categorical_equality[None-True]", - "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_from_categorical_dtype_identity", - "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_nan_invalid", - "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_non_unique_invalid", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_basic_dtype", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_closed_mismatch", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_closed_must_match", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction[Interval[int64]]", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction[interval[int64]]", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_allows_closed_none[Interval[int64]]", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_allows_closed_none[int64]", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_allows_closed_none[interval[int64]]", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_allows_closed_none[subtype3]", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_from_string", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_generic[Interval]", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_generic[interval]", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_equality", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_hash_vs_equality", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_name_repr_generic[Interval]", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_name_repr_generic[interval]", - "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_unpickling_without_closed", - "tests/dtypes/test_dtypes.py::test_registry[CategoricalDtype]", - "tests/dtypes/test_dtypes.py::test_registry[DatetimeTZDtype]", - "tests/dtypes/test_dtypes.py::test_registry[IntervalDtype]", - "tests/dtypes/test_dtypes.py::test_registry[PeriodDtype]", - "tests/dtypes/test_dtypes.py::test_registry_find[category-expected5]", - "tests/dtypes/test_dtypes.py::test_registry_find[datetime64[ns, US/Eastern]-expected6]", - "tests/dtypes/test_dtypes.py::test_registry_find[interval-expected1]", - "tests/dtypes/test_dtypes.py::test_registry_find[interval[datetime64[ns], left]-expected3]", - "tests/dtypes/test_dtypes.py::test_registry_find[interval[int64, neither]-expected2]", - "tests/dtypes/test_dtypes.py::test_registry_find[period[D]-expected4]", - "tests/dtypes/test_inference.py::TestTypeInference::test_date", - "tests/dtypes/test_inference.py::test_is_scipy_sparse[dok]", - "tests/dtypes/test_missing.py::test_array_equivalent_series[val5]", - "tests/dtypes/test_missing.py::test_array_equivalent_series[val6]", - "tests/dtypes/test_missing.py::test_array_equivalent_series[val7]", - "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_astype_string[string[pyarrow]]", - "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_astype_string[string[python]]", - "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__eq__-Index]", - "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__ge__-Index]", - "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__gt__-Index]", - "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__le__-Index]", - "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__lt__-Index]", - "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__ne__-Index]", - "tests/extension/decimal/test_decimal.py::test_array_copy_on_write", - "tests/extension/json/test_json.py::TestJSONArray::test_astype_string[string[pyarrow]]", - "tests/extension/json/test_json.py::TestJSONArray::test_astype_string[string[python]]", - "tests/extension/json/test_json.py::TestJSONArray::test_concat_mixed_dtypes", - "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cummax-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cummax-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cummin-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cummin-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cumprod-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cumprod-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_string[timestamp[ms]-string[pyarrow]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_string[timestamp[ms]-string[python]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_string[timestamp[ns]-string[pyarrow]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_string[timestamp[ns]-string[python]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_string[timestamp[s]-string[pyarrow]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_string[timestamp[s]-string[python]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_string[timestamp[us]-string[pyarrow]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_string[timestamp[us]-string[python]]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-eq]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-ge]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-gt]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-le]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-lt]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-ne]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-eq]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-ge]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-gt]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-le]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-lt]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-ne]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-eq]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-ge]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-gt]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-le]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-lt]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-ne]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-eq]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-ge]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-gt]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-le]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-lt]", - "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-ne]", - "tests/extension/test_arrow.py::TestArrowArray::test_concat_mixed_dtypes[decimal128(7, 3)]", - "tests/extension/test_arrow.py::TestArrowArray::test_groupby_agg_extension[decimal128(7, 3)]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[decimal128(7, 3)-mean-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[decimal128(7, 3)-median-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[decimal128(7, 3)-prod-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[decimal128(7, 3)-sum-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[double-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[float-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[int16-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[int32-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[int64-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[int8-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[uint16-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[uint32-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[uint64-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[uint8-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_boolean[timestamp[ms]-any-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_boolean[timestamp[ns]-any-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_boolean[timestamp[s]-any-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_boolean[timestamp[us]-any-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[decimal128(7, 3)-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[double-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[double-kurt-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[float-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[float-kurt-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int16-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int16-kurt-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int32-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int32-kurt-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int64-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int64-kurt-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int8-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int8-kurt-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint16-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint16-kurt-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint32-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint32-kurt-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint64-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint64-kurt-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint8-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint8-kurt-True]", - "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_and", - "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_and_scalar[False-expected3]", - "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_and_scalar[None-expected0]", - "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_and_scalar[other1-expected1]", - "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_or", - "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_or_scalar[None-expected0]", - "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_or_scalar[True-expected2]", - "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_or_scalar[other1-expected1]", - "tests/extension/test_arrow.py::test_astype_errors_ignore", - "tests/extension/test_arrow.py::test_boolean_reduce_series_all_null[any-False]", - "tests/extension/test_arrow.py::test_comparison_not_propagating_arrow_error", - "tests/extension/test_arrow.py::test_dt_day_month_name[day_name-Sunday]", - "tests/extension/test_arrow.py::test_dt_day_month_name[month_name-January]", - "tests/extension/test_arrow.py::test_dt_days_in_month[days_in_month]", - "tests/extension/test_arrow.py::test_dt_days_in_month[daysinmonth]", - "tests/extension/test_arrow.py::test_dt_is_month_start_end", - "tests/extension/test_arrow.py::test_dt_is_quarter_start_end", - "tests/extension/test_arrow.py::test_dt_is_year_start_end", - "tests/extension/test_arrow.py::test_dt_isocalendar", - "tests/extension/test_arrow.py::test_dt_properties[day-2]", - "tests/extension/test_arrow.py::test_dt_properties[day_of_year-2]", - "tests/extension/test_arrow.py::test_dt_properties[dayofyear-2]", - "tests/extension/test_arrow.py::test_dt_properties[hour-3]", - "tests/extension/test_arrow.py::test_dt_properties[is_leap_year-False]", - "tests/extension/test_arrow.py::test_dt_properties[minute-4]", - "tests/extension/test_arrow.py::test_dt_properties[month-1]", - "tests/extension/test_arrow.py::test_dt_properties[nanosecond-6]", - "tests/extension/test_arrow.py::test_dt_properties[second-7]", - "tests/extension/test_arrow.py::test_dt_properties[year-2023]", - "tests/extension/test_arrow.py::test_dt_strftime", - "tests/extension/test_arrow.py::test_dt_timedelta_total_seconds", - "tests/extension/test_arrow.py::test_dt_to_pydatetime", - "tests/extension/test_arrow.py::test_dt_to_pytimedelta", - "tests/extension/test_arrow.py::test_dt_tz_localize_nonexistent[shift_backward-exp_date1]", - "tests/extension/test_arrow.py::test_from_arrow_respecting_given_dtype", - "tests/extension/test_arrow.py::test_interpolate_not_numeric[bool]", - "tests/extension/test_arrow.py::test_interpolate_not_numeric[duration[ms]]", - "tests/extension/test_arrow.py::test_interpolate_not_numeric[duration[ns]]", - "tests/extension/test_arrow.py::test_interpolate_not_numeric[duration[s]]", - "tests/extension/test_arrow.py::test_interpolate_not_numeric[duration[us]]", - "tests/extension/test_arrow.py::test_interpolate_not_numeric[timestamp[ms]]", - "tests/extension/test_arrow.py::test_interpolate_not_numeric[timestamp[ns]]", - "tests/extension/test_arrow.py::test_interpolate_not_numeric[timestamp[s]]", - "tests/extension/test_arrow.py::test_interpolate_not_numeric[timestamp[us]]", - "tests/extension/test_arrow.py::test_pow_missing_operand", - "tests/extension/test_arrow.py::test_quantile[bool-0.5-higher]", - "tests/extension/test_arrow.py::test_quantile[bool-0.5-linear]", - "tests/extension/test_arrow.py::test_quantile[bool-0.5-lower]", - "tests/extension/test_arrow.py::test_quantile[bool-0.5-midpoint]", - "tests/extension/test_arrow.py::test_quantile[bool-0.5-nearest]", - "tests/extension/test_arrow.py::test_quantile[bool-quantile1-higher]", - "tests/extension/test_arrow.py::test_quantile[bool-quantile1-linear]", - "tests/extension/test_arrow.py::test_quantile[bool-quantile1-lower]", - "tests/extension/test_arrow.py::test_quantile[bool-quantile1-midpoint]", - "tests/extension/test_arrow.py::test_quantile[bool-quantile1-nearest]", - "tests/extension/test_arrow.py::test_quantile[timestamp[ns]-0.5-higher]", - "tests/extension/test_arrow.py::test_quantile[timestamp[ns]-0.5-lower]", - "tests/extension/test_arrow.py::test_quantile[timestamp[ns]-quantile1-higher]", - "tests/extension/test_arrow.py::test_quantile[timestamp[ns]-quantile1-lower]", - "tests/extension/test_arrow.py::test_round", - "tests/extension/test_arrow.py::test_str_extract_non_symbolic", - "tests/extension/test_arrow.py::test_str_find[ab-0-None-exp0-exp_typ0]", - "tests/extension/test_arrow.py::test_str_repeat_unsupported", - "tests/extension/test_arrow.py::test_str_replace_unsupported[pat-b]", - "tests/extension/test_arrow.py::test_str_starts_ends_with_all_nulls_empty_tuple[endswith]", - "tests/extension/test_arrow.py::test_str_starts_ends_with_all_nulls_empty_tuple[startswith]", - "tests/extension/test_categorical.py::Test2DCompat::test_copy_order", - "tests/extension/test_categorical.py::TestCategorical::test_array_interface_copy", - "tests/extension/test_categorical.py::TestCategorical::test_astype_own_type[False]", - "tests/extension/test_categorical.py::TestCategorical::test_in_numeric_groupby", - "tests/extension/test_categorical.py::TestCategorical::test_is_extension_array_dtype", - "tests/extension/test_categorical.py::TestCategorical::test_searchsorted[True]", - "tests/extension/test_categorical.py::TestCategorical::test_series_constructor_scalar_na_with_index", - "tests/extension/test_categorical.py::TestCategorical::test_to_numpy", - "tests/extension/test_common.py::test_ellipsis_index", - "tests/extension/test_common.py::test_is_extension_array_dtype[dtype0]", - "tests/extension/test_common.py::test_is_extension_array_dtype[dtype1]", - "tests/extension/test_datetime.py::TestDatetimeArray::test_EA_types[US/Central-c]", - "tests/extension/test_datetime.py::TestDatetimeArray::test_EA_types[US/Central-python]", - "tests/extension/test_datetime.py::TestDatetimeArray::test_array_interface_copy[US/Central]", - "tests/extension/test_datetime.py::TestDatetimeArray::test_astype_own_type[US/Central-False]", - "tests/extension/test_datetime.py::TestDatetimeArray::test_is_extension_array_dtype[US/Central]", - "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_series_numeric[US/Central-mean-False]", - "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_series_numeric[US/Central-mean-True]", - "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_series_numeric[US/Central-std-False]", - "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_series_numeric[US/Central-std-True]", - "tests/extension/test_interval.py::TestIntervalArray::test_EA_types[c]", - "tests/extension/test_interval.py::TestIntervalArray::test_EA_types[python]", - "tests/extension/test_interval.py::TestIntervalArray::test_array_interface_copy", - "tests/extension/test_interval.py::TestIntervalArray::test_astype_own_type[False]", - "tests/extension/test_interval.py::TestIntervalArray::test_compare_array[eq]", - "tests/extension/test_interval.py::TestIntervalArray::test_compare_array[ne]", - "tests/extension/test_interval.py::TestIntervalArray::test_in_numeric_groupby", - "tests/extension/test_interval.py::TestIntervalArray::test_is_extension_array_dtype", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[BooleanDtype-c]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[BooleanDtype-python]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Float32Dtype-c]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Float32Dtype-python]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Float64Dtype-c]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Float64Dtype-python]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Int16Dtype-c]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Int16Dtype-python]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Int32Dtype-c]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Int32Dtype-python]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Int64Dtype-c]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Int64Dtype-python]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Int8Dtype-c]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[Int8Dtype-python]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[UInt16Dtype-c]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[UInt16Dtype-python]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[UInt32Dtype-c]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[UInt32Dtype-python]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[UInt64Dtype-c]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[UInt64Dtype-python]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[UInt8Dtype-c]", - "tests/extension/test_masked.py::TestMaskedArrays::test_EA_types[UInt8Dtype-python]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[Float64Dtype-cummax-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[Float64Dtype-cummax-True]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[Float64Dtype-cummin-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[Float64Dtype-cummin-True]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt16Dtype-cumprod-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt16Dtype-cumprod-True]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt16Dtype-cumsum-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt16Dtype-cumsum-True]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt32Dtype-cumprod-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt32Dtype-cumprod-True]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt32Dtype-cumsum-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt32Dtype-cumsum-True]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt64Dtype-cumprod-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt64Dtype-cumprod-True]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt64Dtype-cumsum-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt64Dtype-cumsum-True]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt8Dtype-cumprod-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt8Dtype-cumprod-True]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt8Dtype-cumsum-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt8Dtype-cumsum-True]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_frame_with_scalar[Float32Dtype-__floordiv__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_frame_with_scalar[Float64Dtype-__floordiv__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__floordiv__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__pow__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__rfloordiv__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__rpow__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__rsub__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__sub__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Float32Dtype-__floordiv__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Float64Dtype-__floordiv__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Int16Dtype-__rpow__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Int32Dtype-__rpow__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Int64Dtype-__rpow__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Int8Dtype-__rpow__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[UInt16Dtype-__rpow__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[UInt32Dtype-__rpow__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[UInt64Dtype-__rpow__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[UInt8Dtype-__rpow__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_scalar[Float32Dtype-__floordiv__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_scalar[Float64Dtype-__floordiv__]", - "tests/extension/test_masked.py::TestMaskedArrays::test_array_interface_copy[BooleanDtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_array_interface_copy[Float32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_array_interface_copy[Float64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_array_interface_copy[Int16Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_array_interface_copy[Int32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_array_interface_copy[Int64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_array_interface_copy[Int8Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_array_interface_copy[UInt16Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_array_interface_copy[UInt32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_array_interface_copy[UInt64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_array_interface_copy[UInt8Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[BooleanDtype-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Float32Dtype-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Float64Dtype-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Int16Dtype-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Int32Dtype-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Int64Dtype-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Int8Dtype-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[UInt16Dtype-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[UInt32Dtype-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[UInt64Dtype-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[UInt8Dtype-False]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_str[Float32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_string[Float32Dtype-string[pyarrow]]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_string[Float32Dtype-string[python]]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_string[Float64Dtype-string[pyarrow]]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_string[Float64Dtype-string[python]]", - "tests/extension/test_masked.py::TestMaskedArrays::test_is_extension_array_dtype[BooleanDtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_is_extension_array_dtype[Float32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_is_extension_array_dtype[Float64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_is_extension_array_dtype[Int16Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_is_extension_array_dtype[Int32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_is_extension_array_dtype[Int64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_is_extension_array_dtype[Int8Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_is_extension_array_dtype[UInt16Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_is_extension_array_dtype[UInt32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_is_extension_array_dtype[UInt64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_is_extension_array_dtype[UInt8Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_reduce_frame[Float32Dtype-skew-True]", - "tests/extension/test_masked.py::TestMaskedArrays::test_to_numpy[Float32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_to_numpy[Float64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_to_numpy[Int16Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_to_numpy[Int32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_to_numpy[Int64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_to_numpy[Int8Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_to_numpy[UInt16Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_to_numpy[UInt32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_to_numpy[UInt64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_to_numpy[UInt8Dtype]", - "tests/extension/test_numpy.py::Test2DCompat::test_copy_order[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cummax-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cummax-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cummin-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cummin-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cumprod-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cumprod-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cumsum-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cumsum-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cummax-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cummax-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cummin-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cummin-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cumsum-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cumsum-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-argmax-False--1]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-argmax-True-0]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-argmin-False--1]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-argmin-True-2]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-idxmax-False-nan]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-idxmax-True-0]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-idxmin-False-nan]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-idxmin-True-2]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_array_interface[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_array_interface_copy[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_array_interface_copy[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_array_type[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_array_type[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_astype_object_frame[object-data]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_astype_object_frame[object-data_missing]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_astype_own_type[float-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_astype_own_type[object-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_concat[float-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_concat[float-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_concat[object-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_concat[object-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_contains[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_constructor_from_dict[float-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_constructor_from_dict[float-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_constructor_from_dict[object-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_constructor_from_dict[object-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_from_series[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_from_series[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_factorize[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_factorize[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_factorize_empty[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_factorize_empty[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_factorize_equivalence[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_factorize_equivalence[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_boolean_array_mask[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_boolean_array_mask[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_mask[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_mask[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_groupby_extension_transform[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_grouping_grouper[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_grouping_grouper[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_hash_pandas_object[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_hash_pandas_object_works[object-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_hash_pandas_object_works[object-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_index_from_array[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_index_from_array[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_is_extension_array_dtype[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_pandas_array_dtype[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[float-all-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[float-all-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[float-any-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[float-any-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[object-all-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[object-all-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[object-any-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[object-any-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-count-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-count-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-kurt-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-kurt-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-max-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-max-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-mean-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-mean-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-median-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-median-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-min-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-min-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-prod-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-prod-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-sem-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-sem-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-skew-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-skew-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-std-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-std-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-sum-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-sum-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-var-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-var-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-max-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-max-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-min-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-min-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-sum-False]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-sum-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reindex[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_series_repr[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_set_frame_overwrite_object[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_set_frame_overwrite_object[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_2d_values[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_stack[object-False-columns1]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_stack[object-True-columns1]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_take_series[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_to_numpy[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[float-absolute]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[float-negative]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[float-positive]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[object-absolute]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[object-negative]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[object-positive]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[float--Series]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[float-unique-]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[float-unique-Series]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[object--]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[object--Series]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[object-unique-]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[object-unique-Series]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_value_counts_with_normalize[object]", - "tests/extension/test_period.py::Test2DCompat::test_copy_order[2D]", - "tests/extension/test_period.py::Test2DCompat::test_copy_order[D]", - "tests/extension/test_period.py::TestPeriodArray::test_EA_types[2D-c]", - "tests/extension/test_period.py::TestPeriodArray::test_EA_types[2D-python]", - "tests/extension/test_period.py::TestPeriodArray::test_EA_types[D-c]", - "tests/extension/test_period.py::TestPeriodArray::test_EA_types[D-python]", - "tests/extension/test_period.py::TestPeriodArray::test_array_interface_copy[2D]", - "tests/extension/test_period.py::TestPeriodArray::test_array_interface_copy[D]", - "tests/extension/test_period.py::TestPeriodArray::test_astype_own_type[2D-False]", - "tests/extension/test_period.py::TestPeriodArray::test_astype_own_type[D-False]", - "tests/extension/test_period.py::TestPeriodArray::test_is_extension_array_dtype[2D]", - "tests/extension/test_period.py::TestPeriodArray::test_is_extension_array_dtype[D]", - "tests/extension/test_sparse.py::TestSparseArray::test_EA_types[0-c]", - "tests/extension/test_sparse.py::TestSparseArray::test_EA_types[0-python]", - "tests/extension/test_sparse.py::TestSparseArray::test_EA_types[nan-c]", - "tests/extension/test_sparse.py::TestSparseArray::test_EA_types[nan-python]", - "tests/extension/test_sparse.py::TestSparseArray::test_array_interface_copy[0]", - "tests/extension/test_sparse.py::TestSparseArray::test_array_interface_copy[nan]", - "tests/extension/test_sparse.py::TestSparseArray::test_astype_own_type[0-False]", - "tests/extension/test_sparse.py::TestSparseArray::test_astype_own_type[nan-False]", - "tests/extension/test_sparse.py::TestSparseArray::test_fillna_copy_frame[0]", - "tests/extension/test_sparse.py::TestSparseArray::test_fillna_copy_frame[nan]", - "tests/extension/test_sparse.py::TestSparseArray::test_fillna_copy_series[0]", - "tests/extension/test_sparse.py::TestSparseArray::test_fillna_copy_series[nan]", - "tests/extension/test_sparse.py::TestSparseArray::test_is_extension_array_dtype[0]", - "tests/extension/test_sparse.py::TestSparseArray::test_is_extension_array_dtype[nan]", - "tests/extension/test_sparse.py::TestSparseArray::test_shift_0_periods[0]", - "tests/extension/test_sparse.py::TestSparseArray::test_shift_0_periods[nan]", - "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[0-absolute]", - "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[0-negative]", - "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[0-positive]", - "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[nan-absolute]", - "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[nan-negative]", - "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[nan-positive]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[pyarrow-False-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[pyarrow-False-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[pyarrow-True-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[pyarrow-True-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[pyarrow_numpy-False-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[pyarrow_numpy-False-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[pyarrow_numpy-True-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[pyarrow_numpy-True-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[python-False-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[python-False-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[python-True-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[python-True-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=str[pyarrow]-False-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=str[pyarrow]-False-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=str[pyarrow]-True-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=str[pyarrow]-True-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=str[python]-False-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=str[python]-False-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=str[python]-True-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=str[python]-True-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=string[pyarrow]-False-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=string[pyarrow]-False-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=string[pyarrow]-True-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=string[pyarrow]-True-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=string[python]-False-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=string[python]-False-python]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=string[python]-True-c]", - "tests/extension/test_string.py::TestStringArray::test_EA_types[string=string[python]-True-python]", - "tests/extension/test_string.py::TestStringArray::test_argsort[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_argsort[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_argsort[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_argsort[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_argsort[python-False]", - "tests/extension/test_string.py::TestStringArray::test_argsort[python-True]", - "tests/extension/test_string.py::TestStringArray::test_argsort_missing[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_argsort_missing[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_argsort_missing[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_argsort_missing[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_argsort_missing[python-False]", - "tests/extension/test_string.py::TestStringArray::test_argsort_missing[python-True]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[pyarrow-False-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[pyarrow-True-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[pyarrow_numpy-False-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[pyarrow_numpy-True-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[python-False-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[python-True-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=str[pyarrow]-False-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=str[pyarrow]-True-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=str[python]-False-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=str[python]-True-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=string[pyarrow]-False-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=string[pyarrow]-True-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=string[python]-False-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=string[python]-True-__radd__]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[pyarrow-False-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[pyarrow-True-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[pyarrow_numpy-False-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[pyarrow_numpy-True-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[python-False-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[python-True-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=str[pyarrow]-False-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=str[pyarrow]-True-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=str[python]-False-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=str[python]-True-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=string[pyarrow]-False-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=string[pyarrow]-True-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=string[python]-False-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=string[python]-True-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_str[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_str[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_astype_str[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_str[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_astype_str[python-False]", - "tests/extension/test_string.py::TestStringArray::test_astype_str[python-True]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-False-eq]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-False-ge]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-False-gt]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-False-le]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-False-lt]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-False-ne]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-True-eq]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-True-ge]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-True-gt]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-True-le]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-True-lt]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow-True-ne]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-False-eq]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-False-ge]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-False-gt]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-False-le]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-False-lt]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-False-ne]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-True-eq]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-True-ge]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-True-gt]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-True-le]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-True-lt]", - "tests/extension/test_string.py::TestStringArray::test_compare_array[pyarrow_numpy-True-ne]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-False-eq]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-False-ge]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-False-gt]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-False-le]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-False-lt]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-False-ne]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-True-eq]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-True-ge]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-True-gt]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-True-le]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-True-lt]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow-True-ne]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-False-eq]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-False-ge]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-False-gt]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-False-le]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-False-lt]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-False-ne]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-True-eq]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-True-ge]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-True-gt]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-True-le]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-True-lt]", - "tests/extension/test_string.py::TestStringArray::test_compare_scalar[pyarrow_numpy-True-ne]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-False--2-indices0-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-False--2-indices0-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-False-0-indices1-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-False-0-indices1-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-False-2-indices2-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-False-2-indices2-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-True--2-indices0-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-True--2-indices0-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-True-0-indices1-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-True-0-indices1-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-True-2-indices2-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow-True-2-indices2-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-False--2-indices0-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-False--2-indices0-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-False-0-indices1-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-False-0-indices1-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-False-2-indices2-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-False-2-indices2-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-True--2-indices0-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-True--2-indices0-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-True-0-indices1-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-True-0-indices1-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-True-2-indices2-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[pyarrow_numpy-True-2-indices2-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-False--2-indices0-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-False--2-indices0-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-False-0-indices1-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-False-0-indices1-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-False-2-indices2-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-False-2-indices2-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-True--2-indices0-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-True--2-indices0-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-True-0-indices1-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-True-0-indices1-True]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-True-2-indices2-False]", - "tests/extension/test_string.py::TestStringArray::test_container_shift[python-True-2-indices2-True]", - "tests/extension/test_string.py::TestStringArray::test_groupby_agg_extension[string=str[pyarrow]-False]", - "tests/extension/test_string.py::TestStringArray::test_groupby_agg_extension[string=str[pyarrow]-True]", - "tests/extension/test_string.py::TestStringArray::test_groupby_agg_extension[string=str[python]-False]", - "tests/extension/test_string.py::TestStringArray::test_groupby_agg_extension[string=str[python]-True]", - "tests/extension/test_string.py::TestStringArray::test_groupby_agg_extension[string=string[pyarrow]-False]", - "tests/extension/test_string.py::TestStringArray::test_groupby_agg_extension[string=string[pyarrow]-True]", - "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[python-False]", - "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[python-True]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[python-False]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[python-True]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=str[pyarrow]-False]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=str[pyarrow]-True]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=str[python]-False]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=str[python]-True]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=string[pyarrow]-False]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=string[pyarrow]-True]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=string[python]-False]", - "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=string[python]-True]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[pyarrow-False-sum-False]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[pyarrow-False-sum-True]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[pyarrow-True-sum-False]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[pyarrow-True-sum-True]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[pyarrow_numpy-False-sum-False]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[pyarrow_numpy-False-sum-True]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[pyarrow_numpy-True-sum-False]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[pyarrow_numpy-True-sum-True]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[python-False-sum-False]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[python-False-sum-True]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[python-True-sum-False]", - "tests/extension/test_string.py::TestStringArray::test_reduce_series_numeric[python-True-sum-True]", - "tests/extension/test_string.py::TestStringArray::test_reindex_non_na_fill_value[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_reindex_non_na_fill_value[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_reindex_non_na_fill_value[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_reindex_non_na_fill_value[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_reindex_non_na_fill_value[python-False]", - "tests/extension/test_string.py::TestStringArray::test_reindex_non_na_fill_value[python-True]", - "tests/extension/test_string.py::TestStringArray::test_searchsorted[pyarrow-False-True]", - "tests/extension/test_string.py::TestStringArray::test_searchsorted[pyarrow-True-True]", - "tests/extension/test_string.py::TestStringArray::test_searchsorted[pyarrow_numpy-False-True]", - "tests/extension/test_string.py::TestStringArray::test_searchsorted[pyarrow_numpy-True-True]", - "tests/extension/test_string.py::TestStringArray::test_searchsorted[python-False-True]", - "tests/extension/test_string.py::TestStringArray::test_searchsorted[python-True-True]", - "tests/extension/test_string.py::TestStringArray::test_set_frame_expand_extension_with_regular[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_set_frame_expand_extension_with_regular[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_set_frame_expand_extension_with_regular[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_set_frame_expand_extension_with_regular[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_set_frame_expand_extension_with_regular[python-False]", - "tests/extension/test_string.py::TestStringArray::test_set_frame_expand_extension_with_regular[python-True]", - "tests/extension/test_string.py::TestStringArray::test_setitem_expand_columns[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_setitem_expand_columns[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_setitem_expand_columns[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_setitem_expand_columns[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_setitem_expand_columns[python-False]", - "tests/extension/test_string.py::TestStringArray::test_setitem_expand_columns[python-True]", - "tests/extension/test_string.py::TestStringArray::test_setitem_frame_2d_values[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_setitem_frame_2d_values[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_setitem_frame_2d_values[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_setitem_frame_2d_values[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_setitem_frame_2d_values[python-False]", - "tests/extension/test_string.py::TestStringArray::test_setitem_frame_2d_values[python-True]", - "tests/extension/test_string.py::TestStringArray::test_to_numpy[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_to_numpy[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_to_numpy[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_to_numpy[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_to_numpy[python-False]", - "tests/extension/test_string.py::TestStringArray::test_to_numpy[python-True]", - "tests/extension/test_string.py::TestStringArray::test_unary_ufunc_dunder_equivalence[pyarrow-False-positive]", - "tests/extension/test_string.py::TestStringArray::test_unary_ufunc_dunder_equivalence[pyarrow-True-positive]", - "tests/extension/test_string.py::TestStringArray::test_unary_ufunc_dunder_equivalence[pyarrow_numpy-False-positive]", - "tests/extension/test_string.py::TestStringArray::test_unary_ufunc_dunder_equivalence[pyarrow_numpy-True-positive]", - "tests/extension/test_string.py::TestStringArray::test_value_counts_with_normalize[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_value_counts_with_normalize[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_value_counts_with_normalize[python-False]", - "tests/extension/test_string.py::TestStringArray::test_value_counts_with_normalize[python-True]", - "tests/frame/constructors/test_from_records.py::TestFromRecords::test_from_records_misc_brokenness3", - "tests/frame/constructors/test_from_records.py::TestFromRecords::test_from_records_with_datetimes", - "tests/frame/indexing/test_getitem.py::TestGetitemCallable::test_loc_multiindex_columns_one_level", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_fancy_getitem_slice_mixed", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_getitem_setitem_boolean_misaligned", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_getitem_setitem_float_labels", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_getitem_setitem_ix_bool_keyerror[False]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_getitem_setitem_ix_bool_keyerror[True]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_iloc_col_slice_view", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_iloc_row_slice_view", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_loc_bool_multiindex[bool-indexer1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_loc_bool_multiindex[boolean-indexer1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_loc_internals_not_updated_correctly", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_loc_setitem_reordering_with_all_true_indexer[col0-False]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_loc_setitem_reordering_with_all_true_indexer[col0-True]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_loc_setitem_reordering_with_all_true_indexer[col0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_set_2d_casting_date_to_int[col0-indexer0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_set_2d_casting_date_to_int[col1-indexer0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setitem_boolean", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setitem_mixed_datetime", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setitem_single_column_mixed_datetime", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Float32-null0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Float32-null1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Float32-null2]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Float64-null0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Float64-null1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Float64-null2]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int16-null0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int16-null1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int16-null2]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int32-null0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int32-null1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int32-null2]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int64-null0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int64-null1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int64-null2]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int8-null0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int8-null1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int8-null2]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt16-null0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt16-null1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt16-null2]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt32-null0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt32-null1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt32-null2]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt64-null0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt64-null1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt64-null2]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt8-null0]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt8-null1]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt8-null2]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key0]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key1]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key2]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key3]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key4]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key5]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key2]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key3]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key4]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key5]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key0]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key1]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key2]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key3]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key4]", - "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key5]", - "tests/frame/indexing/test_indexing.py::TestLocILocDataFrameCategorical::test_loc_on_multiindex_one_level", - "tests/frame/indexing/test_indexing.py::test_add_new_column_infer_string", - "tests/frame/indexing/test_indexing.py::test_adding_new_conditional_column", - "tests/frame/indexing/test_indexing.py::test_adding_new_conditional_column_with_string[dtype1-True]", - "tests/frame/indexing/test_indexing.py::test_adding_new_conditional_column_with_string[object-False]", - "tests/frame/indexing/test_indexing.py::test_adding_new_conditional_column_with_string[string[pyarrow_numpy]-True]", - "tests/frame/indexing/test_indexing.py::test_object_casting_indexing_wraps_datetimelike", - "tests/frame/indexing/test_insert.py::TestDataFrameInsert::test_insert", - "tests/frame/indexing/test_insert.py::TestDataFrameInsert::test_insert_item_cache", - "tests/frame/indexing/test_setitem.py::TestDataFrameSetItem::test_setitem_list_missing_columns[columns3-box3-expected3]", - "tests/frame/indexing/test_setitem.py::TestDataFrameSetItemWithExpansion::test_setitem_listlike_views", - "tests/frame/indexing/test_setitem.py::TestDataFrameSetitemCopyViewSemantics::test_iloc_setitem_view_2dblock", - "tests/frame/indexing/test_setitem.py::TestDataFrameSetitemCopyViewSemantics::test_setitem_listlike_key_scalar_value_not_inplace[value2]", - "tests/frame/indexing/test_setitem.py::TestDataFrameSetitemCopyViewSemantics::test_setitem_partial_column_inplace[False]", - "tests/frame/indexing/test_setitem.py::TestDataFrameSetitemCopyViewSemantics::test_setitem_same_dtype_not_inplace[value2]", - "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_bug_transposition", - "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_dataframe_col_match", - "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_datetime", - "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_datetimelike_noop[timedelta64[ns]]", - "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_ndframe_align", - "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_set[default]", - "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_set[mixed_int]", - "tests/frame/indexing/test_where.py::test_where_int_downcasting_deprecated", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Float32]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Float64]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Int16]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Int32]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Int64]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Int8]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-UInt16]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-UInt32]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-UInt64]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-UInt8]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Float32]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Float64]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Int16]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Int32]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Int64]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Int8]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-UInt16]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-UInt32]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-UInt64]", - "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-UInt8]", - "tests/frame/indexing/test_xs.py::TestXSWithMultiIndex::test_xs_droplevel_false_view", - "tests/frame/indexing/test_xs.py::TestXSWithMultiIndex::test_xs_integer_key", - "tests/frame/methods/test_asfreq.py::TestAsFreq::test_asfreq_resample_set_correct_freq[DataFrame]", - "tests/frame/methods/test_asfreq.py::TestAsFreq::test_asfreq_resample_set_correct_freq[Series]", - "tests/frame/methods/test_astype.py::TestAstype::test_astype_arg_for_errors_dictlist", - "tests/frame/methods/test_astype.py::TestAstype::test_astype_dt64_to_string[DataFrame-None]", - "tests/frame/methods/test_astype.py::TestAstype::test_astype_dt64_to_string[Series-None]", - "tests/frame/methods/test_astype.py::TestAstype::test_astype_dt64tz", - "tests/frame/methods/test_astype.py::TestAstype::test_astype_dt64tz_to_str", - "tests/frame/methods/test_astype.py::TestAstype::test_astype_str_float", - "tests/frame/methods/test_astype.py::TestAstype::test_astype_with_exclude_string", - "tests/frame/methods/test_astype.py::test_astype_to_string_not_modifying_input[pyarrow_numpy-None]", - "tests/frame/methods/test_astype.py::test_astype_to_string_not_modifying_input[pyarrow_numpy-val4]", - "tests/frame/methods/test_at_time.py::TestAtTime::test_at_time_axis[0]", - "tests/frame/methods/test_at_time.py::TestAtTime::test_at_time_axis[index]", - "tests/frame/methods/test_clip.py::TestDataFrameClip::test_clip_int_data_with_float_bound", - "tests/frame/methods/test_clip.py::TestDataFrameClip::test_dataframe_clip", - "tests/frame/methods/test_combine_first.py::TestDataFrameCombineFirst::test_combine_first_convert_datatime_correctly[data11-data21-data_expected1]", - "tests/frame/methods/test_combine_first.py::TestDataFrameCombineFirst::test_combine_first_convert_datatime_correctly[data12-data22-data_expected2]", - "tests/frame/methods/test_combine_first.py::TestDataFrameCombineFirst::test_combine_first_convert_datatime_correctly[data13-data23-data_expected3]", - "tests/frame/methods/test_combine_first.py::TestDataFrameCombineFirst::test_combine_first_timezone[ms]", - "tests/frame/methods/test_combine_first.py::TestDataFrameCombineFirst::test_combine_first_timezone[ns]", - "tests/frame/methods/test_combine_first.py::TestDataFrameCombineFirst::test_combine_first_timezone[s]", - "tests/frame/methods/test_combine_first.py::TestDataFrameCombineFirst::test_combine_first_timezone[us]", - "tests/frame/methods/test_combine_first.py::test_combine_first_timestamp_bug[NAType-scalar10-scalar20]", - "tests/frame/methods/test_combine_first.py::test_combine_first_timestamp_bug[NaTType-scalar10-scalar20]", - "tests/frame/methods/test_combine_first.py::test_combine_first_timestamp_bug[NaTType-scalar12-scalar22]", - "tests/frame/methods/test_combine_first.py::test_combine_first_timestamp_bug_NaT", - "tests/frame/methods/test_convert_dtypes.py::TestConvertDtypes::test_convert_dtypes[pyarrow-False-expected0]", - "tests/frame/methods/test_convert_dtypes.py::TestConvertDtypes::test_convert_dtypes[pyarrow_numpy-False-expected0]", - "tests/frame/methods/test_convert_dtypes.py::TestConvertDtypes::test_convert_dtypes[pyarrow_numpy-True-Int32]", - "tests/frame/methods/test_convert_dtypes.py::TestConvertDtypes::test_convert_dtypes[python-False-expected0]", - "tests/frame/methods/test_convert_dtypes.py::TestConvertDtypes::test_convert_dtypes_avoid_block_splitting", - "tests/frame/methods/test_convert_dtypes.py::TestConvertDtypes::test_convert_dtypes_pyarrow_to_np_nullable", - "tests/frame/methods/test_convert_dtypes.py::TestConvertDtypes::test_pyarrow_backend_no_conversion", - "tests/frame/methods/test_convert_dtypes.py::TestConvertDtypes::test_pyarrow_engine_lines_false", - "tests/frame/methods/test_copy.py::TestCopy::test_copy_consolidates", - "tests/frame/methods/test_count.py::TestDataFrameCount::test_count", - "tests/frame/methods/test_cov_corr.py::TestDataFrameCorr::test_corr_item_cache", - "tests/frame/methods/test_cov_corr.py::TestDataFrameCorr::test_corr_numeric_only[False-spearman]", - "tests/frame/methods/test_diff.py::TestDataFrameDiff::test_diff_all_int_dtype[int16]", - "tests/frame/methods/test_diff.py::TestDataFrameDiff::test_diff_all_int_dtype[int8]", - "tests/frame/methods/test_drop.py::TestDataFrameDrop::test_drop", - "tests/frame/methods/test_drop.py::TestDataFrameDrop::test_drop_multiindex_not_lexsorted", - "tests/frame/methods/test_drop.py::TestDataFrameDrop::test_drop_multiindex_other_level_nan", - "tests/frame/methods/test_dropna.py::TestDataFrameMissingData::test_drop_and_dropna_caching", - "tests/frame/methods/test_dropna.py::TestDataFrameMissingData::test_dropna", - "tests/frame/methods/test_dropna.py::TestDataFrameMissingData::test_dropna_multiple_axes", - "tests/frame/methods/test_dropna.py::TestDataFrameMissingData::test_no_nans_in_frame[axis='index']", - "tests/frame/methods/test_dropna.py::TestDataFrameMissingData::test_no_nans_in_frame[axis=0]", - "tests/frame/methods/test_dtypes.py::TestDataFrameDataTypes::test_dtypes_timedeltas", - "tests/frame/methods/test_equals.py::TestEquals::test_equals_different_blocks", - "tests/frame/methods/test_explode.py::test_duplicate_index[input_dict0-input_index0-expected_dict0-expected_index0]", - "tests/frame/methods/test_explode.py::test_duplicate_index[input_dict1-input_index1-expected_dict1-expected_index1]", - "tests/frame/methods/test_explode.py::test_duplicate_index[input_dict2-input_index2-expected_dict2-expected_index2]", - "tests/frame/methods/test_explode.py::test_duplicate_index[input_dict3-input_index3-expected_dict3-expected_index3]", - "tests/frame/methods/test_explode.py::test_multi_columns_nan_empty", - "tests/frame/methods/test_fillna.py::TestFillNA::test_fillna_on_column_view", - "tests/frame/methods/test_info.py::test_info_memory", - "tests/frame/methods/test_info.py::test_info_memory_usage_deep_not_pypy", - "tests/frame/methods/test_info.py::test_usage_via_getsizeof", - "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interp_basic", - "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interp_inplace_row", - "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interp_nan_idx", - "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interp_rowwise", - "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interpolate_datetimelike_values[DataFrame]", - "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interpolate_datetimelike_values[Series]", - "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interpolate_inplace[DataFrame]", - "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interpolate_inplace[Series]", - "tests/frame/methods/test_join.py::TestDataFrameJoin::test_join", - "tests/frame/methods/test_join.py::test_join_index", - "tests/frame/methods/test_join.py::test_join_index_more", - "tests/frame/methods/test_map.py::test_map", - "tests/frame/methods/test_map.py::test_map_str", - "tests/frame/methods/test_map.py::test_map_empty[-expected0]", - "tests/frame/methods/test_map.py::test_map_empty[-expected2]", - "tests/frame/methods/test_map.py::test_map_empty[round-expected0]", - "tests/frame/methods/test_map.py::test_map_empty[round-expected2]", - "tests/frame/methods/test_map.py::test_map_function_runs_once", - "tests/frame/methods/test_map.py::test_map_na_ignore", - "tests/frame/methods/test_matmul.py::TestMatMul::test_matmul", - "tests/frame/methods/test_pop.py::TestDataFramePop::test_pop", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_empty[linear-single]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_empty[nearest-table]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_datetime[ms]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_datetime[ns]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_datetime[s]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_datetime[us]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_empty_no_columns[linear-single]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_empty_no_columns[nearest-table]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_empty_no_rows_dt64[linear-single]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_item_cache[linear-single]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_item_cache[nearest-table]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_multi_empty[linear-single]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_multi_empty[nearest-table]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_nat[linear-single-ms]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_nat[linear-single-ns]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_nat[linear-single-s]", - "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_nat[linear-single-us]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_empty_datelike[datetime64[ns]-expected_data1-expected_index1-0-datetime64[ns]]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea[Float64-DataFrame]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea[Float64-Series]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea[Int64-DataFrame]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea[Int64-Series]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_all_na[Float64-DataFrame]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_all_na[Float64-Series]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_all_na[Int64-DataFrame]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_all_na[Int64-Series]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_scalar[Float64-DataFrame]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_scalar[Int64-DataFrame]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_scalar[timedelta64[ns]-DataFrame]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_with_na[Float64-DataFrame]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_with_na[Float64-Series]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_with_na[Int64-DataFrame]", - "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_with_na[Int64-Series]", - "tests/frame/methods/test_rank.py::TestRank::test_rank_string_dtype[string=string[pyarrow]]", - "tests/frame/methods/test_rank.py::TestRank::test_rank_string_dtype[string[pyarrow]-Int64]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_axis_style_raises", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_copies_ea", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx1-src_idx0]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx1-src_idx1]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx3-src_idx0]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx3-src_idx1]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx4-src_idx0]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx4-src_idx1]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx5-src_idx0]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx5-src_idx1]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_fill_value", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_int", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_nearest_tz[zoneinfo.ZoneInfo(key='US/Pacific')]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_nearest_tz[zoneinfo.ZoneInfo(key='UTC')]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_positional_raises", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Float32]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Float64]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Int16]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Int32]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Int64]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Int8]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[UInt16]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[UInt32]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[UInt64]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[UInt8]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_uint_dtypes_fill_value[uint16]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_uint_dtypes_fill_value[uint32]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_uint_dtypes_fill_value[uint64]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_uint_dtypes_fill_value[uint8]", - "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_with_multi_index", - "tests/frame/methods/test_reindex.py::TestReindexSetIndex::test_setitem_reset_index_dtypes", - "tests/frame/methods/test_rename.py::TestRename::test_rename", - "tests/frame/methods/test_rename.py::TestRename::test_rename_axis_style_raises", - "tests/frame/methods/test_rename.py::TestRename::test_rename_inplace", - "tests/frame/methods/test_rename.py::TestRename::test_rename_mapper_and_positional_arguments_raises", - "tests/frame/methods/test_rename.py::TestRename::test_rename_no_mappings_raises", - "tests/frame/methods/test_rename.py::TestRename::test_rename_nocopy", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_NAT_with_None", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_NA_with_None", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_list_with_mixed_type[DataFrame-array-data0-to_replace0-value0-expected0]", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_list_with_mixed_type[DataFrame-tuple-data0-to_replace0-value0-expected0]", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_list_with_mixed_type[Series-array-data0-to_replace0-value0-expected0]", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_list_with_mixed_type[Series-tuple-data0-to_replace0-value0-expected0]", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_method[nan-bfill-expected1]", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_mixed_int_block_splitting", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_no_replacement_dtypes[nan-int64]", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_no_replacement_dtypes[value1-int64]", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_value_is_none", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_value_none_dtype_numeric[2.0]", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_value_none_dtype_numeric[2]", - "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_value_none_dtype_numeric[nan]", - "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index", - "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_duplicate_columns_allow[False-False]", - "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_duplicate_columns_allow[False-True]", - "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_duplicate_columns_allow[True-False]", - "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_duplicate_columns_default[False]", - "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_duplicate_columns_default[True]", - "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_empty_rangeindex", - "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_level_missing[idx_lev0]", - "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_level_missing[idx_lev1]", - "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_multiindex_columns", - "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_with_datetimeindex_cols[2012-12-31]", - "tests/frame/methods/test_sample.py::TestSample::test_sample_random_state[DataFrame-np.array-arg0]", - "tests/frame/methods/test_sample.py::TestSample::test_sample_random_state[Series-np.array-arg0]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_exclude_include_int[include0]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_exclude_include_int[include2]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_float_dtype[expected0-float]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_float_dtype[expected1-float]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-S1]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-U1]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-bytes_]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-str0]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-str1]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-str_]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-S1]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-U1]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-bytes_]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-str0]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-str1]", - "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-str_]", - "tests/frame/methods/test_set_axis.py::TestDataFrameSetAxis::test_set_axis_copy", - "tests/frame/methods/test_set_axis.py::TestSeriesSetAxis::test_set_axis_copy", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[False-False-None-1]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[False-False-None-Index]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[False-True-B-1]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[False-True-B-Index]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[False-True-None-1]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[False-True-None-Index]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[False-True-test-1]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[False-True-test-Index]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[True-False-None-1]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[True-False-None-Index]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[True-True-B-1]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[True-True-B-Index]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[True-True-None-1]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[True-True-None-Index]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[True-True-test-1]", - "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[True-True-test-Index]", - "tests/frame/methods/test_set_index.py::TestSetIndexCustomLabelType::test_set_index_custom_label_hashable_iterable", - "tests/frame/methods/test_shift.py::TestDataFrameShift::test_shift_bool", - "tests/frame/methods/test_shift.py::TestDataFrameShift::test_shift_dt64values_axis1_invalid_fill[datetime64[ns]-False]", - "tests/frame/methods/test_shift.py::TestDataFrameShift::test_shift_dt64values_axis1_invalid_fill[timedelta64[ns]-False]", - "tests/frame/methods/test_shift.py::TestDataFrameShift::test_shift_dt64values_int_fill_deprecated", - "tests/frame/methods/test_sort_index.py::TestDataFrameSortIndex::test_sort_index_intervalindex", - "tests/frame/methods/test_sort_index.py::TestDataFrameSortIndex::test_sort_index_nan", - "tests/frame/methods/test_sort_index.py::TestDataFrameSortIndex::test_sort_index_reorder_on_ops", - "tests/frame/methods/test_sort_values.py::TestDataFrameSortValues::test_sort_values_by_empty_list", - "tests/frame/methods/test_sort_values.py::TestDataFrameSortValues::test_sort_values_item_cache", - "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_gz_lineend", - "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_multi_index_header", - "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_from_csv1", - "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_from_csv2", - "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_from_csv5", - "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_headers", - "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_multiindex", - "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_na_quoting", - "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_quoting", - "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_single_level_multi_index", - "tests/frame/methods/test_to_dict.py::TestDataFrameToDict::test_to_dict_index_false_error[series]", - "tests/frame/methods/test_to_dict.py::TestDataFrameToDict::test_to_dict_orient_dtype[data1-Timestamp]", - "tests/frame/methods/test_to_dict.py::TestDataFrameToDict::test_to_dict_scalar_constructor_orient_dtype[data4-Timestamp]", - "tests/frame/methods/test_to_dict.py::test_to_dict_list_pd_scalars[val1]", - "tests/frame/methods/test_to_numpy.py::TestToNumpy::test_to_numpy_copy", - "tests/frame/methods/test_to_numpy.py::TestToNumpy::test_to_numpy_mixed_dtype_to_str", - "tests/frame/methods/test_to_records.py::TestDataFrameToRecords::test_to_records_dt64tz_column", - "tests/frame/methods/test_to_records.py::TestDataFrameToRecords::test_to_records_with_unicode_index", - "tests/frame/methods/test_truncate.py::TestDataFrameTruncate::test_truncate_multiindex[DataFrame]", - "tests/frame/methods/test_tz_localize.py::TestTZLocalize::test_tz_localize_copy_inplace_mutate[DataFrame-False]", - "tests/frame/methods/test_tz_localize.py::TestTZLocalize::test_tz_localize_copy_inplace_mutate[DataFrame-True]", - "tests/frame/methods/test_tz_localize.py::TestTZLocalize::test_tz_localize_copy_inplace_mutate[Series-False]", - "tests/frame/methods/test_tz_localize.py::TestTZLocalize::test_tz_localize_copy_inplace_mutate[Series-True]", - "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_dropna_false[NoneType]", - "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_empty", - "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_empty_normalize", - "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_subset[NoneType-columns1]", - "tests/frame/methods/test_value_counts.py::test_value_counts_with_missing_category", - "tests/frame/methods/test_values.py::TestDataFrameValues::test_interleave_with_tzaware", - "tests/frame/methods/test_values.py::TestDataFrameValues::test_values", - "tests/frame/test_api.py::TestDataFrameMisc::test_display_max_dir_items", - "tests/frame/test_api.py::TestDataFrameMisc::test_get_agg_axis", - "tests/frame/test_api.py::TestDataFrameMisc::test_get_axis", - "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[DataFrame-False]", - "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[DataFrame-None]", - "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[DataFrame-True]", - "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[Series-False]", - "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[Series-None]", - "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[Series-True]", - "tests/frame/test_api.py::TestDataFrameMisc::test_tab_completion", - "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_arithmetic_midx_cols_different_dtypes_different_order[numexpr]", - "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_arithmetic_midx_cols_different_dtypes_different_order[python]", - "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[numexpr-pow-True-bool]", - "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[numexpr-sub-True-bool]", - "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[numexpr-truediv-True-bool]", - "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[python-pow-True-bool]", - "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[python-sub-True-bool]", - "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[python-truediv-True-bool]", - "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_frame_with_frame_reindex[numexpr]", - "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_frame_with_frame_reindex[python]", - "tests/frame/test_arithmetic.py::TestFrameArithmeticUnsorted::test_inplace_ops_identity[numexpr]", - "tests/frame/test_arithmetic.py::TestFrameArithmeticUnsorted::test_inplace_ops_identity[python]", - "tests/frame/test_arithmetic.py::TestFrameComparisons::test_timestamp_compare[numexpr-ge-le]", - "tests/frame/test_arithmetic.py::TestFrameComparisons::test_timestamp_compare[numexpr-gt-lt]", - "tests/frame/test_arithmetic.py::TestFrameComparisons::test_timestamp_compare[numexpr-le-ge]", - "tests/frame/test_arithmetic.py::TestFrameComparisons::test_timestamp_compare[numexpr-lt-gt]", - "tests/frame/test_arithmetic.py::TestFrameComparisons::test_timestamp_compare[python-ge-le]", - "tests/frame/test_arithmetic.py::TestFrameComparisons::test_timestamp_compare[python-gt-lt]", - "tests/frame/test_arithmetic.py::TestFrameComparisons::test_timestamp_compare[python-le-ge]", - "tests/frame/test_arithmetic.py::TestFrameComparisons::test_timestamp_compare[python-lt-gt]", - "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_arith_flex_frame_corner[numexpr]", - "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_arith_flex_frame_corner[python]", - "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_broadcast_multiindex[numexpr-None]", - "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_broadcast_multiindex[python-None]", - "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_flex_add_scalar_fill_value[numexpr]", - "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_flex_add_scalar_fill_value[python]", - "tests/frame/test_arithmetic.py::test_arithmetic_multiindex_align[numexpr]", - "tests/frame/test_arithmetic.py::test_arithmetic_multiindex_align[python]", - "tests/frame/test_arithmetic.py::test_bool_frame_mult_float[numexpr]", - "tests/frame/test_arithmetic.py::test_bool_frame_mult_float[python]", - "tests/frame/test_arithmetic.py::test_frame_with_zero_len_series_corner_cases[numexpr]", - "tests/frame/test_arithmetic.py::test_frame_with_zero_len_series_corner_cases[python]", - "tests/frame/test_arithmetic.py::test_pow_with_realignment[numexpr]", - "tests/frame/test_arithmetic.py::test_pow_with_realignment[python]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_columns_indexes_raise_on_sets", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_construction_from_ndarray_datetimelike", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_construction_from_set_raises[frozenset]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_construction_from_set_raises[set]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['+01:15'-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['-02:15'-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['Asia/Tokyo'-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['US/Eastern'-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['UTC'-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['UTC+01:15'-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['UTC-02:15'-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['dateutil/Asia/Singapore'-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['dateutil/US/Pacific'-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[datetime.timezone(datetime.timedelta(seconds=3600))-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[datetime.timezone.utc-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[pytz.FixedOffset(-300)-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[pytz.FixedOffset(300)-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[tzlocal()-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[tzutc()-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[zoneinfo.ZoneInfo(key='US/Pacific')-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[zoneinfo.ZoneInfo(key='UTC')-True]", - "tests/frame/test_constructors.py::TestDataFrameConstructorWithDtypeCoercion::test_floating_values_integer_dtype", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_1d_object_array_does_not_copy", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_2d_object_array_does_not_copy", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_construct_from_list_of_datetimes", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_construct_with_two_categoricalindex_series", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_datetimes_with_nulls[arr0]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_datetimes_with_nulls[arr1]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_cast", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_datetime64_index", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_multiindex", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_nan_key[None]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_nan_key_and_columns", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_timedelta64_index[-pytimedelta]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_with_index", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_with_index_and_columns", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_error_msgs", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_for_list_with_dtypes", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_list_of_2d_raises", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_lists_to_object_dtype", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_maskedarray", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_maskedarray_hardened", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_maskedarray_nonfloat", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_maskedrecarray_dtype", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_mixed_dict_and_Series", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_rec", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_with_datetimes1", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_with_datetimes2", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_datetime_date_tuple_columns_from_dict", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_datetimelike_values_with_object_dtype[DataFrame-M]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_datetimelike_values_with_object_dtype[DataFrame-m]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_datetimelike_values_with_object_dtype[Series-M]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_datetimelike_values_with_object_dtype[Series-m]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-M8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-bool0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-bool1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-complex-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-complex128-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-complex64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-datetime64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-float-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-float32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-float64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-int-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-int16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-int32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-int64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-int8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-m8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-object0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-object1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-timedelta64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-uint16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-uint32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-uint64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-uint8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-M8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-bool0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-bool1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-complex-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-complex128-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-complex64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-datetime64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-float-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-float32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-float64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-int-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-int16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-int32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-int64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-int8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-m8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-object0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-object1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-timedelta64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-uint16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-uint32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-uint64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-uint8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-M8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-bool0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-bool1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-complex-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-complex128-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-complex64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-datetime64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-float-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-float32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-float64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-int-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-int16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-int32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-int64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-int8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-m8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-object0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-object1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-timedelta64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-uint16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-uint32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-uint64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-uint8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-M8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-bool0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-bool1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-complex-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-complex128-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-complex64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-datetime64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-float-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-float32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-float64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-int-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-int16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-int32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-int64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-int8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-m8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-object0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-object1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-timedelta64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-uint16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-uint32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-uint64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-uint8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-M8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-bool0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-bool1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-complex-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-complex128-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-complex64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-datetime64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-float-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-float32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-float64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-int-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-int16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-int32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-int64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-int8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-m8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-object0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-object1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-timedelta64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-uint16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-uint32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-uint64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-uint8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-M8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-bool0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-bool1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-complex-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-complex128-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-complex64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-datetime64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-float-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-float32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-float64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-int-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-int16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-int32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-int64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-int8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-m8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-object0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-object1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-timedelta64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-uint16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-uint32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-uint64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-uint8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-M8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-bool0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-bool1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-complex-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-complex128-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-complex64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-datetime64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-float-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-float32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-float64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-int-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-int16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-int32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-int64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-int8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-m8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-object0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-object1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-timedelta64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-uint16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-uint32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-uint64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-uint8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-M8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-bool0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-bool1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-complex-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-complex128-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-complex64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-datetime64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-float-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-float32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-float64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-int-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-int16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-int32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-int64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-int8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-m8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-object0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-object1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-timedelta64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-uint16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-uint32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-uint64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-uint8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-M8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-bool0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-bool1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-complex-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-complex128-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-complex64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-datetime64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-float-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-float32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-float64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-int-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-int16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-int32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-int64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-int8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-m8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-object0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-object1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-timedelta64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-uint16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-uint32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-uint64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-uint8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-M8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-bool0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-bool1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-complex-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-complex128-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-complex64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-datetime64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-float-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-float32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-float64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-int-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-int16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-int32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-int64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-int8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-m8[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-object0-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-object1-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-timedelta64[ns]-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-uint16-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-uint32-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-uint64-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-uint8-False]", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_frame_string_inference", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_frame_string_inference_array_string_dtype", - "tests/frame/test_constructors.py::TestDataFrameConstructors::test_from_datetime_subclass", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_datetime[DataFrame-None-datetime64]", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_datetime[DataFrame-dict-datetime64]", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_datetime[Series-None-datetime64]", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_timedelta[DataFrame-None-timedelta64]", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_timedelta[DataFrame-dict-timedelta64]", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_timedelta[Series-None-timedelta64]", - "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_datetime64[DataFrame-dict]", - "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_datetime64[Series-None]", - "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_timedelta64[DataFrame-dict-datetime64]", - "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_timedelta64[DataFrame-dict-timedelta64]", - "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_timedelta64[Series-None-datetime64]", - "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_timedelta64[Series-None-timedelta64]", - "tests/frame/test_iteration.py::TestIteration::test_iteritems", - "tests/frame/test_iteration.py::TestIteration::test_iterrows_corner", - "tests/frame/test_iteration.py::TestIteration::test_itertuples", - "tests/frame/test_iteration.py::TestIteration::test_keys", - "tests/frame/test_logical_ops.py::TestDataFrameLogicalOperators::test_different_dtypes_different_index_raises", - "tests/frame/test_logical_ops.py::TestDataFrameLogicalOperators::test_logical_with_nas", - "tests/frame/test_npfuncs.py::TestAsArray::test_np_sqrt", - "tests/frame/test_query_eval.py::TestDataFrameQueryNumExprPython::test_query_numexpr_with_min_and_max_columns", - "tests/frame/test_query_eval.py::TestDataFrameQueryPythonPython::test_query_numexpr_with_min_and_max_columns", - "tests/frame/test_query_eval.py::TestDataFrameQueryWithMultiIndex::test_query_multiindex_get_index_resolvers", - "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_any_all_bool_frame[any]", - "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_any_all_np_func[all-data1-True]", - "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_any_all_np_func[any-data0-False]", - "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_idxmax_idxmin_convert_dtypes[idxmax-expected_value0]", - "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_idxmax_idxmin_convert_dtypes[idxmin-expected_value1]", - "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_operators_timedelta64", - "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_std_datetime64_with_nat[True-ms-values0]", - "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_std_datetime64_with_nat[True-s-values0]", - "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_std_datetime64_with_nat[True-us-values0]", - "tests/frame/test_reductions.py::TestDataFrameReductions::test_min_max_dt64_api_consistency_empty_df", - "tests/frame/test_reductions.py::TestDataFrameReductions::test_min_max_dt64_api_consistency_with_NaT", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-False-kurt]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-False-mean]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-False-median]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-False-skew]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-True-kurt]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-True-mean]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-True-median]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-True-skew]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-False-kurt]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-False-mean]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-False-median]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-False-skew]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-True-kurt]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-True-mean]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-True-median]", - "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-True-skew]", - "tests/frame/test_reductions.py::test_sum_timedelta64_skipna_false", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_int_level_names[False]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_int_level_names[True]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_ints[False]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_ints[True]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_mixed_levels[False]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_mixed_levels[True]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[False-labels0-data0-False]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[False-labels0-data0-True]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[False-labels1-data1-False]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[False-labels1-data1-True]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[True-labels0-data0-False]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[True-labels0-data0-True]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[True-labels1-data1-False]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[True-labels1-data1-True]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_preserve_categorical_dtype[False-False]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_preserve_categorical_dtype[False-True]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_preserve_categorical_dtype[True-False]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_preserve_categorical_dtype[True-True]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_unstack[False]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_unstack[True]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_multi_level_rows_and_cols", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_nan_index2", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_nan_index3", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_non_unique_index_names[False]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_non_unique_index_names[True]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_not_consolidated", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_swaplevel_sortlevel[0]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_swaplevel_sortlevel[baz]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_to_series", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_unused_levels", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_multi_level_stack_categorical[False]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_multi_level_stack_categorical[True]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack[False]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack[True]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_level_name[False]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_level_name[True]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_mixed_dtype[True]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_multiple_bug[False]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_multiple_bug[True]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_multiple_out_of_bounds[False]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_multiple_out_of_bounds[True]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_nan_in_multiindex_columns[False]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_nan_in_multiindex_columns[True]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_nan_level[False]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_nan_level[True]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_nullable_dtype[False]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_nullable_dtype[True]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_order_with_unsorted_levels_multi_row_2[False]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_multiple[False]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_multiple[True]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_preserve_names[False]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_preserve_names[True]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_wrong_level_name[False-unstack]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_wrong_level_name[True-unstack]", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_unstack_preserve_types", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_unstack_with_level_has_nan", - "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_unstack_with_missing_int_cast_to_float", - "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_asof", - "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_equals_subclass", - "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_frame_subclassing_and_slicing", - "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_subclass_stack_multi", - "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_subclass_stack_multi_mixed", - "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_subclass_unstack_multi", - "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_subclass_unstack_multi_mixed", - "tests/frame/test_subclass.py::test_constructor_with_metadata_from_records", - "tests/frame/test_ufunc.py::test_alignment_deprecation_enforced", - "tests/frame/test_ufunc.py::test_binary_input_aligns_index[int64]", - "tests/frame/test_unary.py::TestDataFrameUnaryOperators::test_pos_object_raises[df0]", - "tests/frame/test_unary.py::TestDataFrameUnaryOperators::test_pos_raises[df0]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_binops[1-False-add]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_binops[1-False-sub]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_binops[1-True-add]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_binops[1-True-sub]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_binops[other1-False-add]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_binops[other1-False-sub]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_binops[other1-True-add]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_binops[other1-True-sub]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_concat[objs0-kwargs0]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_concat[objs1-kwargs1]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_concat[objs2-kwargs2]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_concat[objs3-kwargs3]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_concat[objs4-kwargs4]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_concat[objs5-kwargs5]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_concat[objs6-kwargs6]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_ndframe_getitem_caching_issue", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_preserve_getitem", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_preserved_frame", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_preserved_series[absolute]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_preserved_series[func0]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_preserved_series[func1]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_preserved_series[func2]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_preserved_series[func3]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_preserved_series[func4]", - "tests/generic/test_duplicate_labels.py::TestPreserves::test_to_frame", - "tests/generic/test_duplicate_labels.py::TestRaises::test_concat_raises[objs0-kwargs0]", - "tests/generic/test_duplicate_labels.py::TestRaises::test_getitem_raises[getter0-None]", - "tests/generic/test_duplicate_labels.py::TestRaises::test_getitem_raises[getter1-loc]", - "tests/generic/test_duplicate_labels.py::TestRaises::test_getitem_raises[getter2-loc]", - "tests/generic/test_duplicate_labels.py::TestRaises::test_getitem_raises[getter3-loc]", - "tests/generic/test_duplicate_labels.py::TestRaises::test_getitem_raises[getter4-iloc]", - "tests/generic/test_duplicate_labels.py::TestRaises::test_getitem_raises[getter5-iloc]", - "tests/generic/test_duplicate_labels.py::TestRaises::test_getitem_raises[getter6-iloc]", - "tests/generic/test_duplicate_labels.py::TestRaises::test_series_raises", - "tests/generic/test_duplicate_labels.py::test_dataframe_insert_raises", - "tests/generic/test_duplicate_labels.py::test_inplace_raises[method0-True]", - "tests/generic/test_duplicate_labels.py::test_inplace_raises[method1-True]", - "tests/generic/test_duplicate_labels.py::test_inplace_raises[method2-False]", - "tests/generic/test_frame.py::TestDataFrame::test_metadata_propagation_indiv", - "tests/generic/test_generic.py::TestNDFrame::test_flags_identity[DataFrame]", - "tests/generic/test_generic.py::TestNDFrame::test_flags_identity[Series]", - "tests/generic/test_generic.py::TestNDFrame::test_numpy_transpose[DataFrame]", - "tests/generic/test_generic.py::TestNDFrame::test_transpose_frame", - "tests/generic/test_series.py::TestSeries::test_metadata_propagation_indiv", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[bool-dtype]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[bool-object]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[categorical]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[complex128]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[complex64]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[datetime-tz]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[datetime]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[float32]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[float64]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[int16]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[int32]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[int64]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[int8]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[interval]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[nullable_bool]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[nullable_float]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[nullable_int]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[nullable_uint]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[object]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[period]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[range]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[repeats]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[string-pyarrow]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[string-python]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[string]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[timedelta]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[uint16]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[uint32]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[uint64]", - "tests/generic/test_to_xarray.py::TestDataFrameToXArray::test_to_xarray_index_types[uint8]", - "tests/groupby/aggregate/test_aggregate.py::test_agg_multiple_with_as_index_false_subset_to_a_single_column", - "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[count]", - "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[first]", - "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[idxmax]", - "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[idxmin]", - "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[last]", - "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[max]", - "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[min]", - "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[nunique]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-bool-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-bool-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-float32-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-float32-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-float64-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-float64-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-int32-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-int32-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-int64-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-int64-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-bool-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-bool-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-float32-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-float32-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-float64-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-float64-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-int32-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-int32-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-int64-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-int64-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-bool-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-bool-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-float32-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-float32-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-float64-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-float64-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-int32-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-int32-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-int64-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-int64-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-bool-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-bool-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-float32-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-float32-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-float64-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-float64-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-int32-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-int32-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-int64-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-int64-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-bool-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-bool-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-float32-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-float32-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-float64-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-float64-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-int32-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-int32-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-int64-keys0-agg_index0]", - "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-int64-keys1-agg_index1]", - "tests/groupby/aggregate/test_aggregate.py::test_groupby_aggregate_directory[size]", - "tests/groupby/aggregate/test_aggregate.py::test_groupby_aggregate_empty_key_empty_return", - "tests/groupby/aggregate/test_aggregate.py::test_groupby_aggregation_multi_level_column", - "tests/groupby/aggregate/test_aggregate.py::test_multiindex_custom_func[0]", - "tests/groupby/aggregate/test_aggregate.py::test_order_aggregate_multiple_funcs", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data1-prod-large_int-False]", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data1-prod-large_int-True]", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data1-sum-large_int-False]", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data1-sum-large_int-True]", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-mean-always_float-False]", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-mean-always_float-True]", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-median-always_float-False]", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-median-always_float-True]", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-var-always_float-False]", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-var-always_float-True]", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_nullable_int[mean]", - "tests/groupby/aggregate/test_cython.py::test_cython_agg_nullable_int[median]", - "tests/groupby/aggregate/test_cython.py::test_cythonized_aggers[prod]", - "tests/groupby/aggregate/test_cython.py::test_cythonized_aggers[sum]", - "tests/groupby/aggregate/test_other.py::test_agg_over_numpy_arrays", - "tests/groupby/methods/test_describe.py::test_frame_describe_tupleindex", - "tests/groupby/methods/test_groupby_shift_diff.py::test_group_diff_bool", - "tests/groupby/methods/test_groupby_shift_diff.py::test_group_diff_real_frame[int16]", - "tests/groupby/methods/test_groupby_shift_diff.py::test_group_diff_real_frame[int8]", - "tests/groupby/methods/test_groupby_shift_diff.py::test_group_diff_real_series[int16]", - "tests/groupby/methods/test_groupby_shift_diff.py::test_group_diff_real_series[int8]", - "tests/groupby/methods/test_groupby_shift_diff.py::test_shift_periods_freq", - "tests/groupby/methods/test_nth.py::test_first_last_nth", - "tests/groupby/methods/test_nth.py::test_first_last_nth_dtypes", - "tests/groupby/methods/test_nth.py::test_groupby_last_first_nth_with_none[NoneType-nth]", - "tests/groupby/methods/test_nth.py::test_negative_step", - "tests/groupby/methods/test_nth.py::test_np_ints", - "tests/groupby/methods/test_nth.py::test_nth", - "tests/groupby/methods/test_nth.py::test_nth2", - "tests/groupby/methods/test_nth.py::test_nth3", - "tests/groupby/methods/test_nth.py::test_nth4", - "tests/groupby/methods/test_nth.py::test_nth5", - "tests/groupby/methods/test_nth.py::test_nth_after_selection[None-b]", - "tests/groupby/methods/test_nth.py::test_nth_after_selection[None-selection1]", - "tests/groupby/methods/test_nth.py::test_nth_after_selection[None-selection2]", - "tests/groupby/methods/test_nth.py::test_nth_after_selection[all-b]", - "tests/groupby/methods/test_nth.py::test_nth_after_selection[all-selection1]", - "tests/groupby/methods/test_nth.py::test_nth_after_selection[all-selection2]", - "tests/groupby/methods/test_nth.py::test_nth_after_selection[any-b]", - "tests/groupby/methods/test_nth.py::test_nth_after_selection[any-selection1]", - "tests/groupby/methods/test_nth.py::test_nth_after_selection[any-selection2]", - "tests/groupby/methods/test_nth.py::test_nth_column_order", - "tests/groupby/methods/test_nth.py::test_nth_indexed", - "tests/groupby/methods/test_nth.py::test_nth_multi_grouper", - "tests/groupby/methods/test_nth.py::test_nth_multi_index_as_expected", - "tests/groupby/methods/test_nth.py::test_nth_with_na_object[NoneType--1]", - "tests/groupby/methods/test_nth.py::test_nth_with_na_object[float0--1]", - "tests/groupby/methods/test_nth.py::test_nth_with_na_object[float1--1]", - "tests/groupby/methods/test_nth.py::test_slice[arg0-expected_rows0]", - "tests/groupby/methods/test_nth.py::test_slice[arg1-expected_rows1]", - "tests/groupby/methods/test_nth.py::test_slice[arg2-expected_rows2]", - "tests/groupby/methods/test_nth.py::test_slice[arg3-expected_rows3]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_NA_float[Float32]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_allNA_column[Float32]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Float32-higher-2-3]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Float32-lower-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Float32-nearest-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int16-higher-2-3]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int16-lower-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int16-nearest-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int32-higher-2-3]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int32-lower-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int32-nearest-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int64-higher-2-3]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int64-lower-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int64-nearest-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int8-higher-2-3]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int8-lower-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int8-nearest-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt16-higher-2-3]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt16-lower-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt16-nearest-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt32-higher-2-3]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt32-lower-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt32-nearest-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt64-higher-2-3]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt64-lower-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt64-nearest-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt8-higher-2-3]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt8-lower-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt8-nearest-2-2]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked_interp[Float32-linear]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked_interp[Float32-midpoint]", - "tests/groupby/methods/test_quantile.py::test_groupby_quantile_nonmulti_levels_order", - "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals0-b_vals0-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals0-b_vals0-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals0-b_vals0-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals1-b_vals1-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals1-b_vals1-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals1-b_vals1-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals2-b_vals2-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals2-b_vals2-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals2-b_vals2-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals0-b_vals0-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals0-b_vals0-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals0-b_vals0-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals1-b_vals1-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals1-b_vals1-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals1-b_vals1-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals2-b_vals2-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals2-b_vals2-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals2-b_vals2-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals0-b_vals0-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals0-b_vals0-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals0-b_vals0-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals1-b_vals1-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals1-b_vals1-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals2-b_vals2-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals2-b_vals2-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals0-b_vals0-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals0-b_vals0-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals0-b_vals0-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals1-b_vals1-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals1-b_vals1-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals1-b_vals1-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals2-b_vals2-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals2-b_vals2-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals2-b_vals2-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals0-b_vals0-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals0-b_vals0-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals0-b_vals0-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals1-b_vals1-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals1-b_vals1-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals1-b_vals1-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals2-b_vals2-higher]", - "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals2-b_vals2-lower]", - "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals2-b_vals2-nearest]", - "tests/groupby/methods/test_quantile.py::test_quantile_missing_group_values_correct_results[key4-val4-expected_key4-expected_val4]", - "tests/groupby/methods/test_rank.py::test_groupby_axis0_cummax_axis1", - "tests/groupby/methods/test_rank.py::test_rank_avg_even_vals[True-int32]", - "tests/groupby/methods/test_rank.py::test_rank_avg_even_vals[True-int64]", - "tests/groupby/methods/test_rank.py::test_rank_avg_even_vals[True-uint32]", - "tests/groupby/methods/test_rank.py::test_rank_avg_even_vals[True-uint64]", - "tests/groupby/methods/test_size.py::test_size_series_masked_type_returns_Int64[Float64]", - "tests/groupby/methods/test_size.py::test_size_series_masked_type_returns_Int64[Int64]", - "tests/groupby/methods/test_size.py::test_size_series_masked_type_returns_Int64[boolean]", - "tests/groupby/methods/test_size.py::test_size_sort[False-A]", - "tests/groupby/methods/test_size.py::test_size_sort[False-B]", - "tests/groupby/methods/test_size.py::test_size_sort[False-by2]", - "tests/groupby/methods/test_size.py::test_size_strings[string=string[pyarrow]]", - "tests/groupby/methods/test_size.py::test_size_strings[string[pyarrow]]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-False-None-False-count-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-False-None-True-proportion-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-True-False-False-count-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-True-False-True-proportion-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-True-True-False-count-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-True-True-True-proportion-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-False-None-False-count-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-False-None-False-count-function]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-False-None-True-proportion-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-False-None-True-proportion-function]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-True-False-False-count-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-True-False-False-count-function]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-True-False-True-proportion-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-True-False-True-proportion-function]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-True-True-False-count-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-True-True-False-count-function]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-True-True-True-proportion-array]", - "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-True-True-True-True-proportion-function]", - "tests/groupby/methods/test_value_counts.py::test_ambiguous_grouping", - "tests/groupby/methods/test_value_counts.py::test_column_label_duplicates[False-level-columns1-expected_names1]", - "tests/groupby/methods/test_value_counts.py::test_compound[False-None-expected_rows0-expected_count0-expected_group_size0-False-string[pyarrow_numpy]]", - "tests/groupby/methods/test_value_counts.py::test_compound[False-None-expected_rows0-expected_count0-expected_group_size0-True-string[pyarrow_numpy]]", - "tests/groupby/methods/test_value_counts.py::test_compound[True-False-expected_rows1-expected_count1-expected_group_size1-False-string[pyarrow_numpy]]", - "tests/groupby/methods/test_value_counts.py::test_compound[True-False-expected_rows1-expected_count1-expected_group_size1-True-string[pyarrow_numpy]]", - "tests/groupby/methods/test_value_counts.py::test_compound[True-True-expected_rows2-expected_count2-expected_group_size2-False-string[pyarrow_numpy]]", - "tests/groupby/methods/test_value_counts.py::test_compound[True-True-expected_rows2-expected_count2-expected_group_size2-True-string[pyarrow_numpy]]", - "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[NoneType-False-count-False-expected_data1-expected_index1]", - "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[NoneType-True-proportion-False-expected_data1-expected_index1]", - "tests/groupby/methods/test_value_counts.py::test_dropna_combinations[True-False-expected_rows2-expected_values2]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[False-False-False]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[False-True-False]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[False-True-True]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[True-False-True]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[True-True-True]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[False-False-False]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[False-False-True]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[False-True-False]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[False-True-True]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[True-False-False]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[True-False-True]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[True-True-False]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[True-True-True]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_time_grouper[ms-False]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_time_grouper[ns-False]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_time_grouper[s-False]", - "tests/groupby/methods/test_value_counts.py::test_value_counts_time_grouper[us-False]", - "tests/groupby/test_all_methods.py::test_duplicate_columns[cummax-False]", - "tests/groupby/test_all_methods.py::test_duplicate_columns[cummin-False]", - "tests/groupby/test_all_methods.py::test_duplicate_columns[cumprod-False]", - "tests/groupby/test_all_methods.py::test_duplicate_columns[cumsum-False]", - "tests/groupby/test_all_methods.py::test_duplicate_columns[nunique-False]", - "tests/groupby/test_all_methods.py::test_duplicate_columns[nunique-True]", - "tests/groupby/test_all_methods.py::test_duplicate_columns[rank-False]", - "tests/groupby/test_api.py::test_all_methods_categorized", - "tests/groupby/test_api.py::test_tab_completion", - "tests/groupby/test_apply.py::test_apply_concat_preserve_names", - "tests/groupby/test_apply.py::test_apply_datetime_issue[group_column_dtlike0]", - "tests/groupby/test_apply.py::test_apply_datetime_issue[group_column_dtlike1]", - "tests/groupby/test_apply.py::test_apply_frame_concat_series", - "tests/groupby/test_apply.py::test_apply_func_that_appends_group_to_list_without_copy", - "tests/groupby/test_apply.py::test_apply_index_has_complex_internals[index3]", - "tests/groupby/test_apply.py::test_apply_index_key_error_bug[index_values0]", - "tests/groupby/test_apply.py::test_apply_index_key_error_bug[index_values1]", - "tests/groupby/test_apply.py::test_apply_multiindex_fail", - "tests/groupby/test_apply.py::test_apply_nonmonotonic_float_index[arg0-idx0]", - "tests/groupby/test_apply.py::test_apply_nonmonotonic_float_index[arg2-idx2]", - "tests/groupby/test_apply.py::test_apply_with_date_in_multiindex_does_not_convert_to_timestamp", - "tests/groupby/test_apply.py::test_builtins_apply[jim-max]", - "tests/groupby/test_apply.py::test_builtins_apply[jim-min]", - "tests/groupby/test_apply.py::test_builtins_apply[keys1-max]", - "tests/groupby/test_apply.py::test_builtins_apply[keys1-min]", - "tests/groupby/test_apply.py::test_empty_df[agg-prod]", - "tests/groupby/test_apply.py::test_empty_df[agg-skew]", - "tests/groupby/test_apply.py::test_empty_df[agg-sum]", - "tests/groupby/test_apply.py::test_empty_df[apply-0]", - "tests/groupby/test_apply.py::test_empty_df[apply-1]", - "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH10519]", - "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH12155]", - "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH20084]", - "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH21417]", - "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH2656]", - "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH2936]", - "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH7739 & GH10519]", - "tests/groupby/test_apply.py::test_groupby_apply_all_none", - "tests/groupby/test_apply.py::test_groupby_apply_none_first", - "tests/groupby/test_apply.py::test_groupby_as_index_apply", - "tests/groupby/test_apply.py::test_time_field_bug", - "tests/groupby/test_apply_mutate.py::test_apply_function_with_indexing", - "tests/groupby/test_categorical.py::test_agg_list[False-True-count-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-first-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-idxmax-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-idxmin-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-last-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-max-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-mean-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-median-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-min-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-nunique-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-nunique-keys1-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-prod-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-size-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-std-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-sum-keys0-True]", - "tests/groupby/test_categorical.py::test_agg_list[False-True-var-keys0-True]", - "tests/groupby/test_categorical.py::test_as_index", - "tests/groupby/test_categorical.py::test_category_order_apply[False-False-True-False-apply-range]", - "tests/groupby/test_categorical.py::test_category_order_apply[False-False-True-True-apply-range]", - "tests/groupby/test_categorical.py::test_category_order_apply[False-True-True-False-apply-range]", - "tests/groupby/test_categorical.py::test_category_order_apply[False-True-True-True-apply-range]", - "tests/groupby/test_categorical.py::test_describe_categorical_columns", - "tests/groupby/test_categorical.py::test_groupby_categorical_observed_nunique", - "tests/groupby/test_categorical.py::test_observed[False]", - "tests/groupby/test_categorical.py::test_observed_codes_remap[False]", - "tests/groupby/test_categorical.py::test_sort_datetimelike[False-False]", - "tests/groupby/test_categorical.py::test_sort_datetimelike[True-False]", - "tests/groupby/test_categorical.py::test_unstack_categorical", - "tests/groupby/test_counting.py::TestCounting::test_ngroup_distinct", - "tests/groupby/test_counting.py::test_count_arrow_string_array[string=string[pyarrow]]", - "tests/groupby/test_counting.py::test_count_arrow_string_array[string=string[python]]", - "tests/groupby/test_counting.py::test_count_arrow_string_array[string[pyarrow]]", - "tests/groupby/test_counting.py::test_count_arrow_string_array[string[pyarrow_numpy]]", - "tests/groupby/test_counting.py::test_count_arrow_string_array[string[python]]", - "tests/groupby/test_cumulative.py::test_cummin_max_all_nan_column[boolean-cummax]", - "tests/groupby/test_cumulative.py::test_cummin_max_all_nan_column[boolean-cummin]", - "tests/groupby/test_cumulative.py::test_cython_api2", - "tests/groupby/test_cumulative.py::test_groupby_cumprod_nan_influences_other_columns", - "tests/groupby/test_cumulative.py::test_numpy_compat[cumprod]", - "tests/groupby/test_cumulative.py::test_numpy_compat[cumsum]", - "tests/groupby/test_groupby.py::test_as_index_select_column", - "tests/groupby/test_groupby.py::test_basic_aggregations[int32]", - "tests/groupby/test_groupby.py::test_frame_groupby_columns", - "tests/groupby/test_groupby.py::test_group_name_available_in_inference_pass", - "tests/groupby/test_groupby.py::test_group_on_two_row_multiindex_returns_one_tuple_key", - "tests/groupby/test_groupby.py::test_groupby_all_nan_groups_drop", - "tests/groupby/test_groupby.py::test_groupby_column_index_name_lost[shift]", - "tests/groupby/test_groupby.py::test_groupby_column_index_name_lost[sum]", - "tests/groupby/test_groupby.py::test_groupby_crash_on_nunique[axis='index']", - "tests/groupby/test_groupby.py::test_groupby_crash_on_nunique[axis=0]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Float32-False-val1]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Float64-False-val1]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int16-False-val1]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int16-True-3]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int32-False-val1]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int32-True-3]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int64-False-val1]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int8-False-val1]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int8-True-3]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt16-False-val1]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt16-True-3]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt32-False-val1]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt32-True-3]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt64-False-val1]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt64-True-3]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt8-False-val1]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt8-True-3]", - "tests/groupby/test_groupby.py::test_groupby_cumsum_skipna_false", - "tests/groupby/test_groupby.py::test_groupby_cumsum_timedelta64", - "tests/groupby/test_groupby.py::test_groupby_dtype_inference_empty", - "tests/groupby/test_groupby.py::test_groupby_groups_in_BaseGrouper", - "tests/groupby/test_groupby.py::test_groupby_level_mapper", - "tests/groupby/test_groupby.py::test_groupby_level_nonmulti", - "tests/groupby/test_groupby.py::test_groupby_multiindex_not_lexsorted", - "tests/groupby/test_groupby.py::test_groupby_nonobject_dtype", - "tests/groupby/test_groupby.py::test_groupby_nonstring_columns", - "tests/groupby/test_groupby.py::test_groupby_numerical_stability_cumsum", - "tests/groupby/test_groupby.py::test_groupby_numerical_stability_sum_mean[mean-values1]", - "tests/groupby/test_groupby.py::test_groupby_numerical_stability_sum_mean[sum-values0]", - "tests/groupby/test_groupby.py::test_groupby_one_row", - "tests/groupby/test_groupby.py::test_groupby_overflow[222-uint]", - "tests/groupby/test_groupby.py::test_groupby_series_with_name", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int16-prod-2]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int16-sum-3]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int32-prod-2]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int32-sum-3]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int8-prod-2]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int8-sum-3]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt16-prod-2]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt16-sum-3]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt32-prod-2]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt32-sum-3]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt64-prod-2]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt64-sum-3]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt8-prod-2]", - "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt8-sum-3]", - "tests/groupby/test_groupby.py::test_groupby_with_Time_Grouper[ms]", - "tests/groupby/test_groupby.py::test_groupby_with_Time_Grouper[ns]", - "tests/groupby/test_groupby.py::test_groupby_with_Time_Grouper[s]", - "tests/groupby/test_groupby.py::test_groupby_with_Time_Grouper[us]", - "tests/groupby/test_groupby.py::test_groupby_with_hier_columns", - "tests/groupby/test_groupby.py::test_groups_repr_truncates[1-{0: [0], ...}]", - "tests/groupby/test_groupby.py::test_groups_repr_truncates[4-{0: [0], 1: [1], 2: [2], 3: [3], ...}]", - "tests/groupby/test_groupby.py::test_groups_repr_truncates[5-{0: [0], 1: [1], 2: [2], 3: [3], 4: [4]}]", - "tests/groupby/test_groupby.py::test_handle_dict_return_value", - "tests/groupby/test_groupby.py::test_indices_concatenation_order", - "tests/groupby/test_groupby.py::test_len_nan_group", - "tests/groupby/test_groupby.py::test_ops_not_as_index[idxmin]", - "tests/groupby/test_groupby.py::test_ops_not_as_index[size]", - "tests/groupby/test_groupby.py::test_single_element_list_grouping[a]", - "tests/groupby/test_groupby.py::test_wrap_aggregated_output_multindex", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[count-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[count-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[count-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[count-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[first-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[first-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[first-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[first-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmax-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmax-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmax-True-False-True-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmax-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmax-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmax-True-True-True-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmin-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmin-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmin-True-False-True-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmin-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmin-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmin-True-True-True-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[last-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[last-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[last-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[last-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[max-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[max-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[max-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[max-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[mean-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[mean-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[mean-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[mean-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[median-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[median-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[median-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[median-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[min-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[min-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[min-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[min-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[nunique-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[nunique-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[nunique-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[nunique-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[prod-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[prod-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[prod-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[prod-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[quantile-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[quantile-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[quantile-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[quantile-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[std-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[std-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[std-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[std-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[sum-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[sum-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[sum-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[sum-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[var-True-False-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[var-True-False-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[var-True-True-False-multi]", - "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[var-True-True-False-single]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumcount-True-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumcount-True-False-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumcount-True-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumcount-True-True-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cummax-True-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cummax-True-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cummin-True-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cummin-True-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumprod-True-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumprod-True-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumsum-True-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumsum-True-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-False-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-False-False-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-False-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-False-True-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-True-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-True-False-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-True-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-True-True-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[ngroup-True-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[ngroup-True-False-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[ngroup-True-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[ngroup-True-True-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[pct_change-True-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[pct_change-True-False-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[pct_change-True-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[pct_change-True-True-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[rank-True-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[rank-True-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-False-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-False-False-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-False-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-False-True-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-True-False-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-True-False-True]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-True-True-False]", - "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-True-True-True]", - "tests/groupby/test_groupby_dropna.py::test_groupby_apply_with_dropna_for_multi_index[dropna_false_no_nan]", - "tests/groupby/test_groupby_dropna.py::test_groupby_apply_with_dropna_for_multi_index[dropna_true_no_nan]", - "tests/groupby/test_groupby_dropna.py::test_groupby_dropna_multi_index_dataframe_agg[False-tuples1-outputs1]", - "tests/groupby/test_groupby_dropna.py::test_groupby_dropna_multi_index_dataframe_nan_in_one_group[NoneType-False-tuples1-outputs1]", - "tests/groupby/test_groupby_dropna.py::test_groupby_dropna_multi_index_dataframe_nan_in_two_groups[NoneType-NoneType-False-tuples1-outputs1]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-Decimal-Decimal-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-Decimal-Decimal-None-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-Decimal-Decimal-object-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-Decimal-Decimal-object-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-NoneType-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-NoneType-None-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-float0-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-float0-None-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-float1-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-float1-None-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-float0-NoneType-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-float0-NoneType-None-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-float1-NoneType-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-float1-NoneType-None-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-Decimal-Decimal-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-Decimal-Decimal-None-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-Decimal-Decimal-object-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-Decimal-Decimal-object-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-NoneType-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-NoneType-None-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-float0-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-float0-None-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-float1-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-float1-None-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-float0-NoneType-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-float0-NoneType-None-True]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-float1-NoneType-None-False]", - "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-float1-NoneType-None-True]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_metadata", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[all-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[any-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[bfill-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[corrwith-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[corrwith-obj1]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[count-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[cumcount-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[cummax-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[cummin-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[cumprod-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[cumsum-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[diff-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[ffill-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[fillna-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[first-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[idxmax-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[idxmin-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[last-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[max-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[mean-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[median-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[min-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[ngroup-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[nunique-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[pct_change-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[prod-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[quantile-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[rank-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[sem-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[shift-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[size-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[skew-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[std-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[sum-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[var-obj0]", - "tests/groupby/test_groupby_subclass.py::test_groupby_resample_preserves_subclass[DataFrame]", - "tests/groupby/test_grouping.py::TestGetGroup::test_get_group_grouped_by_tuple", - "tests/groupby/test_grouping.py::TestGetGroup::test_get_group_grouped_by_tuple_with_lambda", - "tests/groupby/test_grouping.py::TestGetGroup::test_groupby_with_single_column", - "tests/groupby/test_grouping.py::TestGrouping::test_evaluate_with_empty_groups[agg-expected1]", - "tests/groupby/test_grouping.py::TestGrouping::test_evaluate_with_empty_groups[apply-expected2]", - "tests/groupby/test_grouping.py::TestGrouping::test_groupby_level[False]", - "tests/groupby/test_grouping.py::TestGrouping::test_groupby_level[True]", - "tests/groupby/test_grouping.py::TestGrouping::test_groupby_level_index_value_all_na", - "tests/groupby/test_grouping.py::TestGrouping::test_groupby_multiindex_partial_indexing_equivalence", - "tests/groupby/test_grouping.py::TestGrouping::test_grouper_getting_correct_binner", - "tests/groupby/test_grouping.py::TestGrouping::test_multiindex_columns_empty_level", - "tests/groupby/test_grouping.py::TestGrouping::test_multiindex_negative_level", - "tests/groupby/test_grouping.py::TestSelection::test_indices_grouped_by_tuple_with_lambda", - "tests/groupby/test_grouping.py::test_grouper_groups", - "tests/groupby/test_grouping.py::test_grouping_by_key_is_in_axis", - "tests/groupby/test_indexing.py::test_multiindex", - "tests/groupby/test_missing.py::test_ffill_handles_nan_groups[False-False-bfill]", - "tests/groupby/test_missing.py::test_ffill_handles_nan_groups[False-False-ffill]", - "tests/groupby/test_missing.py::test_ffill_handles_nan_groups[False-True-bfill]", - "tests/groupby/test_missing.py::test_ffill_handles_nan_groups[False-True-ffill]", - "tests/groupby/test_missing.py::test_groupby_column_index_name_lost_fill_funcs[bfill]", - "tests/groupby/test_missing.py::test_groupby_column_index_name_lost_fill_funcs[ffill]", - "tests/groupby/test_missing.py::test_indices_with_missing", - "tests/groupby/test_reductions.py::test_empty_categorical[True]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Float32-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Float32-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Float32-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Float32-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Float64-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Float64-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Float64-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Float64-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int16-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int16-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int16-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int16-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int32-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int32-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int32-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int32-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int64-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int64-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int64-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int64-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int8-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int8-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int8-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[Int8-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt16-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt16-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt16-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt16-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt32-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt32-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt32-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt32-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt64-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt64-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt64-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt64-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt8-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt8-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt8-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[UInt8-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[double[pyarrow]-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[double[pyarrow]-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[double[pyarrow]-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[double[pyarrow]-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float32-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float32-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float32-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float32-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float64-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float64-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float64-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float64-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float[pyarrow]-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float[pyarrow]-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float[pyarrow]-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[float[pyarrow]-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int16[pyarrow]-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int16[pyarrow]-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int16[pyarrow]-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int16[pyarrow]-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int32[pyarrow]-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int32[pyarrow]-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int32[pyarrow]-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int32[pyarrow]-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int64[pyarrow]-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int64[pyarrow]-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int64[pyarrow]-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int64[pyarrow]-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int8[pyarrow]-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int8[pyarrow]-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int8[pyarrow]-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[int8[pyarrow]-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint16[pyarrow]-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint16[pyarrow]-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint16[pyarrow]-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint16[pyarrow]-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint32[pyarrow]-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint32[pyarrow]-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint32[pyarrow]-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint32[pyarrow]-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint64[pyarrow]-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint64[pyarrow]-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint64[pyarrow]-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint64[pyarrow]-True-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint8[pyarrow]-False-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint8[pyarrow]-False-False-last]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint8[pyarrow]-True-False-first]", - "tests/groupby/test_reductions.py::test_first_last_skipna[uint8[pyarrow]-True-False-last]", - "tests/groupby/test_reductions.py::test_groupby_mean_no_overflow", - "tests/groupby/test_reductions.py::test_groupby_sum_mincount_boolean[0]", - "tests/groupby/test_reductions.py::test_idxmin_idxmax_axis1", - "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float-idxmax]", - "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float-idxmin]", - "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float32-idxmax]", - "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float32-idxmin]", - "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float64-idxmax]", - "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float64-idxmin]", - "tests/groupby/test_reductions.py::test_masked_kleene_logic[False-data2-any]", - "tests/groupby/test_reductions.py::test_masked_kleene_logic[False-data3-any]", - "tests/groupby/test_reductions.py::test_nunique", - "tests/groupby/test_reductions.py::test_nunique_with_NaT[key0-data0-True-expected0]", - "tests/groupby/test_reductions.py::test_nunique_with_NaT[key1-data1-True-expected1]", - "tests/groupby/test_reductions.py::test_nunique_with_NaT[key2-data2-False-expected2]", - "tests/groupby/test_reductions.py::test_nunique_with_NaT[key3-data3-False-expected3]", - "tests/groupby/test_reductions.py::test_nunique_with_empty_series", - "tests/groupby/test_reductions.py::test_nunique_with_object", - "tests/groupby/test_reductions.py::test_nunique_with_timegrouper", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-all-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-all-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-any-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-any-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-count-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-count-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-count-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-count-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-first-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-first-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-idxmax-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-idxmax-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-idxmax-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-idxmax-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-idxmin-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-idxmin-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-idxmin-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-idxmin-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-last-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-last-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-max-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-max-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-min-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-min-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-nunique-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-nunique-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-nunique-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-nunique-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-sum-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-sum-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-all-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-all-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-any-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-any-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-count-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-count-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-count-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-count-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-first-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-first-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-idxmax-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-idxmax-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-idxmax-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-idxmax-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-idxmin-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-idxmin-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-idxmin-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-idxmin-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-last-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-last-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-max-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-max-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-min-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-min-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-nunique-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-nunique-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-nunique-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-nunique-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-sum-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-sum-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-all-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-all-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-any-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-any-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-count-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-count-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-count-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-count-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-first-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-first-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-idxmax-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-idxmax-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-idxmax-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-idxmax-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-idxmin-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-idxmin-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-idxmin-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-idxmin-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-last-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-last-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-max-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-max-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-min-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-min-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-nunique-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-nunique-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-nunique-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-nunique-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-size-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-size-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-sum-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-sum-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-all-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-all-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-any-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-any-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-count-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-count-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-count-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-count-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-first-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-first-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-idxmax-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-idxmax-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-idxmax-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-idxmax-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-idxmin-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-idxmin-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-idxmin-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-idxmin-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-last-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-last-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-max-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-max-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-min-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-min-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-nunique-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-nunique-False-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-nunique-True-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-nunique-True-1]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-sum-False-0]", - "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-sum-False-1]", - "tests/groupby/test_timegrouper.py::TestGroupBy::test_groupby_datetime64_32_bit", - "tests/groupby/test_timegrouper.py::TestGroupBy::test_groupby_with_timegrouper", - "tests/groupby/test_timegrouper.py::TestGroupBy::test_scalar_call_versus_list_call", - "tests/groupby/test_timegrouper.py::TestGroupBy::test_timegrouper_apply_return_type_series", - "tests/groupby/test_timegrouper.py::TestGroupBy::test_timegrouper_with_reg_groups", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumcount-A]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumcount-keys1]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[cummax-A]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[cummax-keys1]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[cummin-A]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[cummin-keys1]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumprod-A]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumprod-keys1]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumsum-A]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumsum-keys1]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[nunique-A]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[nunique-keys1]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[size-A]", - "tests/groupby/transform/test_transform.py::test_as_index_no_change[size-keys1]", - "tests/groupby/transform/test_transform.py::test_cython_transform_series[cumprod-args0-]", - "tests/groupby/transform/test_transform.py::test_cython_transform_series[cumsum-args1-]", - "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[False-idxmax]", - "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[False-idxmin]", - "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[False-nunique]", - "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[False-size]", - "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[True-idxmax]", - "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[True-idxmin]", - "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[True-size]", - "tests/groupby/transform/test_transform.py::test_null_group_str_transformer[False-cumcount]", - "tests/groupby/transform/test_transform.py::test_null_group_str_transformer[True-cumcount]", - "tests/groupby/transform/test_transform.py::test_transform_cumcount", - "tests/groupby/transform/test_transform.py::test_transform_datetime_to_timedelta", - "tests/groupby/transform/test_transform.py::test_transform_fast", - "tests/groupby/transform/test_transform.py::test_transform_mixed_type", - "tests/groupby/transform/test_transform.py::test_transform_numeric_ret[count-a-expected0]", - "tests/groupby/transform/test_transform.py::test_transform_numeric_ret[count-cols1-expected1]", - "tests/groupby/transform/test_transform.py::test_transform_numeric_ret[size-a-expected0]", - "tests/groupby/transform/test_transform.py::test_transform_numeric_ret[size-cols1-expected1]", - "tests/groupby/transform/test_transform.py::test_transform_transformation_func[cumcount]", - "tests/indexes/base_class/test_constructors.py::TestIndexConstructor::test_index_string_inference", - "tests/indexes/base_class/test_reshape.py::TestReshape::test_insert_missing[Decimal]", - "tests/indexes/categorical/test_astype.py::TestAstype::test_categorical_date_roundtrip[False]", - "tests/indexes/categorical/test_astype.py::TestAstype::test_categorical_date_roundtrip[True]", - "tests/indexes/categorical/test_category.py::TestCategoricalIndex2::test_engine_type[int16-Int16Engine]", - "tests/indexes/categorical/test_category.py::TestCategoricalIndex2::test_engine_type[int32-Int32Engine]", - "tests/indexes/categorical/test_category.py::TestCategoricalIndex2::test_engine_type[int64-Int64Engine]", - "tests/indexes/categorical/test_category.py::TestCategoricalIndex2::test_engine_type[int8-Int8Engine]", - "tests/indexes/categorical/test_category.py::TestCategoricalIndex2::test_remove_maintains_order", - "tests/indexes/categorical/test_category.py::TestCategoricalIndex::test_ensure_copied_data", - "tests/indexes/categorical/test_category.py::TestCategoricalIndex::test_is_monotonic[data0-non_lexsorted_data0]", - "tests/indexes/categorical/test_category.py::TestCategoricalIndex::test_is_monotonic[data1-non_lexsorted_data1]", - "tests/indexes/categorical/test_constructors.py::TestCategoricalIndexConstructors::test_construction", - "tests/indexes/categorical/test_constructors.py::TestCategoricalIndexConstructors::test_construction_disallows_scalar", - "tests/indexes/categorical/test_equals.py::TestEquals::test_equals_string_dtype[string=str[pyarrow]]", - "tests/indexes/categorical/test_equals.py::TestEquals::test_equals_string_dtype[string=str[python]]", - "tests/indexes/categorical/test_equals.py::TestEquals::test_equals_string_dtype[string=string[pyarrow]]", - "tests/indexes/categorical/test_equals.py::TestEquals::test_equals_string_dtype[string=string[python]]", - "tests/indexes/categorical/test_equals.py::TestEquals::test_equals_string_dtype[string[pyarrow]]", - "tests/indexes/categorical/test_equals.py::TestEquals::test_equals_string_dtype[string[pyarrow_numpy]]", - "tests/indexes/categorical/test_equals.py::TestEquals::test_equals_string_dtype[string[python]]", - "tests/indexes/categorical/test_fillna.py::TestFillNA::test_fillna_copies_with_no_nas", - "tests/indexes/categorical/test_indexing.py::TestContains::test_contains_na_dtype[False]", - "tests/indexes/categorical/test_indexing.py::TestContains::test_contains_nan", - "tests/indexes/categorical/test_indexing.py::TestWhere::test_where_non_categories", - "tests/indexes/datetimelike_/test_equals.py::TestDatetimeIndexEquals::test_equals2", - "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values[DatetimeIndex]", - "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values[TimedeltaIndex]", - "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_with_freq_periodindex2[idx1]", - "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_datetimeindex[None-index_dates0-expected_dates0]", - "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_datetimeindex[None-index_dates1-expected_dates1]", - "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_datetimeindex[None-index_dates2-expected_dates2]", - "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_periodindex[idx4-expected4]", - "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_timedeltaindex", - "tests/indexes/datetimelike_/test_sort_values.py::test_order_stability_compat", - "tests/indexes/datetimes/methods/test_astype.py::TestDatetimeIndex::test_astype", - "tests/indexes/datetimes/methods/test_astype.py::TestDatetimeIndex::test_astype_datetime64", - "tests/indexes/datetimes/methods/test_astype.py::TestDatetimeIndex::test_astype_raises[float]", - "tests/indexes/datetimes/methods/test_astype.py::TestDatetimeIndex::test_astype_str_nat", - "tests/indexes/datetimes/methods/test_astype.py::TestDatetimeIndex::test_astype_uint", - "tests/indexes/datetimes/methods/test_factorize.py::TestDatetimeIndexFactorize::test_factorize_tz[zoneinfo.ZoneInfo(key='US/Pacific')-index]", - "tests/indexes/datetimes/methods/test_factorize.py::TestDatetimeIndexFactorize::test_factorize_tz[zoneinfo.ZoneInfo(key='US/Pacific')-series]", - "tests/indexes/datetimes/methods/test_isocalendar.py::test_dti_timestamp_isocalendar_fields", - "tests/indexes/datetimes/methods/test_round.py::TestDatetimeIndexRound::test_round_daily", - "tests/indexes/datetimes/methods/test_unique.py::test_index_unique2", - "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_construction_outofbounds", - "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_constructor_coverage", - "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_constructor_datetime64_tzformat[W-SUN]", - "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_dti_date_out_of_range[data1]", - "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_constructor_int64_nocopy", - "tests/indexes/datetimes/test_date_range.py::TestDateRangeNonTickFreq::test_date_range_freqstr_matches_offset[W-SUN-offset2]", - "tests/indexes/datetimes/test_date_range.py::TestDateRangeTZ::test_date_range_with_fixed_tz", - "tests/indexes/datetimes/test_date_range.py::TestDateRangeTZ::test_date_range_with_fixedoffset_noname", - "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_date_range_unsigned_overflow_handling", - "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_range_tz_dateutil", - "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_range_tz_pytz", - "tests/indexes/datetimes/test_date_range.py::TestGenRangeGeneration::test_precision_finer_than_offset", - "tests/indexes/datetimes/test_datetime.py::TestDatetimeIndex::test_misc_coverage", - "tests/indexes/datetimes/test_formats.py::TestFormat::test_format", - "tests/indexes/datetimes/test_indexing.py::TestGetItem::test_getitem[None]", - "tests/indexes/datetimes/test_indexing.py::TestTake::test_take2[None]", - "tests/indexes/datetimes/test_indexing.py::TestTake::test_take[None]", - "tests/indexes/datetimes/test_indexing.py::TestWhere::test_where_invalid_dtypes", - "tests/indexes/datetimes/test_join.py::TestJoin::test_join_preserves_freq[None]", - "tests/indexes/datetimes/test_join.py::TestJoin::test_join_self[inner]", - "tests/indexes/datetimes/test_join.py::TestJoin::test_join_self[left]", - "tests/indexes/datetimes/test_join.py::TestJoin::test_join_self[outer]", - "tests/indexes/datetimes/test_join.py::TestJoin::test_join_self[right]", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[2018-12-02 21:52:00+00:00-2018-12-02 21:50:00+00:00]", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[2018-12-02 21:52:00+00:00-start1]", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[2018-12-02 21:52:00+00:00-start2]", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end1-2018-12-02 21:50:00+00:00]", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end1-start1]", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end1-start2]", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end2-2018-12-02 21:50:00+00:00]", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end2-start1]", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end2-start2]", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_partial_slice_daily", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_partial_slice_minutely", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_partial_slicing_dataframe", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_return_type_doesnt_depend_on_monotonicity", - "tests/indexes/datetimes/test_scalar_compat.py::TestDatetimeIndexOps::test_day_name_month_name[None]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_difference_freq[False]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_difference_freq[None]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[False-Asia/Tokyo]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[False-None]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[False-US/Eastern]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[False-dateutil/US/Pacific]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[None-Asia/Tokyo]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[None-None]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[None-US/Eastern]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[None-dateutil/US/Pacific]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection_empty[zoneinfo.ZoneInfo(key='US/Pacific')-min]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection_empty[zoneinfo.ZoneInfo(key='UTC')-min]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_setops_preserve_freq[None]", - "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_union_freq_infer", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_float[index0]", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_float[index1]", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_float[index3]", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_float[index4]", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index0-int64]", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index0-uint64]", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index1-int64]", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index1-uint64]", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index3-int64]", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index3-uint64]", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index4-int64]", - "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index4-uint64]", - "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_datetimelike[index0-datetime64[ns]]", - "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_datetimelike[index0-timedelta64[ns]]", - "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_datetimelike[index1-datetime64[ns]]", - "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_datetimelike[index1-timedelta64[ns]]", - "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_integer[int64]", - "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_integer[uint64]", - "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_integer_errors", - "tests/indexes/interval/test_constructors.py::TestClassConstructors::test_constructor_pass_closed[breaks0]", - "tests/indexes/interval/test_constructors.py::TestClassConstructors::test_constructor_pass_closed[breaks2]", - "tests/indexes/interval/test_constructors.py::TestClassConstructors::test_constructor_pass_closed[breaks3]", - "tests/indexes/interval/test_constructors.py::TestClassConstructors::test_constructor_pass_closed[breaks4]", - "tests/indexes/interval/test_constructors.py::TestFromArrays::test_constructor_pass_closed[breaks0]", - "tests/indexes/interval/test_constructors.py::TestFromArrays::test_constructor_pass_closed[breaks1]", - "tests/indexes/interval/test_constructors.py::TestFromArrays::test_constructor_pass_closed[breaks2]", - "tests/indexes/interval/test_constructors.py::TestFromArrays::test_constructor_pass_closed[breaks3]", - "tests/indexes/interval/test_constructors.py::TestFromArrays::test_constructor_pass_closed[breaks4]", - "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_constructor_pass_closed[breaks0]", - "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_constructor_pass_closed[breaks1]", - "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_constructor_pass_closed[breaks2]", - "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_constructor_pass_closed[breaks3]", - "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_constructor_pass_closed[breaks4]", - "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_generic_errors", - "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_left_right_dont_share_data", - "tests/indexes/interval/test_constructors.py::TestFromTuples::test_constructor_pass_closed[breaks0]", - "tests/indexes/interval/test_constructors.py::TestFromTuples::test_constructor_pass_closed[breaks2]", - "tests/indexes/interval/test_constructors.py::TestFromTuples::test_constructor_pass_closed[breaks3]", - "tests/indexes/interval/test_constructors.py::TestFromTuples::test_constructor_pass_closed[breaks4]", - "tests/indexes/interval/test_indexing.py::TestGetIndexer::test_get_indexer_categorical_with_nans", - "tests/indexes/interval/test_indexing.py::TestGetIndexer::test_get_indexer_datetime", - "tests/indexes/interval/test_indexing.py::TestGetLoc::test_get_loc_datetimelike_overlapping[datetime64[ns]]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_comparison", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_ensure_copied_data[both]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_ensure_copied_data[left]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_ensure_copied_data[neither]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_ensure_copied_data[right]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_insert[data0]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[both-breaks4]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[left-breaks4]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[neither-breaks4]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[right-breaks4]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_monotonic[both]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_monotonic[left]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_monotonic[neither]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_monotonic[right]", - "tests/indexes/interval/test_interval.py::test_dir", - "tests/indexes/interval/test_interval_range.py::TestIntervalRange::test_interval_range_fractional_period", - "tests/indexes/multi/test_analytics.py::test_map_dictlike[1]", - "tests/indexes/multi/test_astype.py::test_astype", - "tests/indexes/multi/test_compat.py::test_inplace_mutation_resets_values", - "tests/indexes/multi/test_constructors.py::test_create_index_existing_name", - "tests/indexes/multi/test_constructors.py::test_from_arrays_respects_none_names", - "tests/indexes/multi/test_constructors.py::test_from_frame_dtype_fidelity", - "tests/indexes/multi/test_constructors.py::test_from_frame_missing_values_multiIndex", - "tests/indexes/multi/test_constructors.py::test_multiindex_inference_consistency", - "tests/indexes/multi/test_conversion.py::test_to_frame_dtype_fidelity", - "tests/indexes/multi/test_copy.py::test_copy", - "tests/indexes/multi/test_copy.py::test_copy_deep_false_retains_id", - "tests/indexes/multi/test_copy.py::test_shallow_copy", - "tests/indexes/multi/test_copy.py::test_view", - "tests/indexes/multi/test_drop.py::test_drop_not_lexsorted", - "tests/indexes/multi/test_drop.py::test_droplevel_list", - "tests/indexes/multi/test_drop.py::test_droplevel_multiindex_one_level", - "tests/indexes/multi/test_duplicates.py::test_duplicate_multiindex_codes", - "tests/indexes/multi/test_equivalence.py::test_equals_multi", - "tests/indexes/multi/test_equivalence.py::test_equals_op", - "tests/indexes/multi/test_equivalence.py::test_is_", - "tests/indexes/multi/test_equivalence.py::test_multiindex_compare", - "tests/indexes/multi/test_formats.py::TestRepr::test_rjust", - "tests/indexes/multi/test_formats.py::TestRepr::test_tuple_width", - "tests/indexes/multi/test_get_set.py::test_set_levels_categorical[False]", - "tests/indexes/multi/test_get_set.py::test_set_levels_categorical[True]", - "tests/indexes/multi/test_get_set.py::test_set_name_methods", - "tests/indexes/multi/test_indexing.py::TestContains::test_contains", - "tests/indexes/multi/test_indexing.py::TestContains::test_contains_with_missing_value", - "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer", - "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer_crossing_levels", - "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer_kwarg_validation", - "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer_methods", - "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer_nan", - "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer_three_or_more_levels", - "tests/indexes/multi/test_indexing.py::TestGetLoc::test_get_loc", - "tests/indexes/multi/test_indexing.py::TestGetLoc::test_get_loc_duplicates2", - "tests/indexes/multi/test_indexing.py::TestGetLoc::test_get_loc_past_lexsort_depth", - "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[Decimal]", - "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[NAType]", - "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[NaTType]", - "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[NoneType]", - "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[float0]", - "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[float1]", - "tests/indexes/multi/test_indexing.py::test_getitem", - "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_all[ind20-ind10]", - "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_all[ind20-ind11]", - "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_all[ind21-ind10]", - "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_all[ind21-ind11]", - "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_single[ind20-ind10]", - "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_single[ind20-ind11]", - "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_single[ind21-ind10]", - "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_single[ind21-ind11]", - "tests/indexes/multi/test_indexing.py::test_getitem_group_select", - "tests/indexes/multi/test_integrity.py::test_labels_dtypes", - "tests/indexes/multi/test_integrity.py::test_metadata_immutable", - "tests/indexes/multi/test_isin.py::test_isin_level_kwarg", - "tests/indexes/multi/test_join.py::test_join_dtypes[Float32-0]", - "tests/indexes/multi/test_join.py::test_join_dtypes[Float32-5]", - "tests/indexes/multi/test_join.py::test_join_dtypes[Float64-0]", - "tests/indexes/multi/test_join.py::test_join_dtypes[Float64-5]", - "tests/indexes/multi/test_join.py::test_join_dtypes[Int16-0]", - "tests/indexes/multi/test_join.py::test_join_dtypes[Int16-5]", - "tests/indexes/multi/test_join.py::test_join_dtypes[Int32-0]", - "tests/indexes/multi/test_join.py::test_join_dtypes[Int32-5]", - "tests/indexes/multi/test_join.py::test_join_dtypes[Int64-0]", - "tests/indexes/multi/test_join.py::test_join_dtypes[Int64-5]", - "tests/indexes/multi/test_join.py::test_join_dtypes[Int8-0]", - "tests/indexes/multi/test_join.py::test_join_dtypes[Int8-5]", - "tests/indexes/multi/test_join.py::test_join_dtypes[UInt16-0]", - "tests/indexes/multi/test_join.py::test_join_dtypes[UInt16-5]", - "tests/indexes/multi/test_join.py::test_join_dtypes[UInt32-0]", - "tests/indexes/multi/test_join.py::test_join_dtypes[UInt32-5]", - "tests/indexes/multi/test_join.py::test_join_dtypes[UInt64-0]", - "tests/indexes/multi/test_join.py::test_join_dtypes[UInt64-5]", - "tests/indexes/multi/test_join.py::test_join_dtypes[UInt8-0]", - "tests/indexes/multi/test_join.py::test_join_dtypes[UInt8-5]", - "tests/indexes/multi/test_join.py::test_join_index_levels", - "tests/indexes/multi/test_join.py::test_join_midx_ea", - "tests/indexes/multi/test_join.py::test_join_midx_string", - "tests/indexes/multi/test_join.py::test_join_multi_return_indexers", - "tests/indexes/multi/test_join.py::test_join_overlapping_interval_level", - "tests/indexes/multi/test_join.py::test_join_self[inner]", - "tests/indexes/multi/test_join.py::test_join_self[left]", - "tests/indexes/multi/test_join.py::test_join_self[outer]", - "tests/indexes/multi/test_join.py::test_join_self[right]", - "tests/indexes/multi/test_missing.py::test_dropna", - "tests/indexes/multi/test_missing.py::test_nulls", - "tests/indexes/multi/test_names.py::test_copy_names", - "tests/indexes/multi/test_names.py::test_setting_names_from_levels_raises", - "tests/indexes/multi/test_reindex.py::test_reindex_base", - "tests/indexes/multi/test_reshape.py::test_append_names_match[c-None]", - "tests/indexes/multi/test_setops.py::test_difference[False]", - "tests/indexes/multi/test_setops.py::test_difference[None]", - "tests/indexes/multi/test_setops.py::test_intersection_non_object[False]", - "tests/indexes/multi/test_setops.py::test_intersection_non_object[None]", - "tests/indexes/multi/test_sorting.py::test_argsort", - "tests/indexes/multi/test_sorting.py::test_numpy_argsort", - "tests/indexes/multi/test_sorting.py::test_reconstruct_remove_unused", - "tests/indexes/multi/test_sorting.py::test_reconstruct_sort", - "tests/indexes/multi/test_sorting.py::test_remove_unused_levels_large[datetime64[D]-str]", - "tests/indexes/multi/test_sorting.py::test_remove_unused_levels_large[int64-int64]", - "tests/indexes/multi/test_sorting.py::test_unsortedindex_doc_examples", - "tests/indexes/numeric/test_astype.py::TestAstype::test_astype_float64_to_uint64", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_invalid", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_nan", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_nearest_decreasing[backfill-expected1]", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_nearest_decreasing[nearest-expected2]", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_nearest_decreasing[pad-expected0]", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_nearest_error", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_numeric_index_boolean_target[get_indexer-float64]", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_numeric_index_boolean_target[get_indexer-int64]", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_numeric_index_boolean_target[get_indexer-range]", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_numeric_index_boolean_target[get_indexer-uint64]", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_numeric_vs_bool", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_with_method_numeric_vs_bool[backfill]", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_with_method_numeric_vs_bool[nearest]", - "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_with_method_numeric_vs_bool[pad]", - "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_equals_numeric", - "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[int16]", - "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[int32]", - "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[int64]", - "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[int8]", - "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[int]", - "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[uint16]", - "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[uint32]", - "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[uint64]", - "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[uint8]", - "tests/indexes/numeric/test_numeric.py::TestIntNumericIndex::test_constructor[int16]", - "tests/indexes/numeric/test_numeric.py::TestIntNumericIndex::test_constructor[int32]", - "tests/indexes/numeric/test_numeric.py::TestIntNumericIndex::test_constructor[int64]", - "tests/indexes/object/test_indexing.py::TestSliceLocs::test_slice_locs_negative_step[in_slice13--object]", - "tests/indexes/object/test_indexing.py::TestSliceLocs::test_slice_locs_negative_step[in_slice13--string[pyarrow_numpy]]", - "tests/indexes/period/test_constructors.py::TestPeriodIndex::test_constructor_fromarraylike", - "tests/indexes/period/test_join.py::TestJoin::test_join_self[inner]", - "tests/indexes/period/test_join.py::TestJoin::test_join_self[left]", - "tests/indexes/period/test_join.py::TestJoin::test_join_self[outer]", - "tests/indexes/period/test_join.py::TestJoin::test_join_self[right]", - "tests/indexes/period/test_period.py::test_dunder_array[True]", - "tests/indexes/period/test_period_range.py::TestPeriodRange::test_construction_from_string[W-W]", - "tests/indexes/ranges/test_indexing.py::TestGetIndexer::test_get_indexer_limit", - "tests/indexes/ranges/test_join.py::TestJoin::test_join_self[inner]", - "tests/indexes/ranges/test_join.py::TestJoin::test_join_self[left]", - "tests/indexes/ranges/test_join.py::TestJoin::test_join_self[outer]", - "tests/indexes/ranges/test_join.py::TestJoin::test_join_self[right]", - "tests/indexes/ranges/test_range.py::TestRangeIndex::test_cache", - "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=-10, step=-1)-RangeIndex(start=-10, stop=-20, step=-1)-RangeIndex(start=-19, stop=1, step=1)-RangeIndex(start=0, stop=-20, step=-1)]", - "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=-100, step=-1)-RangeIndex(start=0, stop=-50, step=-3)-RangeIndex(start=-99, stop=1, step=1)-RangeIndex(start=0, stop=-100, step=-1)]", - "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=-100, step=-2)-RangeIndex(start=-100, stop=50, step=102)-RangeIndex(start=-100, stop=4, step=2)-expected_notsorted15]", - "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=-100, step=-5)-RangeIndex(start=5, stop=-100, step=-20)-RangeIndex(start=-95, stop=10, step=5)-expected_notsorted10]", - "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=-11, step=-1)-RangeIndex(start=1, stop=-12, step=-4)-RangeIndex(start=-11, stop=2, step=1)-expected_notsorted11]", - "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=10, step=5)-RangeIndex(start=-5, stop=-6, step=-20)-RangeIndex(start=-5, stop=10, step=5)-expected_notsorted18]", - "tests/indexes/ranges/test_setops.py::test_range_difference", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=str[pyarrow]-None]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=str[pyarrow]-nan0]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=str[pyarrow]-nan1]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=str[pyarrow]-null3]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=str[python]-None]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=str[python]-nan0]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=str[python]-nan1]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=str[python]-null3]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=string[pyarrow]-None]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=string[pyarrow]-nan0]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=string[pyarrow]-nan1]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=string[pyarrow]-null3]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=string[python]-None]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=string[python]-nan0]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=string[python]-nan1]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_missing[string=string[python]-null3]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings[string=str[pyarrow]-backfill-expected1]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings[string=str[pyarrow]-pad-expected0]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings[string=str[python]-backfill-expected1]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings[string=str[python]-pad-expected0]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings[string=string[pyarrow]-backfill-expected1]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings[string=string[pyarrow]-pad-expected0]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings[string=string[python]-backfill-expected1]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings[string=string[python]-pad-expected0]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings_raises[string=str[pyarrow]]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings_raises[string=str[python]]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings_raises[string=string[pyarrow]]", - "tests/indexes/string/test_indexing.py::TestGetIndexer::test_get_indexer_strings_raises[string=string[python]]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[bool-dtype]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[bool-object]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[categorical]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[complex128]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[complex64]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[datetime-tz]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[datetime]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[empty]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[float32]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[float64]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[int16]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[int32]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[int64]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[int8]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[interval]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[mi-with-dt64tz-level]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[multi]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[nullable_bool]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[nullable_float]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[nullable_int]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[nullable_uint]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[object]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[period]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[range]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[repeats]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[string-pyarrow]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[string-python]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[string]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[timedelta]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[tuples]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[uint16]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[uint32]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[uint64]", - "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[uint8]", - "tests/indexes/test_base.py::TestIndex::test_cached_properties_not_settable", - "tests/indexes/test_base.py::TestIndex::test_constructor_dtypes_datetime[None-Index-values]", - "tests/indexes/test_base.py::TestIndex::test_equals_op_mismatched_multiindex_raises[index0]", - "tests/indexes/test_base.py::TestIndex::test_is_", - "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NAType-float32]", - "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NAType-float64]", - "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NAType-float]", - "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NoneType-float32]", - "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NoneType-float64]", - "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NoneType-float]", - "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_object[NoneType-Decimal]", - "tests/indexes/test_base.py::TestIndex::test_map_defaultdict", - "tests/indexes/test_base.py::TestIndex::test_str_attribute_raises[index2]", - "tests/indexes/test_base.py::TestIndex::test_str_bool_return", - "tests/indexes/test_base.py::TestIndex::test_tab_completion[index1-False]", - "tests/indexes/test_common.py::TestCommon::test_constructor_non_hashable_name[range]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[bool-dtype-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[bool-dtype-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[bool-object-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[bool-object-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[categorical-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[categorical-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[complex128-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[complex128-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[complex64-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[complex64-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[datetime-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[datetime-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[datetime-tz-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[datetime-tz-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[empty-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[empty-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[float32-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[float32-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[float64-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[float64-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[int16-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[int16-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[int32-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[int32-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[int64-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[int64-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[int8-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[int8-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[interval-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[interval-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_bool-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_bool-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_float-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_float-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_int-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_int-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_uint-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_uint-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[object-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[object-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[period-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[period-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[range-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[range-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[repeats-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[repeats-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[string-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[string-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[string-pyarrow-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[string-pyarrow-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[string-python-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[string-python-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[timedelta-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[timedelta-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[uint16-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[uint16-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[uint32-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[uint32-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[uint64-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[uint64-new_name]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[uint8-None]", - "tests/indexes/test_common.py::TestCommon::test_to_frame[uint8-new_name]", - "tests/indexes/test_common.py::test_ndarray_compat_properties[multi]", - "tests/indexes/test_common.py::test_ndarray_compat_properties[tuples]", - "tests/indexes/test_datetimelike.py::TestDatetimeLike::test_argsort_matches_array[simple_index1]", - "tests/indexes/test_datetimelike.py::TestDatetimeLike::test_argsort_matches_array[simple_index2]", - "tests/indexes/test_indexing.py::TestGetIndexer::test_get_indexer_base[multi]", - "tests/indexes/test_indexing.py::TestGetIndexer::test_get_indexer_base[tuples]", - "tests/indexes/test_indexing.py::TestTake::test_take_indexer_type", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-arccos]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-arccosh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-arcsin]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-arcsinh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-arctan]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-arctanh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-cos]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-cosh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-deg2rad]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-exp2]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-exp]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-expm1]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-log10]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-log1p]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-log2]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-log]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-rad2deg]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-sin]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-sinh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-sqrt]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-tan]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[bool-dtype-tanh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arccos]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arccosh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arcsin]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arcsinh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arctan]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arctanh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-cos]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-cosh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-exp2]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-exp]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-expm1]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-log10]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-log1p]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-log2]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-log]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-sin]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-sinh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-sqrt]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-tan]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-tanh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arccos]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arccosh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arcsin]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arcsinh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arctan]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arctanh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-cos]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-cosh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-exp2]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-exp]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-expm1]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-log10]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-log1p]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-log2]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-log]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-sin]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-sinh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-tan]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-tanh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[int8-deg2rad]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[int8-rad2deg]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-arccos]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-arccosh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-arcsin]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-arcsinh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-arctan]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-arctanh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-cos]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-cosh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-deg2rad]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-exp2]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-exp]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-expm1]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-log10]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-log1p]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-log2]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-log]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-rad2deg]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-sin]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-sinh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-sqrt]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-tan]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_bool-tanh]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[uint8-deg2rad]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[uint8-rad2deg]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_other[bool-dtype-isfinite]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_other[bool-dtype-isinf]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_other[bool-dtype-isnan]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_other[bool-dtype-signbit]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_other[nullable_bool-isfinite]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_other[nullable_bool-isinf]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_other[nullable_bool-isnan]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_other[nullable_bool-signbit]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_out[interval]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_out[multi]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_out[tuples]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_reductions[multi-maximum]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_reductions[multi-minimum]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_reductions[tuples-maximum]", - "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_reductions[tuples-minimum]", - "tests/indexes/test_old_base.py::TestBase::test_argsort[nullable_bool]", - "tests/indexes/test_old_base.py::TestBase::test_equals_op[simple_index13]", - "tests/indexes/test_old_base.py::TestBase::test_nulls[multi]", - "tests/indexes/test_old_base.py::TestBase::test_nulls[tuples]", - "tests/indexes/test_old_base.py::TestBase::test_numpy_argsort[categorical]", - "tests/indexes/test_old_base.py::TestBase::test_numpy_argsort[interval]", - "tests/indexes/test_old_base.py::TestBase::test_numpy_argsort[multi]", - "tests/indexes/test_old_base.py::TestBase::test_numpy_argsort[tuples]", - "tests/indexes/test_setops.py::TestSetOps::test_difference_base[False-string-pyarrow]", - "tests/indexes/test_setops.py::TestSetOps::test_difference_base[False-string-python]", - "tests/indexes/test_setops.py::TestSetOps::test_difference_base[None-string-pyarrow]", - "tests/indexes/test_setops.py::TestSetOps::test_difference_base[None-string-python]", - "tests/indexes/test_setops.py::TestSetOpsUnsorted::test_difference_should_not_compare", - "tests/indexes/test_setops.py::TestSetOpsUnsorted::test_intersection[False-string]", - "tests/indexes/test_setops.py::TestSetOpsUnsorted::test_intersection[None-string]", - "tests/indexes/test_setops.py::TestSetOpsUnsorted::test_union_identity[False-string]", - "tests/indexes/test_setops.py::TestSetOpsUnsorted::test_union_identity[None-string]", - "tests/indexes/test_setops.py::test_setop_with_categorical[bool-dtype-False-union]", - "tests/indexes/test_setops.py::test_setop_with_categorical[bool-dtype-None-union]", - "tests/indexes/test_setops.py::test_setop_with_categorical[nullable_bool-False-union]", - "tests/indexes/test_setops.py::test_setop_with_categorical[nullable_bool-None-union]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-complex128]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-complex64]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-float32]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-float64]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-int16]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-int32]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-int64]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-int8]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-range]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-repeats]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-timedelta]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-uint16]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-uint32]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-uint64]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-uint8]", - "tests/indexes/test_setops.py::test_union_different_types[categorical-nullable_float]", - "tests/indexes/test_setops.py::test_union_different_types[categorical-nullable_uint]", - "tests/indexes/test_setops.py::test_union_different_types[categorical-string-pyarrow]", - "tests/indexes/test_setops.py::test_union_different_types[categorical-string-python]", - "tests/indexes/test_setops.py::test_union_different_types[complex128-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[complex64-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[datetime-timedelta]", - "tests/indexes/test_setops.py::test_union_different_types[float32-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[float64-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[int16-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[int16-timedelta]", - "tests/indexes/test_setops.py::test_union_different_types[int32-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[int32-timedelta]", - "tests/indexes/test_setops.py::test_union_different_types[int64-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[int64-timedelta]", - "tests/indexes/test_setops.py::test_union_different_types[int8-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[int8-timedelta]", - "tests/indexes/test_setops.py::test_union_different_types[nullable_float-categorical]", - "tests/indexes/test_setops.py::test_union_different_types[nullable_uint-categorical]", - "tests/indexes/test_setops.py::test_union_different_types[range-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[range-timedelta]", - "tests/indexes/test_setops.py::test_union_different_types[repeats-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[repeats-timedelta]", - "tests/indexes/test_setops.py::test_union_different_types[string-pyarrow-categorical]", - "tests/indexes/test_setops.py::test_union_different_types[string-python-categorical]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-datetime]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-int16]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-int32]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-int64]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-int8]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-range]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-repeats]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-uint16]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-uint32]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-uint8]", - "tests/indexes/test_setops.py::test_union_different_types[uint16-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[uint16-timedelta]", - "tests/indexes/test_setops.py::test_union_different_types[uint32-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[uint32-timedelta]", - "tests/indexes/test_setops.py::test_union_different_types[uint64-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[uint8-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[uint8-timedelta]", - "tests/indexes/test_setops.py::test_union_duplicate_index_different_dtypes", - "tests/indexes/test_setops.py::test_union_duplicate_index_subsets_of_each_other[category]", - "tests/indexes/test_setops.py::test_union_same_value_duplicated_in_both", - "tests/indexes/test_setops.py::test_union_with_duplicate_index_not_subset_and_non_monotonic[category]", - "tests/indexes/timedeltas/methods/test_astype.py::TestTimedeltaIndex::test_astype", - "tests/indexes/timedeltas/methods/test_astype.py::TestTimedeltaIndex::test_astype_raises[float]", - "tests/indexes/timedeltas/methods/test_astype.py::TestTimedeltaIndex::test_astype_timedelta64", - "tests/indexes/timedeltas/test_constructors.py::TestTimedeltaIndex::test_constructor_coverage", - "tests/indexes/timedeltas/test_constructors.py::TestTimedeltaIndex::test_int64_nocopy", - "tests/indexes/timedeltas/test_formats.py::TestTimedeltaIndexRendering::test_representation[__repr__]", - "tests/indexes/timedeltas/test_formats.py::TestTimedeltaIndexRendering::test_representation[__str__]", - "tests/indexes/timedeltas/test_indexing.py::TestContains::test_contains", - "tests/indexes/timedeltas/test_indexing.py::TestWhere::test_where_invalid_dtypes", - "tests/indexes/timedeltas/test_searchsorted.py::TestSearchSorted::test_searchsorted_invalid_argument_dtype[arg0]", - "tests/indexes/timedeltas/test_setops.py::TestTimedeltaIndex::test_intersection_equal[False]", - "tests/indexes/timedeltas/test_setops.py::TestTimedeltaIndex::test_intersection_equal[None]", - "tests/indexes/timedeltas/test_setops.py::TestTimedeltaIndex::test_intersection_non_monotonic[None-rng2-expected2]", - "tests/indexes/timedeltas/test_setops.py::TestTimedeltaIndex::test_union_freq_infer", - "tests/indexes/timedeltas/test_timedelta.py::TestTimedeltaIndex::test_misc_coverage", - "tests/indexing/interval/test_interval.py::TestIntervalIndexInsideMultiIndex::test_reindex_behavior_with_interval_index[1010]", - "tests/indexing/interval/test_interval.py::TestIntervalIndexInsideMultiIndex::test_reindex_behavior_with_interval_index[101]", - "tests/indexing/interval/test_interval_new.py::TestIntervalIndex::test_loc_with_overlap[loc]", - "tests/indexing/interval/test_interval_new.py::TestIntervalIndex::test_loc_with_overlap[setitem]", - "tests/indexing/interval/test_interval_new.py::TestIntervalIndex::test_loc_with_slices[loc]", - "tests/indexing/interval/test_interval_new.py::TestIntervalIndex::test_loc_with_slices[setitem]", - "tests/indexing/interval/test_interval_new.py::TestIntervalIndex::test_non_unique_moar[loc]", - "tests/indexing/interval/test_interval_new.py::TestIntervalIndex::test_non_unique_moar[setitem]", - "tests/indexing/multiindex/test_getitem.py::test_frame_getitem_multicolumn_empty_level", - "tests/indexing/multiindex/test_getitem.py::test_loc_empty_multiindex", - "tests/indexing/multiindex/test_getitem.py::test_series_getitem_multiindex[0-expected0-0]", - "tests/indexing/multiindex/test_getitem.py::test_series_getitem_multiindex[0-expected0-1]", - "tests/indexing/multiindex/test_getitem.py::test_series_getitem_multiindex[1-expected1-0]", - "tests/indexing/multiindex/test_getitem.py::test_series_getitem_multiindex[1-expected1-1]", - "tests/indexing/multiindex/test_iloc.py::test_indexing_ambiguity_bug_1678", - "tests/indexing/multiindex/test_loc.py::TestKeyErrorsWithMultiIndex::test_missing_key_combination", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_int_slice", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_multiindex_missing_label_raises", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-Index]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-Series]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-list]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-ndarray]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-set]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-tuple]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-Index]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-Series]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-list]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-ndarray]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-set]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-tuple]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-Index]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-Series]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-list]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-ndarray]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-set]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-tuple]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-Index]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-Series]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-list]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-ndarray]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-set]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-tuple]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-Index]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-Series]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-list]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-ndarray]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-set]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-tuple]", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_multiindex_indexer_none", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_multiindex_missing_label_raises", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_no_second_level_index", - "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_sorted_multiindex_after_union", - "tests/indexing/multiindex/test_loc.py::test_getitem_str_slice", - "tests/indexing/multiindex/test_loc.py::test_loc_get_scalar_casting_to_float", - "tests/indexing/multiindex/test_loc.py::test_loc_getitem_drops_levels_for_one_row_dataframe", - "tests/indexing/multiindex/test_loc.py::test_loc_getitem_duplicates_multiindex_missing_indexers[indexer6-pos6]", - "tests/indexing/multiindex/test_loc.py::test_loc_getitem_index_differently_ordered_slice_none_duplicates[indexer0]", - "tests/indexing/multiindex/test_loc.py::test_loc_getitem_int_raises_exception", - "tests/indexing/multiindex/test_loc.py::test_loc_with_mi_indexer", - "tests/indexing/multiindex/test_multiindex.py::TestMultiIndexBasic::test_rename_multiindex_with_duplicates", - "tests/indexing/multiindex/test_partial.py::TestMultiIndexPartial::test_getitem_partial_column_select", - "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_frame_getitem_setitem_boolean", - "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_frame_getitem_setitem_multislice", - "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_frame_setitem_multi_column2", - "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_loc_getitem_setitem_slice_integers[DataFrame]", - "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_loc_getitem_setitem_slice_integers[Series]", - "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_series_setitem", - "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_set_column_scalar_with_loc", - "tests/indexing/multiindex/test_setitem.py::test_frame_setitem_view_direct", - "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[int-loc0-iloc0]", - "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[int-loc3-iloc3]", - "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[int-loc4-iloc4]", - "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[int-loc7-iloc7]", - "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[str-loc12-iloc12]", - "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[str-loc8-iloc8]", - "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_per_axis_per_level_doc_examples", - "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_per_axis_per_level_getitem", - "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_per_axis_per_level_setitem", - "tests/indexing/multiindex/test_sorted.py::TestMultiIndexSorted::test_argsort_with_na", - "tests/indexing/test_at.py::test_at_timezone", - "tests/indexing/test_categorical.py::TestCategoricalIndex::test_ix_categorical_index", - "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[False-idx_values17]", - "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[False-idx_values28]", - "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[None-idx_values17]", - "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[None-idx_values28]", - "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[True-idx_values17]", - "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[True-idx_values28]", - "tests/indexing/test_coercion.py::TestFillnaSeriesCoercion::test_fillna_float64[index-True-object]", - "tests/indexing/test_coercion.py::TestFillnaSeriesCoercion::test_fillna_float64[series-True-object]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[dict-bool-float64]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[dict-bool-int64]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[dict-float64-bool]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-bool-datetime64[ns]]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-bool-float64]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-bool-int64]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-bool-timedelta64[ns]]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-datetime64-timedelta64[ns]]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-float64-datetime64[ns]]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-float64-timedelta64[ns]]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-int64-datetime64[ns]]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-int64-timedelta64[ns]]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-object-datetime64[ns]]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-object-timedelta64[ns]]", - "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[series-timedelta64-datetime64[ns]]", - "tests/indexing/test_floats.py::TestFloatIndexers::test_floating_misc[setitem]", - "tests/indexing/test_iloc.py::TestILocErrors::test_iloc_getitem_setitem_fancy_exceptions", - "tests/indexing/test_iloc.py::TestILocErrors::test_iloc_getitem_setitem_fancy_exceptions[False]", - "tests/indexing/test_iloc.py::TestILocErrors::test_iloc_getitem_setitem_fancy_exceptions[True]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_identity_slice_returns_new_object", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_array", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_bool", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_doc_issue", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_int_single_ea_block_view", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_slice", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_slice_negative_step_ea_block", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_mask", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_axis_argument", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_axis_argument[False]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_axis_argument[True]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_categorical_updates_inplace", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[DataFrame-Series-False]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[DataFrame-Series]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[DataFrame-array-False]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[DataFrame-array]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[Series-Series-False]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[Series-Series]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[Series-array-False]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[Series-array]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_empty_frame_raises_with_3d_ndarray", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key0]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key1]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key2]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key3]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key4]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key5]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key0]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key1]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key2]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key3]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key4]", - "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key5]", - "tests/indexing/test_indexing.py::TestDataframeNoneCoercion::test_coercion_with_loc[expected2]", - "tests/indexing/test_indexing.py::TestDataframeNoneCoercion::test_coercion_with_setitem_and_dataframe[expected2]", - "tests/indexing/test_indexing.py::TestDataframeNoneCoercion::test_none_coercion_loc_and_dataframe[expected2]", - "tests/indexing/test_indexing.py::TestDataframeNoneCoercion::test_none_coercion_mixed_dtypes", - "tests/indexing/test_indexing.py::TestFancy::test_index_type_coercion[getitem]", - "tests/indexing/test_indexing.py::TestFancy::test_index_type_coercion[loc]", - "tests/indexing/test_indexing.py::TestFancy::test_multi_assign_broadcasting_rhs", - "tests/indexing/test_indexing.py::TestFancy::test_setitem_ndarray_3d[empty-DataFrame-iloc]", - "tests/indexing/test_indexing.py::TestFancy::test_setitem_ndarray_3d[empty-DataFrame-loc]", - "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[iloc-value0]", - "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[iloc-value1]", - "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[iloc-value3]", - "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[loc-value0]", - "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[loc-value1]", - "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[loc-value3]", - "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[setitem-value0]", - "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[setitem-value1]", - "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[setitem-value3]", - "tests/indexing/test_indexing.py::test_ser_tup_indexer_exceeds_dimensions[iloc-ser0-keys0]", - "tests/indexing/test_indexing.py::test_ser_tup_indexer_exceeds_dimensions[iloc-ser1-keys1]", - "tests/indexing/test_indexing.py::test_ser_tup_indexer_exceeds_dimensions[loc-ser0-keys0]", - "tests/indexing/test_loc.py::TestLabelSlicing::test_loc_getitem_label_slice_period_timedelta[index0]", - "tests/indexing/test_loc.py::TestLoc::test_loc_getitem_single_boolean_arg[obj1-False-exp1]", - "tests/indexing/test_loc.py::TestLoc::test_loc_getitem_single_boolean_arg[obj2-False-exp2]", - "tests/indexing/test_loc.py::TestLocBaseIndependent::test_identity_slice_returns_new_object", - "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_modify_datetime", - "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_reverse_assignment", - "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_setitem_consistency[0]", - "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_setitem_consistency[val2]", - "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_setitem_consistency_dt64_to_float", - "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_setitem_empty_append_expands_rows_mixed_dtype", - "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_setitem_frame_with_inverted_slice", - "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_uint64_disallow_negative", - "tests/indexing/test_loc.py::TestLocBooleanMask::test_loc_setitem_mask_with_datetimeindex_tz[None]", - "tests/indexing/test_loc.py::TestLocBooleanMask::test_loc_setitem_ndframe_values_alignment", - "tests/indexing/test_loc.py::TestLocListlike::test_loc_named_index", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_datetime_keys_cast[np.datetime64]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_datetime_keys_cast[to_datetime64]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_datetime_keys_cast[to_pydatetime]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[bool-dtype-False]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[bool-dtype-True]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[bool-dtype]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[nullable_bool-False]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[nullable_bool-True]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[nullable_bool]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[object-False]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[object-True]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[object]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[string-False]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[string-True]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[string]", - "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_drops_level", - "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_getitem_multilevel_index_order[index-keys2-expected2]", - "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_getitem_multilevel_index_order[index-keys3-expected3]", - "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_getitem_multilevel_index_order[index-keys4-expected4]", - "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_getitem_multilevel_index_order[index-keys5-expected5]", - "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_getitem_multilevel_index_order[index-keys6-expected6]", - "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_multiindex_null_slice_na_level", - "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_set_nan_in_categorical_series[Float64]", - "tests/indexing/test_loc.py::test_loc_datetimelike_mismatched_dtypes", - "tests/indexing/test_loc.py::test_loc_getitem_multiindex_tuple_level", - "tests/indexing/test_loc.py::test_loc_setitem_uint8_upcast[300]", - "tests/indexing/test_na_indexing.py::test_series_mask_boolean[True-list-mask0-values0-object]", - "tests/indexing/test_na_indexing.py::test_series_mask_boolean[True-list-mask1-values0-object]", - "tests/indexing/test_na_indexing.py::test_series_mask_boolean[True-list-mask2-values0-object]", - "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_empty_frame_setitem_index_name_retained", - "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_partial_set_empty_frame", - "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_partial_set_empty_frame2", - "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_partial_set_empty_frame3", - "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_partial_set_empty_frame5", - "tests/indexing/test_partial.py::TestPartialSetting::test_loc_with_list_of_strings_representing_datetimes[DataFrame-idx1-labels1-expected_idx1]", - "tests/indexing/test_partial.py::TestPartialSetting::test_partial_setting_frame", - "tests/indexing/test_partial.py::TestPartialSetting::test_partial_setting_mixed_dtype", - "tests/indexing/test_scalar.py::TestMultiIndexScalar::test_multiindex_at_get_one_level", - "tests/interchange/test_impl.py::test_multi_chunk_column", - "tests/internals/test_api.py::test_create_block_manager_from_blocks_deprecated", - "tests/internals/test_api.py::test_deprecations[Block]", - "tests/internals/test_api.py::test_deprecations[DatetimeTZBlock]", - "tests/internals/test_api.py::test_deprecations[ExtensionBlock]", - "tests/internals/test_api.py::test_deprecations[NumericBlock]", - "tests/internals/test_api.py::test_deprecations[ObjectBlock]", - "tests/internals/test_internals.py::TestBlock::test_delete_datetimelike", - "tests/internals/test_internals.py::TestBlockManager::test_categorical_block_pickle", - "tests/internals/test_internals.py::TestBlockManager::test_copy", - "tests/internals/test_internals.py::TestBlockManager::test_non_unique_pickle[a,a,a:f8]", - "tests/internals/test_internals.py::TestBlockManager::test_non_unique_pickle[a: f8; a: i8]", - "tests/internals/test_internals.py::TestBlockManager::test_pickle", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[0-float64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[0-int64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[0-uint64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[1-float64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[1-int64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[1-uint64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[2-float64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[2-int64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[2-uint64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[3-float64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[3-int64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[3-uint64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[4-float64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[4-int64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[4-uint64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[5-float64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[5-int64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[5-uint64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[6-float64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[6-int64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[6-uint64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[7-float64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[7-int64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[7-uint64]", - "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[0]", - "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[1]", - "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[2]", - "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[3]", - "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[4]", - "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[5]", - "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[6]", - "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[7]", - "tests/internals/test_internals.py::TestShouldStore::test_should_store_categorical", - "tests/internals/test_managers.py::test_dataframe_creation", - "tests/internals/test_managers.py::test_series_creation", - "tests/io/excel/test_odswriter.py::test_cell_value_type[1-float-value-1]", - "tests/io/excel/test_odswriter.py::test_cell_value_type[1.5-float-value-1.5]", - "tests/io/excel/test_odswriter.py::test_cell_value_type[True-boolean-boolean-value-true]", - "tests/io/excel/test_odswriter.py::test_cell_value_type[test string-string-string-value-test string]", - "tests/io/excel/test_odswriter.py::test_cell_value_type[value4-date-date-value-2010-10-10T10:10:10]", - "tests/io/excel/test_odswriter.py::test_cell_value_type[value5-date-date-value-2010-10-10]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[('calamine', '.ods')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[('calamine', '.xls')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[('calamine', '.xlsb')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[('calamine', '.xlsm')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[('calamine', '.xlsx')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[('odf', '.ods')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[('openpyxl', '.xlsm')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[('openpyxl', '.xlsx')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[('pyxlsb', '.xlsb')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[('xlrd', '.xls')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[(None, '.xls')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[(None, '.xlsm')]", - "tests/io/excel/test_readers.py::TestExcelFileRead::test_engine_used[(None, '.xlsx')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('calamine', '.ods')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('calamine', '.xls')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('calamine', '.xlsb')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('calamine', '.xlsm')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('calamine', '.xlsx')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('odf', '.ods')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('openpyxl', '.xlsm')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('openpyxl', '.xlsx')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('pyxlsb', '.xlsb')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('xlrd', '.xls')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[(None, '.xls')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[(None, '.xlsm')]", - "tests/io/excel/test_readers.py::TestReaders::test_engine_used[(None, '.xlsx')]", - "tests/io/excel/test_writers.py::TestExcelWriter::test_excel_date_datetime_format[odf-.ods]", - "tests/io/excel/test_writers.py::TestExcelWriter::test_excel_date_datetime_format[openpyxl-.xlsm]", - "tests/io/excel/test_writers.py::TestExcelWriter::test_excel_date_datetime_format[openpyxl-.xlsx]", - "tests/io/excel/test_writers.py::TestExcelWriter::test_excel_date_datetime_format[xlsxwriter-.xlsx]", - "tests/io/excel/test_writers.py::TestExcelWriterEngineTests::test_register_writer", - "tests/io/excel/test_writers.py::TestFSPath::test_excelfile_fspath", - "tests/io/formats/style/test_format.py::test_format_clear[format_index-_display_funcs_columns-kwargs2]", - "tests/io/formats/style/test_html.py::test_from_custom_template_style", - "tests/io/formats/style/test_html.py::test_from_custom_template_table", - "tests/io/formats/style/test_html.py::test_html_template_extends_options", - "tests/io/formats/style/test_html.py::test_replaced_css_class_names", - "tests/io/formats/style/test_style.py::TestStyler::test_caption", - "tests/io/formats/style/test_style.py::TestStyler::test_non_reducing_multi_slice_on_multiindex[slice_7]", - "tests/io/formats/style/test_style.py::TestStyler::test_table_styles", - "tests/io/formats/style/test_style.py::TestStyler::test_uuid", - "tests/io/formats/style/test_style.py::test_clear", - "tests/io/formats/style/test_style.py::test_copy[False-False-False]", - "tests/io/formats/style/test_style.py::test_copy[False-False-True]", - "tests/io/formats/style/test_style.py::test_copy[False-True-False]", - "tests/io/formats/style/test_style.py::test_copy[False-True-True]", - "tests/io/formats/style/test_style.py::test_copy[True-False-False]", - "tests/io/formats/style/test_style.py::test_copy[True-False-True]", - "tests/io/formats/style/test_style.py::test_copy[True-True-False]", - "tests/io/formats/style/test_style.py::test_copy[True-True-True]", - "tests/io/formats/test_format.py::TestDataFrameFormatting::test_info_repr", - "tests/io/formats/test_format.py::TestDataFrameFormatting::test_info_repr_max_cols", - "tests/io/formats/test_format.py::TestSeriesFormatting::test_east_asian_unicode_series", - "tests/io/formats/test_ipython_compat.py::TestTableSchemaRepr::test_publishes", - "tests/io/formats/test_ipython_compat.py::TestTableSchemaRepr::test_publishes_not_implemented", - "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_compression_dict[tar]", - "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_date_format", - "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_different_datetime_formats", - "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_multi_index", - "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_na_rep", - "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_with_single_column", - "tests/io/formats/test_to_html.py::test_to_html_truncate", - "tests/io/formats/test_to_string.py::TestDataFrameToString::test_to_string_truncate", - "tests/io/formats/test_to_string.py::TestSeriesToString::test_to_string_with_datetimeindex", - "tests/io/json/test_compression.py::test_chunksize_with_compression[bz2]", - "tests/io/json/test_compression.py::test_chunksize_with_compression[gzip]", - "tests/io/json/test_compression.py::test_chunksize_with_compression[tar]", - "tests/io/json/test_compression.py::test_chunksize_with_compression[xz]", - "tests/io/json/test_compression.py::test_chunksize_with_compression[zip]", - "tests/io/json/test_compression.py::test_chunksize_with_compression[zstd]", - "tests/io/json/test_compression.py::test_compression_roundtrip[bz2]", - "tests/io/json/test_compression.py::test_compression_roundtrip[gzip]", - "tests/io/json/test_compression.py::test_compression_roundtrip[tar]", - "tests/io/json/test_compression.py::test_compression_roundtrip[xz]", - "tests/io/json/test_compression.py::test_compression_roundtrip[zip]", - "tests/io/json/test_compression.py::test_compression_roundtrip[zstd]", - "tests/io/json/test_compression.py::test_lines_with_compression[bz2]", - "tests/io/json/test_compression.py::test_lines_with_compression[gzip]", - "tests/io/json/test_compression.py::test_lines_with_compression[tar]", - "tests/io/json/test_compression.py::test_lines_with_compression[xz]", - "tests/io/json/test_compression.py::test_lines_with_compression[zip]", - "tests/io/json/test_compression.py::test_lines_with_compression[zstd]", - "tests/io/json/test_compression.py::test_write_unsupported_compression_type", - "tests/io/json/test_json_table_schema.py::TestTableOrient::test_build_series", - "tests/io/json/test_json_table_schema.py::TestTableOrient::test_to_json_categorical_index", - "tests/io/json/test_json_table_schema.py::TestTableOrient::test_to_json_float_index", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_empty_frame_roundtrip", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_multiindex[index_names0]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_multiindex[index_names1]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_multiindex[index_names2]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_multiindex[index_names3]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_multiindex[index_names4]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals0-None]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals0-idx]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals0-level_0]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals1-None]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals1-idx]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals1-level_0]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals2-None]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals2-idx]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals2-level_0]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals6-None]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals6-idx]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals6-level_0]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals7-None]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals7-idx]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals7-level_0]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals8-None]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals8-idx]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals8-level_0]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_timezones_orient[vals0-idx0]", - "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_timezones_orient[vals0-idx1]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_blocks_compat_GH9037", - "tests/io/json/test_pandas.py::TestPandasContainer::test_date_index_and_values[date-False-epoch]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_date_index_and_values[date-False-iso]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_dtypes", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-None]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-index1]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-index2]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-index3]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-index4]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-index5]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-None]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-index1]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-index2]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-index3]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-index4]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-index5]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-None]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-index1]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-index2]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-index3]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-index4]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-index5]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_from_json_to_json[False-table]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_from_json_to_json[True-table]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data0]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data1]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data2]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data3]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data4]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data5]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_timedelta", - "tests/io/json/test_pandas.py::TestPandasContainer::test_timedelta2", - "tests/io/json/test_pandas.py::TestPandasContainer::test_timedelta_to_json[timedelta-epoch-False]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_timedelta_to_json[timedelta-iso-False]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_timedelta_to_json_fractional_precision[timedelta-False]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_timedelta_to_json_fractional_precision[timedelta-True]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_tz_range_is_utc[tz_range0]", - "tests/io/json/test_pandas.py::TestPandasContainer::test_tz_range_is_utc[tz_range2]", - "tests/io/json/test_readlines.py::test_chunksize_is_incremental", - "tests/io/json/test_readlines.py::test_readjson_chunks_closes[1]", - "tests/io/json/test_readlines.py::test_readjson_chunks_closes[None]", - "tests/io/json/test_readlines.py::test_to_json_append_output_different_columns", - "tests/io/json/test_readlines.py::test_to_json_append_output_different_columns_reordered", - "tests/io/parser/common/test_common_basic.py::test_override_set_noconvert_columns", - "tests/io/parser/common/test_file_buffer_url.py::test_context_manager[c_high]", - "tests/io/parser/common/test_file_buffer_url.py::test_context_manager[c_low]", - "tests/io/parser/common/test_file_buffer_url.py::test_context_manager[python]", - "tests/io/parser/common/test_file_buffer_url.py::test_context_manageri_user_provided[c_high]", - "tests/io/parser/common/test_file_buffer_url.py::test_context_manageri_user_provided[c_low]", - "tests/io/parser/common/test_file_buffer_url.py::test_context_manageri_user_provided[python]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[c_high-float64]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[c_high-float]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[c_low-float64]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[c_low-float]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[python-float64]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[python-float]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_invalid[c_high]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_invalid[c_low]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_invalid[python]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_mangle_dup_cols[c_high]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_mangle_dup_cols[c_low]", - "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_mangle_dup_cols[python]", - "tests/io/parser/test_compression.py::test_writes_tar_gz[c_high]", - "tests/io/parser/test_compression.py::test_writes_tar_gz[c_low]", - "tests/io/parser/test_compression.py::test_writes_tar_gz[python]", - "tests/io/parser/test_parse_dates.py::test_datetime_fractional_seconds[c_high-date_format-%Y %m %d %H %M %S.%f-None]", - "tests/io/parser/test_parse_dates.py::test_datetime_fractional_seconds[c_high-date_parser--FutureWarning]", - "tests/io/parser/test_parse_dates.py::test_datetime_fractional_seconds[c_low-date_format-%Y %m %d %H %M %S.%f-None]", - "tests/io/parser/test_parse_dates.py::test_datetime_fractional_seconds[c_low-date_parser--FutureWarning]", - "tests/io/parser/test_parse_dates.py::test_datetime_fractional_seconds[python-date_format-%Y %m %d %H %M %S.%f-None]", - "tests/io/parser/test_parse_dates.py::test_datetime_fractional_seconds[python-date_parser--FutureWarning]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col[c_high-False]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col[c_high-True]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col[c_low-False]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col[c_low-True]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col[python-False]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col[python-True]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col_custom[c_high-False]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col_custom[c_high-True]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col_custom[c_low-False]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col_custom[c_low-True]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col_custom[python-False]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_col_custom[python-True]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_cols_int_cast[c_high]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_cols_int_cast[c_low]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_cols_int_cast[python]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_cols_with_header[c_high]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_cols_with_header[c_low]", - "tests/io/parser/test_parse_dates.py::test_multiple_date_cols_with_header[python]", - "tests/io/parser/test_parse_dates.py::test_nat_parse[c_high]", - "tests/io/parser/test_parse_dates.py::test_nat_parse[c_low]", - "tests/io/parser/test_parse_dates.py::test_nat_parse[python]", - "tests/io/parser/test_parse_dates.py::test_parse_date_all_fields[c_high-date_format-%Y %m %d %H %M %S-None]", - "tests/io/parser/test_parse_dates.py::test_parse_date_all_fields[c_high-date_parser--FutureWarning]", - "tests/io/parser/test_parse_dates.py::test_parse_date_all_fields[c_low-date_format-%Y %m %d %H %M %S-None]", - "tests/io/parser/test_parse_dates.py::test_parse_date_all_fields[c_low-date_parser--FutureWarning]", - "tests/io/parser/test_parse_dates.py::test_parse_date_all_fields[python-date_format-%Y %m %d %H %M %S-None]", - "tests/io/parser/test_parse_dates.py::test_parse_date_all_fields[python-date_parser--FutureWarning]", - "tests/io/parser/test_parse_dates.py::test_parse_date_fields[c_high]", - "tests/io/parser/test_parse_dates.py::test_parse_date_fields[c_low]", - "tests/io/parser/test_parse_dates.py::test_parse_date_fields[python]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[c_high-KORD,19990127, 19:00:00, 18:56:00, 0.8100\\\\\\\\nKORD,19990127, 20:00:00, 19:56:00, 0.0100\\\\\\\\nKORD,19990127, 21:00:00, 20:56:00, -0.5900\\\\\\\\nKORD,19990127, 21:00:00, 21:18:00, -0.9900\\\\\\\\nKORD,19990127, 22:00:00, 21:56:00, -0.5900\\\\\\\\nKORD,19990127, 23:00:00, 22:56:00, -0.5900-kwargs1-expected1]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[c_high-KORD,19990127, 19:00:00, 18:56:00, 0.8100\\nKORD,19990127, 20:00:00, 19:56:00, 0.0100\\nKORD,19990127, 21:00:00, 20:56:00, -0.5900\\nKORD,19990127, 21:00:00, 21:18:00, -0.9900\\nKORD,19990127, 22:00:00, 21:56:00, -0.5900\\nKORD,19990127, 23:00:00, 22:56:00, -0.5900-kwargs1-expected1]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[c_high-date,time,a,b\\\\\\\\n2001-01-05, 10:00:00, 0.0, 10.\\\\\\\\n2001-01-05, 00:00:00, 1., 11.\\\\\\\\n-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[c_high-date,time,a,b\\n2001-01-05, 10:00:00, 0.0, 10.\\n2001-01-05, 00:00:00, 1., 11.\\n-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[c_low-KORD,19990127, 19:00:00, 18:56:00, 0.8100\\\\\\\\nKORD,19990127, 20:00:00, 19:56:00, 0.0100\\\\\\\\nKORD,19990127, 21:00:00, 20:56:00, -0.5900\\\\\\\\nKORD,19990127, 21:00:00, 21:18:00, -0.9900\\\\\\\\nKORD,19990127, 22:00:00, 21:56:00, -0.5900\\\\\\\\nKORD,19990127, 23:00:00, 22:56:00, -0.5900-kwargs1-expected1]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[c_low-KORD,19990127, 19:00:00, 18:56:00, 0.8100\\nKORD,19990127, 20:00:00, 19:56:00, 0.0100\\nKORD,19990127, 21:00:00, 20:56:00, -0.5900\\nKORD,19990127, 21:00:00, 21:18:00, -0.9900\\nKORD,19990127, 22:00:00, 21:56:00, -0.5900\\nKORD,19990127, 23:00:00, 22:56:00, -0.5900-kwargs1-expected1]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[c_low-date,time,a,b\\\\\\\\n2001-01-05, 10:00:00, 0.0, 10.\\\\\\\\n2001-01-05, 00:00:00, 1., 11.\\\\\\\\n-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[c_low-date,time,a,b\\n2001-01-05, 10:00:00, 0.0, 10.\\n2001-01-05, 00:00:00, 1., 11.\\n-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[python-KORD,19990127, 19:00:00, 18:56:00, 0.8100\\\\\\\\nKORD,19990127, 20:00:00, 19:56:00, 0.0100\\\\\\\\nKORD,19990127, 21:00:00, 20:56:00, -0.5900\\\\\\\\nKORD,19990127, 21:00:00, 21:18:00, -0.9900\\\\\\\\nKORD,19990127, 22:00:00, 21:56:00, -0.5900\\\\\\\\nKORD,19990127, 23:00:00, 22:56:00, -0.5900-kwargs1-expected1]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[python-KORD,19990127, 19:00:00, 18:56:00, 0.8100\\nKORD,19990127, 20:00:00, 19:56:00, 0.0100\\nKORD,19990127, 21:00:00, 20:56:00, -0.5900\\nKORD,19990127, 21:00:00, 21:18:00, -0.9900\\nKORD,19990127, 22:00:00, 21:56:00, -0.5900\\nKORD,19990127, 23:00:00, 22:56:00, -0.5900-kwargs1-expected1]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[python-date,time,a,b\\\\\\\\n2001-01-05, 10:00:00, 0.0, 10.\\\\\\\\n2001-01-05, 00:00:00, 1., 11.\\\\\\\\n-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time[python-date,time,a,b\\n2001-01-05, 10:00:00, 0.0, 10.\\n2001-01-05, 00:00:00, 1., 11.\\n-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time_multi_level_column_name[c_high]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time_multi_level_column_name[c_low]", - "tests/io/parser/test_parse_dates.py::test_parse_date_time_multi_level_column_name[python]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_column_list[c_high-parse_dates0]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_column_list[c_high-parse_dates1]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_column_list[c_low-parse_dates0]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_column_list[c_low-parse_dates1]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_column_list[python-parse_dates0]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_column_list[python-parse_dates1]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_high-a,b\\\\\\\\n04.15.2016,09.16.2013-kwargs2-expected2]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_high-a,b\\n04.15.2016,09.16.2013-kwargs2-expected2]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_high-a\\\\\\\\n04.15.2016-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_high-a\\n04.15.2016-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_low-a,b\\\\\\\\n04.15.2016,09.16.2013-kwargs2-expected2]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_low-a,b\\n04.15.2016,09.16.2013-kwargs2-expected2]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_low-a\\\\\\\\n04.15.2016-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_low-a\\n04.15.2016-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[python-a,b\\\\\\\\n04.15.2016,09.16.2013-kwargs2-expected2]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[python-a,b\\n04.15.2016,09.16.2013-kwargs2-expected2]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[python-a\\\\\\\\n04.15.2016-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[python-a\\n04.15.2016-kwargs0-expected0]", - "tests/io/parser/test_parse_dates.py::test_separator_date_conflict[c_high]", - "tests/io/parser/test_parse_dates.py::test_separator_date_conflict[c_low]", - "tests/io/parser/test_parse_dates.py::test_separator_date_conflict[python]", - "tests/io/parser/test_python_parser_only.py::test_on_bad_lines_callable_write_to_external_list[python]", - "tests/io/parser/test_textreader.py::TestTextReader::test_integer_thousands_alt", - "tests/io/pytables/test_timezones.py::test_append_with_timezones[0]", - "tests/io/pytables/test_timezones.py::test_append_with_timezones[1]", - "tests/io/sas/test_sas7bdat.py::TestSAS7BDAT::test_iterator_read_too_much", - "tests/io/sas/test_sas7bdat.py::test_date_time", - "tests/io/sas/test_sas7bdat.py::test_encoding_infer", - "tests/io/sas/test_sas7bdat.py::test_encoding_options", - "tests/io/test_common.py::TestCommonIOCapabilities::test_stringify_file_and_path_like", - "tests/io/test_common.py::test_pickle_reader[read_excel]", - "tests/io/test_common.py::test_pickle_reader[read_fwf]", - "tests/io/test_common.py::test_pickle_reader[read_pickle]", - "tests/io/test_common.py::test_pickle_reader[read_sas]", - "tests/io/test_common.py::test_pickle_reader[read_stata]", - "tests/io/test_compression.py::test_ambiguous_archive_tar", - "tests/io/test_compression.py::test_compression_size[bz2-to_json-obj0]", - "tests/io/test_compression.py::test_compression_size[bz2-to_json-obj1]", - "tests/io/test_compression.py::test_compression_size[gzip-to_json-obj0]", - "tests/io/test_compression.py::test_compression_size[gzip-to_json-obj1]", - "tests/io/test_compression.py::test_compression_size[tar-to_json-obj0]", - "tests/io/test_compression.py::test_compression_size[tar-to_json-obj1]", - "tests/io/test_compression.py::test_compression_size[xz-to_json-obj0]", - "tests/io/test_compression.py::test_compression_size[xz-to_json-obj1]", - "tests/io/test_compression.py::test_compression_size[zip-to_json-obj0]", - "tests/io/test_compression.py::test_compression_size[zip-to_json-obj1]", - "tests/io/test_compression.py::test_compression_size[zstd-to_json-obj0]", - "tests/io/test_compression.py::test_compression_size[zstd-to_json-obj1]", - "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[bz2-to_csv-write_kwargs0-read_csv]", - "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[gzip-to_csv-write_kwargs0-read_csv]", - "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[tar-to_csv-write_kwargs0-read_csv]", - "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[xz-to_csv-write_kwargs0-read_csv]", - "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[zip-to_csv-write_kwargs0-read_csv]", - "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[zstd-to_csv-write_kwargs0-read_csv]", - "tests/io/test_compression.py::test_gzip_compression_level[to_json-obj0]", - "tests/io/test_compression.py::test_gzip_compression_level[to_json-obj1]", - "tests/io/test_compression.py::test_xz_compression_level_read[to_json-obj0]", - "tests/io/test_compression.py::test_xz_compression_level_read[to_json-obj1]", - "tests/io/test_fsspec.py::test_non_fsspec_options", - "tests/io/test_orc.py::test_orc_reader_basic", - "tests/io/test_orc.py::test_orc_reader_date_high", - "tests/io/test_orc.py::test_orc_reader_date_low", - "tests/io/test_orc.py::test_orc_roundtrip_file", - "tests/io/test_orc.py::test_string_inference", - "tests/io/test_parquet.py::TestBasic::test_read_empty_array[Float64]", - "tests/io/test_parquet.py::TestBasic::test_read_empty_array[Int64]", - "tests/io/test_parquet.py::TestBasic::test_read_empty_array[UInt8]", - "tests/io/test_parquet.py::TestBasic::test_read_empty_array[boolean]", - "tests/io/test_parquet.py::TestBasic::test_read_empty_array[float]", - "tests/io/test_parquet.py::TestBasic::test_read_empty_array[object]", - "tests/io/test_parquet.py::TestBasic::test_read_empty_array[string]", - "tests/io/test_parquet.py::TestParquetPyArrow::test_empty_dataframe", - "tests/io/test_parquet.py::TestParquetPyArrow::test_infer_string_large_string_type", - "tests/io/test_parquet.py::TestParquetPyArrow::test_read_dtype_backend_pyarrow_config", - "tests/io/test_parquet.py::TestParquetPyArrow::test_roundtrip_decimal", - "tests/io/test_pickle.py::test_pickles", - "tests/io/test_sql.py::test_api_execute_sql[sqlite_buildin_iris]", - "tests/io/test_sql.py::test_api_execute_sql[sqlite_conn_iris]", - "tests/io/test_sql.py::test_api_execute_sql[sqlite_engine_iris]", - "tests/io/test_sql.py::test_api_execute_sql[sqlite_str_iris]", - "tests/io/test_sql.py::test_datetime_date[sqlite_conn]", - "tests/io/test_sql.py::test_datetime_date[sqlite_engine]", - "tests/io/test_sql.py::test_datetime_date[sqlite_str]", - "tests/io/test_sql.py::test_execute_sql[sqlite_buildin_iris]", - "tests/io/test_sql.py::test_execute_sql[sqlite_conn_iris]", - "tests/io/test_sql.py::test_execute_sql[sqlite_engine_iris]", - "tests/io/test_sql.py::test_execute_sql[sqlite_str_iris]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql-sqlite_buildin]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql-sqlite_conn]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql-sqlite_engine]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql-sqlite_str]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql_query-sqlite_buildin]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql_query-sqlite_conn]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql_query-sqlite_engine]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql_query-sqlite_str]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql-sqlite_buildin]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql-sqlite_conn]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql-sqlite_engine]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql-sqlite_str]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql_query-sqlite_buildin]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql_query-sqlite_conn]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql_query-sqlite_engine]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql_query-sqlite_str]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql-sqlite_buildin]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql-sqlite_conn]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql-sqlite_engine]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql-sqlite_str]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql_query-sqlite_buildin]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql_query-sqlite_conn]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql_query-sqlite_engine]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql_query-sqlite_str]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql-sqlite_buildin]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql-sqlite_conn]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql-sqlite_engine]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql-sqlite_str]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql_query-sqlite_buildin]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql_query-sqlite_conn]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql_query-sqlite_engine]", - "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql_query-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int16-SMALLINT-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int16-SMALLINT-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int16-SMALLINT-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int32-INTEGER-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int32-INTEGER-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int32-INTEGER-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int64-BIGINT-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int64-BIGINT-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int64-BIGINT-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int8-SMALLINT-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int8-SMALLINT-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int8-SMALLINT-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt16-INTEGER-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt16-INTEGER-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt16-INTEGER-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt32-BIGINT-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt32-BIGINT-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt32-BIGINT-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt8-SMALLINT-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt8-SMALLINT-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt8-SMALLINT-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int-BIGINT-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int-BIGINT-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int-BIGINT-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int16-SMALLINT-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int16-SMALLINT-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int16-SMALLINT-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int32-INTEGER-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int32-INTEGER-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int32-INTEGER-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int64-BIGINT-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int64-BIGINT-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int64-BIGINT-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int8-SMALLINT-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int8-SMALLINT-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int8-SMALLINT-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint16-INTEGER-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint16-INTEGER-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint16-INTEGER-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint32-BIGINT-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint32-BIGINT-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint32-BIGINT-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint8-SMALLINT-sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint8-SMALLINT-sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint8-SMALLINT-sqlite_str]", - "tests/io/test_sql.py::test_sqlalchemy_type_mapping[sqlite_conn]", - "tests/io/test_sql.py::test_sqlalchemy_type_mapping[sqlite_engine]", - "tests/io/test_sql.py::test_sqlalchemy_type_mapping[sqlite_str]", - "tests/io/test_sql.py::test_sqlite_datetime_date", - "tests/io/test_sql.py::test_to_sql_callable[sqlite_conn]", - "tests/io/test_sql.py::test_to_sql_callable[sqlite_engine]", - "tests/io/test_sql.py::test_to_sql_callable[sqlite_str]", - "tests/io/test_sql.py::test_xsqlite_if_exists", - "tests/io/test_sql.py::test_xsqlite_write_row_by_row", - "tests/io/test_stata.py::TestStata::test_categorical_writing[114]", - "tests/io/test_stata.py::TestStata::test_categorical_writing[117]", - "tests/io/test_stata.py::TestStata::test_categorical_writing[118]", - "tests/io/test_stata.py::TestStata::test_categorical_writing[119]", - "tests/io/test_stata.py::TestStata::test_categorical_writing[None]", - "tests/io/test_stata.py::TestStata::test_date_export_formats", - "tests/io/test_stata.py::TestStata::test_dates_invalid_column", - "tests/io/test_stata.py::TestStata::test_default_date_conversion", - "tests/io/test_stata.py::TestStata::test_encoding_latin1_118", - "tests/io/test_stata.py::TestStata::test_minimal_size_col", - "tests/io/test_stata.py::TestStata::test_missing_value_generator", - "tests/io/test_stata.py::TestStata::test_read_dta18", - "tests/io/test_stata.py::TestStata::test_read_write_ea_dtypes[numpy_nullable]", - "tests/io/test_stata.py::TestStata::test_timestamp_and_label[114]", - "tests/io/test_stata.py::TestStata::test_timestamp_and_label[117]", - "tests/io/test_stata.py::TestStata::test_timestamp_and_label[118]", - "tests/io/test_stata.py::TestStata::test_timestamp_and_label[119]", - "tests/io/test_stata.py::TestStata::test_timestamp_and_label[None]", - "tests/io/test_stata.py::TestStata::test_utf8_writer[118]", - "tests/io/test_stata.py::TestStata::test_utf8_writer[119]", - "tests/io/test_stata.py::TestStata::test_utf8_writer[None]", - "tests/io/test_stata.py::TestStata::test_value_labels_old_format", - "tests/io/test_stata.py::TestStata::test_variable_labels", - "tests/io/test_stata.py::TestStata::test_write_variable_labels[114]", - "tests/io/test_stata.py::TestStata::test_write_variable_labels[117]", - "tests/io/test_stata.py::TestStata::test_write_variable_labels[118]", - "tests/io/test_stata.py::TestStata::test_write_variable_labels[119]", - "tests/io/test_stata.py::TestStata::test_write_variable_labels[None]", - "tests/io/test_stata.py::test_chunked_categorical[114]", - "tests/io/test_stata.py::test_chunked_categorical[117]", - "tests/io/test_stata.py::test_chunked_categorical[118]", - "tests/io/test_stata.py::test_chunked_categorical[119]", - "tests/io/test_stata.py::test_chunked_categorical[None]", - "tests/io/test_stata.py::test_chunked_categorical_partial", - "tests/io/test_stata.py::test_direct_read", - "tests/io/test_stata.py::test_iterator_errors[-1]", - "tests/io/test_stata.py::test_iterator_errors[0]", - "tests/io/test_stata.py::test_iterator_errors[apple]", - "tests/io/test_stata.py::test_non_categorical_value_label_convert_categoricals_error", - "tests/io/test_stata.py::test_non_categorical_value_label_name_conversion", - "tests/io/test_stata.py::test_non_categorical_value_labels", - "tests/io/test_stata.py::test_statareader_warns_when_used_without_context", - "tests/io/xml/test_to_xml.py::test_style_to_csv", - "tests/io/xml/test_xml.py::test_empty_stylesheet[0]", - "tests/io/xml/test_xml.py::test_empty_stylesheet[1]", - "tests/io/xml/test_xml.py::test_wrong_file_path[etree]", - "tests/io/xml/test_xml.py::test_wrong_file_path[lxml]", - "tests/libs/test_libalgos.py::test_ensure_platform_int", - "tests/plotting/frame/test_frame.py::TestDataFramePlots::test_unordered_ts", - "tests/plotting/test_boxplot_method.py::TestDataFramePlots::test_boxplot_legacy1_series", - "tests/plotting/test_converter.py::TestDateTimeConverter::test_conversion", - "tests/plotting/test_converter.py::TestDateTimeConverter::test_dateindex_conversion[B]", - "tests/plotting/test_converter.py::TestDateTimeConverter::test_dateindex_conversion[ms]", - "tests/plotting/test_converter.py::TestDateTimeConverter::test_dateindex_conversion[s]", - "tests/plotting/test_converter.py::TestRegistration::test_matplotlib_formatters", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_frame_inferred", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_frame_inferred_n_gt_1", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_high_freq[ms]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_high_freq[us]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[1B30Min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[D]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[ME]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[QE-DEC]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[W]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[YE]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[h]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[s]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_series[1B30Min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_series[D]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_series[ME]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_series[QE-DEC]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_series[W]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_series[YE]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_series[h]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_series[min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_series[s]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[D]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[ME]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[QE-DEC]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[W]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[YE]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[h]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[s]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_frame[D]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_frame[ME]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_frame[QE]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_frame[W]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_frame[YE]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_frame[h]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_frame[min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_frame[s]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_frame[11M]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_frame[1s]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_frame[3Y]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_frame[3s]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_frame[4D]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_frame[5min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_frame[7h]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_frame[8W]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_series[11M]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_series[1s]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_series[3Y]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_series[3s]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_series[4D]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_series[5min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_series[7h]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_mlt_series[8W]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_series[D]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_series[M]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_series[Q]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_series[W]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_series[Y]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_series[h]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_series[min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_period_series[s]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_mixed_freq_irregular_first_df", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_plot_multiple_inferred_freq", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_plot_offset_freq", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_plot_offset_freq_business", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz['+01:15']", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz['-02:15']", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz['Asia/Tokyo']", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz['US/Eastern']", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz['UTC']", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz['UTC+01:15']", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz['UTC-02:15']", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz['dateutil/Asia/Singapore']", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz['dateutil/US/Pacific']", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz[]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz[datetime.timezone(datetime.timedelta(seconds=3600))]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz[datetime.timezone.utc]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz[pytz.FixedOffset(-300)]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz[pytz.FixedOffset(300)]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz[tzlocal()]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz[tzutc()]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz[zoneinfo.ZoneInfo(key='US/Pacific')]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_ts_plot_with_tz[zoneinfo.ZoneInfo(key='UTC')]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_datetime[1B30Min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_datetime[D]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_datetime[ME]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_datetime[QE-DEC]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_datetime[W]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_datetime[YE]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_datetime[h]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_datetime[min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_datetime[s]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_period[D]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_period[M]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_period[Q]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_period[W]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_period[Y]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_period[h]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_period[min]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_tsplot_period[s]", - "tests/reductions/test_reductions.py::TestDatetime64SeriesReductions::test_minmax_nat_series[nat_ser0]", - "tests/reductions/test_reductions.py::TestDatetime64SeriesReductions::test_minmax_nat_series[nat_ser1]", - "tests/reductions/test_reductions.py::TestDatetime64SeriesReductions::test_minmax_nat_series[nat_ser2]", - "tests/reductions/test_reductions.py::TestIndexReductions::test_minmax_timedelta_empty_or_na[max]", - "tests/reductions/test_reductions.py::TestIndexReductions::test_minmax_timedelta_empty_or_na[min]", - "tests/reductions/test_reductions.py::TestReductions::test_nanminmax[index-datetime64[ns]-val2-max]", - "tests/reductions/test_reductions.py::TestReductions::test_nanminmax[index-datetime64[ns]-val2-min]", - "tests/reductions/test_reductions.py::TestReductions::test_nanminmax[series-datetime64[ns]-val2-max]", - "tests/reductions/test_reductions.py::TestReductions::test_nanminmax[series-datetime64[ns]-val2-min]", - "tests/reductions/test_reductions.py::TestReductions::test_nanops_empty_object[index-M8[ns]-max]", - "tests/reductions/test_reductions.py::TestReductions::test_nanops_empty_object[index-M8[ns]-min]", - "tests/reductions/test_reductions.py::TestReductions::test_nanops_empty_object[series-M8[ns]-max]", - "tests/reductions/test_reductions.py::TestReductions::test_nanops_empty_object[series-M8[ns]-min]", - "tests/reductions/test_reductions.py::TestSeriesMode::test_mode_category[False-expected11-expected21-expected31]", - "tests/reductions/test_reductions.py::TestSeriesMode::test_mode_datetime[False-expected11-expected21]", - "tests/reductions/test_reductions.py::TestSeriesMode::test_mode_timedelta[False-expected11-expected21]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[data2-expected_data2-False-any-Float64]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[data2-expected_data2-False-any-Int64]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[data2-expected_data2-False-any-UInt64]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[data2-expected_data2-False-any-boolean]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[data3-expected_data3-False-any-Float64]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[data3-expected_data3-False-any-Int64]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[data3-expected_data3-False-any-UInt64]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[data3-expected_data3-False-any-boolean]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_object_dtype_missing[data0-any]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_object_dtype_missing[data1-any]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_empty_timeseries_reductions_return_nat[False-M8[ns]]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_empty_timeseries_reductions_return_nat[False-m8[ns]0]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_empty_timeseries_reductions_return_nat[False-m8[ns]1]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_empty_timeseries_reductions_return_nat[True-M8[ns]]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_empty_timeseries_reductions_return_nat[True-m8[ns]0]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_empty_timeseries_reductions_return_nat[True-m8[ns]1]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_ops_consistency_on_empty_nullable[Int64-mean]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_ops_consistency_on_empty_nullable[Int64-var]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_ops_consistency_on_empty_nullable[boolean-mean]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_ops_consistency_on_empty_nullable[boolean-var]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_sum_inf", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_sum_overflow_float[float32-False]", - "tests/reductions/test_reductions.py::TestSeriesReductions::test_sum_overflow_float[float32-True]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean[None-Index]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean[None-Series]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean[None-array]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean[zoneinfo.ZoneInfo(key='US/Pacific')-Index]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean[zoneinfo.ZoneInfo(key='US/Pacific')-Series]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean[zoneinfo.ZoneInfo(key='US/Pacific')-array]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean[zoneinfo.ZoneInfo(key='UTC')-Index]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean[zoneinfo.ZoneInfo(key='UTC')-Series]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean[zoneinfo.ZoneInfo(key='UTC')-array]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[B-Index]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[B-Series]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[B-array]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[D-Index]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[D-Series]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[D-array]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[W-Index]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[W-Series]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[W-array]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[h-Index]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[h-Series]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[h-array]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[s-Index]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[s-Series]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_period_mean[s-array]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_td64_mean[Index]", - "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_td64_mean[Series]", - "tests/resample/test_base.py::test_first_last_skipna[Float32-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[Float32-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[Float32-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[Float32-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[Float64-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[Float64-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[Float64-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[Float64-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[Int16-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[Int16-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[Int16-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[Int16-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[Int32-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[Int32-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[Int32-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[Int32-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[Int64-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[Int64-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[Int64-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[Int64-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[Int8-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[Int8-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[Int8-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[Int8-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[UInt16-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[UInt16-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[UInt16-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[UInt16-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[UInt32-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[UInt32-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[UInt32-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[UInt32-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[UInt64-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[UInt64-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[UInt64-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[UInt64-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[UInt8-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[UInt8-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[UInt8-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[UInt8-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[double[pyarrow]-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[double[pyarrow]-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[double[pyarrow]-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[double[pyarrow]-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[float-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[float-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[float-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[float-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[float32-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[float32-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[float32-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[float32-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[float64-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[float64-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[float64-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[float64-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[float[pyarrow]-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[float[pyarrow]-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[float[pyarrow]-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[float[pyarrow]-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[int16[pyarrow]-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[int16[pyarrow]-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[int16[pyarrow]-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[int16[pyarrow]-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[int32[pyarrow]-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[int32[pyarrow]-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[int32[pyarrow]-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[int32[pyarrow]-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[int64[pyarrow]-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[int64[pyarrow]-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[int64[pyarrow]-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[int64[pyarrow]-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[int8[pyarrow]-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[int8[pyarrow]-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[int8[pyarrow]-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[int8[pyarrow]-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[uint16[pyarrow]-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[uint16[pyarrow]-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[uint16[pyarrow]-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[uint16[pyarrow]-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[uint32[pyarrow]-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[uint32[pyarrow]-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[uint32[pyarrow]-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[uint32[pyarrow]-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[uint64[pyarrow]-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[uint64[pyarrow]-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[uint64[pyarrow]-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[uint64[pyarrow]-True-last]", - "tests/resample/test_base.py::test_first_last_skipna[uint8[pyarrow]-False-first]", - "tests/resample/test_base.py::test_first_last_skipna[uint8[pyarrow]-False-last]", - "tests/resample/test_base.py::test_first_last_skipna[uint8[pyarrow]-True-first]", - "tests/resample/test_base.py::test_first_last_skipna[uint8[pyarrow]-True-last]", - "tests/resample/test_datetime_index.py::test_resample_anchored_intraday2[ms]", - "tests/resample/test_datetime_index.py::test_resample_anchored_intraday2[ns]", - "tests/resample/test_datetime_index.py::test_resample_anchored_intraday2[s]", - "tests/resample/test_datetime_index.py::test_resample_anchored_intraday2[us]", - "tests/resample/test_datetime_index.py::test_resample_datetime_values[ms]", - "tests/resample/test_datetime_index.py::test_resample_datetime_values[ns]", - "tests/resample/test_datetime_index.py::test_resample_datetime_values[s]", - "tests/resample/test_datetime_index.py::test_resample_datetime_values[us]", - "tests/resample/test_datetime_index.py::test_resample_empty_series_with_tz", - "tests/resample/test_datetime_index.py::test_resample_group_info[ms-10-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[ms-10-10000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[ms-100-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[ms-100-10000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[ms-1000-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[ms-1000-10000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[ns-10-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[ns-10-10000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[ns-100-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[ns-100-10000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[ns-1000-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[ns-1000-10000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[s-10-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[s-10-10000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[s-100-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[s-100-10000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[s-1000-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[s-1000-10000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[us-10-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[us-10-10000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[us-100-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[us-100-10000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[us-1000-100000]", - "tests/resample/test_datetime_index.py::test_resample_group_info[us-1000-10000]", - "tests/resample/test_datetime_index.py::test_resample_nunique[ms]", - "tests/resample/test_datetime_index.py::test_resample_nunique[ns]", - "tests/resample/test_datetime_index.py::test_resample_nunique[s]", - "tests/resample/test_datetime_index.py::test_resample_nunique[us]", - "tests/resample/test_datetime_index.py::test_resample_origin_epoch_with_tz_day_vs_24h[ms]", - "tests/resample/test_datetime_index.py::test_resample_origin_epoch_with_tz_day_vs_24h[ns]", - "tests/resample/test_datetime_index.py::test_resample_origin_epoch_with_tz_day_vs_24h[s]", - "tests/resample/test_datetime_index.py::test_resample_origin_epoch_with_tz_day_vs_24h[us]", - "tests/resample/test_datetime_index.py::test_resample_rounding[ms]", - "tests/resample/test_datetime_index.py::test_resample_rounding[ns]", - "tests/resample/test_datetime_index.py::test_resample_rounding[us]", - "tests/resample/test_datetime_index.py::test_resample_size[ms]", - "tests/resample/test_datetime_index.py::test_resample_size[ns]", - "tests/resample/test_datetime_index.py::test_resample_size[s]", - "tests/resample/test_datetime_index.py::test_resample_size[us]", - "tests/resample/test_datetime_index.py::test_resample_upsampling_picked_but_not_correct[ms]", - "tests/resample/test_datetime_index.py::test_resample_upsampling_picked_but_not_correct[ns]", - "tests/resample/test_datetime_index.py::test_resample_upsampling_picked_but_not_correct[s]", - "tests/resample/test_datetime_index.py::test_resample_upsampling_picked_but_not_correct[us]", - "tests/resample/test_period_index.py::TestPeriodIndex::test_evenly_divisible_with_no_extra_bins2", - "tests/resample/test_period_index.py::TestPeriodIndex::test_resample_basic", - "tests/resample/test_period_index.py::TestPeriodIndex::test_resample_tz_localized[ms]", - "tests/resample/test_period_index.py::TestPeriodIndex::test_resample_tz_localized[ns]", - "tests/resample/test_period_index.py::TestPeriodIndex::test_resample_tz_localized[s]", - "tests/resample/test_period_index.py::TestPeriodIndex::test_resample_tz_localized[us]", - "tests/resample/test_period_index.py::TestPeriodIndex::test_with_local_timezone[tz0]", - "tests/resample/test_period_index.py::TestPeriodIndex::test_with_local_timezone[tz1]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_col_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_col_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_col_resample-agg2]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_grouper_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_grouper_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_grouper_resample-agg2]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_mult_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_mult_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_mult_resample-agg2]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_resample-agg2]", - "tests/resample/test_resample_api.py::test_agg_both_mean_sum[df_col_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_both_mean_sum[df_grouper_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_both_mean_sum[df_mult_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_both_mean_sum[df_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_mixed_column_aggregation[df_col_resample]", - "tests/resample/test_resample_api.py::test_agg_mixed_column_aggregation[df_grouper_resample]", - "tests/resample/test_resample_api.py::test_agg_mixed_column_aggregation[df_resample]", - "tests/resample/test_resample_api.py::test_agg_specificationerror_series[df_col_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_specificationerror_series[df_grouper_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_specificationerror_series[df_mult_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_specificationerror_series[df_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_col_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_col_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_col_resample-agg2]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_grouper_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_grouper_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_grouper_resample-agg2]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_mult_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_mult_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_mult_resample-agg2]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_resample-agg0]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_resample-agg1]", - "tests/resample/test_resample_api.py::test_agg_with_lambda[df_resample-agg2]", - "tests/resample/test_resample_api.py::test_groupby_resample_api", - "tests/resample/test_resample_api.py::test_resample_group_keys", - "tests/resample/test_resample_api.py::test_transform_frame[None]", - "tests/resample/test_resample_api.py::test_transform_frame[date]", - "tests/resample/test_resampler_grouper.py::test_deferred_with_groupby", - "tests/resample/test_time_grouper.py::test_aggregate_normal[count]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[first]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[last]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[max]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[mean]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[median]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[min]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[nunique]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[ohlc]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[prod]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[quantile]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[sem]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[size]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[std]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[sum]", - "tests/resample/test_time_grouper.py::test_aggregate_normal[var]", - "tests/resample/test_time_grouper.py::test_apply_iteration", - "tests/resample/test_time_grouper.py::test_repr", - "tests/reshape/concat/test_append.py::TestAppend::test_append_different_columns_types[CategoricalIndex-MultiIndex0]", - "tests/reshape/concat/test_append.py::TestAppend::test_append_different_columns_types[CategoricalIndex-MultiIndex1]", - "tests/reshape/concat/test_append.py::TestAppend::test_append_different_columns_types[Index-MultiIndex2]", - "tests/reshape/concat/test_append.py::TestAppend::test_append_dtype_coerce[False]", - "tests/reshape/concat/test_append.py::TestAppend::test_append_dtype_coerce[True]", - "tests/reshape/concat/test_append_common.py::TestConcatAppendCommon::test_categorical_concat_append", - "tests/reshape/concat/test_append_common.py::TestConcatAppendCommon::test_concat_categorical_coercion_nan", - "tests/reshape/concat/test_append_common.py::TestConcatAppendCommon::test_concat_categorical_empty", - "tests/reshape/concat/test_categorical.py::TestCategoricalConcat::test_categorical_index_preserver", - "tests/reshape/concat/test_categorical.py::TestCategoricalConcat::test_categorical_index_upcast", - "tests/reshape/concat/test_categorical.py::TestCategoricalConcat::test_concat_categorical_datetime", - "tests/reshape/concat/test_concat.py::TestConcatenate::test_concat_copy", - "tests/reshape/concat/test_concat.py::TestConcatenate::test_concat_keys_specific_levels", - "tests/reshape/concat/test_concat.py::TestConcatenate::test_concat_order", - "tests/reshape/concat/test_concat.py::test_concat_empty_and_non_empty_frame_regression", - "tests/reshape/concat/test_concat.py::test_concat_ignore_empty_object_float[None-int64]", - "tests/reshape/concat/test_concat.py::test_concat_ignore_empty_object_float[float64-int64]", - "tests/reshape/concat/test_concat.py::test_concat_ignore_empty_object_float[object-int64]", - "tests/reshape/concat/test_concat.py::test_concat_retain_attrs[data0]", - "tests/reshape/concat/test_concat.py::test_concat_retain_attrs[data1]", - "tests/reshape/concat/test_concat.py::test_concat_retain_attrs[data2]", - "tests/reshape/concat/test_concat.py::test_concat_retain_attrs[data3]", - "tests/reshape/concat/test_datetimes.py::test_concat_float_datetime64", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_dataframe_dtypes", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_df_object_dtype", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtype_category_with_array", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[M8[ns]-bool-object_]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[M8[ns]-int64-object_]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[bool-float32-object_]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[bool-int32-object_]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[category-object-object]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[m8[ns]-bool-object_]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[m8[ns]-int64-object_]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[M8[ns]-float64]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[M8[ns]-int8]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[M8[ns]-m8[ns]]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[M8[ns]-uint8]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[float64-M8[ns]]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[float64-int8]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[float64-m8[ns]]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[float64-uint8]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[int8-M8[ns]]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[int8-m8[ns]]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[int8-uint8]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[m8[ns]-M8[ns]]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[m8[ns]-float64]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[m8[ns]-int8]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[m8[ns]-uint8]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[uint8-M8[ns]]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[uint8-m8[ns]]", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_triple", - "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_timelike[values0-None]", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_frame[axis='columns']", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_frame[axis='index']", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_frame[axis=0]", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_frame[axis=1]", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_series[axis='columns']", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_series[axis=1]", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_same_index_names[idx-None-None-None]", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_same_index_names[idx-idx-None-None]", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_same_index_names[idx1-idx1-idx2-None]", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_same_index_names[idx1-idx2-None-None]", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_same_index_names[idx1-idx2-idx3-None]", - "tests/reshape/concat/test_index.py::TestIndexConcat::test_default_index", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_axis_1_sort_false_rangeindex", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_find_common[Int16]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_find_common[Int32]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_find_common[Int8]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Float32]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Float64]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Int16]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Int32]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Int64]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Int8]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[UInt16]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[UInt32]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[UInt64]", - "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[UInt8]", - "tests/reshape/concat/test_series.py::TestSeriesConcat::test_concat_series_axis1", - "tests/reshape/concat/test_sort.py::TestConcatSort::test_concat_sort_none_raises", - "tests/reshape/merge/test_join.py::TestJoin::test_join_index_mixed[right]", - "tests/reshape/merge/test_join.py::TestJoin::test_join_many_non_unique_index", - "tests/reshape/merge/test_join.py::TestJoin::test_join_multi_to_multi[right]", - "tests/reshape/merge/test_join.py::TestJoin::test_join_multiindex", - "tests/reshape/merge/test_join.py::test_join_empty[False-cross-empty]", - "tests/reshape/merge/test_join.py::test_join_empty[False-right-empty]", - "tests/reshape/merge/test_join.py::test_join_empty[True-cross-empty]", - "tests/reshape/merge/test_join.py::test_join_empty[True-right-right]", - "tests/reshape/merge/test_join.py::test_join_multiindex_categorical_output_index_dtype[right-values3]", - "tests/reshape/merge/test_merge.py::TestMerge::test_index_and_on_parameters_confusion", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[inner-kwarg1]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[inner-kwarg2]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[left-kwarg1]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[left-kwarg2]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[outer-kwarg1]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[outer-kwarg2]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[right-kwarg0]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[right-kwarg1]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[right-kwarg2]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[right-kwarg3]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_notempty", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_nocopy", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_non_string_columns", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index0-expected_index0-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index0-expected_index0-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index1-expected_index1-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index1-expected_index1-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index10-expected_index10-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index10-expected_index10-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index11-expected_index11-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index11-expected_index11-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index12-expected_index12-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index12-expected_index12-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index13-expected_index13-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index13-expected_index13-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index14-expected_index14-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index14-expected_index14-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index16-expected_index16-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index16-expected_index16-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index2-expected_index2-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index2-expected_index2-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index3-expected_index3-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index3-expected_index3-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index4-expected_index4-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index4-expected_index4-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index5-expected_index5-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index5-expected_index5-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index6-expected_index6-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index6-expected_index6-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index7-expected_index7-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index7-expected_index7-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index8-expected_index8-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index8-expected_index8-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index9-expected_index9-outer]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index9-expected_index9-right]", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_right_index_right", - "tests/reshape/merge/test_merge.py::TestMerge::test_merge_take_missing_values_from_index_of_other_dtype", - "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_categorical_dates", - "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_merged_different[inner-1]", - "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_merged_different[left-0]", - "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_merged_different[left-1]", - "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_merged_different[outer-1]", - "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_merged_different[right-1]", - "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_merge_categorical", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_join_multi_dtypes[float32-int320]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_join_multi_dtypes[float32-int321]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_bool_dtype[right-expected_data3]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_empty[False-right-empty]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_empty[True-right-right]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_incompat_dtypes_are_ok[df1_vals3-df2_vals3]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_incompat_dtypes_error[df1_vals2-df2_vals2]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_incompat_dtypes_error[df1_vals3-df2_vals3]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_incompat_dtypes_error[df1_vals4-df2_vals4]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_on_ints_floats[int_vals0-float_vals0-exp_vals0]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_on_ints_floats[int_vals1-float_vals1-exp_vals1]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_on_ints_floats[int_vals2-float_vals2-exp_vals2]", - "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_on_ints_floats_warning", - "tests/reshape/merge/test_merge.py::TestMergeOnIndexes::test_merge_on_indexes[right-False-expected4]", - "tests/reshape/merge/test_merge.py::TestMergeOnIndexes::test_merge_on_indexes[right-True-expected5]", - "tests/reshape/merge/test_merge.py::test_merge_datetime_different_resolution[None-right]", - "tests/reshape/merge/test_merge.py::test_merge_different_index_names", - "tests/reshape/merge/test_merge.py::test_merge_ea[Float32-right]", - "tests/reshape/merge/test_merge.py::test_merge_ea[Float64-right]", - "tests/reshape/merge/test_merge.py::test_merge_ea[Int16-right]", - "tests/reshape/merge/test_merge.py::test_merge_ea[Int32-right]", - "tests/reshape/merge/test_merge.py::test_merge_ea[Int64-right]", - "tests/reshape/merge/test_merge.py::test_merge_ea[Int8-right]", - "tests/reshape/merge/test_merge.py::test_merge_ea[UInt16-right]", - "tests/reshape/merge/test_merge.py::test_merge_ea[UInt32-right]", - "tests/reshape/merge/test_merge.py::test_merge_ea[UInt64-right]", - "tests/reshape/merge/test_merge.py::test_merge_ea[UInt8-right]", - "tests/reshape/merge/test_merge.py::test_merge_ea_int_and_float_numpy", - "tests/reshape/merge/test_merge.py::test_merge_result_empty_index_and_on", - "tests/reshape/merge/test_merge.py::test_merge_right_left_index", - "tests/reshape/merge/test_merge.py::test_merge_series[on4-None-None-False-False-None]", - "tests/reshape/merge/test_merge.py::test_merge_series_multilevel", - "tests/reshape/merge/test_merge.py::test_merge_suffix[0-0-kwargs1-expected_cols1]", - "tests/reshape/merge/test_merge.py::test_merge_suffix[0-0-kwargs10-expected_cols10]", - "tests/reshape/merge/test_merge.py::test_merge_suffix[0.0-0.0-kwargs5-expected_cols5]", - "tests/reshape/merge/test_merge.py::test_merge_suffix[a-a-kwargs7-expected_cols7]", - "tests/reshape/merge/test_merge.py::test_merge_suffix[a-a-kwargs9-expected_cols9]", - "tests/reshape/merge/test_merge.py::test_merge_suffix[b-b-kwargs6-expected_cols6]", - "tests/reshape/merge/test_merge.py::test_merge_suffix_raises[suffixes0]", - "tests/reshape/merge/test_merge.py::test_merge_suffix_raises[suffixes1]", - "tests/reshape/merge/test_merge.py::test_merge_suffixes_produce_dup_columns_raises", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df0-right_df1-left_on0-right_on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df0-right_df1-left_on3-right_on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df0-right_df2-left_on0-right_on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df0-right_df2-left_on3-right_on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df0-left_on0-right_on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df0-left_on2-right_on2-left]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df0-left_on3-right_on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df1-left_on2-right_on2-left]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df1-left_on3-right_on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df2-left_on2-right_on2-left]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df2-left_on3-right_on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df0-left_on0-right_on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df0-left_on2-right_on2-left]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df0-left_on3-right_on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df1-left_on0-right_on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df1-left_on2-right_on2-left]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df1-left_on3-right_on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df2-left_on0-right_on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df2-left_on1-right_on1-right]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df2-left_on3-right_on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df1-on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df1-on2-right]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df1-on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df2-on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df2-on2-right]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df2-on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df0-on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df0-on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df1-on2-right]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df1-on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df2-on2-right]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df2-on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df0-on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df0-on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df1-on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df1-on2-right]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df1-on3-outer]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df2-on0-inner]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df2-on1-left]", - "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df2-on3-outer]", - "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_empty_frames[inner]", - "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_empty_frames[left]", - "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_empty_frames[outer]", - "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_empty_frames[right]", - "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_multi[inner]", - "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_multi[left]", - "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_multi[outer]", - "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_multi[right]", - "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_wrong_order", - "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_single_common_level", - "tests/reshape/merge/test_multi.py::TestMergeMulti::test_left_join_multi_index[False-True]", - "tests/reshape/merge/test_multi.py::TestMergeMulti::test_left_join_multi_index[True-True]", - "tests/reshape/merge/test_multi.py::TestMergeMulti::test_merge_on_multikey[right]", - "tests/reshape/test_crosstab.py::TestCrosstab::test_crosstab_duplicate_names", - "tests/reshape/test_crosstab.py::TestCrosstab::test_crosstab_multiple", - "tests/reshape/test_crosstab.py::TestCrosstab::test_crosstab_no_overlap", - "tests/reshape/test_crosstab.py::TestCrosstab::test_crosstab_with_categorial_columns", - "tests/reshape/test_crosstab.py::TestCrosstab::test_crosstab_with_empties", - "tests/reshape/test_cut.py::test_bins[array]", - "tests/reshape/test_cut.py::test_bins[list]", - "tests/reshape/test_cut.py::test_bins_from_interval_index", - "tests/reshape/test_cut.py::test_bins_not_monotonic", - "tests/reshape/test_cut.py::test_cut_bool_coercion_to_int[array-assert_categorical_equal-6]", - "tests/reshape/test_cut.py::test_cut_bool_coercion_to_int[array-assert_categorical_equal-7]", - "tests/reshape/test_cut.py::test_cut_non_unique_labels[data0-bins0-labels0-expected_codes0-expected_labels0]", - "tests/reshape/test_cut.py::test_cut_non_unique_labels[data1-bins1-labels1-expected_codes1-expected_labels1]", - "tests/reshape/test_cut.py::test_cut_nullable_integer[False-False-bins1]", - "tests/reshape/test_cut.py::test_cut_nullable_integer[False-True-bins1]", - "tests/reshape/test_cut.py::test_cut_nullable_integer[True-False-bins1]", - "tests/reshape/test_cut.py::test_cut_nullable_integer[True-True-bins1]", - "tests/reshape/test_cut.py::test_cut_pass_labels[-0]", - "tests/reshape/test_cut.py::test_cut_pass_labels_compat", - "tests/reshape/test_cut.py::test_cut_pass_series_name_to_factor", - "tests/reshape/test_cut.py::test_cut_unordered_labels[data0-bins0-labels0-expected_codes0-expected_labels0]", - "tests/reshape/test_cut.py::test_cut_unordered_labels[data1-bins1-labels1-expected_codes1-expected_labels1]", - "tests/reshape/test_cut.py::test_datetime_nan_error", - "tests/reshape/test_cut.py::test_datetime_nan_mask", - "tests/reshape/test_cut.py::test_label_precision", - "tests/reshape/test_cut.py::test_no_right", - "tests/reshape/test_cut.py::test_right", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_prefix_str[dense]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_string_dtype", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_string_dtype[string=str[pyarrow]]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_string_dtype[string=str[python]]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_string_dtype[string=string[pyarrow]]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_string_dtype[string=string[python]]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_arrow_dtype", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_basic_drop_first_NA[dense]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_basic_drop_first_one_level[dense]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_ea_dtype", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_ea_dtype[string=str[pyarrow]-string]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_ea_dtype[string=str[python]-string]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_ea_dtype[string=string[pyarrow]-category]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_ea_dtype[string=string[pyarrow]-string]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_ea_dtype[string=string[python]-category]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_ea_dtype[string=string[python]-string]", - "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_int_int", - "tests/reshape/test_melt.py::TestMelt::test_melt_ea_columns", - "tests/reshape/test_melt.py::TestMelt::test_multiindex", - "tests/reshape/test_melt.py::TestMelt::test_vars_work_with_multiindex", - "tests/reshape/test_melt.py::TestWideToLong::test_invalid_separator", - "tests/reshape/test_melt.py::TestWideToLong::test_invalid_suffixtype", - "tests/reshape/test_melt.py::TestWideToLong::test_raise_of_column_name_value", - "tests/reshape/test_pivot.py::TestPivotTable::test_categorical_aggfunc[None]", - "tests/reshape/test_pivot.py::TestPivotTable::test_categorical_pivot_index_ordering[False]", - "tests/reshape/test_pivot.py::TestPivotTable::test_daily", - "tests/reshape/test_pivot.py::TestPivotTable::test_monthly", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_complex_aggfunc", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_multi_functions", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_no_level_overlap", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_string_as_func", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_string_func_vs_func[f3-f_numpy3]", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_string_func_vs_func[f4-f_numpy4]", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_string_func_vs_func[f5-f_numpy5]", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_aggfunc_nunique_with_different_values", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_categorical_observed_equal[False]", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_multiindex_columns_doctest_case", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_nocols", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_not_series", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_with_iterator_values", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_with_mixed_nested_tuples", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_timegrouper", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_timegrouper_double", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_categorical[False-False]", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_categorical[False-None]", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_categorical[False-True]", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_list_like_values[False-values0]", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_list_like_values[True-values0]", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_list_like_values_nans[False-values0]", - "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_list_like_values_nans[True-values0]", - "tests/reshape/test_pivot_multilevel.py::test_pivot_list_like_columns[input_index1-input_columns1-values-expected_values1-expected_columns1-expected_index1]", - "tests/reshape/test_pivot_multilevel.py::test_pivot_list_like_columns[input_index3-input_columns3-values-expected_values3-expected_columns3-expected_index3]", - "tests/reshape/test_pivot_multilevel.py::test_pivot_list_like_columns[lev4-input_columns0-values-expected_values0-expected_columns0-expected_index0]", - "tests/reshape/test_qcut.py::test_date_like_qcut_bins[arg1-expected_bins1]", - "tests/scalar/period/test_period.py::TestPeriodConstruction::test_construct_from_nat_string_and_freq[D]", - "tests/scalar/period/test_period.py::TestPeriodConstruction::test_construct_from_nat_string_and_freq[M]", - "tests/scalar/period/test_period.py::TestPeriodConstruction::test_construct_from_nat_string_and_freq[Y]", - "tests/scalar/period/test_period.py::TestPeriodConstruction::test_construct_from_nat_string_and_freq[h]", - "tests/scalar/period/test_period.py::TestPeriodConstruction::test_constructor_corner", - "tests/scalar/period/test_period.py::TestPeriodConstruction::test_period_cons_nat", - "tests/scalar/period/test_period.py::TestPeriodMethods::test_repr_nat", - "tests/scalar/test_nat.py::test_identity[-9223372036854775808-Period]", - "tests/scalar/test_nat.py::test_identity[-Period]", - "tests/scalar/test_nat.py::test_identity[NAT-Period]", - "tests/scalar/test_nat.py::test_identity[NaT-Period]", - "tests/scalar/test_nat.py::test_identity[None-Period]", - "tests/scalar/test_nat.py::test_identity[nan0-Period]", - "tests/scalar/test_nat.py::test_identity[nan1-Period]", - "tests/scalar/test_nat.py::test_identity[nat-Period]", - "tests/scalar/test_nat.py::test_identity[value4-Period]", - "tests/scalar/timedelta/methods/test_as_unit.py::TestAsUnit::test_as_unit", - "tests/scalar/timedelta/test_arithmetic.py::TestTimedeltaComparison::test_compare_pytimedelta_bounds", - "tests/scalar/timedelta/test_constructors.py::test_construction_out_of_bounds_td64s[106752000000000-D]", - "tests/scalar/timedelta/test_constructors.py::test_construction_out_of_bounds_td64s[15251000000000-W]", - "tests/scalar/timedelta/test_constructors.py::test_construction_out_of_bounds_td64s[153722868000000000-m]", - "tests/scalar/timedelta/test_constructors.py::test_construction_out_of_bounds_td64s[2562048000000000-h]", - "tests/scalar/timedelta/test_constructors.py::test_timedelta_constructor_identity", - "tests/scalar/timedelta/test_timedelta.py::TestNonNano::test_hash", - "tests/scalar/timedelta/test_timedelta.py::TestNonNano::test_max[ms]", - "tests/scalar/timedelta/test_timedelta.py::TestNonNano::test_max[s]", - "tests/scalar/timedelta/test_timedelta.py::TestNonNano::test_min[ms]", - "tests/scalar/timedelta/test_timedelta.py::TestNonNano::test_min[s]", - "tests/scalar/timestamp/methods/test_as_unit.py::TestTimestampAsUnit::test_as_unit", - "tests/scalar/timestamp/methods/test_replace.py::TestTimestampReplace::test_replace_out_of_pydatetime_bounds", - "tests/scalar/timestamp/test_constructors.py::test_timestamp_constructor_identity", - "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_max[ms]", - "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_max[s]", - "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_max[us]", - "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_min[ms]", - "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_min[s]", - "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_min[us]", - "tests/scalar/timestamp/test_timestamp.py::TestTimestampProperties::test_dow_historic[-0040-1-1-4]", - "tests/scalar/timestamp/test_timestamp.py::TestTimestampProperties::test_dow_historic[0000-2-29-1]", - "tests/scalar/timestamp/test_timestamp.py::TestTimestampProperties::test_dow_historic[0000-3-1-2]", - "tests/scalar/timestamp/test_timestamp.py::TestTimestampProperties::test_dow_parametric", - "tests/scalar/timestamp/test_timestamp.py::test_negative_dates", - "tests/series/accessors/test_cat_accessor.py::TestCatAccessor::test_categorical_delegations", - "tests/series/accessors/test_cat_accessor.py::TestCatAccessor::test_dt_accessor_api_for_categorical[idx0]", - "tests/series/accessors/test_cat_accessor.py::TestCatAccessor::test_dt_accessor_api_for_categorical[idx3]", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_date_tz", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_accessor_datetime_name_accessors[None]", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_accessor_limited_display_api", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_accessor_no_new_attributes", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_namespace_accessor_datetime64[D]", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_namespace_accessor_datetime64[ms]", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_namespace_accessor_datetime64[s]", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_namespace_accessor_index_and_values", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_namespace_accessor_timedelta", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_isocalendar[input_series0-expected_output0]", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_isocalendar[input_series1-expected_output1]", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_isocalendar[input_series2-expected_output2]", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_isocalendar[input_series4-expected_output4]", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_isocalendar[input_series5-expected_output5]", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_strftime", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_strftime_dt64_days", - "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_valid_dt_with_missing_values", - "tests/series/accessors/test_list_accessor.py::test_list_getitem_invalid_index[list_dtype0]", - "tests/series/indexing/test_datetime.py::test_indexing_over_size_cutoff_period_index", - "tests/series/indexing/test_datetime.py::test_indexing_unordered", - "tests/series/indexing/test_getitem.py::TestGetitemDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key0]", - "tests/series/indexing/test_getitem.py::TestGetitemDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key1]", - "tests/series/indexing/test_getitem.py::TestGetitemDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key0]", - "tests/series/indexing/test_getitem.py::TestGetitemDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key1]", - "tests/series/indexing/test_getitem.py::TestSeriesGetitemScalars::test_getitem_float_keys_tuple_values", - "tests/series/indexing/test_getitem.py::TestSeriesGetitemSlices::test_getitem_partial_str_slice_with_datetimeindex", - "tests/series/indexing/test_getitem.py::test_getitem_1tuple_slice_without_multiindex", - "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key0]", - "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key1]", - "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key2]", - "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key3]", - "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key0]", - "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key1]", - "tests/series/indexing/test_indexing.py::test_setitem_empty_indexer[indexer0-val0]", - "tests/series/indexing/test_indexing.py::test_setitem_empty_indexer[indexer0-val1]", - "tests/series/indexing/test_indexing.py::test_setitem_empty_indexer[indexer1-val0]", - "tests/series/indexing/test_indexing.py::test_setitem_empty_indexer[indexer1-val1]", - "tests/series/indexing/test_indexing.py::test_setitem_empty_indexer[indexer2-val0]", - "tests/series/indexing/test_indexing.py::test_setitem_empty_indexer[indexer2-val1]", - "tests/series/indexing/test_indexing.py::test_setitem_empty_indexer[indexer3-val0]", - "tests/series/indexing/test_indexing.py::test_setitem_empty_indexer[indexer3-val1]", - "tests/series/indexing/test_indexing.py::test_slice_with_negative_step[index1]", - "tests/series/indexing/test_setitem.py::TestCoercionBool::test_int_key[iloc-True-bool-None]", - "tests/series/indexing/test_setitem.py::TestCoercionBool::test_int_key[loc-True-bool-None]", - "tests/series/indexing/test_setitem.py::TestCoercionBool::test_int_key[setitem-True-bool-None]", - "tests/series/indexing/test_setitem.py::TestCoercionBool::test_series_where[True-bool-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[iloc-(1+1j)-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[iloc-1-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[iloc-1.1-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[loc-(1+1j)-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[loc-1-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[loc-1.1-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[setitem-(1+1j)-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[setitem-1-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[setitem-1.1-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_series_where[(1+1j)-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_series_where[1-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_series_where[1.1-complex128-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_int_key[iloc-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_int_key[iloc-val0-datetime64[ns]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_int_key[loc-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_int_key[loc-val0-datetime64[ns]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_int_key[setitem-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_int_key[setitem-val0-datetime64[ns]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_mask_key[iloc-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_mask_key[loc-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_mask_key[setitem-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_series_where[val0-datetime64[ns]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[iloc-val0-datetime64[ns, US/Eastern]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[iloc-val1-datetime64[ns, US/Eastern]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[loc-val0-datetime64[ns, US/Eastern]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[loc-val1-datetime64[ns, US/Eastern]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[setitem-val0-datetime64[ns, US/Eastern]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[setitem-val1-datetime64[ns, US/Eastern]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_series_where[val0-datetime64[ns, US/Eastern]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_series_where[val1-datetime64[ns, US/Eastern]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-1-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-1.1-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-val4-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-val5-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-val7-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-val8-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-1-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-1.1-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-val4-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-val5-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-val7-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-val8-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-1-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-1.1-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-val4-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-val5-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-val7-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-val8-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[1-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[1.1-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[val4-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[val5-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[val7-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[val8-float32-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[iloc-1-float64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[iloc-1.1-float64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[loc-1-float64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[loc-1.1-float64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[setitem-1-float64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[setitem-1.1-float64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_series_where[1-float64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_series_where[1.1-float64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionInt64::test_int_key[iloc-1-int64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionInt64::test_int_key[loc-1-int64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionInt64::test_int_key[setitem-1-int64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionInt64::test_series_where[1-int64-None]", - "tests/series/indexing/test_setitem.py::TestCoercionInt8::test_int_key[iloc-val0-int8-None]", - "tests/series/indexing/test_setitem.py::TestCoercionInt8::test_int_key[loc-val0-int8-None]", - "tests/series/indexing/test_setitem.py::TestCoercionInt8::test_int_key[setitem-val0-int8-None]", - "tests/series/indexing/test_setitem.py::TestCoercionInt8::test_series_where[val0-int8-None]", - "tests/series/indexing/test_setitem.py::TestCoercionInt8::test_series_where[val1-int16-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[iloc-object-(1+1j)]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[iloc-object-1.1]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[iloc-object-1]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[iloc-object-True]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[loc-object-(1+1j)]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[loc-object-1.1]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[loc-object-1]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[loc-object-True]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[setitem-object-(1+1j)]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[setitem-object-1.1]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[setitem-object-1]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[setitem-object-True]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_series_where[object-(1+1j)]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_series_where[object-1.1]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_series_where[object-1]", - "tests/series/indexing/test_setitem.py::TestCoercionObject::test_series_where[object-True]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_index_where[1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_int_key[iloc-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_int_key[iloc-val0-timedelta64[ns]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_int_key[loc-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_int_key[loc-val0-timedelta64[ns]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_int_key[setitem-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_int_key[setitem-val0-timedelta64[ns]-None]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_mask_key[iloc-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_mask_key[loc-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_mask_key[setitem-1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_series_where[1-object-FutureWarning]", - "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_series_where[val0-timedelta64[ns]-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_index_where[obj2-expected2-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[iloc-obj1-expected1-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[iloc-obj2-expected2-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[iloc-obj3-expected3-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[loc-obj1-expected1-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[loc-obj2-expected2-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[loc-obj3-expected3-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[setitem-obj1-expected1-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[setitem-obj2-expected2-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[setitem-obj3-expected3-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_mask_key[iloc-obj2-expected2-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_mask_key[loc-obj2-expected2-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_mask_key[setitem-obj2-expected2-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_series_where[obj1-expected1-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_series_where[obj2-expected2-None]", - "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_series_where[obj3-expected3-None]", - "tests/series/indexing/test_setitem.py::TestSetitemBooleanMask::test_setitem_mask_align_and_promote", - "tests/series/indexing/test_setitem.py::TestSetitemBooleanMask::test_setitem_mask_promote_strs", - "tests/series/indexing/test_setitem.py::TestSetitemBooleanMask::test_setitem_mask_smallint_no_upcast", - "tests/series/indexing/test_setitem.py::TestSetitemBooleanMask::test_setitem_mask_smallint_upcast", - "tests/series/indexing/test_setitem.py::TestSetitemCasting::test_setitem_boolean_array_into_npbool", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_index_where[M8[ns]-None]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_index_where[m8[ns]-None]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-array-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-array-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-array-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-list-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-list-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-list-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-array-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-array-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-array-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-list-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-list-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-list-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_series_where[M8[ns]-None]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_series_where[m8[ns]-None]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-array-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-array-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-array-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-list-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-list-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-list-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-array-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-array-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-array-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-list-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-list-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-list-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemFloatIntervalWithIntIntervalValues::test_setitem_example", - "tests/series/indexing/test_setitem.py::TestSetitemFloatNDarrayIntoIntegerSeries::test_slice_key[iloc-val0-None]", - "tests/series/indexing/test_setitem.py::TestSetitemFloatNDarrayIntoIntegerSeries::test_slice_key[loc-val0-None]", - "tests/series/indexing/test_setitem.py::TestSetitemFloatNDarrayIntoIntegerSeries::test_slice_key[setitem-val0-None]", - "tests/series/indexing/test_setitem.py::TestSetitemIntoIntegerSeriesNeedsUpcast::test_int_key[iloc-512]", - "tests/series/indexing/test_setitem.py::TestSetitemIntoIntegerSeriesNeedsUpcast::test_int_key[loc-512]", - "tests/series/indexing/test_setitem.py::TestSetitemIntoIntegerSeriesNeedsUpcast::test_int_key[setitem-512]", - "tests/series/indexing/test_setitem.py::TestSetitemIntoIntegerSeriesNeedsUpcast::test_mask_key[iloc-512]", - "tests/series/indexing/test_setitem.py::TestSetitemIntoIntegerSeriesNeedsUpcast::test_mask_key[loc-512]", - "tests/series/indexing/test_setitem.py::TestSetitemIntoIntegerSeriesNeedsUpcast::test_mask_key[setitem-512]", - "tests/series/indexing/test_setitem.py::TestSetitemIntoIntegerSeriesNeedsUpcast::test_series_where[512]", - "tests/series/indexing/test_setitem.py::TestSetitemIntoIntegerSeriesNeedsUpcast::test_series_where[val1]", - "tests/series/indexing/test_setitem.py::TestSetitemMismatchedTZCastsToObject::test_int_key[iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemMismatchedTZCastsToObject::test_int_key[loc]", - "tests/series/indexing/test_setitem.py::TestSetitemMismatchedTZCastsToObject::test_int_key[setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemMismatchedTZCastsToObject::test_series_where", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int16-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int16-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int16-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int32-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int32-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int32-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int64-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int64-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int64-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int8-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int8-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int8-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint16-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint16-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint16-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint32-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint32-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint32-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint64-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint64-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint64-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint8-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint8-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint8-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_index_where[int]", - "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_int_key[int-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_int_key[int-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_int_key[int-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_mask_key[int-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_mask_key[int-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_mask_key[int-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_series_where[int]", - "tests/series/indexing/test_setitem.py::TestSetitemViewCopySemantics::test_dt64tz_setitem_does_not_mutate_dti", - "tests/series/indexing/test_setitem.py::TestSetitemViewCopySemantics::test_setitem_invalidates_datetime_index_freq", - "tests/series/indexing/test_setitem.py::TestSetitemWithExpansion::test_setitem_enlarge_with_na[na5-target_na5-int64-object-2-None]", - "tests/series/indexing/test_setitem.py::TestSetitemWithExpansion::test_setitem_enlarge_with_na[nan-target_na8-Float64-Float64-1-None]" - "tests/series/indexing/test_setitem.py::TestSetitemWithExpansion::test_setitem_enlarge_with_na[nan-target_na8-Float64-Float64-1-None]", - "tests/series/indexing/test_setitem.py::TestSetitemWithExpansion::test_setitem_enlarge_with_na[nan-target_na8-Float64-Float64-1-None]", - "tests/series/indexing/test_setitem.py::TestSetitemWithExpansion::test_setitem_enlargement_object_none[NAType]", - "tests/series/indexing/test_setitem.py::TestSetitemWithExpansion::test_setitem_enlargement_object_none[NAType]", - "tests/series/indexing/test_setitem.py::TestSmallIntegerSetitemUpcast::test_int_key[iloc-8589934593.0]", - "tests/series/indexing/test_setitem.py::TestSmallIntegerSetitemUpcast::test_int_key[loc-8589934593.0]", - "tests/series/indexing/test_setitem.py::TestSmallIntegerSetitemUpcast::test_int_key[setitem-8589934593.0]", - "tests/series/indexing/test_setitem.py::TestSmallIntegerSetitemUpcast::test_mask_key[iloc-8589934593.0]", - "tests/series/indexing/test_setitem.py::TestSmallIntegerSetitemUpcast::test_mask_key[loc-8589934593.0]", - "tests/series/indexing/test_setitem.py::TestSmallIntegerSetitemUpcast::test_mask_key[setitem-8589934593.0]", - "tests/series/indexing/test_setitem.py::test_setitem_scalar_into_readonly_backing_data", - "tests/series/indexing/test_setitem.py::test_setitem_slice_into_readonly_backing_data", - "tests/series/indexing/test_where.py::test_where_datetimelike_coerce[timedelta64[ns]]", - "tests/series/indexing/test_xs.py::TestXSWithMultiIndex::test_series_getitem_multiindex_xs", - "tests/series/indexing/test_xs.py::TestXSWithMultiIndex::test_xs_level_series", - "tests/series/methods/test_argsort.py::TestSeriesArgsort::test_argsort_axis", - "tests/series/methods/test_argsort.py::TestSeriesArgsort::test_argsort_dt64[ms]", - "tests/series/methods/test_argsort.py::TestSeriesArgsort::test_argsort_dt64[ns]", - "tests/series/methods/test_argsort.py::TestSeriesArgsort::test_argsort_dt64[s]", - "tests/series/methods/test_argsort.py::TestSeriesArgsort::test_argsort_dt64[us]", - "tests/series/methods/test_argsort.py::TestSeriesArgsort::test_argsort_stable", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float-uint16]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float-uint32]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float-uint64]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float-uint8]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float32-uint16]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float32-uint32]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float32-uint64]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float32-uint8]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float64-uint16]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float64-uint32]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float64-uint64]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float64-uint8]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_from_float_to_str[float32]", - "tests/series/methods/test_astype.py::TestAstype::test_astype_to_str_preserves_na[None-None]", - "tests/series/methods/test_astype.py::TestAstypeCategorical::test_astype_categorical_to_other", - "tests/series/methods/test_astype.py::TestAstypeString::test_astype_string_to_extension_dtype_roundtrip[string[pyarrow]-data1-category]", - "tests/series/methods/test_astype.py::TestAstypeString::test_astype_string_to_extension_dtype_roundtrip[string[python]-data1-category]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases0-params11]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases0-params17]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases0-params19]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases0-params1]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases0-params25]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases0-params27]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases0-params3]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases0-params9]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases1-params11]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases1-params17]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases1-params19]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases1-params1]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases1-params25]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases1-params27]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases1-params3]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases1-params9]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases10-params11]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases10-params17]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases10-params19]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases10-params1]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases10-params25]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases10-params27]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases10-params3]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases10-params9]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases11-params11]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases11-params17]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases11-params19]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases11-params1]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases11-params25]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases11-params27]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases11-params3]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases11-params9]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases12-params12]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases12-params14]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases12-params20]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases12-params22]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases12-params28]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases12-params30]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases12-params4]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases12-params6]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params17]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params19]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params1]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params20]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params21]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params22]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params23]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params3]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params4]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params5]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params6]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases2-params7]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params11]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params12]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params14]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params17]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params19]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params1]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params20]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params22]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params25]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params27]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params28]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params30]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params3]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params4]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params6]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases6-params9]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases7-params12]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases7-params14]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases7-params20]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases7-params22]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases7-params28]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases7-params30]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases7-params4]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes[test_cases7-params6]", - "tests/series/methods/test_convert_dtypes.py::TestSeriesConvertDtypes::test_convert_dtypes_pyarrow_to_np_nullable", - "tests/series/methods/test_diff.py::TestSeriesDiff::test_diff_bool[input0-output0-1]", - "tests/series/methods/test_drop.py::test_drop_exception_raised[data1-index1-drop_labels1-0-KeyError-not found in axis]", - "tests/series/methods/test_drop.py::test_drop_unique_and_non_unique_index[data1-index1-drop_labels1-rows-expected_data1-expected_index1]", - "tests/series/methods/test_equals.py::test_equals[arr1-idx1]", - "tests/series/methods/test_equals.py::test_equals[arr2-idx2]", - "tests/series/methods/test_equals.py::test_equals_list_array[val5]", - "tests/series/methods/test_equals.py::test_equals_list_array[val6]", - "tests/series/methods/test_equals.py::test_equals_list_array[val7]", - "tests/series/methods/test_equals.py::test_equals_mismatched_nas[Decimal-NoneType]", - "tests/series/methods/test_equals.py::test_equals_mismatched_nas[Decimal-float0]", - "tests/series/methods/test_equals.py::test_equals_mismatched_nas[Decimal-float1]", - "tests/series/methods/test_equals.py::test_equals_mismatched_nas[NoneType-Decimal]", - "tests/series/methods/test_equals.py::test_equals_mismatched_nas[float0-Decimal]", - "tests/series/methods/test_equals.py::test_equals_mismatched_nas[float1-Decimal]", - "tests/series/methods/test_explode.py::test_duplicate_index", - "tests/series/methods/test_explode.py::test_ignore_index", - "tests/series/methods/test_fillna.py::TestSeriesFillNA::test_datetime64_fillna_mismatched_reso_no_rounding[None-False]", - "tests/series/methods/test_fillna.py::TestSeriesFillNA::test_fillna", - "tests/series/methods/test_fillna.py::TestSeriesFillNA::test_fillna_dont_cast_strings", - "tests/series/methods/test_fillna.py::TestSeriesFillNA::test_fillna_nat", - "tests/series/methods/test_fillna.py::TestSeriesFillNA::test_timedelta64_fillna_mismatched_reso_no_rounding[False]", - "tests/series/methods/test_infer_objects.py::TestInferObjects::test_copy[index]", - "tests/series/methods/test_infer_objects.py::TestInferObjects::test_copy[series]", - "tests/series/methods/test_info.py::test_info_memory", - "tests/series/methods/test_info.py::test_info_memory_usage_deep_not_pypy", - "tests/series/methods/test_info.py::test_info_series[False]", - "tests/series/methods/test_info.py::test_info_series[True]", - "tests/series/methods/test_interpolate.py::TestSeriesInterpolateData::test_interpolate_akima", - "tests/series/methods/test_interpolate.py::TestSeriesInterpolateData::test_interpolate_cubicspline", - "tests/series/methods/test_interpolate.py::TestSeriesInterpolateData::test_interpolate_from_derivatives", - "tests/series/methods/test_interpolate.py::TestSeriesInterpolateData::test_interpolate_piecewise_polynomial", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data0-values0-expected0-Float64]", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data0-values0-expected0-Int64]", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data0-values0-expected0-boolean]", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data2-values2-expected2-Float64]", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data2-values2-expected2-Int64]", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data2-values2-expected2-boolean]", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data4-values4-expected4-Float64]", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data4-values4-expected4-Int64]", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data4-values4-expected4-boolean]", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data5-values5-expected5-Float64]", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data5-values5-expected5-Int64]", - "tests/series/methods/test_isin.py::TestSeriesIsIn::test_isin_masked_types[data5-values5-expected5-boolean]", - "tests/series/methods/test_map.py::test_map_callable", - "tests/series/methods/test_map.py::test_map_counter", - "tests/series/methods/test_map.py::test_map_defaultdict", - "tests/series/methods/test_map.py::test_map_defaultdict_ignore_na", - "tests/series/methods/test_map.py::test_map_defaultdict_missing_key[None]", - "tests/series/methods/test_map.py::test_map_dict_subclass_with_missing", - "tests/series/methods/test_map.py::test_map_dict_with_tuple_keys", - "tests/series/methods/test_map.py::test_map_empty[bool-dtype]", - "tests/series/methods/test_map.py::test_map_empty[categorical]", - "tests/series/methods/test_map.py::test_map_empty[empty]", - "tests/series/methods/test_map.py::test_map_empty[float32]", - "tests/series/methods/test_map.py::test_map_empty[float64]", - "tests/series/methods/test_map.py::test_map_empty[int16]", - "tests/series/methods/test_map.py::test_map_empty[int32]", - "tests/series/methods/test_map.py::test_map_empty[int64]", - "tests/series/methods/test_map.py::test_map_empty[int8]", - "tests/series/methods/test_map.py::test_map_empty[nullable_bool]", - "tests/series/methods/test_map.py::test_map_empty[nullable_float]", - "tests/series/methods/test_map.py::test_map_empty[nullable_int]", - "tests/series/methods/test_map.py::test_map_empty[nullable_uint]", - "tests/series/methods/test_map.py::test_map_empty[object]", - "tests/series/methods/test_map.py::test_map_empty[range]", - "tests/series/methods/test_map.py::test_map_empty[repeats]", - "tests/series/methods/test_map.py::test_map_empty[string]", - "tests/series/methods/test_map.py::test_map_empty[uint16]", - "tests/series/methods/test_map.py::test_map_empty[uint32]", - "tests/series/methods/test_map.py::test_map_empty[uint64]", - "tests/series/methods/test_map.py::test_map_empty[uint8]", - "tests/series/methods/test_map.py::test_map_simple_str_callables_same_as_astype[]", - "tests/series/methods/test_map.py::test_map_int", - "tests/series/methods/test_map.py::test_map_categorical_na_action[None-expected0]", - "tests/series/methods/test_nlargest.py::TestSeriesNLargestNSmallest::test_nlargest_boundary_datetimelike[nsmallest-datetime64[ns]]", - "tests/series/methods/test_nlargest.py::TestSeriesNLargestNSmallest::test_nlargest_boundary_datetimelike[nsmallest-timedelta64[ns]]", - "tests/series/methods/test_nlargest.py::TestSeriesNLargestNSmallest::test_nlargest_error[r4]", - "tests/series/methods/test_nlargest.py::TestSeriesNLargestNSmallest::test_nlargest_misc", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[Int16]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[Int32]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[Int64]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[Int8]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[UInt16]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[UInt32]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[UInt64]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[UInt8]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[Int16]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[Int32]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[Int64]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[Int8]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[UInt16]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[UInt32]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[UInt64]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[UInt8]", - "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtypes[Int64]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_categorical", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[float64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[float64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[float64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[float64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[float64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[float64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[float64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[float64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[int64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[int64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[int64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[int64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[int64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[int64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[int64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[int64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[string[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[string[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[string[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[string[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[string[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[string[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[string[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_dense_method[string[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[average-float64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[average-int64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[average-string[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[dense-float64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[dense-int64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[dense-string[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[first-float64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[first-int64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[first-string[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[max-float64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[max-int64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[max-string[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[min-float64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[min-int64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[min-string[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[results0-Int64]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[results1-Int64]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[results2-Int64]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[results3-Int64]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_descending[results4-Int64]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[average-float64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[average-int64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[average-string[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[dense-float64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[dense-int64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[dense-string[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[first-float64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[first-int64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[first-string[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[max-float64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[max-int64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[max-string[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[min-float64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[min-int64[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods[min-string[pyarrow]]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-bottom-average-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-bottom-average-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-bottom-dense-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-bottom-dense-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-bottom-first-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-bottom-first-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-bottom-max-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-bottom-max-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-bottom-min-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-bottom-min-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-keep-average-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-keep-average-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-keep-dense-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-keep-dense-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-keep-first-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-keep-first-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-keep-max-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-keep-max-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-keep-min-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-keep-min-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-top-average-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-top-average-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-top-dense-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-top-dense-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-top-first-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-top-first-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-top-max-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-top-max-True]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-top-min-False]", - "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_tie_methods_on_infs_nans[float64[pyarrow]-na_value3-inf--inf-top-min-True]", - "tests/series/methods/test_rank.py::test_rank_average_pct[float64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_average_pct[float64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_average_pct[float64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_average_pct[float64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_average_pct[float64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_average_pct[float64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_average_pct[float64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_average_pct[float64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_average_pct[float64[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_average_pct[int64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_average_pct[int64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_average_pct[int64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_average_pct[int64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_average_pct[int64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_average_pct[int64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_average_pct[int64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_average_pct[int64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_average_pct[int64[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_average_pct[string[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_average_pct[string[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_average_pct[string[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_average_pct[string[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_average_pct[string[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_average_pct[string[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_average_pct[string[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_average_pct[string[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_average_pct[string[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[float64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[float64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[float64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[float64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[float64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[float64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[float64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[float64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[float64[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[int64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[int64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[int64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[int64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[int64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[int64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[int64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[int64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[int64[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[string[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[string[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[string[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[string[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[string[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[string[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[string[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[string[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_dense_pct[string[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_first_pct[float64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_first_pct[float64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_first_pct[float64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_first_pct[float64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_first_pct[float64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_first_pct[float64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_first_pct[float64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_first_pct[float64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_first_pct[float64[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_first_pct[int64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_first_pct[int64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_first_pct[int64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_first_pct[int64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_first_pct[int64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_first_pct[int64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_first_pct[int64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_first_pct[int64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_first_pct[int64[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_first_pct[string[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_first_pct[string[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_first_pct[string[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_first_pct[string[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_first_pct[string[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_first_pct[string[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_first_pct[string[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_first_pct[string[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_first_pct[string[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_max_pct[float64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_max_pct[float64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_max_pct[float64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_max_pct[float64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_max_pct[float64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_max_pct[float64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_max_pct[float64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_max_pct[float64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_max_pct[float64[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_max_pct[int64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_max_pct[int64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_max_pct[int64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_max_pct[int64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_max_pct[int64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_max_pct[int64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_max_pct[int64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_max_pct[int64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_max_pct[int64[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_max_pct[string[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_max_pct[string[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_max_pct[string[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_max_pct[string[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_max_pct[string[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_max_pct[string[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_max_pct[string[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_max_pct[string[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_max_pct[string[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_min_pct[float64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_min_pct[float64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_min_pct[float64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_min_pct[float64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_min_pct[float64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_min_pct[float64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_min_pct[float64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_min_pct[float64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_min_pct[float64[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_min_pct[int64[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_min_pct[int64[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_min_pct[int64[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_min_pct[int64[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_min_pct[int64[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_min_pct[int64[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_min_pct[int64[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_min_pct[int64[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_min_pct[int64[pyarrow]-ser8-exp8]", - "tests/series/methods/test_rank.py::test_rank_min_pct[string[pyarrow]-ser0-exp0]", - "tests/series/methods/test_rank.py::test_rank_min_pct[string[pyarrow]-ser1-exp1]", - "tests/series/methods/test_rank.py::test_rank_min_pct[string[pyarrow]-ser2-exp2]", - "tests/series/methods/test_rank.py::test_rank_min_pct[string[pyarrow]-ser3-exp3]", - "tests/series/methods/test_rank.py::test_rank_min_pct[string[pyarrow]-ser4-exp4]", - "tests/series/methods/test_rank.py::test_rank_min_pct[string[pyarrow]-ser5-exp5]", - "tests/series/methods/test_rank.py::test_rank_min_pct[string[pyarrow]-ser6-exp6]", - "tests/series/methods/test_rank.py::test_rank_min_pct[string[pyarrow]-ser7-exp7]", - "tests/series/methods/test_rank.py::test_rank_min_pct[string[pyarrow]-ser8-exp8]", - "tests/series/methods/test_reindex.py::test_reindex", - "tests/series/methods/test_reindex.py::test_reindex_fill_value_datetimelike_upcast[0-datetime64[ns]]", - "tests/series/methods/test_reindex.py::test_reindex_fill_value_datetimelike_upcast[0-timedelta64[ns]]", - "tests/series/methods/test_reindex.py::test_reindex_pad2", - "tests/series/methods/test_reindex.py::test_reindexing_with_float64_NA_log", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_datetime64", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_dtype[string-input_data5-to_replace5-expected_data5]", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_explicit_none", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_mixed_types", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_no_cast[ser0-exp0]", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_nullable_numeric", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_numeric_column_with_na[0.5]", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_numeric_column_with_na[0]", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_string_dtype", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_string_dtype_list_to_replace", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_value_none_dtype_numeric[2.0]", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_value_none_dtype_numeric[2]", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_value_none_dtype_numeric[nan]", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_with_dictlike_and_string_dtype[string[pyarrow]]", - "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_with_dictlike_and_string_dtype[string[python]]", - "tests/series/methods/test_reset_index.py::TestResetIndex::test_reset_index_drop_errors", - "tests/series/methods/test_reset_index.py::TestResetIndex::test_reset_index_level", - "tests/series/methods/test_reset_index.py::test_column_name_duplicates[False-names0-expected_names0]", - "tests/series/methods/test_reset_index.py::test_column_name_duplicates[False-names1-expected_names1]", - "tests/series/methods/test_round.py::TestSeriesRound::test_round_builtin[Float32]", - "tests/series/methods/test_round.py::TestSeriesRound::test_round_builtin[Float64]", - "tests/series/methods/test_round.py::TestSeriesRound::test_round_numpy_with_nan[Float32]", - "tests/series/methods/test_round.py::TestSeriesRound::test_round_numpy_with_nan[Float64]", - "tests/series/methods/test_searchsorted.py::TestSeriesSearchSorted::test_searchsorted_datetime64_list", - "tests/series/methods/test_searchsorted.py::TestSeriesSearchSorted::test_searchsorted_datetime64_scalar", - "tests/series/methods/test_sort_index.py::TestSeriesSortIndex::test_sort_index_na_position", - "tests/series/methods/test_sort_index.py::TestSeriesSortIndexKey::test_sort_index_na_position_key[None]", - "tests/series/methods/test_sort_values.py::TestSeriesSortValues::test_sort_values_categorical", - "tests/series/methods/test_unique.py::TestUnique::test_unique_categorical", - "tests/series/methods/test_update.py::TestUpdate::test_update_dtypes[other8-int32-expected8-FutureWarning]", - "tests/series/methods/test_update.py::TestUpdate::test_update_dtypes[other9-int64-expected9-FutureWarning]", - "tests/series/methods/test_value_counts.py::TestSeriesValueCounts::test_value_counts_categorical_with_nan", - "tests/series/test_api.py::TestSeriesMisc::test_index_tab_completion[index0]", - "tests/series/test_api.py::TestSeriesMisc::test_index_tab_completion[index10]", - "tests/series/test_api.py::TestSeriesMisc::test_index_tab_completion[index11]", - "tests/series/test_api.py::TestSeriesMisc::test_index_tab_completion[index2]", - "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[bool-all-False]", - "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[bool-any-False]", - "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[float-all-False]", - "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[float-any-False]", - "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[int-all-False]", - "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[int-any-False]", - "tests/series/test_api.py::TestSeriesMisc::test_tab_completion", - "tests/series/test_api.py::TestSeriesMisc::test_tab_completion_cat", - "tests/series/test_api.py::TestSeriesMisc::test_tab_completion_cat_str", - "tests/series/test_api.py::TestSeriesMisc::test_tab_completion_dt", - "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_alignment_categorical[numexpr]", - "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_alignment_categorical[python]", - "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_alignment_doesnt_change_tz[numexpr]", - "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_alignment_doesnt_change_tz[python]", - "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_arithmetic_with_duplicate_index[numexpr]", - "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_arithmetic_with_duplicate_index[python]", - "tests/series/test_arithmetic.py::TestSeriesComparison::test_comparison_tuples[numexpr]", - "tests/series/test_arithmetic.py::TestSeriesComparison::test_comparison_tuples[python]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_add_scalar_fill_value[numexpr]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_add_scalar_fill_value[python]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__add__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__floordiv__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__mod__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__mul__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__pow__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__radd__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rfloordiv__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rmod__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rmul__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rpow__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rsub__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rtruediv__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__sub__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__truediv__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__add__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__floordiv__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__mod__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__mul__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__pow__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__radd__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rfloordiv__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rmod__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rmul__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rpow__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rsub__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rtruediv__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__sub__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__truediv__]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-add-add-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-floordiv-floordiv-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-mul-mul-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-pow-pow-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-radd--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-rfloordiv--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-rmul--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-rpow--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-rsub--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-rtruediv--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-rtruediv-rtruediv-1]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-sub-sub-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-truediv-truediv-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[numexpr-truediv-truediv-1]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-add-add-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-floordiv-floordiv-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-mul-mul-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-pow-pow-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-radd--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-rfloordiv--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-rmul--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-rpow--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-rsub--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-rtruediv--0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-rtruediv-rtruediv-1]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-sub-sub-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-truediv-truediv-0]", - "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_operators_combine[python-truediv-truediv-1]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_categorical_sideeffects_free", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_bool_dtype_missing_values", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[int16]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[int32]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[int64]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[int8]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[int]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[uint16]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[uint32]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[uint64]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[uint8]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['+01:15'-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['-02:15'-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['Asia/Tokyo'-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['US/Eastern'-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['UTC'-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['UTC+01:15'-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['UTC-02:15'-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['dateutil/Asia/Singapore'-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['dateutil/US/Pacific'-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[datetime.timezone(datetime.timedelta(seconds=3600))-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[datetime.timezone.utc-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[pytz.FixedOffset(-300)-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[pytz.FixedOffset(300)-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[tzlocal()-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[tzutc()-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[zoneinfo.ZoneInfo(key='US/Pacific')-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[zoneinfo.ZoneInfo(key='UTC')-True]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_datetimes_with_nulls", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_dtype_datetime64_10", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_dtype_datetime64_11", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_dtype_no_cast", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_dtype_timedelta64", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_floating_data_int_dtype[DataFrame]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_floating_data_int_dtype[Series]", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_list_of_tuples", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_maskedarray", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_no_data_string_type", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_no_partial_datetime_casting", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_pass_none", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_range_overflows", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_tuple_of_tuples", - "tests/series/test_constructors.py::TestSeriesConstructors::test_convert_non_ns", - "tests/series/test_constructors.py::TestSeriesConstructors::test_invalid_dtype", - "tests/series/test_constructors.py::TestSeriesConstructors::test_series_from_index_dtype_equal_does_not_copy", - "tests/series/test_constructors.py::TestSeriesConstructors::test_series_string_inference", - "tests/series/test_constructors.py::TestSeriesConstructors::test_series_string_inference_array_string_dtype", - "tests/series/test_constructors.py::TestSeriesConstructors::test_series_string_inference_scalar", - "tests/series/test_constructors.py::TestSeriesConstructors::test_series_string_inference_storage_definition", - "tests/series/test_constructors.py::TestSeriesConstructors::test_series_string_with_na_inference[None]", - "tests/series/test_formats.py::TestSeriesRepr::test_newline", - "tests/series/test_formats.py::TestSeriesRepr::test_newline[string=object]", - "tests/series/test_formats.py::TestSeriesRepr::test_newline[string=str[pyarrow]]", - "tests/series/test_formats.py::TestSeriesRepr::test_newline[string=str[python]]", - "tests/series/test_formats.py::TestSeriesRepr::test_newline[string=string[pyarrow]]", - "tests/series/test_formats.py::TestSeriesRepr::test_newline[string=string[python]]", - "tests/series/test_formats.py::TestSeriesRepr::test_timeseries_repr_object_dtype", - "tests/series/test_iteration.py::TestIteration::test_keys", - "tests/series/test_logical_ops.py::TestSeriesLogicalOps::test_logical_operators_int_dtype_with_bool_dtype_and_reindex", - "tests/series/test_logical_ops.py::TestSeriesLogicalOps::test_logical_ops_df_compat", - "tests/series/test_logical_ops.py::TestSeriesLogicalOps::test_logical_ops_label_based", - "tests/series/test_logical_ops.py::TestSeriesLogicalOps::test_reversed_xor_with_index_returns_series", - "tests/series/test_missing.py::TestSeriesMissingData::test_timedelta64_nan", - "tests/series/test_missing.py::test_hasnans_uncached_for_series", - "tests/series/test_reductions.py::test_td64_summation_overflow", - "tests/series/test_subclass.py::TestSeriesSubclassing::test_asof", - "tests/series/test_subclass.py::TestSeriesSubclassing::test_equals", - "tests/series/test_ufunc.py::TestNumpyReductions::test_max[interval[int64, right]-DataFrame]", - "tests/series/test_ufunc.py::TestNumpyReductions::test_min[interval[int64, right]-DataFrame]", - "tests/series/test_ufunc.py::test_binary_ufunc_scalar[add-sparse-False]", - "tests/series/test_ufunc.py::test_binary_ufunc_scalar[add-sparse-True]", - "tests/series/test_ufunc.py::test_binary_ufunc_scalar[logaddexp-sparse-False]", - "tests/series/test_ufunc.py::test_binary_ufunc_scalar[logaddexp-sparse-True]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_array[sparse-add-flipped]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_array[sparse-add-straight]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_array[sparse-logaddexp-flipped]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_array[sparse-logaddexp-straight]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_index[dense-logaddexp-flipped]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_index[sparse-add-flipped]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_index[sparse-add-straight]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_index[sparse-logaddexp-flipped]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_index[sparse-logaddexp-straight]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-add-flipped-aligned]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-add-flipped-unaligned]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-add-straight-aligned]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-add-straight-unaligned]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-logaddexp-flipped-aligned]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-logaddexp-flipped-unaligned]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-logaddexp-straight-aligned]", - "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-logaddexp-straight-unaligned]", - "tests/series/test_ufunc.py::test_multiple_output_binary_ufuncs[sparse-False-divmod]", - "tests/series/test_ufunc.py::test_multiple_output_binary_ufuncs[sparse-True-divmod]", - "tests/series/test_ufunc.py::test_multiple_output_ufunc[sparse]", - "tests/series/test_ufunc.py::test_unary_ufunc[sparse-exp]", - "tests/series/test_ufunc.py::test_unary_ufunc[sparse-floor]", - "tests/series/test_ufunc.py::test_unary_ufunc[sparse-positive]", - "tests/strings/test_api.py::test_api_for_categorical[count-object]", - "tests/strings/test_api.py::test_api_for_categorical[count-string[pyarrow]]", - "tests/strings/test_api.py::test_api_for_categorical[count-string[pyarrow_numpy]]", - "tests/strings/test_api.py::test_api_for_categorical[count-string[python]]", - "tests/strings/test_api.py::test_api_for_categorical[find-object]", - "tests/strings/test_api.py::test_api_for_categorical[find-string[pyarrow]]", - "tests/strings/test_api.py::test_api_for_categorical[find-string[pyarrow_numpy]]", - "tests/strings/test_api.py::test_api_for_categorical[find-string[python]]", - "tests/strings/test_api.py::test_api_for_categorical[len-object]", - "tests/strings/test_api.py::test_api_for_categorical[len-string[pyarrow]]", - "tests/strings/test_api.py::test_api_for_categorical[len-string[pyarrow_numpy]]", - "tests/strings/test_api.py::test_api_for_categorical[len-string[python]]", - "tests/strings/test_api.py::test_api_for_categorical[rfind-object]", - "tests/strings/test_api.py::test_api_for_categorical[rfind-string[pyarrow]]", - "tests/strings/test_api.py::test_api_for_categorical[rfind-string[pyarrow_numpy]]", - "tests/strings/test_api.py::test_api_for_categorical[rfind-string[python]]", - "tests/strings/test_api.py::test_api_mi_raises", - "tests/strings/test_extract.py::test_extract_expand_capture_groups[object]", - "tests/strings/test_extract.py::test_extract_expand_capture_groups[string[pyarrow]]", - "tests/strings/test_extract.py::test_extract_expand_capture_groups[string[pyarrow_numpy]]", - "tests/strings/test_extract.py::test_extract_expand_capture_groups[string[python]]", - "tests/strings/test_extract.py::test_extract_series[string[pyarrow]-None]", - "tests/strings/test_extract.py::test_extract_series[string[pyarrow]-series_name]", - "tests/strings/test_extract.py::test_extract_series[string[pyarrow_numpy]-None]", - "tests/strings/test_extract.py::test_extract_series[string[pyarrow_numpy]-series_name]", - "tests/strings/test_extract.py::test_extract_series[string[python]-None]", - "tests/strings/test_extract.py::test_extract_series[string[python]-series_name]", - "tests/strings/test_find_replace.py::test_find[object]", - "tests/strings/test_find_replace.py::test_flags_kwarg[string[pyarrow]]", - "tests/strings/test_find_replace.py::test_flags_kwarg[string[pyarrow_numpy]]", - "tests/strings/test_find_replace.py::test_fullmatch_case_kwarg[string[pyarrow]]", - "tests/strings/test_find_replace.py::test_fullmatch_case_kwarg[string[pyarrow_numpy]]", - "tests/strings/test_find_replace.py::test_replace_callable[string[pyarrow]]", - "tests/strings/test_find_replace.py::test_replace_callable[string[pyarrow_numpy]]", - "tests/strings/test_find_replace.py::test_replace_callable_named_groups[string[pyarrow]]", - "tests/strings/test_find_replace.py::test_replace_callable_named_groups[string[pyarrow_numpy]]", - "tests/strings/test_find_replace.py::test_replace_callable_raises[string[pyarrow]-0]", - "tests/strings/test_find_replace.py::test_replace_callable_raises[string[pyarrow]-1]", - "tests/strings/test_find_replace.py::test_replace_callable_raises[string[pyarrow]-2]", - "tests/strings/test_find_replace.py::test_replace_callable_raises[string[pyarrow_numpy]-0]", - "tests/strings/test_find_replace.py::test_replace_callable_raises[string[pyarrow_numpy]-1]", - "tests/strings/test_find_replace.py::test_replace_callable_raises[string[pyarrow_numpy]-2]", - "tests/strings/test_find_replace.py::test_replace_compiled_regex[string[pyarrow]]", - "tests/strings/test_find_replace.py::test_replace_compiled_regex[string[pyarrow_numpy]]", - "tests/strings/test_find_replace.py::test_replace_compiled_regex_callable[string[pyarrow]]", - "tests/strings/test_find_replace.py::test_replace_compiled_regex_callable[string[pyarrow_numpy]]", - "tests/strings/test_find_replace.py::test_replace_compiled_regex_unicode[string[pyarrow]]", - "tests/strings/test_find_replace.py::test_replace_compiled_regex_unicode[string[pyarrow_numpy]]", - "tests/strings/test_find_replace.py::test_replace_moar[string[pyarrow]]", - "tests/strings/test_find_replace.py::test_replace_moar[string[pyarrow_numpy]]", - "tests/strings/test_find_replace.py::test_replace_not_case_sensitive_not_regex[string[pyarrow]]", - "tests/strings/test_find_replace.py::test_replace_not_case_sensitive_not_regex[string[pyarrow_numpy]]", - "tests/strings/test_find_replace.py::test_replace_unicode[string[pyarrow]]", - "tests/strings/test_find_replace.py::test_replace_unicode[string[pyarrow_numpy]]", - "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=object-partition]", - "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=object-rpartition]", - "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=str[pyarrow]-partition]", - "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=str[pyarrow]-rpartition]", - "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=str[python]-partition]", - "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=str[python]-rpartition]", - "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=string[pyarrow]-partition]", - "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=string[pyarrow]-rpartition]", - "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=string[python]-partition]", - "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=string[python]-rpartition]", - "tests/strings/test_split_partition.py::test_split_blank_string[object]", - "tests/strings/test_strings.py::test_empty_str_methods[object]", - "tests/strings/test_strings.py::test_index_str_accessor_multiindex_raises", - "tests/test_algos.py::TestFactorize::test_basic", - "tests/test_algos.py::TestFactorize::test_datetime64_factorize[False]", - "tests/test_algos.py::TestFactorize::test_datetime64_factorize[True]", - "tests/test_algos.py::TestFactorize::test_factorize[multi-False]", - "tests/test_algos.py::TestFactorize::test_factorize[multi-True]", - "tests/test_algos.py::TestFactorize::test_factorize[tuples-False]", - "tests/test_algos.py::TestFactorize::test_factorize[tuples-True]", - "tests/test_algos.py::TestFactorize::test_factorize_rangeindex[False]", - "tests/test_algos.py::TestFactorize::test_factorize_rangeindex[True]", - "tests/test_algos.py::TestFactorize::test_factorize_rangeindex_decreasing[False]", - "tests/test_algos.py::TestFactorize::test_factorize_rangeindex_decreasing[True]", - "tests/test_algos.py::TestFactorize::test_factorize_use_na_sentinel[numpy_array-False]", - "tests/test_algos.py::TestFactorize::test_factorize_use_na_sentinel[numpy_array-True]", - "tests/test_algos.py::TestFactorize::test_float64_factorize[False]", - "tests/test_algos.py::TestFactorize::test_float64_factorize[True]", - "tests/test_algos.py::TestFactorize::test_int64_factorize[False]", - "tests/test_algos.py::TestFactorize::test_int64_factorize[True]", - "tests/test_algos.py::TestFactorize::test_int_factorize_use_na_sentinel_false[data0-expected_codes0-expected_uniques0]", - "tests/test_algos.py::TestFactorize::test_int_factorize_use_na_sentinel_false[data1-expected_codes1-expected_uniques1]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[float32]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[float64]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[float]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[int16]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[int32]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[int64]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[int8]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[int]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[uint16]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[uint32]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[uint64]", - "tests/test_algos.py::TestFactorize::test_numeric_dtype_factorize[uint8]", - "tests/test_algos.py::TestFactorize::test_object_factorize_use_na_sentinel_false[data0-expected_codes0-expected_uniques0]", - "tests/test_algos.py::TestFactorize::test_parametrized_factorize_na_value_default[data0]", - "tests/test_algos.py::TestFactorize::test_parametrized_factorize_na_value_default[data1]", - "tests/test_algos.py::TestFactorize::test_parametrized_factorize_na_value_default[data2]", - "tests/test_algos.py::TestFactorize::test_string_factorize[False]", - "tests/test_algos.py::TestFactorize::test_string_factorize[True]", - "tests/test_algos.py::TestFactorize::test_uint64_factorize[False]", - "tests/test_algos.py::TestFactorize::test_uint64_factorize[True]", - "tests/test_algos.py::TestUnique::test_datetime64_dtype_array_returned", - "tests/test_algos.py::TestUnique::test_dtype_preservation[M8[ns]]", - "tests/test_algos.py::TestUnique::test_dtype_preservation[datetime64[ns]]", - "tests/test_algos.py::TestUnique::test_dtype_preservation[m8[ns]]", - "tests/test_algos.py::TestUnique::test_dtype_preservation[timedelta64[ns]]", - "tests/test_algos.py::TestUnique::test_on_index_object", - "tests/test_algos.py::TestUnique::test_timedelta64_dtype_array_returned", - "tests/test_algos.py::TestValueCounts::test_categorical_nans", - "tests/test_algos.py::TestValueCounts::test_value_counts_dropna", - "tests/test_common.py::test_serializable[obj0]", - "tests/test_common.py::test_standardize_mapping", - "tests/test_common.py::test_temp_setattr[False]", - "tests/test_common.py::test_temp_setattr[True]", - "tests/test_downstream.py::test_construct_dask_float_array_int_dtype_match_ndarray", - "tests/test_downstream.py::test_dask_ufunc", - "tests/test_downstream.py::test_from_obscure_array[dask-M8[ns]]", - "tests/test_downstream.py::test_from_obscure_array[dask-m8[ns]]", - "tests/test_downstream.py::test_statsmodels", - "tests/test_downstream.py::test_yaml_dump", - "tests/test_expressions.py::TestExpressions::test_bool_ops_raise_on_arithmetic[**-pow]", - "tests/test_expressions.py::TestExpressions::test_bool_ops_raise_on_arithmetic[/-truediv]", - "tests/test_expressions.py::TestExpressions::test_bool_ops_raise_on_arithmetic[//-floordiv]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_mixed]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_mixed]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_mixed]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_mixed]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_mixed]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_mixed]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_mixed]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_mixed]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_mixed]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_mixed]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_mixed]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_frame2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_frame]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_integer2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_integer]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_integer_integers]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_mixed2]", - "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_mixed]", - "tests/test_multilevel.py::TestMultiLevel::test_reindex_preserve_levels", - "tests/test_multilevel.py::TestSorted::test_sort_non_lexsorted", - "tests/test_nanops.py::TestDatetime64NaNOps::test_nanmean[ns]", - "tests/test_nanops.py::test_nanmean_overflow[20150515061816532]", - "tests/test_register_accessor.py::test_register[DataFrame-register_dataframe_accessor]", - "tests/test_register_accessor.py::test_register[Index-register_index_accessor]", - "tests/test_register_accessor.py::test_register[Series-register_series_accessor]", - "tests/tools/test_to_datetime.py::TestOrigin::test_to_datetime_out_of_bounds_with_format_arg[%Y-%d-%m %H:%M:%S-None]", - "tests/tools/test_to_datetime.py::TestOrigin::test_to_datetime_out_of_bounds_with_format_arg[%Y-%m-%d %H:%M:%S-None]", - "tests/tools/test_to_datetime.py::TestOrigin::test_unix", - "tests/tools/test_to_datetime.py::TestTimeConversionFormats::test_int_to_datetime_format_YYYYMMDD_typeerror[199934-expected1]", - "tests/tools/test_to_datetime.py::TestTimeConversionFormats::test_int_to_datetime_format_YYYYMMDD_typeerror[20121030-expected0]", - "tests/tools/test_to_datetime.py::TestTimeConversionFormats::test_to_datetime_format_weeks[False-2013020-%Y%U%w-expected1]", - "tests/tools/test_to_datetime.py::TestTimeConversionFormats::test_to_datetime_format_weeks[True-2013020-%Y%U%w-expected1]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_datetime_bool[False-False]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_datetime_bool[False-True]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_datetime_bool[True-False]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_datetime_bool[True-True]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_datetime_invalid_scalar[%H:%M:%S-00:01:99]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_datetime_invalid_scalar[%H:%M:%S-a]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_datetime_invalid_scalar[None-00:01:99]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_datetime_invalid_scalar[None-a]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_datetime_outofbounds_scalar[%H:%M:%S-3000/12/11 00:00:00]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_datetime_outofbounds_scalar[None-3000/12/11 00:00:00]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-Day of the year directive '%j' is not compatible with ISO year directive '%G'. Use '%Y' instead.-1999 50-%G %j]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-Day of the year directive '%j' is not compatible with ISO year directive '%G'. Use '%Y' instead.-1999 51 6 256-%G %V %u %j]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO week directive '%V' is incompatible with the year directive '%Y'. Use the ISO year '%G' instead.-1999 50-%Y %V]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO week directive '%V' is incompatible with the year directive '%Y'. Use the ISO year '%G' instead.-1999 51 1-%Y %V %u]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO week directive '%V' is incompatible with the year directive '%Y'. Use the ISO year '%G' instead.-1999 51 1-%Y %V %w]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO week directive '%V' is incompatible with the year directive '%Y'. Use the ISO year '%G' instead.-1999 51 Sun-%Y %V %a]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO week directive '%V' is incompatible with the year directive '%Y'. Use the ISO year '%G' instead.-1999 51 Sunday-%Y %V %A]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 51 1-%V %u]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 51 1-%V %w]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 51 Sun-%V %a]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 51 Sunday-%V %A]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-20 Monday-%V %A]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-20-%V]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 51-%G %V]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 6-%G %u]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 6-%G %w]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 Mon-%G %a]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 Monday-%G %A]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[coerce-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-2051-%G]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-Day of the year directive '%j' is not compatible with ISO year directive '%G'. Use '%Y' instead.-1999 50-%G %j]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-Day of the year directive '%j' is not compatible with ISO year directive '%G'. Use '%Y' instead.-1999 51 6 256-%G %V %u %j]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO week directive '%V' is incompatible with the year directive '%Y'. Use the ISO year '%G' instead.-1999 50-%Y %V]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO week directive '%V' is incompatible with the year directive '%Y'. Use the ISO year '%G' instead.-1999 51 1-%Y %V %u]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO week directive '%V' is incompatible with the year directive '%Y'. Use the ISO year '%G' instead.-1999 51 1-%Y %V %w]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO week directive '%V' is incompatible with the year directive '%Y'. Use the ISO year '%G' instead.-1999 51 Sun-%Y %V %a]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO week directive '%V' is incompatible with the year directive '%Y'. Use the ISO year '%G' instead.-1999 51 Sunday-%Y %V %A]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 51 1-%V %u]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 51 1-%V %w]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 51 Sun-%V %a]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 51 Sunday-%V %A]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-20 Monday-%V %A]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive '%A', '%a', '%w', or '%u'.-20-%V]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 51-%G %V]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 6-%G %u]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 6-%G %w]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 Mon-%G %a]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-1999 Monday-%G %A]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_error_iso_week_year[ignore-ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive '%A', '%a', '%w', or '%u'.-2051-%G]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_mixed_offsets_with_native_datetime_raises", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_arrow[None-False-Index]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_arrow[US/Central-False-Index]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64d_out_of_bounds[False]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64d_out_of_bounds[True]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[False-coerce-dt0]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[False-coerce-dt1]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[False-ignore-dt0]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[False-ignore-dt1]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[False-raise-dt0]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[False-raise-dt1]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[True-coerce-dt0]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[True-coerce-dt1]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[True-ignore-dt0]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[True-ignore-dt1]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[True-raise-dt0]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64s_out_of_ns_bounds[True-raise-dt1]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dtarr[None]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dtarr[US/Central]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_overflow", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_with_format_out_of_bounds[00010101]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_with_format_out_of_bounds[13000101]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_with_format_out_of_bounds[30000101]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_with_format_out_of_bounds[99990101]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_week_without_day_and_calendar_year[2017-20-%Y-%W]", - "tests/tools/test_to_datetime.py::TestToDatetime::test_week_without_day_and_calendar_year[2017-21-%Y-%U]", - "tests/tools/test_to_datetime.py::TestToDatetimeDataFrame::test_dataframe_str_dtype[False]", - "tests/tools/test_to_datetime.py::TestToDatetimeDataFrame::test_dataframe_str_dtype[True]", - "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_barely_out_of_bounds", - "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_iso8601_exact_fails[2012-01-01 10-%Y-%m-%d]", - "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_iso8601_exact_fails[2012-01-01 10:00-%Y-%m-%d %H]", - "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_iso8601_exact_fails[2012-01-01 10:00:00-%Y-%m-%d %H:%M]", - "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_iso8601_exact_fails[2012-01-01-%Y-%m]", - "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_float_to_datetime_raise_near_bounds", - "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_to_datetime_unit[int]", - "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_to_datetime_unit_fractional_seconds", - "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_to_datetime_unit_invalid[111111111]", - "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_to_datetime_unit_with_nulls[-9223372036854775808]", - "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_unit_rounding[False]", - "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_unit_rounding[True]", - "tests/tools/test_to_datetime.py::test_na_to_datetime[Decimal-list]", - "tests/tools/test_to_numeric.py::test_downcast_basic[kwargs0-int64-data2]", - "tests/tools/test_to_numeric.py::test_downcast_basic[kwargs1-int64-data2]", - "tests/tools/test_to_numeric.py::test_downcast_basic[kwargs2-f-data2]", - "tests/tools/test_to_numeric.py::test_downcast_basic[kwargs3-exp_dtype3-data2]", - "tests/tools/test_to_numeric.py::test_downcast_limits[int16-integer-min_max11]", - "tests/tools/test_to_numeric.py::test_downcast_limits[int16-integer-min_max1]", - "tests/tools/test_to_numeric.py::test_downcast_limits[int32-integer-min_max12]", - "tests/tools/test_to_numeric.py::test_downcast_limits[int32-integer-min_max2]", - "tests/tools/test_to_numeric.py::test_downcast_limits[int8-integer-min_max0]", - "tests/tools/test_to_numeric.py::test_downcast_limits[uint16-unsigned-min_max5]", - "tests/tools/test_to_numeric.py::test_downcast_limits[uint32-unsigned-min_max6]", - "tests/tools/test_to_numeric.py::test_downcast_limits[uint8-unsigned-min_max4]", - "tests/tools/test_to_numeric.py::test_numeric_dtypes[transform_assert_equal0-data0]", - "tests/tools/test_to_numeric.py::test_numeric_dtypes[transform_assert_equal0-data1]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-False-str-False-None]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-False-str-False-coerce]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-False-str-False-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-False-str-False-raise]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-False-str-True-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-True-str-False-None]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-True-str-False-coerce]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-True-str-False-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-True-str-False-raise]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-True-str-True-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-False-str-False-None]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-False-str-False-coerce]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-False-str-False-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-False-str-False-raise]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-False-str-True-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-True-str-False-None]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-True-str-False-coerce]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-True-str-False-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-True-str-False-raise]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-True-str-True-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-False-False-None]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-False-False-coerce]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-False-False-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-False-False-raise]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-True-False-None]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-True-False-coerce]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-True-False-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-True-False-raise]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-False-False-None]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-False-False-coerce]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-False-False-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-False-False-raise]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-True-False-None]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-True-False-coerce]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-True-False-ignore]", - "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-True-False-raise]", - "tests/tools/test_to_numeric.py::test_signed_downcast[data2-integer]", - "tests/tools/test_to_numeric.py::test_signed_downcast[data2-signed]", - "tests/tools/test_to_numeric.py::test_str[transform_assert_equal0-data0-exp0]", - "tests/tools/test_to_numeric.py::test_str[transform_assert_equal0-data1-exp1]", - "tests/tools/test_to_numeric.py::test_to_numeric_large_float_not_downcast_to_float_32[9876543210.0]", - "tests/tools/test_to_timedelta.py::TestTimedeltas::test_to_timedelta_nullable_int64_dtype[None-None]", - "tests/tools/test_to_timedelta.py::TestTimedeltas::test_to_timedelta_nullable_int64_dtype[expected_val0-2]", - "tests/tools/test_to_timedelta.py::TestTimedeltas::test_to_timedelta_series", - "tests/tools/test_to_timedelta.py::TestTimedeltas::test_to_timedelta_via_apply", - "tests/tseries/holiday/test_calendar.py::test_calendar_2031", - "tests/tseries/holiday/test_federal.py::test_memorial_day", - "tests/tseries/holiday/test_federal.py::test_no_mlk_before_1986", - "tests/tseries/offsets/test_business_day.py::TestBusinessDay::test_with_offset_index[timedelta64]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[day]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[days]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[hour]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[hours]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[microsecond]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[microseconds]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[milliseconds]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[minute]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[minutes]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[month]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[months]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[nanosecond]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[nanoseconds]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[second]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[seconds]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[weekday]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[weeks]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[year]", - "tests/tseries/offsets/test_offsets.py::TestDateOffset::test_constructor[years]", - "tests/tseries/offsets/test_offsets.py::test_construct_int_arg_no_kwargs_assumed_days[-1]", - "tests/tseries/offsets/test_offsets.py::test_construct_int_arg_no_kwargs_assumed_days[1]", - "tests/tseries/offsets/test_offsets.py::test_construct_int_arg_no_kwargs_assumed_days[3]", - "tests/tseries/offsets/test_ticks.py::test_tick_addition[Hour-expected0]", - "tests/tseries/offsets/test_ticks.py::test_tick_addition[Micro-expected4]", - "tests/tseries/offsets/test_ticks.py::test_tick_addition[Milli-expected3]", - "tests/tseries/offsets/test_ticks.py::test_tick_addition[Minute-expected1]", - "tests/tseries/offsets/test_ticks.py::test_tick_addition[Nano-expected5]", - "tests/tseries/offsets/test_ticks.py::test_tick_addition[Second-expected2]", - "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Hour]", - "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Micro]", - "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Milli]", - "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Minute]", - "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Nano]", - "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Second]", - "tests/tseries/offsets/test_year.py::test_add_out_of_pydatetime_range", - "tests/tslibs/test_conversion.py::test_length_zero_copy[M8[ns]-False]", - "tests/tslibs/test_conversion.py::test_tz_convert_single_matches_tz_convert_hourly[zoneinfo.ZoneInfo(key='US/Pacific')]", - "tests/tslibs/test_parsing.py::test_guess_datetime_format_with_parseable_formats[27.03.2003 14:55:00.000-%d.%m.%Y %H:%M:%S.%f]", - "tests/tslibs/test_parsing.py::test_guess_datetime_format_with_parseable_formats[30-12-2011-%d-%m-%Y]", - "tests/tslibs/test_parsing.py::test_parsing_tzlocal_deprecated", - "tests/tslibs/test_to_offset.py::test_to_offset_lowercase_frequency_deprecated[2bms]", - "tests/tslibs/test_to_offset.py::test_to_offset_lowercase_frequency_deprecated[2bqs]", - "tests/tslibs/test_to_offset.py::test_to_offset_lowercase_frequency_deprecated[2cbme]", - "tests/tslibs/test_to_offset.py::test_to_offset_lowercase_frequency_deprecated[2me]", - "tests/tslibs/test_to_offset.py::test_to_offset_lowercase_frequency_deprecated[2qe]", - "tests/tslibs/test_to_offset.py::test_to_offset_lowercase_frequency_deprecated[2qs-feb]", - "tests/tslibs/test_to_offset.py::test_to_offset_lowercase_frequency_deprecated[2sms]", - "tests/tslibs/test_to_offset.py::test_to_offset_lowercase_frequency_deprecated[2w]", - "tests/tslibs/test_to_offset.py::test_to_offset_lowercase_frequency_deprecated[2ye-mar]", - "tests/tslibs/test_to_offset.py::test_to_offset_lowercase_frequency_deprecated[2ys]", - "tests/tslibs/test_to_offset.py::test_to_offset_uppercase_frequency_deprecated[2BH]", - "tests/tslibs/test_to_offset.py::test_to_offset_uppercase_frequency_deprecated[2H]", - "tests/tslibs/test_to_offset.py::test_to_offset_uppercase_frequency_deprecated[2MIN]", - "tests/tslibs/test_to_offset.py::test_to_offset_uppercase_frequency_deprecated[2NS]", - "tests/tslibs/test_to_offset.py::test_to_offset_uppercase_frequency_deprecated[2S]", - "tests/tslibs/test_to_offset.py::test_to_offset_uppercase_frequency_deprecated[2Us]", - "tests/util/test_assert_frame_equal.py::test_allows_duplicate_labels", - "tests/util/test_assert_frame_equal.py::test_assert_frame_equal_check_like_different_indexes", - "tests/util/test_assert_frame_equal.py::test_assert_frame_equal_checking_allow_dups_flag", - "tests/util/test_assert_frame_equal.py::test_assert_frame_equal_extension_dtype_mismatch", - "tests/util/test_assert_frame_equal.py::test_frame_equal_index_dtype_mismatch[True-df11-df21-MultiIndex level \\\\[0\\\\] are different]", - "tests/util/test_assert_frame_equal.py::test_frame_equal_index_dtype_mismatch[True-df11-df21-MultiIndex level \\\\\\\\\\\\\\\\[0\\\\\\\\\\\\\\\\] are different]", - "tests/util/test_assert_index_equal.py::test_index_equal_range_categories[True-True]", - "tests/util/test_assert_series_equal.py::test_allows_duplicate_labels", - "tests/util/test_assert_series_equal.py::test_assert_series_equal_extension_dtype_mismatch", - "tests/util/test_assert_series_equal.py::test_large_unequal_ints[int64]", - "tests/util/test_assert_series_equal.py::test_series_equal_index_dtype[True-s11-s21-MultiIndex level \\\\[0\\\\] are different]", - "tests/util/test_assert_series_equal.py::test_series_equal_index_dtype[True-s11-s21-MultiIndex level \\\\\\\\\\\\\\\\[0\\\\\\\\\\\\\\\\] are different]", - "tests/util/test_assert_series_equal.py::test_series_equal_series_type", - "tests/util/test_hashing.py::test_hash_with_tuple[data0-result_data0]", - "tests/util/test_hashing.py::test_hash_with_tuple[data1-result_data1]", - "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data1-0-sum]", - "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data5-0-sum]", - "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data5-2-sum]", - "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data6-0-sum]", - "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data6-2-sum]", - "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data7-0-sum]", - "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data7-2-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data5-rolling_consistency_cases1-False-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data5-rolling_consistency_cases1-True-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data6-rolling_consistency_cases1-False-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data6-rolling_consistency_cases1-True-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data7-rolling_consistency_cases1-False-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data7-rolling_consistency_cases1-True-sum]", - "tests/window/test_api.py::test_rolling_max_min_periods[None]", - "tests/window/test_api.py::test_rolling_min_min_periods[None]", - "tests/window/test_apply.py::test_ragged_apply[engine_and_raw1]", - "tests/window/test_apply.py::test_ragged_apply[engine_and_raw2]", - "tests/window/test_base_indexer.py::test_bad_get_window_bounds_signature", - "tests/window/test_base_indexer.py::test_indexers_are_reusable_after_groupby_rolling[df_data0-1-FixedForwardWindowIndexer]", - "tests/window/test_base_indexer.py::test_indexers_are_reusable_after_groupby_rolling[df_data0-12-FixedForwardWindowIndexer]", - "tests/window/test_base_indexer.py::test_indexers_are_reusable_after_groupby_rolling[df_data0-2-FixedForwardWindowIndexer]", - "tests/window/test_base_indexer.py::test_indexers_are_reusable_after_groupby_rolling[df_data1-1-FixedForwardWindowIndexer]", - "tests/window/test_base_indexer.py::test_indexers_are_reusable_after_groupby_rolling[df_data1-12-FixedForwardWindowIndexer]", - "tests/window/test_base_indexer.py::test_indexers_are_reusable_after_groupby_rolling[df_data1-2-FixedForwardWindowIndexer]", - "tests/window/test_base_indexer.py::test_indexers_are_reusable_after_groupby_rolling[df_data2-1-FixedForwardWindowIndexer]", - "tests/window/test_base_indexer.py::test_indexers_are_reusable_after_groupby_rolling[df_data2-12-FixedForwardWindowIndexer]", - "tests/window/test_base_indexer.py::test_indexers_are_reusable_after_groupby_rolling[df_data2-2-FixedForwardWindowIndexer]", - "tests/window/test_base_indexer.py::test_rolling_forward_cov_corr[corr-expected1]", - "tests/window/test_base_indexer.py::test_rolling_forward_cov_corr[cov-expected0]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[M8[ns]-None-max-expected_data1-None]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[M8[ns]-None-min-expected_data2-None]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-max-expected_data1-None]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-mean-expected_data4-None]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-min-expected_data2-None]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-std-expected_data5-None]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-sum-expected_data3-None]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-var-expected_data6-None]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[m8[ns]-None-max-expected_data1-None]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[m8[ns]-None-mean-expected_data4-None]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[m8[ns]-None-min-expected_data2-None]", - "tests/window/test_dtypes.py::test_dataframe_dtypes[m8[ns]-None-sum-expected_data3-None]", - "tests/window/test_dtypes.py::test_series_dtypes[M8[ns]-None-max-data3-expected_data3-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[M8[ns]-None-max-data4-expected_data4-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[M8[ns]-None-max-data5-expected_data5-False-None]", - "tests/window/test_dtypes.py::test_series_dtypes[M8[ns]-None-min-data6-expected_data6-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[M8[ns]-None-min-data7-expected_data7-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[M8[ns]-None-min-data8-expected_data8-False-None]", - "tests/window/test_dtypes.py::test_series_dtypes[category-None-max-data4-expected_data4-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[category-None-mean-data13-expected_data13-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[category-None-min-data7-expected_data7-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[category-None-std-data16-expected_data16-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[category-None-sum-data10-expected_data10-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[category-None-var-data19-expected_data19-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-max-data3-expected_data3-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-max-data4-expected_data4-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-max-data5-expected_data5-False-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-mean-data12-expected_data12-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-mean-data13-expected_data13-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-mean-data14-expected_data14-False-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-min-data6-expected_data6-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-min-data7-expected_data7-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-min-data8-expected_data8-False-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-sum-data10-expected_data10-True-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-sum-data11-expected_data11-False-None]", - "tests/window/test_dtypes.py::test_series_dtypes[m8[ns]-None-sum-data9-expected_data9-True-None]", - "tests/window/test_groupby.py::TestRolling::test_datelike_on_monotonic_within_each_group", - "tests/window/test_groupby.py::TestRolling::test_getitem", - "tests/window/test_groupby.py::TestRolling::test_getitem_multiple", - "tests/window/test_groupby.py::TestRolling::test_groupby_monotonic", - "tests/window/test_groupby.py::TestRolling::test_groupby_rolling_custom_indexer", - "tests/window/test_groupby.py::TestRolling::test_groupby_rolling_no_sort", - "tests/window/test_groupby.py::test_rolling_corr_with_single_integer_in_index", - "tests/window/test_groupby.py::test_rolling_corr_with_tuples_in_index", - "tests/window/test_pairwise.py::TestPairwise::test_no_flex[pairwise_frames1-1]", - "tests/window/test_pairwise.py::TestPairwise::test_no_flex[pairwise_frames2-1]", - "tests/window/test_pairwise.py::TestPairwise::test_no_flex[pairwise_frames5-1]", - "tests/window/test_pairwise.py::TestPairwise::test_no_flex[pairwise_frames8-1]", - "tests/window/test_rolling.py::test_closed_fixed_binary_col[False-10]", - "tests/window/test_rolling.py::test_closed_fixed_binary_col[False-2]", - "tests/window/test_rolling.py::test_closed_fixed_binary_col[False-5]", - "tests/window/test_rolling.py::test_closed_fixed_binary_col[True-10]", - "tests/window/test_rolling.py::test_closed_fixed_binary_col[True-2]", - "tests/window/test_rolling.py::test_closed_fixed_binary_col[True-5]", - "tests/window/test_rolling.py::test_rolling_non_monotonic[mean-expected1]", - "tests/window/test_rolling.py::test_rolling_non_monotonic[sum-expected2]", - "tests/window/test_rolling.py::test_rolling_non_monotonic[var-expected0]", - "tests/window/test_rolling.py::test_rolling_numerical_accuracy_kahan_mean[ms-0.0]", - "tests/window/test_rolling.py::test_rolling_numerical_accuracy_kahan_mean[ms-2.0]", - "tests/window/test_rolling.py::test_rolling_numerical_accuracy_kahan_mean[ns-0.0]", - "tests/window/test_rolling.py::test_rolling_numerical_accuracy_kahan_mean[ns-2.0]", - "tests/window/test_rolling.py::test_rolling_numerical_accuracy_kahan_mean[s-0.0]", - "tests/window/test_rolling.py::test_rolling_numerical_accuracy_kahan_mean[s-2.0]", - "tests/window/test_rolling.py::test_rolling_numerical_accuracy_kahan_mean[us-0.0]", - "tests/window/test_rolling.py::test_rolling_numerical_accuracy_kahan_mean[us-2.0]", - "tests/window/test_rolling.py::test_rolling_var_same_value_count_logic[values0-3-1-expected0]", - "tests/window/test_rolling.py::test_variable_window_nonunique[DataFrame-right-expected2]", - "tests/window/test_rolling.py::test_variable_window_nonunique[Series-right-expected2]", - "tests/window/test_rolling_functions.py::test_rolling_max_gh6297[10]", - "tests/window/test_rolling_functions.py::test_rolling_max_gh6297[1]", - "tests/window/test_rolling_functions.py::test_rolling_max_gh6297[2]", - "tests/window/test_rolling_functions.py::test_rolling_max_gh6297[5]", - "tests/window/test_rolling_functions.py::test_rolling_max_gh6297[None]", - "tests/window/test_rolling_functions.py::test_rolling_max_resample[10]", - "tests/window/test_rolling_functions.py::test_rolling_max_resample[1]", - "tests/window/test_rolling_functions.py::test_rolling_max_resample[2]", - "tests/window/test_rolling_functions.py::test_rolling_max_resample[5]", - "tests/window/test_rolling_functions.py::test_rolling_max_resample[None]", - "tests/window/test_rolling_functions.py::test_rolling_median_resample", - "tests/window/test_rolling_functions.py::test_rolling_min_resample[10]", - "tests/window/test_rolling_functions.py::test_rolling_min_resample[1]", - "tests/window/test_rolling_functions.py::test_rolling_min_resample[2]", - "tests/window/test_rolling_functions.py::test_rolling_min_resample[5]", - "tests/window/test_rolling_functions.py::test_rolling_min_resample[None]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_closed[ms]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_closed[s]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_closed[us]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_invalid_minp[1.0]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_invalid_minp[foo]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_invalid_minp[minp2]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_invalid_window_nonfixed[2MS]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_non_monotonic_on", - "tests/window/test_timeseries_window.py::TestRollingTS::test_ragged_kurt", - "tests/window/test_timeseries_window.py::TestRollingTS::test_ragged_skew", - "tests/window/test_timeseries_window.py::TestRollingTS::test_ragged_std", - "tests/window/test_timeseries_window.py::TestRollingTS::test_ragged_var", - "tests/window/test_timeseries_window.py::TestRollingTS::test_rolling_on_decreasing_index[ms]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_rolling_on_decreasing_index[ns]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_rolling_on_decreasing_index[s]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_rolling_on_decreasing_index[us]", - "tests/window/test_timeseries_window.py::TestRollingTS::test_rolling_on_empty", - "tests/window/test_win_type.py::test_cmov_window_corner[None]", - "tests/window/test_win_type.py::test_win_type_not_implemented", - 'tests/io/json/test_pandas.py::TestPandasContainer::test_json_indent_all_orients[table-{\\n "schema":{\\n "fields":[\\n {\\n "name":"index",\\n "type":"integer"\\n },\\n {\\n "name":"a",\\n "type":"string"\\n },\\n {\\n "name":"b",\\n "type":"string"\\n }\\n ],\\n "primaryKey":[\\n "index"\\n ],\\n "pandas_version":"1.4.0"\\n },\\n "data":[\\n {\\n "index":0,\\n "a":"foo",\\n "b":"bar"\\n },\\n {\\n "index":1,\\n "a":"baz",\\n "b":"qux"\\n }\\n ]\\n}]', - r"tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_high-True-a,b\nc,d-expected1-header1]", - r"tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_low-True-a,b\nc,d-expected1-header1]", - r"tests/io/parser/common/test_index.py::test_multi_index_blank_df[python-True-a,b\nc,d-expected1-header1]", - r"tests/io/parser/test_parse_dates.py::test_parse_date_time[c_high-KORD,19990127, 19:00:00, 18:56:00, 0.8100\nKORD,19990127, 20:00:00, 19:56:00, 0.0100\nKORD,19990127, 21:00:00, 20:56:00, -0.5900\nKORD,19990127, 21:00:00, 21:18:00, -0.9900\nKORD,19990127, 22:00:00, 21:56:00, -0.5900\nKORD,19990127, 23:00:00, 22:56:00, -0.5900-kwargs1-expected1]", - r"tests/io/parser/test_parse_dates.py::test_parse_date_time[c_high-date,time,a,b\n2001-01-05, 10:00:00, 0.0, 10.\n2001-01-05, 00:00:00, 1., 11.\n-kwargs0-expected0]", - r"tests/io/parser/test_parse_dates.py::test_parse_date_time[c_low-KORD,19990127, 19:00:00, 18:56:00, 0.8100\nKORD,19990127, 20:00:00, 19:56:00, 0.0100\nKORD,19990127, 21:00:00, 20:56:00, -0.5900\nKORD,19990127, 21:00:00, 21:18:00, -0.9900\nKORD,19990127, 22:00:00, 21:56:00, -0.5900\nKORD,19990127, 23:00:00, 22:56:00, -0.5900-kwargs1-expected1]", - r"tests/io/parser/test_parse_dates.py::test_parse_date_time[c_low-date,time,a,b\n2001-01-05, 10:00:00, 0.0, 10.\n2001-01-05, 00:00:00, 1., 11.\n-kwargs0-expected0]", - r"tests/io/parser/test_parse_dates.py::test_parse_date_time[python-KORD,19990127, 19:00:00, 18:56:00, 0.8100\nKORD,19990127, 20:00:00, 19:56:00, 0.0100\nKORD,19990127, 21:00:00, 20:56:00, -0.5900\nKORD,19990127, 21:00:00, 21:18:00, -0.9900\nKORD,19990127, 22:00:00, 21:56:00, -0.5900\nKORD,19990127, 23:00:00, 22:56:00, -0.5900-kwargs1-expected1]", - r"tests/io/parser/test_parse_dates.py::test_parse_date_time[python-date,time,a,b\n2001-01-05, 10:00:00, 0.0, 10.\n2001-01-05, 00:00:00, 1., 11.\n-kwargs0-expected0]", - r"tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_high-a,b\n04.15.2016,09.16.2013-kwargs2-expected2]", - r"tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_high-a\n04.15.2016-kwargs0-expected0]", - r"tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_low-a,b\n04.15.2016,09.16.2013-kwargs2-expected2]", - r"tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[c_low-a\n04.15.2016-kwargs0-expected0]", - r"tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[python-a,b\n04.15.2016,09.16.2013-kwargs2-expected2]", - r"tests/io/parser/test_parse_dates.py::test_parse_dates_no_convert_thousands[python-a\n04.15.2016-kwargs0-expected0]", - r"tests/util/test_assert_frame_equal.py::test_frame_equal_index_dtype_mismatch[True-df11-df21-MultiIndex level \\[0\\] are different]", - r"tests/util/test_assert_series_equal.py::test_series_equal_index_dtype[True-s11-s21-MultiIndex level \\[0\\] are different]", -} - -NODEIDS_THAT_FAIL_WITH_CUDF_PANDAS_WITH_REASON: dict[str, set[str]] = { - "https://github.com/rapidsai/cudf/issues/18659": { - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[duration[ms]-__add__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[duration[ms]-__radd__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[duration[ms]-__rsub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[duration[ms]-__sub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[duration[s]-__add__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[duration[s]-__radd__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[duration[s]-__rsub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[duration[s]-__sub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[timestamp[s]-__sub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[timestamp[s]-__rsub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[timestamp[ms]-__sub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[timestamp[ms]-__rsub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint8-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint8-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint16-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint16-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint32-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint32-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__add__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__radd__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__sub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__rsub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__mul__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__rmul__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__pow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int8-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int8-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int16-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int16-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int32-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int32-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int64-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint8-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint8-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint16-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint16-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint32-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint32-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__add__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__radd__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__sub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__rsub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__mul__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__rmul__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__pow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int8-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int8-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int16-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int16-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int32-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int32-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int64-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint8-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint16-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint32-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint64-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int8-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int16-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int32-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int64-__rfloordiv__]", - }, - "https://github.com/rapidsai/cudf/issues/18659#issuecomment-3710985854": { - "tests/extension/test_arrow.py::test_pickle_roundtrip[string]", - "tests/arrays/string_/test_string_arrow.py::test_pickle_roundtrip[na_value0]", - "tests/arrays/string_/test_string_arrow.py::test_pickle_roundtrip[nan]", - }, - "https://github.com/pandas-dev/pandas/issues/64297": { - "tests/indexes/interval/test_constructors.py::test_ea_dtype[Float64]", - "tests/indexes/interval/test_constructors.py::test_ea_dtype[float64[pyarrow]]", - }, -} - -NODEIDS_THAT_XPASS_WITH_CUDF_PANDAS = { - "tests/arrays/string_/test_string.py::test_add_2d[pyarrow]", - "tests/arrays/string_/test_string.py::test_add_2d[pyarrow_numpy]", - "tests/arrays/string_/test_string.py::test_add_2d[string=str[pyarrow]]", - "tests/arrays/string_/test_string.py::test_add_2d[string=string[pyarrow]]", - "tests/arrays/string_/test_string.py::test_reduce[pyarrow-False]", - "tests/arrays/string_/test_string.py::test_reduce[pyarrow-True]", - "tests/arrays/string_/test_string.py::test_reduce[pyarrow_numpy-False]", - "tests/arrays/string_/test_string.py::test_reduce[pyarrow_numpy-True]", - "tests/arrays/string_/test_string.py::test_reduce[python-False]", - "tests/arrays/string_/test_string.py::test_reduce[python-True]", - "tests/arrays/string_/test_string.py::test_reduce_missing[pyarrow-False]", - "tests/arrays/string_/test_string.py::test_reduce_missing[pyarrow-True]", - "tests/arrays/string_/test_string.py::test_reduce_missing[pyarrow_numpy-False]", - "tests/arrays/string_/test_string.py::test_reduce_missing[pyarrow_numpy-True]", - "tests/arrays/string_/test_string.py::test_reduce_missing[python-False]", - "tests/arrays/string_/test_string.py::test_reduce_missing[python-True]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrame-DataFrame-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrame-DataFrame-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrame-DataFrameNaN-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrame-DataFrameNaN-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrame-Series-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrame-Series-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrame-SeriesNaN-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrame-SeriesNaN-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrame-float-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrame-float-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrameNaN-DataFrame-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrameNaN-DataFrame-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrameNaN-DataFrameNaN-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrameNaN-DataFrameNaN-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrameNaN-Series-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrameNaN-Series-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrameNaN-SeriesNaN-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrameNaN-SeriesNaN-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrameNaN-float-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[DataFrameNaN-float-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[Series-DataFrame-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[Series-DataFrame-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[Series-DataFrameNaN-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[Series-DataFrameNaN-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[Series-Series-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[Series-Series-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[Series-SeriesNaN-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[Series-SeriesNaN-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[Series-float-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[Series-float-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[SeriesNaN-DataFrame-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[SeriesNaN-DataFrame-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[SeriesNaN-DataFrameNaN-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[SeriesNaN-DataFrameNaN-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[SeriesNaN-Series-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[SeriesNaN-Series-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[SeriesNaN-SeriesNaN-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[SeriesNaN-SeriesNaN-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[SeriesNaN-float-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[SeriesNaN-float-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[float-DataFrame-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[float-DataFrame-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[float-DataFrameNaN-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[float-DataFrameNaN-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[float-Series-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[float-Series-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[float-SeriesNaN-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[float-SeriesNaN-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_floor_division[float-float-numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_floor_division[float-float-numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_frame_invert[numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_frame_invert[numexpr-python]", - "tests/computation/test_eval.py::TestEval::test_series_invert[numexpr-pandas]", - "tests/computation/test_eval.py::TestEval::test_series_invert[numexpr-python]", - "tests/computation/test_eval.py::test_eval_no_support_column_name[Inf]", - "tests/computation/test_eval.py::test_eval_no_support_column_name[inf]", - "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_getitem_series_integer_with_missing_raises[integer-array]", - "tests/extension/decimal/test_decimal.py::test_array_copy_on_write", - "tests/extension/json/test_json.py::TestJSONArray::test_getitem_series_integer_with_missing_raises[integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cumsum-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cumsum-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_str[duration[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_str[duration[ns]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_str[duration[s]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_str[duration[us]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_str[timestamp[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_astype_str[timestamp[s]]", - "tests/extension/test_arrow.py::TestArrowArray::test_concat_mixed_dtypes[decimal128(7, 3)]", - "tests/extension/test_arrow.py::TestArrowArray::test_construct_empty_dataframe[date64[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[binary-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[bool-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[date32[day]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[date64[ms]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[decimal128(7, 3)-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[double-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[duration[ms]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[duration[ns]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[duration[s]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[duration[us]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[float-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[int16-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[int32-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[int64-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[int8-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[string-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[time32[ms]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[time32[s]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[time64[ns]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[time64[us]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ms, tz=US/Eastern]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ms, tz=US/Pacific]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ms, tz=UTC]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ms]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ns, tz=US/Eastern]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ns, tz=US/Pacific]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ns, tz=UTC]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ns]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[s, tz=US/Eastern]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[s, tz=US/Pacific]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[s, tz=UTC]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[s]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[us, tz=US/Eastern]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[us, tz=US/Pacific]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[us, tz=UTC]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[us]-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[uint16-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[uint32-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[uint64-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[uint8-integer-array]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-median-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-median-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-std-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-std-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-var-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-var-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[decimal128(7, 3)-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[decimal128(7, 3)-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[double-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[double-kurt-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[double-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[double-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[float-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[float-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[float-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int16-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int16-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int16-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int32-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int32-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int32-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int64-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int64-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int64-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int8-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int8-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int8-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint16-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint16-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint16-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint32-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint32-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint32-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint64-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint64-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint64-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint8-kurt-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint8-skew-False]", - "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint8-skew-True]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor_no_data_with_index[date64[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor_scalar_na_with_index[date64[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor_scalar_with_index[date64[ms]]", - "tests/extension/test_arrow.py::test_mode_dropna_false_mode_na[date64[ms]]", - "tests/extension/test_categorical.py::TestCategorical::test_getitem_series_integer_with_missing_raises[integer-array]", - "tests/extension/test_datetime.py::TestDatetimeArray::test_getitem_series_integer_with_missing_raises[US/Central-integer-array]", - "tests/extension/test_interval.py::TestIntervalArray::test_getitem_series_integer_with_missing_raises[integer-array]", - "tests/extension/test_masked.py::TestMaskedArrays::test_astype_str[Float32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[BooleanDtype-integer-array]", - "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Float32Dtype-integer-array]", - "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Float64Dtype-integer-array]", - "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Int16Dtype-integer-array]", - "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Int32Dtype-integer-array]", - "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Int64Dtype-integer-array]", - "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Int8Dtype-integer-array]", - "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[UInt16Dtype-integer-array]", - "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[UInt32Dtype-integer-array]", - "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[UInt64Dtype-integer-array]", - "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[UInt8Dtype-integer-array]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_series_integer_with_missing_raises[float-integer-array]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_series_integer_with_missing_raises[object-integer-array]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_integer_array[object-True-list]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_integer_array[object-True-numpy-array]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_loc_iloc_slice[object]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_mask[object-True-numpy-array]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_mask_broadcast[object-None]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_mask_broadcast[object-loc]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_sequence_broadcasts[object-True]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_slice[object-True]", - "tests/extension/test_period.py::TestPeriodArray::test_getitem_series_integer_with_missing_raises[2D-integer-array]", - "tests/extension/test_period.py::TestPeriodArray::test_getitem_series_integer_with_missing_raises[D-integer-array]", - "tests/extension/test_sparse.py::TestSparseArray::test_fillna_length_mismatch[nan]", - "tests/extension/test_sparse.py::TestSparseArray::test_getitem_series_integer_with_missing_raises[0-integer-array]", - "tests/extension/test_sparse.py::TestSparseArray::test_getitem_series_integer_with_missing_raises[nan-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[pyarrow-False-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[pyarrow-True-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[pyarrow_numpy-False-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[pyarrow_numpy-True-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[python-False-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[python-True-integer-array]", - "tests/frame/methods/test_info.py::test_info_memory_usage_deep_pypy", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_datetime[DataFrame-list-datetime]", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_datetime[Series-dict-datetime]", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_datetime[Series-list-datetime]", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_timedelta[DataFrame-list-timedelta]", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_timedelta[Series-dict-timedelta]", - "tests/frame/test_constructors.py::TestFromScalar::test_from_out_of_bounds_ns_timedelta[Series-list-timedelta]", - "tests/frame/test_query_eval.py::TestDataFrameEval::test_extension_array_eval[numexpr-pandas]", - "tests/frame/test_query_eval.py::TestDataFrameEval::test_extension_array_eval[numexpr-python]", - "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_preserve_dtypes", - "tests/generic/test_finalize.py::test_categorical_accessor[method0]", - "tests/generic/test_finalize.py::test_categorical_accessor[method1]", - "tests/generic/test_finalize.py::test_categorical_accessor[method2]", - "tests/generic/test_finalize.py::test_categorical_accessor[method4]", - "tests/generic/test_finalize.py::test_categorical_accessor[method7]", - "tests/generic/test_finalize.py::test_categorical_accessor[method8]", - "tests/groupby/test_groupby.py::test_ops_not_as_index[idxmin]", - "tests/groupby/test_numeric_only.py::test_axis1_numeric_only[corrwith-False]", - "tests/groupby/test_numeric_only.py::test_axis1_numeric_only[corrwith-None]", - "tests/groupby/test_numeric_only.py::test_axis1_numeric_only[skew-False]", - "tests/groupby/test_numeric_only.py::test_axis1_numeric_only[skew-None]", - "tests/groupby/test_raises.py::test_groupby_raises_category[by3-False-cumsum-agg]", - "tests/groupby/test_raises.py::test_groupby_raises_category[by3-True-fillna-method]", - "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_dti_constructor_with_non_nano_now_today", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[both-breaks3]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[left-breaks3]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[neither-breaks3]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[right-breaks3]", - "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_copy_vs_view", - "tests/io/json/test_pandas.py::TestPandasContainer::test_json_pandas_nulls[Decimal]", - "tests/io/json/test_readlines.py::test_readjson_unicode[pyarrow]", - "tests/io/parser/test_unsupported.py::test_invalid_file_inputs[python]", - "tests/plotting/test_datetimelike.py::TestTSPlot::test_add_matplotlib_datetime64", - "tests/series/methods/test_info.py::test_info_memory_usage_deep_pypy", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_dtype_timedelta_ns_s_astype_int64", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_no_data_string_type", - "tests/series/test_constructors.py::TestSeriesConstructors::test_series_string_inference_storage_definition", - "tests/series/test_logical_ops.py::TestSeriesLogicalOps::test_int_dtype_different_index_not_bool", - "tests/strings/test_api.py::test_api_per_method[index-empty1-partition1-category]", - "tests/strings/test_api.py::test_api_per_method[index-empty1-partition1-object]", - "tests/strings/test_api.py::test_api_per_method[index-empty1-partition2-category]", - "tests/strings/test_api.py::test_api_per_method[index-empty1-partition2-object]", - "tests/strings/test_api.py::test_api_per_method[index-empty1-rpartition1-category]", - "tests/strings/test_api.py::test_api_per_method[index-empty1-rpartition1-object]", - "tests/strings/test_api.py::test_api_per_method[index-empty1-rpartition2-category]", - "tests/strings/test_api.py::test_api_per_method[index-empty1-rpartition2-object]", - "tests/strings/test_api.py::test_api_per_method[index-empty1-split1-category]", - "tests/strings/test_api.py::test_api_per_method[index-empty1-split1-object]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data1-rolling_consistency_cases0-False-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data1-rolling_consistency_cases0-True-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data11-rolling_consistency_cases0-False-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data11-rolling_consistency_cases0-True-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data15-rolling_consistency_cases0-False-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data15-rolling_consistency_cases0-True-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data16-rolling_consistency_cases0-False-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data16-rolling_consistency_cases0-True-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data17-rolling_consistency_cases0-False-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data17-rolling_consistency_cases0-True-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data5-rolling_consistency_cases0-False-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data5-rolling_consistency_cases0-True-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data6-rolling_consistency_cases0-False-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data6-rolling_consistency_cases0-True-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data7-rolling_consistency_cases0-False-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_moments_consistency_var[all_data7-rolling_consistency_cases0-True-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data1-rolling_consistency_cases0-False-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data1-rolling_consistency_cases0-True-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data11-rolling_consistency_cases0-False-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data11-rolling_consistency_cases0-True-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data15-rolling_consistency_cases0-False-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data15-rolling_consistency_cases0-True-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data16-rolling_consistency_cases0-False-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data16-rolling_consistency_cases0-True-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data17-rolling_consistency_cases0-False-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data17-rolling_consistency_cases0-True-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data5-rolling_consistency_cases0-False-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data5-rolling_consistency_cases0-True-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data6-rolling_consistency_cases0-False-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data6-rolling_consistency_cases0-True-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data7-rolling_consistency_cases0-False-sum]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_constant[consistent_data1-rolling_consistency_cases0-False]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_constant[consistent_data1-rolling_consistency_cases0-True]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_constant[consistent_data3-rolling_consistency_cases0-False]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_constant[consistent_data3-rolling_consistency_cases0-True]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data1-rolling_consistency_cases0-False]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data1-rolling_consistency_cases0-True]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data11-rolling_consistency_cases0-False]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data11-rolling_consistency_cases0-True]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data15-rolling_consistency_cases0-False]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data15-rolling_consistency_cases0-True]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data16-rolling_consistency_cases0-False]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data16-rolling_consistency_cases0-True]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data17-rolling_consistency_cases0-False]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data17-rolling_consistency_cases0-True]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data5-rolling_consistency_cases0-False]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data5-rolling_consistency_cases0-True]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data6-rolling_consistency_cases0-False]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data6-rolling_consistency_cases0-True]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data7-rolling_consistency_cases0-False]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_mean[all_data7-rolling_consistency_cases0-True]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_series_cov_corr[series_data1-rolling_consistency_cases0-True-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_series_cov_corr[series_data5-rolling_consistency_cases0-False-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_series_cov_corr[series_data5-rolling_consistency_cases0-True-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_series_cov_corr[series_data6-rolling_consistency_cases0-False-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_series_cov_corr[series_data6-rolling_consistency_cases0-True-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_series_cov_corr[series_data7-rolling_consistency_cases0-False-0]", - "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_consistency_series_cov_corr[series_data7-rolling_consistency_cases0-True-0]", - "tests/window/test_rolling.py::test_rolling_mean_all_nan_window_floating_artifacts[1-exp_values0]", - "tests/window/test_rolling.py::test_rolling_mean_all_nan_window_floating_artifacts[2-exp_values1]", -} - -# TODO: Investigate why sometimes these fail -NODEIDS_THAT_FLAKY_XFAIL_WITH_CUDF_PANDAS = { - "tests/frame/methods/test_head_tail.py::test_head_tail_generic[tuples-DataFrame]", - "tests/frame/methods/test_head_tail.py::test_head_tail_generic[multi-DataFrame]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeAddSubOps::test_td64arr_sub_timedeltalike[timedelta64_0-array]", - "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeAddSubOps::test_td64arr_sub_timedeltalike[timedelta64_1-array]", - "tests/copy_view/test_interp_fillna.py::test_interpolate_downcast_reference_triggers_copy", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint16-__rpow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint32-__rpow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint8-__rpow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint16-__rpow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint32-__rpow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint8-__rpow__]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=str[pyarrow]-False-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=str[pyarrow]-True-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=str[python]-False-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=str[python]-True-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=string[pyarrow]-False-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=string[pyarrow]-True-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=string[python]-False-integer-array]", - "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=string[python]-True-integer-array]", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_iloc_ea_series_indexer_with_na", - "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_type_error_multiindex", - "tests/frame/methods/test_dot.py::TestSeriesDot::test_dot_2d_ndarray", - "tests/frame/methods/test_sort_index.py::TestDataFrameSortIndex::test_sort_index", - "tests/frame/methods/test_sort_index.py::TestDataFrameSortIndex::test_sort_index_inplace", - "tests/groupby/test_counting.py::TestCounting::test_ngroup_respects_groupby_order[False]", - "tests/groupby/test_groupby.py::test_basic_aggregations[float32]", - "tests/groupby/test_groupby.py::test_obj_arg_get_group_deprecated", - "tests/groupby/test_groupby.py::test_single_element_list_grouping[selection2]", - "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_slice_month", - "tests/indexes/multi/test_indexing.py::test_pyint_engine", - "tests/indexes/multi/test_monotonic.py::test_is_monotonic_with_nans[values0-is_monotonic_increasing]", - "tests/indexes/test_common.py::test_sort_values_with_missing[nullable_int-first]", - "tests/indexes/test_common.py::test_sort_values_with_missing[nullable_int-last]", - "tests/indexes/test_setops.py::test_union_different_types[bool-dtype-nullable_int]", - "tests/indexes/test_setops.py::test_union_different_types[categorical-nullable_int]", - "tests/indexes/test_setops.py::test_union_different_types[nullable_int-bool-dtype]", - "tests/indexes/test_setops.py::test_union_different_types[nullable_int-categorical]", - "tests/indexes/test_setops.py::test_union_different_types[nullable_int-timedelta]", - "tests/indexes/test_setops.py::test_union_different_types[timedelta-nullable_int]", - "tests/indexing/test_chaining_and_caching.py::TestChaining::test_detect_chained_assignment_warnings_errors", - "tests/indexing/test_indexing.py::TestMisc::test_no_reference_cycle", - "tests/indexing/test_loc.py::TestLocBooleanLabelsAndSlices::test_loc_bool_slice_raises[nullable_int-DataFrame]", - "tests/indexing/test_loc.py::TestLocBooleanLabelsAndSlices::test_loc_bool_slice_raises[nullable_int-Series]", - "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[nullable_int]", - "tests/reshape/merge/test_multi.py::TestMergeMulti::test_merge_na_keys", - "tests/reshape/test_crosstab.py::test_categoricals[category-category]", - "tests/reshape/test_crosstab.py::test_categoricals[category-int64]", - "tests/reshape/test_crosstab.py::test_categoricals[int64-category]", - "tests/reshape/test_crosstab.py::test_categoricals[int64-int64]", - "tests/series/methods/test_reindex.py::test_reindexing_with_float64_NA_log", - "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_maskedarray_hardened", - "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_iso8601_fails[True-2012-01-01 10-%Y-%m-%d %H:%M]", - "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_iso8601_fails[True-2012-01-01-%Y-%m-%d %H]", - # -q tests/indexes/test_common.py::test_sort_values_with_missing[nullable_int-first] - # Investigate why. - # TODO: These tests pass when run locally: with pandas 2.3.3, numpy 2.2.6, and cupy 13.6.0 - # We accelerate np.dot via cupy.dot when the proxy array inputs are backed by real - # bash python/cudf/cudf/pandas/scripts/run-pandas-tests.sh - # cupy arrays. So it is possible for tests asserting equality like test_dot_2d_ndarray - # fail due to tiny FP differences. - # flaky xpasses after https://github.com/rapidsai/cudf/pull/21499 - r"tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_iso8601_fails[True-2012-01-01 10:00-%Y-%m-%d %H:%M:%S]", -} - -# TODO: Ideally cudf.pandas should be able to pass assertions with private APIs, -# e.g. `obj._private is other_obj`, but tests with public APIs are more important. -NODEIDS_THAT_ASSERT_PRIVATE_APIS = { - "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-0-False-mean-columns]", - "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-0-False-mean-index]", - "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-0-True-mean-columns]", - "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-0-True-mean-index]", - "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-1-False-mean-columns]", - "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-1-False-mean-index]", - "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-1-True-mean-columns]", - "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-1-True-mean-index]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='columns'-bfill]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='columns'-cummax]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='columns'-cummin]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='columns'-cumprod]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='columns'-cumsum]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='columns'-diff]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='columns'-ffill]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='columns'-fillna]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='columns'-pct_change]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='columns'-rank]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='columns'-shift]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='index'-bfill]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='index'-cummax]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='index'-cummin]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='index'-cumprod]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='index'-cumsum]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='index'-diff]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='index'-ffill]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='index'-fillna]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='index'-pct_change]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='index'-rank]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis='index'-shift]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=0-bfill]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=0-cummax]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=0-cummin]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=0-cumprod]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=0-cumsum]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=0-diff]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=0-ffill]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=0-fillna]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=0-pct_change]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=0-rank]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=0-shift]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=1-bfill]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=1-cummax]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=1-cummin]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=1-cumprod]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=1-cumsum]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=1-diff]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=1-ffill]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=1-fillna]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=1-pct_change]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=1-rank]", - "tests/apply/test_str.py::test_transform_groupby_kernel_frame[axis=1-shift]", - "tests/arithmetic/test_datetime64.py::TestDatetime64OverflowHandling::test_datetimeindex_sub_timestamp_overflow", - "tests/arithmetic/test_datetime64.py::TestDatetime64OverflowHandling::test_datetimeindex_sub_datetimeindex_overflow", - "tests/arrays/boolean/test_construction.py::test_boolean_array_constructor_copy", - "tests/arrays/boolean/test_construction.py::test_coerce_to_array", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[binary]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[bool]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[date32[day]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[date64[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[decimal128(7, 3)]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[double]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[ns]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[s]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[us]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[float]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int16]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int32]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int64]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int8]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[string]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time32[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time32[s]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time64[ns]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time64[us]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms, tz=US/Eastern]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms, tz=US/Pacific]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms, tz=UTC]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns, tz=US/Eastern]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns, tz=US/Pacific]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns, tz=UTC]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s, tz=US/Eastern]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s, tz=US/Pacific]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s, tz=UTC]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us, tz=US/Eastern]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us, tz=US/Pacific]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us, tz=UTC]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint16]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint32]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint64]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint8]", - "tests/extension/test_categorical.py::TestCategorical::test_series_constructor", - "tests/extension/test_datetime.py::TestDatetimeArray::test_series_constructor[US/Central]", - "tests/extension/test_interval.py::TestIntervalArray::test_series_constructor", - "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[BooleanDtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Float32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Float64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Int16Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Int32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Int64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Int8Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[UInt16Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[UInt32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[UInt64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[UInt8Dtype]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_series_constructor[float]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_series_constructor[object]", - "tests/extension/test_period.py::TestPeriodArray::test_series_constructor[2D]", - "tests/extension/test_period.py::TestPeriodArray::test_series_constructor[D]", - "tests/extension/test_sparse.py::TestSparseArray::test_series_constructor[0]", - "tests/extension/test_sparse.py::TestSparseArray::test_series_constructor[nan]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[python-False]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[python-True]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=str[pyarrow]-False]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=str[pyarrow]-True]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=str[python]-False]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=str[python]-True]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=string[pyarrow]-False]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=string[pyarrow]-True]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=string[python]-False]", - "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=string[python]-True]", - "tests/copy_view/test_constructors.py::test_series_from_block_manager[None-None-False]", - "tests/copy_view/test_constructors.py::test_series_from_block_manager[None-None-True]", - "tests/copy_view/test_constructors.py::test_series_from_block_manager[None-int64-False]", - "tests/copy_view/test_constructors.py::test_series_from_block_manager[None-int64-True]", - "tests/copy_view/test_constructors.py::test_series_from_block_manager[idx1-None-False]", - "tests/copy_view/test_constructors.py::test_series_from_block_manager[idx1-None-True]", - "tests/copy_view/test_constructors.py::test_series_from_block_manager[idx1-int64-False]", - "tests/copy_view/test_constructors.py::test_series_from_block_manager[idx1-int64-True]", - "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[a-0]", - "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[a-1]", - "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[a-2]", - "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[a-3]", - "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[a-4]", - "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[b-0]", - "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[b-1]", - "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[b-2]", - "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[b-3]", - "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[b-4]", - "tests/indexing/multiindex/test_partial.py::TestMultiIndexPartial::test_getitem_intkey_leading_level[float]", - "tests/indexing/multiindex/test_partial.py::TestMultiIndexPartial::test_getitem_intkey_leading_level[int]", - "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index0]", - "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index13]", - "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index1]", - "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index2]", - "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index3]", - "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index4]", - "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index5]", - "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index6]", - "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index7]", - "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index8]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[bool-dtype]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[complex128]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[complex64]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[datetime-tz]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[datetime]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[empty]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[float32]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[float64]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[int16]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[int32]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[int64]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[int8]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[nullable_bool]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[nullable_float]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[nullable_int]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[nullable_uint]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[object]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[period]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[repeats]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[string-pyarrow]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[string-python]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[string]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[timedelta]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[uint16]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[uint32]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[uint64]", - "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[uint8]", - "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index13]", - "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index1]", - "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index2]", - "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index3]", - "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index5]", - "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index6]", - "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index7]", - "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index8]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float-Interval]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float32-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float32-Interval]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float64-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float64-Interval]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int-Interval]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int16-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int16-Interval]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int32-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int32-Interval]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int64-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int64-Interval]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int8-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int8-Interval]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint16-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint16-Interval]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint32-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint32-Interval]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint64-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint64-Interval]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint8-IntervalIndex]", - "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint8-Interval]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['+01:15'-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['+01:15'-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['+01:15'-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['-02:15'-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['-02:15'-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['-02:15'-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['Asia/Tokyo'-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['Asia/Tokyo'-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['Asia/Tokyo'-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['US/Eastern'-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['US/Eastern'-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['US/Eastern'-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC'-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC'-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC'-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC+01:15'-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC+01:15'-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC+01:15'-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC-02:15'-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC-02:15'-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC-02:15'-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/Asia/Singapore'-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/Asia/Singapore'-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/Asia/Singapore'-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/US/Pacific'-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/US/Pacific'-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/US/Pacific'-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[None-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[None-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[None-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(seconds=3600))-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(seconds=3600))-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(seconds=3600))-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone.utc-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone.utc-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone.utc-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(-300)-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(-300)-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(-300)-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(300)-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(300)-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(300)-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzlocal()-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzlocal()-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzlocal()-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzutc()-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzutc()-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzutc()-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[zoneinfo.ZoneInfo(key='US/Pacific')-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[zoneinfo.ZoneInfo(key='US/Pacific')-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[zoneinfo.ZoneInfo(key='US/Pacific')-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[zoneinfo.ZoneInfo(key='UTC')-iloc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[zoneinfo.ZoneInfo(key='UTC')-loc]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[zoneinfo.ZoneInfo(key='UTC')-setitem]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='US/Pacific')-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[zoneinfo.ZoneInfo(key='UTC')-setitem-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[iloc-3 Days]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[iloc-scalar1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[loc-3 Days]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[loc-scalar1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[setitem-3 Days]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[setitem-scalar1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key2-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key0-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key0-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key0-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key0-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key0-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key1-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key1-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key1-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key1-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key1-list]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key2-Categorical]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key2-Index]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key2-array0]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key2-array1]", - "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key2-list]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-nan-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-nan-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-nan-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val2-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val2-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val2-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val3-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val3-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val4-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val4-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val4-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-nan-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-nan-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-nan-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-val2-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-val2-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-val2-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-nan-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-nan-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-nan-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-val2-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-val2-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-val2-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-nan-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-nan-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-nan-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val2-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val2-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val2-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val3-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val3-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val3-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val4-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val4-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[M8[ns]-None]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[M8[ns]-nan]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[M8[ns]-val2]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[M8[ns]-val4]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, US/Central]-None]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, US/Central]-nan]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, US/Central]-val2]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, UTC]-None]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, UTC]-nan]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, UTC]-val2]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[m8[ns]-None]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[m8[ns]-nan]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[m8[ns]-val2]", - "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[m8[ns]-val3]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_putmask[3-None]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_putmask[3-nan]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_putmask[key1-None]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_putmask[key1-nan]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_where[3-None]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_where[3-nan]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_where[key1-None]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_where[key1-nan]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-nan-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-nan-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-nan-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-nan-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-nan-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-nan-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-nan-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-nan-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-nan-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-nan-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-nan-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-nan-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_series_where[3-None]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_series_where[3-nan]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_series_where[key1-None]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_series_where[key1-nan]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-nan-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-nan-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-nan-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-None-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-None-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-None-setitem]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-nan-iloc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-nan-loc]", - "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-nan-setitem]", +# Keep keys in alphabeical order +NODEIDS_THAT_FAIL = { + "tests/apply/test_frame_apply.py::test_apply[MockEngineDecorator]": "AssertionError", + "tests/apply/test_frame_apply.py::test_apply[python]": "TODO: Add a reason for failure", + "tests/apply/test_frame_apply.py::test_apply_args[MockEngineDecorator-False-False-0]": "AssertionError", + "tests/apply/test_frame_apply.py::test_apply_args[MockEngineDecorator-False-False-1]": "AssertionError", + "tests/apply/test_frame_apply.py::test_apply_args[MockEngineDecorator-True-False-0]": "AssertionError", + "tests/apply/test_frame_apply.py::test_apply_args[MockEngineDecorator-True-False-1]": "AssertionError", + "tests/apply/test_frame_apply.py::test_apply_datetime_tz_issue[MockEngineDecorator]": "AssertionError", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[MockEngineDecorator-0-False-mean-columns]": "AssertionError: assert Index(['a', 'b', 'c'], dtype='str') is Index(['a', 'b', 'c'], dtype='str')", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[MockEngineDecorator-0-False-mean-index]": "assert RangeIndex(start=0, stop=0, step=1) is RangeIndex(start=0, stop=0, step=1)", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[MockEngineDecorator-0-True-mean-columns]": "AssertionError: assert Index(['a', 'b', 'c'], dtype='str') is Index(['a', 'b', 'c'], dtype='str')", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[MockEngineDecorator-0-True-mean-index]": "assert RangeIndex(start=0, stop=0, step=1) is RangeIndex(start=0, stop=0, step=1)", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[MockEngineDecorator-1-False-mean-columns]": "assert RangeIndex(start=0, stop=0, step=1) is RangeIndex(start=0, stop=0, step=1)", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[MockEngineDecorator-1-False-mean-index]": "AssertionError: assert Index(['a', 'b', 'c'], dtype='str') is Index(['a', 'b', 'c'], dtype='str')", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[MockEngineDecorator-1-True-mean-columns]": "assert RangeIndex(start=0, stop=0, step=1) is RangeIndex(start=0, stop=0, step=1)", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[MockEngineDecorator-1-True-mean-index]": "AssertionError: assert Index(['a', 'b', 'c'], dtype='str') is Index(['a', 'b', 'c'], dtype='str')", + "tests/apply/test_frame_apply.py::test_apply_funcs_over_empty[prod]": "TypeError: Cannot perform reduction 'prod' with string dtype", + "tests/apply/test_frame_apply.py::test_apply_function_runs_once": "TODO: Add a reason for failure", + "tests/apply/test_frame_apply.py::test_apply_getitem_axis_1[MockEngineDecorator]": "AssertionError", + "tests/apply/test_frame_apply.py::test_apply_no_suffix_index[MockEngineDecorator]": "AssertionError", + "tests/apply/test_frame_apply.py::test_apply_raw_function_runs_once[MockEngineDecorator]": "assert [] == [1, 2, 3]", + "tests/apply/test_frame_apply.py::test_apply_raw_function_runs_once[python]": "TODO: Add a reason for failure", + "tests/apply/test_frame_apply.py::test_frequency_is_original[MockEngineDecorator-2]": "AssertionError", + "tests/apply/test_frame_apply.py::test_frequency_is_original[MockEngineDecorator-3]": "AssertionError", + "tests/apply/test_frame_apply.py::test_frequency_is_original[MockEngineDecorator-5]": "AssertionError", + "tests/apply/test_frame_apply.py::test_result_type_series_result[MockEngineDecorator]": "AssertionError", + "tests/apply/test_frame_apply.py::test_result_type_series_result_other_index[MockEngineDecorator]": "AssertionError", + "tests/apply/test_series_apply.py::test_apply[False]": "TODO: Add a reason for failure", + "tests/apply/test_series_apply.py::test_apply[compat]": "TODO: Add a reason for failure", + "tests/apply/test_series_apply.py::test_apply_map_evaluate_lambdas_the_same[compat-MockEngineDecorator-str]": "AssertionError: Attributes of Series are different", + "tests/apply/test_series_apply.py::test_apply_map_evaluate_lambdas_the_same[compat-None-str]": "AssertionError: Attributes of Series are different", + "tests/apply/test_str.py::test_transform_groupby_kernel_frame[bfill]": "AssertionError: assert 1 > 1", + "tests/apply/test_str.py::test_transform_groupby_kernel_frame[cummax]": "AssertionError: assert 1 > 1", + "tests/apply/test_str.py::test_transform_groupby_kernel_frame[cummin]": "AssertionError: assert 1 > 1", + "tests/apply/test_str.py::test_transform_groupby_kernel_frame[cumprod]": "AssertionError: assert 1 > 1", + "tests/apply/test_str.py::test_transform_groupby_kernel_frame[cumsum]": "AssertionError: assert 1 > 1", + "tests/apply/test_str.py::test_transform_groupby_kernel_frame[diff]": "AssertionError: assert 1 > 1", + "tests/apply/test_str.py::test_transform_groupby_kernel_frame[ffill]": "AssertionError: assert 1 > 1", + "tests/apply/test_str.py::test_transform_groupby_kernel_frame[pct_change]": "AssertionError: assert 1 > 1", + "tests/apply/test_str.py::test_transform_groupby_kernel_frame[rank]": "AssertionError: assert 1 > 1", + "tests/apply/test_str.py::test_transform_groupby_kernel_frame[shift]": "AssertionError: assert 1 > 1", + "tests/arithmetic/test_bool.py::test_divmod_bool_raises[DataFrame]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_bool.py::test_divmod_bool_raises[Index]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_bool.py::test_divmod_bool_raises[Series]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_categorical.py::TestCategoricalComparisons::test_categorical_tuple_equality": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[numexpr-pow-slice]": "AssertionError: Series are different", + "tests/arithmetic/test_numeric.py::TestAdditionSubtraction::test_series_operators_arithmetic[python-pow-slice]": "AssertionError: Series are different", + "tests/arithmetic/test_numeric.py::TestDivisionByZero::test_df_mod_zero_df[numexpr]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestDivisionByZero::test_df_mod_zero_df[python]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestDivisionByZero::test_ser_div_ser[numexpr-float32-int64]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2[numexpr]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2[python]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx0-2-expected0]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx1--3-expected1]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx4-50-expected4]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx5-3-expected5]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx6-4-expected6]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[numexpr-idx7-2-expected7]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx0-2-expected0]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx1--3-expected1]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx4-50-expected4]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx5-3-expected5]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx6-4-expected6]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArithmeticUnsorted::test_numeric_compat2_floordiv[python-idx7-2-expected7]": "TODO: Add a reason for failure", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.datetime64('2021-01-01T00:00:00.000000')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.datetime64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.timedelta64('NaT','D')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.timedelta64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.timedelta64(111600000000,'us')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index1-array-np.timedelta64(31,'h')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.datetime64('2021-01-01T00:00:00.000000')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.datetime64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.timedelta64('NaT','D')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.timedelta64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.timedelta64(111600000000,'us')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-Index2-array-np.timedelta64(31,'h')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.datetime64('2021-01-01T00:00:00.000000')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.datetime64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.timedelta64('NaT','D')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.timedelta64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.timedelta64(111600000000,'us')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[numexpr-RangeIndex-array-np.timedelta64(31,'h')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.datetime64('2021-01-01T00:00:00.000000')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.datetime64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.timedelta64('NaT','D')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.timedelta64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.timedelta64(111600000000,'us')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index1-array-np.timedelta64(31,'h')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.datetime64('2021-01-01T00:00:00.000000')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.datetime64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.timedelta64('NaT','D')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.timedelta64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.timedelta64(111600000000,'us')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-Index2-array-np.timedelta64(31,'h')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.datetime64('2021-01-01T00:00:00.000000')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.datetime64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.timedelta64('NaT','D')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.timedelta64('NaT','ns')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.timedelta64(111600000000,'us')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_add_sub_datetimedeltalike_invalid[python-RangeIndex-array-np.timedelta64(31,'h')]": "Failed: DID NOT RAISE ", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index0-array-timedelta64_0]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index0-array-timedelta64_1]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index0-array-timedelta64_2]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index1-array-timedelta64_0]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index1-array-timedelta64_1]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index1-array-timedelta64_2]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index2-array-timedelta64_0]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index2-array-timedelta64_1]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-Index2-array-timedelta64_2]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-RangeIndex-array-timedelta64_0]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-RangeIndex-array-timedelta64_1]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[numexpr-RangeIndex-array-timedelta64_2]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index0-array-timedelta64_0]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index0-array-timedelta64_1]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index0-array-timedelta64_2]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index1-array-timedelta64_0]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index1-array-timedelta64_1]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index1-array-timedelta64_2]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index2-array-timedelta64_0]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index2-array-timedelta64_1]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-Index2-array-timedelta64_2]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-RangeIndex-array-timedelta64_0]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-RangeIndex-array-timedelta64_1]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_mul_tdscalar[python-RangeIndex-array-timedelta64_2]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_0-Index0-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_0-Index1-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_0-Index2-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_0-RangeIndex-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_1-Index0-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_1-Index1-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_1-Index2-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[numexpr-timedelta64_1-RangeIndex-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_0-Index0-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_0-Index1-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_0-Index2-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_0-RangeIndex-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_1-Index0-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_1-Index1-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_1-Index2-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::TestNumericArraylikeArithmeticWithDatetimeLike::test_numeric_arr_rdiv_tdscalar[python-timedelta64_1-RangeIndex-array]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/arithmetic/test_numeric.py::test_integer_array_add_list_like[numexpr-to_array-Index-data0-expected_data0]": "AssertionError: numpy array are different", + "tests/arithmetic/test_numeric.py::test_integer_array_add_list_like[python-to_array-Index-data0-expected_data0]": "AssertionError: numpy array are different", + "tests/arithmetic/test_object.py::TestObjectComparisons::test_more_na_comparisons[None]": "AssertionError: Attributes of Series are different", + "tests/arithmetic/test_object.py::TestObjectComparisons::test_object_comparisons[True]": "TODO: Add a reason for failure", + "tests/arithmetic/test_object.py::test_index_ops_defer_to_unknown_subclasses[datetime]": "TODO: Add a reason for failure", + "tests/arithmetic/test_object.py::test_index_ops_defer_to_unknown_subclasses[object]": "TODO: Add a reason for failure", + "tests/arithmetic/test_object.py::test_index_ops_defer_to_unknown_subclasses[period]": "TODO: Add a reason for failure", + "tests/arithmetic/test_object.py::test_index_ops_defer_to_unknown_subclasses[timedelta]": "TODO: Add a reason for failure", + "tests/arithmetic/test_period.py::TestPeriodIndexSeriesMethods::test_pi_sub_period": "TODO: Add a reason for failure", + "tests/arithmetic/test_period.py::TestPeriodIndexSeriesMethods::test_pi_sub_period_nat": "TODO: Add a reason for failure", + "tests/arithmetic/test_timedelta64.py::TestAddSubNaTMasking::test_tdi_add_overflow": "TODO: Add a reason for failure", + "tests/arithmetic/test_timedelta64.py::TestTimedelta64ArithmeticUnsorted::test_timedelta[D]": "AssertionError: assert None == ", + "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_floordiv_td64arr_with_nat[DataFrame]": "TODO: Add a reason for failure", + "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_mul_masked[DataFrame-int64[pyarrow]]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='0') are different", + "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_mul_masked[Index-int64[pyarrow]]": "AssertionError: Index are different", + "tests/arithmetic/test_timedelta64.py::TestTimedeltaArraylikeMulDivOps::test_td64arr_mul_masked[Series-int64[pyarrow]]": "AssertionError: Attributes of Series are different", + "tests/arrays/boolean/test_construction.py::test_coerce_to_array_from_boolean_array": "TODO: Add a reason for failure", + "tests/arrays/boolean/test_construction.py::test_to_numpy_copy": "TODO: Add a reason for failure", + "tests/arrays/boolean/test_function.py::test_value_counts_with_normalize": "AssertionError: Series.index are different", + "tests/arrays/boolean/test_reduction.py::test_any_all[Series-values1-False-False-exp_any_noskip1-False]": "assert np.True_ is ", + "tests/arrays/boolean/test_reduction.py::test_any_all[Series-values2-False-True-exp_any_noskip2-exp_all_noskip2]": "assert np.True_ is ", + "tests/arrays/boolean/test_reduction.py::test_reductions_return_types[False-count]": "AssertionError: vs ", + "tests/arrays/boolean/test_reduction.py::test_reductions_return_types[True-count]": "AssertionError: vs ", + "tests/arrays/categorical/test_analytics.py::TestCategoricalAnalytics::test_searchsorted[False]": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_analytics.py::TestCategoricalAnalytics::test_searchsorted[None]": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_analytics.py::TestCategoricalAnalytics::test_searchsorted[True]": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_api.py::TestCategoricalAPI::test_rename_categories": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_api.py::TestCategoricalAPI::test_set_categories": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_api.py::TestPrivateCategoricalAPI::test_codes_immutable": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_astype.py::TestAstype::test_astype[False]": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_astype.py::TestAstype::test_astype[None]": "AssertionError: numpy array are different", + "tests/arrays/categorical/test_astype.py::TestAstype::test_astype[True]": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_astype.py::TestAstype::test_astype_nan_to_int[values0-CategoricalIndex]": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_astype.py::TestAstype::test_astype_nan_to_int[values1-CategoricalIndex]": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_constructors.py::TestCategoricalConstructors::test_constructor": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_constructors.py::TestCategoricalConstructors::test_constructor_preserves_freq": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_constructors.py::TestCategoricalConstructors::test_from_sequence_copy": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_indexing.py::TestCategoricalIndexing::test_where_new_category_raises": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_missing.py::TestCategoricalMissing::test_compare_categorical_with_missing[a10-a20-categories0]": "AssertionError: Attributes of Series are different", + "tests/arrays/categorical/test_replace.py::test_replace_categorical_ea_dtype": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_replace.py::test_replace_categorical_ea_dtype_different_cats_raises": "Failed: DID NOT RAISE ", + "tests/arrays/categorical/test_sorting.py::TestCategoricalSort::test_sort_values": "TODO: Add a reason for failure", + "tests/arrays/categorical/test_sorting.py::TestCategoricalSort::test_sort_values_na_position": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::TestDatetimeArrayConstructor::test_copy": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_empty[ms-Europe/Berlin]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_empty[ns-Asia/Kolkata]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_empty[ns-UTC]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_empty[s-UTC]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_empty[us-US/Eastern]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_from_integers": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[ms-ms-UTC-Europe/Berlin-data1]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[ms-us-US/Eastern-UTC-data6]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[ns-ns-US/Central-Asia/Kolkata-data3]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[ns-s-UTC-UTC-data4]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[s-ns-US/Central-Asia/Kolkata-data7]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[s-s-UTC-UTC-data0]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[us-ms-UTC-Europe/Berlin-data5]": "TODO: Add a reason for failure", + "tests/arrays/datetimes/test_constructors.py::test_from_arrow_with_different_units_and_timezones_with[us-us-US/Eastern-UTC-data2]": "TODO: Add a reason for failure", + "tests/arrays/floating/test_astype.py::test_astype_copy": "TODO: Add a reason for failure", + "tests/arrays/floating/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Float32Dtype]": "TODO: Add a reason for failure", + "tests/arrays/floating/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Float64Dtype]": "TODO: Add a reason for failure", + "tests/arrays/floating/test_construction.py::test_floating_array_constructor_copy": "TODO: Add a reason for failure", + "tests/arrays/floating/test_construction.py::test_to_array_none_is_nan[False-a2-b2]": "AssertionError: ExtensionArray NA mask are different", + "tests/arrays/floating/test_construction.py::test_to_array_none_is_nan[False-a3-b3]": "AssertionError: ExtensionArray NA mask are different", + "tests/arrays/floating/test_construction.py::test_to_array_none_is_nan[False-a4-b4]": "AssertionError: ExtensionArray NA mask are different", + "tests/arrays/floating/test_repr.py::test_frame_repr[Float32Dtype]": "AssertionError: assert ' ... 0.100000001' == ' A\n0 \n1 0.1'", + "tests/arrays/floating/test_to_numpy.py::test_to_numpy[False-series]": "AssertionError: numpy array are different", + "tests/arrays/floating/test_to_numpy.py::test_to_numpy_copy": "TODO: Add a reason for failure", + "tests/arrays/integer/test_arithmetic.py::test_values_multiplying_large_series_by_NA": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_scalar[ge-UInt64Dtype--1]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_scalar[gt-UInt64Dtype--1]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_scalar[le-UInt64Dtype--1]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_scalar[lt-UInt64Dtype--1]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Int16Dtype]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Int32Dtype]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Int64Dtype]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[Int8Dtype]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[UInt16Dtype]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[UInt32Dtype]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[UInt64Dtype]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_comparison.py::TestComparisonOps::test_ufunc_with_out[UInt8Dtype]": "TODO: Add a reason for failure", + "tests/arrays/integer/test_construction.py::test_from_dtype_from_float[Int16Dtype-False]": "Failed: DID NOT RAISE ", + "tests/arrays/integer/test_construction.py::test_from_dtype_from_float[Int32Dtype-False]": "Failed: DID NOT RAISE ", + "tests/arrays/integer/test_construction.py::test_from_dtype_from_float[Int64Dtype-False]": "Failed: DID NOT RAISE ", + "tests/arrays/integer/test_construction.py::test_from_dtype_from_float[Int8Dtype-False]": "Failed: DID NOT RAISE ", + "tests/arrays/integer/test_construction.py::test_from_dtype_from_float[UInt16Dtype-False]": "Failed: DID NOT RAISE ", + "tests/arrays/integer/test_construction.py::test_from_dtype_from_float[UInt32Dtype-False]": "Failed: DID NOT RAISE ", + "tests/arrays/integer/test_construction.py::test_from_dtype_from_float[UInt64Dtype-False]": "Failed: DID NOT RAISE ", + "tests/arrays/integer/test_construction.py::test_from_dtype_from_float[UInt8Dtype-False]": "Failed: DID NOT RAISE ", + "tests/arrays/integer/test_construction.py::test_integer_array_constructor_copy": "TODO: Add a reason for failure", + "tests/arrays/integer/test_dtypes.py::test_astype_copy": "TODO: Add a reason for failure", + "tests/arrays/integer/test_function.py::test_ufuncs_single_float[False-log]": "AssertionError: ColumnBase are different", + "tests/arrays/integer/test_function.py::test_ufuncs_single_float[False-sqrt]": "AssertionError: ColumnBase are different", + "tests/arrays/interval/test_interval_pyarrow.py::test_arrow_array": "TODO: Add a reason for failure", + "tests/arrays/interval/test_interval_pyarrow.py::test_arrow_array_missing[False]": "pyarrow.lib.ArrowTypeError: Did not pass numpy.dtype object", + "tests/arrays/interval/test_interval_pyarrow.py::test_arrow_array_missing[True]": "pyarrow.lib.ArrowTypeError: Did not pass numpy.dtype object", + "tests/arrays/interval/test_interval_pyarrow.py::test_from_arrow_from_raw_struct_array": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arithmetic.py::test_frame[boolean-__floordiv__]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arithmetic.py::test_frame[boolean-__pow__]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arithmetic.py::test_frame[boolean-__rfloordiv__]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arithmetic.py::test_frame[boolean-__rpow__]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arithmetic.py::test_frame[boolean-__rtruediv__]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arithmetic.py::test_series[boolean-__floordiv__]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arithmetic.py::test_series[boolean-__pow__]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arithmetic.py::test_series[boolean-__rfloordiv__]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arithmetic.py::test_series[boolean-__rpow__]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arithmetic.py::test_series[boolean-__rtruediv__]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Float32]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Float64]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Int16]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Int32]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Int64]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[Int8]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[UInt16]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[UInt32]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[UInt64]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[UInt8]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_arrow_array[boolean]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Float32]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Float64]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Int16]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Int32]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Int64]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[Int8]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[UInt16]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[UInt32]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[UInt64]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[UInt8]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_arrow_compat.py::test_from_arrow_type_error[boolean]": "TODO: Add a reason for failure", + "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[Int64-invalid5]": "Failed: DID NOT RAISE ", + "tests/arrays/masked/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[Int64-invalid6]": "Failed: DID NOT RAISE ", + "tests/arrays/numpy_/test_numpy.py::test_asarray_readonly[None]": "assert not True", + "tests/arrays/numpy_/test_numpy.py::test_asarray_readonly[int64]": "assert not True", + "tests/arrays/numpy_/test_numpy.py::test_np_max_nested_tuples": "TODO: Add a reason for failure", + "tests/arrays/numpy_/test_numpy.py::test_np_reduce_2d": "TODO: Add a reason for failure", + "tests/arrays/numpy_/test_numpy.py::test_setitem_preserves_views": "TODO: Add a reason for failure", + "tests/arrays/numpy_/test_numpy.py::test_to_numpy": "TODO: Add a reason for failure", + "tests/arrays/numpy_/test_numpy.py::test_ufunc": "TODO: Add a reason for failure", + "tests/arrays/numpy_/test_numpy.py::test_ufunc_unary[absolute]": "TODO: Add a reason for failure", + "tests/arrays/numpy_/test_numpy.py::test_ufunc_unary[negative]": "TODO: Add a reason for failure", + "tests/arrays/numpy_/test_numpy.py::test_ufunc_unary[positive]": "TODO: Add a reason for failure", + "tests/arrays/period/test_arrow_compat.py::test_arrow_array[data0-D]": "pyarrow.lib.ArrowTypeError: Did not pass numpy.dtype object", + "tests/arrays/period/test_arrow_compat.py::test_arrow_array[data1-Y-DEC]": "pyarrow.lib.ArrowTypeError: Did not pass numpy.dtype object", + "tests/arrays/period/test_arrow_compat.py::test_arrow_array_missing": "TODO: Add a reason for failure", + "tests/arrays/period/test_astype.py::test_astype_copies": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_accessor.py::TestFrameAccessor::test_from_spmatrix_columns[columns1]": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_accessor.py::TestFrameAccessor::test_subclassing": "AttributeError: 'SparseArray' object has no attribute 'reshape'. Did you mean: 'shape'?", + "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[add-a0-b0]": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[add-a1-b1]": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[greater-a0-b0]": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_arithmetics.py::test_binary_ufuncs[greater-a1-b1]": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_arithmetics.py::test_ufuncs[arr0-absolute]": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_arithmetics.py::test_ufuncs[arr0-exp]": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_arithmetics.py::test_ufuncs[arr1-absolute]": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_arithmetics.py::test_ufuncs[arr1-exp]": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_array.py::TestSparseArrayAnalytics::test_modf[0.0]": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_array.py::TestSparseArrayAnalytics::test_modf[nan]": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_array.py::TestSparseArrayAnalytics::test_ufunc": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_array.py::TestSparseArrayAnalytics::test_ufunc_args": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_array.py::test_array_interface": "TODO: Add a reason for failure", + "tests/arrays/sparse/test_constructors.py::TestConstructors::test_constructor_copy": "TODO: Add a reason for failure", + "tests/arrays/string_/test_string.py::test_isin[string=str[python]]": "TODO: Add a reason for failure", + "tests/arrays/string_/test_string.py::test_isin[string=string[pyarrow]]": "TODO: Add a reason for failure", + "tests/arrays/string_/test_string.py::test_isin[string=string[python]]": "TODO: Add a reason for failure", + "tests/arrays/string_/test_string.py::test_min_max[False-string=str[pyarrow]-max]": "assert np.float64(nan) is nan", + "tests/arrays/string_/test_string.py::test_min_max[False-string=str[pyarrow]-min]": "assert np.float64(nan) is nan", + "tests/arrays/string_/test_string.py::test_min_max[False-string=str[python]-max]": "AssertionError: assert np.float64(nan) is nan", + "tests/arrays/string_/test_string.py::test_min_max[False-string=str[python]-min]": "AssertionError: assert np.float64(nan) is nan", + "tests/arrays/string_/test_string.py::test_min_max[False-string=string[pyarrow]-max]": "assert np.float64(nan) is ", + "tests/arrays/string_/test_string.py::test_min_max[False-string=string[pyarrow]-min]": "assert np.float64(nan) is ", + "tests/arrays/string_/test_string.py::test_min_max[False-string=string[python]-max]": "AssertionError: assert np.float64(nan) is ", + "tests/arrays/string_/test_string.py::test_min_max[False-string=string[python]-min]": "AssertionError: assert np.float64(nan) is ", + "tests/arrays/string_/test_string.py::test_numpy_random_permute[string=str[python]-Series]": "ValueError: array is read-only", + "tests/arrays/string_/test_string.py::test_numpy_random_permute[string=string[python]-Series]": "ValueError: array is read-only", + "tests/arrays/string_/test_string.py::test_reduce_empty[False-string=str[pyarrow]-0]": "AssertionError: assert 0 == ''", + "tests/arrays/string_/test_string.py::test_reduce_empty[False-string=str[python]-0]": "AssertionError: assert 0 == ''", + "tests/arrays/string_/test_string.py::test_reduce_empty[False-string=string[pyarrow]-0]": "AssertionError: assert 0 == ''", + "tests/arrays/string_/test_string.py::test_reduce_empty[False-string=string[python]-0]": "AssertionError: assert 0 == ''", + "tests/arrays/string_/test_string.py::test_reduce_empty[True-string=str[pyarrow]-0]": "AssertionError: assert 0 == ''", + "tests/arrays/string_/test_string.py::test_reduce_empty[True-string=str[python]-0]": "AssertionError: assert 0 == ''", + "tests/arrays/string_/test_string.py::test_reduce_empty[True-string=string[pyarrow]-0]": "AssertionError: assert 0 == ''", + "tests/arrays/string_/test_string.py::test_reduce_empty[True-string=string[python]-0]": "AssertionError: assert 0 == ''", + "tests/arrays/string_/test_string.py::test_value_counts_sort_false[string=string[pyarrow]]": "AssertionError: ColumnBase are different", + "tests/arrays/string_/test_string.py::test_value_counts_sort_false[string=string[python]]": "AssertionError: ColumnBase are different", + "tests/arrays/string_/test_string.py::test_value_counts_with_normalize[string=string[pyarrow]]": "AssertionError: ColumnBase are different", + "tests/arrays/string_/test_string.py::test_value_counts_with_normalize[string=string[python]]": "AssertionError: ColumnBase are different", + "tests/arrays/string_/test_string_arrow.py::test_pickle_roundtrip[na_value0]": "https://github.com/rapidsai/cudf/issues/18659#issuecomment-3710985854", + "tests/arrays/string_/test_string_arrow.py::test_pickle_roundtrip[nan]": "https://github.com/rapidsai/cudf/issues/18659#issuecomment-3710985854", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[B]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[D]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[ME]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[QE]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[W]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_interface[YE]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_from_array_keeps_base": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-B-pyarrow_numpy-series]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-D-pyarrow_numpy-series]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-ME-pyarrow_numpy-series]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-QE-pyarrow_numpy-series]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-W-pyarrow_numpy-series]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_searchsorted_castable_strings[None-YE-pyarrow_numpy-series]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-B-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-D-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-ME-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-QE-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-W-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='US/Pacific')-YE-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-B-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-D-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-ME-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-QE-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-W-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_setitem_categorical[zoneinfo.ZoneInfo(key='UTC')-YE-True]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::TestTimedeltaArray::test_array_interface": "TODO: Add a reason for failure", + "tests/arrays/test_datetimelike.py::test_searchsorted_datetimelike_with_listlike_invalid_dtype[arg0-values1]": "TODO: Add a reason for failure", + "tests/arrays/test_datetimes.py::TestDatetimeArray::test_astype_to_same": "TODO: Add a reason for failure", + "tests/arrays/test_datetimes.py::TestDatetimeArray::test_date_range_lowercase_frequency_deprecated": "AssertionError: Index are different", + "tests/arrays/test_period.py::test_registered": "TODO: Add a reason for failure", + "tests/arrays/timedeltas/test_constructors.py::TestTimedeltaArrayConstructor::test_copy": "TODO: Add a reason for failure", + "tests/arrays/timedeltas/test_reductions.py::TestReductions::test_reductions_empty[False-max]": "TODO: Add a reason for failure", + "tests/arrays/timedeltas/test_reductions.py::TestReductions::test_reductions_empty[False-min]": "TODO: Add a reason for failure", + "tests/arrays/timedeltas/test_reductions.py::TestReductions::test_reductions_empty[True-max]": "TODO: Add a reason for failure", + "tests/arrays/timedeltas/test_reductions.py::TestReductions::test_reductions_empty[True-min]": "TODO: Add a reason for failure", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[DataFrame-array-datetime64[D]]": "TODO: Add a reason for failure", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[DataFrame-array-object-datetime.datetime]": "Failed: DID NOT RAISE ", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[DataFrame-array-object-numpy-scalar]": "Failed: DID NOT RAISE ", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[DataFrame-array-object-string]": "Failed: DID NOT RAISE ", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[DataFrame-dict-datetime64[D]]": "TODO: Add a reason for failure", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[DataFrame-dict-object-datetime.datetime]": "TODO: Add a reason for failure", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[DataFrame-dict-object-numpy-scalar]": "Failed: DID NOT RAISE ", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[DataFrame-dict-object-string]": "Failed: DID NOT RAISE ", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[Index-datetime64[D]]": "TODO: Add a reason for failure", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[Index-object-datetime.datetime]": "Failed: DID NOT RAISE ", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[Index-object-numpy-scalar]": "Failed: DID NOT RAISE ", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[Index-object-string]": "Failed: DID NOT RAISE ", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[Series-datetime64[D]]": "TODO: Add a reason for failure", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[Series-object-datetime.datetime]": "TODO: Add a reason for failure", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[Series-object-numpy-scalar]": "Failed: DID NOT RAISE ", + "tests/base/test_constructors.py::TestConstruction::test_constructor_datetime_outofbound[Series-object-string]": "Failed: DID NOT RAISE ", + "tests/base/test_conversion.py::test_array[index-arr3-_left]": "TODO: Add a reason for failure", + "tests/base/test_conversion.py::test_array[index-arr4-_sparse_values]": "TODO: Add a reason for failure", + "tests/base/test_conversion.py::test_array[series-arr4-_sparse_values]": "TODO: Add a reason for failure", + "tests/base/test_conversion.py::test_to_numpy[array-False-arr1-expected1-False]": "AssertionError: numpy array are different", + "tests/base/test_conversion.py::test_to_numpy[array-True-arr1-expected1-False]": "AssertionError: numpy array are different", + "tests/base/test_conversion.py::test_to_numpy_copy[arr0-False]": "TODO: Add a reason for failure", + "tests/base/test_conversion.py::test_to_numpy_copy[arr0-True]": "TODO: Add a reason for failure", + "tests/base/test_conversion.py::test_values_consistent[arr0-ndarray-int64]": "TODO: Add a reason for failure", + "tests/base/test_fillna.py::test_fillna[datetime]": "TODO: Add a reason for failure", + "tests/base/test_fillna.py::test_fillna[multi]": "TODO: Add a reason for failure", + "tests/base/test_fillna.py::test_fillna[tuples]": "TODO: Add a reason for failure", + "tests/base/test_misc.py::test_memory_usage[series-with-object-index]": "assert 204 > 204", + "tests/base/test_misc.py::test_ndarray_compat_properties[multi]": "TODO: Add a reason for failure", + "tests/base/test_misc.py::test_ndarray_compat_properties[tuples]": "TODO: Add a reason for failure", + "tests/base/test_unique.py::test_unique[multi]": "TODO: Add a reason for failure", + "tests/base/test_unique.py::test_unique[tuples]": "TODO: Add a reason for failure", + "tests/base/test_value_counts.py::test_value_counts[mi-with-dt64tz-level]": "ValueError: Names should be list-like for a MultiIndex", + "tests/base/test_value_counts.py::test_value_counts[multi]": "TODO: Add a reason for failure", + "tests/base/test_value_counts.py::test_value_counts[tuples]": "TODO: Add a reason for failure", + "tests/base/test_value_counts.py::test_value_counts_bins[index]": "TODO: Add a reason for failure", + "tests/base/test_value_counts.py::test_value_counts_bins[series]": "TODO: Add a reason for failure", + "tests/computation/test_eval.py::TestAlignment::test_performance_warning_for_poor_alignment[True-numexpr-pandas]": "assert 0 == 1", + "tests/computation/test_eval.py::TestAlignment::test_performance_warning_for_poor_alignment[True-numexpr-python]": "assert 0 == 1", + "tests/computation/test_eval.py::TestEval::test_disallow_python_keywords": "TODO: Add a reason for failure", + "tests/computation/test_eval.py::TestOperations::test_query_inplace": "TODO: Add a reason for failure", + "tests/computation/test_eval.py::test_eval_no_support_column_name[False]": "TODO: Add a reason for failure", + "tests/computation/test_eval.py::test_eval_no_support_column_name[True]": "TODO: Add a reason for failure", + "tests/computation/test_eval.py::test_method_calls_on_binop": "AssertionError: Attributes of Series are different", + "tests/computation/test_eval.py::test_numexpr_option_respected[False-python]": "TODO: Add a reason for failure", + "tests/copy_view/index/test_datetimeindex.py::test_index_values": "TODO: Add a reason for failure", + "tests/copy_view/index/test_index.py::test_assign_index_as_index": "TODO: Add a reason for failure", + "tests/copy_view/index/test_index.py::test_assign_index_as_series": "TODO: Add a reason for failure", + "tests/copy_view/index/test_index.py::test_index_from_index": "TODO: Add a reason for failure", + "tests/copy_view/index/test_index.py::test_index_from_series": "TODO: Add a reason for failure", + "tests/copy_view/index/test_index.py::test_index_from_series_copy": "TODO: Add a reason for failure", + "tests/copy_view/index/test_index.py::test_index_to_frame": "TODO: Add a reason for failure", + "tests/copy_view/index/test_index.py::test_index_values": "TODO: Add a reason for failure", + "tests/copy_view/index/test_index.py::test_set_index_series": "TODO: Add a reason for failure", + "tests/copy_view/test_array.py::test_dataframe_array_ea_dtypes[np.array]": "AssertionError: assert False", + "tests/copy_view/test_array.py::test_dataframe_array_ea_dtypes[np.asarray-dtype]": "AssertionError: assert False", + "tests/copy_view/test_array.py::test_dataframe_array_ea_dtypes[np.asarray]": "AssertionError: assert False", + "tests/copy_view/test_array.py::test_dataframe_array_ea_dtypes[values]": "AssertionError: assert False", + "tests/copy_view/test_array.py::test_dataframe_array_string_dtype": "TODO: Add a reason for failure", + "tests/copy_view/test_array.py::test_dataframe_values[array]": "TODO: Add a reason for failure", + "tests/copy_view/test_array.py::test_dataframe_values[asarray]": "TODO: Add a reason for failure", + "tests/copy_view/test_array.py::test_dataframe_values[values]": "TODO: Add a reason for failure", + "tests/copy_view/test_array.py::test_series_array_string_dtype[string=object]": "AssertionError: assert False", + "tests/copy_view/test_array.py::test_series_array_string_dtype[string=str[python]]": "AssertionError: assert False", + "tests/copy_view/test_array.py::test_series_array_string_dtype[string=string[python]]": "AssertionError: assert False", + "tests/copy_view/test_array.py::test_series_to_numpy": "TODO: Add a reason for failure", + "tests/copy_view/test_array.py::test_series_values[array]": "TODO: Add a reason for failure", + "tests/copy_view/test_array.py::test_series_values[np.array]": "AssertionError: assert False", + "tests/copy_view/test_array.py::test_series_values[np.asarray]": "AssertionError: assert False", + "tests/copy_view/test_array.py::test_series_values[values]": "TODO: Add a reason for failure", + "tests/copy_view/test_array.py::test_series_values_ea_dtypes[values]": "assert np.int64(1) == 0", + "tests/copy_view/test_astype.py::test_astype_arrow_timestamp": "TODO: Add a reason for failure", + "tests/copy_view/test_astype.py::test_astype_avoids_copy[Int64-Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_astype.py::test_astype_avoids_copy[Int64-int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_astype.py::test_astype_avoids_copy[int64-Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_astype.py::test_astype_avoids_copy[int64-int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_astype.py::test_astype_avoids_copy[int64[pyarrow]-Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_astype.py::test_astype_avoids_copy[int64[pyarrow]-int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_astype.py::test_astype_dict_dtypes": "TODO: Add a reason for failure", + "tests/copy_view/test_astype.py::test_astype_different_timezones": "AssertionError: assert not True", + "tests/copy_view/test_astype.py::test_astype_numpy_to_ea": "TODO: Add a reason for failure", + "tests/copy_view/test_astype.py::test_astype_single_dtype": "TODO: Add a reason for failure", + "tests/copy_view/test_astype.py::test_astype_string_and_object[object-string[python]]": "AssertionError: assert False", + "tests/copy_view/test_astype.py::test_astype_string_and_object[string[python]-object]": "AssertionError: assert False", + "tests/copy_view/test_astype.py::test_astype_string_and_object_update_original[object-string[python]]": "AssertionError: assert False", + "tests/copy_view/test_astype.py::test_astype_string_and_object_update_original[string[python]-object]": "AssertionError: assert False", + "tests/copy_view/test_astype.py::test_convert_dtypes": "cudf does not implement Copy-on-Write, so convert_dtypes always returns a fresh copy and shares_memory is False", + "tests/copy_view/test_astype.py::test_convert_dtypes_infer_objects": "cudf does not implement Copy-on-Write, so convert_dtypes always returns a fresh copy and shares_memory is False", + "tests/copy_view/test_chained_assignment_deprecation.py::test_series_setitem[0]": "Failed: DID NOT WARN. No warnings of type (,) were emitted.", + "tests/copy_view/test_chained_assignment_deprecation.py::test_series_setitem[indexer1]": "Failed: DID NOT WARN. No warnings of type (,) were emitted.", + "tests/copy_view/test_chained_assignment_deprecation.py::test_series_setitem[indexer2]": "Failed: DID NOT WARN. No warnings of type (,) were emitted.", + "tests/copy_view/test_chained_assignment_deprecation.py::test_series_setitem[indexer3]": "Failed: DID NOT WARN. No warnings of type (,) were emitted.", + "tests/copy_view/test_clip.py::test_clip_chained_inplace": "TODO: Add a reason for failure", + "tests/copy_view/test_clip.py::test_clip_inplace": "TODO: Add a reason for failure", + "tests/copy_view/test_clip.py::test_clip_inplace_reference_no_op": "TODO: Add a reason for failure", + "tests/copy_view/test_clip.py::test_clip_no_op": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_constructor_mgr_or_df[None-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_constructor_mgr_or_df[None-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_constructor_mgr_or_df[columns1-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_constructor_mgr_or_df[columns1-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-None-Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-None-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-None-int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-index1-Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-index1-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[None-index1-int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-None-Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-None-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-None-int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-index1-Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-index1-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns1-index1-int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns2-None-Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns2-None-None]": "AssertionError: Attributes of DataFrame.iloc[:, 2] (column name='c') are different", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns2-None-int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns2-index1-Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns2-index1-None]": "AssertionError: Attributes of DataFrame.iloc[:, 2] (column name='c') are different", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series[columns2-index1-int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series_with_dtype[None]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series_with_dtype[index1]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series_with_reindex[None]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_dict_of_series_with_reindex[int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_dataframe_from_extension_array[False-int-ea]": "assert False", + "tests/copy_view/test_constructors.py::test_dataframe_from_numpy_array[False]": "assert False", + "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[index-int-ea]": "AssertionError: assert False", + "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[index-int]": "AssertionError: assert False", + "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[index-object]": "AssertionError: assert False", + "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[index-str]": "AssertionError: assert False", + "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[series-int-ea]": "assert False", + "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[series-int]": "assert False", + "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[series-object]": "AssertionError: assert False", + "tests/copy_view/test_constructors.py::test_dataframe_from_series_or_index[series-str]": "AssertionError: assert False", + "tests/copy_view/test_constructors.py::test_frame_from_dict_of_index": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_series_from_array[arr0-None-None]": "assert False", + "tests/copy_view/test_constructors.py::test_series_from_array[arr0-None-int64]": "assert False", + "tests/copy_view/test_constructors.py::test_series_from_array[arr0-idx1-None]": "assert False", + "tests/copy_view/test_constructors.py::test_series_from_array[arr0-idx1-int64]": "assert False", + "tests/copy_view/test_constructors.py::test_series_from_index[idx0]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_series_from_index[idx1]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_series_from_index[idx3]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_series_from_series[None]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_series_from_series[int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_constructors.py::test_series_from_series_with_reindex": "TODO: Add a reason for failure", + "tests/copy_view/test_core_functionalities.py::test_assigning_to_same_variable_removes_references": "TODO: Add a reason for failure", + "tests/copy_view/test_core_functionalities.py::test_delete": "TODO: Add a reason for failure", + "tests/copy_view/test_core_functionalities.py::test_delete_reference": "TODO: Add a reason for failure", + "tests/copy_view/test_core_functionalities.py::test_setitem_dont_track_unnecessary_references": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_concat_copy_keyword": "AssertionError: assert False", + "tests/copy_view/test_functions.py::test_concat_frames": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_concat_frames_chained": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_concat_frames_updating_input": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_concat_mixed_series_frame": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_concat_series": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_concat_series_chained": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_concat_series_updating_input": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_join_multiple_dataframes_on_key": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_join_on_key[object]": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_join_on_key[str]": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_merge_copy_keyword": "AssertionError: assert False", + "tests/copy_view/test_functions.py::test_merge_indicator_no_deep_copy": "AssertionError: assert False", + "tests/copy_view/test_functions.py::test_merge_on_index": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_merge_on_key[0]": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_merge_on_key[1]": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_merge_on_key_enlarging_one[-left]": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_merge_on_key_enlarging_one[-right]": "TODO: Add a reason for failure", + "tests/copy_view/test_functions.py::test_merge_upcasting_no_copy": "AssertionError: assert False", + "tests/copy_view/test_indexing.py::test_column_as_series[nullable]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_column_as_series[numpy]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_column_as_series_no_item_cache[nullable-getitem]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_column_as_series_no_item_cache[numpy-getitem]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_dataframe_add_column_from_series[nullable]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_dataframe_add_column_from_series[numpy]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_del_frame[nullable]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_del_frame[numpy]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_del_series[nullable]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_del_series[numpy]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_getitem_midx_slice": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_loc_enlarging_with_dataframe": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_midx_read_only_bool_indexer": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_series_getitem_ellipsis": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_series_getitem_slice[nullable]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_series_getitem_slice[numpy]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-iloc-indexer1-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-iloc-indexer3-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-iloc-indexer5-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-loc-indexer0-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-loc-indexer2-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[mixed-block-loc-indexer4-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-iloc-indexer1-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-iloc-indexer3-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-iloc-indexer5-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-loc-indexer0-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-loc-indexer2-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_set_value_copy_only_necessary_column[single-block-loc-indexer4-100]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_subset_column_selection[nullable]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_subset_column_selection[numpy]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_subset_column_selection_modify_parent[nullable]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_subset_column_selection_modify_parent[numpy]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_subset_column_slice[nullable-mixed-block]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_subset_column_slice[nullable-single-block]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_subset_column_slice[numpy-mixed-block]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_subset_column_slice[numpy-single-block]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_subset_row_slice[nullable]": "TODO: Add a reason for failure", + "tests/copy_view/test_indexing.py::test_subset_row_slice[numpy]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_chained_assignment": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_dict": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Float32]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Float64]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Int16]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Int32]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[Int8]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[UInt16]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[UInt32]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[UInt64]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[UInt8]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[double[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[float[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[int16[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[int32[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[int64[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[int8[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[uint16[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[uint32[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[uint64[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_ea_noop_shares_memory[uint8[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace": "AssertionError: assert False", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Float32]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Float64]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Int16]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Int32]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[Int8]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[UInt16]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[UInt32]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[UInt64]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[UInt8]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[double[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[float[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[int16[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[int32[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[int64[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[int8[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[uint16[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[uint32[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[uint64[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_ea_noop_shares_memory[uint8[pyarrow]]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_fillna_inplace_reference": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_interp_fill_functions[bfill]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_interp_fill_functions[ffill]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_interpolate_chained_assignment[bfill]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_interpolate_chained_assignment[ffill]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_interpolate_inplace_no_reference_no_copy[vals0]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_interpolate_inplace_no_reference_no_copy[vals1]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_interpolate_no_op[linear]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_interpolate_no_op[nearest]": "TODO: Add a reason for failure", + "tests/copy_view/test_interp_fillna.py::test_interpolate_object_convert_copies": "AssertionError: assert False", + "tests/copy_view/test_interp_fillna.py::test_interpolate_object_convert_no_op": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_add_prefix": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_add_suffix": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_align_copy_false": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_align_frame[0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_align_frame[1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_align_frame[2]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_align_series": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_align_with_series_copy_false": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_assign_drop_duplicates[assign]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_assign_drop_duplicates[drop_duplicates]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_between_time[obj0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_between_time[obj1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_chained_methods[reset_index]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_chained_where_mask[mask]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_chained_where_mask[where]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_copy": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_copy_shallow": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_drop_on_column": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_droplevel": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_dropna[0-5.5]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_dropna[1-nan]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_dropna_series[5.5]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_dropna_series[5]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_eval": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_eval_inplace": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_filter[filter_kwargs0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_filter[filter_kwargs1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_filter[filter_kwargs2]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_frame_set_axis": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_get[a]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_get[key1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_infer_objects": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_insert_series": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_isetitem": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_isetitem_frame": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_isetitem_series[mixed-block]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_isetitem_series[single-block]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_items": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[align-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[align-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[align-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[astype-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[astype-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[astype-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[infer_objects-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[infer_objects-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[infer_objects-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex_like-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex_like-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[reindex_like-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis0-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis0-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis0-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis1-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis1-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[rename_axis1-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_axis-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_axis-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_axis-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_flags-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_flags-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[set_flags-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[truncate-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[truncate-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[truncate-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[tz_convert-False]": "AssertionError: assert False", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[tz_convert-None]": "AssertionError: assert False", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[tz_convert-True]": "AssertionError: assert False", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[tz_localize-False]": "AssertionError: assert False", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[tz_localize-None]": "AssertionError: assert False", + "tests/copy_view/test_methods.py::test_methods_copy_keyword[tz_localize-True]": "AssertionError: assert False", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[astype-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[astype-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[astype-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[reindex-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[reindex-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[reindex-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[rename-False]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[rename-None]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[rename-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[set_flags-False]": "assert False", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[set_flags-None]": "assert False", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[set_flags-True]": "assert False", + "tests/copy_view/test_methods.py::test_methods_series_copy_keyword[truncate-True]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_pipe": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_pipe_modify_df": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_pop": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_putmask_aligns_rhs_no_reference[Float64]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_putmask_aligns_rhs_no_reference[float64]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_putmask_dont_copy_some_blocks[5-False-False]": "AssertionError: assert False", + "tests/copy_view/test_methods.py::test_putmask_no_reference[Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_putmask_no_reference[int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_reindex_columns": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_reindex_like": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_reindex_rows[copy]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_reindex_rows[identical]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_reindex_rows[values]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_reindex_rows[view]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_rename_axis[kwargs0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_rename_axis[kwargs1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_rename_columns": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_rename_columns_modify_parent": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_reorder_levels": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_reset_index": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_reset_index_series_drop[index0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_reset_index_series_drop[index1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_round[-1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_round[0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_round[1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_select_dtypes": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_series_reorder_levels": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_set_flags": "assert False", + "tests/copy_view/test_methods.py::test_set_index": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_shift_columns": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_shift_no_op": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_sort_index": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_sort_values[obj0-kwargs0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_sort_values[obj1-kwargs1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_sort_values_inplace[obj0-kwargs0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_sort_values_inplace[obj1-kwargs1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_squeeze": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_swaplevel[obj0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_take[obj0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_take[obj1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_to_frame": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_to_period[obj0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_to_period[obj1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_to_timestamp[obj0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_to_timestamp[obj1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_transpose": "AssertionError: assert False", + "tests/copy_view/test_methods.py::test_truncate[kwargs0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_truncate[kwargs1]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_tz_convert_localize[tz_localize-None]": "assert False", + "tests/copy_view/test_methods.py::test_update_chained_assignment": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_update_frame": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_where_mask_noop[0-Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_where_mask_noop[0-int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_where_mask_noop[1-Int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_where_mask_noop[1-int64]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_where_mask_noop_on_single_column[0-Int64-10]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_where_mask_noop_on_single_column[0-int64-10.5]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_where_mask_noop_on_single_column[1-Int64-10]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_where_mask_noop_on_single_column[1-int64-10.5]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_xs[mixed-block-1-a]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_xs[single-block-0-0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_xs[single-block-1-a]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_xs_multiindex[l1-0-0]": "TODO: Add a reason for failure", + "tests/copy_view/test_methods.py::test_xs_multiindex[l1-0-1]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace[replace_kwargs0]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace[replace_kwargs1]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace[replace_kwargs2]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace[replace_kwargs3]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_categorical": "AssertionError: assert False", + "tests/copy_view/test_replace.py::test_replace_categorical_inplace": "AssertionError: assert False", + "tests/copy_view/test_replace.py::test_replace_chained_assignment": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_coerce_single_column": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_columnwise_no_op": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_columnwise_no_op_inplace": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_empty_list": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_inplace[1.5]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_inplace[to_replace1]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_inplace[to_replace2]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_inplace_reference_no_op[100.5]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_inplace_reference_no_op[a]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_list_categorical": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_list_multiple_elements_inplace": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_list_none": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_listlike": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_listlike_inplace": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_mask_all_false_second_block": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_object_list_inplace[None]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_object_list_inplace[d]": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_regex_inplace": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_regex_inplace_no_op": "TODO: Add a reason for failure", + "tests/copy_view/test_replace.py::test_replace_to_replace_wrong_dtype": "TODO: Add a reason for failure", + "tests/copy_view/test_setitem.py::test_set_column_with_series": "TODO: Add a reason for failure", + "tests/copy_view/test_setitem.py::test_set_columns_with_dataframe": "TODO: Add a reason for failure", + "tests/copy_view/test_setitem.py::test_setitem_series_no_copy": "TODO: Add a reason for failure", + "tests/copy_view/test_setitem.py::test_setitem_series_no_copy_single_block": "TODO: Add a reason for failure", + "tests/copy_view/test_setitem.py::test_setitem_series_no_copy_split_block": "TODO: Add a reason for failure", + "tests/copy_view/test_util.py::test_get_array_masked": "TODO: Add a reason for failure", + "tests/copy_view/test_util.py::test_get_array_numpy": "TODO: Add a reason for failure", + "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right0-left0]": "cudf.pandas proxy creates a fresh IntervalDtype proxy on each result, so `result is left` fails even when the underlying dtype is the same instance.", + "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right1-left1]": "cudf.pandas proxy creates a fresh IntervalDtype proxy on each result, so `result is left` fails even when the underlying dtype is the same instance.", + "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right2-left2]": "cudf.pandas proxy creates a fresh IntervalDtype proxy on each result, so `result is left` fails even when the underlying dtype is the same instance.", + "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right3-left3]": "cudf.pandas proxy creates a fresh IntervalDtype proxy on each result, so `result is left` fails even when the underlying dtype is the same instance.", + "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right4-left4]": "cudf.pandas proxy creates a fresh IntervalDtype proxy on each result, so `result is left` fails even when the underlying dtype is the same instance.", + "tests/dtypes/cast/test_find_common_type.py::test_interval_dtype[right5-left5]": "cudf.pandas proxy creates a fresh IntervalDtype proxy on each result, so `result is left` fails even when the underlying dtype is the same instance.", + "tests/dtypes/test_dtypes.py::TestCategoricalDtype::test_repr_range_categories": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_categorical_equality[False-None]": "AssertionError: assert CategoricalDtype(categories=['a', 'b', 'c'], ordered=False, categories_dtype=str) != Categoric...", + "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_categorical_equality[None-None]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_categorical_equality[True-None]": "AssertionError: assert CategoricalDtype(categories=['a', 'b', 'c'], ordered=True, categories_dtype=str) != Categorica...", + "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_from_categorical_dtype_identity": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_nan_invalid": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestCategoricalDtypeParametrized::test_non_unique_invalid": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_basic_dtype": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_closed_mismatch": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_closed_must_match": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction[Interval[int64]]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction[interval[int64]]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_allows_closed_none[Interval[int64]]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_allows_closed_none[int64]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_allows_closed_none[interval[int64]]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_allows_closed_none[subtype3]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_from_string": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_generic[Interval]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_construction_generic[interval]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_equality": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_hash_vs_equality": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_name_repr_generic[Interval]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_name_repr_generic[interval]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::TestIntervalDtype::test_unpickling_without_closed": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::test_registry[CategoricalDtype]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::test_registry[DatetimeTZDtype]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::test_registry[IntervalDtype]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::test_registry[PeriodDtype]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::test_registry_find[category-expected5]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::test_registry_find[datetime64[ns, US/Eastern]-expected6]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::test_registry_find[interval-expected1]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::test_registry_find[interval[datetime64[ns], left]-expected3]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::test_registry_find[interval[int64, neither]-expected2]": "TODO: Add a reason for failure", + "tests/dtypes/test_dtypes.py::test_registry_find[period[D]-expected4]": "TODO: Add a reason for failure", + "tests/dtypes/test_inference.py::TestTypeInference::test_categorical": "AssertionError: assert 'string' == 'categorical'", + "tests/dtypes/test_inference.py::TestTypeInference::test_date": "TODO: Add a reason for failure", + "tests/dtypes/test_inference.py::TestTypeInference::test_is_interval_array_subclass": "AssertionError: assert not True", + "tests/dtypes/test_inference.py::test_is_scipy_sparse[dok]": "TODO: Add a reason for failure", + "tests/dtypes/test_missing.py::test_array_equivalent_series[val5]": "TODO: Add a reason for failure", + "tests/dtypes/test_missing.py::test_array_equivalent_series[val6]": "TODO: Add a reason for failure", + "tests/dtypes/test_missing.py::test_array_equivalent_series[val7]": "TODO: Add a reason for failure", + "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_astype_str": "TypeError: Cannot interpret '' as a data type", + "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_astype_string[string[pyarrow]]": "TODO: Add a reason for failure", + "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_astype_string[string[python]]": "TODO: Add a reason for failure", + "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__eq__-Index]": "TODO: Add a reason for failure", + "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__ge__-Index]": "TODO: Add a reason for failure", + "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__gt__-Index]": "TODO: Add a reason for failure", + "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__le__-Index]": "TODO: Add a reason for failure", + "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__lt__-Index]": "TODO: Add a reason for failure", + "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_direct_arith_with_ndframe_returns_not_implemented[__ne__-Index]": "TODO: Add a reason for failure", + "tests/extension/decimal/test_decimal.py::test_array_copy_on_write": "TODO: Add a reason for failure", + "tests/extension/json/test_json.py::TestJSONArray::test_astype_string[string[pyarrow]]": "TODO: Add a reason for failure", + "tests/extension/json/test_json.py::TestJSONArray::test_astype_string[string[python]]": "TODO: Add a reason for failure", + "tests/extension/json/test_json.py::TestJSONArray::test_concat_mixed_dtypes": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cummax-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cummin-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cumprod-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int16-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int16-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int32-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int32-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int64-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int8-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int8-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint16-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint16-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint32-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint32-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__add__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__mul__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__pow__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__radd__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__rmul__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__rsub__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__sub__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint8-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint8-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int16-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int32-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int64-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int8-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint16-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint16-__rsub__]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint16-__sub__]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint32-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint32-__rsub__]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint32-__sub__]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint64-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint64-__rsub__]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint64-__sub__]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint8-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint8-__rsub__]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint8-__sub__]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int16-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int16-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int32-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int32-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int64-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int8-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int8-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint16-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint16-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint32-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint32-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__add__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__mul__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__pow__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__radd__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__rmul__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__rsub__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__sub__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint8-__floordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint8-__rfloordiv__]": "https://github.com/rapidsai/cudf/issues/18659", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-ge]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-gt]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-le]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-lt]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-ne]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-eq]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-ge]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-gt]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-le]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-lt]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ns]-ne]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-ge]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-gt]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-le]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-lt]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-ne]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-ge]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-gt]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-le]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-lt]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-ne]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_concat_mixed_dtypes[decimal128(7, 3)]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_groupby_agg_extension[decimal128(7, 3)]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[bool]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[decimal128(7, 3)]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[double]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[duration[ms]]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[duration[ns]]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[duration[s]]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[duration[us]]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[float]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[int16]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[int32]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[int64]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[int8]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[string]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[timestamp[ms]]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[timestamp[ns]]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[timestamp[s]]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[timestamp[us]]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[uint16]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[uint32]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[uint64]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_grouping_grouper[uint8]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[decimal128(7, 3)-mean-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[decimal128(7, 3)-median-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[decimal128(7, 3)-prod-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[decimal128(7, 3)-sum-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[double-skew-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[float-skew-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[int16-skew-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[int32-skew-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[int64-skew-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[int8-skew-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[uint16-skew-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[uint32-skew-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[uint64-skew-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_frame[uint8-skew-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_boolean[timestamp[ms]-any-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_boolean[timestamp[ns]-any-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_boolean[timestamp[s]-any-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_boolean[timestamp[us]-any-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[decimal128(7, 3)-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[double-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[double-kurt-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[float-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[float-kurt-True]": "Failed: DID NOT RAISE ", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int16-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int16-kurt-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int32-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int32-kurt-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int64-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int64-kurt-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int8-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int8-kurt-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint16-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint16-kurt-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint32-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint32-kurt-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint64-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint64-kurt-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint8-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint8-kurt-True]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestArrowArray::test_setitem_with_expansion_row[string]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='data') are different", + "tests/extension/test_arrow.py::TestArrowArray::test_unstack[decimal128(7, 3)-frame-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_arrow.py::TestArrowArray::test_unstack[decimal128(7, 3)-frame-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_arrow.py::TestArrowArray::test_unstack[decimal128(7, 3)-frame-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='('A', 'A')') are different", + "tests/extension/test_arrow.py::TestArrowArray::test_unstack[decimal128(7, 3)-series-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_arrow.py::TestArrowArray::test_unstack[decimal128(7, 3)-series-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_arrow.py::TestArrowArray::test_unstack[decimal128(7, 3)-series-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='A') are different", + "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_and": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_and_scalar[False-expected3]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_and_scalar[None-expected0]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_and_scalar[other1-expected1]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_or": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_or_scalar[None-expected0]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_or_scalar[True-expected2]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::TestLogicalOps::test_kleene_or_scalar[other1-expected1]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_arrow_floordiv_floating_0_divisor[float[pyarrow]]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::test_arrow_floordiv_integral_invalid[pa_type0]": "Failed: DID NOT RAISE ", + "tests/extension/test_arrow.py::test_arrow_floordiv_integral_invalid[pa_type1]": "Failed: DID NOT RAISE ", + "tests/extension/test_arrow.py::test_arrow_floordiv_integral_invalid[pa_type2]": "Failed: DID NOT RAISE ", + "tests/extension/test_arrow.py::test_arrow_floordiv_integral_invalid[pa_type3]": "Failed: DID NOT RAISE ", + "tests/extension/test_arrow.py::test_arrow_floordiv_large_integral_result[uint64[pyarrow]]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::test_arrow_floordiv_larger_divisor[pa_type0]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::test_arrow_floordiv_larger_divisor[pa_type1]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::test_arrow_floordiv_larger_divisor[pa_type2]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::test_arrow_string_addition_mixed_string_types": "AssertionError: ColumnBase are different", + "tests/extension/test_arrow.py::test_astype_errors_ignore": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_boolean_reduce_series_all_null[any-False]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_comparison_not_propagating_arrow_error": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_decimal_parse_raises": "Failed: DID NOT RAISE ", + "tests/extension/test_arrow.py::test_dt_tz_localize_nonexistent[shift_backward-exp_date1]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_from_arrow_respecting_given_dtype": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_interpolate_linear[float64[pyarrow]]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::test_interpolate_linear[int64[pyarrow]]": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::test_interpolate_not_numeric[bool]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_mul_numpy_nullable_with_pyarrow_float": "AssertionError: Attributes of Series are different", + "tests/extension/test_arrow.py::test_ops_with_nan_is_na[False]": "assert not np.True_", + "tests/extension/test_arrow.py::test_pickle_roundtrip[string]": "https://github.com/rapidsai/cudf/issues/18659#issuecomment-3710985854", + "tests/extension/test_arrow.py::test_pow_missing_operand": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_round": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_setitem_float_nan_is_na[False]": "Failed: DID NOT RAISE ", + "tests/extension/test_arrow.py::test_str_extract_non_symbolic": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_str_repeat_unsupported": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_str_replace_unsupported[pat-b]": "TODO: Add a reason for failure", + "tests/extension/test_arrow.py::test_timestamp_vs_dt64_comparison": "AssertionError: Attributes of Series are different", + "tests/extension/test_categorical.py::Test2DCompat::test_copy_order": "TODO: Add a reason for failure", + "tests/extension/test_categorical.py::TestCategorical::test_astype_own_type[False]": "TODO: Add a reason for failure", + "tests/extension/test_categorical.py::TestCategorical::test_construct_empty_dataframe": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/extension/test_categorical.py::TestCategorical::test_grouping_grouper": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_categorical.py::TestCategorical::test_is_extension_array_dtype": "TODO: Add a reason for failure", + "tests/extension/test_categorical.py::TestCategorical::test_memory_usage": "AssertionError", + "tests/extension/test_categorical.py::TestCategorical::test_searchsorted[True]": "TODO: Add a reason for failure", + "tests/extension/test_categorical.py::TestCategorical::test_series_constructor_no_data_with_index": "AssertionError: Attributes of Series are different", + "tests/extension/test_categorical.py::TestCategorical::test_to_numpy": "TODO: Add a reason for failure", + "tests/extension/test_categorical.py::TestCategorical::test_unstack[frame-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_categorical.py::TestCategorical::test_unstack[frame-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_categorical.py::TestCategorical::test_unstack[frame-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='('A', 'A')') are different", + "tests/extension/test_categorical.py::TestCategorical::test_unstack[series-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_categorical.py::TestCategorical::test_unstack[series-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_categorical.py::TestCategorical::test_unstack[series-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='A') are different", + "tests/extension/test_common.py::test_ellipsis_index": "TODO: Add a reason for failure", + "tests/extension/test_common.py::test_is_extension_array_dtype[dtype0]": "TODO: Add a reason for failure", + "tests/extension/test_common.py::test_is_extension_array_dtype[dtype1]": "TODO: Add a reason for failure", + "tests/extension/test_datetime.py::TestDatetimeArray::test_EA_types[c]": "AttributeError: '_MethodProxy' object has no attribute '__func__'. Did you mean: '__doc__'?", + "tests/extension/test_datetime.py::TestDatetimeArray::test_EA_types[python]": "AttributeError: '_MethodProxy' object has no attribute '__func__'. Did you mean: '__doc__'?", + "tests/extension/test_datetime.py::TestDatetimeArray::test_astype_own_type[False]": "AssertionError", + "tests/extension/test_datetime.py::TestDatetimeArray::test_astype_str": "AssertionError: Series are different", + "tests/extension/test_datetime.py::TestDatetimeArray::test_astype_string[string[pyarrow]]": "AssertionError: Series are different", + "tests/extension/test_datetime.py::TestDatetimeArray::test_astype_string[string[python]]": "AssertionError: Series are different", + "tests/extension/test_datetime.py::TestDatetimeArray::test_groupby_agg_extension": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/extension/test_datetime.py::TestDatetimeArray::test_grouping_grouper": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_datetime.py::TestDatetimeArray::test_is_extension_array_dtype": "AssertionError", + "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_frame[mean-False]": "AssertionError: Attributes of ExtensionArray are different", + "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_frame[mean-True]": "AssertionError: Attributes of ExtensionArray are different", + "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_frame[median-False]": "AssertionError: Attributes of ExtensionArray are different", + "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_frame[median-True]": "AssertionError: Attributes of ExtensionArray are different", + "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_series_numeric[mean-False]": "AssertionError: 2000-01-05 18:00:00 != 2000-01-05 12:00:00-06:00", + "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_series_numeric[mean-True]": "AssertionError: 2000-01-05 18:00:00 != 2000-01-05 12:00:00-06:00", + "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_series_numeric[median-False]": "AssertionError: 2000-01-05 18:00:00 != 2000-01-05 12:00:00-06:00", + "tests/extension/test_datetime.py::TestDatetimeArray::test_reduce_series_numeric[median-True]": "AssertionError: 2000-01-05 18:00:00 != 2000-01-05 12:00:00-06:00", + "tests/extension/test_datetime.py::TestDatetimeArray::test_series_constructor": "AssertionError", + "tests/extension/test_interval.py::TestIntervalArray::test_EA_types[c]": "TODO: Add a reason for failure", + "tests/extension/test_interval.py::TestIntervalArray::test_EA_types[python]": "TODO: Add a reason for failure", + "tests/extension/test_interval.py::TestIntervalArray::test_astype_own_type[False]": "TODO: Add a reason for failure", + "tests/extension/test_interval.py::TestIntervalArray::test_compare_array[eq]": "TODO: Add a reason for failure", + "tests/extension/test_interval.py::TestIntervalArray::test_compare_array[ne]": "TODO: Add a reason for failure", + "tests/extension/test_interval.py::TestIntervalArray::test_grouping_grouper": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_interval.py::TestIntervalArray::test_in_numeric_groupby": "TODO: Add a reason for failure", + "tests/extension/test_interval.py::TestIntervalArray::test_is_extension_array_dtype": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt16Dtype-cumprod-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt16Dtype-cumprod-True]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt16Dtype-cumsum-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt16Dtype-cumsum-True]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt32Dtype-cumprod-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt32Dtype-cumprod-True]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt32Dtype-cumsum-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt32Dtype-cumsum-True]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt64Dtype-cumprod-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt64Dtype-cumprod-True]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt64Dtype-cumsum-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt64Dtype-cumsum-True]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt8Dtype-cumprod-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt8Dtype-cumprod-True]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt8Dtype-cumsum-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_accumulate_series[UInt8Dtype-cumsum-True]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_frame_with_scalar[Float32Dtype-__floordiv__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_frame_with_scalar[Float64Dtype-__floordiv__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__floordiv__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__pow__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__rfloordiv__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__rpow__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__rsub__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[BooleanDtype-__sub__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Float32Dtype-__floordiv__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Float64Dtype-__floordiv__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Int16Dtype-__rpow__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Int32Dtype-__rpow__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Int64Dtype-__rpow__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[Int8Dtype-__rpow__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[UInt16Dtype-__rpow__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[UInt32Dtype-__rpow__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[UInt64Dtype-__rpow__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_array[UInt8Dtype-__rpow__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_scalar[Float32Dtype-__floordiv__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_arith_series_with_scalar[Float64Dtype-__floordiv__]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[BooleanDtype-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Float32Dtype-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Float64Dtype-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Int16Dtype-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Int32Dtype-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Int64Dtype-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[Int8Dtype-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[UInt16Dtype-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[UInt32Dtype-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[UInt64Dtype-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_own_type[UInt8Dtype-False]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_str[Float32Dtype]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_string[Float32Dtype-string[pyarrow]]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_string[Float32Dtype-string[python]]": "TODO: Add a reason for failure", + "tests/extension/test_masked.py::TestMaskedArrays::test_grouping_grouper[BooleanDtype]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_masked.py::TestMaskedArrays::test_grouping_grouper[Float32Dtype]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_masked.py::TestMaskedArrays::test_grouping_grouper[Float64Dtype]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_masked.py::TestMaskedArrays::test_grouping_grouper[Int16Dtype]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_masked.py::TestMaskedArrays::test_grouping_grouper[Int32Dtype]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_masked.py::TestMaskedArrays::test_grouping_grouper[Int64Dtype]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_masked.py::TestMaskedArrays::test_grouping_grouper[Int8Dtype]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_masked.py::TestMaskedArrays::test_grouping_grouper[UInt16Dtype]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_masked.py::TestMaskedArrays::test_grouping_grouper[UInt32Dtype]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_masked.py::TestMaskedArrays::test_grouping_grouper[UInt64Dtype]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_masked.py::TestMaskedArrays::test_grouping_grouper[UInt8Dtype]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[BooleanDtype]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Float32Dtype]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Float64Dtype]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Int16Dtype]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Int32Dtype]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Int64Dtype]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Int8Dtype]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[UInt16Dtype]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[UInt32Dtype]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[UInt64Dtype]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[UInt8Dtype]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[BooleanDtype-0-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[BooleanDtype-0-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[BooleanDtype-1-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[BooleanDtype-1-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int16Dtype-0-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int16Dtype-0-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int16Dtype-1-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int16Dtype-1-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int32Dtype-0-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int32Dtype-0-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int32Dtype-1-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int32Dtype-1-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int8Dtype-0-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int8Dtype-0-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int8Dtype-1-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[Int8Dtype-1-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt16Dtype-0-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt16Dtype-0-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt16Dtype-1-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt16Dtype-1-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt32Dtype-0-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt32Dtype-0-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt32Dtype-1-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt32Dtype-1-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt8Dtype-0-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt8Dtype-0-sum]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt8Dtype-1-prod]": "AssertionError", + "tests/extension/test_masked.py::TestMaskedArrays::test_reductions_2d_axis0[UInt8Dtype-1-sum]": "AssertionError", + "tests/extension/test_numpy.py::Test2DCompat::test_copy_order[float]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cummax-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cummax-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cummin-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cummin-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cumprod-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cumprod-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cumsum-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[float-cumsum-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cummax-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cummax-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cummin-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cummin-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cumsum-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_accumulate_series[object-cumsum-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-argmax-False--1]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-argmax-True-0]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-argmin-False--1]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-argmin-True-2]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-idxmax-False--1]": "TypeError: '>' not supported between instances of 'float' and 'tuple'", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-idxmax-True-0]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-idxmin-False--1]": "TypeError: '<' not supported between instances of 'float' and 'tuple'", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_argreduce_series[object-idxmin-True-2]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__add__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__floordiv__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__mod__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__pow__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__radd__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__rfloordiv__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__rmod__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__rpow__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__rsub__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__rtruediv__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__sub__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_arith_series_with_scalar[object-__truediv__]": "ValueError: ((10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_array_interface[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_array_type[float]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_array_type[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_astype_object_frame[object-data]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_astype_object_frame[object-data_missing]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_astype_own_type[float-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_astype_own_type[object-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_concat[float-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_concat[float-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_concat[object-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_concat[object-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_concat_columns[object]": "AssertionError: DataFrame.iloc[:, 0] (column name='A') are different", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_concat_extension_arrays_copy_false[object]": "AssertionError: DataFrame.iloc[:, 0] (column name='A') are different", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_concat_with_reindex[object]": "AssertionError: DataFrame.iloc[:, 0] (column name='a') are different", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_container_shift[object--2-indices0-False]": "AssertionError: Series are different", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_container_shift[object--2-indices0-True]": "AssertionError: DataFrame.iloc[:, 0] (column name='A') are different", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_container_shift[object-2-indices2-False]": "AssertionError: Series are different", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_container_shift[object-2-indices2-True]": "AssertionError: DataFrame.iloc[:, 0] (column name='A') are different", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_contains[object-False]": "ValueError: ('Lengths must match to compare', (10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_contains[object-True]": "ValueError: ('Lengths must match to compare', (10,), (1,))", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_constructor_from_dict[float-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_constructor_from_dict[float-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_constructor_from_dict[object-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_constructor_from_dict[object-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_from_series[float]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_dataframe_from_series[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_boolean_array_mask[float]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_boolean_array_mask[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_mask[float]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_mask[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_groupby_agg_extension[object]": "AssertionError: DataFrame.iloc[:, 0] (column name='B') are different", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_groupby_extension_agg[float-False]": "TypeError: Only np.ndarray, ExtensionArray, and Index objects are allowed to be passed to safe_sort as values", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_groupby_extension_agg[float-True]": "TypeError: Only np.ndarray, ExtensionArray, and Index objects are allowed to be passed to safe_sort as values", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_groupby_extension_agg[object-False]": "TypeError: Only np.ndarray, ExtensionArray, and Index objects are allowed to be passed to safe_sort as values", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_groupby_extension_agg[object-True]": "TypeError: Only np.ndarray, ExtensionArray, and Index objects are allowed to be passed to safe_sort as values", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_groupby_extension_transform[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_grouping_grouper[float]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_grouping_grouper[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_hash_pandas_object[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_hash_pandas_object_works[object-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_hash_pandas_object_works[object-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_index_from_array[float]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_index_from_array[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_is_extension_array_dtype[float]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_merge[object]": "AssertionError: DataFrame.iloc[:, 0] (column name='ext') are different", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_pandas_array_dtype[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[float-all-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[float-all-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[float-any-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[float-any-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[object-all-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[object-all-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[object-any-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_boolean[object-any-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-count-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-count-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-kurt-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-kurt-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-max-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-max-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-mean-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-mean-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-median-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-median-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-min-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-min-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-prod-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-prod-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-sem-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-sem-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-skew-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-skew-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-std-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-std-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-sum-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-sum-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-var-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[float-var-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-max-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-max-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-min-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-min-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-sum-False]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reduce_series_numeric[object-sum-True]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_reindex[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_series_constructor_no_data_with_index[object]": "AssertionError: Series are different", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_series_repr[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_set_frame_overwrite_object[float]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_set_frame_overwrite_object[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_2d_values[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_stack[object-False-columns0]": "AssertionError", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_stack[object-True-columns0]": "AssertionError", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_take_series[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_to_numpy[object]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[float-absolute]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[float-negative]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[float-positive]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[object-absolute]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[object-negative]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unary_ufunc_dunder_equivalence[object-positive]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[float--Series]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[float-unique-Series]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[object--]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[object--Series]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[object-unique-]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_unique[object-unique-Series]": "TODO: Add a reason for failure", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_value_counts_with_normalize[object]": "TODO: Add a reason for failure", + "tests/extension/test_period.py::Test2DCompat::test_copy_order[2D]": "TODO: Add a reason for failure", + "tests/extension/test_period.py::Test2DCompat::test_copy_order[D]": "TODO: Add a reason for failure", + "tests/extension/test_period.py::TestPeriodArray::test_astype_own_type[2D-False]": "TODO: Add a reason for failure", + "tests/extension/test_period.py::TestPeriodArray::test_astype_own_type[D-False]": "TODO: Add a reason for failure", + "tests/extension/test_period.py::TestPeriodArray::test_is_extension_array_dtype[2D]": "TODO: Add a reason for failure", + "tests/extension/test_period.py::TestPeriodArray::test_is_extension_array_dtype[D]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_EA_types[0-c]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_EA_types[0-python]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_EA_types[nan-c]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_EA_types[nan-python]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_astype_own_type[0-False]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_astype_own_type[nan-False]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_fillna_copy_frame[0]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_fillna_copy_frame[nan]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_fillna_copy_series[0]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_fillna_copy_series[nan]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_is_extension_array_dtype[0]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_is_extension_array_dtype[nan]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_shift_0_periods[0]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_shift_0_periods[nan]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[0-absolute]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[0-negative]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[0-positive]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[nan-absolute]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[nan-negative]": "TODO: Add a reason for failure", + "tests/extension/test_sparse.py::TestSparseArray::test_unary_ufunc_dunder_equivalence[nan-positive]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=str[python]-False-__add__]": "AssertionError: Attributes of Series are different", + "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=str[python]-True-__add__]": "AssertionError: Attributes of Series are different", + "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=string[pyarrow]-False-__radd__]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=string[pyarrow]-True-__radd__]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=string[python]-False-__radd__]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_arith_series_with_array[string=string[python]-True-__radd__]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_astype_object_frame[string=str[pyarrow]-data_missing-False]": "AssertionError", + "tests/extension/test_string.py::TestStringArray::test_astype_object_frame[string=str[pyarrow]-data_missing-True]": "AssertionError", + "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=str[pyarrow]-False-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=str[pyarrow]-True-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=str[python]-False-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=str[python]-True-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=string[pyarrow]-False-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=string[pyarrow]-True-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=string[python]-False-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_astype_own_type[string=string[python]-True-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[string=str[pyarrow]-False]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[string=str[pyarrow]-True]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[string=str[python]-False]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[string=str[python]-True]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[string=string[pyarrow]-False]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[string=string[pyarrow]-True]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[string=string[python]-False]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_string.py::TestStringArray::test_grouping_grouper[string=string[python]-True]": "AssertionError: ndarray Expected type , found instead", + "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=str[pyarrow]-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=str[pyarrow]-True]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=str[python]-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=str[python]-True]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=string[pyarrow]-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=string[pyarrow]-True]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=string[python]-False]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_is_extension_array_dtype[string=string[python]-True]": "TODO: Add a reason for failure", + "tests/extension/test_string.py::TestStringArray::test_setitem_with_expansion_row[string=str[python]-False]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='data') are different", + "tests/extension/test_string.py::TestStringArray::test_setitem_with_expansion_row[string=str[python]-True]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='data') are different", + "tests/extension/test_string.py::TestStringArray::test_setitem_with_expansion_row[string=string[python]-False]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='data') are different", + "tests/extension/test_string.py::TestStringArray::test_setitem_with_expansion_row[string=string[python]-True]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='data') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-False-frame-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-False-frame-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-False-frame-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='('A', 'A')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-False-series-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-False-series-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-False-series-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='A') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-True-frame-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-True-frame-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-True-frame-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='('A', 'A')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-True-series-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-True-series-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[pyarrow]-True-series-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='A') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-False-frame-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-False-frame-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-False-frame-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='('A', 'A')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-False-series-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-False-series-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-False-series-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='A') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-True-frame-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-True-frame-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='('A', 'B')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-True-frame-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='('A', 'A')') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-True-series-index1]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-True-series-index2]": "AssertionError: DataFrame.iloc[:, 1] (column name='B') are different", + "tests/extension/test_string.py::TestStringArray::test_unstack[string=str[python]-True-series-index3]": "AssertionError: DataFrame.iloc[:, 0] (column name='A') are different", + "tests/extension/test_string.py::TestStringArray::test_value_counts_with_normalize[string=string[pyarrow]-False]": "AssertionError: ColumnBase are different", + "tests/extension/test_string.py::TestStringArray::test_value_counts_with_normalize[string=string[pyarrow]-True]": "AssertionError: ColumnBase are different", + "tests/extension/test_string.py::TestStringArray::test_value_counts_with_normalize[string=string[python]-False]": "AssertionError: ColumnBase are different", + "tests/extension/test_string.py::TestStringArray::test_value_counts_with_normalize[string=string[python]-True]": "AssertionError: ColumnBase are different", + "tests/frame/constructors/test_from_records.py::TestFromRecords::test_from_records_empty": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/frame/constructors/test_from_records.py::TestFromRecords::test_from_records_empty_iterator_with_preserve_columns": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/frame/constructors/test_from_records.py::TestFromRecords::test_from_records_misc_brokenness": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/frame/indexing/test_getitem.py::TestGetitemCallable::test_loc_multiindex_columns_one_level": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_fancy_getitem_slice_mixed": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_getitem_setitem_boolean_misaligned": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_getitem_setitem_float_labels": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_iloc_col_slice_view": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_iloc_row_slice_view": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_loc_bool_multiindex[True-bool-indexer1]": "AssertionError: Did not see expected warning of class 'PerformanceWarning'", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_loc_bool_multiindex[True-boolean-indexer1]": "AssertionError: Did not see expected warning of class 'PerformanceWarning'", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_loc_internals_not_updated_correctly": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_loc_setitem_reordering_with_all_true_indexer[col0-False]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_loc_setitem_reordering_with_all_true_indexer[col0-True]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_set_2d_casting_date_to_int[col0-indexer0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_set_2d_casting_date_to_int[col1-indexer0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setitem_boolean": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int16-null0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int16-null1]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int16-null2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int32-null0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int32-null1]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int32-null2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int64-null0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int64-null1]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int64-null2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int8-null0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int8-null1]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[Int8-null2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt16-null0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt16-null1]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt16-null2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt32-null0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt32-null1]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt32-null2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt64-null0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt64-null1]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt64-null2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt8-null0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt8-null1]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_setting_mismatched_na_into_nullable_fails[UInt8-null2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key1]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key3]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key4]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key5]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key3]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key4]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key5]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key0]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key1]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key3]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key4]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key5]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestLocILocDataFrameCategorical::test_loc_on_multiindex_one_level": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-0-invalid5]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-0-invalid6]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer1-invalid5]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer1-invalid6]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer2-invalid5]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer2-invalid6]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer3-invalid5]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer3-invalid6]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer4-invalid5]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer4-invalid6]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-0-invalid5]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-0-invalid6]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer1-invalid5]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer1-invalid6]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer2-invalid5]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer2-invalid6]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer3-invalid5]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer3-invalid6]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer4-invalid5]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer4-invalid6]": "Failed: DID NOT RAISE ", + "tests/frame/indexing/test_indexing.py::test_adding_new_conditional_column_with_string[object-False]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_indexing.py::test_object_casting_indexing_wraps_datetimelike": "TODO: Add a reason for failure", + "tests/frame/indexing/test_insert.py::TestDataFrameInsert::test_insert": "TODO: Add a reason for failure", + "tests/frame/indexing/test_insert.py::TestDataFrameInsert::test_insert_delete_mixed_multiindex_columns": "AssertionError: DataFrame.columns level [1] are different", + "tests/frame/indexing/test_mask.py::TestDataFrameMask::test_mask_inplace": "assert None is 0 1 2\n0 0.189053382 NaN NaN\n1 NaN 1....", + "tests/frame/indexing/test_setitem.py::TestDataFrameSetItem::test_setitem_dt64tz": "AssertionError: assert 123202424024944 == 123202424025136", + "tests/frame/indexing/test_setitem.py::TestDataFrameSetItem::test_setitem_frame_length_0_str_key[B]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='A') are different", + "tests/frame/indexing/test_setitem.py::TestDataFrameSetItem::test_setitem_frame_length_0_str_key[indexer1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='A') are different", + "tests/frame/indexing/test_setitem.py::TestDataFrameSetItem::test_setitem_list_missing_columns[columns3-box3-expected3]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_setitem.py::TestDataFrameSetItemWithExpansion::test_setitem_listlike_views": "TODO: Add a reason for failure", + "tests/frame/indexing/test_setitem.py::TestDataFrameSetItemWithExpansion::test_setitem_newcol_tuple_key": "AssertionError: assert ('A', 'B') in Index(['A', 'B', 'C', 'D', '('A', 'B')'], dtype='str')", + "tests/frame/indexing/test_setitem.py::TestDataFrameSetitemCopyViewSemantics::test_iloc_setitem_view_2dblock": "TODO: Add a reason for failure", + "tests/frame/indexing/test_setitem.py::TestDataFrameSetitemCopyViewSemantics::test_setitem_listlike_key_scalar_value_not_inplace[value2]": 'AssertionError: Column name="B" are different', + "tests/frame/indexing/test_setitem.py::TestDataFrameSetitemCopyViewSemantics::test_setitem_partial_column_inplace[False]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_setitem.py::TestDataFrameSetitemCopyViewSemantics::test_setitem_same_dtype_not_inplace[value2]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_align": "assert 0 1 2\n0 0.189053 -0.522748 -0.413064\n1 -2.441467 1.799707 1.144166\n2 -0.325423...", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_axis": "assert 0 1\n0 0.0 0.0\n1 1.0 1.0 is 0 1\n0 0.0 0.0\n1 1.0 1.0", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_axis_multiple_dtypes": "assert 0 1 2 3\n0 1.0 1.0 1 1\n1 1.0 1.0 1 1\n2 1.0 1.0 1 1\n3 1.0 1.0 1 1\n4 1.0 1.0 1 ...", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_bug": "assert None is a b\n0 NaN 4.0\n1 NaN 3.0\n2 3.0 NaN\n3 4.0 NaN", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_bug_mixed[int16]": "assert None is a b\n0 -1 4.0\n1 -1 3.0\n2 3 -1.0\n3 4 -1.0", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_bug_mixed[int32]": "assert None is a b\n0 -1 4.0\n1 -1 3.0\n2 3 -1.0\n3 4 -1.0", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_bug_mixed[int64]": "assert None is a b\n0 -1 4.0\n1 -1 3.0\n2 3 -1.0\n3 4 -1.0", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_bug_mixed[int8]": "assert None is a b\n0 -1 4.0\n1 -1 3.0\n2 3 -1.0\n3 4 -1.0", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_bug_mixed[int]": "assert None is a b\n0 -1 4.0\n1 -1 3.0\n2 3 -1.0\n3 4 -1.0", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_bug_transposition": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_dataframe_col_match": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_empty_df_and_empty_cond_having_non_bool_dtypes": "assert np.False_", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_ndframe_align": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_set[default]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_set[mixed_float]": "assert A B C D\nfoo_0 0.837575 0.837575 0.837402 0.261612\nfoo_1 0.2616...", + "tests/frame/indexing/test_where.py::TestDataFrameIndexingWhere::test_where_set[mixed_int]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_inplace_no_other": "assert None is a b\n0 1.0 NaN\n1 NaN y", + "tests/frame/indexing/test_where.py::test_where_int_downcasting_deprecated": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Float32]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Float64]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Int16]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Int32]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Int64]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-Int8]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-UInt16]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-UInt32]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-UInt64]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[DataFrame-UInt8]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Float32]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Float64]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Int16]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Int32]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Int64]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-Int8]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-UInt16]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-UInt32]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-UInt64]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_where.py::test_where_nullable_invalid_na[Series-UInt8]": "TODO: Add a reason for failure", + "tests/frame/indexing/test_xs.py::TestXSWithMultiIndex::test_xs_droplevel_false_view": "TODO: Add a reason for failure", + "tests/frame/indexing/test_xs.py::TestXSWithMultiIndex::test_xs_integer_key": "TODO: Add a reason for failure", + "tests/frame/methods/test_asfreq.py::TestAsFreq::test_asfreq_with_date_object_index[DataFrame]": "AssertionError: DataFrame.index are different", + "tests/frame/methods/test_asfreq.py::TestAsFreq::test_asfreq_with_date_object_index[Series]": "AssertionError: Series.index are different", + "tests/frame/methods/test_astype.py::TestAstype::test_astype_arg_for_errors_dictlist": "TODO: Add a reason for failure", + "tests/frame/methods/test_astype.py::TestAstype::test_astype_dt64_to_string[DataFrame-'Asia/Tokyo']": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/frame/methods/test_astype.py::TestAstype::test_astype_dt64_to_string[DataFrame-'US/Eastern']": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/frame/methods/test_astype.py::TestAstype::test_astype_dt64_to_string[Series-'Asia/Tokyo']": "AssertionError: Series are different", + "tests/frame/methods/test_astype.py::TestAstype::test_astype_dt64_to_string[Series-'US/Eastern']": "AssertionError: Series are different", + "tests/frame/methods/test_astype.py::TestAstype::test_astype_dt64tz_to_str": "TODO: Add a reason for failure", + "tests/frame/methods/test_astype.py::TestAstype::test_astype_extension_dtypes_duplicate_col[False-Int64]": "Failed: DID NOT RAISE ", + "tests/frame/methods/test_astype.py::TestAstype::test_astype_str": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/frame/methods/test_astype.py::TestAstype::test_astype_str_float": "TODO: Add a reason for failure", + "tests/frame/methods/test_astype.py::TestAstype::test_astype_with_exclude_string": "TODO: Add a reason for failure", + "tests/frame/methods/test_clip.py::TestDataFrameClip::test_clip_against_list_like[0-res0-lower0-True]": "assert one two three\na 2.0 2.0 3.0\nb 4.0 5.0 6.0\nc 7.0 7.0 7.0 is one two three\na 2.0 ...", + "tests/frame/methods/test_clip.py::TestDataFrameClip::test_clip_against_list_like[0-res0-lower1-True]": "assert one two three\na 2.0 2.0 3.0\nb 4.0 5.0 6.0\nc 7.0 7.0 7.0 is one two three\na 2.0 ...", + "tests/frame/methods/test_clip.py::TestDataFrameClip::test_clip_against_list_like[1-res1-lower0-True]": "assert None is one two three\na 2.0 3.0 4.0\nb 4.0 5.0 6.0\nc 5.0 6.0 7.0", + "tests/frame/methods/test_clip.py::TestDataFrameClip::test_clip_against_list_like[1-res1-lower1-True]": "assert None is one two three\na 2.0 3.0 4.0\nb 4.0 5.0 6.0\nc 5.0 6.0 7.0", + "tests/frame/methods/test_clip.py::TestDataFrameClip::test_clip_against_series[True]": "assert 0 1\n0 0.189053 0.189053\n1 -0.413064 -0.522748\n2 0.586936 0.586936\n3 -1.441...", + "tests/frame/methods/test_clip.py::TestDataFrameClip::test_clip_int_data_with_float_bound": "TODO: Add a reason for failure", + "tests/frame/methods/test_clip.py::TestDataFrameClip::test_dataframe_clip": "TODO: Add a reason for failure", + "tests/frame/methods/test_clip.py::TestDataFrameClip::test_inplace_clip": "assert None is A B C D\nfoo_0 0.070575 0.070575 0.070575 0.070575\nfoo_1 ...", + "tests/frame/methods/test_combine_first.py::test_combine_first_timestamp_bug[Decimal-scalar11-scalar21]": "AssertionError: DataFrame.iloc[:, 0] (column name='a') are different", + "tests/frame/methods/test_copy.py::TestCopy::test_copy_consolidates": "TODO: Add a reason for failure", + "tests/frame/methods/test_count.py::TestDataFrameCount::test_count": "TODO: Add a reason for failure", + "tests/frame/methods/test_cov_corr.py::TestDataFrameCorr::test_corr_numeric_only[False-spearman]": "TODO: Add a reason for failure", + "tests/frame/methods/test_diff.py::TestDataFrameDiff::test_diff_all_int_dtype[int16]": "TODO: Add a reason for failure", + "tests/frame/methods/test_diff.py::TestDataFrameDiff::test_diff_all_int_dtype[int8]": "TODO: Add a reason for failure", + "tests/frame/methods/test_drop.py::TestDataFrameDrop::test_drop": "TODO: Add a reason for failure", + "tests/frame/methods/test_drop.py::TestDataFrameDrop::test_drop_multiindex_not_lexsorted[False]": "AssertionError: assert not True", + "tests/frame/methods/test_drop.py::TestDataFrameDrop::test_drop_multiindex_not_lexsorted[True]": "AssertionError: assert not True", + "tests/frame/methods/test_drop.py::TestDataFrameDrop::test_drop_raise_with_both_axis_and_index": "Failed: DID NOT RAISE ", + "tests/frame/methods/test_dropna.py::TestDataFrameMissingData::test_drop_and_dropna_caching": "TODO: Add a reason for failure", + "tests/frame/methods/test_dropna.py::TestDataFrameMissingData::test_dropna": "TODO: Add a reason for failure", + "tests/frame/methods/test_dropna.py::TestDataFrameMissingData::test_dropna_multiple_axes": "TODO: Add a reason for failure", + "tests/frame/methods/test_dropna.py::TestDataFrameMissingData::test_no_nans_in_frame[axis='index']": "TODO: Add a reason for failure", + "tests/frame/methods/test_dropna.py::TestDataFrameMissingData::test_no_nans_in_frame[axis=0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_dtypes.py::TestDataFrameDataTypes::test_empty_frame_dtypes": "AssertionError: Series are different", + "tests/frame/methods/test_dtypes.py::TestDataFrameDataTypes::test_frame_apply_np_array_return_type": "AssertionError: Attributes of Series are different", + "tests/frame/methods/test_explode.py::test_duplicate_index[input_dict0-input_index0-expected_dict0-expected_index0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_explode.py::test_duplicate_index[input_dict1-input_index1-expected_dict1-expected_index1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_explode.py::test_duplicate_index[input_dict2-input_index2-expected_dict2-expected_index2]": "TODO: Add a reason for failure", + "tests/frame/methods/test_explode.py::test_duplicate_index[input_dict3-input_index3-expected_dict3-expected_index3]": "TODO: Add a reason for failure", + "tests/frame/methods/test_explode.py::test_multi_columns_nan_empty": "TODO: Add a reason for failure", + "tests/frame/methods/test_fillna.py::TestFillNA::test_fillna_dict_series_axis_1": "assert a b c\n0 1.0 1.0 1.0\n1 1.0 2.0 1.0\n2 2.0 3.0 2.0\n3 3.0 3.0 3.0\n4 4.0 4.0 4.0 is ...", + "tests/frame/methods/test_fillna.py::TestFillNA::test_fillna_different_dtype": "assert 0 1 2 3\n0 a a foo a\n1 b b foo b\n2 c c foo c is 0 1 2 3\n0 a a foo a\n1 b ...", + "tests/frame/methods/test_fillna.py::TestFillNA::test_fillna_dtype_conversion": "TODO: Add a reason for failure", + "tests/frame/methods/test_fillna.py::TestFillNA::test_fillna_inplace": "assert None is 0 1 2 3\n0 0.189053 0.000000 -0.413064 0.0\n1 1.799707 0.000000 -0.3...", + "tests/frame/methods/test_fillna.py::TestFillNA::test_fillna_inplace_with_columns_limit_and_value": "assert A B C D\n0 100.0 2.0 NaN 0.0\n1 3.0 4.0 100.0 1.0\n2 100.0 NaN NaN 5.0\n3 ...", + "tests/frame/methods/test_fillna.py::TestFillNA::test_fillna_mixed_type": "assert np.False_", + "tests/frame/methods/test_fillna.py::TestFillNA::test_fillna_on_column_view": "TODO: Add a reason for failure", + "tests/frame/methods/test_fillna.py::TestFillNA::test_fillna_with_multi_index_frame": "AssertionError: Column name=\"('x', 'a')\" are different", + "tests/frame/methods/test_fillna.py::test_fillna_nones_inplace": "TODO: Add a reason for failure", + "tests/frame/methods/test_info.py::test_info_memory": "TODO: Add a reason for failure", + "tests/frame/methods/test_info.py::test_info_memory_usage_deep_not_pypy": "TODO: Add a reason for failure", + "tests/frame/methods/test_info.py::test_usage_via_getsizeof": "TODO: Add a reason for failure", + "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interp_basic": "TODO: Add a reason for failure", + "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interp_inplace_row": "TODO: Add a reason for failure", + "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interp_nan_idx": "TODO: Add a reason for failure", + "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interp_rowwise": "TODO: Add a reason for failure", + "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interp_time_inplace_axis": "assert 2014-01-01 2014-01-02 2014-01-03 2014-01-04 2014-01-05\n2014-01-01 NaN NaN ...", + "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interpolate_empty_df": "assert Empty DataFrame\nColumns: []\nIndex: [] is Empty DataFrame\nColumns: []\nIndex: []", + "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interpolate_inplace[DataFrame]": "TODO: Add a reason for failure", + "tests/frame/methods/test_interpolate.py::TestDataFrameInterpolate::test_interpolate_inplace[Series]": "TODO: Add a reason for failure", + "tests/frame/methods/test_join.py::TestDataFrameJoin::test_join": "TODO: Add a reason for failure", + "tests/frame/methods/test_map.py::test_map": "TODO: Add a reason for failure", + "tests/frame/methods/test_map.py::test_map_datetimelike[datetime-val0]": "AssertionError: assert '2013-01-01 00:00:00.000000' == '2013-01-01 00:00:00'", + "tests/frame/methods/test_map.py::test_map_empty[-expected0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_map.py::test_map_empty[-expected2]": "TODO: Add a reason for failure", + "tests/frame/methods/test_map.py::test_map_empty[round-expected0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_map.py::test_map_empty[round-expected2]": "TODO: Add a reason for failure", + "tests/frame/methods/test_map.py::test_map_function_runs_once": "TODO: Add a reason for failure", + "tests/frame/methods/test_map.py::test_map_na_ignore": "TODO: Add a reason for failure", + "tests/frame/methods/test_map.py::test_map_str": "TODO: Add a reason for failure", + "tests/frame/methods/test_matmul.py::TestMatMul::test_matmul": "TODO: Add a reason for failure", + "tests/frame/methods/test_pop.py::TestDataFramePop::test_pop": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_empty[linear-single]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_empty[nearest-table]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_box[linear-single]": "AttributeError: 'DataFrame' object has no attribute 'dtype'. Did you mean: 'dtypes'?", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_box[nearest-table]": "AssertionError: Attributes of DataFrame.iloc[:, 1] (column name='B') are different", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_box_nat": "AttributeError: 'DataFrame' object has no attribute 'dtype'. Did you mean: 'dtypes'?", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_date_range[linear-single]": "AttributeError: 'DataFrame' object has no attribute 'dtype'. Did you mean: 'dtypes'?", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_date_range[nearest-table]": "AssertionError: Attributes of Series are different", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_datetime[ms]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_datetime[ns]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_datetime[s]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_datetime[us]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_empty_no_columns[nearest-table]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_empty_no_rows_dt64[linear-single]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_multi_empty[linear-single]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_multi_empty[nearest-table]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_nat[linear-single-ms]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_nat[linear-single-ns]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_nat[linear-single-s]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestDataFrameQuantile::test_quantile_nat[linear-single-us]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_empty_datelike[datetime64[ns]-expected_data1-expected_index1-0-datetime64[ns]]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_all_na[Int64-DataFrame]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_all_na[Int64-Series]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_scalar[Float64-DataFrame]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_scalar[Int64-DataFrame]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_scalar[datetime64[us, US/Pacific]-DataFrame]": "AttributeError: 'DataFrame' object has no attribute 'dtype'. Did you mean: 'dtypes'?", + "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_scalar[timedelta64[us]-DataFrame]": "AttributeError: 'DataFrame' object has no attribute 'dtype'. Did you mean: 'dtypes'?", + "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_with_na[Int64-DataFrame]": "TODO: Add a reason for failure", + "tests/frame/methods/test_quantile.py::TestQuantileExtensionDtype::test_quantile_ea_with_na[Int64-Series]": "TODO: Add a reason for failure", + "tests/frame/methods/test_rank.py::TestRank::test_rank": "AssertionError: numpy array are different", + "tests/frame/methods/test_rank.py::TestRank::test_rank_string_dtype[string[pyarrow]-Int64]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_axis_style_raises": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx4-CategoricalIndex]": "AssertionError: DataFrame are different", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx4-Index]": "AssertionError: DataFrame are different", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx5-CategoricalIndex]": "AssertionError: DataFrame are different", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty[cat_idx5-Index]": "AssertionError: DataFrame are different", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty_frame[kwargs0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty_frame[kwargs1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty_frame[kwargs2]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_empty_frame[kwargs3]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_fill_value": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_index_name_matches_multiindex_level": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='value') are different", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_int": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_positional_raises": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Float32]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Float64]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Int16]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Int32]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Int64]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[Int8]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[UInt16]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[UInt32]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[UInt64]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_single_column_ea_index_and_columns[UInt8]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_uint_dtypes_fill_value[uint16]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_uint_dtypes_fill_value[uint32]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_uint_dtypes_fill_value[uint64]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_uint_dtypes_fill_value[uint8]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_with_multi_index": "TODO: Add a reason for failure", + "tests/frame/methods/test_reindex.py::TestDataFrameSelectReindex::test_reindex_without_upcasting": "AssertionError: assert np.False_", + "tests/frame/methods/test_reindex.py::TestReindexSetIndex::test_dti_set_index_reindex_freq_with_tz": "AssertionError: assert None == ", + "tests/frame/methods/test_reindex.py::TestReindexSetIndex::test_setitem_reset_index_dtypes": "TODO: Add a reason for failure", + "tests/frame/methods/test_rename.py::TestRename::test_rename": "TODO: Add a reason for failure", + "tests/frame/methods/test_rename.py::TestRename::test_rename_axis_style_raises": "TODO: Add a reason for failure", + "tests/frame/methods/test_rename.py::TestRename::test_rename_inplace": "TODO: Add a reason for failure", + "tests/frame/methods/test_rename.py::TestRename::test_rename_mapper_and_positional_arguments_raises": "TODO: Add a reason for failure", + "tests/frame/methods/test_rename.py::TestRename::test_rename_no_mappings_raises": "TODO: Add a reason for failure", + "tests/frame/methods/test_rename.py::TestRename::test_rename_nocopy": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_categorical_replace_with_dict[replace_dict0-final_data0]": "assert a b\n0 2 2\n1 2 2 is a b\n0 2 2\n1 2 2", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_categorical_replace_with_dict[replace_dict1-final_data1]": "assert a b\n0 2 1\n1 2 2 is a b\n0 2 1\n1 2 2", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_dict_mixed": "assert a b c\n0 0 a a\n1 1 b b\n2 2 NaN NaN\n3 3 NaN d is a b c\n0 0 a ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_dict_nested": "assert a b c\n0 0 a a\n1 1 b b\n2 2 NaN NaN\n3 3 NaN d is a b c\n0 0 a ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_list_mixed_inplace": "assert a b\n0 0 crap\n1 1 b\n2 2 NaN\n3 3 NaN is a b\n0 0 crap\n1 1 b\n2 2 NaN\n...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_list_obj[False-True-to_replace0-values0-expected0]": "assert a b c\n0 a crap h\n1 b crap crap\n2 NaN crap l\n3 NaN h o is a ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_list_obj[False-True-to_replace1-values1-expected1]": "assert a b c\n0 a e_crap h\n1 b f_crap e_crap\n2 .. g_crap l\n3 .. h ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_list_obj[False-True-to_replace2-values2-expected2]": "assert a b c\n0 a crap h\n1 b f crap\n2 .. g l\n3 .. h o is a b ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_list_obj[True-True-to_replace0-values0-expected0]": "assert a b c\n0 a crap h\n1 b crap crap\n2 NaN crap l\n3 NaN h o is a ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_list_obj[True-True-to_replace1-values1-expected1]": "assert a b c\n0 a e_crap h\n1 b f_crap e_crap\n2 .. g_crap l\n3 .. h ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_list_obj[True-True-to_replace2-values2-expected2]": "assert a b c\n0 a crap h\n1 b f crap\n2 .. g l\n3 .. h o is a b ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_list_to_scalar": "assert a b c\n0 0 NaN NaN\n1 1 NaN NaN\n2 2 NaN NaN\n3 3 NaN d is a b c\n0 0 NaN N...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_regex_list_to_numeric": "assert a b c\n0 0 a a\n1 1 0 0\n2 2 0 NaN\n3 3 0 d is a b c\n0 0 a a\n1 1 0 ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_series_of_regexes": "assert a b c\n0 0 a a\n1 1 b b\n2 2 NaN NaN\n3 3 NaN d is a b c\n0 0 a ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_str_to_numeric": "assert a b c\n0 0 a a\n1 1 b b\n2 2 0 NaN\n3 3 0 d is a b c\n0 0 a a\n1 1 b ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_regex_replace_string_types[DataFrame-string=object-data1-to_replace1-expected1]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_NAT_with_None": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_NA_with_None": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_inplace": "assert A B C D\n2000-01-03 0.0 -0.522748 -0.413064 -2.441467\n2000-01-04 0.0 ...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_input_formats_listlike": "assert A B C\n0 -2.0 0 \n1 0.0 2 asdf\n2 -2.0 5 fd is A B C\n0 -2.0 0 \n1 0.0...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_input_formats_scalar": "assert A B C\n0 -1.0 0 \n1 0.0 2 asdf\n2 inf 5 fd is A B C\n0 -1.0 0 \n1 0.0...", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_list_with_mixed_type[DataFrame-array-data0-to_replace0-value0-expected0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_list_with_mixed_type[DataFrame-tuple-data0-to_replace0-value0-expected0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_list_with_mixed_type[Series-array-data0-to_replace0-value0-expected0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_list_with_mixed_type[Series-tuple-data0-to_replace0-value0-expected0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_mixed": "AssertionError: DataFrame.iloc[:, 4] (column name='foo') are different", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_mixed_int_block_splitting": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_mixed_int_block_upcasting": "assert None is A B\n0 1.0 0.5\n1 2.0 1.0", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_na_to_nan_nullable_floats[False-Float64]": "TypeError: boolean value of NA is ambiguous", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_na_to_nan_nullable_floats[False-float64[pyarrow]]": "TypeError: boolean value of NA is ambiguous", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_nan_nullable_ints[False-Int64]": "AssertionError: Series NA mask are different", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_nan_nullable_ints[False-int64[pyarrow]]": "AssertionError: Series NA mask are different", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_no_replacement_dtypes[nan-int64]": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_no_replacement_dtypes[value1-int64]": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_value_is_none": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_value_none_dtype_numeric[2.0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_value_none_dtype_numeric[2]": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplace::test_replace_value_none_dtype_numeric[nan]": "TODO: Add a reason for failure", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-False-\\\\s*(\\\\.)\\\\s*-\\\\1\\\\1\\\\1-data0]": "assert a b\\n0 a e\\n1 b f\\n2 ... g\\n3 ... h is a b\\n0 a e\\n1 b f\\n2 ... g\\n3 ... h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-False-\\\\s*(\\\\.)\\\\s*-\\\\1\\\\1\\\\1-data1]": "assert a b\\n0 a 0\\n1 b 1\\n2 ... 2\\n3 ... 3 is a b\\n0 a 0\\n1 b 1\\n2 ... 2\\n3 ... 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-False-\\\\s*\\\\.\\\\s*-nan-data0]": "assert a b\\n0 a e\\n1 b f\\n2 NaN g\\n3 NaN h is a b\\n0 a e\\n1 b f\\n2 NaN g\\n3 NaN h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-False-\\\\s*\\\\.\\\\s*-nan-data1]": "assert a b\\n0 a 0\\n1 b 1\\n2 NaN 2\\n3 NaN 3 is a b\\n0 a 0\\n1 b 1\\n2 NaN 2\\n3 NaN 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-False-\\s*(\\.)\\s*-\\1\\1\\1-data0]": "assert a b\n0 a e\n1 b f\n2 ... g\n3 ... h is a b\n0 a e\n1 b f\n2 ... g\n3 ... h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-False-\\s*(\\.)\\s*-\\1\\1\\1-data1]": "assert a b\n0 a 0\n1 b 1\n2 ... 2\n3 ... 3 is a b\n0 a 0\n1 b 1\n2 ... 2\n3 ... 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-False-\\s*\\.\\s*-nan-data0]": "assert a b\n0 a e\n1 b f\n2 NaN g\n3 NaN h is a b\n0 a e\n1 b f\n2 NaN g\n3 NaN h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-False-\\s*\\.\\s*-nan-data1]": "assert a b\n0 a 0\n1 b 1\n2 NaN 2\n3 NaN 3 is a b\n0 a 0\n1 b 1\n2 NaN 2\n3 NaN 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-True-\\\\s*(\\\\.)\\\\s*-\\\\1\\\\1\\\\1-data0]": "assert a b\\n0 a e\\n1 b f\\n2 ... g\\n3 ... h is a b\\n0 a e\\n1 b f\\n2 ... g\\n3 ... h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-True-\\\\s*(\\\\.)\\\\s*-\\\\1\\\\1\\\\1-data1]": "assert a b\\n0 a 0\\n1 b 1\\n2 ... 2\\n3 ... 3 is a b\\n0 a 0\\n1 b 1\\n2 ... 2\\n3 ... 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-True-\\\\s*\\\\.\\\\s*-nan-data0]": "assert a b\\n0 a e\\n1 b f\\n2 NaN g\\n3 NaN h is a b\\n0 a e\\n1 b f\\n2 NaN g\\n3 NaN h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-True-\\\\s*\\\\.\\\\s*-nan-data1]": "assert a b\\n0 a 0\\n1 b 1\\n2 NaN 2\\n3 NaN 3 is a b\\n0 a 0\\n1 b 1\\n2 NaN 2\\n3 NaN 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-True-\\s*(\\.)\\s*-\\1\\1\\1-data0]": "assert a b\n0 a e\n1 b f\n2 ... g\n3 ... h is a b\n0 a e\n1 b f\n2 ... g\n3 ... h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-True-\\s*(\\.)\\s*-\\1\\1\\1-data1]": "assert a b\n0 a 0\n1 b 1\n2 ... 2\n3 ... 3 is a b\n0 a 0\n1 b 1\n2 ... 2\n3 ... 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-True-\\s*\\.\\s*-nan-data0]": "assert a b\n0 a e\n1 b f\n2 NaN g\n3 NaN h is a b\n0 a e\n1 b f\n2 NaN g\n3 NaN h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-False-True-\\s*\\.\\s*-nan-data1]": "assert a b\n0 a 0\n1 b 1\n2 NaN 2\n3 NaN 3 is a b\n0 a 0\n1 b 1\n2 NaN 2\n3 NaN 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-False-\\\\s*(\\\\.)\\\\s*-\\\\1\\\\1\\\\1-data0]": "assert a b\\n0 a e\\n1 b f\\n2 ... g\\n3 ... h is a b\\n0 a e\\n1 b f\\n2 ... g\\n3 ... h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-False-\\\\s*(\\\\.)\\\\s*-\\\\1\\\\1\\\\1-data1]": "assert a b\\n0 a 0\\n1 b 1\\n2 ... 2\\n3 ... 3 is a b\\n0 a 0\\n1 b 1\\n2 ... 2\\n3 ... 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-False-\\\\s*\\\\.\\\\s*-nan-data0]": "assert a b\\n0 a e\\n1 b f\\n2 NaN g\\n3 NaN h is a b\\n0 a e\\n1 b f\\n2 NaN g\\n3 NaN h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-False-\\\\s*\\\\.\\\\s*-nan-data1]": "assert a b\\n0 a 0\\n1 b 1\\n2 NaN 2\\n3 NaN 3 is a b\\n0 a 0\\n1 b 1\\n2 NaN 2\\n3 NaN 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-False-\\s*(\\.)\\s*-\\1\\1\\1-data0]": "assert a b\n0 a e\n1 b f\n2 ... g\n3 ... h is a b\n0 a e\n1 b f\n2 ... g\n3 ... h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-False-\\s*(\\.)\\s*-\\1\\1\\1-data1]": "assert a b\n0 a 0\n1 b 1\n2 ... 2\n3 ... 3 is a b\n0 a 0\n1 b 1\n2 ... 2\n3 ... 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-False-\\s*\\.\\s*-nan-data0]": "assert a b\n0 a e\n1 b f\n2 NaN g\n3 NaN h is a b\n0 a e\n1 b f\n2 NaN g\n3 NaN h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-False-\\s*\\.\\s*-nan-data1]": "assert a b\n0 a 0\n1 b 1\n2 NaN 2\n3 NaN 3 is a b\n0 a 0\n1 b 1\n2 NaN 2\n3 NaN 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-True-\\\\s*(\\\\.)\\\\s*-\\\\1\\\\1\\\\1-data0]": "assert a b\\n0 a e\\n1 b f\\n2 ... g\\n3 ... h is a b\\n0 a e\\n1 b f\\n2 ... g\\n3 ... h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-True-\\\\s*(\\\\.)\\\\s*-\\\\1\\\\1\\\\1-data1]": "assert a b\\n0 a 0\\n1 b 1\\n2 ... 2\\n3 ... 3 is a b\\n0 a 0\\n1 b 1\\n2 ... 2\\n3 ... 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-True-\\\\s*\\\\.\\\\s*-nan-data0]": "assert a b\\n0 a e\\n1 b f\\n2 NaN g\\n3 NaN h is a b\\n0 a e\\n1 b f\\n2 NaN g\\n3 NaN h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-True-\\\\s*\\\\.\\\\s*-nan-data1]": "assert a b\\n0 a 0\\n1 b 1\\n2 NaN 2\\n3 NaN 3 is a b\\n0 a 0\\n1 b 1\\n2 NaN 2\\n3 NaN 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-True-\\s*(\\.)\\s*-\\1\\1\\1-data0]": "assert a b\n0 a e\n1 b f\n2 ... g\n3 ... h is a b\n0 a e\n1 b f\n2 ... g\n3 ... h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-True-\\s*(\\.)\\s*-\\1\\1\\1-data1]": "assert a b\n0 a 0\n1 b 1\n2 ... 2\n3 ... 3 is a b\n0 a 0\n1 b 1\n2 ... 2\n3 ... 3", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-True-\\s*\\.\\s*-nan-data0]": "assert a b\n0 a e\n1 b f\n2 NaN g\n3 NaN h is a b\n0 a e\n1 b f\n2 NaN g\n3 NaN h", + "tests/frame/methods/test_replace.py::TestDataFrameReplaceRegex::test_regex_replace_scalar[True-True-True-\\s*\\.\\s*-nan-data1]": "assert a b\n0 a 0\n1 b 1\n2 NaN 2\n3 NaN 3 is a b\n0 a 0\n1 b 1\n2 NaN 2\n3 NaN 3", + "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index": "TODO: Add a reason for failure", + "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_duplicate_columns_allow[False-False]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_duplicate_columns_allow[False-True]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_duplicate_columns_default[False]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_duplicate_columns_default[True]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_empty_rangeindex": "TODO: Add a reason for failure", + "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_level_missing[idx_lev0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_level_missing[idx_lev1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_multiindex_columns": "TODO: Add a reason for failure", + "tests/frame/methods/test_reset_index.py::TestResetIndex::test_reset_index_with_datetimeindex_cols[2012-12-31]": "TODO: Add a reason for failure", + "tests/frame/methods/test_reset_index.py::test_reset_index_with_empty_frame[None]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/frame/methods/test_reset_index.py::test_reset_index_with_empty_frame[columns1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/frame/methods/test_sample.py::TestSample::test_sample_random_state[DataFrame-np.array-arg0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_sample.py::TestSample::test_sample_random_state[Series-np.array-arg0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtype_object_and_str": "AssertionError: DataFrame are different", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_datetime_with_tz": "AssertionError: DataFrame.columns are different", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_exclude_include_int[include0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_exclude_include_int[include2]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_float_dtype[expected0-float]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_float_dtype[expected1-float]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_not_an_attr_but_still_valid_dtype": "AssertionError: DataFrame are different", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-S1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-U1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-bytes_]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-str0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-str1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[exclude-str_]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-S1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-U1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-bytes_]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-str0]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-str1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_select_dtypes.py::TestSelectDtypes::test_select_dtypes_str_raises[include-str_]": "TODO: Add a reason for failure", + "tests/frame/methods/test_set_axis.py::TestDataFrameSetAxis::test_set_axis_copy": "TODO: Add a reason for failure", + "tests/frame/methods/test_set_axis.py::TestSeriesSetAxis::test_set_axis_copy": "TODO: Add a reason for failure", + "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_dst": "ValueError: Inferred frequency None from passed values does not conform to passed frequency h", + "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[False-False-None-1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[False-False-None-Index]": "TODO: Add a reason for failure", + "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[True-False-None-1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_set_index.py::TestSetIndex::test_set_index_pass_single_array[True-False-None-Index]": "TODO: Add a reason for failure", + "tests/frame/methods/test_set_index.py::TestSetIndexCustomLabelType::test_set_index_custom_label_hashable_iterable": "TODO: Add a reason for failure", + "tests/frame/methods/test_shift.py::TestDataFrameShift::test_shift_bool": "TODO: Add a reason for failure", + "tests/frame/methods/test_shift.py::TestDataFrameShift::test_shift_dt64values_axis1_invalid_fill[datetime64[us]-False]": "AssertionError: assert 1 == 2", + "tests/frame/methods/test_shift.py::TestDataFrameShift::test_shift_dt64values_axis1_invalid_fill[timedelta64[us]-False]": "AssertionError: assert 1 == 2", + "tests/frame/methods/test_shift.py::TestDataFrameShift::test_shift_dt64values_int_fill_deprecated": "TODO: Add a reason for failure", + "tests/frame/methods/test_sort_index.py::TestDataFrameSortIndex::test_sort_index_intervalindex": "TODO: Add a reason for failure", + "tests/frame/methods/test_sort_index.py::TestDataFrameSortIndex::test_sort_index_nan": "TODO: Add a reason for failure", + "tests/frame/methods/test_sort_index.py::TestDataFrameSortIndex::test_sort_index_reorder_on_ops": "TODO: Add a reason for failure", + "tests/frame/methods/test_sort_values.py::TestDataFrameSortValues::test_sort_by_column_named_none": "AssertionError: DataFrame.index are different", + "tests/frame/methods/test_sort_values.py::TestDataFrameSortValues::test_sort_values_by_empty_list": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_gz_lineend": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_multi_index_header": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_date_format": "AssertionError: DataFrame.index are different", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_from_csv1_datetime": "AssertionError: DataFrame.index are different", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_from_csv2": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_from_csv4": "AssertionError: DataFrame.index are different", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_headers": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_mixed": "AssertionError: Attributes of DataFrame.iloc[:, 15] (column name='object000') are different", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_multiindex": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_na_quoting": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_quoting": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_csv.py::TestDataFrameToCSV::test_to_csv_single_level_multi_index": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_dict.py::TestDataFrameToDict::test_to_dict_index_false_error[series]": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_dict.py::TestDataFrameToDict::test_to_dict_orient_dtype[data1-Timestamp]": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_dict.py::TestDataFrameToDict::test_to_dict_scalar_constructor_orient_dtype[data4-Timestamp]": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_dict.py::test_to_dict_list_pd_scalars[val1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_numpy.py::TestToNumpy::test_to_numpy_copy": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_numpy.py::TestToNumpy::test_to_numpy_mixed_dtype_to_str": "TODO: Add a reason for failure", + "tests/frame/methods/test_to_records.py::TestDataFrameToRecords::test_to_records_dt64tz_column": "TODO: Add a reason for failure", + "tests/frame/methods/test_transpose.py::TestTranspose::test_transpose_get_view_dt64tzget_view": "assert 3 == 1", + "tests/frame/methods/test_truncate.py::TestDataFrameTruncate::test_truncate_multiindex[DataFrame]": "TODO: Add a reason for failure", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_dropna_false[NAType]": "AssertionError: Series.index level [0] are different", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_dropna_false[NoneType]": "TODO: Add a reason for failure", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_dropna_false[float0]": "AssertionError: Series.index level [0] are different", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_dropna_false[float1]": "AssertionError: Series.index level [0] are different", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_dropna_true[NAType]": "AssertionError: Series.index level [0] are different", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_dropna_true[NoneType]": "AssertionError: Series.index level [0] are different", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_dropna_true[float0]": "AssertionError: Series.index level [0] are different", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_dropna_true[float1]": "AssertionError: Series.index level [0] are different", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_empty": "TODO: Add a reason for failure", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_empty_normalize": "TODO: Add a reason for failure", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_subset[NAType-columns1]": "AssertionError: Series.index are different", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_subset[NoneType-columns1]": "TODO: Add a reason for failure", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_subset[float0-columns1]": "AssertionError: Series.index are different", + "tests/frame/methods/test_value_counts.py::test_data_frame_value_counts_subset[float1-columns1]": "AssertionError: Series.index are different", + "tests/frame/methods/test_value_counts.py::test_value_counts_with_missing_category": "TODO: Add a reason for failure", + "tests/frame/methods/test_values.py::TestDataFrameValues::test_values": "TODO: Add a reason for failure", + "tests/frame/test_api.py::TestDataFrameMisc::test_display_max_dir_items": "TODO: Add a reason for failure", + "tests/frame/test_api.py::TestDataFrameMisc::test_get_agg_axis": "TODO: Add a reason for failure", + "tests/frame/test_api.py::TestDataFrameMisc::test_get_axis": "TODO: Add a reason for failure", + "tests/frame/test_api.py::TestDataFrameMisc::test_inplace_return_self": "assert None is a b c\n0 foo 0 1\n1 bar 0 2\n2 baz 1 3\n3 qux 1 4", + "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[DataFrame-False]": "TODO: Add a reason for failure", + "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[DataFrame-None]": "TODO: Add a reason for failure", + "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[DataFrame-True]": "TODO: Add a reason for failure", + "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[Series-False]": "TODO: Add a reason for failure", + "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[Series-None]": "TODO: Add a reason for failure", + "tests/frame/test_api.py::TestDataFrameMisc::test_set_flags[Series-True]": "TODO: Add a reason for failure", + "tests/frame/test_api.py::TestDataFrameMisc::test_tab_completion": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[numexpr-pow-True-bool]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[numexpr-sub-True-bool]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[numexpr-truediv-True-bool]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[python-pow-True-bool]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[python-sub-True-bool]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_binop_other[python-truediv-True-bool]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_frame_with_frame_reindex[numexpr]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameArithmetic::test_frame_with_frame_reindex[python]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameArithmeticUnsorted::test_inplace_ops_identity[numexpr]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameArithmeticUnsorted::test_inplace_ops_identity[python]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_arith_flex_frame_corner[numexpr]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_arith_flex_frame_corner[python]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_broadcast_multiindex[numexpr-None]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_broadcast_multiindex[python-None]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_frame_multiindex_operations_part_align_axis1[numexpr]": "AssertionError: DataFrame.columns are different", + "tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_frame_multiindex_operations_part_align_axis1[python]": "AssertionError: DataFrame.columns are different", + "tests/frame/test_arithmetic.py::test_arithmetic_multiindex_align[numexpr]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::test_arithmetic_multiindex_align[python]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::test_arithmetic_multiindex_column_align[numexpr]": "AssertionError: DataFrame.columns are different", + "tests/frame/test_arithmetic.py::test_arithmetic_multiindex_column_align[python]": "AssertionError: DataFrame.columns are different", + "tests/frame/test_arithmetic.py::test_dataframe_operation_with_non_numeric_types[numexpr-df1-object]": "AssertionError: DataFrame.iloc[:, 1] (column name='b') are different", + "tests/frame/test_arithmetic.py::test_dataframe_operation_with_non_numeric_types[python-df1-object]": "AssertionError: DataFrame.iloc[:, 1] (column name='b') are different", + "tests/frame/test_arithmetic.py::test_frame_op_subclass_nonclass_constructor[numexpr]": "RecursionError: maximum recursion depth exceeded", + "tests/frame/test_arithmetic.py::test_frame_op_subclass_nonclass_constructor[python]": "RecursionError: maximum recursion depth exceeded", + "tests/frame/test_arithmetic.py::test_frame_with_zero_len_series_corner_cases[numexpr]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::test_frame_with_zero_len_series_corner_cases[python]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::test_pow_with_realignment[numexpr]": "TODO: Add a reason for failure", + "tests/frame/test_arithmetic.py::test_pow_with_realignment[python]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_columns_indexes_raise_on_sets": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_construction_from_ndarray_datetimelike": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_construction_from_set_raises[frozenset]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_construction_from_set_raises[set]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['+01:15'-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['-02:15'-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['Asia/Tokyo'-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['US/Eastern'-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['UTC'-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['UTC+01:15'-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['UTC-02:15'-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['dateutil/Asia/Singapore'-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive['dateutil/US/Pacific'-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[datetime.timezone(datetime.timedelta(seconds=3600))-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[datetime.timezone.utc-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[pytz.FixedOffset(-300)-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[pytz.FixedOffset(300)-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[tzlocal()-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDatetimeTZ::test_constructor_data_aware_dtype_naive[tzutc()-True]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructorWithDtypeCoercion::test_floating_values_integer_dtype": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_1d_object_array_does_not_copy": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_2d_object_array_does_not_copy": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_construct_from_dict_ea_series": "AttributeError: 'ndarray' object has no attribute '_data'. Did you mean: 'data'?", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_construct_with_two_categoricalindex_series": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_construction_nan_value_timedelta64_dtype": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_cast": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_multiindex": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_nan_key[None]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_nan_key[nan0]": "AssertionError: Attributes of DataFrame.iloc[:, 1] (column name='nan') are different", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_nan_key[nan1]": "AssertionError: Attributes of DataFrame.iloc[:, 1] (column name='nan') are different", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_nan_key_and_columns": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_with_index": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_with_index_and_columns": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_dict_with_none": "AssertionError: assert nan is None", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_empty_list": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='A') are different", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_error_msgs": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_from_2d_datetimearray": "assert 2 == 1", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_list_of_2d_raises": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_list_str[U-input_vals3]": "AssertionError: DataFrame.iloc[:, 0] (column name='A') are different", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_lists_to_object_dtype": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_maskedarray": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_maskedarray_hardened": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_maskedarray_nonfloat": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_maskedrecarray_dtype": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_mixed_dict_and_Series": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_constructor_with_datetimes2": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_datetime_date_tuple_columns_from_dict": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_datetimelike_values_with_object_dtype[DataFrame-M]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_datetimelike_values_with_object_dtype[DataFrame-m]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_datetimelike_values_with_object_dtype[Series-M]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_datetimelike_values_with_object_dtype[Series-m]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_keys_returns_rangeindex": "AssertionError: Index are different", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-M8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-bool0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-bool1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-complex-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-complex128-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-complex64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-datetime64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-float-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-float32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-float64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-int-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-int16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-int32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-int64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-int8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-m8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-object0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-object1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-timedelta64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-uint16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-uint32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-uint64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float32-uint8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-M8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-bool0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-bool1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-complex-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-complex128-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-complex64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-datetime64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-float-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-float32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-float64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-int-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-int16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-int32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-int64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-int8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-m8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-object0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-object1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-timedelta64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-uint16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-uint32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-uint64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Float64-uint8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-M8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-bool0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-bool1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-complex-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-complex128-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-complex64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-datetime64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-float-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-float32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-float64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-int-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-int16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-int32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-int64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-int8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-m8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-object0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-object1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-timedelta64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-uint16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-uint32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-uint64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int16-uint8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-M8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-bool0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-bool1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-complex-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-complex128-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-complex64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-datetime64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-float-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-float32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-float64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-int-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-int16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-int32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-int64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-int8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-m8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-object0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-object1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-timedelta64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-uint16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-uint32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-uint64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int32-uint8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-M8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-bool0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-bool1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-complex-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-complex128-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-complex64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-datetime64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-float-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-float32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-float64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-int-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-int16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-int32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-int64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-int8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-m8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-object0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-object1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-timedelta64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-uint16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-uint32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-uint64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int64-uint8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-M8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-bool0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-bool1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-complex-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-complex128-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-complex64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-datetime64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-float-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-float32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-float64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-int-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-int16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-int32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-int64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-int8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-m8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-object0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-object1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-timedelta64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-uint16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-uint32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-uint64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[Int8-uint8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-M8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-bool0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-bool1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-complex-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-complex128-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-complex64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-datetime64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-float-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-float32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-float64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-int-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-int16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-int32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-int64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-int8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-m8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-object0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-object1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-timedelta64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-uint16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-uint32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-uint64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt16-uint8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-M8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-bool0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-bool1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-complex-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-complex128-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-complex64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-datetime64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-float-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-float32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-float64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-int-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-int16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-int32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-int64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-int8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-m8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-object0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-object1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-timedelta64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-uint16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-uint32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-uint64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt32-uint8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-M8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-bool0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-bool1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-complex-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-complex128-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-complex64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-datetime64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-float-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-float32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-float64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-int-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-int16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-int32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-int64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-int8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-m8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-object0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-object1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-timedelta64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-uint16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-uint32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-uint64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt64-uint8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-M8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-bool0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-bool1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-complex-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-complex128-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-complex64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-datetime64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-float-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-float32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-float64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-int-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-int16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-int32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-int64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-int8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-m8[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-object0-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-object1-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-timedelta64[ns]-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-uint16-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-uint32-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-uint64-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestDataFrameConstructors::test_dict_nocopy[UInt8-uint8-False]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_datetime64[DataFrame-dict]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_datetime64[Series-None]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_timedelta64[DataFrame-dict-datetime64]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_timedelta64[DataFrame-dict-timedelta64]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_timedelta64[Series-None-datetime64]": "TODO: Add a reason for failure", + "tests/frame/test_constructors.py::TestFromScalar::test_out_of_s_bounds_timedelta64[Series-None-timedelta64]": "TODO: Add a reason for failure", + "tests/frame/test_iteration.py::TestIteration::test_iteritems": "TODO: Add a reason for failure", + "tests/frame/test_iteration.py::TestIteration::test_iterrows_corner": "TODO: Add a reason for failure", + "tests/frame/test_iteration.py::TestIteration::test_itertuples": "TODO: Add a reason for failure", + "tests/frame/test_iteration.py::TestIteration::test_keys": "TODO: Add a reason for failure", + "tests/frame/test_logical_ops.py::TestDataFrameLogicalOperators::test_different_dtypes_different_index_raises": "TODO: Add a reason for failure", + "tests/frame/test_logical_ops.py::TestDataFrameLogicalOperators::test_logical_ops_empty_frame": "TypeError: operation 'and_' not supported for dtype 'str' with dtype 'str'", + "tests/frame/test_logical_ops.py::TestDataFrameLogicalOperators::test_logical_with_nas": "TODO: Add a reason for failure", + "tests/frame/test_npfuncs.py::TestAsArray::test_np_sqrt": "TODO: Add a reason for failure", + "tests/frame/test_npfuncs.py::TestAsArray::test_sum_axis_behavior": "assert np.float64(0.5984297567394846) == np.float64(0.5984297567394847)", + "tests/frame/test_query_eval.py::TestDataFrameQueryNumExprPython::test_query_numexpr_with_min_and_max_columns": "TODO: Add a reason for failure", + "tests/frame/test_query_eval.py::TestDataFrameQueryPythonPython::test_query_numexpr_with_min_and_max_columns": "TODO: Add a reason for failure", + "tests/frame/test_query_eval.py::TestDataFrameQueryWithMultiIndex::test_query_multiindex_get_index_resolvers": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[kurt-index0]": "TypeError: Cannot perform reduction 'kurt' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[kurt-index1]": "TypeError: Cannot perform reduction 'kurt' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[kurt-index2]": "TypeError: Cannot perform reduction 'kurt' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[kurt-index3]": "TypeError: Cannot perform reduction 'kurt' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[max-index0]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[max-index1]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[max-index2]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[max-index3]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[mean-index0]": "TypeError: Cannot perform reduction 'mean' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[mean-index1]": "TypeError: Cannot perform reduction 'mean' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[mean-index2]": "TypeError: Cannot perform reduction 'mean' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[mean-index3]": "TypeError: Cannot perform reduction 'mean' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[median-index0]": "TypeError: Cannot perform reduction 'median' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[median-index1]": "TypeError: Cannot perform reduction 'median' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[median-index2]": "TypeError: Cannot perform reduction 'median' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[median-index3]": "TypeError: Cannot perform reduction 'median' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[min-index0]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[min-index1]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[min-index2]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[min-index3]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[prod-index0]": "TypeError: Cannot perform reduction 'prod' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[prod-index1]": "TypeError: Cannot perform reduction 'prod' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[prod-index2]": "TypeError: Cannot perform reduction 'prod' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[prod-index3]": "TypeError: Cannot perform reduction 'prod' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[sem-index0]": "TypeError: Cannot perform reduction 'sem' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[sem-index1]": "TypeError: Cannot perform reduction 'sem' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[sem-index2]": "TypeError: Cannot perform reduction 'sem' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[sem-index3]": "TypeError: Cannot perform reduction 'sem' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[skew-index0]": "TypeError: Cannot perform reduction 'skew' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[skew-index1]": "TypeError: Cannot perform reduction 'skew' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[skew-index2]": "TypeError: Cannot perform reduction 'skew' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[skew-index3]": "TypeError: Cannot perform reduction 'skew' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[std-index0]": "TypeError: Cannot perform reduction 'std' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[std-index1]": "TypeError: Cannot perform reduction 'std' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[std-index2]": "TypeError: Cannot perform reduction 'std' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[std-index3]": "TypeError: Cannot perform reduction 'std' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[sum-index0]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[sum-index1]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[sum-index2]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[sum-index3]": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[var-index0]": "TypeError: Cannot perform reduction 'var' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[var-index1]": "TypeError: Cannot perform reduction 'var' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[var-index2]": "TypeError: Cannot perform reduction 'var' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_axis_1_empty[var-index3]": "TypeError: Cannot perform reduction 'var' with string dtype", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_median": "AssertionError: Attributes of Series are different", + "tests/frame/test_reductions.py::TestDataFrameAnalytics::test_mode_dropna[False-expected3]": "AssertionError: DataFrame.iloc[:, 3] (column name='K') are different", + "tests/frame/test_reductions.py::TestDataFrameReductions::test_min_max_dt64_api_consistency_empty_df": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::TestDataFrameReductions::test_min_max_dt64_api_consistency_with_NaT": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::TestDataFrameReductions::test_min_max_dt64_with_NaT_precision": "AssertionError: Series are different", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-False-kurt]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-False-mean]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-False-median]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-False-skew]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-True-kurt]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-True-mean]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-True-median]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[Float64-True-skew]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-False-kurt]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-False-mean]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-False-median]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-False-skew]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-True-kurt]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-True-mean]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-True-median]": "TODO: Add a reason for failure", + "tests/frame/test_reductions.py::test_reduction_axis_none_returns_scalar[float64-True-skew]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_int_level_names[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_int_level_names[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_ints[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_ints[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_mixed_level[False]": "AssertionError: DataFrame.columns are different", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_mixed_level[True]": "AssertionError: DataFrame.columns are different", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_mixed_levels[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_mixed_levels[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[False-labels0-data0-False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[False-labels0-data0-True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[False-labels1-data1-False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[False-labels1-data1-True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[True-labels0-data0-False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[True-labels0-data0-True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[True-labels1-data1-False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_multi_preserve_categorical_dtype[True-labels1-data1-True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_preserve_categorical_dtype[False-False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_preserve_categorical_dtype[False-True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_preserve_categorical_dtype[True-False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_preserve_categorical_dtype[True-True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_unstack[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_stack_unstack[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_bool": "AssertionError: DataFrame.iloc[:, 0] (column name='('col', 'c')') are different", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_multi_level_rows_and_cols": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_nan_index2": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_nan_index3": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_non_unique_index_names[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_non_unique_index_names[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_not_consolidated": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_swaplevel_sortlevel[0]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_swaplevel_sortlevel[baz]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestDataFrameReshape::test_unstack_unused_levels": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_multi_level_stack_categorical[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_multi_level_stack_categorical[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_level_name[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_level_name[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_mixed_dtype[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_multiple_bug[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_multiple_bug[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_multiple_out_of_bounds[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_multiple_out_of_bounds[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_nan_in_multiindex_columns[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_nan_in_multiindex_columns[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_nan_level[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_nullable_dtype[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_nullable_dtype[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_order_with_unsorted_levels_multi_row_2[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_multiple[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_multiple[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_preserve_names[False]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_preserve_names[True]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_wrong_level_name[False-unstack]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_stack_unstack_wrong_level_name[True-unstack]": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_unstack_preserve_types": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_unstack_with_level_has_nan": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::TestStackUnstackMultiLevel::test_unstack_with_missing_int_cast_to_float": "TODO: Add a reason for failure", + "tests/frame/test_stack_unstack.py::test_unstack_sort_false_nan[nan=first]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('value', nan)') are different", + "tests/frame/test_stack_unstack.py::test_unstack_sort_false_nan[nan=last]": "AssertionError: Attributes of DataFrame.iloc[:, 3] (column name='('value', nan)') are different", + "tests/frame/test_stack_unstack.py::test_unstack_sort_false_nan[nan=second]": "AssertionError: Attributes of DataFrame.iloc[:, 1] (column name='('value', nan)') are different", + "tests/frame/test_stack_unstack.py::test_unstack_sort_false_nan[nan=third]": "AssertionError: Attributes of DataFrame.iloc[:, 2] (column name='('value', nan)') are different", + "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_asof": "TODO: Add a reason for failure", + "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_equals_subclass": "TODO: Add a reason for failure", + "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_frame_subclassing_and_slicing": "TODO: Add a reason for failure", + "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_subclass_stack_multi": "TODO: Add a reason for failure", + "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_subclass_stack_multi_mixed": "TODO: Add a reason for failure", + "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_subclass_unstack_multi": "TODO: Add a reason for failure", + "tests/frame/test_subclass.py::TestDataFrameSubclassing::test_subclass_unstack_multi_mixed": "TODO: Add a reason for failure", + "tests/frame/test_subclass.py::test_constructor_with_metadata_from_records": "TODO: Add a reason for failure", + "tests/frame/test_ufunc.py::test_alignment_deprecation_enforced": "TODO: Add a reason for failure", + "tests/frame/test_ufunc.py::test_binary_input_aligns_index[int64]": "TODO: Add a reason for failure", + "tests/frame/test_unary.py::TestDataFrameUnaryOperators::test_pos_object_raises": "Failed: DID NOT RAISE ", + "tests/frame/test_unary.py::TestDataFrameUnaryOperators::test_pos_raises": "Failed: DID NOT RAISE ", + "tests/generic/test_frame.py::TestDataFrame::test_metadata_propagation_indiv": "TODO: Add a reason for failure", + "tests/generic/test_generic.py::TestGeneric::test_stdlib_copy_shallow_copies[DataFrame]": "assert False", + "tests/generic/test_generic.py::TestGeneric::test_stdlib_copy_shallow_copies[Series]": "assert False", + "tests/generic/test_generic.py::TestNDFrame::test_flags_identity[DataFrame]": "TODO: Add a reason for failure", + "tests/generic/test_generic.py::TestNDFrame::test_flags_identity[Series]": "TODO: Add a reason for failure", + "tests/generic/test_generic.py::TestNDFrame::test_numpy_transpose[DataFrame]": "TODO: Add a reason for failure", + "tests/generic/test_generic.py::TestNDFrame::test_transpose_frame": "TODO: Add a reason for failure", + "tests/generic/test_series.py::TestSeries::test_metadata_propagation_indiv": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_agg_multiple_with_as_index_false_subset_to_a_single_column": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[count]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[first]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[idxmax]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[idxmin]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[last]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[max]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[min]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_agg_str_with_kwarg_axis_1_raises[nunique]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-bool-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-bool-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-float32-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-float32-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-float64-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-float64-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-int32-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-int32-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-int64-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-bool-int64-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-bool-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-bool-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-float32-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-float32-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-float64-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-float64-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-int32-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-int32-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-int64-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float32-int64-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-bool-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-bool-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-float32-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-float32-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-float64-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-float64-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-int32-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-int32-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-int64-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-float64-int64-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-bool-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-bool-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-float32-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-float32-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-float64-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-float64-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-int32-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-int32-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-int64-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int32-int64-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-bool-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-bool-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-float32-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-float32-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-float64-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-float64-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-int32-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-int32-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-int64-keys0-agg_index0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_callable_result_dtype_frame[apply-int64-int64-keys1-agg_index1]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_groupby_aggregate_directory[size]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_groupby_aggregate_empty_key_empty_return": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_groupby_aggregate_empty_with_multiindex_frame": "AssertionError: DataFrame.index level [0] are different", + "tests/groupby/aggregate/test_aggregate.py::test_multiindex_custom_func[0]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_aggregate.py::test_order_aggregate_multiple_funcs": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data1-prod-large_int-False]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data1-prod-large_int-True]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data1-sum-large_int-False]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data1-sum-large_int-True]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-mean-always_float-False]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-mean-always_float-True]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-median-always_float-False]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-median-always_float-True]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-var-always_float-False]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cython_agg_EA_known_dtypes[data2-var-always_float-True]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cythonized_aggers[prod]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_cython.py::test_cythonized_aggers[sum]": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_other.py::test_agg_over_numpy_arrays": "TODO: Add a reason for failure", + "tests/groupby/aggregate/test_other.py::test_agg_timezone_round_trip": "AssertionError: assert Timestamp('2016-01-01 20:00:00') == Timestamp('2016-01-01 12:00:00-0800', tz='US/Pacific')", + "tests/groupby/methods/test_describe.py::test_describe_duplicate_columns": "AssertionError: DataFrame are different", + "tests/groupby/methods/test_describe.py::test_describe_with_duplicate_output_column_names[False-keys0]": "AssertionError: DataFrame are different", + "tests/groupby/methods/test_describe.py::test_describe_with_duplicate_output_column_names[False-keys1]": "AssertionError: DataFrame are different", + "tests/groupby/methods/test_describe.py::test_describe_with_duplicate_output_column_names[True-keys0]": "AssertionError: DataFrame are different", + "tests/groupby/methods/test_describe.py::test_describe_with_duplicate_output_column_names[True-keys1]": "AssertionError: DataFrame are different", + "tests/groupby/methods/test_describe.py::test_frame_describe_tupleindex": "TODO: Add a reason for failure", + "tests/groupby/methods/test_groupby_shift_diff.py::test_group_diff_bool": "TODO: Add a reason for failure", + "tests/groupby/methods/test_groupby_shift_diff.py::test_group_diff_real_frame[int16]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_groupby_shift_diff.py::test_group_diff_real_frame[int8]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_groupby_shift_diff.py::test_group_diff_real_series[int16]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_groupby_shift_diff.py::test_group_diff_real_series[int8]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_first_last_nth": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_first_last_nth_dtypes": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_first_last_nth_nan_dtype": "AssertionError: Attributes of Series are different", + "tests/groupby/methods/test_nth.py::test_first_last_tz[data0-expected_first0-expected_last0]": "AssertionError: Attributes of DataFrame.iloc[:, 1] (column name='time') are different", + "tests/groupby/methods/test_nth.py::test_first_last_with_None[first]": "AssertionError: Attributes of DataFrame.iloc[:, 1] (column name='value') are different", + "tests/groupby/methods/test_nth.py::test_first_last_with_None[last]": "AssertionError: Attributes of DataFrame.iloc[:, 1] (column name='value') are different", + "tests/groupby/methods/test_nth.py::test_groupby_last_first_nth_with_none[NoneType-first]": "AssertionError: Attributes of Series are different", + "tests/groupby/methods/test_nth.py::test_groupby_last_first_nth_with_none[NoneType-last]": "AssertionError: Attributes of Series are different", + "tests/groupby/methods/test_nth.py::test_groupby_last_first_nth_with_none[NoneType-nth]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_head_tail_dropna_false": "AssertionError: DataFrame Expected type , found ins...", + "tests/groupby/methods/test_nth.py::test_negative_step": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_np_ints": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth2": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth3": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth4": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth5": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_after_selection[None-b]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_after_selection[None-selection1]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_after_selection[None-selection2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_after_selection[all-b]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_after_selection[all-selection1]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_after_selection[all-selection2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_after_selection[any-b]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_after_selection[any-selection1]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_after_selection[any-selection2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_column_order": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_indexed": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_multi_grouper": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_multi_index_as_expected": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_nan_in_grouper[all]": "NotImplementedError: dropna is not currently supported.", + "tests/groupby/methods/test_nth.py::test_nth_nan_in_grouper[any]": "NotImplementedError: dropna is not currently supported.", + "tests/groupby/methods/test_nth.py::test_nth_nan_in_grouper_series[None]": "KeyError: 'Label scalar is out of bounds'", + "tests/groupby/methods/test_nth.py::test_nth_nan_in_grouper_series[all]": "NotImplementedError: dropna is not currently supported.", + "tests/groupby/methods/test_nth.py::test_nth_nan_in_grouper_series[any]": "NotImplementedError: dropna is not currently supported.", + "tests/groupby/methods/test_nth.py::test_nth_with_na_object[NoneType--1]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_with_na_object[float0--1]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_nth_with_na_object[float1--1]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_slice[arg0-expected_rows0]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_slice[arg1-expected_rows1]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_slice[arg2-expected_rows2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_nth.py::test_slice[arg3-expected_rows3]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_NA_float[Float32]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_allNA_column[Float32]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Float32-higher-2-3]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Float32-lower-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Float32-nearest-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int16-higher-2-3]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int16-lower-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int16-nearest-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int32-higher-2-3]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int32-lower-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int32-nearest-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int64-higher-2-3]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int64-lower-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int64-nearest-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int8-higher-2-3]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int8-lower-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[Int8-nearest-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt16-higher-2-3]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt16-lower-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt16-nearest-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt32-higher-2-3]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt32-lower-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt32-nearest-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt64-higher-2-3]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt64-lower-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt64-nearest-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt8-higher-2-3]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt8-lower-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked[UInt8-nearest-2-2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked_interp[Float32-linear]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_all_na_group_masked_interp[Float32-midpoint]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_groupby_quantile_nonmulti_levels_order": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals0-b_vals0-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals0-b_vals0-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals0-b_vals0-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals1-b_vals1-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals1-b_vals1-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals1-b_vals1-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals2-b_vals2-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals2-b_vals2-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0-a_vals2-b_vals2-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals0-b_vals0-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals0-b_vals0-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals0-b_vals0-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals1-b_vals1-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals1-b_vals1-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals1-b_vals1-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals2-b_vals2-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals2-b_vals2-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.25-a_vals2-b_vals2-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals0-b_vals0-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals0-b_vals0-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals0-b_vals0-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals1-b_vals1-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals1-b_vals1-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals1-b_vals1-nearest]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='val') are different", + "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals2-b_vals2-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals2-b_vals2-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.5-a_vals2-b_vals2-nearest]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='val') are different", + "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals0-b_vals0-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals0-b_vals0-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals0-b_vals0-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals1-b_vals1-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals1-b_vals1-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals1-b_vals1-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals2-b_vals2-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals2-b_vals2-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[0.75-a_vals2-b_vals2-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals0-b_vals0-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals0-b_vals0-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals0-b_vals0-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals1-b_vals1-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals1-b_vals1-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals1-b_vals1-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals2-b_vals2-higher]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals2-b_vals2-lower]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_quantile.py::test_quantile[1-a_vals2-b_vals2-nearest]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_rank.py::test_rank_avg_even_vals[True-int32]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_rank.py::test_rank_avg_even_vals[True-int64]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_rank.py::test_rank_avg_even_vals[True-uint32]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_rank.py::test_rank_avg_even_vals[True-uint64]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_size.py::test_size_series_masked_type_returns_Int64[Float64]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_size.py::test_size_series_masked_type_returns_Int64[Int64]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_size.py::test_size_series_masked_type_returns_Int64[boolean]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_size.py::test_size_sort[False-A]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_size.py::test_size_sort[False-B]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_size.py::test_size_sort[False-by2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-False-None-False-count-array]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-False-None-True-proportion-array]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-True-False-False-count-array]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-True-False-True-proportion-array]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-True-True-False-count-array]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[False-False-True-True-True-proportion-array]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[True-False-False-None-False-count-array]": "KeyError: 'Column not found: both'", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[True-False-False-None-True-proportion-array]": "KeyError: 'Column not found: both'", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[True-False-True-False-False-count-array]": "KeyError: 'Column not found: both'", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[True-False-True-False-True-proportion-array]": "KeyError: 'Column not found: both'", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[True-False-True-True-False-count-array]": "KeyError: 'Column not found: both'", + "tests/groupby/methods/test_value_counts.py::test_against_frame_and_seriesgroupby[True-False-True-True-True-proportion-array]": "KeyError: 'Column not found: both'", + "tests/groupby/methods/test_value_counts.py::test_ambiguous_grouping": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_column_label_duplicates[False-level-columns1-expected_names1]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[NAType-False-count-False-expected_data1-expected_index1]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[NAType-False-count-True-expected_data0-expected_index0]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[NAType-True-proportion-False-expected_data1-expected_index1]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[NAType-True-proportion-True-expected_data0-expected_index0]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[NoneType-False-count-False-expected_data1-expected_index1]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[NoneType-False-count-True-expected_data0-expected_index0]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[NoneType-True-proportion-False-expected_data1-expected_index1]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[NoneType-True-proportion-True-expected_data0-expected_index0]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[float0-False-count-False-expected_data1-expected_index1]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[float0-False-count-True-expected_data0-expected_index0]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[float0-True-proportion-False-expected_data1-expected_index1]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[float0-True-proportion-True-expected_data0-expected_index0]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[float1-False-count-False-expected_data1-expected_index1]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[float1-False-count-True-expected_data0-expected_index0]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[float1-True-proportion-False-expected_data1-expected_index1]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_data_frame_value_counts_dropna[float1-True-proportion-True-expected_data0-expected_index0]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_dropna_combinations[True-False-expected_rows2-expected_values2]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_all_na[False-False-False]": "AssertionError: Series.index level [0] are different", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[False-False-False]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[False-True-False]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[False-True-True]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[True-False-False]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[True-False-True]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[True-True-False]": "AssertionError: Series.index level [1] are different", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort[True-True-True]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[False-False-False]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[False-False-True]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[False-True-False]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[False-True-True]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[True-False-False]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[True-False-True]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[True-True-False]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_sort_categorical[True-True-True]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_time_grouper[ms-False]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_time_grouper[ns-False]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_time_grouper[s-False]": "TODO: Add a reason for failure", + "tests/groupby/methods/test_value_counts.py::test_value_counts_time_grouper[us-False]": "TODO: Add a reason for failure", + "tests/groupby/test_all_methods.py::test_duplicate_columns[all-False]": "ValueError: Duplicate column names are not allowed", + "tests/groupby/test_all_methods.py::test_duplicate_columns[any-False]": "ValueError: Duplicate column names are not allowed", + "tests/groupby/test_all_methods.py::test_duplicate_columns[cummax-False]": "TODO: Add a reason for failure", + "tests/groupby/test_all_methods.py::test_duplicate_columns[cummin-False]": "TODO: Add a reason for failure", + "tests/groupby/test_all_methods.py::test_duplicate_columns[cumprod-False]": "TODO: Add a reason for failure", + "tests/groupby/test_all_methods.py::test_duplicate_columns[cumsum-False]": "TODO: Add a reason for failure", + "tests/groupby/test_all_methods.py::test_duplicate_columns[rank-False]": "TODO: Add a reason for failure", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[all]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[any]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[bfill]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[count]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[cumcount]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[cummax]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[cummin]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[cumprod]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[cumsum]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[diff]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[ffill]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[first]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[idxmax]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[idxmin]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[kurt]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[last]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[max]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[mean]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[median]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[min]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[ngroup]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[nunique]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[pct_change]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[prod]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[quantile]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[rank]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[sem]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[shift]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[size]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[skew]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[std]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[sum]": "assert not True", + "tests/groupby/test_all_methods.py::test_not_c_contiguous_mask[var]": "assert not True", + "tests/groupby/test_api.py::test_all_methods_categorized": "TODO: Add a reason for failure", + "tests/groupby/test_api.py::test_tab_completion": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_as_index_constant_lambda[False-expected0]": "AssertionError: DataFrame.columns are different", + "tests/groupby/test_apply.py::test_apply_concat_preserve_names": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_datetime_issue[group_column_dtlike0]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_datetime_issue[group_column_dtlike1]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_frame_concat_series": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_func_that_appends_group_to_list_without_copy": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_index_has_complex_internals[index3]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_index_key_error_bug[index_values0]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_index_key_error_bug[index_values1]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_multiindex_fail": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_nonmonotonic_float_index[arg0-idx0]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_nonmonotonic_float_index[arg2-idx2]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_apply_with_date_in_multiindex_does_not_convert_to_timestamp": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_empty_df[agg-kurt]": "AssertionError: Series.index are different", + "tests/groupby/test_apply.py::test_empty_df[agg-prod]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_empty_df[agg-skew]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_empty_df[agg-sum]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_empty_df[apply-0]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_empty_df[apply-1]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH10519]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH12155]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH20084]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH21417]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH2656]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH2936]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_group_apply_once_per_group[GH7739 & GH10519]": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_groupby_apply_all_none": "TODO: Add a reason for failure", + "tests/groupby/test_apply.py::test_groupby_apply_store_copy": "KeyError: 0", + "tests/groupby/test_apply.py::test_include_groups": "Failed: DID NOT RAISE ", + "tests/groupby/test_apply.py::test_positional_slice_groups_datetimelike": "AssertionError: DataFrame are different", + "tests/groupby/test_apply.py::test_time_field_bug": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-all-keys0-False]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/groupby/test_categorical.py::test_agg_list[False-True-all-keys0-True]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/groupby/test_categorical.py::test_agg_list[False-True-all-keys1-False]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/groupby/test_categorical.py::test_agg_list[False-True-all-keys1-True]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/groupby/test_categorical.py::test_agg_list[False-True-any-keys0-False]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/groupby/test_categorical.py::test_agg_list[False-True-any-keys0-True]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/groupby/test_categorical.py::test_agg_list[False-True-any-keys1-False]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/groupby/test_categorical.py::test_agg_list[False-True-any-keys1-True]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/groupby/test_categorical.py::test_agg_list[False-True-count-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-first-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-idxmax-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-idxmin-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-last-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-max-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-mean-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-median-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-min-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-nunique-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-prod-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-size-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-std-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-sum-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_agg_list[False-True-var-keys0-True]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_category_order_reducer[False-False-True-all-False-range]": "AttributeError: Can only use .cat accessor with a 'category' dtype. Did you mean: 'at'?", + "tests/groupby/test_categorical.py::test_category_order_reducer[False-False-True-all-True-range]": "AttributeError: Can only use .cat accessor with a 'category' dtype. Did you mean: 'at'?", + "tests/groupby/test_categorical.py::test_category_order_reducer[False-False-True-any-False-range]": "AttributeError: Can only use .cat accessor with a 'category' dtype. Did you mean: 'at'?", + "tests/groupby/test_categorical.py::test_category_order_reducer[False-False-True-any-True-range]": "AttributeError: Can only use .cat accessor with a 'category' dtype. Did you mean: 'at'?", + "tests/groupby/test_categorical.py::test_category_order_reducer[False-True-True-all-False-range]": "AttributeError: Can only use .cat accessor with a 'category' dtype. Did you mean: 'at'?", + "tests/groupby/test_categorical.py::test_category_order_reducer[False-True-True-all-True-range]": "AttributeError: Can only use .cat accessor with a 'category' dtype. Did you mean: 'at'?", + "tests/groupby/test_categorical.py::test_category_order_reducer[False-True-True-any-False-range]": "AttributeError: Can only use .cat accessor with a 'category' dtype. Did you mean: 'at'?", + "tests/groupby/test_categorical.py::test_category_order_reducer[False-True-True-any-True-range]": "AttributeError: Can only use .cat accessor with a 'category' dtype. Did you mean: 'at'?", + "tests/groupby/test_categorical.py::test_describe_categorical_columns": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_observed[False]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_observed_codes_remap[False]": "TODO: Add a reason for failure", + "tests/groupby/test_categorical.py::test_observed_two_columns[False]": "AssertionError: DataFrame.index level [0] are different", + "tests/groupby/test_categorical.py::test_unstack_categorical": "TODO: Add a reason for failure", + "tests/groupby/test_counting.py::TestCounting::test_ngroup_distinct": "TODO: Add a reason for failure", + "tests/groupby/test_cumulative.py::test_cython_api2[False]": "AssertionError: DataFrame are different", + "tests/groupby/test_cumulative.py::test_groupby_cumprod_nan_influences_other_columns": "TODO: Add a reason for failure", + "tests/groupby/test_cumulative.py::test_numpy_compat[cumprod]": "TODO: Add a reason for failure", + "tests/groupby/test_cumulative.py::test_numpy_compat[cumsum]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_as_index_select_column": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_group_name_available_in_inference_pass": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_group_on_two_row_multiindex_returns_one_tuple_key": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_all_nan_groups_drop": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_as_index_select_column_sum_empty_df": "AssertionError: Expected type , found instead", + "tests/groupby/test_groupby.py::test_groupby_column_index_name_lost[any]": "RuntimeError: Fast-to-slow transfer is blocked", + "tests/groupby/test_groupby.py::test_groupby_column_index_name_lost[shift]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Float32-False-val1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Float64-False-val1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int16-False-val1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int16-True-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int32-False-val1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int32-True-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int64-False-val1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int8-False-val1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[Int8-True-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt16-False-val1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt16-True-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt32-False-val1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt32-True-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt64-False-val1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt64-True-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt8-False-val1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_mask[UInt8-True-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_skipna_false": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_cumsum_timedelta64": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_dtype_inference_empty": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_empty_multi_column[False-False]": "AssertionError: left and right shape mismatch", + "tests/groupby/test_groupby.py::test_groupby_groups_in_BaseGrouper": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_level_nonmulti": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_multiindex_not_lexsorted[False]": "AssertionError: assert not True", + "tests/groupby/test_groupby.py::test_groupby_multiindex_not_lexsorted[True]": "AssertionError: assert not True", + "tests/groupby/test_groupby.py::test_groupby_nat_exclude": "AssertionError: numpy array are different", + "tests/groupby/test_groupby.py::test_groupby_nonobject_dtype": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_numerical_stability_cumsum": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_numerical_stability_sum_mean[mean-values1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_numerical_stability_sum_mean[sum-values0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_one_row": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_overflow[222-uint]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int16-prod-2]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int16-sum-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int32-prod-2]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int32-sum-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int8-prod-2]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[Int8-sum-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt16-prod-2]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt16-sum-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt32-prod-2]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt32-sum-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt64-prod-2]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt64-sum-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt8-prod-2]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_sum_support_mask[UInt8-sum-3]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_with_Time_Grouper[ms]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_with_Time_Grouper[ns]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_with_Time_Grouper[s]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_with_Time_Grouper[us]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groupby_with_hier_columns": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groups_repr_truncates[1-{0: [0], ...}]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groups_repr_truncates[4-{0: [0], 1: [1], 2: [2], 3: [3], ...}]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groups_repr_truncates[5-{0: [0], 1: [1], 2: [2], 3: [3], 4: [4]}]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_groups_sort_dropna[False-False]": "AssertionError: numpy array are different", + "tests/groupby/test_groupby.py::test_groups_sort_dropna[False-True]": "AssertionError: numpy array are different", + "tests/groupby/test_groupby.py::test_indices_concatenation_order": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_ops_not_as_index[all]": 'AssertionError: Column name="a" are different', + "tests/groupby/test_groupby.py::test_ops_not_as_index[any]": 'AssertionError: Column name="a" are different', + "tests/groupby/test_groupby.py::test_ops_not_as_index[idxmin]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_ops_not_as_index[size]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_single_element_list_grouping[a]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby.py::test_single_element_listlike_level_grouping[level_arg0-False]": "AssertionError: assert ['x', 'y'] == [('x',), ('y',)]", + "tests/groupby/test_groupby.py::test_single_element_listlike_level_grouping[level_arg2-True]": "assert [1, 2] == [(1,), (2,)]", + "tests/groupby/test_groupby.py::test_wrap_aggregated_output_multindex": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmax-True-False-False-multi]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmax-True-False-False-single]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmax-True-True-False-multi]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmax-True-True-False-single]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmin-True-False-False-multi]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmin-True-False-False-single]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmin-True-True-False-multi]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_reducers[idxmin-True-True-False-single]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumcount-True-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumcount-True-False-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumcount-True-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumcount-True-True-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cummax-True-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cummax-True-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cummin-True-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cummin-True-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumprod-True-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumprod-True-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumsum-True-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[cumsum-True-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-False-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-False-False-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-False-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-False-True-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-True-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-True-False-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-True-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[diff-True-True-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[ngroup-True-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[ngroup-True-False-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[ngroup-True-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[ngroup-True-True-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[pct_change-True-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[pct_change-True-False-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[pct_change-True-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[pct_change-True-True-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[rank-True-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[rank-True-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-False-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-False-False-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-False-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-False-True-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-True-False-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-True-False-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-True-True-False]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_categorical_transformers[shift-True-True-True]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_groupby_apply_with_dropna_for_multi_index[dropna_false_has_nan]": "AssertionError: DataFrame.index are different", + "tests/groupby/test_groupby_dropna.py::test_groupby_apply_with_dropna_for_multi_index[dropna_false_no_nan]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_groupby_apply_with_dropna_for_multi_index[dropna_true_has_nan]": "AssertionError: DataFrame.index are different", + "tests/groupby/test_groupby_dropna.py::test_groupby_apply_with_dropna_for_multi_index[dropna_true_no_nan]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_dropna.py::test_groupby_nan_included": "AssertionError: numpy array are different", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_metadata": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[all-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[any-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[bfill-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[corrwith-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[corrwith-obj1]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[count-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[cumcount-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[cummax-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[cummin-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[cumprod-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[cumsum-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[diff-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[ffill-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[first-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[idxmax-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[idxmin-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[kurt-obj0]": "AttributeError: 'SubclassedDataFrame' object has no attribute 'dtype'. Did you mean: 'dtypes'?", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[last-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[max-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[mean-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[median-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[min-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[ngroup-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[nunique-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[pct_change-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[prod-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[quantile-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[rank-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[sem-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[shift-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[size-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[skew-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[std-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[sum-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_preserves_subclass[var-obj0]": "TODO: Add a reason for failure", + "tests/groupby/test_groupby_subclass.py::test_groupby_resample_preserves_subclass[DataFrame]": "TODO: Add a reason for failure", + "tests/groupby/test_grouping.py::TestGetGroup::test_get_group_grouped_by_tuple": "TODO: Add a reason for failure", + "tests/groupby/test_grouping.py::TestGetGroup::test_get_group_grouped_by_tuple_with_lambda": "TODO: Add a reason for failure", + "tests/groupby/test_grouping.py::TestGetGroup::test_groupby_with_single_column": "TODO: Add a reason for failure", + "tests/groupby/test_grouping.py::TestGrouping::test_evaluate_with_empty_groups[agg-expected1]": "TODO: Add a reason for failure", + "tests/groupby/test_grouping.py::TestGrouping::test_evaluate_with_empty_groups[apply-expected2]": "TODO: Add a reason for failure", + "tests/groupby/test_grouping.py::TestGrouping::test_groupby_apply_empty_with_group_keys_false": "AssertionError: DataFrame are different", + "tests/groupby/test_grouping.py::TestGrouping::test_groupby_multiindex_partial_indexing_equivalence": "TODO: Add a reason for failure", + "tests/groupby/test_grouping.py::TestGrouping::test_groupby_tuple_keys_handle_multiindex": "TypeError: unhashable type: 'list'", + "tests/groupby/test_grouping.py::TestGrouping::test_multiindex_columns_empty_level": "TODO: Add a reason for failure", + "tests/groupby/test_grouping.py::TestSelection::test_indices_grouped_by_tuple_with_lambda": "TODO: Add a reason for failure", + "tests/groupby/test_indexing.py::test_multiindex": "TODO: Add a reason for failure", + "tests/groupby/test_missing.py::test_groupby_column_index_name_lost_fill_funcs[bfill]": "AssertionError: Index are different", + "tests/groupby/test_missing.py::test_groupby_column_index_name_lost_fill_funcs[ffill]": "AssertionError: Index are different", + "tests/groupby/test_missing.py::test_indices_with_missing": "TODO: Add a reason for failure", + "tests/groupby/test_numeric_only.py::TestNumericOnly::test_extrema[max]": "Failed: DID NOT RAISE ", + "tests/groupby/test_numeric_only.py::TestNumericOnly::test_extrema[min]": "Failed: DID NOT RAISE ", + "tests/groupby/test_reductions.py::test_any": 'AssertionError: Column name="B" are different', + "tests/groupby/test_reductions.py::test_basic_aggregations[float32]": "AssertionError: Attributes of Series are different", + "tests/groupby/test_reductions.py::test_basic_aggregations[int32]": "AssertionError: Attributes of Series are different", + "tests/groupby/test_reductions.py::test_first_last_skipna[Float32-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Float32-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Float32-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Float32-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Float64-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Float64-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Float64-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Float64-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int16-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int16-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int16-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int16-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int32-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int32-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int32-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int32-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int64-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int64-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int64-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int64-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int8-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int8-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int8-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[Int8-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt16-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt16-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt16-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt16-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt32-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt32-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt32-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt32-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt64-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt64-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt64-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt64-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt8-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt8-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt8-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[UInt8-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[double[pyarrow]-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[double[pyarrow]-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[double[pyarrow]-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[double[pyarrow]-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float32-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float32-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float32-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float32-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float64-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float64-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float64-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float64-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float[pyarrow]-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float[pyarrow]-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float[pyarrow]-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[float[pyarrow]-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int16[pyarrow]-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int16[pyarrow]-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int16[pyarrow]-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int16[pyarrow]-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int32[pyarrow]-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int32[pyarrow]-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int32[pyarrow]-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int32[pyarrow]-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int64[pyarrow]-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int64[pyarrow]-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int64[pyarrow]-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int64[pyarrow]-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int8[pyarrow]-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int8[pyarrow]-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int8[pyarrow]-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[int8[pyarrow]-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint16[pyarrow]-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint16[pyarrow]-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint16[pyarrow]-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint16[pyarrow]-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint32[pyarrow]-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint32[pyarrow]-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint32[pyarrow]-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint32[pyarrow]-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint64[pyarrow]-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint64[pyarrow]-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint64[pyarrow]-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint64[pyarrow]-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint8[pyarrow]-False-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint8[pyarrow]-False-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint8[pyarrow]-True-False-first]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_first_last_skipna[uint8[pyarrow]-True-False-last]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_groupby_bool_aggs[True-any-vals12]": 'AssertionError: Column name="val" are different', + "tests/groupby/test_reductions.py::test_groupby_mean_no_overflow": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_groupby_sum_mincount_boolean[0]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float-idxmax]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float-idxmin]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float32-idxmax]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float32-idxmin]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float64-idxmax]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_idxmin_idxmax_extremes_skipna[False-float64-idxmin]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_masked_kleene_logic[any-False-data2]": "AssertionError: Series NA mask are different", + "tests/groupby/test_reductions.py::test_masked_kleene_logic[any-False-data3]": "AssertionError: Series NA mask are different", + "tests/groupby/test_reductions.py::test_mean_numeric_only_validates_bool": "Failed: DID NOT RAISE ", + "tests/groupby/test_reductions.py::test_mean_skipna[False-values0-float64-float64]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_mean_skipna[False-values3-timedelta64[ns]-timedelta64[ns]]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_multifunc_skipna[False-max-values32-float64-float64]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_multifunc_skipna[False-max-values35-timedelta64[ns]-timedelta64[ns]]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_multifunc_skipna[False-max-values36-datetime64[ns]-datetime64[ns]]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_multifunc_skipna[False-median-values40-float64-float64]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_multifunc_skipna[False-min-values24-float64-float64]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_multifunc_skipna[False-min-values27-timedelta64[ns]-timedelta64[ns]]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_multifunc_skipna[False-min-values28-datetime64[ns]-datetime64[ns]]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_multifunc_skipna[False-prod-values0-float64-float64]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_multifunc_skipna[True-prod-values3-float64-float64]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_nunique_with_NaT[key1-data1-True-expected1]": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_nunique_with_timegrouper": "TODO: Add a reason for failure", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-all-False-False-0]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-all-False-False-1]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-all-False-True-0]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-all-False-True-1]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-all-True-False-0]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-all-True-False-1]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-all-True-True-0]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-all-True-True-1]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-any-False-False-0]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-any-False-False-1]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-any-False-True-0]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[pyarrow]-any-False-True-1]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-all-False-False-0]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-all-False-False-1]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-all-False-True-0]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-all-False-True-1]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-all-True-False-0]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-all-True-False-1]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-all-True-True-0]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-all-True-True-1]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-any-False-False-0]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-any-False-False-1]": 'AssertionError: DataFrame.iloc[:, 0] (column name="b") values are different', + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-any-False-True-0]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=str[python]-any-False-True-1]": "AssertionError: Series values are different", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-all-False-False-0]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-all-False-False-1]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-all-True-False-0]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-all-True-False-1]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-any-False-False-0]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-any-False-False-1]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-any-True-False-0]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[pyarrow]-any-True-False-1]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-all-False-False-0]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-all-False-False-1]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-all-True-False-0]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-all-True-False-1]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-any-False-False-0]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-any-False-False-1]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-any-True-False-0]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_string_dtype_all_na[string=string[python]-any-True-False-1]": "AssertionError: DataFrame shape mismatch", + "tests/groupby/test_reductions.py::test_sum_skipna[False-values0-float64]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_sum_skipna[False-values3-timedelta64[ns]]": "AssertionError: Series are different", + "tests/groupby/test_reductions.py::test_sum_skipna_object[False]": "AssertionError: Series are different", + "tests/groupby/test_timegrouper.py::TestGroupBy::test_groupby_datetime64_32_bit": "TODO: Add a reason for failure", + "tests/groupby/test_timegrouper.py::TestGroupBy::test_groupby_with_timegrouper": "TODO: Add a reason for failure", + "tests/groupby/test_timegrouper.py::TestGroupBy::test_scalar_call_versus_list_call": "TODO: Add a reason for failure", + "tests/groupby/test_timegrouper.py::TestGroupBy::test_timegrouper_apply_return_type_series": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumcount-A]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumcount-keys1]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[cummax-A]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[cummax-keys1]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[cummin-A]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[cummin-keys1]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumprod-A]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumprod-keys1]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumsum-A]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[cumsum-keys1]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[size-A]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_as_index_no_change[size-keys1]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_cython_transform_series[cumprod-args0-]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_cython_transform_series[cumsum-args1-]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-1-2-False-False]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-1-2-False-True]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-1-2-True-False]": "AssertionError: Series are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-1-2-True-True]": "AssertionError: Series are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-1.0-2.0-False-False]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-1.0-2.0-False-True]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-1.0-2.0-True-False]": "AssertionError: Series are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-1.0-2.0-True-True]": "AssertionError: Series are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-foo-bar-False-False]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') NA mask are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-foo-bar-False-True]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') NA mask are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-foo-bar-True-False]": "AssertionError: Series NA mask are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[bfill-1-exp_vals3-foo-bar-True-True]": "AssertionError: Series NA mask are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-1-2-False-False]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-1-2-False-True]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-1-2-True-False]": "AssertionError: Series are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-1-2-True-True]": "AssertionError: Series are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-1.0-2.0-False-False]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-1.0-2.0-False-True]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-1.0-2.0-True-False]": "AssertionError: Series are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-1.0-2.0-True-True]": "AssertionError: Series are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-foo-bar-False-False]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') NA mask are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-foo-bar-False-True]": "AssertionError: DataFrame.iloc[:, 0] (column name='val') NA mask are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-foo-bar-True-False]": "AssertionError: Series NA mask are different", + "tests/groupby/transform/test_transform.py::test_group_fill_methods[ffill-1-exp_vals1-foo-bar-True-True]": "AssertionError: Series NA mask are different", + "tests/groupby/transform/test_transform.py::test_groupby_transform_timezone_column[first]": "AssertionError: Attributes of DataFrame.iloc[:, 2] (column name='max_end_time') are different", + "tests/groupby/transform/test_transform.py::test_groupby_transform_timezone_column[last]": "AssertionError: Attributes of DataFrame.iloc[:, 2] (column name='max_end_time') are different", + "tests/groupby/transform/test_transform.py::test_groupby_transform_with_datetimes[idxmax-values1]": "AssertionError: Attributes of Series are different", + "tests/groupby/transform/test_transform.py::test_groupby_transform_with_datetimes[idxmin-values0]": "AssertionError: Attributes of Series are different", + "tests/groupby/transform/test_transform.py::test_nan_in_cumsum_group_label": "AssertionError: Attributes of Series are different", + "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[False-idxmax]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[False-idxmin]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[False-size]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[True-idxmax]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[True-idxmin]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_null_group_str_reducer[True-size]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_null_group_str_transformer[False-cumcount]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_null_group_str_transformer[True-cumcount]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_pct_change[DataFrame--1-None]": "AssertionError: DataFrame.iloc[:, 0] (column name='vals') are different", + "tests/groupby/transform/test_transform.py::test_pct_change[DataFrame-1-None]": "AssertionError: DataFrame.iloc[:, 0] (column name='vals') are different", + "tests/groupby/transform/test_transform.py::test_pct_change[Series--1-None]": "AssertionError: Series are different", + "tests/groupby/transform/test_transform.py::test_pct_change[Series-1-None]": "AssertionError: Series are different", + "tests/groupby/transform/test_transform.py::test_transform_cumcount": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_transform_fast": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_transform_mixed_type": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_transform_numeric_ret[count-a-expected0]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_transform_numeric_ret[count-cols1-expected1]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_transform_numeric_ret[size-a-expected0]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_transform_numeric_ret[size-cols1-expected1]": "TODO: Add a reason for failure", + "tests/groupby/transform/test_transform.py::test_transform_transformation_func[cumcount]": "TODO: Add a reason for failure", + "tests/indexes/base_class/test_reshape.py::TestReshape::test_insert_missing[Decimal]": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_astype.py::TestAstype::test_categorical_date_roundtrip[False]": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_astype.py::TestAstype::test_categorical_date_roundtrip[True]": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_category.py::TestCategoricalIndex2::test_engine_type[int16-Int16Engine]": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_category.py::TestCategoricalIndex2::test_engine_type[int32-Int32Engine]": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_category.py::TestCategoricalIndex2::test_engine_type[int64-Int64Engine]": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_category.py::TestCategoricalIndex2::test_engine_type[int8-Int8Engine]": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_category.py::TestCategoricalIndex2::test_remove_maintains_order": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_category.py::TestCategoricalIndex::test_ensure_copied_data": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_category.py::TestCategoricalIndex::test_is_monotonic[data0-non_lexsorted_data0]": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_category.py::TestCategoricalIndex::test_is_monotonic[data1-non_lexsorted_data1]": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_constructors.py::TestCategoricalIndexConstructors::test_construction": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_constructors.py::TestCategoricalIndexConstructors::test_construction_disallows_scalar": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_equals.py::TestEquals::test_equals_non_category": "AssertionError: assert not True", + "tests/indexes/categorical/test_fillna.py::TestFillNA::test_fillna_copies_with_no_nas": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_indexing.py::TestContains::test_contains_na_dtype[False]": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_indexing.py::TestContains::test_contains_nan": "TODO: Add a reason for failure", + "tests/indexes/categorical/test_indexing.py::TestWhere::test_where_non_categories": "TODO: Add a reason for failure", + "tests/indexes/datetimelike_/test_drop_duplicates.py::TestDropDuplicatesDatetimeIndex::test_drop_duplicates_metadata[-2h]": "AssertionError: assert == None", + "tests/indexes/datetimelike_/test_drop_duplicates.py::TestDropDuplicatesDatetimeIndex::test_drop_duplicates_metadata[-3D]": "AssertionError: assert == None", + "tests/indexes/datetimelike_/test_drop_duplicates.py::TestDropDuplicatesDatetimeIndex::test_drop_duplicates_metadata[-3s]": "AssertionError: assert == None", + "tests/indexes/datetimelike_/test_drop_duplicates.py::TestDropDuplicatesDatetimeIndex::test_drop_duplicates_metadata[2h]": "AssertionError: assert == None", + "tests/indexes/datetimelike_/test_drop_duplicates.py::TestDropDuplicatesDatetimeIndex::test_drop_duplicates_metadata[2min]": "AssertionError: assert == None", + "tests/indexes/datetimelike_/test_drop_duplicates.py::TestDropDuplicatesDatetimeIndex::test_drop_duplicates_metadata[3D]": "AssertionError: assert == None", + "tests/indexes/datetimelike_/test_drop_duplicates.py::TestDropDuplicatesDatetimeIndex::test_drop_duplicates_metadata[D]": "AssertionError: assert == None", + "tests/indexes/datetimelike_/test_drop_duplicates.py::TestDropDuplicatesDatetimeIndex::test_drop_duplicates_metadata[h]": "AssertionError: assert == None", + "tests/indexes/datetimelike_/test_drop_duplicates.py::TestDropDuplicatesDatetimeIndex::test_drop_duplicates_metadata[min]": "AssertionError: assert == None", + "tests/indexes/datetimelike_/test_drop_duplicates.py::TestDropDuplicatesDatetimeIndex::test_drop_duplicates_metadata[s]": "AssertionError: assert == None", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values[DatetimeIndex]": "TODO: Add a reason for failure", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values[TimedeltaIndex]": "TODO: Add a reason for failure", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_with_freq_datetimeindex[idx0]": "AttributeError: 'NoneType' object has no attribute 'n'", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_with_freq_periodindex2[idx1]": "TODO: Add a reason for failure", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_datetimeindex['Asia/Tokyo'-index_dates0-expected_dates0]": "AssertionError: numpy array are different", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_datetimeindex['Asia/Tokyo'-index_dates1-expected_dates1]": "AssertionError: numpy array are different", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_datetimeindex['US/Eastern'-index_dates0-expected_dates0]": "AssertionError: numpy array are different", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_datetimeindex['US/Eastern'-index_dates1-expected_dates1]": "AssertionError: numpy array are different", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_datetimeindex[None-index_dates0-expected_dates0]": "TODO: Add a reason for failure", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_datetimeindex[None-index_dates1-expected_dates1]": "TODO: Add a reason for failure", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_periodindex[idx4-expected4]": "TODO: Add a reason for failure", + "tests/indexes/datetimelike_/test_sort_values.py::TestSortValues::test_sort_values_without_freq_timedeltaindex": "TODO: Add a reason for failure", + "tests/indexes/datetimelike_/test_sort_values.py::test_order_stability_compat": "TODO: Add a reason for failure", + "tests/indexes/datetimes/methods/test_astype.py::TestDatetimeIndex::test_astype": "TODO: Add a reason for failure", + "tests/indexes/datetimes/methods/test_astype.py::TestDatetimeIndex::test_astype_datetime64": "TODO: Add a reason for failure", + "tests/indexes/datetimes/methods/test_astype.py::TestDatetimeIndex::test_astype_str_freq_and_tz": "AssertionError: Index are different", + "tests/indexes/datetimes/methods/test_astype.py::TestDatetimeIndex::test_astype_str_tz_and_name": "AssertionError: Index are different", + "tests/indexes/datetimes/methods/test_astype.py::TestDatetimeIndex::test_astype_tzaware_to_tzaware": "AssertionError: assert None == ", + "tests/indexes/datetimes/methods/test_astype.py::TestDatetimeIndex::test_astype_uint": "TODO: Add a reason for failure", + "tests/indexes/datetimes/methods/test_factorize.py::TestDatetimeIndexFactorize::test_factorize_dst[index]": "ValueError: Inferred frequency None from passed values does not conform to passed frequency h", + "tests/indexes/datetimes/methods/test_factorize.py::TestDatetimeIndexFactorize::test_factorize_dst[series]": "AssertionError: numpy array are different", + "tests/indexes/datetimes/methods/test_factorize.py::TestDatetimeIndexFactorize::test_factorize_tz['US/Eastern'-index]": "AssertionError: numpy array are different", + "tests/indexes/datetimes/methods/test_factorize.py::TestDatetimeIndexFactorize::test_factorize_tz['US/Eastern'-series]": "AssertionError: numpy array are different", + "tests/indexes/datetimes/methods/test_insert.py::TestInsert::test_insert_empty_preserves_freq[None]": "AssertionError: assert is None", + "tests/indexes/datetimes/methods/test_isocalendar.py::test_dti_timestamp_isocalendar_fields": "TODO: Add a reason for failure", + "tests/indexes/datetimes/methods/test_isocalendar.py::test_isocalendar_returns_correct_values_close_to_new_year_with_tz": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='year') are different", + "tests/indexes/datetimes/methods/test_round.py::TestDatetimeIndexRound::test_round_daily": "TODO: Add a reason for failure", + "tests/indexes/datetimes/methods/test_shift.py::TestDatetimeIndexShift::test_dti_shift_across_dst[ms]": "AssertionError: Series.index are different", + "tests/indexes/datetimes/methods/test_shift.py::TestDatetimeIndexShift::test_dti_shift_across_dst[ns]": "AssertionError: Series.index are different", + "tests/indexes/datetimes/methods/test_shift.py::TestDatetimeIndexShift::test_dti_shift_across_dst[s]": "AssertionError: Series.index are different", + "tests/indexes/datetimes/methods/test_shift.py::TestDatetimeIndexShift::test_dti_shift_across_dst[us]": "AssertionError: Series.index are different", + "tests/indexes/datetimes/methods/test_shift.py::TestDatetimeIndexShift::test_dti_shift_int[ms]": "TypeError: unsupported operand type(s) for *: 'int' and 'DateOffset'", + "tests/indexes/datetimes/methods/test_shift.py::TestDatetimeIndexShift::test_dti_shift_int[ns]": "TypeError: unsupported operand type(s) for *: 'int' and 'DateOffset'", + "tests/indexes/datetimes/methods/test_shift.py::TestDatetimeIndexShift::test_dti_shift_int[s]": "TypeError: unsupported operand type(s) for *: 'int' and 'DateOffset'", + "tests/indexes/datetimes/methods/test_shift.py::TestDatetimeIndexShift::test_dti_shift_int[us]": "TypeError: unsupported operand type(s) for *: 'int' and 'DateOffset'", + "tests/indexes/datetimes/methods/test_to_period.py::TestToPeriod::test_to_period_tz[US/Eastern]": "TypeError: Argument 'freq' has incorrect type (expected str, got DateOffset)", + "tests/indexes/datetimes/methods/test_to_period.py::TestToPeriod::test_to_period_tz_utc_offset_consistency[Etc/GMT+1]": "TypeError: Argument 'freq' has incorrect type (expected str, got DateOffset)", + "tests/indexes/datetimes/methods/test_to_period.py::TestToPeriod::test_to_period_tz_utc_offset_consistency[Etc/GMT-1]": "TypeError: Argument 'freq' has incorrect type (expected str, got DateOffset)", + "tests/indexes/datetimes/methods/test_tz_convert.py::TestTZConvert::test_dti_tz_convert_dst": "ValueError: Inferred frequency None from passed values does not conform to passed frequency h", + "tests/indexes/datetimes/methods/test_tz_localize.py::TestTZLocalize::test_dti_tz_localize[]": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/methods/test_tz_localize.py::TestTZLocalize::test_dti_tz_localize_nonexistent_raise_coerce": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/methods/test_tz_localize.py::TestTZLocalize::test_dti_tz_localize_utc_conversion[tz2]": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/methods/test_unique.py::test_index_unique2": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_arithmetic.py::TestDatetimeIndexArithmetic::test_add_dti_day": "TypeError: unsupported operand type(s) for +: 'DatetimeArray' and 'DateOffset'", + "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_constructor_coverage": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_constructor_datetime64_tzformat[W-SUN]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_constructor_dtype": "AssertionError: Index are different", + "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_constructor_dtype_tz_mismatch_raises": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_constructor_start_end_with_tz[America/Los_Angeles]": "NotImplementedError: freq is not implemented yet", + "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_constructor_start_end_with_tz[None]": "NotImplementedError: freq is not implemented yet", + "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_constructor_start_end_with_tz[tz2]": "NotImplementedError: freq is not implemented yet", + "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_constructor_start_end_with_tz[tz3]": "NotImplementedError: freq is not implemented yet", + "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_dti_from_tzaware_datetime[tz1]": "AssertionError: assert False", + "tests/indexes/datetimes/test_constructors.py::TestDatetimeIndex::test_integer_values_and_tz_interpreted_as_utc": "AssertionError: Index are different", + "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_constructor_int64_nocopy": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_dti_constructor_small_int[int16]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_dti_constructor_small_int[int32]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_dti_constructor_small_int[int64]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_dti_constructor_small_int[int8]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_dti_constructor_small_int[int]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_dti_constructor_small_int[uint16]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_dti_constructor_small_int[uint32]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_dti_constructor_small_int[uint64]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_dti_constructor_small_int[uint8]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_constructors.py::TestTimeSeries::test_explicit_none_freq": "AssertionError: assert is None", + "tests/indexes/datetimes/test_date_range.py::TestDateRangeNonTickFreq::test_date_range_freqstr_matches_offset[W-SUN-offset2]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_date_range.py::TestDateRangeTZ::test_date_range_ambiguous_endpoint[Europe/London]": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/test_date_range.py::TestDateRangeTZ::test_date_range_ambiguous_endpoint[dateutil/Europe/London]": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/test_date_range.py::TestDateRangeTZ::test_date_range_nonexistent_endpoint[US/Pacific-option4-2019-03-10 03:00]": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/test_date_range.py::TestDateRangeTZ::test_date_range_nonexistent_endpoint[US/Pacific-shift_backward-2019-03-10 01:00]": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/test_date_range.py::TestDateRangeTZ::test_date_range_nonexistent_endpoint[US/Pacific-shift_forward-2019-03-10 03:00]": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/test_date_range.py::TestDateRangeTZ::test_date_range_nonexistent_endpoint[dateutil/US/Pacific-shift_backward-2019-03-10 01:00]": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/test_date_range.py::TestDateRangeTZ::test_date_range_nonexistent_endpoint[dateutil/US/Pacific-shift_forward-2019-03-10 03:00]": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/test_date_range.py::TestDateRangeTZ::test_date_range_with_fixed_tz": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_date_range.py::TestDateRangeTZ::test_date_range_with_fixedoffset_noname": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_construct_over_dst[ms]": "ValueError: Inferred frequency None from passed values does not conform to passed frequency h", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_construct_over_dst[ns]": "ValueError: Inferred frequency None from passed values does not conform to passed frequency h", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_construct_over_dst[s]": "ValueError: Inferred frequency None from passed values does not conform to passed frequency h", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_construct_over_dst[us]": "ValueError: Inferred frequency None from passed values does not conform to passed frequency h", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_construct_with_different_start_end_string_format[ms]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_construct_with_different_start_end_string_format[ns]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_construct_with_different_start_end_string_format[s]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_construct_with_different_start_end_string_format[us]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_date_range_convenience_periods[ms]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_date_range_convenience_periods[ns]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_date_range_convenience_periods[s]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_date_range_convenience_periods[us]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_date_range_depr_lowercase_frequency[2W-2w]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_date_range_depr_lowercase_frequency[2W-WED-2w-wed]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_date_range_nat": "Failed: DID NOT RAISE ", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_freq_dateoffset_with_relateivedelta_nanos": "AssertionError: Index are different", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_range_tz_dateutil": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_date_range.py::TestDateRanges::test_range_tz_pytz": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_date_range.py::TestGenRangeGeneration::test_precision_finer_than_offset": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_datetime.py::TestDatetimeIndex::test_misc_coverage": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_formats.py::TestDatetimeIndexRendering::test_dti_representation[ms]": "assert 'DatetimeInde...US/Eastern]')' == 'DatetimeInde...', freq=None)'", + "tests/indexes/datetimes/test_formats.py::TestDatetimeIndexRendering::test_dti_representation[ns]": "assert 'DatetimeInde...US/Eastern]')' == 'DatetimeInde...', freq=None)'", + "tests/indexes/datetimes/test_formats.py::TestDatetimeIndexRendering::test_dti_representation[s]": "assert 'DatetimeInde...US/Eastern]')' == 'DatetimeInde...', freq=None)'", + "tests/indexes/datetimes/test_formats.py::TestDatetimeIndexRendering::test_dti_representation[us]": "assert 'DatetimeInde...US/Eastern]')' == 'DatetimeInde...', freq=None)'", + "tests/indexes/datetimes/test_formats.py::TestDatetimeIndexRendering::test_dti_representation_to_series[ms]": "AssertionError: assert '0 2011-01..., US/Eastern]' == '0 2011-01-..., US/Eastern]'", + "tests/indexes/datetimes/test_formats.py::TestDatetimeIndexRendering::test_dti_representation_to_series[ns]": "AssertionError: assert '0 2011-01..., US/Eastern]' == '0 2011-01-..., US/Eastern]'", + "tests/indexes/datetimes/test_formats.py::TestDatetimeIndexRendering::test_dti_representation_to_series[s]": "AssertionError: assert '0 2011-01..., US/Eastern]' == '0 2011-01-..., US/Eastern]'", + "tests/indexes/datetimes/test_formats.py::TestDatetimeIndexRendering::test_dti_representation_to_series[us]": "AssertionError: assert '0 2011-01..., US/Eastern]' == '0 2011-01-..., US/Eastern]'", + "tests/indexes/datetimes/test_indexing.py::TestGetItem::test_getitem[Asia/Tokyo]": "AssertionError: assert None == ", + "tests/indexes/datetimes/test_indexing.py::TestGetItem::test_getitem[None]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_indexing.py::TestTake::test_dti_take_dont_lose_meta[US/Eastern]": "AssertionError: assert None == ", + "tests/indexes/datetimes/test_indexing.py::TestTake::test_take[Asia/Tokyo]": "AssertionError: assert == ", + "tests/indexes/datetimes/test_indexing.py::TestTake::test_take[None]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_indexing.py::TestWhere::test_where_invalid_dtypes": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_join.py::TestJoin::test_join_preserves_freq[None]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_join.py::TestJoin::test_join_preserves_freq[US/Pacific]": "AssertionError: assert None == ", + "tests/indexes/datetimes/test_join.py::TestJoin::test_join_self[inner]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_join.py::TestJoin::test_join_self[left]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_join.py::TestJoin::test_join_self[outer]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_join.py::TestJoin::test_join_self[right]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[2018-12-02 21:52:00+00:00-2018-12-02 21:50:00+00:00]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[2018-12-02 21:52:00+00:00-start1]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[2018-12-02 21:52:00+00:00-start2]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end1-2018-12-02 21:50:00+00:00]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end1-start1]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end1-start2]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end2-2018-12-02 21:50:00+00:00]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end2-start1]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_getitem_with_datestring_with_UTC_offset[end2-start2]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_partial_slice_daily": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_partial_slice_minutely": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_partial_slicing_dataframe": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_return_type_doesnt_depend_on_monotonicity": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_scalar_compat.py::TestDatetimeIndexOps::test_dti_time2[datetime64[ns, CET]]": "AssertionError: numpy array are different", + "tests/indexes/datetimes/test_scalar_compat.py::TestDatetimeIndexOps::test_dti_time2[datetime64[ns, EST]]": "AssertionError: numpy array are different", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_difference_freq[False]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_difference_freq[None]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[False-Asia/Tokyo]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[False-None]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[False-US/Eastern]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[False-dateutil/US/Pacific]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[None-Asia/Tokyo]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[None-None]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[None-US/Eastern]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection[None-dateutil/US/Pacific]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection_empty['Asia/Tokyo'-min]": "AssertionError: assert None == ", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_intersection_empty['US/Eastern'-min]": "AssertionError: assert None == ", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_setops_preserve_freq[Asia/Tokyo]": "AssertionError: assert None == ", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_setops_preserve_freq[None]": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_setops_preserve_freq[US/Eastern]": "AssertionError: assert None == ", + "tests/indexes/datetimes/test_setops.py::TestDatetimeIndexSetOps::test_union_freq_infer": "TODO: Add a reason for failure", + "tests/indexes/datetimes/test_timezones.py::TestDatetimeIndexTimezones::test_date_range_localize2[ms]": "assert nan == 3", + "tests/indexes/datetimes/test_timezones.py::TestDatetimeIndexTimezones::test_date_range_localize2[ns]": "assert nan == 3", + "tests/indexes/datetimes/test_timezones.py::TestDatetimeIndexTimezones::test_date_range_localize2[s]": "assert nan == 3", + "tests/indexes/datetimes/test_timezones.py::TestDatetimeIndexTimezones::test_date_range_localize2[us]": "assert nan == 3", + "tests/indexes/datetimes/test_timezones.py::TestDatetimeIndexTimezones::test_date_range_localize[ms]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_timezones.py::TestDatetimeIndexTimezones::test_date_range_localize[ns]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_timezones.py::TestDatetimeIndexTimezones::test_date_range_localize[s]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_timezones.py::TestDatetimeIndexTimezones::test_date_range_localize[us]": "AssertionError: Index are different", + "tests/indexes/datetimes/test_timezones.py::TestDatetimeIndexTimezones::test_dti_convert_tz_aware_datetime_datetime[tz0]": "AssertionError: assert zoneinfo.ZoneInfo(key='US/Eastern') is datetime.timezone.utc", + "tests/indexes/datetimes/test_timezones.py::TestDatetimeIndexTimezones::test_dti_convert_tz_aware_datetime_datetime[tz1]": "AssertionError: assert False", + "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index0-int64]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index0-uint64]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index1-int64]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index1-uint64]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index3-int64]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index3-uint64]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index4-int64]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestDatetimelikeSubtype::test_subtype_integer[index4-uint64]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_datetimelike[index0-datetime64[ns]]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_datetimelike[index0-timedelta64[ns]]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_datetimelike[index1-datetime64[ns]]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_datetimelike[index1-timedelta64[ns]]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_integer[int64]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_integer[uint64]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_astype.py::TestFloatSubtype::test_subtype_integer_errors": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestClassConstructors::test_constructor_pass_closed[breaks0]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestClassConstructors::test_constructor_pass_closed[breaks2]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestClassConstructors::test_constructor_pass_closed[breaks3]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestClassConstructors::test_constructor_pass_closed[breaks4]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromArrays::test_constructor_pass_closed[breaks0]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromArrays::test_constructor_pass_closed[breaks1]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromArrays::test_constructor_pass_closed[breaks2]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromArrays::test_constructor_pass_closed[breaks3]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromArrays::test_constructor_pass_closed[breaks4]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_constructor_pass_closed[breaks0]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_constructor_pass_closed[breaks1]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_constructor_pass_closed[breaks2]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_constructor_pass_closed[breaks3]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_constructor_pass_closed[breaks4]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromBreaks::test_generic_errors": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromTuples::test_constructor_pass_closed[breaks0]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromTuples::test_constructor_pass_closed[breaks2]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromTuples::test_constructor_pass_closed[breaks3]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::TestFromTuples::test_constructor_pass_closed[breaks4]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_constructors.py::test_ea_dtype[Float64]": "https://github.com/pandas-dev/pandas/issues/64297", + "tests/indexes/interval/test_constructors.py::test_ea_dtype[float64[pyarrow]]": "https://github.com/pandas-dev/pandas/issues/64297", + "tests/indexes/interval/test_indexing.py::TestGetIndexer::test_get_indexer_categorical_with_nans": "TODO: Add a reason for failure", + "tests/indexes/interval/test_indexing.py::TestGetIndexer::test_get_indexer_datetime": "TODO: Add a reason for failure", + "tests/indexes/interval/test_indexing.py::TestGetLoc::test_get_loc_datetimelike_nonoverlapping[datetime64[us, US/Eastern]]": "TypeError: Cannot interpret 'datetime64[us, US/Eastern]' as a data type", + "tests/indexes/interval/test_indexing.py::TestPutmask::test_putmask_dt64[US/Pacific]": "TypeError: Cannot interpret 'datetime64[us, US/Pacific]' as a data type", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_comparison": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_ensure_copied_data[both]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_ensure_copied_data[left]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_ensure_copied_data[neither]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_ensure_copied_data[right]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_insert[data0]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[both-breaks4]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[left-breaks4]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[neither-breaks4]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_length[right-breaks4]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8[datetime64[us, US/Eastern]]": "TypeError: Cannot interpret 'datetime64[us, US/Eastern]' as a data type", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_errors[Interval-datetime64[us, US/Eastern]-datetime64[us]]": "TypeError: Cannot interpret 'datetime64[us, US/Eastern]' as a data type", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_errors[Interval-datetime64[us, US/Eastern]-timedelta64[us]]": "TypeError: Cannot interpret 'datetime64[us, US/Eastern]' as a data type", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_errors[IntervalIndex-datetime64[us, US/Eastern]-datetime64[us]]": "TypeError: Cannot interpret 'datetime64[us, US/Eastern]' as a data type", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_errors[IntervalIndex-datetime64[us, US/Eastern]-timedelta64[us]]": "TypeError: Cannot interpret 'datetime64[us, US/Eastern]' as a data type", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_errors[IntervalIndex-datetime64[us]-datetime64[us, US/Eastern]]": "TypeError: Cannot interpret 'datetime64[us, US/Eastern]' as a data type", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_errors[IntervalIndex-timedelta64[us]-datetime64[us, US/Eastern]]": "TypeError: Cannot interpret 'datetime64[us, US/Eastern]' as a data type", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_monotonic[both]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_monotonic[left]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_monotonic[neither]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_monotonic[right]": "TODO: Add a reason for failure", + "tests/indexes/interval/test_interval.py::test_dir": "TODO: Add a reason for failure", + "tests/indexes/multi/test_analytics.py::test_map_dictlike[1]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_astype.py::test_astype": "TODO: Add a reason for failure", + "tests/indexes/multi/test_compat.py::test_inplace_mutation_resets_values": "TODO: Add a reason for failure", + "tests/indexes/multi/test_constructors.py::test_create_index_existing_name": "TODO: Add a reason for failure", + "tests/indexes/multi/test_constructors.py::test_from_arrays_respects_none_names": "TODO: Add a reason for failure", + "tests/indexes/multi/test_constructors.py::test_from_frame_dtype_fidelity": "TODO: Add a reason for failure", + "tests/indexes/multi/test_constructors.py::test_multiindex_inference_consistency": "TODO: Add a reason for failure", + "tests/indexes/multi/test_conversion.py::test_to_frame_column_rangeindex": "RuntimeError: Fast-to-slow transfer is blocked", + "tests/indexes/multi/test_conversion.py::test_to_frame_dtype_fidelity": "TODO: Add a reason for failure", + "tests/indexes/multi/test_copy.py::test_copy": "TODO: Add a reason for failure", + "tests/indexes/multi/test_copy.py::test_copy_deep_false_retains_id": "TODO: Add a reason for failure", + "tests/indexes/multi/test_copy.py::test_shallow_copy": "TODO: Add a reason for failure", + "tests/indexes/multi/test_copy.py::test_view": "TODO: Add a reason for failure", + "tests/indexes/multi/test_drop.py::test_drop_not_lexsorted[False]": "AssertionError: assert not True", + "tests/indexes/multi/test_drop.py::test_drop_not_lexsorted[True]": "AssertionError: assert not True", + "tests/indexes/multi/test_drop.py::test_droplevel_list": "TODO: Add a reason for failure", + "tests/indexes/multi/test_drop.py::test_droplevel_multiindex_one_level": "TODO: Add a reason for failure", + "tests/indexes/multi/test_duplicates.py::test_duplicate_multiindex_codes": "TODO: Add a reason for failure", + "tests/indexes/multi/test_equivalence.py::test_equals_multi": "TODO: Add a reason for failure", + "tests/indexes/multi/test_equivalence.py::test_equals_op": "TODO: Add a reason for failure", + "tests/indexes/multi/test_equivalence.py::test_is_": "TODO: Add a reason for failure", + "tests/indexes/multi/test_equivalence.py::test_multiindex_compare": "TODO: Add a reason for failure", + "tests/indexes/multi/test_formats.py::TestRepr::test_rjust": "assert \"MultiIndex([... 'b', 'dti'])\" == \"MultiIndex([... 'b', 'dti'])\"", + "tests/indexes/multi/test_formats.py::TestRepr::test_tuple_width": "assert \"MultiIndex([...2', 'dti_3'])\" == \"MultiIndex([...2', 'dti_3'])\"", + "tests/indexes/multi/test_get_set.py::test_set_levels_categorical[False]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_get_set.py::test_set_levels_categorical[True]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_get_set.py::test_set_name_methods": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::TestContains::test_contains": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::TestContains::test_contains_with_missing_value": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer_crossing_levels": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer_kwarg_validation": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer_methods": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer_nan": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::TestGetIndexer::test_get_indexer_three_or_more_levels": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::TestGetLoc::test_get_loc": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::TestGetLoc::test_get_loc_duplicates2": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::TestGetLoc::test_get_loc_past_lexsort_depth[False]": "assert 0 == slice(0, 1, None)", + "tests/indexes/multi/test_indexing.py::TestGetLoc::test_get_loc_past_lexsort_depth[True]": "assert 0 == slice(0, 1, None)", + "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[Decimal]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[NAType]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[NaTType]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[NoneType]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[float0]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::test_get_indexer_for_multiindex_with_nans[float1]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::test_getitem": "AssertionError: assert False", + "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_all[Index]": "AssertionError: MultiIndex level [0] are different", + "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_all[list]": "AssertionError: MultiIndex level [0] are different", + "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_single[Index]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_indexing.py::test_getitem_bool_index_single[list]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_indexing.py::test_getitem_group_select": "TODO: Add a reason for failure", + "tests/indexes/multi/test_indexing.py::test_pyint_engine[1-uint8]": "ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()", + "tests/indexes/multi/test_indexing.py::test_pyint_engine[10-object]": "ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()", + "tests/indexes/multi/test_indexing.py::test_pyint_engine[2-uint16]": "ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()", + "tests/indexes/multi/test_indexing.py::test_pyint_engine[4-uint32]": "ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()", + "tests/indexes/multi/test_indexing.py::test_pyint_engine[8-uint64]": "ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()", + "tests/indexes/multi/test_integrity.py::test_labels_dtypes": "TODO: Add a reason for failure", + "tests/indexes/multi/test_integrity.py::test_metadata_immutable": "TODO: Add a reason for failure", + "tests/indexes/multi/test_isin.py::test_isin_level_kwarg": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Float32-0]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Float32-5]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Float64-0]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Float64-5]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Int16-0]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Int16-5]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Int32-0]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Int32-5]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Int64-0]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Int64-5]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Int8-0]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[Int8-5]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[UInt16-0]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[UInt16-5]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[UInt32-0]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[UInt32-5]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[UInt64-0]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[UInt64-5]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[UInt8-0]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes[UInt8-5]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_dtypes_all_nan[Float32]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_join.py::test_join_dtypes_all_nan[Float64]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_join.py::test_join_dtypes_all_nan[Int16]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_join.py::test_join_dtypes_all_nan[Int32]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_join.py::test_join_dtypes_all_nan[Int64]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_join.py::test_join_dtypes_all_nan[Int8]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_join.py::test_join_dtypes_all_nan[UInt16]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_join.py::test_join_dtypes_all_nan[UInt32]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_join.py::test_join_dtypes_all_nan[UInt64]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_join.py::test_join_dtypes_all_nan[UInt8]": "AssertionError: MultiIndex are different", + "tests/indexes/multi/test_join.py::test_join_index_levels": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_midx_ea": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_midx_string": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_multi_return_indexers": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_overlapping_interval_level": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_self[inner]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_self[left]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_self[outer]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_join.py::test_join_self[right]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_missing.py::test_dropna": "TODO: Add a reason for failure", + "tests/indexes/multi/test_missing.py::test_nulls": "TODO: Add a reason for failure", + "tests/indexes/multi/test_names.py::test_copy_names": "TODO: Add a reason for failure", + "tests/indexes/multi/test_names.py::test_setting_names_from_levels_raises": "TODO: Add a reason for failure", + "tests/indexes/multi/test_reindex.py::test_reindex_base": "TODO: Add a reason for failure", + "tests/indexes/multi/test_reshape.py::test_append_names_match[c-None]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_setops.py::test_difference[False]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_setops.py::test_difference[None]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_setops.py::test_intersection_non_object[False]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_setops.py::test_intersection_non_object[None]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_sorting.py::test_argsort": "TODO: Add a reason for failure", + "tests/indexes/multi/test_sorting.py::test_numpy_argsort": "TODO: Add a reason for failure", + "tests/indexes/multi/test_sorting.py::test_reconstruct_remove_unused": "TODO: Add a reason for failure", + "tests/indexes/multi/test_sorting.py::test_reconstruct_sort": "TODO: Add a reason for failure", + "tests/indexes/multi/test_sorting.py::test_remove_unused_levels_large[datetime64[D]-str]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_sorting.py::test_remove_unused_levels_large[int64-int64]": "TODO: Add a reason for failure", + "tests/indexes/multi/test_sorting.py::test_remove_unused_levels_with_nan": "assert '[Index(['a',... name='id2')]' == '[['a', nan], [4]]'", + "tests/indexes/multi/test_sorting.py::test_unsortedindex_doc_examples[False]": "Failed: DID NOT RAISE ", + "tests/indexes/multi/test_sorting.py::test_unsortedindex_doc_examples[True]": "Failed: DID NOT RAISE ", + "tests/indexes/numeric/test_astype.py::TestAstype::test_astype_float64_to_uint64": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_invalid": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_nan": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_nearest_decreasing[backfill-expected1]": "AssertionError: numpy array are different", + "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_nearest_decreasing[nearest-expected2]": "AssertionError: numpy array are different", + "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_nearest_decreasing[pad-expected0]": "AssertionError: numpy array are different", + "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_nearest_error": "Failed: DID NOT RAISE ", + "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_indexer_numeric_index_boolean_target[get_indexer-range]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_equals_numeric": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[int16]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[int32]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[int64]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[int8]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[int]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[uint16]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[uint32]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[uint64]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestFloatNumericIndex::test_type_coercion_fail[uint8]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestIntNumericIndex::test_constructor[int16]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestIntNumericIndex::test_constructor[int32]": "TODO: Add a reason for failure", + "tests/indexes/numeric/test_numeric.py::TestIntNumericIndex::test_constructor[int64]": "TODO: Add a reason for failure", + "tests/indexes/period/test_constructors.py::TestPeriodIndex::test_constructor_fromarraylike": "TODO: Add a reason for failure", + "tests/indexes/period/test_join.py::TestJoin::test_join_self[inner]": "TODO: Add a reason for failure", + "tests/indexes/period/test_join.py::TestJoin::test_join_self[left]": "TODO: Add a reason for failure", + "tests/indexes/period/test_join.py::TestJoin::test_join_self[outer]": "TODO: Add a reason for failure", + "tests/indexes/period/test_join.py::TestJoin::test_join_self[right]": "TODO: Add a reason for failure", + "tests/indexes/period/test_partial_slicing.py::TestPeriodIndex::test_range_slice_outofbounds[date_range]": "AssertionError: (, None)", + "tests/indexes/ranges/test_indexing.py::TestGetIndexer::test_get_indexer_limit": "AssertionError: numpy array are different", + "tests/indexes/ranges/test_indexing.py::TestGetIndexer::test_get_indexer_missing_value_casting_string_dtype": "AssertionError: numpy array are different", + "tests/indexes/ranges/test_join.py::TestJoin::test_join_self[inner]": "TODO: Add a reason for failure", + "tests/indexes/ranges/test_join.py::TestJoin::test_join_self[left]": "TODO: Add a reason for failure", + "tests/indexes/ranges/test_join.py::TestJoin::test_join_self[outer]": "TODO: Add a reason for failure", + "tests/indexes/ranges/test_join.py::TestJoin::test_join_self[right]": "TODO: Add a reason for failure", + "tests/indexes/ranges/test_range.py::TestRangeIndex::test_append[indices6-expected6]": "AssertionError: Index are different", + "tests/indexes/ranges/test_range.py::TestRangeIndex::test_append[indices7-expected7]": "AssertionError: Index are different", + "tests/indexes/ranges/test_range.py::TestRangeIndex::test_cache": "TODO: Add a reason for failure", + "tests/indexes/ranges/test_range.py::test_append_one_nonempty_preserve_step": "AssertionError: Index are different", + "tests/indexes/ranges/test_range.py::test_getitem_boolmask_all_false": "AssertionError: Index are different", + "tests/indexes/ranges/test_range.py::test_getitem_boolmask_all_true": "AssertionError: Index are different", + "tests/indexes/ranges/test_range.py::test_getitem_boolmask_returns_rangeindex": "AssertionError: Index are different", + "tests/indexes/ranges/test_range.py::test_getitem_empty_return_rangeindex": "AssertionError: Index are different", + "tests/indexes/ranges/test_range.py::test_getitem_integers_return_rangeindex": "AssertionError: Index are different", + "tests/indexes/ranges/test_range.py::test_take_1_value_returns_rangeindex[rng0-exp_rng0]": "AssertionError: Index are different", + "tests/indexes/ranges/test_range.py::test_take_1_value_returns_rangeindex[rng1-exp_rng1]": "AssertionError: Index are different", + "tests/indexes/ranges/test_range.py::test_take_1_value_returns_rangeindex[rng2-exp_rng2]": "AssertionError: Index are different", + "tests/indexes/ranges/test_range.py::test_take_return_rangeindex": "AssertionError: Index are different", + "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_intersection[None]": "AssertionError: Index are different", + "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=-10, step=-1)-RangeIndex(start=-10, stop=-20, step=-1)-RangeIndex(start=-19, stop=1, step=1)-RangeIndex(start=0, stop=-20, step=-1)]": "TODO: Add a reason for failure", + "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=-100, step=-1)-RangeIndex(start=0, stop=-50, step=-3)-RangeIndex(start=-99, stop=1, step=1)-RangeIndex(start=0, stop=-100, step=-1)]": "TODO: Add a reason for failure", + "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=-100, step=-2)-RangeIndex(start=-100, stop=50, step=102)-RangeIndex(start=-100, stop=4, step=2)-expected_notsorted15]": "TODO: Add a reason for failure", + "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=-100, step=-5)-RangeIndex(start=5, stop=-100, step=-20)-RangeIndex(start=-95, stop=10, step=5)-expected_notsorted10]": "TODO: Add a reason for failure", + "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=-11, step=-1)-RangeIndex(start=1, stop=-12, step=-4)-RangeIndex(start=-11, stop=2, step=1)-expected_notsorted11]": "TODO: Add a reason for failure", + "tests/indexes/ranges/test_setops.py::TestRangeIndexSetOps::test_union_sorted[RangeIndex(start=0, stop=10, step=5)-RangeIndex(start=-5, stop=-6, step=-20)-RangeIndex(start=-5, stop=10, step=5)-expected_notsorted18]": "TODO: Add a reason for failure", + "tests/indexes/ranges/test_setops.py::test_range_difference": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[bool-dtype]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[bool-object]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[categorical]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[complex128]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[complex64]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[datetime-tz]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[datetime]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[empty]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[float32]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[float64]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[int16]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[int32]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[int64]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[int8]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[interval]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[mi-with-dt64tz-level]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[multi]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[nullable_bool]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[nullable_float]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[nullable_int]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[nullable_uint]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[object]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[period]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[range]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[repeats]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[string-pyarrow]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[string-python]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[string]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[timedelta]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[tuples]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[uint16]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[uint32]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[uint64]": "TODO: Add a reason for failure", + "tests/indexes/test_any_index.py::TestConversion::test_to_series_with_arguments[uint8]": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_cached_properties_not_settable": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_constructor_dtypes_datetime[None-Index-values]": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_equals_op_mismatched_multiindex_raises[index0]": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_is_": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_is_object[string-True]": "AssertionError: assert True is False", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NAType-float32]": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NAType-float64]": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NAType-float]": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NoneType-float32]": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NoneType-float64]": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_float64[NoneType-float]": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_object[NAType-float0]": "AssertionError: numpy array are different", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_object[NAType-float1]": "AssertionError: numpy array are different", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_object[NoneType-float0]": "AssertionError: numpy array are different", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_object[NoneType-float1]": "AssertionError: numpy array are different", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_object[float0-float0]": "AssertionError: numpy array are different", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_object[float0-float1]": "AssertionError: numpy array are different", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_object[float1-float0]": "AssertionError: numpy array are different", + "tests/indexes/test_base.py::TestIndex::test_isin_nan_common_object[float1-float1]": "AssertionError: numpy array are different", + "tests/indexes/test_base.py::TestIndex::test_map_defaultdict": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_str_attribute_raises[index2]": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_str_bool_return": "TODO: Add a reason for failure", + "tests/indexes/test_base.py::TestIndex::test_tab_completion[index1-False]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_constructor_non_hashable_name[range]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[bool-dtype-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[bool-dtype-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[bool-object-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[bool-object-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[categorical-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[categorical-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[complex128-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[complex128-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[complex64-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[complex64-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[datetime-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[datetime-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[datetime-tz-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[datetime-tz-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[empty-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[empty-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[float32-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[float32-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[float64-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[float64-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[int16-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[int16-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[int32-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[int32-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[int64-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[int64-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[int8-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[int8-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[interval-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[interval-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_bool-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_bool-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_float-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_float-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_int-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_int-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_uint-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[nullable_uint-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[object-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[object-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[period-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[period-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[range-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[range-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[repeats-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[repeats-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[string-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[string-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[string-pyarrow-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[string-pyarrow-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[string-python-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[string-python-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[timedelta-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[timedelta-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[uint16-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[uint16-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[uint32-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[uint32-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[uint64-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[uint64-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[uint8-None]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::TestCommon::test_to_frame[uint8-new_name]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::test_ndarray_compat_properties[multi]": "TODO: Add a reason for failure", + "tests/indexes/test_common.py::test_ndarray_compat_properties[tuples]": "TODO: Add a reason for failure", + "tests/indexes/test_datetimelike.py::TestDatetimeLike::test_argsort_matches_array[simple_index1]": "TODO: Add a reason for failure", + "tests/indexes/test_datetimelike.py::TestDatetimeLike::test_argsort_matches_array[simple_index2]": "TODO: Add a reason for failure", + "tests/indexes/test_index_new.py::TestIndexConstructorInference::test_constructor_datetimes_mixed_tzs": "AssertionError: Index are different", + "tests/indexes/test_indexing.py::TestGetIndexer::test_get_indexer_base[multi]": "TODO: Add a reason for failure", + "tests/indexes/test_indexing.py::TestGetIndexer::test_get_indexer_base[tuples]": "TODO: Add a reason for failure", + "tests/indexes/test_indexing.py::TestTake::test_take_indexer_type": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arccos]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arccosh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arcsin]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arcsinh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arctan]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-arctanh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-cos]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-cosh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-exp2]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-exp]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-expm1]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-log10]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-log1p]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-log2]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-log]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-sin]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-sinh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-tan]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex128-tanh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arccos]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arccosh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arcsin]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arcsinh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arctan]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-arctanh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-cos]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-cosh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-exp2]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-exp]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-expm1]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-log10]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-log1p]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-log2]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-log]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-sin]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-sinh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-tan]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[complex64-tanh]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-arccosh]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-arcsinh]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-cos]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-exp]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-expm1]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-log10]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-rad2deg]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-sin]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-sinh]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-tan]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-arcsinh]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-arctan]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-cos]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-log10]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-log2]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-sin]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-tan]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-tanh]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-arccosh]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-arcsinh]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-cos]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-exp]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-expm1]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-log10]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-rad2deg]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-sin]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-sinh]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-tan]": "AssertionError: Index are different", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_out[interval]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_out[multi]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_out[tuples]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_reductions[multi-maximum]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_reductions[multi-minimum]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_reductions[tuples-maximum]": "TODO: Add a reason for failure", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_reductions[tuples-minimum]": "TODO: Add a reason for failure", + "tests/indexes/test_old_base.py::TestBase::test_equals_op[simple_index13]": "TODO: Add a reason for failure", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage_doesnt_trigger_engine[range]": "assert 0 > 0", + "tests/indexes/test_old_base.py::TestBase::test_nulls[multi]": "TODO: Add a reason for failure", + "tests/indexes/test_old_base.py::TestBase::test_nulls[tuples]": "TODO: Add a reason for failure", + "tests/indexes/test_old_base.py::TestBase::test_numpy_argsort[categorical]": "TODO: Add a reason for failure", + "tests/indexes/test_old_base.py::TestBase::test_numpy_argsort[interval]": "TODO: Add a reason for failure", + "tests/indexes/test_old_base.py::TestBase::test_numpy_argsort[multi]": "TODO: Add a reason for failure", + "tests/indexes/test_old_base.py::TestBase::test_numpy_argsort[tuples]": "TODO: Add a reason for failure", + "tests/indexes/test_setops.py::test_intersection_mutation_safety": "AssertionError: assert 'changed' == 'original'", + "tests/indexes/test_setops.py::test_multiindex_intersection_mutation_safety": "AssertionError: assert FrozenList(['..., 'changed2']) == ['x', 'y']", + "tests/indexes/test_setops.py::test_multiindex_union_mutation_safety": "AssertionError: assert FrozenList(['..., 'changed2']) == ['x', 'y']", + "tests/indexes/test_setops.py::test_setop_with_categorical[bool-dtype-False-union]": "TODO: Add a reason for failure", + "tests/indexes/test_setops.py::test_setop_with_categorical[bool-dtype-None-union]": "TODO: Add a reason for failure", + "tests/indexes/test_setops.py::test_setop_with_categorical[empty-False-union]": "AssertionError: Index are different", + "tests/indexes/test_setops.py::test_setop_with_categorical[empty-None-union]": "AssertionError: Index are different", + "tests/indexes/test_setops.py::test_setop_with_categorical[nullable_bool-False-union]": "TODO: Add a reason for failure", + "tests/indexes/test_setops.py::test_setop_with_categorical[nullable_bool-None-union]": "TODO: Add a reason for failure", + "tests/indexes/test_setops.py::test_union_dtypes[names0-datetime64[ns, CET]-float64-object]": "AssertionError: assert datetime64[ns, CET] == 'object'", + "tests/indexes/test_setops.py::test_union_dtypes[names0-datetime64[ns, CET]-int64-object]": "AssertionError: assert datetime64[ns, CET] == 'object'", + "tests/indexes/test_setops.py::test_union_dtypes[names0-datetime64[ns, CET]-uint64-object]": "AssertionError: assert datetime64[ns, CET] == 'object'", + "tests/indexes/test_setops.py::test_union_dtypes[names0-datetime64[ns]-float64-object]": "AssertionError: assert dtype('0]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_getitem.py::test_series_getitem_multiindex[0-expected0-1]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_getitem.py::test_series_getitem_multiindex[1-expected1-0]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_getitem.py::test_series_getitem_multiindex[1-expected1-1]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_iloc.py::test_indexing_ambiguity_bug_1678": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestKeyErrorsWithMultiIndex::test_missing_key_combination": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_int_slice": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_multiindex_missing_label_raises": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-Index]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-Series]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-list]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-ndarray]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-set]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Index-tuple]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-Index]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-Series]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-list]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-ndarray]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-set]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[Series-tuple]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-Index]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-Series]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-list]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-ndarray]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-set]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[list-tuple]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-Index]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-Series]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-list]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-ndarray]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-set]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[set-tuple]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-Index]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-Series]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-list]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-ndarray]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-set]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_getitem_nested_indexer[tuple-tuple]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_multiindex_indexer_none": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_multiindex_missing_label_raises": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::TestMultiIndexLoc::test_loc_no_second_level_index": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::test_getitem_str_slice": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::test_loc_get_scalar_casting_to_float": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::test_loc_getitem_drops_levels_for_one_row_dataframe": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::test_loc_getitem_duplicates_multiindex_missing_indexers[indexer6-pos6]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::test_loc_getitem_index_differently_ordered_slice_none_duplicates[indexer0]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::test_loc_getitem_int_raises_exception": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_loc.py::test_loc_with_mi_indexer": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_multiindex.py::TestMultiIndexBasic::test_rename_multiindex_with_duplicates": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_partial.py::TestMultiIndexPartial::test_getitem_partial_column_select": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_frame_getitem_setitem_boolean": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_frame_getitem_setitem_multislice": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_frame_setitem_multi_column2": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_loc_getitem_setitem_slice_integers[DataFrame]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_loc_getitem_setitem_slice_integers[Series]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_set_column_scalar_with_loc": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_setitem.py::TestMultiIndexSetItem::test_setitem_multiindex": "TypeError: Invalid value '2' for dtype 'str'. Value should be a string or missing value, got 'int' instead.", + "tests/indexing/multiindex/test_setitem.py::test_frame_setitem_view_direct": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[int-loc0-iloc0]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[int-loc3-iloc3]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[int-loc4-iloc4]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[int-loc7-iloc7]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[str-loc12-iloc12]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_loc_slice_negative_stepsize[str-loc8-iloc8]": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_per_axis_per_level_doc_examples": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_per_axis_per_level_getitem": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_slice.py::TestMultiIndexSlicers::test_per_axis_per_level_setitem": "TODO: Add a reason for failure", + "tests/indexing/multiindex/test_sorted.py::TestMultiIndexSorted::test_argsort_with_na": "TODO: Add a reason for failure", + "tests/indexing/test_at.py::test_at_timezone": "TODO: Add a reason for failure", + "tests/indexing/test_categorical.py::TestCategoricalIndex::test_getitem_row_categorical_with_nan_bool": "AssertionError: Series are different", + "tests/indexing/test_categorical.py::TestCategoricalIndex::test_ix_categorical_index_non_unique[False]": "AssertionError: DataFrame.index are different", + "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[False-idx_values17]": "TODO: Add a reason for failure", + "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[False-idx_values28]": "TODO: Add a reason for failure", + "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[None-idx_values17]": "TODO: Add a reason for failure", + "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[None-idx_values28]": "TODO: Add a reason for failure", + "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[True-idx_values17]": "TODO: Add a reason for failure", + "tests/indexing/test_categorical.py::TestCategoricalIndex::test_loc_getitem_with_non_string_categories[True-idx_values28]": "TODO: Add a reason for failure", + "tests/indexing/test_coercion.py::TestFillnaSeriesCoercion::test_fillna_float64[index-True-object]": "TODO: Add a reason for failure", + "tests/indexing/test_coercion.py::TestFillnaSeriesCoercion::test_fillna_float64[series-True-object]": "TODO: Add a reason for failure", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[datetime64-timedelta64[us]-series]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[datetime64tz1-timedelta64[us]-series]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[float64-bool-dict]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[float64-datetime64[ns]-series]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[float64-timedelta64[us]-series]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[int64-datetime64[ns]-series]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[int64-timedelta64[us]-series]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[object-datetime64[ns]-series]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[object-timedelta64[us]-series]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series[timedelta64-datetime64[ns]-series]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series_datetime_datetime[series-datetime64[ns]-datetime64[ns, US/Eastern]]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series_datetime_tz[series-datetime64[ns, US/Eastern]-float64]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series_datetime_tz[series-datetime64[ns, US/Eastern]-int64]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series_datetime_tz[series-datetime64[ns, US/Eastern]-object]": "AssertionError: Series are different", + "tests/indexing/test_coercion.py::TestReplaceSeriesCoercion::test_replace_series_datetime_tz[series-datetime64[ns, US/Eastern]-timedelta64[us]]": "AssertionError: Series are different", + "tests/indexing/test_datetime.py::TestDatetimeIndex::test_indexing_with_datetime_tz": "AssertionError: Attributes of Series are different", + "tests/indexing/test_iloc.py::TestILocErrors::test_iloc_getitem_setitem_fancy_exceptions[False]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestILocErrors::test_iloc_getitem_setitem_fancy_exceptions[True]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_identity_slice_returns_new_object": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_assign_series_to_df_cell": "ValueError: Must have equal len keys and value when setting with an iterable", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_array": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_bool": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_doc_issue": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_int_single_ea_block_view": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_slice": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_getitem_slice_negative_step_ea_block": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_mask": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_axis_argument[False]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_axis_argument[True]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_categorical_updates_inplace": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_custom_object": "TypeError: len() of unsized object", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[DataFrame-array-False]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[DataFrame-index-False]": "assert False", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[DataFrame-series-False]": "assert False", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[Series-array-False]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[Series-index-False]": "assert False", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_ea_inplace[Series-series-False]": "assert False", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_empty_frame_raises_with_3d_ndarray": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key0]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key1]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key2]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key3]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key4]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[iloc-key5]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key0]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key1]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key2]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key3]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key4]": "TODO: Add a reason for failure", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_fullcol_categorical[loc-key5]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::TestFancy::test_index_type_coercion[getitem]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::TestFancy::test_index_type_coercion[loc]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::TestFancy::test_multi_assign_broadcasting_rhs": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::TestFancy::test_setitem_list": "ValueError: Must have equal len keys and value when setting with an iterable", + "tests/indexing/test_indexing.py::TestFancy::test_setitem_ndarray_3d[empty-DataFrame-iloc]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::TestFancy::test_setitem_ndarray_3d[empty-DataFrame-loc]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[iloc-value0]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[iloc-value1]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[iloc-value3]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[loc-value0]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[loc-value1]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[loc-value3]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[setitem-value0]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[setitem-value1]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_scalar_setitem_series_with_nested_value_length1[setitem-value3]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_ser_tup_indexer_exceeds_dimensions[iloc-ser0-keys0]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_ser_tup_indexer_exceeds_dimensions[iloc-ser1-keys1]": "TODO: Add a reason for failure", + "tests/indexing/test_indexing.py::test_ser_tup_indexer_exceeds_dimensions[loc-ser0-keys0]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLabelSlicing::test_loc_getitem_label_slice_period_timedelta[index0]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLoc::test_loc_getitem_single_boolean_arg[obj1-False-exp1]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLoc::test_loc_getitem_single_boolean_arg[obj2-False-exp2]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocBaseIndependent::test_identity_slice_returns_new_object": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_reverse_assignment": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_setitem_consistency_empty": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_setitem_consistency_slice_column_len": "AttributeError: 'tuple' object has no attribute 'lower'", + "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_setitem_empty_append_expands_rows": "AssertionError: DataFrame are different", + "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_setitem_empty_append_expands_rows_mixed_dtype": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_setitem_frame_with_inverted_slice": 'AssertionError: Column name="A" are different', + "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_setitem_slice": "Failed: DID NOT RAISE ", + "tests/indexing/test_loc.py::TestLocBaseIndependent::test_loc_uint64_disallow_negative": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocBooleanMask::test_loc_setitem_mask_with_datetimeindex_tz[UTC]": "ValueError: setting an array element with a sequence.", + "tests/indexing/test_loc.py::TestLocBooleanMask::test_loc_setitem_ndframe_values_alignment": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocListlike::test_loc_named_index": "AssertionError: DataFrame.index are different", + "tests/indexing/test_loc.py::TestLocSeries::test_loc_set_multiple_items_in_multiple_new_columns": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/indexing/test_loc.py::TestLocSeries::test_loc_set_series_to_multiple_columns[df0-row_index0-col_index0-expected_df0]": 'AssertionError: Column name="A" are different', + "tests/indexing/test_loc.py::TestLocSeries::test_loc_set_series_to_multiple_columns[df1-row_index1-col_index1-expected_df1]": 'AssertionError: Column name="A" are different', + "tests/indexing/test_loc.py::TestLocSeries::test_loc_set_series_to_multiple_columns[df2-row_index2-col_index2-expected_df2]": 'AssertionError: Column name="A" are different', + "tests/indexing/test_loc.py::TestLocSeries::test_loc_set_series_to_multiple_columns[df3-row_index3-col_index3-expected_df3]": 'AssertionError: Column name="A" are different', + "tests/indexing/test_loc.py::TestLocSeries::test_loc_set_series_to_multiple_columns[df4-row_index4-col_index4-expected_df4]": 'AssertionError: Column name="A" are different', + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_datetime_keys_cast[np.datetime64]": 'AssertionError: Column name="one" are different', + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_datetime_keys_cast[to_datetime64]": 'AssertionError: Column name="one" are different', + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_datetime_keys_cast[to_pydatetime]": 'AssertionError: Column name="one" are different', + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[bool-dtype-False]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[bool-dtype-True]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[nullable_bool-False]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[nullable_bool-True]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[object-False]": 'AssertionError: Column name="0" are different', + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[object-True]": 'AssertionError: Column name="0" are different', + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[string-False]": 'AssertionError: Column name="0" are different', + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[string-True]": 'AssertionError: Column name="0" are different', + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[string-pyarrow-False]": 'AssertionError: Column name="0" are different', + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[string-pyarrow-True]": 'AssertionError: Column name="0" are different', + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[string-python-False]": 'AssertionError: Column name="0" are different', + "tests/indexing/test_loc.py::TestLocSetitemWithExpansion::test_loc_setitem_with_expansion_nonunique_index[string-python-True]": 'AssertionError: Column name="0" are different', + "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_drops_level": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_getitem_multilevel_index_order[index-keys2-expected2]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_getitem_multilevel_index_order[index-keys3-expected3]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_getitem_multilevel_index_order[index-keys4-expected4]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_getitem_multilevel_index_order[index-keys5-expected5]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_getitem_multilevel_index_order[index-keys6-expected6]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_multiindex_null_slice_na_level": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::TestLocWithMultiIndex::test_loc_set_nan_in_categorical_series[Float64]": "TODO: Add a reason for failure", + "tests/indexing/test_loc.py::test_loc_getitem_multiindex_tuple_level": "AssertionError: DataFrame Expected type , found instead", + "tests/indexing/test_na_indexing.py::test_series_mask_boolean[True-list-mask0-values0-object]": "TODO: Add a reason for failure", + "tests/indexing/test_na_indexing.py::test_series_mask_boolean[True-list-mask1-values0-object]": "TODO: Add a reason for failure", + "tests/indexing/test_na_indexing.py::test_series_mask_boolean[True-list-mask2-values0-object]": "TODO: Add a reason for failure", + "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_empty_frame_setitem_index_name_retained": "AssertionError: DataFrame.index are different", + "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_partial_set_empty_frame": "Failed: DID NOT RAISE ", + "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_partial_set_empty_frame2": "TODO: Add a reason for failure", + "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_partial_set_empty_frame3": 'AssertionError: Column name="foo" are different', + "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_partial_set_empty_frame5": "AssertionError: DataFrame.index are different", + "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_partial_set_empty_frame_empty_consistencies": "AssertionError: Attributes of DataFrame.iloc[:, 1] (column name='y') are different", + "tests/indexing/test_partial.py::TestEmptyFrameSetitemExpansion::test_partial_set_empty_frame_row": "AssertionError: Attributes of Series are different", + "tests/indexing/test_partial.py::TestPartialSetting::test_loc_with_list_of_strings_representing_datetimes[DataFrame-idx1-labels1-expected_idx1]": "AssertionError: (None, <4 * Days>)", + "tests/indexing/test_partial.py::TestPartialSetting::test_partial_setting2": "TypeError: unsupported operand type(s) for +: 'Timestamp' and 'DateOffset'", + "tests/indexing/test_scalar.py::TestMultiIndexScalar::test_multiindex_at_get_one_level": "TODO: Add a reason for failure", + "tests/interchange/test_impl.py::test_multi_chunk_column": "TODO: Add a reason for failure", + "tests/internals/test_api.py::test_create_block_manager_from_blocks_deprecated": "TODO: Add a reason for failure", + "tests/internals/test_api.py::test_deprecations[Block]": "TODO: Add a reason for failure", + "tests/internals/test_api.py::test_deprecations[ExtensionBlock]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestBlock::test_delete_datetimelike": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestBlockManager::test_categorical_block_pickle": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestBlockManager::test_copy": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestBlockManager::test_non_unique_pickle[a,a,a:f8]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestBlockManager::test_non_unique_pickle[a: f8; a: i8]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestBlockManager::test_pickle": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[0-float64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[0-int64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[0-uint64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[1-float64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[1-int64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[1-uint64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[2-float64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[2-int64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[2-uint64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[3-float64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[3-int64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[3-uint64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[4-float64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[4-int64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[4-uint64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[5-float64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[5-int64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[5-uint64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[6-float64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[6-int64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[6-uint64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[7-float64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[7-int64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_interval_can_hold_element[7-uint64]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[0]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[1]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[2]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[3]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[4]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[5]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[6]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestCanHoldElement::test_period_can_hold_element[7]": "TODO: Add a reason for failure", + "tests/internals/test_internals.py::TestShouldStore::test_should_store_categorical": "TODO: Add a reason for failure", + "tests/io/excel/test_odswriter.py::test_cell_value_type[1-float-value-1]": "TODO: Add a reason for failure", + "tests/io/excel/test_odswriter.py::test_cell_value_type[1.5-float-value-1.5]": "TODO: Add a reason for failure", + "tests/io/excel/test_odswriter.py::test_cell_value_type[True-boolean-boolean-value-true]": "TODO: Add a reason for failure", + "tests/io/excel/test_odswriter.py::test_cell_value_type[test string-string-string-value-test string]": "TODO: Add a reason for failure", + "tests/io/excel/test_odswriter.py::test_cell_value_type[value4-date-date-value-2010-10-10T10:10:10]": "TODO: Add a reason for failure", + "tests/io/excel/test_odswriter.py::test_cell_value_type[value5-date-date-value-2010-10-10]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[('calamine', '.ods')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[('calamine', '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[('calamine', '.xlsb')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[('calamine', '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[('calamine', '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[('odf', '.ods')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[('openpyxl', '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[('openpyxl', '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[('xlrd', '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[(None, '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[(None, '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestExcelFileRead::test_read_datetime_multiindex[(None, '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='(Timestamp('2020-02-29 00:00:00'), Timestamp('2020-0...", + "tests/io/excel/test_readers.py::TestReaders::test_dtype_backend[('calamine', '.ods')-pyarrow]": "AssertionError: Attributes of DataFrame.iloc[:, 3] (column name='d') are different", + "tests/io/excel/test_readers.py::TestReaders::test_dtype_backend[('calamine', '.xlsm')-pyarrow]": "AssertionError: Attributes of DataFrame.iloc[:, 3] (column name='d') are different", + "tests/io/excel/test_readers.py::TestReaders::test_dtype_backend[('calamine', '.xlsx')-pyarrow]": "AssertionError: Attributes of DataFrame.iloc[:, 3] (column name='d') are different", + "tests/io/excel/test_readers.py::TestReaders::test_dtype_backend[('odf', '.ods')-pyarrow]": "AssertionError: Attributes of DataFrame.iloc[:, 3] (column name='d') are different", + "tests/io/excel/test_readers.py::TestReaders::test_dtype_backend[('openpyxl', '.xlsm')-pyarrow]": "AssertionError: Attributes of DataFrame.iloc[:, 3] (column name='d') are different", + "tests/io/excel/test_readers.py::TestReaders::test_dtype_backend[('openpyxl', '.xlsx')-pyarrow]": "AssertionError: Attributes of DataFrame.iloc[:, 3] (column name='d') are different", + "tests/io/excel/test_readers.py::TestReaders::test_dtype_backend[(None, '.xlsm')-pyarrow]": "AssertionError: Attributes of DataFrame.iloc[:, 3] (column name='d') are different", + "tests/io/excel/test_readers.py::TestReaders::test_dtype_backend[(None, '.xlsx')-pyarrow]": "AssertionError: Attributes of DataFrame.iloc[:, 3] (column name='d') are different", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('calamine', '.ods')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('calamine', '.xls')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('calamine', '.xlsb')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('calamine', '.xlsm')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('calamine', '.xlsx')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('odf', '.ods')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('openpyxl', '.xlsm')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('openpyxl', '.xlsx')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('pyxlsb', '.xlsb')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[('xlrd', '.xls')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[(None, '.xls')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[(None, '.xlsm')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_engine_used[(None, '.xlsx')]": "TODO: Add a reason for failure", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[('calamine', '.ods')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[('calamine', '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[('calamine', '.xlsb')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[('calamine', '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[('calamine', '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[('odf', '.ods')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[('openpyxl', '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[('openpyxl', '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[('pyxlsb', '.xlsb')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[('xlrd', '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[(None, '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[(None, '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_empty[(None, '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='D') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[('calamine', '.ods')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[('calamine', '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[('calamine', '.xlsb')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[('calamine', '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[('calamine', '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[('odf', '.ods')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[('openpyxl', '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[('openpyxl', '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[('pyxlsb', '.xlsb')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[('xlrd', '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[(None, '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[(None, '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_index_col_str[(None, '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='B') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[('calamine', '.ods')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[('calamine', '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[('calamine', '.xlsb')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[('calamine', '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[('calamine', '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[('odf', '.ods')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[('openpyxl', '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[('openpyxl', '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[('pyxlsb', '.xlsb')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[('xlrd', '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[(None, '.xls')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[(None, '.xlsm')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_blank_with_header[(None, '.xlsx')]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/excel/test_readers.py::TestReaders::test_read_excel_ods_nested_xml[('odf', '.ods')-gh-36122-expected1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='got 2nd sa') are different", + "tests/io/excel/test_style.py::test_format_hierarchical_rows_periodindex[False]": "AttributeError: _compute. Did you mean: 'compare'?", + "tests/io/excel/test_style.py::test_format_hierarchical_rows_periodindex[True]": "AttributeError: _compute. Did you mean: 'compare'?", + "tests/io/excel/test_style.py::test_format_hierarchical_rows_periodindex[columns]": "AttributeError: _compute. Did you mean: 'compare'?", + "tests/io/excel/test_writers.py::TestExcelWriter::test_excel_date_datetime_format[odf-.ods]": "TODO: Add a reason for failure", + "tests/io/excel/test_writers.py::TestExcelWriter::test_excel_date_datetime_format[openpyxl-.xlsm]": "TODO: Add a reason for failure", + "tests/io/excel/test_writers.py::TestExcelWriter::test_excel_date_datetime_format[openpyxl-.xlsx]": "TODO: Add a reason for failure", + "tests/io/excel/test_writers.py::TestExcelWriter::test_excel_date_datetime_format[xlsxwriter-.xlsx]": "TODO: Add a reason for failure", + "tests/io/excel/test_writers.py::TestExcelWriter::test_to_excel_empty_multiindex_both_axes[odf-.ods]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('A', 'B')') are different", + "tests/io/excel/test_writers.py::TestExcelWriter::test_to_excel_empty_multiindex_both_axes[openpyxl-.xlsm]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('A', 'B')') are different", + "tests/io/excel/test_writers.py::TestExcelWriter::test_to_excel_empty_multiindex_both_axes[openpyxl-.xlsx]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('A', 'B')') are different", + "tests/io/excel/test_writers.py::TestExcelWriter::test_to_excel_empty_multiindex_both_axes[xlsxwriter-.xlsx]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('A', 'B')') are different", + "tests/io/excel/test_writers.py::TestExcelWriterEngineTests::test_register_writer": "TODO: Add a reason for failure", + "tests/io/excel/test_writers.py::TestFSPath::test_excelfile_fspath": "TODO: Add a reason for failure", + "tests/io/formats/style/test_format.py::test_format_clear[format_index-_display_funcs_columns-kwargs2]": "TODO: Add a reason for failure", + "tests/io/formats/style/test_html.py::test_from_custom_template_style": "TODO: Add a reason for failure", + "tests/io/formats/style/test_html.py::test_from_custom_template_table": "TODO: Add a reason for failure", + "tests/io/formats/style/test_html.py::test_replaced_css_class_names": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::TestStyler::test_caption": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::TestStyler::test_non_reducing_multi_slice_on_multiindex[slice_7]": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::TestStyler::test_table_styles": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::TestStyler::test_uuid": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::test_clear": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::test_copy[False-False-False]": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::test_copy[False-False-True]": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::test_copy[False-True-False]": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::test_copy[False-True-True]": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::test_copy[True-False-False]": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::test_copy[True-False-True]": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::test_copy[True-True-False]": "TODO: Add a reason for failure", + "tests/io/formats/style/test_style.py::test_copy[True-True-True]": "TODO: Add a reason for failure", + "tests/io/formats/test_format.py::TestDataFrameFormatting::test_datetimeindex_highprecision[2017-01-01 23:59:59.999999999]": "AssertionError: assert '2017-01-01 23:59:59.999999999' in ' A\\n0 2017-01-01 23:59:59.99999...", + "tests/io/formats/test_format.py::TestDataFrameFormatting::test_datetimeindex_highprecision[2017-01-01 23:59:59.99999999]": "AssertionError: assert '2017-01-01 23:59:59.99999999' in ' A\\n0 2017-01-01 23:59:59.999999...", + "tests/io/formats/test_format.py::TestDataFrameFormatting::test_datetimeindex_highprecision[2017-01-01 23:59:59.9999999]": "AssertionError: assert '2017-01-01 23:59:59.9999999' in ' A\\n0 2017-01-01 23:59:59.999999\\...", + "tests/io/formats/test_format.py::TestDataFrameFormatting::test_datetimelike_frame": "AssertionError: assert ' ... x 2 columns]' == ' ... x 2 columns]'", + "tests/io/formats/test_format.py::TestDataFrameFormatting::test_info_repr": "TODO: Add a reason for failure", + "tests/io/formats/test_format.py::TestDataFrameFormatting::test_info_repr_max_cols": "TODO: Add a reason for failure", + "tests/io/formats/test_format.py::TestSeriesFormatting::test_datetimeindex_highprecision[2017-01-01 23:59:59.999999999]": "AssertionError: assert '2017-01-01 23:59:59.999999999' in '0 2017-01-01 23:59:59.999999\\n1 2017-01-02 23:59:59.9...", + "tests/io/formats/test_format.py::TestSeriesFormatting::test_datetimeindex_highprecision[2017-01-01 23:59:59.99999999]": "AssertionError: assert '2017-01-01 23:59:59.99999999' in '0 2017-01-01 23:59:59.999999\\n1 2017-01-02 23:59:59.99...", + "tests/io/formats/test_format.py::TestSeriesFormatting::test_datetimeindex_highprecision[2017-01-01 23:59:59.9999999]": "AssertionError: assert '2017-01-01 23:59:59.9999999' in '0 2017-01-01 23:59:59.999999\\n1 2017-01-02 23:59:59.999...", + "tests/io/formats/test_format.py::TestSeriesFormatting::test_east_asian_unicode_series": "TODO: Add a reason for failure", + "tests/io/formats/test_format.py::TestSeriesFormatting::test_freq_name_separation": "AssertionError: assert 'Freq: D, Name: 0' in '2000-01-01 0.189053\n2000-01-02 -0.522748\n2000-01-03 -0.413064\\...", + "tests/io/formats/test_ipython_compat.py::TestTableSchemaRepr::test_publishes": "TODO: Add a reason for failure", + "tests/io/formats/test_ipython_compat.py::TestTableSchemaRepr::test_publishes_not_implemented": "TODO: Add a reason for failure", + "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_compression_dict[tar]": "TODO: Add a reason for failure", + "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_date_format": "TODO: Add a reason for failure", + "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_different_datetime_formats": "TODO: Add a reason for failure", + "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_float_ea_nan_distinguish[False]": "AssertionError: assert 'a,b\\n,c\\n,c\\n3.0,c\\n' == 'a,b\\nnan,c\\n,c\\n3.0,c\\n'", + "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_float_ea_nan_distinguish_series[False]": "AssertionError: assert ',x\\na,1.0\\nb,\\nc,\\n' == ',x\\na,1.0\\nb,\\nc,nan\\n'", + "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_multi_index": "TODO: Add a reason for failure", + "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_na_rep": "TODO: Add a reason for failure", + "tests/io/formats/test_to_csv.py::TestToCSV::test_to_csv_with_single_column": "TODO: Add a reason for failure", + "tests/io/formats/test_to_string.py::TestDataFrameToString::test_to_string": "AssertionError: assert ' ...878547 199?!' == ' ... x 2 columns]'", + "tests/io/formats/test_to_string.py::TestDataFrameToString::test_to_string_truncate": "TODO: Add a reason for failure", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_nullable_float_to_string[Float32]": "AssertionError: assert '0 0.0\n1...type: Float32' == '0 0.0\n1....0\n2 '", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_nullable_float_to_string[Float64]": "AssertionError: assert '0 0.0\n1...type: Float64' == '0 0.0\n1....0\n2 '", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_nullable_int_to_string[Int16]": "AssertionError: assert '0 0\n1...ndtype: Int16' == '0 0\n1... 1\n2 '", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_nullable_int_to_string[Int32]": "AssertionError: assert '0 0\n1...ndtype: Int32' == '0 0\n1... 1\n2 '", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_nullable_int_to_string[Int64]": "AssertionError: assert '0 0\n1...ndtype: Int64' == '0 0\n1... 1\n2 '", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_nullable_int_to_string[Int8]": "AssertionError: assert '0 0\n1...\ndtype: Int8' == '0 0\n1... 1\n2 '", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_nullable_int_to_string[UInt16]": "AssertionError: assert '0 0\n1...dtype: UInt16' == '0 0\n1... 1\n2 '", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_nullable_int_to_string[UInt32]": "AssertionError: assert '0 0\n1...dtype: UInt32' == '0 0\n1... 1\n2 '", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_nullable_int_to_string[UInt64]": "AssertionError: assert '0 0\n1...dtype: UInt64' == '0 0\n1... 1\n2 '", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_nullable_int_to_string[UInt8]": "AssertionError: assert '0 0\n1...ndtype: UInt8' == '0 0\n1... 1\n2 '", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_to_string_float_na_spacing": "AssertionError: assert '0 NaN\\...type: float64' == '0 NaN\\...\n4 NaN'", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_to_string_mixed": "AssertionError: assert '0 foo\n1 ...z\ndtype: str' == '0 foo\n1 ...bar\n3 baz'", + "tests/io/formats/test_to_string.py::TestSeriesToString::test_to_string_timedelta64": "AssertionError: assert '0 1 days\n...medelta64[us]' == '0 1 days\n...s\n2 3 days'", + "tests/io/json/test_compression.py::test_chunksize_with_compression[bz2]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_chunksize_with_compression[gzip]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_chunksize_with_compression[tar]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_chunksize_with_compression[xz]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_chunksize_with_compression[zip]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_chunksize_with_compression[zstd]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_compression_roundtrip[bz2]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_compression_roundtrip[gzip]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_compression_roundtrip[tar]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_compression_roundtrip[xz]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_compression_roundtrip[zip]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_compression_roundtrip[zstd]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_lines_with_compression[bz2]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_lines_with_compression[gzip]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_lines_with_compression[tar]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_lines_with_compression[xz]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_lines_with_compression[zip]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_lines_with_compression[zstd]": "TODO: Add a reason for failure", + "tests/io/json/test_compression.py::test_write_unsupported_compression_type": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrient::test_build_series": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrient::test_to_json": "AssertionError: assert OrderedDict({...:00.000Z'})]}) == OrderedDict({...:00.000Z'})]})", + "tests/io/json/test_json_table_schema.py::TestTableOrient::test_to_json_categorical_index": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrient::test_to_json_float_index": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_comprehensive": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='A') are different", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals0-None]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals0-idx]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals0-level_0]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals6-None]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals6-idx]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals6-level_0]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals7-None]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals7-idx]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals7-level_0]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals8-None]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals8-idx]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_orient[vals8-level_0]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_timezones_orient[vals0-idx0]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_timezones_orient[vals0-idx1]": "TODO: Add a reason for failure", + "tests/io/json/test_json_table_schema.py::TestTableOrientReader::test_read_json_table_timezones_orient[vals0-idx2]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='floats') are different", + "tests/io/json/test_pandas.py::TestPandasContainer::test_date_index_and_values[date-False-epoch]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_date_index_and_values[date-False-iso]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_frame_empty": "assert not True", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_dtypes": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-None]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-index1]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-index2]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-index3]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-index4]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns0-index5]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-None]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-index1]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-index2]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-index3]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-index4]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns1-index5]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-None]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-index1]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-index2]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-index3]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-index4]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_from_json_to_json_table_index_and_columns[columns2-index5]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_from_json_to_json[False-table]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_from_json_to_json[True-table]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data0]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data1]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data2]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data3]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data4]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_index_false_to_json_table[data5]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_tz_range_is_utc[tz_range0]": "TODO: Add a reason for failure", + "tests/io/json/test_pandas.py::TestPandasContainer::test_tz_range_is_utc[tz_range2]": "TODO: Add a reason for failure", + "tests/io/json/test_readlines.py::test_chunksize_is_incremental": "TODO: Add a reason for failure", + "tests/io/json/test_readlines.py::test_readjson_chunks_closes[1]": "TODO: Add a reason for failure", + "tests/io/json/test_readlines.py::test_readjson_chunks_closes[None]": "TODO: Add a reason for failure", + "tests/io/json/test_readlines.py::test_to_json_append_output_different_columns": "TODO: Add a reason for failure", + "tests/io/json/test_readlines.py::test_to_json_append_output_different_columns_reordered": "TODO: Add a reason for failure", + "tests/io/parser/common/test_chunksize.py::test_empty_with_nrows_chunksize[c_high-False]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/io/parser/common/test_chunksize.py::test_empty_with_nrows_chunksize[c_high-True]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/io/parser/common/test_chunksize.py::test_empty_with_nrows_chunksize[c_low-False]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/io/parser/common/test_chunksize.py::test_empty_with_nrows_chunksize[c_low-True]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/io/parser/common/test_chunksize.py::test_empty_with_nrows_chunksize[python-False]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/io/parser/common/test_chunksize.py::test_empty_with_nrows_chunksize[python-True]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/io/parser/common/test_chunksize.py::test_warn_if_chunks_have_mismatched_type[c_low]": "assert == object", + "tests/io/parser/common/test_common_basic.py::test_first_row_bom[c_high]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='Head1') are different", + "tests/io/parser/common/test_common_basic.py::test_first_row_bom[c_low]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='Head1') are different", + "tests/io/parser/common/test_common_basic.py::test_first_row_bom[python]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='Head1') are different", + "tests/io/parser/common/test_common_basic.py::test_first_row_bom_unquoted[c_high]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='Head1') are different", + "tests/io/parser/common/test_common_basic.py::test_first_row_bom_unquoted[c_low]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='Head1') are different", + "tests/io/parser/common/test_common_basic.py::test_first_row_bom_unquoted[python]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='Head1') are different", + "tests/io/parser/common/test_common_basic.py::test_read_csv_low_memory_no_rows_with_index[c_low]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='A') are different", + "tests/io/parser/common/test_common_basic.py::test_read_csv_low_memory_no_rows_with_index[python]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='A') are different", + "tests/io/parser/common/test_common_basic.py::test_read_empty_with_usecols[c_high--kwargs3-expected3]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='X') are different", + "tests/io/parser/common/test_common_basic.py::test_read_empty_with_usecols[c_low--kwargs3-expected3]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='X') are different", + "tests/io/parser/common/test_common_basic.py::test_read_empty_with_usecols[python--kwargs3-expected3]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='X') are different", + "tests/io/parser/common/test_file_buffer_url.py::test_context_manager[c_high]": "TODO: Add a reason for failure", + "tests/io/parser/common/test_file_buffer_url.py::test_context_manager[c_low]": "TODO: Add a reason for failure", + "tests/io/parser/common/test_file_buffer_url.py::test_context_manager[python]": "TODO: Add a reason for failure", + "tests/io/parser/common/test_file_buffer_url.py::test_context_manageri_user_provided[c_high]": "TODO: Add a reason for failure", + "tests/io/parser/common/test_file_buffer_url.py::test_context_manageri_user_provided[c_low]": "TODO: Add a reason for failure", + "tests/io/parser/common/test_file_buffer_url.py::test_context_manageri_user_provided[python]": "TODO: Add a reason for failure", + "tests/io/parser/common/test_index.py::test_empty_with_index[c_high]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='y') are different", + "tests/io/parser/common/test_index.py::test_empty_with_index[c_low]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='y') are different", + "tests/io/parser/common/test_index.py::test_empty_with_index[python]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='y') are different", + "tests/io/parser/common/test_index.py::test_empty_with_multi_index[c_high]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/common/test_index.py::test_empty_with_multi_index[c_low]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/common/test_index.py::test_empty_with_multi_index[python]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/common/test_index.py::test_empty_with_reversed_multi_index[c_high]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/common/test_index.py::test_empty_with_reversed_multi_index[c_low]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/common/test_index.py::test_empty_with_reversed_multi_index[python]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_high-False-a,b\nc,d-columns1-header1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('a', 'c')') are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_high-False-a,b-columns0-header0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_high-False-a,b\\nc,d-columns1-header1]": "AssertionError: Column name=\"('a', 'c')\" are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_high-True-a,b\nc,d-columns1-header1]": "pandas.errors.ParserError: Passed header=[0,1], len of 2, but only 1 lines in file", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_high-True-a,b-columns0-header0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_high-True-a,b\\nc,d-columns1-header1]": "Exception", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_low-False-a,b\nc,d-columns1-header1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('a', 'c')') are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_low-False-a,b-columns0-header0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_low-False-a,b\\nc,d-columns1-header1]": "AssertionError: Column name=\"('a', 'c')\" are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_low-True-a,b\nc,d-columns1-header1]": "pandas.errors.ParserError: Passed header=[0,1], len of 2, but only 1 lines in file", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_low-True-a,b-columns0-header0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[c_low-True-a,b\\nc,d-columns1-header1]": "Exception", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[python-False-a,b\nc,d-columns1-header1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('a', 'c')') are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[python-False-a,b-columns0-header0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[python-False-a,b\\nc,d-columns1-header1]": "AssertionError: Column name=\"('a', 'c')\" are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[python-True-a,b\nc,d-columns1-header1]": "ValueError: Passed header=[0,1], len of 2, but only 1 lines in file", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[python-True-a,b-columns0-header0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/common/test_index.py::test_multi_index_blank_df[python-True-a,b\\nc,d-columns1-header1]": "Exception", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[c_high-float64]": "TODO: Add a reason for failure", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[c_high-float]": "TODO: Add a reason for failure", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[c_low-float64]": "TODO: Add a reason for failure", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[c_low-float]": "TODO: Add a reason for failure", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[python-float64]": "TODO: Add a reason for failure", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict[python-float]": "TODO: Add a reason for failure", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_invalid[c_high]": "TODO: Add a reason for failure", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_invalid[c_low]": "TODO: Add a reason for failure", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_invalid[python]": "TODO: Add a reason for failure", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_mangle_dup_cols[c_high]": "TODO: Add a reason for failure", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_mangle_dup_cols[c_low]": "TODO: Add a reason for failure", + "tests/io/parser/dtypes/test_dtypes_basic.py::test_dtypes_defaultdict_mangle_dup_cols[python]": "TODO: Add a reason for failure", + "tests/io/parser/test_c_parser_only.py::test_unix_style_breaks[c_high]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/parser/test_c_parser_only.py::test_unix_style_breaks[c_low]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='col_1') are different", + "tests/io/parser/test_compression.py::test_writes_tar_gz[c_high]": "TODO: Add a reason for failure", + "tests/io/parser/test_compression.py::test_writes_tar_gz[c_low]": "TODO: Add a reason for failure", + "tests/io/parser/test_compression.py::test_writes_tar_gz[python]": "TODO: Add a reason for failure", + "tests/io/parser/test_encoding.py::test_not_readable[c_high-w+b]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='abcd') are different", + "tests/io/parser/test_encoding.py::test_not_readable[c_high-w+t]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='abcd') are different", + "tests/io/parser/test_encoding.py::test_not_readable[c_low-w+b]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='abcd') are different", + "tests/io/parser/test_encoding.py::test_not_readable[c_low-w+t]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='abcd') are different", + "tests/io/parser/test_encoding.py::test_not_readable[python-w+b]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='abcd') are different", + "tests/io/parser/test_encoding.py::test_not_readable[python-w+t]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='abcd') are different", + "tests/io/parser/test_header.py::test_read_only_header_no_rows[c_high-kwargs0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/test_header.py::test_read_only_header_no_rows[c_high-kwargs1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/test_header.py::test_read_only_header_no_rows[c_low-kwargs0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/test_header.py::test_read_only_header_no_rows[c_low-kwargs1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/test_header.py::test_read_only_header_no_rows[python-kwargs0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/test_header.py::test_read_only_header_no_rows[python-kwargs1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/io/parser/test_index_col.py::test_empty_with_index_col_false[c_high]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_empty_with_index_col_false[c_low]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_empty_with_index_col_false[python]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_high-0-kwargs2]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='y') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_high-1-kwargs3]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_high-False-kwargs1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_high-None-kwargs0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_high-index_col6-kwargs6]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_high-index_col7-kwargs7]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_high-index_col8-kwargs8]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_high-index_col9-kwargs9]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_high-x-kwargs4]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='y') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_high-y-kwargs5]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_low-0-kwargs2]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='y') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_low-1-kwargs3]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_low-False-kwargs1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_low-None-kwargs0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_low-index_col6-kwargs6]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_low-index_col7-kwargs7]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_low-index_col8-kwargs8]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_low-index_col9-kwargs9]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_low-x-kwargs4]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='y') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[c_low-y-kwargs5]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[python-0-kwargs2]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='y') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[python-1-kwargs3]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[python-False-kwargs1]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[python-None-kwargs0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[python-index_col6-kwargs6]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[python-index_col7-kwargs7]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[python-index_col8-kwargs8]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[python-index_col9-kwargs9]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='z') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[python-x-kwargs4]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='y') are different", + "tests/io/parser/test_index_col.py::test_index_col_empty_data[python-y-kwargs5]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='x') are different", + "tests/io/parser/test_index_col.py::test_index_col_header_no_data[c_high]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a1') are different", + "tests/io/parser/test_index_col.py::test_index_col_header_no_data[c_low]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a1') are different", + "tests/io/parser/test_index_col.py::test_index_col_header_no_data[python]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a1') are different", + "tests/io/parser/test_index_col.py::test_index_col_multiindex_columns_no_data[c_high]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('a1', 'b1')') are different", + "tests/io/parser/test_index_col.py::test_index_col_multiindex_columns_no_data[c_low]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('a1', 'b1')') are different", + "tests/io/parser/test_index_col.py::test_index_col_multiindex_columns_no_data[python]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('a1', 'b1')') are different", + "tests/io/parser/test_index_col.py::test_multiindex_columns_no_data[c_high]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('a0', 'b0')') are different", + "tests/io/parser/test_index_col.py::test_multiindex_columns_no_data[c_low]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('a0', 'b0')') are different", + "tests/io/parser/test_index_col.py::test_multiindex_columns_no_data[python]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('a0', 'b0')') are different", + "tests/io/parser/test_parse_dates.py::test_nat_parse[c_high]": "TODO: Add a reason for failure", + "tests/io/parser/test_parse_dates.py::test_nat_parse[c_low]": "TODO: Add a reason for failure", + "tests/io/parser/test_parse_dates.py::test_nat_parse[python]": "TODO: Add a reason for failure", + "tests/io/parser/test_python_parser_only.py::test_on_bad_lines_callable_write_to_external_list[python]": "TODO: Add a reason for failure", + "tests/io/parser/test_textreader.py::TestTextReader::test_integer_thousands_alt": "TODO: Add a reason for failure", + "tests/io/pytables/test_timezones.py::test_append_with_timezones[0]": "TODO: Add a reason for failure", + "tests/io/pytables/test_timezones.py::test_append_with_timezones[1]": "TODO: Add a reason for failure", + "tests/io/sas/test_sas7bdat.py::TestSAS7BDAT::test_iterator_read_too_much": "TODO: Add a reason for failure", + "tests/io/sas/test_sas7bdat.py::test_date_time": "AssertionError: DataFrame.iloc[:, 3] (column name='DateTimeHi') are different", + "tests/io/sas/test_sas7bdat.py::test_encoding_infer": "TODO: Add a reason for failure", + "tests/io/sas/test_sas7bdat.py::test_encoding_options": "TODO: Add a reason for failure", + "tests/io/test_common.py::TestCommonIOCapabilities::test_stringify_file_and_path_like": "TODO: Add a reason for failure", + "tests/io/test_common.py::test_pickle_reader[read_excel]": "TODO: Add a reason for failure", + "tests/io/test_common.py::test_pickle_reader[read_fwf]": "TODO: Add a reason for failure", + "tests/io/test_common.py::test_pickle_reader[read_pickle]": "TODO: Add a reason for failure", + "tests/io/test_common.py::test_pickle_reader[read_sas]": "TODO: Add a reason for failure", + "tests/io/test_common.py::test_pickle_reader[read_stata]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_ambiguous_archive_tar": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[bz2-to_json-obj0]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[bz2-to_json-obj1]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[gzip-to_json-obj0]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[gzip-to_json-obj1]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[tar-to_json-obj0]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[tar-to_json-obj1]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[xz-to_json-obj0]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[xz-to_json-obj1]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[zip-to_json-obj0]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[zip-to_json-obj1]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[zstd-to_json-obj0]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_compression_size[zstd-to_json-obj1]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[bz2-to_csv-write_kwargs0-read_csv]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[gzip-to_csv-write_kwargs0-read_csv]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[tar-to_csv-write_kwargs0-read_csv]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[xz-to_csv-write_kwargs0-read_csv]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[zip-to_csv-write_kwargs0-read_csv]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_dataframe_compression_defaults_to_infer[zstd-to_csv-write_kwargs0-read_csv]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_gzip_compression_level[to_json-obj0]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_gzip_compression_level[to_json-obj1]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_xz_compression_level_read[to_json-obj0]": "TODO: Add a reason for failure", + "tests/io/test_compression.py::test_xz_compression_level_read[to_json-obj1]": "TODO: Add a reason for failure", + "tests/io/test_fsspec.py::test_json_options[bz2]": "OSError: Invalid data stream", + "tests/io/test_fsspec.py::test_json_options[gzip]": "gzip.BadGzipFile: Not a gzipped file (b'{'')", + "tests/io/test_fsspec.py::test_json_options[tar]": "tarfile.ReadError: file could not be opened successfully:", + "tests/io/test_fsspec.py::test_json_options[xz]": "_lzma.LZMAError: Input format not supported by decoder", + "tests/io/test_fsspec.py::test_json_options[zip]": "zipfile.BadZipFile: File is not a zip file", + "tests/io/test_fsspec.py::test_json_options[zstd]": "zstandard.backend_c.ZstdError: zstd decompress error: Unknown frame descriptor", + "tests/io/test_fsspec.py::test_non_fsspec_options": "TODO: Add a reason for failure", + "tests/io/test_fsspec.py::test_read_csv": "AssertionError: Attributes of DataFrame.iloc[:, 3] (column name='dt') are different", + "tests/io/test_fsspec.py::test_to_csv": "AssertionError: Attributes of DataFrame.iloc[:, 3] (column name='dt') are different", + "tests/io/test_orc.py::test_orc_dtype_backend_pyarrow": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='string') are different", + "tests/io/test_orc.py::test_orc_reader_basic": "TODO: Add a reason for failure", + "tests/io/test_orc.py::test_orc_reader_date_high": "TODO: Add a reason for failure", + "tests/io/test_orc.py::test_orc_reader_date_low": "TODO: Add a reason for failure", + "tests/io/test_orc.py::test_orc_reader_empty": "AssertionError: Attributes of DataFrame.iloc[:, 7] (column name='bytes1') are different", + "tests/io/test_orc.py::test_orc_roundtrip_file": "TODO: Add a reason for failure", + "tests/io/test_parquet.py::TestBasic::test_read_empty_array[Float64]": "TODO: Add a reason for failure", + "tests/io/test_parquet.py::TestBasic::test_read_empty_array[Int64]": "TODO: Add a reason for failure", + "tests/io/test_parquet.py::TestBasic::test_read_empty_array[UInt8]": "TODO: Add a reason for failure", + "tests/io/test_parquet.py::TestBasic::test_read_empty_array[boolean]": "TODO: Add a reason for failure", + "tests/io/test_parquet.py::TestBasic::test_read_empty_array[float]": "TODO: Add a reason for failure", + "tests/io/test_parquet.py::TestBasic::test_read_empty_array[object]": "TODO: Add a reason for failure", + "tests/io/test_parquet.py::TestBasic::test_read_empty_array[string]": "TODO: Add a reason for failure", + "tests/io/test_parquet.py::TestParquetPyArrow::test_empty_dataframe": "TODO: Add a reason for failure", + "tests/io/test_parquet.py::TestParquetPyArrow::test_read_dtype_backend_pyarrow_config": "TODO: Add a reason for failure", + "tests/io/test_parquet.py::TestParquetPyArrow::test_roundtrip_decimal": "TODO: Add a reason for failure", + "tests/io/test_pickle.py::test_pickles": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_api_execute_sql[sqlite_buildin_iris]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_api_execute_sql[sqlite_conn_iris]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_api_execute_sql[sqlite_engine_iris]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_api_execute_sql[sqlite_str_iris]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_datetime_date[sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_datetime_date[sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_datetime_date[sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_execute_sql[sqlite_buildin_iris]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_execute_sql[sqlite_conn_iris]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_execute_sql[sqlite_engine_iris]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_execute_sql[sqlite_str_iris]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql-sqlite_buildin]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql_query-sqlite_buildin]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql_query-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql_query-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-numpy_nullable-read_sql_query-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql-sqlite_buildin]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql_query-sqlite_buildin]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql_query-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql_query-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[pyarrow-pyarrow-read_sql_query-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql-sqlite_buildin]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql_query-sqlite_buildin]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql_query-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql_query-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-numpy_nullable-read_sql_query-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql-sqlite_buildin]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql_query-sqlite_buildin]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql_query-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql_query-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_read_sql_dtype_backend[python-pyarrow-read_sql_query-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int16-SMALLINT-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int16-SMALLINT-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int16-SMALLINT-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int32-INTEGER-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int32-INTEGER-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int32-INTEGER-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int64-BIGINT-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int64-BIGINT-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int64-BIGINT-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int8-SMALLINT-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int8-SMALLINT-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[Int8-SMALLINT-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt16-INTEGER-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt16-INTEGER-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt16-INTEGER-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt32-BIGINT-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt32-BIGINT-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt32-BIGINT-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt8-SMALLINT-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt8-SMALLINT-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[UInt8-SMALLINT-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int-BIGINT-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int-BIGINT-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int-BIGINT-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int16-SMALLINT-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int16-SMALLINT-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int16-SMALLINT-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int32-INTEGER-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int32-INTEGER-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int32-INTEGER-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int64-BIGINT-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int64-BIGINT-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int64-BIGINT-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int8-SMALLINT-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int8-SMALLINT-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[int8-SMALLINT-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint16-INTEGER-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint16-INTEGER-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint16-INTEGER-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint32-BIGINT-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint32-BIGINT-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint32-BIGINT-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint8-SMALLINT-sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint8-SMALLINT-sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_integer_mapping[uint8-SMALLINT-sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_type_mapping[sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_type_mapping[sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlalchemy_type_mapping[sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_sqlite_datetime_date": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_to_sql_callable[sqlite_conn]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_to_sql_callable[sqlite_engine]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_to_sql_callable[sqlite_str]": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_xsqlite_if_exists": "TODO: Add a reason for failure", + "tests/io/test_sql.py::test_xsqlite_write_row_by_row": "TODO: Add a reason for failure", + "tests/io/test_stata.py::TestStata::test_encoding_latin1_118": "TODO: Add a reason for failure", + "tests/io/test_stata.py::TestStata::test_missing_value_generator": "TODO: Add a reason for failure", + "tests/io/test_stata.py::TestStata::test_read_empty_dta[114]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='unit') are different", + "tests/io/test_stata.py::TestStata::test_read_empty_dta[117]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='unit') are different", + "tests/io/test_stata.py::TestStata::test_read_empty_dta[118]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='unit') are different", + "tests/io/test_stata.py::TestStata::test_read_empty_dta[119]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='unit') are different", + "tests/io/test_stata.py::TestStata::test_read_empty_dta[None]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='unit') are different", + "tests/io/test_stata.py::TestStata::test_utf8_writer[big-118]": "NotImplementedError: Data type str not supported.", + "tests/io/test_stata.py::TestStata::test_utf8_writer[big-119]": "NotImplementedError: Data type str not supported.", + "tests/io/test_stata.py::TestStata::test_utf8_writer[big-None]": "NotImplementedError: Data type str not supported.", + "tests/io/test_stata.py::TestStata::test_utf8_writer[little-118]": "NotImplementedError: Data type str not supported.", + "tests/io/test_stata.py::TestStata::test_utf8_writer[little-119]": "NotImplementedError: Data type str not supported.", + "tests/io/test_stata.py::TestStata::test_utf8_writer[little-None]": "NotImplementedError: Data type str not supported.", + "tests/io/test_stata.py::test_chunked_categorical[114]": "TODO: Add a reason for failure", + "tests/io/test_stata.py::test_chunked_categorical[117]": "TODO: Add a reason for failure", + "tests/io/test_stata.py::test_chunked_categorical[118]": "TODO: Add a reason for failure", + "tests/io/test_stata.py::test_chunked_categorical[119]": "TODO: Add a reason for failure", + "tests/io/test_stata.py::test_chunked_categorical[None]": "TODO: Add a reason for failure", + "tests/io/test_stata.py::test_direct_read": "TODO: Add a reason for failure", + "tests/io/test_stata.py::test_non_categorical_value_labels": "TODO: Add a reason for failure", + "tests/io/xml/test_to_xml.py::test_style_to_csv": "TODO: Add a reason for failure", + "tests/libs/test_libalgos.py::test_ensure_platform_int": "TODO: Add a reason for failure", + "tests/plotting/frame/test_frame.py::TestDataFramePlots::test_unordered_ts": "TODO: Add a reason for failure", + "tests/plotting/test_boxplot_method.py::TestDataFramePlots::test_boxplot_legacy1_series": "TODO: Add a reason for failure", + "tests/plotting/test_converter.py::TestDateTimeConverter::test_conversion": "TODO: Add a reason for failure", + "tests/plotting/test_converter.py::TestDateTimeConverter::test_dateindex_conversion[B]": "TODO: Add a reason for failure", + "tests/plotting/test_converter.py::TestDateTimeConverter::test_dateindex_conversion[ms]": "TODO: Add a reason for failure", + "tests/plotting/test_converter.py::TestDateTimeConverter::test_dateindex_conversion[s]": "TODO: Add a reason for failure", + "tests/plotting/test_converter.py::TestRegistration::test_matplotlib_formatters": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_from_resampling_area_line_mixed[area-line]": "AssertionError: assert == ", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_from_resampling_area_line_mixed[line-area]": "AssertionError: assert == ", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_from_resampling_area_line_mixed_high_to_low[area-line]": "ValueError: You must pass a freq argument as current index has none.", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_from_resampling_area_line_mixed_high_to_low[line-area]": "ValueError: You must pass a freq argument as current index has none.", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_from_weekly_resampling": "ValueError: You must pass a freq argument as current index has none.", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[D]": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[W]": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[h]": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[min]": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_datetime_frame[s]": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[D]": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[ME]": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[YE]": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[h]": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[min]": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_line_plot_inferred_freq[s]": "TODO: Add a reason for failure", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_pickle_fig[DataFrame-idx0]": "_pickle.PicklingError: Can't pickle : it's not the same object as pandas.Period", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_pickle_fig[DataFrame-idx1]": "_pickle.PicklingError: Can't pickle : it's not the same object as pandas.Period", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_pickle_fig[DataFrame-idx3]": "_pickle.PicklingError: Can't pickle : it's not the same object as pandas.Period", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_pickle_fig[Series-idx0]": "_pickle.PicklingError: Can't pickle : it's not the same object as pandas.Period", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_pickle_fig[Series-idx1]": "_pickle.PicklingError: Can't pickle : it's not the same object as pandas.Period", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_pickle_fig[Series-idx3]": "_pickle.PicklingError: Can't pickle : it's not the same object as pandas.Period", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_to_weekly_resampling": "AssertionError: assert == ", + "tests/reductions/test_reductions.py::TestDatetime64SeriesReductions::test_minmax_nat_series[nat_ser0]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestDatetime64SeriesReductions::test_minmax_nat_series[nat_ser1]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestDatetime64SeriesReductions::test_minmax_nat_series[nat_ser2]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestIndexReductions::test_minmax_timedelta_empty_or_na[max]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestIndexReductions::test_minmax_timedelta_empty_or_na[min]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestReductions::test_nanminmax[index-datetime64[ns]-val2-max]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestReductions::test_nanminmax[index-datetime64[ns]-val2-min]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestReductions::test_nanminmax[series-datetime64[ns]-val2-max]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestReductions::test_nanminmax[series-datetime64[ns]-val2-min]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestReductions::test_nanops_empty_object[index-M8[ns]-max]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestReductions::test_nanops_empty_object[index-M8[ns]-min]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestReductions::test_nanops_empty_object[series-M8[ns]-max]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestReductions::test_nanops_empty_object[series-M8[ns]-min]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestSeriesMode::test_mode_category[False-expected11-expected21-expected31]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestSeriesMode::test_mode_datetime[False-expected11-expected21]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestSeriesMode::test_mode_timedelta[False-expected11-expected21]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[any-False-data2-expected_data2-Float64]": "TypeError: boolean value of NA is ambiguous", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[any-False-data2-expected_data2-Int64]": "TypeError: boolean value of NA is ambiguous", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[any-False-data2-expected_data2-UInt64]": "TypeError: boolean value of NA is ambiguous", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[any-False-data2-expected_data2-boolean]": "TypeError: boolean value of NA is ambiguous", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[any-False-data3-expected_data3-Float64]": "TypeError: boolean value of NA is ambiguous", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[any-False-data3-expected_data3-Int64]": "TypeError: boolean value of NA is ambiguous", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[any-False-data3-expected_data3-UInt64]": "TypeError: boolean value of NA is ambiguous", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_nullable_kleene_logic[any-False-data3-expected_data3-boolean]": "TypeError: boolean value of NA is ambiguous", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_object_dtype_missing[any-data0]": "assert np.True_ == False", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_object_dtype_missing[any-data1]": "assert np.True_ == False", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_string_dtype[string=str[pyarrow]]": "assert not np.True_", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_any_all_string_dtype[string=str[python]]": "assert not np.True_", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_empty_timeseries_reductions_return_nat[False-M8[ns]]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_empty_timeseries_reductions_return_nat[False-m8[ns]]": "AssertionError: assert np.timedelta64('NaT','ns') is NaT", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_empty_timeseries_reductions_return_nat[True-M8[ns]]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_empty_timeseries_reductions_return_nat[True-m8[ns]]": "AssertionError: assert np.timedelta64('NaT','ns') is NaT", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_ops_consistency_on_empty_nullable[Int64-mean]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_ops_consistency_on_empty_nullable[Int64-var]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_ops_consistency_on_empty_nullable[boolean-mean]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_ops_consistency_on_empty_nullable[boolean-var]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_sum_overflow_float[float32-False]": "TODO: Add a reason for failure", + "tests/reductions/test_reductions.py::TestSeriesReductions::test_sum_overflow_float[float32-True]": "TODO: Add a reason for failure", + "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean['Asia/Tokyo'-index]": "AssertionError: assert Timestamp('2001-01-05 15:00:00') == Timestamp('2001-01-06 00:00:00+0900', tz='Asia/Tokyo')", + "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean['Asia/Tokyo'-series]": "AssertionError: assert Timestamp('2001-01-05 15:00:00') == Timestamp('2001-01-06 00:00:00+0900', tz='Asia/Tokyo')", + "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean['US/Eastern'-index]": "AssertionError: assert Timestamp('2001-01-06 05:00:00') == Timestamp('2001-01-06 00:00:00-0500', tz='US/Eastern')", + "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_dt64_mean['US/Eastern'-series]": "AssertionError: assert Timestamp('2001-01-06 05:00:00') == Timestamp('2001-01-06 00:00:00-0500', tz='US/Eastern')", + "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_td64_mean[index]": "AssertionError: assert Timedelta('0 days 13:05:27.272727272') is NaT", + "tests/reductions/test_stat_reductions.py::TestDatetimeLikeStatReductions::test_td64_mean[series]": "AssertionError: assert Timedelta('0 days 13:05:27.272727272') is NaT", + "tests/resample/test_base.py::test_resample_count_empty_dataframe[D-index0]": "AssertionError: DataFrame.index are different", + "tests/resample/test_base.py::test_resample_count_empty_dataframe[h-index0]": "AssertionError: DataFrame.index are different", + "tests/resample/test_base.py::test_resample_empty_sum_string[string=str[pyarrow]-0]": "NotImplementedError: freq is not implemented yet", + "tests/resample/test_base.py::test_resample_empty_sum_string[string=str[pyarrow]-1]": "NotImplementedError: freq is not implemented yet", + "tests/resample/test_base.py::test_resample_empty_sum_string[string=str[python]-0]": "NotImplementedError: freq is not implemented yet", + "tests/resample/test_base.py::test_resample_empty_sum_string[string=str[python]-1]": "NotImplementedError: freq is not implemented yet", + "tests/resample/test_base.py::test_resample_empty_sum_string[string=string[pyarrow]-0]": "NotImplementedError: freq is not implemented yet", + "tests/resample/test_base.py::test_resample_empty_sum_string[string=string[pyarrow]-1]": "NotImplementedError: freq is not implemented yet", + "tests/resample/test_base.py::test_resample_empty_sum_string[string=string[python]-0]": "NotImplementedError: freq is not implemented yet", + "tests/resample/test_base.py::test_resample_empty_sum_string[string=string[python]-1]": "NotImplementedError: freq is not implemented yet", + "tests/resample/test_datetime_index.py::test_resample_anchored_intraday2[ms]": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_anchored_intraday2[ns]": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_anchored_intraday2[s]": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_anchored_intraday2[us]": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[ms-2020-03-28-2020-03-31-24h-D-2020-03-30 00:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[ms-2020-03-28-2020-03-31-D-24h-2020-03-30 01:00]": "AssertionError: Series.index are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[ms-2020-03-28-2020-10-27-D-24h-2020-10-27 00:00]": "AssertionError: Series.index are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[ms-2020-10-25-2020-10-27-24h-D-2020-10-26 00:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[ms-2020-10-25-2020-10-27-D-24h-2020-10-26 23:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[ns-2020-03-28-2020-03-31-24h-D-2020-03-30 00:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[ns-2020-03-28-2020-03-31-D-24h-2020-03-30 01:00]": "AssertionError: Series.index are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[ns-2020-03-28-2020-10-27-D-24h-2020-10-27 00:00]": "AssertionError: Series.index are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[ns-2020-10-25-2020-10-27-24h-D-2020-10-26 00:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[ns-2020-10-25-2020-10-27-D-24h-2020-10-26 23:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[s-2020-03-28-2020-03-31-24h-D-2020-03-30 00:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[s-2020-03-28-2020-03-31-D-24h-2020-03-30 01:00]": "AssertionError: Series.index are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[s-2020-03-28-2020-10-27-D-24h-2020-10-27 00:00]": "AssertionError: Series.index are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[s-2020-10-25-2020-10-27-24h-D-2020-10-26 00:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[s-2020-10-25-2020-10-27-D-24h-2020-10-26 23:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[us-2020-03-28-2020-03-31-24h-D-2020-03-30 00:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[us-2020-03-28-2020-03-31-D-24h-2020-03-30 01:00]": "AssertionError: Series.index are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[us-2020-03-28-2020-10-27-D-24h-2020-10-27 00:00]": "AssertionError: Series.index are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[us-2020-10-25-2020-10-27-24h-D-2020-10-26 00:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_calendar_day_with_dst[us-2020-10-25-2020-10-27-D-24h-2020-10-26 23:00]": "AssertionError: Series are different", + "tests/resample/test_datetime_index.py::test_resample_empty_series_with_tz": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_median_bug_1688[ms-float32]": 'AssertionError: Attributes of DataFrame.iloc[:, 0] (column name="0") are different', + "tests/resample/test_datetime_index.py::test_resample_median_bug_1688[ns-float32]": 'AssertionError: Attributes of DataFrame.iloc[:, 0] (column name="0") are different', + "tests/resample/test_datetime_index.py::test_resample_median_bug_1688[s-float32]": 'AssertionError: Attributes of DataFrame.iloc[:, 0] (column name="0") are different', + "tests/resample/test_datetime_index.py::test_resample_median_bug_1688[us-float32]": 'AssertionError: Attributes of DataFrame.iloc[:, 0] (column name="0") are different', + "tests/resample/test_datetime_index.py::test_resample_nunique[ms]": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_nunique[ns]": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_nunique[s]": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_nunique[us]": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_origin_epoch_with_tz_day_vs_24h[ms]": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_origin_epoch_with_tz_day_vs_24h[ns]": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_origin_epoch_with_tz_day_vs_24h[s]": "TODO: Add a reason for failure", + "tests/resample/test_datetime_index.py::test_resample_origin_epoch_with_tz_day_vs_24h[us]": "TODO: Add a reason for failure", + "tests/resample/test_period_index.py::TestPeriodIndex::test_evenly_divisible_with_no_extra_bins2": "TODO: Add a reason for failure", + "tests/resample/test_period_index.py::TestPeriodIndex::test_resample_tz_localized[ms]": "TODO: Add a reason for failure", + "tests/resample/test_period_index.py::TestPeriodIndex::test_resample_tz_localized[ns]": "TODO: Add a reason for failure", + "tests/resample/test_period_index.py::TestPeriodIndex::test_resample_tz_localized[s]": "TODO: Add a reason for failure", + "tests/resample/test_period_index.py::TestPeriodIndex::test_resample_tz_localized[us]": "TODO: Add a reason for failure", + "tests/resample/test_period_index.py::TestPeriodIndex::test_with_local_timezone[tz0]": "TODO: Add a reason for failure", + "tests/resample/test_period_index.py::TestPeriodIndex::test_with_local_timezone[tz1]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_grouper_resample-agg1]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_both_mean_std_named_result[df_grouper_resample-agg2]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_both_mean_sum[df_col_resample-agg1]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_both_mean_sum[df_grouper_resample-agg1]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_both_mean_sum[df_mult_resample-agg1]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_both_mean_sum[df_resample-agg1]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_mixed_column_aggregation[df_col_resample]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_mixed_column_aggregation[df_grouper_resample]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_mixed_column_aggregation[df_resample]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_specificationerror_series[df_col_resample-agg0]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_specificationerror_series[df_grouper_resample-agg0]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_specificationerror_series[df_mult_resample-agg0]": "Failed: DID NOT RAISE ", + "tests/resample/test_resample_api.py::test_agg_specificationerror_series[df_resample-agg0]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_with_lambda[df_grouper_resample-agg1]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_agg_with_lambda[df_grouper_resample-agg2]": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_groupby_resample_api": "TODO: Add a reason for failure", + "tests/resample/test_resample_api.py::test_resample_empty": "AssertionError: DataFrame.columns are different", + "tests/resample/test_resample_api.py::test_resample_group_keys": "AssertionError: DataFrame.index are different", + "tests/resample/test_resampler_grouper.py::test_getitem_multiple": "NotImplementedError: freq is not implemented yet", + "tests/resample/test_time_grouper.py::test_aggregate_normal[ohlc]": "TODO: Add a reason for failure", + "tests/resample/test_time_grouper.py::test_aggregate_normal[sem]": "TODO: Add a reason for failure", + "tests/resample/test_time_grouper.py::test_apply_iteration": "TODO: Add a reason for failure", + "tests/resample/test_time_grouper.py::test_groupby_resample_interpolate_with_apply_syntax": "AssertionError: DataFrame.index level [1] are different", + "tests/resample/test_time_grouper.py::test_groupby_resample_interpolate_with_apply_syntax_off_grid": "AssertionError: DataFrame.index level [1] are different", + "tests/resample/test_time_grouper.py::test_repr": "TODO: Add a reason for failure", + "tests/resample/test_time_grouper.py::test_resample_entirely_nat_window[prod-method_args3-1]": "AssertionError: Series.index are different", + "tests/resample/test_time_grouper.py::test_resample_entirely_nat_window[prod-method_args4-1]": "AssertionError: Series.index are different", + "tests/resample/test_time_grouper.py::test_resample_entirely_nat_window[sum-method_args0-0]": "AssertionError: Series.index are different", + "tests/resample/test_time_grouper.py::test_resample_entirely_nat_window[sum-method_args1-0]": "AssertionError: Series.index are different", + "tests/resample/test_time_grouper.py::test_upsample_sum[prod-method_args4-expected_values4]": "AssertionError: ColumnBase are different", + "tests/resample/test_time_grouper.py::test_upsample_sum[prod-method_args5-expected_values5]": "AssertionError: ColumnBase are different", + "tests/resample/test_time_grouper.py::test_upsample_sum[sum-method_args0-expected_values0]": "AssertionError: ColumnBase are different", + "tests/resample/test_time_grouper.py::test_upsample_sum[sum-method_args1-expected_values1]": "AssertionError: ColumnBase are different", + "tests/reshape/concat/test_append.py::TestAppend::test_append_different_columns_types[CategoricalIndex-MultiIndex0]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_append.py::TestAppend::test_append_different_columns_types[CategoricalIndex-MultiIndex1]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_append.py::TestAppend::test_append_different_columns_types[Index-MultiIndex2]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_append.py::TestAppend::test_append_empty_frame_to_series_with_dateutil_tz": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='c') are different", + "tests/reshape/concat/test_append.py::TestAppend::test_append_empty_frame_with_timedelta64ns_nat[1-Int64]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/concat/test_append.py::TestAppend::test_append_empty_frame_with_timedelta64ns_nat[1-datetime64[ns]]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/concat/test_append.py::TestAppend::test_append_empty_frame_with_timedelta64ns_nat[1-int64]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/concat/test_append.py::TestAppend::test_append_empty_frame_with_timedelta64ns_nat[NaT-Int64]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/concat/test_append.py::TestAppend::test_append_empty_frame_with_timedelta64ns_nat[NaT-int64]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/concat/test_append.py::TestAppend::test_append_frame_with_timedelta64ns_nat[NaT-Int64]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/concat/test_append.py::TestAppend::test_append_frame_with_timedelta64ns_nat[NaT-int64]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/concat/test_append.py::TestAppend::test_append_missing_column_proper_upcast[False]": "AssertionError: assert dtype('int64') == 'f8'", + "tests/reshape/concat/test_append.py::TestAppend::test_append_missing_column_proper_upcast[True]": "AssertionError: assert dtype('int64') == 'f8'", + "tests/reshape/concat/test_append.py::TestAppend::test_append_overlap_raises": "Failed: DID NOT RAISE ", + "tests/reshape/concat/test_append_common.py::TestConcatAppendCommon::test_categorical_concat_append": "TODO: Add a reason for failure", + "tests/reshape/concat/test_append_common.py::TestConcatAppendCommon::test_concat_categorical_empty": "TODO: Add a reason for failure", + "tests/reshape/concat/test_categorical.py::TestCategoricalConcat::test_categorical_index_preserver": "TODO: Add a reason for failure", + "tests/reshape/concat/test_categorical.py::TestCategoricalConcat::test_categorical_index_upcast": "TODO: Add a reason for failure", + "tests/reshape/concat/test_categorical.py::TestCategoricalConcat::test_concat_categorical_datetime": "TODO: Add a reason for failure", + "tests/reshape/concat/test_concat.py::TestConcatenate::test_concat_copy": "TODO: Add a reason for failure", + "tests/reshape/concat/test_concat.py::TestConcatenate::test_concat_keys_specific_levels": "TODO: Add a reason for failure", + "tests/reshape/concat/test_concat.py::TestConcatenate::test_concat_order": "TODO: Add a reason for failure", + "tests/reshape/concat/test_concat.py::test_concat_empty_and_non_empty_frame_regression": "TODO: Add a reason for failure", + "tests/reshape/concat/test_concat.py::test_concat_ignore_empty_object_float[None-datetime64[ns]]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/reshape/concat/test_concat.py::test_concat_ignore_empty_object_float[None-float64]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/reshape/concat/test_concat.py::test_concat_ignore_empty_object_float[None-int64]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_concat.py::test_concat_ignore_empty_object_float[float64-datetime64[ns]]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/reshape/concat/test_concat.py::test_concat_ignore_empty_object_float[float64-int64]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_concat.py::test_concat_ignore_empty_object_float[object-datetime64[ns]]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/reshape/concat/test_concat.py::test_concat_ignore_empty_object_float[object-float64]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='foo') are different", + "tests/reshape/concat/test_concat.py::test_concat_ignore_empty_object_float[object-int64]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_datetimes.py::TestTimezoneConcat::test_concat_multiindex_with_tz": "AssertionError: DataFrame.index level [0] are different", + "tests/reshape/concat/test_datetimes.py::test_concat_float_datetime64": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_dataframe_dtypes": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_df_object_dtype": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtype_category_with_array": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[M8[ns]-bool-object_]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[M8[ns]-int64-object_]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[bool-float32-object_]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[bool-int32-object_]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[category-object-object]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[m8[ns]-bool-object_]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes[m8[ns]-int64-object_]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[M8[ns]-float64]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[M8[ns]-int8]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[M8[ns]-m8[ns]]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[M8[ns]-uint8]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[float64-M8[ns]]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[float64-int8]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[float64-m8[ns]]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[float64-uint8]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[int8-M8[ns]]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[int8-m8[ns]]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[int8-uint8]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[m8[ns]-M8[ns]]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[m8[ns]-float64]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[m8[ns]-int8]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[m8[ns]-uint8]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[uint8-M8[ns]]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_roundtrips[uint8-m8[ns]]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_dtypes_triple": "TODO: Add a reason for failure", + "tests/reshape/concat/test_empty.py::TestEmptyConcat::test_concat_empty_series_timelike[values0-None]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_frame[axis='columns']": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_frame[axis='index']": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_frame[axis=0]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_frame[axis=1]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_series[axis='columns']": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_copy_index_series[axis=1]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_same_index_names[idx-None-None-None]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_same_index_names[idx-idx-None-None]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_same_index_names[idx1-idx1-idx2-None]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_same_index_names[idx1-idx2-None-None]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_concat_same_index_names[idx1-idx2-idx3-None]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestIndexConcat::test_default_index": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_axis_1_sort_false_rangeindex": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_find_common[Int16]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_find_common[Int32]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_find_common[Int8]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Float32]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Float64]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Int16]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Int32]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Int64]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[Int8]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[UInt16]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[UInt32]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[UInt64]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_index.py::TestMultiIndexConcat::test_concat_index_keep_dtype_ea_numeric[UInt8]": "TODO: Add a reason for failure", + "tests/reshape/concat/test_series.py::TestSeriesConcat::test_concat_series_axis1": "TODO: Add a reason for failure", + "tests/reshape/concat/test_sort.py::TestConcatSort::test_concat_sort_none_raises": "TODO: Add a reason for failure", + "tests/reshape/merge/test_join.py::TestJoin::test_join_multiindex": "TODO: Add a reason for failure", + "tests/reshape/merge/test_join.py::test_join_empty[False-cross-empty]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_join.py::test_join_empty[True-cross-empty]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_index_and_on_parameters_confusion": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_join_append_timedeltas": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='d') are different", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_datetime64tz_with_dst_transition": "ValueError: Inferred frequency None from passed values does not conform to passed frequency h", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[inner-kwarg0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[inner-kwarg1]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[inner-kwarg2]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[inner-kwarg3]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[left-kwarg0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[left-kwarg1]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[left-kwarg2]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[left-kwarg3]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[outer-kwarg0]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[outer-kwarg1]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[outer-kwarg2]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[outer-kwarg3]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[right-kwarg0]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[right-kwarg1]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[right-kwarg2]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_empty[right-kwarg3]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_left_empty_right_notempty": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_nan_right": "AssertionError: DataFrame.columns are different", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_nocopy": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_non_string_columns": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index0-expected_index0-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index0-expected_index0-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index1-expected_index1-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index1-expected_index1-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index10-expected_index10-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index10-expected_index10-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index11-expected_index11-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index11-expected_index11-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index12-expected_index12-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index12-expected_index12-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index13-expected_index13-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index13-expected_index13-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index14-expected_index14-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index14-expected_index14-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index16-expected_index16-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index16-expected_index16-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index2-expected_index2-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index2-expected_index2-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index3-expected_index3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index3-expected_index3-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index4-expected_index4-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index4-expected_index4-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index5-expected_index5-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index5-expected_index5-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index6-expected_index6-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index6-expected_index6-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index7-expected_index7-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index7-expected_index7-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index8-expected_index8-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index8-expected_index8-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index9-expected_index9-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_on_index_with_more_values[index9-expected_index9-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_right_index_right": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMerge::test_merge_take_missing_values_from_index_of_other_dtype": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_categorical_dates": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_merged_different[inner-1]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_merged_different[left-0]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_merged_different[left-1]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_merged_different[outer-1]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_dtype_on_merged_different[right-1]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeCategorical::test_merge_categorical": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_incompat_dtypes_are_ok[df1_vals0-df2_vals0]": "assert False", + "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_incompat_dtypes_are_ok[df1_vals1-df2_vals1]": "assert False", + "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_incompat_dtypes_error[df1_vals2-df2_vals2]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_incompat_dtypes_error[df1_vals3-df2_vals3]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_on_ints_floats[int_vals0-float_vals0-exp_vals0]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_on_ints_floats[int_vals1-float_vals1-exp_vals1]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_on_ints_floats[int_vals2-float_vals2-exp_vals2]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_on_ints_floats_warning": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_arrow_and_numpy_dtypes[int64]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::test_merge_different_index_names": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_ea_and_non_ea[Float32-right]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::test_merge_ea_and_non_ea[Float64-right]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::test_merge_ea_and_non_ea[Int16-right]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::test_merge_ea_and_non_ea[Int32-right]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::test_merge_ea_and_non_ea[Int64-right]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::test_merge_ea_and_non_ea[Int8-right]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::test_merge_ea_and_non_ea[UInt16-right]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::test_merge_ea_and_non_ea[UInt32-right]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::test_merge_ea_and_non_ea[UInt64-right]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::test_merge_ea_and_non_ea[UInt8-right]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='a') are different", + "tests/reshape/merge/test_merge.py::test_merge_ea_int_and_float_numpy": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_for_suffix_collisions[suffixes0]": "Failed: DID NOT RAISE ", + "tests/reshape/merge/test_merge.py::test_merge_for_suffix_collisions[suffixes1]": "Failed: DID NOT RAISE ", + "tests/reshape/merge/test_merge.py::test_merge_result_empty_index_and_on": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_right_left_index": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_series[on4-None-None-False-False-None]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_series_multilevel": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_suffix[0-0-kwargs1-expected_cols1]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_suffix[0-0-kwargs10-expected_cols10]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_suffix[0.0-0.0-kwargs5-expected_cols5]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_suffix[a-a-kwargs7-expected_cols7]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_suffix[a-a-kwargs9-expected_cols9]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_suffix[b-b-kwargs6-expected_cols6]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_suffix_raises[suffixes0]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_suffix_raises[suffixes1]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge.py::test_merge_suffixes_produce_dup_columns_raises": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df0-right_df1-left_on0-right_on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df0-right_df1-left_on3-right_on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df0-right_df2-left_on0-right_on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df0-right_df2-left_on3-right_on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df0-left_on0-right_on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df0-left_on2-right_on2-left]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df0-left_on3-right_on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df1-left_on2-right_on2-left]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df1-left_on3-right_on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df2-left_on2-right_on2-left]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df1-right_df2-left_on3-right_on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df0-left_on0-right_on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df0-left_on2-right_on2-left]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df0-left_on3-right_on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df1-left_on0-right_on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df1-left_on2-right_on2-left]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df1-left_on3-right_on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df2-left_on0-right_on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df2-left_on1-right_on1-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_lefton_righton[left_df2-right_df2-left_on3-right_on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df1-on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df1-on2-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df1-on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df2-on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df2-on2-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df0-right_df2-on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df0-on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df0-on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df1-on2-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df1-on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df2-on2-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df1-right_df2-on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df0-on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df0-on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df1-on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df1-on2-right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df1-on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df2-on0-inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df2-on1-left]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_merge_index_as_string.py::test_merge_indexes_and_columns_on[left_df2-right_df2-on3-outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_empty_frames[inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_empty_frames[left]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_empty_frames[outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_empty_frames[right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_multi[inner]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_multi[left]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_multi[outer]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_multi[right]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_join_multi_wrong_order": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestJoinMultiMulti::test_single_common_level": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestMergeMulti::test_join_multi_levels2": "AssertionError: DataFrame.index level [2] are different", + "tests/reshape/merge/test_multi.py::TestMergeMulti::test_left_join_multi_index[False-False]": "AssertionError: DataFrame.iloc[:, 4] (column name='5th') are different", + "tests/reshape/merge/test_multi.py::TestMergeMulti::test_left_join_multi_index[False-True]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestMergeMulti::test_left_join_multi_index[True-False]": "AssertionError: DataFrame.iloc[:, 4] (column name='5th') are different", + "tests/reshape/merge/test_multi.py::TestMergeMulti::test_left_join_multi_index[True-True]": "TODO: Add a reason for failure", + "tests/reshape/merge/test_multi.py::TestMergeMulti::test_merge_datetime_multi_index_empty_df[left]": "AssertionError: Attributes of DataFrame.iloc[:, 1] (column name='state') are different", + "tests/reshape/merge/test_multi.py::TestMergeMulti::test_merge_datetime_multi_index_empty_df[right]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='state') are different", + "tests/reshape/test_crosstab.py::TestCrosstab::test_crosstab_duplicate_names": "TODO: Add a reason for failure", + "tests/reshape/test_crosstab.py::TestCrosstab::test_crosstab_multiple": "TODO: Add a reason for failure", + "tests/reshape/test_crosstab.py::TestCrosstab::test_crosstab_no_overlap": "TODO: Add a reason for failure", + "tests/reshape/test_crosstab.py::TestCrosstab::test_crosstab_with_categorial_columns": "TODO: Add a reason for failure", + "tests/reshape/test_crosstab.py::TestCrosstab::test_crosstab_with_empties": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_bins[array]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_bins[list]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_bins_from_interval_index": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_bins_not_monotonic": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_bool_coercion_to_int[array-assert_categorical_equal-6]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_bool_coercion_to_int[array-assert_categorical_equal-7]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_non_unique_labels[data0-bins0-labels0-expected_codes0-expected_labels0]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_non_unique_labels[data1-bins1-labels1-expected_codes1-expected_labels1]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_nullable_integer[False-False-bins1]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_nullable_integer[False-True-bins1]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_nullable_integer[True-False-bins1]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_nullable_integer[True-True-bins1]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_pass_labels[-0]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_pass_labels_compat": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_pass_series_name_to_factor": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_unordered_labels[data0-bins0-labels0-expected_codes0-expected_labels0]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_cut_unordered_labels[data1-bins1-labels1-expected_codes1-expected_labels1]": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_label_precision": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_no_right": "TODO: Add a reason for failure", + "tests/reshape/test_cut.py::test_right": "TODO: Add a reason for failure", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_drop_first_with_na[dense]": "AssertionError: DataFrame.columns are different", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_prefix_str[dense]": "TODO: Add a reason for failure", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_string_dtype[string=object]": "AssertionError: DataFrame are different", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_string_dtype[string=string[pyarrow]]": "TODO: Add a reason for failure", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_string_dtype[string=string[python]]": "TODO: Add a reason for failure", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_with_na[dense-None]": "AssertionError: DataFrame.columns are different", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_with_na[dense-bool]": "AssertionError: DataFrame.columns are different", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_with_na[dense-float64]": "AssertionError: DataFrame.columns are different", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_with_na[dense-i8]": "AssertionError: DataFrame.columns are different", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_dataframe_dummies_with_na[dense-uint8]": "AssertionError: DataFrame.columns are different", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_arrow_dtype": "TODO: Add a reason for failure", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_basic_drop_first_NA[dense]": "TODO: Add a reason for failure", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_basic_drop_first_one_level[dense]": "TODO: Add a reason for failure", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_ea_dtype[string=string[pyarrow]-category]": "TODO: Add a reason for failure", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_ea_dtype[string=string[pyarrow]-string]": "TODO: Add a reason for failure", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_ea_dtype[string=string[python]-category]": "TODO: Add a reason for failure", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_ea_dtype[string=string[python]-string]": "TODO: Add a reason for failure", + "tests/reshape/test_get_dummies.py::TestGetDummies::test_get_dummies_int_int": "TODO: Add a reason for failure", + "tests/reshape/test_melt.py::TestMelt::test_melt_ea_columns": "TODO: Add a reason for failure", + "tests/reshape/test_melt.py::TestMelt::test_melt_mixed_int_str_id_vars": "AssertionError: Attributes of DataFrame.iloc[:, 2] (column name='variable') are different", + "tests/reshape/test_melt.py::TestMelt::test_multiindex": "TODO: Add a reason for failure", + "tests/reshape/test_melt.py::TestMelt::test_vars_work_with_multiindex": "TODO: Add a reason for failure", + "tests/reshape/test_melt.py::TestWideToLong::test_invalid_separator": "TODO: Add a reason for failure", + "tests/reshape/test_melt.py::TestWideToLong::test_invalid_suffixtype": "TODO: Add a reason for failure", + "tests/reshape/test_melt.py::TestWideToLong::test_raise_of_column_name_value": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivot::test_pivot_empty_dataframe_period_dtype[D]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivot::test_pivot_empty_dataframe_period_dtype[M]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivot::test_pivot_empty_dataframe_period_dtype[Q]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivot::test_pivot_empty_dataframe_period_dtype[Y]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivot::test_pivot_index_is_none": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivot::test_pivot_table_empty_dataframe_correct_index": "AssertionError: Index are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_categorical_pivot_index_ordering[False]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_daily": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_monthly": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_complex_aggfunc": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_datetime_tz": "ValueError: Length of names must match number of levels in MultiIndex.", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_index_with_nan[False]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_index_with_nan[True]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_multi_functions": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_no_level_overlap": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_string_as_func": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_string_func_vs_func[f3-f_numpy3]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_string_func_vs_func[f4-f_numpy4]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_string_func_vs_func[f5-f_numpy5]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_aggfunc_nunique_with_different_values": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_categorical_observed_equal[False]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_multiindex_columns_doctest_case": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_nocols": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_not_series": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_with_iterator_values": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_table_with_mixed_nested_tuples": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_tz_in_values": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='2016-08-12 00:00:00-07:00') are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_categorical[False-False]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_categorical[False-None]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_categorical[False-True]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_list_like_values[False-list]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('baz', 'A')') are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_list_like_values[True-list]": "AssertionError: Attributes of DataFrame.iloc[:, 0] (column name='('baz', 'A')') are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_list_like_values_nans[False-values0]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_list_like_values_nans[True-values0]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_tz[ms-False]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_tz[ms-True]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_tz[ns-False]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_tz[ns-True]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_tz[s-False]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_tz[s-True]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_tz[us-False]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot.py::TestPivotTable::test_pivot_with_tz[us-True]": "AssertionError: DataFrame.index are different", + "tests/reshape/test_pivot_multilevel.py::test_pivot_list_like_columns[input_index1-input_columns1-values-expected_values1-expected_columns1-expected_index1]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot_multilevel.py::test_pivot_list_like_columns[input_index3-input_columns3-values-expected_values3-expected_columns3-expected_index3]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot_multilevel.py::test_pivot_list_like_columns[lev4-input_columns0-values-expected_values0-expected_columns0-expected_index0]": "TODO: Add a reason for failure", + "tests/reshape/test_pivot_multilevel.py::test_pivot_table_multiindex_values_as_two_params[values-and-index]": "AssertionError: DataFrame.iloc[:, 0] (column name='1') are different", + "tests/scalar/period/test_period.py::TestPeriodConstruction::test_construct_from_nat_string_and_freq[D]": "TODO: Add a reason for failure", + "tests/scalar/period/test_period.py::TestPeriodConstruction::test_construct_from_nat_string_and_freq[M]": "TODO: Add a reason for failure", + "tests/scalar/period/test_period.py::TestPeriodConstruction::test_construct_from_nat_string_and_freq[Y]": "TODO: Add a reason for failure", + "tests/scalar/period/test_period.py::TestPeriodConstruction::test_construct_from_nat_string_and_freq[h]": "TODO: Add a reason for failure", + "tests/scalar/period/test_period.py::TestPeriodConstruction::test_construction_from_min_timestamp[ms]": "ValueError: year must be in 1..9999, not -292275055", + "tests/scalar/period/test_period.py::TestPeriodConstruction::test_construction_from_min_timestamp[us]": "ValueError: year must be in 1..9999, not -290308", + "tests/scalar/period/test_period.py::TestPeriodConstruction::test_constructor_corner": "TODO: Add a reason for failure", + "tests/scalar/period/test_period.py::TestPeriodConstruction::test_period_cons_nat": "TODO: Add a reason for failure", + "tests/scalar/period/test_period.py::TestPeriodMethods::test_repr_nat": "TODO: Add a reason for failure", + "tests/scalar/test_nat.py::test_identity[-9223372036854775808-Period]": "TODO: Add a reason for failure", + "tests/scalar/test_nat.py::test_identity[-Period]": "TODO: Add a reason for failure", + "tests/scalar/test_nat.py::test_identity[NAT-Period]": "TODO: Add a reason for failure", + "tests/scalar/test_nat.py::test_identity[NaT-Period]": "TODO: Add a reason for failure", + "tests/scalar/test_nat.py::test_identity[None-Period]": "TODO: Add a reason for failure", + "tests/scalar/test_nat.py::test_identity[nan0-Period]": "TODO: Add a reason for failure", + "tests/scalar/test_nat.py::test_identity[nan1-Period]": "TODO: Add a reason for failure", + "tests/scalar/test_nat.py::test_identity[nat-Period]": "TODO: Add a reason for failure", + "tests/scalar/test_nat.py::test_identity[value4-Period]": "TODO: Add a reason for failure", + "tests/scalar/timedelta/methods/test_as_unit.py::TestAsUnit::test_as_unit": "TODO: Add a reason for failure", + "tests/scalar/timedelta/test_arithmetic.py::TestTimedeltaComparison::test_compare_pytimedelta_bounds": "TODO: Add a reason for failure", + "tests/scalar/timedelta/test_constructors.py::test_construction_out_of_bounds_td64s[106752000000000-D]": "TODO: Add a reason for failure", + "tests/scalar/timedelta/test_constructors.py::test_construction_out_of_bounds_td64s[15251000000000-W]": "TODO: Add a reason for failure", + "tests/scalar/timedelta/test_constructors.py::test_construction_out_of_bounds_td64s[153722868000000000-m]": "TODO: Add a reason for failure", + "tests/scalar/timedelta/test_constructors.py::test_construction_out_of_bounds_td64s[2562048000000000-h]": "TODO: Add a reason for failure", + "tests/scalar/timedelta/test_constructors.py::test_timedelta_constructor_identity": "TODO: Add a reason for failure", + "tests/scalar/timedelta/test_timedelta.py::TestNonNano::test_hash": "TODO: Add a reason for failure", + "tests/scalar/timedelta/test_timedelta.py::TestNonNano::test_max[ms]": "TODO: Add a reason for failure", + "tests/scalar/timedelta/test_timedelta.py::TestNonNano::test_max[s]": "TODO: Add a reason for failure", + "tests/scalar/timedelta/test_timedelta.py::TestNonNano::test_min[ms]": "TODO: Add a reason for failure", + "tests/scalar/timedelta/test_timedelta.py::TestNonNano::test_min[s]": "TODO: Add a reason for failure", + "tests/scalar/timestamp/methods/test_as_unit.py::TestTimestampAsUnit::test_as_unit": "TODO: Add a reason for failure", + "tests/scalar/timestamp/methods/test_replace.py::TestTimestampReplace::test_replace_out_of_pydatetime_bounds": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_constructors.py::test_timestamp_constructor_identity": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_max[ms]": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_max[s]": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_max[us]": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_min[ms]": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_min[s]": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_timestamp.py::TestNonNano::test_min[us]": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_timestamp.py::TestTimestampProperties::test_dow_historic[-0040-1-1-4]": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_timestamp.py::TestTimestampProperties::test_dow_historic[0000-2-29-1]": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_timestamp.py::TestTimestampProperties::test_dow_historic[0000-3-1-2]": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_timestamp.py::TestTimestampProperties::test_dow_parametric": "TODO: Add a reason for failure", + "tests/scalar/timestamp/test_timestamp.py::test_negative_dates": "TODO: Add a reason for failure", + "tests/series/accessors/test_cat_accessor.py::TestCatAccessor::test_categorical_delegations": "TODO: Add a reason for failure", + "tests/series/accessors/test_cat_accessor.py::TestCatAccessor::test_dt_accessor_api_for_categorical[idx0]": "TODO: Add a reason for failure", + "tests/series/accessors/test_cat_accessor.py::TestCatAccessor::test_dt_accessor_api_for_categorical[idx1]": "AssertionError: Series are different", + "tests/series/accessors/test_cat_accessor.py::TestCatAccessor::test_dt_accessor_api_for_categorical[idx3]": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_date_tz": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_accessor_limited_display_api": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_accessor_no_new_attributes": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_accessor_updates_on_inplace": "assert 0 2018-01-01\n1 2018-01-02\n2 2018-01-01\n3 2018-01-04\n4 2018-01-05\n5 2018-01-06\n6 2018-01-07...", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_namespace_accessor_datetime64[D]": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_namespace_accessor_datetime64[ms]": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_namespace_accessor_datetime64[s]": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_namespace_accessor_datetime64tz": "AssertionError: Attributes of Series are different", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_namespace_accessor_timedelta": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_dt_round_tz": "AssertionError: Series are different", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_isocalendar[input_series0-expected_output0]": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_isocalendar[input_series1-expected_output1]": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_isocalendar[input_series2-expected_output2]": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_isocalendar[input_series4-expected_output4]": "TODO: Add a reason for failure", + "tests/series/accessors/test_dt_accessor.py::TestSeriesDatetimeValues::test_isocalendar[input_series5-expected_output5]": "TODO: Add a reason for failure", + "tests/series/accessors/test_list_accessor.py::test_list_getitem_invalid_index[list_dtype0]": "TODO: Add a reason for failure", + "tests/series/indexing/test_datetime.py::test_indexing_over_size_cutoff_period_index": "TODO: Add a reason for failure", + "tests/series/indexing/test_datetime.py::test_indexing_unordered": "TODO: Add a reason for failure", + "tests/series/indexing/test_getitem.py::TestGetitemBooleanMask::test_getitem_boolean_dt64_copies": "AssertionError: assert array([1451635200000000, 1451721600000000]) is None", + "tests/series/indexing/test_getitem.py::TestGetitemDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key0]": "TODO: Add a reason for failure", + "tests/series/indexing/test_getitem.py::TestGetitemDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_getitem.py::TestGetitemDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key0]": "TODO: Add a reason for failure", + "tests/series/indexing/test_getitem.py::TestGetitemDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_getitem.py::TestSeriesGetitemScalars::test_getitem_float_keys_tuple_values": "TODO: Add a reason for failure", + "tests/series/indexing/test_getitem.py::TestSeriesGetitemSlices::test_getitem_partial_str_slice_with_datetimeindex": "TODO: Add a reason for failure", + "tests/series/indexing/test_getitem.py::test_getitem_1tuple_slice_without_multiindex": "TODO: Add a reason for failure", + "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key0]": "TODO: Add a reason for failure", + "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated[key1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key2]": "TODO: Add a reason for failure", + "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_getitem_dict_and_set_deprecated_multiindex[key3]": "TODO: Add a reason for failure", + "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key0]": "TODO: Add a reason for failure", + "tests/series/indexing/test_indexing.py::TestDeprecatedIndexers::test_setitem_dict_and_set_disallowed[key1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-0-invalid5]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-0-invalid6]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer1-invalid5]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer1-invalid6]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer2-invalid5]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer2-invalid6]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer3-invalid5]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer3-invalid6]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer4-invalid5]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int-indexer4-invalid6]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-0-invalid5]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-0-invalid6]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer1-invalid5]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer1-invalid6]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer2-invalid5]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer2-invalid6]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer3-invalid5]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer3-invalid6]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer4-invalid5]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::TestSetitemValidation::test_setitem_validation_scalar_int[int64-indexer4-invalid6]": "Failed: DID NOT RAISE ", + "tests/series/indexing/test_indexing.py::test_slice_with_negative_step[index1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionBool::test_int_key[iloc-True-bool-False]": "assert array([ True, True, True, False]) is array([ True, False, True, False])", + "tests/series/indexing/test_setitem.py::TestCoercionBool::test_int_key[loc-True-bool-False]": "assert array([ True, True, True, False]) is array([ True, False, True, False])", + "tests/series/indexing/test_setitem.py::TestCoercionBool::test_int_key[setitem-True-bool-False]": "assert array([ True, True, True, False]) is array([ True, False, True, False])", + "tests/series/indexing/test_setitem.py::TestCoercionBool::test_series_where[True-bool-False]": "assert array([ True, False, True, False]) is array([ True, False, True, False])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[iloc-(1+1j)-complex128-False]": "assert array([1.+1.j, 1.+1.j, 3.+3.j, 4.+4.j]) is array([1.+1.j, 1.+1.j, 3.+3.j, 4.+4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[iloc-1-complex128-False]": "assert array([1.+1.j, 1.+0.j, 3.+3.j, 4.+4.j]) is array([1.+1.j, 1.+0.j, 3.+3.j, 4.+4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[iloc-1.1-complex128-False]": "assert array([1. +1.j, 1.1+0.j, 3. +3.j, 4. +4.j]) is array([1. +1.j, 1.1+0.j, 3. +3.j, 4. +4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[loc-(1+1j)-complex128-False]": "assert array([1.+1.j, 1.+1.j, 3.+3.j, 4.+4.j]) is array([1.+1.j, 1.+1.j, 3.+3.j, 4.+4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[loc-1-complex128-False]": "assert array([1.+1.j, 1.+0.j, 3.+3.j, 4.+4.j]) is array([1.+1.j, 1.+0.j, 3.+3.j, 4.+4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[loc-1.1-complex128-False]": "assert array([1. +1.j, 1.1+0.j, 3. +3.j, 4. +4.j]) is array([1. +1.j, 1.1+0.j, 3. +3.j, 4. +4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[setitem-(1+1j)-complex128-False]": "assert array([1.+1.j, 1.+1.j, 3.+3.j, 4.+4.j]) is array([1.+1.j, 1.+1.j, 3.+3.j, 4.+4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[setitem-1-complex128-False]": "assert array([1.+1.j, 1.+0.j, 3.+3.j, 4.+4.j]) is array([1.+1.j, 1.+0.j, 3.+3.j, 4.+4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_int_key[setitem-1.1-complex128-False]": "assert array([1. +1.j, 1.1+0.j, 3. +3.j, 4. +4.j]) is array([1. +1.j, 1.1+0.j, 3. +3.j, 4. +4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_series_where[(1+1j)-complex128-False]": "assert array([1.+1.j, 2.+2.j, 3.+3.j, 4.+4.j]) is array([1.+1.j, 2.+2.j, 3.+3.j, 4.+4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_series_where[1-complex128-False]": "assert array([1.+1.j, 2.+2.j, 3.+3.j, 4.+4.j]) is array([1.+1.j, 2.+2.j, 3.+3.j, 4.+4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionComplex::test_series_where[1.1-complex128-False]": "assert array([1.+1.j, 2.+2.j, 3.+3.j, 4.+4.j]) is array([1.+1.j, 2.+2.j, 3.+3.j, 4.+4.j])", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_int_key[iloc-val0-datetime64[ns]-False]": "AssertionError: assert array(['2011-01-01T00:00:00.000000000', '2011-01-02T00:00:00.000000000',\n '2011-01-03T0...", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_int_key[loc-val0-datetime64[ns]-False]": "AssertionError: assert array(['2011-01-01T00:00:00.000000000', '2011-01-02T00:00:00.000000000',\n '2011-01-03T0...", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_int_key[setitem-val0-datetime64[ns]-False]": "AssertionError: assert array(['2011-01-01T00:00:00.000000000', '2011-01-02T00:00:00.000000000',\n '2011-01-03T0...", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64::test_series_where[val0-datetime64[ns]-False]": "AssertionError: assert array(['2011-01-01T00:00:00.000000000', '2011-01-02T00:00:00.000000000',\n '2011-01-03T0...", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[iloc-val0-datetime64[ns, US/Eastern]-False]": "AssertionError: assert array(['2011-01-01T05:00:00.000000000', '2011-01-02T05:00:00.000000000',\\n '2011-01-03T...", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[iloc-val1-datetime64[ns, US/Eastern]-False]": "AssertionError: assert array(['2011-01-01T05:00:00.000000000', '2011-01-02T05:00:00.000000000',\\n '2011-01-03T...", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[loc-val0-datetime64[ns, US/Eastern]-False]": "AssertionError: assert array(['2011-01-01T05:00:00.000000000', '2011-01-02T05:00:00.000000000',\\n '2011-01-03T...", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[loc-val1-datetime64[ns, US/Eastern]-False]": "AssertionError: assert array(['2011-01-01T05:00:00.000000000', '2011-01-02T05:00:00.000000000',\\n '2011-01-03T...", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[setitem-val0-datetime64[ns, US/Eastern]-False]": "AssertionError: assert array(['2011-01-01T05:00:00.000000000', '2011-01-02T05:00:00.000000000',\\n '2011-01-03T...", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_int_key[setitem-val1-datetime64[ns, US/Eastern]-False]": "AssertionError: assert array(['2011-01-01T05:00:00.000000000', '2011-01-02T05:00:00.000000000',\\n '2011-01-03T...", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_series_where[val0-datetime64[ns, US/Eastern]-False]": "AssertionError: assert array(['2011-01-01T05:00:00.000000000', '2011-01-02T05:00:00.000000000',\\n '2011-01-03T...", + "tests/series/indexing/test_setitem.py::TestCoercionDatetime64TZ::test_series_where[val1-datetime64[ns, US/Eastern]-False]": "AssertionError: assert array(['2011-01-01T05:00:00.000000000', '2011-01-02T05:00:00.000000000',\\n '2011-01-03T...", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-1-float32-False]": "assert array([1.1, 1. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-1.1-float32-False]": "assert array([1.1, 1.1, 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-val4-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-val5-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-val7-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[iloc-val8-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-1-float32-False]": "assert array([1.1, 1. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-1.1-float32-False]": "assert array([1.1, 1.1, 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-val4-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-val5-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-val7-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[loc-val8-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-1-float32-False]": "assert array([1.1, 1. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-1.1-float32-False]": "assert array([1.1, 1.1, 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-val4-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-val5-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-val7-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_int_key[setitem-val8-float32-False]": "assert array([1.1, 2. , 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[1-float32-False]": "assert array([1.1, 2.2, 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[1.1-float32-False]": "assert array([1.1, 2.2, 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[val4-float32-False]": "assert array([1.1, 2.2, 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[val5-float32-False]": "assert array([1.1, 2.2, 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[val7-float32-False]": "assert array([1.1, 2.2, 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat32::test_series_where[val8-float32-False]": "assert array([1.1, 2.2, 3.3, 4.4], dtype=float32) is array([1.1, 2.2, 3.3, 4.4], dtype=float32)", + "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[iloc-1-float64-False]": "assert array([1.1, 1. , 3.3, 4.4]) is array([1.1, 2.2, 3.3, 4.4])", + "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[iloc-1.1-float64-False]": "assert array([1.1, 1.1, 3.3, 4.4]) is array([1.1, 2.2, 3.3, 4.4])", + "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[loc-1-float64-False]": "assert array([1.1, 1. , 3.3, 4.4]) is array([1.1, 2.2, 3.3, 4.4])", + "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[loc-1.1-float64-False]": "assert array([1.1, 1.1, 3.3, 4.4]) is array([1.1, 2.2, 3.3, 4.4])", + "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[setitem-1-float64-False]": "assert array([1.1, 1. , 3.3, 4.4]) is array([1.1, 2.2, 3.3, 4.4])", + "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_int_key[setitem-1.1-float64-False]": "assert array([1.1, 1.1, 3.3, 4.4]) is array([1.1, 2.2, 3.3, 4.4])", + "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_series_where[1-float64-False]": "assert array([1.1, 2.2, 3.3, 4.4]) is array([1.1, 2.2, 3.3, 4.4])", + "tests/series/indexing/test_setitem.py::TestCoercionFloat64::test_series_where[1.1-float64-False]": "assert array([1.1, 2.2, 3.3, 4.4]) is array([1.1, 2.2, 3.3, 4.4])", + "tests/series/indexing/test_setitem.py::TestCoercionInt64::test_int_key[iloc-1-int64-False]": "assert array([1, 1, 3, 4]) is array([1, 2, 3, 4])", + "tests/series/indexing/test_setitem.py::TestCoercionInt64::test_int_key[loc-1-int64-False]": "assert array([1, 1, 3, 4]) is array([1, 2, 3, 4])", + "tests/series/indexing/test_setitem.py::TestCoercionInt64::test_int_key[setitem-1-int64-False]": "assert array([1, 1, 3, 4]) is array([1, 2, 3, 4])", + "tests/series/indexing/test_setitem.py::TestCoercionInt64::test_series_where[1-int64-False]": "assert array([1, 2, 3, 4]) is array([1, 2, 3, 4])", + "tests/series/indexing/test_setitem.py::TestCoercionInt8::test_int_key[iloc-val0-int8-None]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionInt8::test_int_key[loc-val0-int8-None]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionInt8::test_int_key[setitem-val0-int8-None]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionInt8::test_series_where[val0-int8-None]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionInt8::test_series_where[val1-int16-True]": "AssertionError: Attributes of Series are different", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[iloc-object-(1+1j)]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[iloc-object-1.1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[iloc-object-1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[iloc-object-True]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[loc-object-(1+1j)]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[loc-object-1.1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[loc-object-1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[loc-object-True]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[setitem-object-(1+1j)]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[setitem-object-1.1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[setitem-object-1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_int_key[setitem-object-True]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_series_where[object-(1+1j)]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_series_where[object-1.1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_series_where[object-1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionObject::test_series_where[object-True]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestCoercionString::test_int_key[iloc-e-exp_dtype1-False]": "AssertionError: assert \n['a', 'e', 'c', 'd']\nLength: 4, dtype: str is \n['a', '...", + "tests/series/indexing/test_setitem.py::TestCoercionString::test_int_key[loc-e-exp_dtype1-False]": "AssertionError: assert \n['a', 'e', 'c', 'd']\nLength: 4, dtype: str is \n['a', '...", + "tests/series/indexing/test_setitem.py::TestCoercionString::test_int_key[setitem-e-exp_dtype1-False]": "AssertionError: assert \n['a', 'e', 'c', 'd']\nLength: 4, dtype: str is \n['a', '...", + "tests/series/indexing/test_setitem.py::TestCoercionString::test_series_where[e-exp_dtype1-False]": "AssertionError: assert \n['a', 'b', 'c', 'd']\nLength: 4, dtype: str is \n['a', '...", + "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_index_where[1-object-True]": "AssertionError: Index are different", + "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_int_key[iloc-val0-timedelta64[us]-False]": "AssertionError: assert array([ 86400000000, 172800000000, 259200000000, 345600000000],\n dtype='timedelta64[us]'...", + "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_int_key[loc-val0-timedelta64[us]-False]": "AssertionError: assert array([ 86400000000, 172800000000, 259200000000, 345600000000],\n dtype='timedelta64[us]'...", + "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_int_key[setitem-val0-timedelta64[us]-False]": "AssertionError: assert array([ 86400000000, 172800000000, 259200000000, 345600000000],\n dtype='timedelta64[us]'...", + "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_series_where[1-object-True]": "AssertionError: Attributes of Series are different", + "tests/series/indexing/test_setitem.py::TestCoercionTimedelta64::test_series_where[val0-timedelta64[us]-False]": "AssertionError: assert array([ 86400000000, 172800000000, 259200000000, 345600000000],\n dtype='timedelta64[us]'...", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[iloc-obj1-expected1]": "assert array([nan, 2., 3.]) is array([1., 2., 3.])", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[iloc-obj2-expected2]": "AssertionError: assert array(['2000-01-01T00:00:00.000000', '2000-01-02T00:00:00.000000',\n '2000-01-03T00:00:0...", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[iloc-obj3-expected3]": "AssertionError: assert \n[nan, 'bar', 'baz']\nLength: 3, dtype: str is \n['foo', ...", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[loc-obj1-expected1]": "assert array([nan, 2., 3.]) is array([1., 2., 3.])", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[loc-obj2-expected2]": "AssertionError: assert array(['2000-01-01T00:00:00.000000', '2000-01-02T00:00:00.000000',\n '2000-01-03T00:00:0...", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[loc-obj3-expected3]": "AssertionError: assert \n[nan, 'bar', 'baz']\nLength: 3, dtype: str is \n['foo', ...", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[setitem-obj1-expected1]": "assert array([nan, 2., 3.]) is array([1., 2., 3.])", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[setitem-obj2-expected2]": "AssertionError: assert array(['2000-01-01T00:00:00.000000', '2000-01-02T00:00:00.000000',\n '2000-01-03T00:00:0...", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_int_key[setitem-obj3-expected3]": "AssertionError: assert \n[nan, 'bar', 'baz']\nLength: 3, dtype: str is \n['foo', ...", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_series_where[obj1-expected1]": "assert array([1., 2., 3.]) is array([1., 2., 3.])", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_series_where[obj2-expected2]": "AssertionError: assert array(['2000-01-01T00:00:00.000000', '2000-01-02T00:00:00.000000',\n '2000-01-03T00:00:0...", + "tests/series/indexing/test_setitem.py::TestSeriesNoneCoercion::test_series_where[obj3-expected3]": "AssertionError: assert \n['foo', 'bar', 'baz']\nLength: 3, dtype: str is \n['foo'...", + "tests/series/indexing/test_setitem.py::TestSetitemBooleanMask::test_setitem_mask_smallint_upcast": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemCasting::test_setitem_boolean_array_into_npbool": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_index_where[M8[ns]-None]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_index_where[m8[ns]-None]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-None-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-None-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-None-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-array-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-array-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-array-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-list-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-list-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[M8[ns]-list-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-None-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-None-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-None-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-array-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-array-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-array-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-list-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-list-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_mask_key[m8[ns]-list-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_series_where[M8[ns]-None]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_series_where[m8[ns]-None]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-None-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-None-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-None-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-array-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-array-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-array-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-list-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-list-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[M8[ns]-list-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-None-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-None-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-None-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-array-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-array-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-array-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-list-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-list-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64IntoInt::test_slice_key[m8[ns]-list-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemDT64Values::test_setitem_with_tz_dst[iloc]": "AssertionError: Series are different", + "tests/series/indexing/test_setitem.py::TestSetitemDT64Values::test_setitem_with_tz_dst[loc]": "AssertionError: Series are different", + "tests/series/indexing/test_setitem.py::TestSetitemDT64Values::test_setitem_with_tz_dst[setitem]": "AssertionError: Series are different", + "tests/series/indexing/test_setitem.py::TestSetitemFloatNDarrayIntoIntegerSeries::test_slice_key[iloc-val0-False]": "assert array([2, 3, 2, 3, 4]) is array([0, 1, 2, 3, 4])", + "tests/series/indexing/test_setitem.py::TestSetitemFloatNDarrayIntoIntegerSeries::test_slice_key[loc-val0-False]": "assert array([2, 3, 2, 3, 4]) is array([0, 1, 2, 3, 4])", + "tests/series/indexing/test_setitem.py::TestSetitemFloatNDarrayIntoIntegerSeries::test_slice_key[setitem-val0-False]": "assert array([2, 3, 2, 3, 4]) is array([0, 1, 2, 3, 4])", + "tests/series/indexing/test_setitem.py::TestSetitemIntoIntegerSeriesNeedsUpcast::test_series_where[512]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemIntoIntegerSeriesNeedsUpcast::test_series_where[val1]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemMismatchedTZCastsToObject::test_int_key[iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemMismatchedTZCastsToObject::test_int_key[loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemMismatchedTZCastsToObject::test_int_key[setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemMismatchedTZCastsToObject::test_series_where": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int16-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int16-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int16-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int32-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int32-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int32-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int64-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int64-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int64-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int8-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int8-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[int8-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint16-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint16-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint16-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint32-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint32-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint32-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint64-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint64-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint64-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint8-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint8-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemRangeIntoIntegerSeries::test_slice_key[uint8-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_index_where[int]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_int_key[int-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_int_key[int-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_int_key[int-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_mask_key[int-iloc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_mask_key[int-loc]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_mask_key[int-setitem]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemTimedelta64IntoNumeric::test_series_where[int]": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemViewCopySemantics::test_dt64tz_setitem_does_not_mutate_dti": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemViewCopySemantics::test_setitem_invalidates_datetime_index_freq": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::TestSetitemWithExpansion::test_setitem_enlarge_with_na[na5-target_na5-int64-object-2-False]": "AssertionError: Attributes of Series are different", + "tests/series/indexing/test_setitem.py::test_setitem_scalar_into_readonly_backing_data": "TODO: Add a reason for failure", + "tests/series/indexing/test_setitem.py::test_setitem_slice_into_readonly_backing_data": "TODO: Add a reason for failure", + "tests/series/indexing/test_where.py::test_where_inplace": "assert None is 0 0.189053382\n1 NaN\n2 NaN\n3 NaN\n4 1.799707383\ndtype: float64", + "tests/series/indexing/test_xs.py::TestXSWithMultiIndex::test_xs_level_series": "TODO: Add a reason for failure", + "tests/series/methods/test_argsort.py::TestSeriesArgsort::test_argsort_axis": "TODO: Add a reason for failure", + "tests/series/methods/test_argsort.py::TestSeriesArgsort::test_argsort_stable": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_dt64tz_to_str": "AssertionError: Attributes of Series are different", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float-uint16]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float-uint32]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float-uint64]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float-uint8]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float32-uint16]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float32-uint32]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float32-uint64]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float32-uint8]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float64-uint16]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float64-uint32]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float64-uint64]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_float_to_uint_negatives_raise[float64-uint8]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_from_float_to_str[Float32]": "AssertionError: Attributes of Series are different", + "tests/series/methods/test_astype.py::TestAstype::test_astype_from_float_to_str[float32]": "TODO: Add a reason for failure", + "tests/series/methods/test_astype.py::TestAstype::test_astype_str_cast_dt64": "AssertionError: Attributes of Series are different", + "tests/series/methods/test_astype.py::TestAstypeCategorical::test_astype_categorical_to_other": "TODO: Add a reason for failure", + "tests/series/methods/test_clip.py::TestSeriesClip::test_clip_against_list_like[upper0-True]": "assert 0 1\n1 2\n2 3\ndtype: int64 is 0 1\n1 2\n2 3\ndtype: int64", + "tests/series/methods/test_clip.py::TestSeriesClip::test_clip_against_list_like[upper1-True]": "assert 0 1\n1 2\n2 3\ndtype: int64 is 0 1\n1 2\n2 3\ndtype: int64", + "tests/series/methods/test_diff.py::TestSeriesDiff::test_diff_bool": "AssertionError: Attributes of Series are different", + "tests/series/methods/test_drop.py::test_drop_exception_raised[drop_labels1-0-KeyError-not found in axis]": "Failed: DID NOT RAISE ", + "tests/series/methods/test_drop.py::test_drop_unique_and_non_unique_index[data1-index1-drop_labels1-rows-expected_data1-expected_index1]": "TODO: Add a reason for failure", + "tests/series/methods/test_equals.py::test_equals[arr1-idx1]": "assert False", + "tests/series/methods/test_equals.py::test_equals[arr2-idx2]": "assert False", + "tests/series/methods/test_equals.py::test_equals_list_array[val5]": "TODO: Add a reason for failure", + "tests/series/methods/test_equals.py::test_equals_list_array[val6]": "TODO: Add a reason for failure", + "tests/series/methods/test_equals.py::test_equals_list_array[val7]": "TODO: Add a reason for failure", + "tests/series/methods/test_equals.py::test_equals_mismatched_nas[Decimal-NoneType]": "TODO: Add a reason for failure", + "tests/series/methods/test_equals.py::test_equals_mismatched_nas[Decimal-float0]": "TODO: Add a reason for failure", + "tests/series/methods/test_equals.py::test_equals_mismatched_nas[Decimal-float1]": "TODO: Add a reason for failure", + "tests/series/methods/test_equals.py::test_equals_mismatched_nas[NoneType-Decimal]": "TODO: Add a reason for failure", + "tests/series/methods/test_equals.py::test_equals_mismatched_nas[float0-Decimal]": "TODO: Add a reason for failure", + "tests/series/methods/test_equals.py::test_equals_mismatched_nas[float1-Decimal]": "TODO: Add a reason for failure", + "tests/series/methods/test_explode.py::test_duplicate_index": "TODO: Add a reason for failure", + "tests/series/methods/test_explode.py::test_ignore_index": "TODO: Add a reason for failure", + "tests/series/methods/test_fillna.py::TestFillnaPad::test_fillna_int": "assert None is 0 67\n1 -48\n2 -79\n3 -41\n4 -18\n5 62\n6 -10\n7 -82\n8 -34\n9 20\n10...", + "tests/series/methods/test_fillna.py::TestFillnaPad::test_pad_nan": "assert None is z NaN\na 1.0\nb 1.0\nc 3.0\nd 3.0\ndtype: float64", + "tests/series/methods/test_fillna.py::TestSeriesFillNA::test_datetime64_fillna_mismatched_reso_no_rounding[None-False]": "AssertionError: Attributes of Series are different", + "tests/series/methods/test_fillna.py::TestSeriesFillNA::test_fillna_dont_cast_strings": "AssertionError: Attributes of Series are different", + "tests/series/methods/test_fillna.py::TestSeriesFillNA::test_fillna_nat": "TODO: Add a reason for failure", + "tests/series/methods/test_fillna.py::TestSeriesFillNA::test_fillna_numeric_inplace": "assert None is z 0.0\na 1.0\nb 0.0\nc 3.0\nd 0.0\ndtype: float64", + "tests/series/methods/test_fillna.py::TestSeriesFillNA::test_timedelta64_fillna_mismatched_reso_no_rounding[False]": "AssertionError: Attributes of Series are different", + "tests/series/methods/test_infer_objects.py::TestInferObjects::test_copy[index]": "TODO: Add a reason for failure", + "tests/series/methods/test_infer_objects.py::TestInferObjects::test_copy[series]": "TODO: Add a reason for failure", + "tests/series/methods/test_info.py::test_info_memory": "TODO: Add a reason for failure", + "tests/series/methods/test_info.py::test_info_memory_usage_deep_not_pypy": "TODO: Add a reason for failure", + "tests/series/methods/test_info.py::test_info_series[False]": "TODO: Add a reason for failure", + "tests/series/methods/test_info.py::test_info_series[True]": "TODO: Add a reason for failure", + "tests/series/methods/test_info.py::test_info_show_counts_false": "assert ']": "TODO: Add a reason for failure", + "tests/series/methods/test_nlargest.py::TestSeriesNLargestNSmallest::test_nlargest_boundary_datetimelike[nsmallest-datetime64[ns]]": "TODO: Add a reason for failure", + "tests/series/methods/test_nlargest.py::TestSeriesNLargestNSmallest::test_nlargest_boundary_datetimelike[nsmallest-timedelta64[ns]]": "TODO: Add a reason for failure", + "tests/series/methods/test_nlargest.py::TestSeriesNLargestNSmallest::test_nlargest_misc": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[Int16]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[Int32]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[Int64]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[Int8]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[UInt16]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[UInt32]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[UInt64]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_all_na[UInt8]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[Int16]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[Int32]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[Int64]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[Int8]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[UInt16]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[UInt32]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[UInt64]": "TODO: Add a reason for failure", + "tests/series/methods/test_quantile.py::TestSeriesQuantile::test_quantile_dtype_size[UInt8]": "TODO: Add a reason for failure", + "tests/series/methods/test_rank.py::TestSeriesRank::test_rank_categorical": "TODO: Add a reason for failure", + "tests/series/methods/test_reindex.py::test_reindex": "TODO: Add a reason for failure", + "tests/series/methods/test_reindex.py::test_reindex_downcasting": "AssertionError: Attributes of Series are different", + "tests/series/methods/test_reindex.py::test_reindex_fill_value": "AssertionError: Series are different", + "tests/series/methods/test_reindex.py::test_reindex_inference": "AssertionError: Attributes of Series are different", + "tests/series/methods/test_reindex.py::test_reindex_multiindex_automatic_level[a-True]": "AssertionError: Series are different", + "tests/series/methods/test_reindex.py::test_reindex_pad2": "TODO: Add a reason for failure", + "tests/series/methods/test_reindex.py::test_reindexing_with_float64_NA_log": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace": "assert None is 0 -1.000000\n1 -1.000000\n2 -1.000000\n3 -1.000000\n4 1.799707\n5 1.144166\n6 ...", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace2": "assert 2020-01-01 -1\n2020-01-02 -1\n2020-01-03 -1\n2020-01-04 -1\n2020-01-05 ...", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_Int_with_na[Int16]": "assert None is 0 \n1 \ndtype: Int16", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_Int_with_na[Int32]": "assert None is 0 \n1 \ndtype: Int32", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_Int_with_na[Int64]": "assert None is 0 \n1 \ndtype: Int64", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_Int_with_na[Int8]": "assert None is 0 \n1 \ndtype: Int8", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_Int_with_na[UInt16]": "assert None is 0 \n1 \ndtype: UInt16", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_Int_with_na[UInt32]": "assert None is 0 \n1 \ndtype: UInt32", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_Int_with_na[UInt64]": "assert None is 0 \n1 \ndtype: UInt64", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_Int_with_na[UInt8]": "assert None is 0 \n1 \ndtype: UInt8", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_categorical_inplace": "AssertionError: assert 0 b\n1 b\n2 c\ndtype: category\nCategories (3, str): ['a', 'b', 'c'] is 0 b\n1 ...", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_change_dtype_series": "AssertionError: DataFrame.iloc[:, 0] (column name='Test') are different", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_dtype[string-input_data5-to_replace5-expected_data5]": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_empty_copy[False]": "assert None is Series([], dtype: float64)", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_empty_copy[True]": "assert None is Empty DataFrame\nColumns: [0]\nIndex: []", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_explicit_none": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_mixed_types": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_na_in_obj_column[Int64]": "assert None is 0 0\n1 2\n2 \ndtype: Int64", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_na_in_obj_column[object]": "assert 0 0\n1 2\n2 \ndtype: object is 0 0\n1 2\n2 \ndtype: object", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_nullable_numeric": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_numeric_column_with_na[0.5]": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_numeric_column_with_na[0]": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_string_dtype": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_string_dtype_list_to_replace": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_value_none_dtype_numeric[2.0]": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_value_none_dtype_numeric[2]": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_value_none_dtype_numeric[nan]": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_with_dictlike_and_string_dtype[string[pyarrow]]": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::TestSeriesReplace::test_replace_with_dictlike_and_string_dtype[string[python]]": "TODO: Add a reason for failure", + "tests/series/methods/test_replace.py::test_replace_from_index": "AssertionError: Series are different", + "tests/series/methods/test_reset_index.py::TestResetIndex::test_reset_index_drop_errors": "TODO: Add a reason for failure", + "tests/series/methods/test_reset_index.py::TestResetIndex::test_reset_index_level": "TODO: Add a reason for failure", + "tests/series/methods/test_reset_index.py::test_column_name_duplicates[False-names0-expected_names0]": "Failed: DID NOT RAISE ", + "tests/series/methods/test_reset_index.py::test_column_name_duplicates[False-names1-expected_names1]": "Failed: DID NOT RAISE ", + "tests/series/methods/test_round.py::TestSeriesRound::test_round_builtin[Float32]": "TODO: Add a reason for failure", + "tests/series/methods/test_round.py::TestSeriesRound::test_round_builtin[Float64]": "TODO: Add a reason for failure", + "tests/series/methods/test_round.py::TestSeriesRound::test_round_numpy_with_nan[Float32]": "TODO: Add a reason for failure", + "tests/series/methods/test_round.py::TestSeriesRound::test_round_numpy_with_nan[Float64]": "TODO: Add a reason for failure", + "tests/series/methods/test_sort_index.py::TestSeriesSortIndex::test_sort_index_na_position": "AssertionError: Series.index are different", + "tests/series/methods/test_sort_index.py::TestSeriesSortIndexKey::test_sort_index_na_position_key[None]": "AssertionError: Series.index are different", + "tests/series/methods/test_sort_values.py::TestSeriesSortValues::test_sort_values_categorical": "TODO: Add a reason for failure", + "tests/series/methods/test_truncate.py::TestTruncate::test_truncate_datetimeindex_tz": "AssertionError: Series.index are different", + "tests/series/methods/test_tz_localize.py::TestTZLocalize::test_series_tz_localize_ambiguous_bool": "Failed: DID NOT RAISE ", + "tests/series/methods/test_unique.py::TestUnique::test_tz_unique": "TypeError: Cannot interpret 'datetime64[us, US/Eastern]' as a data type", + "tests/series/test_api.py::TestSeriesMisc::test_index_tab_completion[index0]": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_index_tab_completion[index10]": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_index_tab_completion[index11]": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_index_tab_completion[index2]": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[bool-all-False]": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[bool-any-False]": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[float-all-False]": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[float-any-False]": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[int-all-False]": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_numeric_only[int-any-False]": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_tab_completion": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_tab_completion_cat": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_tab_completion_cat_str": "TODO: Add a reason for failure", + "tests/series/test_api.py::TestSeriesMisc::test_tab_completion_dt": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_alignment_categorical[numexpr]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_alignment_categorical[python]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_alignment_doesnt_change_tz[numexpr]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_alignment_doesnt_change_tz[python]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_mul_empty_int_corner_case[numexpr]": "AssertionError: Series.index are different", + "tests/series/test_arithmetic.py::TestSeriesArithmetic::test_mul_empty_int_corner_case[python]": "AssertionError: Series.index are different", + "tests/series/test_arithmetic.py::TestSeriesComparison::test_comparison_tuples[numexpr]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesComparison::test_comparison_tuples[python]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__add__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__floordiv__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__mod__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__mul__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__pow__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__radd__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rfloordiv__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rmod__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rmul__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rpow__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rsub__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__rtruediv__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__sub__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[numexpr-__truediv__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__add__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__floordiv__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__mod__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__mul__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__pow__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__radd__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rfloordiv__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rmod__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rmul__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rpow__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rsub__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__rtruediv__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__sub__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestSeriesFlexArithmetic::test_flex_method_subclass_metadata_preservation[python-__truediv__]": "TODO: Add a reason for failure", + "tests/series/test_arithmetic.py::TestTimeSeriesArithmetic::test_series_add_tz_mismatch_converts_to_utc[numexpr]": "AssertionError: assert zoneinfo.ZoneInfo(key='US/Eastern') is datetime.timezone.utc", + "tests/series/test_arithmetic.py::TestTimeSeriesArithmetic::test_series_add_tz_mismatch_converts_to_utc[python]": "AssertionError: assert zoneinfo.ZoneInfo(key='US/Eastern') is datetime.timezone.utc", + "tests/series/test_constructors.py::TestSeriesConstructors::test_categorical_sideeffects_free": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_bool_dtype_missing_values": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[int16]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[int32]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[int64]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[int8]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[int]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[uint16]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[uint32]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[uint64]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_coerce_float_fail[uint8]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['+01:15'-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['-02:15'-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['Asia/Tokyo'-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['US/Eastern'-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['UTC'-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['UTC+01:15'-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['UTC-02:15'-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['dateutil/Asia/Singapore'-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive['dateutil/US/Pacific'-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[datetime.timezone(datetime.timedelta(seconds=3600))-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[datetime.timezone.utc-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[pytz.FixedOffset(-300)-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[pytz.FixedOffset(300)-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[tzlocal()-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_data_aware_dtype_naive[tzutc()-True]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_dtype_datetime64_11": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_dtype_timedelta64": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_empty[OrderedDict]": "AssertionError: Attributes of Series are different", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_empty[dict]": "AssertionError: Attributes of Series are different", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_floating_data_int_dtype[DataFrame]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_floating_data_int_dtype[Series]": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_list_of_tuples": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_list_str[U-input_vals3]": "AssertionError: Series are different", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_maskedarray": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_no_data_string_type": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_no_partial_datetime_casting": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_range_overflows": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_tuple_of_tuples": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::TestSeriesConstructors::test_invalid_dtype": "TODO: Add a reason for failure", + "tests/series/test_constructors.py::test_dict_keys_rangeindex": "AssertionError: Series.index are different", + "tests/series/test_formats.py::TestSeriesRepr::test_newline[string=object]": "TODO: Add a reason for failure", + "tests/series/test_formats.py::TestSeriesRepr::test_newline[string=str[pyarrow]]": "TODO: Add a reason for failure", + "tests/series/test_formats.py::TestSeriesRepr::test_newline[string=str[python]]": "TODO: Add a reason for failure", + "tests/series/test_formats.py::TestSeriesRepr::test_newline[string=string[pyarrow]]": "TODO: Add a reason for failure", + "tests/series/test_formats.py::TestSeriesRepr::test_newline[string=string[python]]": "TODO: Add a reason for failure", + "tests/series/test_formats.py::TestSeriesRepr::test_timeseries_repr_object_dtype": "TODO: Add a reason for failure", + "tests/series/test_iteration.py::TestIteration::test_keys": "TODO: Add a reason for failure", + "tests/series/test_logical_ops.py::TestSeriesLogicalOps::test_logical_ops_df_compat": "TODO: Add a reason for failure", + "tests/series/test_logical_ops.py::TestSeriesLogicalOps::test_logical_ops_label_based": "TODO: Add a reason for failure", + "tests/series/test_missing.py::test_hasnans_uncached_for_series": "TODO: Add a reason for failure", + "tests/series/test_npfuncs.py::test_log_arrow_backed_missing_value[False]": "Failed: DID NOT RAISE ", + "tests/series/test_reductions.py::test_td64_summation_overflow": "TODO: Add a reason for failure", + "tests/series/test_subclass.py::TestSeriesSubclassing::test_asof": "TODO: Add a reason for failure", + "tests/series/test_subclass.py::TestSeriesSubclassing::test_equals": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_scalar[add-sparse-False]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_scalar[add-sparse-True]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_scalar[logaddexp-sparse-False]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_scalar[logaddexp-sparse-True]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_array[sparse-add-flipped]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_array[sparse-add-straight]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_array[sparse-logaddexp-flipped]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_array[sparse-logaddexp-straight]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_index[sparse-add-flipped]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_index[sparse-add-straight]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_index[sparse-logaddexp-flipped]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_index[sparse-logaddexp-straight]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-add-flipped-aligned]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-add-flipped-unaligned]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-add-straight-aligned]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-add-straight-unaligned]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-logaddexp-flipped-aligned]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-logaddexp-flipped-unaligned]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-logaddexp-straight-aligned]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_binary_ufunc_with_series[sparse-logaddexp-straight-unaligned]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_multiple_output_binary_ufuncs[sparse-False-divmod]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_multiple_output_binary_ufuncs[sparse-True-divmod]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_multiple_output_ufunc[sparse]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_unary_ufunc[sparse-exp]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_unary_ufunc[sparse-floor]": "TODO: Add a reason for failure", + "tests/series/test_ufunc.py::test_unary_ufunc[sparse-positive]": "TODO: Add a reason for failure", + "tests/strings/test_api.py::test_api_mi_raises": "TODO: Add a reason for failure", + "tests/strings/test_cat.py::test_str_cat[index-False]": "AssertionError: Index are different", + "tests/strings/test_cat.py::test_str_cat[series-False]": "AssertionError: Attributes of Series are different", + "tests/strings/test_cat.py::test_str_cat_categorical[index-category-category--False]": "AssertionError: Index are different", + "tests/strings/test_cat.py::test_str_cat_categorical[index-category-category-None-False]": "AssertionError: Index are different", + "tests/strings/test_cat.py::test_str_cat_categorical[index-category-object--False]": "AssertionError: Index are different", + "tests/strings/test_cat.py::test_str_cat_categorical[index-category-object-None-False]": "AssertionError: Index are different", + "tests/strings/test_cat.py::test_str_cat_categorical[series-category-category--False]": "AssertionError: Attributes of Series are different", + "tests/strings/test_cat.py::test_str_cat_categorical[series-category-category-None-False]": "AssertionError: Attributes of Series are different", + "tests/strings/test_cat.py::test_str_cat_categorical[series-category-object--False]": "AssertionError: Attributes of Series are different", + "tests/strings/test_cat.py::test_str_cat_categorical[series-category-object-None-False]": "AssertionError: Attributes of Series are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[bool-dtype-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[categorical-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[datetime-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[datetime-tz-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[float32-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[float64-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[int16-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[int32-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[int64-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[int8-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[interval-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[multi-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[nullable_bool-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[nullable_float-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[nullable_int-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[nullable_uint-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[object-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[range-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[repeats-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[string-pyarrow-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[string-python-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[string-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[tuples-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[uint16-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[uint32-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[uint64-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_dataframe_capture_groups_index[uint8-string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_expand_False_mixed_object": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_expand_True[string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_expand_True_mixed_object": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups[string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[bool-dtype-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[categorical-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[datetime-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[datetime-tz-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[float32-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[float64-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[int16-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[int32-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[int64-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[int8-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[interval-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[multi-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[nullable_bool-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[nullable_float-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[nullable_int-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[nullable_uint-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[object-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[range-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[repeats-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[string-pyarrow-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[string-python-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[string-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[tuples-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[uint16-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[uint32-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[uint64-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_capture_groups_index[uint8-string=object]": "AssertionError: DataFrame.iloc[:, 1] (column name='number') are different", + "tests/strings/test_extract.py::test_extract_expand_kwarg[string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_optional_groups[string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_series[string=object-None]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extract_series[string=object-series_name]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_extract.py::test_extractall_column_names[string=object-(?P[AB])?(?P[123])-expected_names0]": "AssertionError: DataFrame.iloc[:, 0] (column name='letter') are different", + "tests/strings/test_extract.py::test_extractall_column_names[string=object-([AB])?(?P[123])-expected_names1]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=object-partition]": "TODO: Add a reason for failure", + "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=object-rpartition]": "TODO: Add a reason for failure", + "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=str[pyarrow]-partition]": "TODO: Add a reason for failure", + "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=str[pyarrow]-rpartition]": "TODO: Add a reason for failure", + "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=str[python]-partition]": "TODO: Add a reason for failure", + "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=str[python]-rpartition]": "TODO: Add a reason for failure", + "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=string[pyarrow]-partition]": "TODO: Add a reason for failure", + "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=string[pyarrow]-rpartition]": "TODO: Add a reason for failure", + "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=string[python]-partition]": "TODO: Add a reason for failure", + "tests/strings/test_split_partition.py::test_partition_series_stdlib[string=string[python]-rpartition]": "TODO: Add a reason for failure", + "tests/strings/test_split_partition.py::test_split_nan_expand[string=object]": "AssertionError: DataFrame.iloc[:, 0] (column name='0') are different", + "tests/strings/test_strings.py::test_index_str_accessor_multiindex_raises": "TODO: Add a reason for failure", + "tests/strings/test_strings.py::test_string_slice_out_of_bounds[string=object]": "AssertionError: Series are different", + "tests/test_algos.py::TestFactorize::test_factorize[multi-False]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/test_algos.py::TestFactorize::test_factorize[multi-True]": "NotImplementedError: Fast implementation not available. Falling back to the slow implementation", + "tests/test_algos.py::TestFactorize::test_factorize[tuples-False]": "AssertionError: Index are different", + "tests/test_algos.py::TestFactorize::test_factorize[tuples-True]": "AssertionError: Index are different", + "tests/test_algos.py::TestFactorize::test_int_factorize_use_na_sentinel_false[data0-expected_codes0-expected_uniques0]": "TODO: Add a reason for failure", + "tests/test_algos.py::TestUnique::test_datetime64_dtype_array_returned": "TODO: Add a reason for failure", + "tests/test_algos.py::TestUnique::test_factorize_multiindex_empty": "AssertionError: Index are different", + "tests/test_algos.py::TestUnique::test_on_index_object": "TODO: Add a reason for failure", + "tests/test_algos.py::TestUnique::test_order_of_appearance_dt64tz[ms]": "AssertionError: Index are different", + "tests/test_algos.py::TestUnique::test_order_of_appearance_dt64tz[ns]": "AssertionError: Index are different", + "tests/test_algos.py::TestUnique::test_order_of_appearance_dt64tz[s]": "AssertionError: Index are different", + "tests/test_algos.py::TestUnique::test_order_of_appearance_dt64tz[us]": "AssertionError: Index are different", + "tests/test_algos.py::TestValueCounts::test_value_counts_dropna": "TODO: Add a reason for failure", + "tests/test_algos.py::TestValueCounts::test_value_counts_stability": "AssertionError: Series.index are different", + "tests/test_col.py::test_cached_property": "AssertionError: assert False", + "tests/test_col.py::test_custom_accessor": "AttributeError: 'Series' object has no attribute 'xyz'", + "tests/test_common.py::test_serializable[obj0]": "TODO: Add a reason for failure", + "tests/test_common.py::test_standardize_mapping": "TODO: Add a reason for failure", + "tests/test_common.py::test_temp_setattr[False]": "TODO: Add a reason for failure", + "tests/test_common.py::test_temp_setattr[True]": "TODO: Add a reason for failure", + "tests/test_downstream.py::test_dask_ufunc": "TODO: Add a reason for failure", + "tests/test_downstream.py::test_from_obscure_array[dask-M8[ns]]": "TODO: Add a reason for failure", + "tests/test_downstream.py::test_from_obscure_array[dask-m8[ns]]": "TODO: Add a reason for failure", + "tests/test_downstream.py::test_missing_required_dependency[dateutil]": "Failed: DID NOT RAISE ", + "tests/test_downstream.py::test_missing_required_dependency[numpy]": "Failed: DID NOT RAISE ", + "tests/test_downstream.py::test_statsmodels": "TODO: Add a reason for failure", + "tests/test_downstream.py::test_yaml_dump": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_bool_ops_raise_on_arithmetic[**-pow]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_bool_ops_raise_on_arithmetic[/-truediv]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_bool_ops_raise_on_arithmetic[//-floordiv]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-False-_mixed]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[eq-True-_mixed]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-False-_mixed]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ge-True-_mixed]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-False-_mixed]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[gt-True-_mixed]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-False-_mixed]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[le-True-_mixed]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-False-_mixed]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[lt-True-_mixed]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-False-_mixed]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_frame2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_frame]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_integer2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_integer]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_integer_integers]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_mixed2]": "TODO: Add a reason for failure", + "tests/test_expressions.py::TestExpressions::test_run_binary[ne-True-_mixed]": "TODO: Add a reason for failure", + "tests/test_multilevel.py::TestMultiLevel::test_multiindex_dt_with_nan": "AssertionError: Attributes of Series are different", + "tests/test_multilevel.py::TestMultiLevel::test_reindex_preserve_levels": "TODO: Add a reason for failure", + "tests/test_multilevel.py::TestSorted::test_sort_non_lexsorted": "TODO: Add a reason for failure", + "tests/test_nanops.py::TestDatetime64NaNOps::test_nanmean[ns]": "TODO: Add a reason for failure", + "tests/test_nanops.py::test_nanmean_overflow[20150515061816532]": "TODO: Add a reason for failure", + "tests/test_register_accessor.py::test_register[DataFrame-register_dataframe_accessor]": "TODO: Add a reason for failure", + "tests/test_register_accessor.py::test_register[Index-register_index_accessor]": "TODO: Add a reason for failure", + "tests/test_register_accessor.py::test_register[Series-register_series_accessor]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestOrigin::test_julian": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_datetime.py::TestOrigin::test_to_datetime_out_of_bounds_with_format_arg[%Y-%d-%m %H:%M:%S-None]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestOrigin::test_to_datetime_out_of_bounds_with_format_arg[%Y-%m-%d %H:%M:%S-None]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestTimeConversionFormats::test_parse_nanoseconds_with_formula[False-2012-01-01 09:00:00.000000001]": "cudf strptime drops trailing nanosecond precision", + "tests/tools/test_to_datetime.py::TestTimeConversionFormats::test_parse_nanoseconds_with_formula[True-2012-01-01 09:00:00.000000001]": "cudf strptime drops trailing nanosecond precision", + "tests/tools/test_to_datetime.py::TestTimeConversionFormats::test_to_datetime_format_weeks[False-2013020-%Y%U%w-2013-01-13]": "AssertionError: assert Timestamp('2013-01-19 00:00:00') == Timestamp('2013-01-13 00:00:00')", + "tests/tools/test_to_datetime.py::TestTimeConversionFormats::test_to_datetime_format_weeks[True-2013020-%Y%U%w-2013-01-13]": "AssertionError: assert Timestamp('2013-01-19 00:00:00') == Timestamp('2013-01-13 00:00:00')", + "tests/tools/test_to_datetime.py::TestToDatetime::test_mixed_offsets_with_native_datetime_utc_false_raises": "assert False", + "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_arrow[index-None-False]": "AssertionError: assert DatetimeIndex([1965-04-03 00:00:00, 1965-04-17 00:00:00, 1965-05-01 00:00:00,\n 1965-05-...", + "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_arrow[index-US/Central-False]": "AssertionError: assert Index([1965-04-03 00:00:00-06:00, 1965-04-17 00:00:00-06:00,\n 1965-05-01 00:00:00-05:00...", + "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64d_out_of_bounds[False]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dt64d_out_of_bounds[True]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dtarr[None]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetime::test_to_datetime_dtarr[US/Central]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetimeDataFrame::test_dataframe_str_dtype[False]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetimeDataFrame::test_dataframe_str_dtype[True]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_barely_out_of_bounds": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_iso8601_exact_fails[2012-01-01 10-%Y-%m-%d]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_iso8601_exact_fails[2012-01-01 10:00-%Y-%m-%d %H]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_iso8601_exact_fails[2012-01-01 10:00:00-%Y-%m-%d %H:%M]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetimeMisc::test_to_datetime_iso8601_exact_fails[2012-01-01-%Y-%m]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_float_to_datetime_raise_near_bounds": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_to_datetime_unit[float]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_to_datetime_unit_fractional_seconds": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_to_datetime_unit_invalid[111111111111111]": "Failed: DID NOT RAISE ", + "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_unit_rounding[False]": "TODO: Add a reason for failure", + "tests/tools/test_to_datetime.py::TestToDatetimeUnit::test_unit_rounding[True]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_datetime_like['Asia/Tokyo'-transform_assert_equal0]": "AssertionError: Expected type , found instead", + "tests/tools/test_to_numeric.py::test_datetime_like['US/Eastern'-transform_assert_equal0]": "AssertionError: Expected type , found instead", + "tests/tools/test_to_numeric.py::test_datetime_like[None-transform_assert_equal0]": "AssertionError: Expected type , found instead", + "tests/tools/test_to_numeric.py::test_downcast_basic[kwargs0-int64-data2]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_downcast_basic[kwargs1-int64-data2]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_downcast_basic[kwargs2-f-data2]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_downcast_basic[kwargs3-exp_dtype3-data2]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_downcast_limits[int16-integer-min_max11]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_downcast_limits[int16-integer-min_max1]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_downcast_limits[int32-integer-min_max12]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_downcast_limits[int32-integer-min_max2]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_downcast_limits[int8-integer-min_max0]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_downcast_limits[uint16-unsigned-min_max5]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_downcast_limits[uint32-unsigned-min_max6]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_downcast_limits[uint8-unsigned-min_max4]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_numeric_dtypes[transform_assert_equal0-data0]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_numeric_dtypes[transform_assert_equal0-data1]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-False-str-False-None]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-False-str-False-coerce]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-False-str-False-raise]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-True-str-False-None]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-True-str-False-coerce]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[100000000000000000000-True-str-False-raise]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-False-str-False-None]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-False-str-False-coerce]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-False-str-False-raise]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-True-str-False-None]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-True-str-False-coerce]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr[47393996303418497800-True-str-False-raise]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-False-False-None]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-False-False-coerce]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-False-False-raise]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-True-False-None]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-True-False-coerce]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[100000000000000000000-True-False-raise]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-False-False-None]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-False-False-coerce]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-False-False-raise]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-True-False-None]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-True-False-coerce]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_really_large_in_arr_consistent[47393996303418497800-True-False-raise]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_signed_downcast[data2-integer]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_signed_downcast[data2-signed]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_str[transform_assert_equal0-data0-exp0]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_str[transform_assert_equal0-data1-exp1]": "TODO: Add a reason for failure", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[pyarrow]-values0-expected0]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[pyarrow]-values1-expected1]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[pyarrow]-values2-expected2]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[pyarrow]-values3-expected3]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[pyarrow]-values4-expected4]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[pyarrow]-values5-expected5]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[python]-values0-expected0]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[python]-values1-expected1]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[python]-values2-expected2]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[python]-values3-expected3]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[python]-values4-expected4]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string[string[python]-values5-expected5]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string_coerce[string[pyarrow]]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_from_nullable_string_coerce[string[python]]": "AssertionError: Attributes of Series are different", + "tests/tools/test_to_numeric.py::test_to_numeric_large_float_not_downcast_to_float_32[9876543210.0]": "TODO: Add a reason for failure", + "tests/tseries/frequencies/test_inference.py::test_infer_freq_tz['Asia/Tokyo'-ms-YS-JAN-dates0]": "AssertionError: assert == 'YS-JAN'", + "tests/tseries/frequencies/test_inference.py::test_infer_freq_tz['Asia/Tokyo'-ns-YS-JAN-dates0]": "AssertionError: assert == 'YS-JAN'", + "tests/tseries/frequencies/test_inference.py::test_infer_freq_tz['Asia/Tokyo'-s-YS-JAN-dates0]": "AssertionError: assert == 'YS-JAN'", + "tests/tseries/frequencies/test_inference.py::test_infer_freq_tz['Asia/Tokyo'-us-YS-JAN-dates0]": "AssertionError: assert == 'YS-JAN'", + "tests/tseries/frequencies/test_inference.py::test_infer_freq_tz_transition_custom": "AssertionError: assert is None", + "tests/tseries/holiday/test_calendar.py::test_calendar_2031": "TODO: Add a reason for failure", + "tests/tseries/holiday/test_federal.py::test_memorial_day": "TODO: Add a reason for failure", + "tests/tseries/holiday/test_federal.py::test_no_mlk_before_1986": "TODO: Add a reason for failure", + "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Hour]": "TODO: Add a reason for failure", + "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Micro]": "TODO: Add a reason for failure", + "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Milli]": "TODO: Add a reason for failure", + "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Minute]": "TODO: Add a reason for failure", + "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Nano]": "TODO: Add a reason for failure", + "tests/tseries/offsets/test_ticks.py::test_tick_rdiv[Second]": "TODO: Add a reason for failure", + "tests/tseries/offsets/test_year.py::test_add_out_of_pydatetime_range": "TODO: Add a reason for failure", + "tests/tslibs/test_conversion.py::test_length_zero_copy[M8[ns]-False]": "TODO: Add a reason for failure", + "tests/tslibs/test_parsing.py::test_guess_datetime_format_with_parseable_formats[27.03.2003 14:55:00.000-%d.%m.%Y %H:%M:%S.%f]": "TODO: Add a reason for failure", + "tests/tslibs/test_parsing.py::test_guess_datetime_format_with_parseable_formats[30-12-2011-%d-%m-%Y]": "TODO: Add a reason for failure", + "tests/tslibs/test_parsing.py::test_parsing_tzlocal_deprecated": "TODO: Add a reason for failure", + "tests/tslibs/test_to_offset.py::test_to_offset_uppercase_frequency_deprecated[2MIN]": "TODO: Add a reason for failure", + "tests/tslibs/test_to_offset.py::test_to_offset_uppercase_frequency_deprecated[2NS]": "TODO: Add a reason for failure", + "tests/tslibs/test_to_offset.py::test_to_offset_uppercase_frequency_deprecated[2Us]": "TODO: Add a reason for failure", + "tests/util/test_assert_frame_equal.py::test_allows_duplicate_labels": "TODO: Add a reason for failure", + "tests/util/test_assert_frame_equal.py::test_assert_frame_equal_check_like_different_indexes": "TODO: Add a reason for failure", + "tests/util/test_assert_frame_equal.py::test_assert_frame_equal_extension_dtype_mismatch": "TODO: Add a reason for failure", + "tests/util/test_assert_frame_equal.py::test_assert_frame_equal_nested_df_na[None]": "KeyError: 0", + "tests/util/test_assert_frame_equal.py::test_assert_frame_equal_nested_df_na[nan]": "KeyError: 0", + "tests/util/test_assert_frame_equal.py::test_frame_equal_index_dtype_mismatch[True-df11-df21-DataFrame\\.index level \\[0\\] are different]": "Failed: DID NOT RAISE ", + "tests/util/test_assert_frame_equal.py::test_frame_equal_index_dtype_mismatch[True-df11-df21-DataFrame\\\\.index level \\\\[0\\\\] are different]": "Failed: DID NOT RAISE ", + "tests/util/test_assert_index_equal.py::test_index_equal_range_categories[True-True]": "TODO: Add a reason for failure", + "tests/util/test_assert_series_equal.py::test_allows_duplicate_labels": "TODO: Add a reason for failure", + "tests/util/test_assert_series_equal.py::test_assert_series_equal_extension_dtype_mismatch": "TODO: Add a reason for failure", + "tests/util/test_assert_series_equal.py::test_assert_series_equal_int_tol": "AssertionError: left is not an ExtensionArray", + "tests/util/test_assert_series_equal.py::test_large_unequal_ints[Int64]": "Failed: DID NOT RAISE ", + "tests/util/test_assert_series_equal.py::test_large_unequal_ints[int64]": "TODO: Add a reason for failure", + "tests/util/test_assert_series_equal.py::test_series_equal_index_dtype[True-s11-s21-Series\\.index level \\[0\\] are different]": "Failed: DID NOT RAISE ", + "tests/util/test_assert_series_equal.py::test_series_equal_index_dtype[True-s11-s21-Series\\\\.index level \\\\[0\\\\] are different]": "Failed: DID NOT RAISE ", + "tests/util/test_assert_series_equal.py::test_series_equal_series_type": "TODO: Add a reason for failure", + "tests/util/test_hashing.py::test_hash_with_tuple[data0-result_data0]": "TODO: Add a reason for failure", + "tests/util/test_hashing.py::test_hash_with_tuple[data1-result_data1]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data1-0-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data5-0-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data5-2-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data6-0-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data6-2-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data7-0-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_expanding.py::test_expanding_apply_consistency_sum_nans[all_data7-2-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data5-rolling_consistency_cases1-False-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data5-rolling_consistency_cases1-True-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data6-rolling_consistency_cases1-False-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data6-rolling_consistency_cases1-True-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data7-rolling_consistency_cases1-False-sum]": "TODO: Add a reason for failure", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data7-rolling_consistency_cases1-True-sum]": "TODO: Add a reason for failure", + "tests/window/test_api.py::test_rolling_max_min_periods[None]": "TODO: Add a reason for failure", + "tests/window/test_api.py::test_rolling_min_min_periods[None]": "TODO: Add a reason for failure", + "tests/window/test_apply.py::test_ragged_apply[engine_and_raw1]": "TODO: Add a reason for failure", + "tests/window/test_apply.py::test_ragged_apply[engine_and_raw2]": "TODO: Add a reason for failure", + "tests/window/test_base_indexer.py::test_bad_get_window_bounds_signature": "TODO: Add a reason for failure", + "tests/window/test_base_indexer.py::test_rolling_forward_cov_corr[corr-expected1]": "TODO: Add a reason for failure", + "tests/window/test_base_indexer.py::test_rolling_forward_cov_corr[cov-expected0]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-max-expected_data1-None]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-mean-expected_data4-None]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-min-expected_data2-None]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-std-expected_data5-None]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-sum-expected_data3-None]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_dataframe_dtypes[category-None-var-expected_data6-None]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_series_dtypes[category-None-max-data4-expected_data4-True-None]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_series_dtypes[category-None-mean-data13-expected_data13-True-None]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_series_dtypes[category-None-min-data7-expected_data7-True-None]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_series_dtypes[category-None-std-data16-expected_data16-True-None]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_series_dtypes[category-None-sum-data10-expected_data10-True-None]": "TODO: Add a reason for failure", + "tests/window/test_dtypes.py::test_series_dtypes[category-None-var-data19-expected_data19-True-None]": "TODO: Add a reason for failure", + "tests/window/test_groupby.py::TestRolling::test_as_index_false[ms-by0-expected_data0]": "AssertionError: left and right shape mismatch", + "tests/window/test_groupby.py::TestRolling::test_as_index_false[ms-by1-expected_data1]": "AssertionError: left and right shape mismatch", + "tests/window/test_groupby.py::TestRolling::test_as_index_false[ns-by0-expected_data0]": "AssertionError: left and right shape mismatch", + "tests/window/test_groupby.py::TestRolling::test_as_index_false[ns-by1-expected_data1]": "AssertionError: left and right shape mismatch", + "tests/window/test_groupby.py::TestRolling::test_as_index_false[s-by0-expected_data0]": "AssertionError: left and right shape mismatch", + "tests/window/test_groupby.py::TestRolling::test_as_index_false[s-by1-expected_data1]": "AssertionError: left and right shape mismatch", + "tests/window/test_groupby.py::TestRolling::test_as_index_false[us-by0-expected_data0]": "AssertionError: left and right shape mismatch", + "tests/window/test_groupby.py::TestRolling::test_as_index_false[us-by1-expected_data1]": "AssertionError: left and right shape mismatch", + "tests/window/test_groupby.py::TestRolling::test_datelike_on_monotonic_within_each_group": "AssertionError: MultiIndex level [1] are different", + "tests/window/test_groupby.py::TestRolling::test_groupby_monotonic": "AssertionError: MultiIndex level [1] are different", + "tests/window/test_groupby.py::TestRolling::test_groupby_rolling_custom_indexer": 'AssertionError: Column name="a" are different', + "tests/window/test_groupby.py::TestRolling::test_groupby_rolling_no_sort": "AssertionError: MultiIndex level [0] are different", + "tests/window/test_groupby.py::test_rolling_corr_with_single_integer_in_index": "NotImplementedError: Unsupported column type passed to create an Index: ", + "tests/window/test_groupby.py::test_rolling_corr_with_tuples_in_index": "NotImplementedError: Unsupported column type passed to create an Index: ", + "tests/window/test_pairwise.py::TestPairwise::test_no_flex[pairwise_frames1-1]": "TODO: Add a reason for failure", + "tests/window/test_pairwise.py::TestPairwise::test_no_flex[pairwise_frames2-1]": "TODO: Add a reason for failure", + "tests/window/test_pairwise.py::TestPairwise::test_no_flex[pairwise_frames5-1]": "TODO: Add a reason for failure", + "tests/window/test_pairwise.py::TestPairwise::test_no_flex[pairwise_frames8-1]": "TODO: Add a reason for failure", + "tests/window/test_rolling.py::TestMinMax::test_wrong_order": "Failed: DID NOT RAISE ", + "tests/window/test_rolling.py::test_closed_fixed_binary_col[False-10]": "TODO: Add a reason for failure", + "tests/window/test_rolling.py::test_closed_fixed_binary_col[False-5]": "TODO: Add a reason for failure", + "tests/window/test_rolling.py::test_closed_fixed_binary_col[True-10]": "TODO: Add a reason for failure", + "tests/window/test_rolling.py::test_closed_fixed_binary_col[True-5]": "TODO: Add a reason for failure", + "tests/window/test_rolling.py::test_rolling_non_monotonic[mean-expected1]": "TODO: Add a reason for failure", + "tests/window/test_rolling.py::test_rolling_non_monotonic[sum-expected2]": "TODO: Add a reason for failure", + "tests/window/test_rolling.py::test_rolling_non_monotonic[var-expected0]": "TODO: Add a reason for failure", + "tests/window/test_rolling.py::test_rolling_var_same_value_count_logic[values0-3-1-expected0]": "TODO: Add a reason for failure", + "tests/window/test_rolling.py::test_variable_window_nonunique[DataFrame-right-expected2]": "TODO: Add a reason for failure", + "tests/window/test_rolling.py::test_variable_window_nonunique[Series-right-expected2]": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_invalid_minp[1.0]": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_invalid_minp[foo]": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_invalid_minp[minp2]": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_invalid_window_nonfixed[2MS]": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_non_monotonic_on": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_ragged_kurt": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_ragged_skew": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_ragged_std": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_ragged_var": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_rolling_on_decreasing_index[ms]": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_rolling_on_decreasing_index[ns]": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_rolling_on_decreasing_index[s]": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_rolling_on_decreasing_index[us]": "TODO: Add a reason for failure", + "tests/window/test_timeseries_window.py::TestRollingTS::test_rolling_on_empty": "TODO: Add a reason for failure", + "tests/window/test_win_type.py::test_cmov_window_corner[None]": "TODO: Add a reason for failure", + "tests/window/test_win_type.py::test_win_type_not_implemented": "TODO: Add a reason for failure", } - -NODEIDS_TO_ALWAYS_SKIP = { - # These tests fail because the fast and slow paths measure memory differently: - # - obj.memory_usage(deep=...) is called inside cudf.pandas, so - # getattr_real_or_wrapped sees the fast attribute. - # The memory usage is calculated from the GPU object's device - # buffers and ignores pandas' deep kwarg. - # - # - sys.getsizeof(obj) is called from the pandas test module, which - # lives outside cudf.pandas. getattr_real_or_wrapped only intercepts - # lookups for modules on its allowlist, so external calls like this - # go straight to the slow object. As a result, sys.getsizeof dispatches - # to pandas' implementation, which calls the object's __sizeof__ and - # could add extra bytes from the garbage collector. - "tests/base/test_misc.py::test_memory_usage[bool-object]", - "tests/base/test_misc.py::test_memory_usage[bool-series]", - "tests/base/test_misc.py::test_memory_usage[bytearray-series]", - "tests/base/test_misc.py::test_memory_usage[bytes-series]", - "tests/base/test_misc.py::test_memory_usage[categorical]", - "tests/base/test_misc.py::test_memory_usage[complex-series]", - "tests/base/test_misc.py::test_memory_usage[complex128]", - "tests/base/test_misc.py::test_memory_usage[complex64]", - "tests/base/test_misc.py::test_memory_usage[datetime-tz]", - "tests/base/test_misc.py::test_memory_usage[datetime]", - "tests/base/test_misc.py::test_memory_usage[dict-series]", - "tests/base/test_misc.py::test_memory_usage[float-series]", - "tests/base/test_misc.py::test_memory_usage[float16-series]", - "tests/base/test_misc.py::test_memory_usage[float32-series]", - "tests/base/test_misc.py::test_memory_usage[float32]", - "tests/base/test_misc.py::test_memory_usage[float64]", - "tests/base/test_misc.py::test_memory_usage[frozenset-series]", - "tests/base/test_misc.py::test_memory_usage[int-series]", - "tests/base/test_misc.py::test_memory_usage[int16-series]", - "tests/base/test_misc.py::test_memory_usage[int16]", - "tests/base/test_misc.py::test_memory_usage[int32-series]", - "tests/base/test_misc.py::test_memory_usage[int32]", - "tests/base/test_misc.py::test_memory_usage[int64]", - "tests/base/test_misc.py::test_memory_usage[int8-series]", - "tests/base/test_misc.py::test_memory_usage[interval]", - "tests/base/test_misc.py::test_memory_usage[list-series]", - "tests/base/test_misc.py::test_memory_usage[memoryview-series]", - "tests/base/test_misc.py::test_memory_usage[mi-with-dt64tz-level]", - "tests/base/test_misc.py::test_memory_usage[multi]", - "tests/base/test_misc.py::test_memory_usage[nullable_float]", - "tests/base/test_misc.py::test_memory_usage[nullable_int]", - "tests/base/test_misc.py::test_memory_usage[nullable_uint]", - "tests/base/test_misc.py::test_memory_usage[object]", - "tests/base/test_misc.py::test_memory_usage[period]", - "tests/base/test_misc.py::test_memory_usage[range-series]", - "tests/base/test_misc.py::test_memory_usage[series-with-bool-object-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-categorical-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-complex128-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-complex64-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-datetime-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-datetime-tz-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-float32-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-float64-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-int16-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-int32-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-int64-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-int8-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-interval-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-mi-with-dt64tz-level-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-multi-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-nullable_bool-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-nullable_float-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-nullable_int-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-nullable_uint-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-object-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-period-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-range-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-string-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-string-pyarrow-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-string-python-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-timedelta-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-tuples-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-uint16-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-uint32-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-uint64-index]", - "tests/base/test_misc.py::test_memory_usage[series-with-uint8-index]", - "tests/base/test_misc.py::test_memory_usage[set-series]", - "tests/base/test_misc.py::test_memory_usage[str-series]", - "tests/base/test_misc.py::test_memory_usage[string-pyarrow]", - "tests/base/test_misc.py::test_memory_usage[string-python]", - "tests/base/test_misc.py::test_memory_usage[string]", - "tests/base/test_misc.py::test_memory_usage[timedelta]", - "tests/base/test_misc.py::test_memory_usage[tuple-series]", - "tests/base/test_misc.py::test_memory_usage[uint16-series]", - "tests/base/test_misc.py::test_memory_usage[uint16]", - "tests/base/test_misc.py::test_memory_usage[uint32-series]", - "tests/base/test_misc.py::test_memory_usage[uint32]", - "tests/base/test_misc.py::test_memory_usage[uint64]", - "tests/base/test_misc.py::test_memory_usage[uint8-series]", - "tests/base/test_misc.py::test_memory_usage[range]", - "tests/base/test_misc.py::test_memory_usage[tuples]", - "tests/base/test_misc.py::test_memory_usage[nullable_bool]", - "tests/base/test_misc.py::test_memory_usage_components_narrow_series[float16]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[bool-dtype]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[categorical]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[float32]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[float64]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[int16]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[int32]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[int64]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[int8]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[multi]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[object]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[repeats]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[string]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[tuples]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[uint16]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[uint32]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[uint64]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[uint8]", - "tests/indexes/test_old_base.py::TestBase::test_memory_usage[nullable_int]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[bool]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[decimal128(7, 3)]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[double]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[duration[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[duration[ns]]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[duration[s]]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[duration[us]]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[float]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[int16]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[int32]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[int64]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[int8]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[string]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[timestamp[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[timestamp[ns]]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[timestamp[s]]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[timestamp[us]]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[uint16]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[uint32]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[uint64]", - "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[uint8]", - "tests/arrays/categorical/test_analytics.py::TestCategoricalAnalytics::test_memory_usage", - "tests/arrays/string_/test_string.py::test_memory_usage[python]", - "tests/arrays/string_/test_string.py::test_memory_usage[string=str[python]]", - "tests/arrays/string_/test_string.py::test_memory_usage[string=string[python]]", - "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[BooleanDtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Float32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Float64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Int16Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Int32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Int64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[Int8Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[UInt16Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[UInt32Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[UInt64Dtype]", - "tests/extension/test_masked.py::TestMaskedArrays::test_memory_usage[UInt8Dtype]", - "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_memory_usage[object]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[pyarrow-False]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[pyarrow-True]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[pyarrow_numpy-False]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[pyarrow_numpy-True]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[python-False]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[python-True]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=str[pyarrow]-False]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=str[pyarrow]-True]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=str[python]-False]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=str[python]-True]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=string[pyarrow]-False]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=string[pyarrow]-True]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=string[python]-False]", - "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=string[python]-True]", - "tests/frame/methods/test_info.py::test_memory_usage_empty_no_warning", - "tests/indexes/multi/test_integrity.py::test_memory_usage", - # These test_series_constructor tests do an identity check (`is`) between - # the input ArrowExtensionArray and the ArrowExtensionArray backing the Series - # which was shallow copied from the input. These identity checks are incompatible - # with cudf.pandas - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[binary]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[bool]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[date32[day]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[date64[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[decimal128(7, 3)]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[double]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[ns]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[s]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[us]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[float]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int16]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int32]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int64]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int8]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[string]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time32[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time32[s]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time64[ns]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time64[us]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms, tz=US/Eastern]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms, tz=US/Pacific]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms, tz=UTC]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns, tz=US/Eastern]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns, tz=US/Pacific]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns, tz=UTC]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s, tz=US/Eastern]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s, tz=US/Pacific]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s, tz=UTC]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us, tz=US/Eastern]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us, tz=US/Pacific]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us, tz=UTC]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us]]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint16]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint32]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint64]", - "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint8]", +# Keep keys in alphabeical order +NODEIDS_PATHS_TO_SKIP: dict[str, str] = { + "tests/copy_view/test_interp_fillna.py::test_fillna_series_empty_arg": "flaky test", + "tests/copy_view/test_interp_fillna.py::test_fillna_series_empty_arg_inplace": "flaky test", + "tests/indexing/test_iloc.py::TestiLocBaseIndependent::test_iloc_setitem_frame_duplicate_columns_multiple_blocks": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-NoneType-object-False]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-NoneType-None-False]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-float0-None-False]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-float1-None-False]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-float0-NoneType-None-False]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-float1-NoneType-None-False]": "flaky test", + "tests/copy_view/test_methods.py::test_groupby_column_index_in_references": "flaky test", + "tests/copy_view/test_methods.py::test_groupby_modify_series": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-Decimal-Decimal-object-False]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-Decimal-Decimal-None-False]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-NoneType-object-False]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-NoneType-None-False]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-Decimal-Decimal-None-True]": "Index inferred_type mismatch in cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-Decimal-Decimal-object-True]": "Index inferred_type mismatch in cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-float1-NoneType-None-True]": "Series length mismatch in cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-NoneType-None-True]": "Index inferred_type mismatch in cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-NoneType-object-True]": "Index inferred_type mismatch in cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-float0-None-True]": "Series length mismatch in cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-NoneType-float1-None-True]": "Series length mismatch in cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-float0-NoneType-None-True]": "Series length mismatch in cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-float1-NoneType-None-True]": "Series length mismatch in cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-Decimal-Decimal-object-True]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[True-Decimal-Decimal-None-True]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-NoneType-object-True]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-NoneType-None-True]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-float0-None-True]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-float1-None-True]": "flaky test", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-float0-NoneType-None-True]": "flaky test", + "tests/arrays/sparse/test_libsparse.py": "Tests private pandas APIs", + "tests/copy_view/test_internals.py": "Tests private pandas APIs", + "tests/frame/methods/test_to_dict_of_blocks.py": "Tests private pandas APIs", + "tests/frame/test_block_internals.py": "Tests private pandas APIs", + "tests/indexing/multiindex/test_chaining_and_caching.py": "Tests private pandas APIs", + "tests/indexing/test_chaining_and_caching.py": "Tests private pandas APIs", + "tests/interchange/": "DataFrame interchange protocol unsupported in ecosystem", + "tests/internals/": "Tests private pandas APIs", + "tests/io/parser/test_network.py": "Requires moto server running on http://localhost:5000", + "tests/io/test_clipboard.py": "Monkeypatches pandas module", + "tests/libs/": "Tests private pandas APIs", + "tests/test_nanops.py": "Tests private pandas APIs", + "tests/tslibs/": "Tests private pandas APIs", + "tests/util/test_assert_produces_warning.py": "Tests private pandas APIs", + "tests/util/test_shares_memory.py": "Tests private pandas APIs", } -NODEIDS_THAT_FAIL_DUE_TO_UNSUPPORTED_PANDAS_FEATURES = { - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint8-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint8-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint16-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint16-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint32-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint32-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint64-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int8-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int8-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int16-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int16-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int32-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int32-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int64-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[int64-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[float-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[float-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[double-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[double-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__add__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__radd__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__sub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__rsub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__mul__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__rmul__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__pow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__rpow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint8-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint8-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint16-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint16-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint32-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint32-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint64-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int8-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int8-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int16-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int16-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int32-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int32-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int64-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[int64-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[float-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[float-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[double-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[double-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__add__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__radd__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__sub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__rsub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__mul__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__rmul__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__pow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__rpow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint8-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint8-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint16-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint16-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint32-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint32-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint64-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[uint64-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int8-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int8-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int16-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int16-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int32-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int32-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int64-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[int64-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[float-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[float-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[double-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[double-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[duration[s]-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[duration[s]-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[duration[ms]-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[duration[ms]-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[duration[us]-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[duration[us]-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[duration[ns]-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[duration[ns]-__rmod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__add__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__radd__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__sub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__rsub__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__mul__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__rmul__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__floordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__rfloordiv__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__pow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__rpow__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__mod__]", - "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__rmod__]", +# Keep keys in alphabeical order +NODEIDS_TO_SKIP: dict[str, str] = { + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-0-False-mean-columns]": "Asserts private APIs", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-0-False-mean-index]": "Asserts private APIs", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-0-True-mean-columns]": "Asserts private APIs", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-0-True-mean-index]": "Asserts private APIs", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-1-False-mean-columns]": "Asserts private APIs", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-1-False-mean-index]": "Asserts private APIs", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-1-True-mean-columns]": "Asserts private APIs", + "tests/apply/test_frame_apply.py::test_apply_empty_infer_type[python-1-True-mean-index]": "Asserts private APIs", + "tests/arithmetic/test_datetime64.py::TestDatetime64OverflowHandling::test_datetimeindex_sub_datetimeindex_overflow": "Asserts private APIs", + "tests/arithmetic/test_datetime64.py::TestDatetime64OverflowHandling::test_datetimeindex_sub_timestamp_overflow": "Asserts private APIs", + "tests/arithmetic/test_string.py::test_add[string=object]": "pandas xfails, but xpasses with cudf.pandas", + "tests/arithmetic/test_string.py::test_add_2d[string=str[pyarrow]]": "pandas xfails, but xpasses with cudf.pandas", + "tests/arithmetic/test_string.py::test_add_2d[string=string[pyarrow]]": "pandas xfails, but xpasses with cudf.pandas", + "tests/arrays/boolean/test_construction.py::test_boolean_array_constructor_copy": "Asserts private APIs", + "tests/arrays/boolean/test_construction.py::test_coerce_to_array": "Asserts private APIs", + "tests/arrays/string_/test_string.py::test_memory_usage[string=str[python]]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/arrays/string_/test_string.py::test_memory_usage[string=string[python]]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['+01:15'-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['+01:15'-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['+01:15'-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['+01:15'-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['+01:15'-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['+01:15'-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['-02:15'-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['-02:15'-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['-02:15'-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['-02:15'-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['-02:15'-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['-02:15'-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['Asia/Tokyo'-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['Asia/Tokyo'-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['Asia/Tokyo'-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['Asia/Tokyo'-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['Asia/Tokyo'-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['Asia/Tokyo'-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['US/Eastern'-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['US/Eastern'-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['US/Eastern'-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['US/Eastern'-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['US/Eastern'-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['US/Eastern'-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC'-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC'-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC'-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC'-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC'-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC'-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC+01:15'-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC+01:15'-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC+01:15'-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC+01:15'-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC+01:15'-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC+01:15'-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC-02:15'-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC-02:15'-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC-02:15'-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC-02:15'-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC-02:15'-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['UTC-02:15'-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/Asia/Singapore'-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/Asia/Singapore'-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/Asia/Singapore'-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/Asia/Singapore'-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/Asia/Singapore'-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/Asia/Singapore'-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/US/Pacific'-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/US/Pacific'-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/US/Pacific'-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/US/Pacific'-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/US/Pacific'-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz['dateutil/US/Pacific'-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[0-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[0-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[0-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[0-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[0-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[0-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[1-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[1-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[1-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[1-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[1-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[1-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[None-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[None-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[None-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[None-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[None-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[None-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(seconds=3600))-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(seconds=3600))-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(seconds=3600))-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(seconds=3600))-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(seconds=3600))-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone(datetime.timedelta(seconds=3600))-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone.utc-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone.utc-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone.utc-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone.utc-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone.utc-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[datetime.timezone.utc-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(-300)-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(-300)-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(-300)-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(-300)-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(-300)-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(-300)-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(300)-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(300)-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(300)-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(300)-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(300)-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[pytz.FixedOffset(300)-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzlocal()-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzlocal()-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzlocal()-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzlocal()-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzlocal()-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzlocal()-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzutc()-B]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzutc()-D]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzutc()-ME]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzutc()-QE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzutc()-W]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/arrays/test_datetimelike.py::TestDatetimeArray::test_array_tz[tzutc()-YE]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/base/test_misc.py::test_memory_usage[float16-series]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/base/test_misc.py::test_memory_usage[object]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/base/test_misc.py::test_memory_usage[series-with-bool-object-index]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/base/test_misc.py::test_memory_usage[series-with-string-python-index]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/base/test_misc.py::test_memory_usage[string-python]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/computation/test_eval.py::test_eval_no_support_column_name[Inf]": "pandas xfails, but xpasses with cudf.pandas", + "tests/computation/test_eval.py::test_eval_no_support_column_name[inf]": "pandas xfails, but xpasses with cudf.pandas", + "tests/copy_view/test_methods.py::test_infer_objects_reference": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/copy_view/test_methods.py::test_infer_objects_no_reference": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/extension/decimal/test_decimal.py::TestDecimalArray::test_getitem_series_integer_with_missing_raises[integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/decimal/test_decimal.py::test_array_copy_on_write": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/json/test_json.py::TestJSONArray::test_getitem_series_integer_with_missing_raises[integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_EA_types[timestamp[ns]-False-c-_NoDefault.no_default]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_EA_types[timestamp[ns]-False-c-pyarrow]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_EA_types[timestamp[ns]-False-python-_NoDefault.no_default]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_EA_types[timestamp[ns]-False-python-pyarrow]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_EA_types[timestamp[us]-False-c-_NoDefault.no_default]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_EA_types[timestamp[us]-False-c-pyarrow]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_EA_types[timestamp[us]-False-python-_NoDefault.no_default]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_EA_types[timestamp[us]-False-python-pyarrow]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cumsum-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_accumulate_series[bool-cumsum-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__add__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__floordiv__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__mul__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__pow__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__radd__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__rfloordiv__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__rmul__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__rpow__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__rsub__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[bool-__sub__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint16-__rpow__]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint32-__rpow__]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_frame_with_scalar[uint8-__rpow__]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__add__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__floordiv__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__mul__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__pow__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__radd__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__rfloordiv__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__rmul__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__rpow__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__rsub__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_array[bool-__sub__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__add__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__floordiv__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__mul__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__pow__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__radd__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__rfloordiv__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__rmul__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__rpow__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__rsub__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[bool-__sub__]": "Unsupported pandas features (TODO: validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint16-__rpow__]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint32-__rpow__]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_arith_series_with_scalar[uint8-__rpow__]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_arrow.py::TestArrowArray::test_astype_str[duration[ms]]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_astype_str[duration[ns]]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_astype_str[duration[s]]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_astype_str[duration[us]]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[ms]-eq]": "Flaky/order-dependent", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[s]-eq]": "Flaky/order-dependent", + "tests/extension/test_arrow.py::TestArrowArray::test_compare_array[timestamp[us]-eq]": "Flaky/order-dependent", + "tests/extension/test_arrow.py::TestArrowArray::test_concat_mixed_dtypes[decimal128(7, 3)]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[binary-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[bool-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[date32[day]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[date64[ms]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[decimal128(7, 3)-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[double-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[duration[ms]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[duration[ns]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[duration[s]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[duration[us]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[float-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[int16-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[int32-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[int64-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[int8-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[string-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[time32[ms]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[time32[s]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[time64[ns]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[time64[us]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ms, tz=US/Eastern]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ms, tz=US/Pacific]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ms, tz=UTC]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ms]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ns, tz=US/Eastern]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ns, tz=US/Pacific]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ns, tz=UTC]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[ns]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[s, tz=US/Eastern]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[s, tz=US/Pacific]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[s, tz=UTC]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[s]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[us, tz=US/Eastern]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[us, tz=US/Pacific]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[us, tz=UTC]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[timestamp[us]-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[uint16-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[uint32-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[uint64-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_getitem_series_integer_with_missing_raises[uint8-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[bool]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[decimal128(7, 3)]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[double]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[duration[ms]]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[duration[ns]]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[duration[s]]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[duration[us]]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[float]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[int16]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[int32]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[int64]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[int8]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[string]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[timestamp[ms]]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[timestamp[ns]]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[timestamp[s]]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[timestamp[us]]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[uint16]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[uint32]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[uint64]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_memory_usage[uint8]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_boolean[string-all-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_boolean[string-any-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-median-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-median-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-skew-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-std-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-std-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-var-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[bool-var-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[decimal128(7, 3)-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[double-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[double-kurt-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[double-skew-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[float-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[float-skew-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int16-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int16-skew-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int32-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int32-skew-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int64-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int64-skew-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int8-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[int8-skew-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint16-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint16-skew-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint32-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint32-skew-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint64-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint64-skew-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint8-kurt-False]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_reduce_series_numeric[uint8-skew-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[binary]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[bool]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[date32[day]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[date64[ms]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[decimal128(7, 3)]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[double]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[ms]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[ns]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[s]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[duration[us]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[float]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int16]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int32]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int64]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[int8]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[string]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time32[ms]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time32[s]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time64[ns]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[time64[us]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms, tz=US/Eastern]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms, tz=US/Pacific]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms, tz=UTC]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ms]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns, tz=US/Eastern]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns, tz=US/Pacific]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns, tz=UTC]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[ns]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s, tz=US/Eastern]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s, tz=US/Pacific]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s, tz=UTC]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[s]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us, tz=US/Eastern]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us, tz=US/Pacific]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us, tz=UTC]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[timestamp[us]]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint16]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint32]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint64]": "Asserts private APIs", + "tests/extension/test_arrow.py::TestArrowArray::test_series_constructor[uint8]": "Asserts private APIs", + "tests/extension/test_categorical.py::TestCategorical::test_empty": "Worker crashes (segfault) when running this test", + "tests/extension/test_categorical.py::TestCategorical::test_getitem_series_integer_with_missing_raises[integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_categorical.py::TestCategorical::test_series_constructor": "Asserts private APIs", + "tests/extension/test_interval.py::TestIntervalArray::test_getitem_series_integer_with_missing_raises[integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_interval.py::TestIntervalArray::test_series_constructor": "Asserts private APIs", + "tests/extension/test_masked.py::TestMaskedArrays::test_astype_str[Float32Dtype]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[BooleanDtype-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Float32Dtype-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Float64Dtype-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Int16Dtype-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Int32Dtype-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Int64Dtype-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[Int8Dtype-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[UInt16Dtype-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[UInt32Dtype-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[UInt64Dtype-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_getitem_series_integer_with_missing_raises[UInt8Dtype-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[BooleanDtype]": "Asserts private APIs", + "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Float32Dtype]": "Asserts private APIs", + "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Float64Dtype]": "Asserts private APIs", + "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Int16Dtype]": "Asserts private APIs", + "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Int32Dtype]": "Asserts private APIs", + "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Int64Dtype]": "Asserts private APIs", + "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[Int8Dtype]": "Asserts private APIs", + "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[UInt16Dtype]": "Asserts private APIs", + "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[UInt32Dtype]": "Asserts private APIs", + "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[UInt64Dtype]": "Asserts private APIs", + "tests/extension/test_masked.py::TestMaskedArrays::test_series_constructor[UInt8Dtype]": "Asserts private APIs", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_series_integer_with_missing_raises[float-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_getitem_series_integer_with_missing_raises[object-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_memory_usage[object]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_series_constructor[float]": "Asserts private APIs", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_series_constructor[object]": "Asserts private APIs", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_integer_array[object-True-list]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_integer_array[object-True-numpy-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_loc_iloc_slice[object]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_mask[object-True-numpy-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_mask_broadcast[object-None]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_mask_broadcast[object-loc]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_sequence_broadcasts[object-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_numpy.py::TestNumpyExtensionArray::test_setitem_slice[object-True]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_period.py::TestPeriodArray::test_getitem_series_integer_with_missing_raises[2D-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_period.py::TestPeriodArray::test_getitem_series_integer_with_missing_raises[D-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_period.py::TestPeriodArray::test_series_constructor[2D]": "Asserts private APIs", + "tests/extension/test_period.py::TestPeriodArray::test_series_constructor[D]": "Asserts private APIs", + "tests/extension/test_sparse.py::TestSparseArray::test_fillna_length_mismatch[nan]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_sparse.py::TestSparseArray::test_getitem_series_integer_with_missing_raises[0-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_sparse.py::TestSparseArray::test_getitem_series_integer_with_missing_raises[nan-integer-array]": "pandas xfails, but xpasses with cudf.pandas", + "tests/extension/test_sparse.py::TestSparseArray::test_series_constructor[0]": "Asserts private APIs", + "tests/extension/test_sparse.py::TestSparseArray::test_series_constructor[nan]": "Asserts private APIs", + "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=str[pyarrow]-False-integer-array]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=str[pyarrow]-True-integer-array]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=str[python]-False-integer-array]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=str[python]-True-integer-array]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=string[pyarrow]-False-integer-array]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=string[pyarrow]-True-integer-array]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=string[python]-False-integer-array]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_string.py::TestStringArray::test_getitem_series_integer_with_missing_raises[string=string[python]-True-integer-array]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=str[pyarrow]-False]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=str[pyarrow]-True]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=str[python]-False]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=str[python]-True]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=string[pyarrow]-False]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=string[pyarrow]-True]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=string[python]-False]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_string.py::TestStringArray::test_memory_usage[string=string[python]-True]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=str[pyarrow]-False]": "Asserts private APIs", + "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=str[pyarrow]-True]": "Asserts private APIs", + "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=str[python]-False]": "Asserts private APIs", + "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=str[python]-True]": "Asserts private APIs", + "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=string[pyarrow]-False]": "Asserts private APIs", + "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=string[pyarrow]-True]": "Asserts private APIs", + "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=string[python]-False]": "Asserts private APIs", + "tests/extension/test_string.py::TestStringArray::test_series_constructor[string=string[python]-True]": "Asserts private APIs", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_iloc_ea_series_indexer_with_na": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/frame/indexing/test_indexing.py::TestDataFrameIndexing::test_type_error_multiindex": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/frame/methods/test_dot.py::TestSeriesDot::test_dot_2d_ndarray": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/frame/methods/test_info.py::test_info_memory_usage_deep_pypy": "pandas xfails, but xpasses with cudf.pandas", + "tests/frame/methods/test_info.py::test_memory_usage_empty_no_warning": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/frame/methods/test_sort_index.py::TestDataFrameSortIndex::test_sort_index": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/frame/methods/test_sort_index.py::TestDataFrameSortIndex::test_sort_index_inplace": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/frame/test_query_eval.py::TestDataFrameEval::test_extension_array_eval[numexpr-pandas]": "pandas xfails, but xpasses with cudf.pandas", + "tests/frame/test_query_eval.py::TestDataFrameEval::test_extension_array_eval[numexpr-python]": "pandas xfails, but xpasses with cudf.pandas", + "tests/generic/test_finalize.py::test_categorical_accessor[method0]": "pandas xfails, but xpasses with cudf.pandas", + "tests/generic/test_finalize.py::test_categorical_accessor[method1]": "pandas xfails, but xpasses with cudf.pandas", + "tests/generic/test_finalize.py::test_categorical_accessor[method2]": "pandas xfails, but xpasses with cudf.pandas", + "tests/generic/test_finalize.py::test_categorical_accessor[method4]": "pandas xfails, but xpasses with cudf.pandas", + "tests/generic/test_finalize.py::test_categorical_accessor[method7]": "pandas xfails, but xpasses with cudf.pandas", + "tests/generic/test_finalize.py::test_categorical_accessor[method8]": "pandas xfails, but xpasses with cudf.pandas", + "tests/groupby/test_groupby.py::test_ops_not_as_index[idxmin]": "pandas xfails, but xpasses with cudf.pandas", + "tests/groupby/test_groupby.py::test_single_element_list_grouping[selection2]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-Decimal-Decimal-None-False]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-Decimal-Decimal-object-False]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-float0-None-False]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-NoneType-float1-None-False]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-float0-NoneType-None-False]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/groupby/test_groupby_dropna.py::test_null_is_null_for_dtype[False-float1-NoneType-None-False]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/groupby/test_grouping.py::TestGrouping::test_groupby_level_index_value_all_na": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/datetimes/test_partial_slicing.py::TestSlicing::test_slice_month": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float-Interval]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float32-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float32-Interval]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float64-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[float64-Interval]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int-Interval]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int16-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int16-Interval]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int32-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int32-Interval]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int64-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int64-Interval]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int8-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[int8-Interval]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint16-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint16-Interval]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint32-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint32-Interval]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint64-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint64-Interval]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint8-IntervalIndex]": "Asserts private APIs", + "tests/indexes/interval/test_interval.py::TestIntervalIndex::test_maybe_convert_i8_numeric_identical[uint8-Interval]": "Asserts private APIs", + "tests/indexes/multi/test_integrity.py::test_memory_usage": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/multi/test_monotonic.py::test_is_monotonic_with_nans[values0-is_monotonic_increasing]": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/indexes/numeric/test_indexing.py::TestGetIndexer::test_get_loc_masked_na_and_nan[False]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_base.py::TestIndex::test_empty_fancy[bool-float32]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_base.py::TestIndex::test_empty_fancy[bool-float64]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_base.py::TestIndex::test_empty_fancy[bool-int32]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_base.py::TestIndex::test_empty_fancy[bool-int64]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_base.py::TestIndex::test_empty_fancy[bool-uint32]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_base.py::TestIndex::test_empty_fancy[bool-uint64]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-arctan]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-cosh]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_float-log2]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-arccosh]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-cosh]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-expm1]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-log1p]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_int-sinh]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-arctan]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-cosh]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_numpy_compat.py::test_numpy_ufuncs_basic[nullable_uint-log2]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index0]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index13]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index1]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index2]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index3]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index4]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index5]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index6]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index7]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_copy_shares_cache[simple_index8]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index13]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index1]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index2]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index3]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index5]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index6]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index7]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_engine_reference_cycle[simple_index8]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[bool-dtype]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[datetime-tz]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[datetime]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[empty]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[float32]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[float64]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[int16]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[int32]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[int64]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[int8]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[nullable_bool]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[nullable_float]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[nullable_int]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[nullable_uint]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[object]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[repeats]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[string-pyarrow]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[string-python]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[string]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[timedelta]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[uint16]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[uint32]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[uint64]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_ensure_copied_data[uint8]": "Asserts private APIs", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[bool-dtype]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[categorical]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[float32]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[float64]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[int16]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[int32]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[int64]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[int8]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[multi]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[object]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[repeats]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[tuples]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[uint16]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[uint32]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[uint64]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_old_base.py::TestBase::test_memory_usage[uint8]": "GPU/CPU memory_usage differs from sys.getsizeof", + "tests/indexes/test_setops.py::TestSetOps::test_symmetric_difference[object]": "pandas xfails, but xpasses with cudf.pandas", + "tests/indexes/test_setops.py::TestSetOps::test_symmetric_difference[tuples]": "pandas xfails, but xpasses with cudf.pandas", + "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[a-0]": "Asserts private APIs", + "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[a-1]": "Asserts private APIs", + "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[a-2]": "Asserts private APIs", + "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[a-3]": "Asserts private APIs", + "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[a-4]": "Asserts private APIs", + "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[b-0]": "Asserts private APIs", + "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[b-1]": "Asserts private APIs", + "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[b-2]": "Asserts private APIs", + "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[b-3]": "Asserts private APIs", + "tests/indexing/multiindex/test_indexing_slow.py::test_multiindex_get_loc[b-4]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['+01:15'-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['+01:15'-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['+01:15'-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['-02:15'-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['-02:15'-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['-02:15'-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['Asia/Tokyo'-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['Asia/Tokyo'-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['Asia/Tokyo'-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['US/Eastern'-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['US/Eastern'-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['US/Eastern'-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC'-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC'-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC'-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC+01:15'-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC+01:15'-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC+01:15'-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC-02:15'-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC-02:15'-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['UTC-02:15'-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/Asia/Singapore'-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/Asia/Singapore'-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/Asia/Singapore'-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/US/Pacific'-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/US/Pacific'-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar['dateutil/US/Pacific'-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[None-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[None-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[None-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(seconds=3600))-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(seconds=3600))-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone(datetime.timedelta(seconds=3600))-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone.utc-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone.utc-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[datetime.timezone.utc-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(-300)-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(-300)-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(-300)-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(300)-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(300)-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[pytz.FixedOffset(300)-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzlocal()-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzlocal()-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzlocal()-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzutc()-iloc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzutc()-loc]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_scalar[tzutc()-setitem]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['+01:15'-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['-02:15'-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['Asia/Tokyo'-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['US/Eastern'-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC'-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC+01:15'-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['UTC-02:15'-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/Asia/Singapore'-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values['dateutil/US/Pacific'-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[None-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(days=-1, seconds=82800), 'foo')-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone(datetime.timedelta(seconds=3600))-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[datetime.timezone.utc-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(-300)-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[pytz.FixedOffset(300)-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzlocal()-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_dt64_string_values[tzutc()-setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[iloc-3 Days]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[iloc-scalar1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[loc-3 Days]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[loc-scalar1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[setitem-3 Days]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_scalar[setitem-scalar1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[iloc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[loc-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key0-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key0-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key0-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key0-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key0-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key1-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key1-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key1-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key1-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key1-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key2-Categorical]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key2-Index]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key2-array0]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key2-array1]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestDatetimelikeCoercion::test_setitem_td64_string_values[setitem-key2-list]": "Asserts private APIs", + "tests/indexing/test_indexing.py::TestMisc::test_no_reference_cycle": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/io/formats/test_to_string.py::TestDataFrameToString::test_to_string_index_with_nan": "pandas xfails, but xpasses with cudf.pandas", + "tests/io/json/test_compression.py::test_with_s3_url[bz2]": "Requires moto server running on http://localhost:5000", + "tests/io/json/test_compression.py::test_with_s3_url[gzip]": "Requires moto server running on http://localhost:5000", + "tests/io/json/test_compression.py::test_with_s3_url[tar]": "Requires moto server running on http://localhost:5000", + "tests/io/json/test_compression.py::test_with_s3_url[xz]": "Requires moto server running on http://localhost:5000", + "tests/io/json/test_compression.py::test_with_s3_url[zip]": "Requires moto server running on http://localhost:5000", + "tests/io/json/test_readlines.py::test_readjson_unicode[pyarrow]": "pandas xfails, but xpasses with cudf.pandas", + "tests/io/parser/common/test_file_buffer_url.py::test_eof_states[pyarrow-escape-in-quoted-field]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/io/parser/common/test_file_buffer_url.py::test_eof_states[pyarrow-escaped-char]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/io/parser/common/test_file_buffer_url.py::test_eof_states[pyarrow-in-field]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/io/parser/common/test_file_buffer_url.py::test_eof_states[pyarrow-in-quoted-field]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/io/parser/common/test_file_buffer_url.py::test_eof_states[pyarrow-skip-line]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/io/parser/common/test_file_buffer_url.py::test_eof_states[pyarrow-whitespace-line]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/io/parser/test_unsupported.py::test_invalid_file_inputs[python]": "pandas xfails, but xpasses with cudf.pandas", + "tests/io/test_fsspec.py::test_s3_parquet": "Requires moto server running on http://localhost:5000", + "tests/io/test_parquet.py::TestParquetFastParquet::test_s3_roundtrip": "Requires moto server running on http://localhost:5000", + "tests/io/test_pickle.py::test_pickle_frame_v124_unpickle_130": "TODO: Add reason to skip (need to validate on pandas 3)", + "tests/plotting/test_datetimelike.py::TestTSPlot::test_add_matplotlib_datetime64": "pandas xfails, but xpasses with cudf.pandas", + "tests/resample/test_base.py::test_resample_empty_dataframe[count-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[count-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[first-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[first-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[last-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[last-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[max-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[max-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[mean-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[mean-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[median-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[median-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[min-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[min-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[nunique-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[nunique-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[ohlc-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[ohlc-D-index1]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[ohlc-ME-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[ohlc-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[ohlc-h-index1]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[prod-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[prod-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[quantile-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[quantile-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[size-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[size-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[std-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[std-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[sum-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[sum-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[var-D-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/resample/test_base.py::test_resample_empty_dataframe[var-h-index0]": "Crashes pytest workers (TODO: Validate on pandas 3)", + "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_with_intc_columns": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/reshape/merge/test_merge.py::TestMergeDtypes::test_merge_with_uintc_columns": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/reshape/merge/test_multi.py::TestMergeMulti::test_merge_na_keys": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/reshape/test_crosstab.py::test_categoricals[category-category]": "Flaky/order-dependent", + "tests/reshape/test_crosstab.py::test_categoricals[category-int64]": "Flaky/order-dependent", + "tests/reshape/test_crosstab.py::test_categoricals[int64-category]": "Flaky/order-dependent", + "tests/reshape/test_crosstab.py::test_categoricals[int64-int64]": "Flaky/order-dependent", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-None-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-None-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-None-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-nan-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-nan-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-nan-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val2-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val2-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val2-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val4-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val4-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[M8[ns]-val4-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-None-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-None-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-None-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-nan-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-nan-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-nan-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-val2-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-val2-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, US/Central]-val2-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-None-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-None-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-None-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-nan-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-nan-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-nan-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-val2-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-val2-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[datetime64[ns, UTC]-val2-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-None-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-None-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-None-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-nan-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-nan-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-nan-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val2-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val2-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val2-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val3-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val3-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_int_key[m8[ns]-val3-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[M8[ns]-None]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[M8[ns]-nan]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[M8[ns]-val2]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[M8[ns]-val4]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, US/Central]-None]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, US/Central]-nan]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, US/Central]-val2]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, UTC]-None]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, UTC]-nan]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[datetime64[ns, UTC]-val2]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[m8[ns]-None]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[m8[ns]-nan]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[m8[ns]-val2]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNADatetimeLikeDtype::test_series_where[m8[ns]-val3]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_putmask[3-None]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_putmask[3-nan]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_putmask[key1-None]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_putmask[key1-nan]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_where[3-None]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_where[3-nan]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_where[key1-None]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_index_where[key1-nan]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-None-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-None-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-None-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-nan-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-nan-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[3-nan-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-None-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-None-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-None-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-nan-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-nan-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_int_key[key1-nan-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-None-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-None-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-None-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-nan-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-nan-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[3-nan-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-None-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-None-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-None-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-nan-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-nan-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_mask_key[key1-nan-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_series_where[3-None]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_series_where[3-nan]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_series_where[key1-None]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_series_where[key1-nan]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-None-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-None-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-None-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-nan-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-nan-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[3-nan-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-None-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-None-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-None-setitem]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-nan-iloc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-nan-loc]": "Asserts private APIs", + "tests/series/indexing/test_setitem.py::TestSetitemNAPeriodDtype::test_slice_key[key1-nan-setitem]": "Asserts private APIs", + "tests/series/methods/test_info.py::test_info_memory_usage_deep_pypy": "pandas xfails, but xpasses with cudf.pandas", + "tests/series/methods/test_reindex.py::test_reindexing_with_float64_NA_log": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_maskedarray_hardened": "Flaky xfails (TODO: Validate with pandas 3)", + "tests/series/test_constructors.py::TestSeriesConstructors::test_constructor_no_data_string_type": "pandas xfails, but xpasses with cudf.pandas", + "tests/strings/test_api.py::test_api_per_method[index-empty1-partition1-category]": "pandas xfails, but xpasses with cudf.pandas", + "tests/strings/test_api.py::test_api_per_method[index-empty1-partition1-object]": "pandas xfails, but xpasses with cudf.pandas", + "tests/strings/test_api.py::test_api_per_method[index-empty1-partition2-category]": "pandas xfails, but xpasses with cudf.pandas", + "tests/strings/test_api.py::test_api_per_method[index-empty1-partition2-object]": "pandas xfails, but xpasses with cudf.pandas", + "tests/strings/test_api.py::test_api_per_method[index-empty1-rpartition1-category]": "pandas xfails, but xpasses with cudf.pandas", + "tests/strings/test_api.py::test_api_per_method[index-empty1-rpartition1-object]": "pandas xfails, but xpasses with cudf.pandas", + "tests/strings/test_api.py::test_api_per_method[index-empty1-rpartition2-category]": "pandas xfails, but xpasses with cudf.pandas", + "tests/strings/test_api.py::test_api_per_method[index-empty1-rpartition2-object]": "pandas xfails, but xpasses with cudf.pandas", + "tests/strings/test_api.py::test_api_per_method[index-empty1-split1-category]": "pandas xfails, but xpasses with cudf.pandas", + "tests/strings/test_api.py::test_api_per_method[index-empty1-split1-object]": "pandas xfails, but xpasses with cudf.pandas", + "tests/strings/test_split_partition.py::test_get": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split[string=str[pyarrow]-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split[string=str[python]-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split[string=string[pyarrow]-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split[string=string[python]-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_blank_string_with_non_empty[string=object]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_lookarounds[string=str[pyarrow]-ab-expected_data4]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_lookarounds[string=str[python]-ab-expected_data4]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_lookarounds[string=string[pyarrow]-ab-expected_data4]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_lookarounds[string=string[python]-ab-expected_data4]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_more_regex_split[string=str[pyarrow]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_more_regex_split[string=str[python]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_more_regex_split[string=string[pyarrow]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_more_regex_split[string=string[python]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_more_than_one_char[string=str[pyarrow]-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_more_than_one_char[string=str[python]-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_more_than_one_char[string=string[pyarrow]-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_more_than_one_char[string=string[python]-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_n[string=str[pyarrow]-0-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_n[string=str[pyarrow]-None-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_n[string=str[python]-0-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_n[string=str[python]-None-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_n[string=string[pyarrow]-0-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_n[string=string[pyarrow]-None-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_n[string=string[python]-0-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_n[string=string[python]-None-split]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_no_pat_with_nonzero_n[string=string[pyarrow]-data0-None-once too!]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_no_pat_with_nonzero_n[string=string[pyarrow]-data1-_-once_too!]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_regex[string=string[pyarrow]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_regex_end_of_string[string=string[pyarrow]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_regex_explicit[string=string[pyarrow]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_to_dataframe_unequal_splits[string=object]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_to_multiindex_expand_no_splits": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_split_partition.py::test_split_with_name_series[string=string[pyarrow]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_string_array.py::test_string_array[string[pyarrow]-split0]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_string_array.py::test_string_array[string[pyarrow]-split2]": "Flaky/order-dependent", + "tests/strings/test_string_array.py::test_string_array[string[python]-split0]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_string_array.py::test_string_array[string[python]-split2]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_strings.py::test_empty_str_methods[string=string[pyarrow]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_strings.py::test_pipe_failures[string=string[pyarrow]]": "Flaky/order-dependent", + "tests/strings/test_strings.py::test_split_join_roundtrip[string=str[pyarrow]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_strings.py::test_split_join_roundtrip[string=str[python]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_strings.py::test_split_join_roundtrip[string=string[pyarrow]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/strings/test_strings.py::test_split_join_roundtrip[string=string[python]]": "Flaky/version-sensitive cudf.pandas dispatch", + "tests/util/test_assert_series_equal.py::test_assert_series_equal_check_exact_index_default[left_idx3-right_idx3]": "pandas xfails, but xpasses with cudf.pandas", + "tests/util/test_assert_series_equal.py::test_assert_series_equal_check_exact_index_default[left_idx4-right_idx4]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data1-rolling_consistency_cases0-False-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data1-rolling_consistency_cases0-True-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data11-rolling_consistency_cases0-False-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data11-rolling_consistency_cases0-True-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data15-rolling_consistency_cases0-False-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data15-rolling_consistency_cases0-True-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data16-rolling_consistency_cases0-False-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data16-rolling_consistency_cases0-True-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data17-rolling_consistency_cases0-False-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data17-rolling_consistency_cases0-True-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data5-rolling_consistency_cases0-False-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data5-rolling_consistency_cases0-True-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data6-rolling_consistency_cases0-False-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data6-rolling_consistency_cases0-True-sum]": "pandas xfails, but xpasses with cudf.pandas", + "tests/window/moments/test_moments_consistency_rolling.py::test_rolling_apply_consistency_sum[all_data7-rolling_consistency_cases0-False-sum]": "pandas xfails, but xpasses with cudf.pandas", } def pytest_collection_modifyitems(session, config, items): - TO_SKIP = ( - NODEIDS_THAT_XPASS_WITH_CUDF_PANDAS - | NODEIDS_THAT_FLAKY_XFAIL_WITH_CUDF_PANDAS - | NODEIDS_TO_ALWAYS_SKIP - | NODEIDS_THAT_ASSERT_PRIVATE_APIS - | NODEIDS_THAT_FAIL_DUE_TO_UNSUPPORTED_PANDAS_FEATURES - ) - TO_XFAIL = NODEIDS_THAT_FAIL_WITH_CUDF_PANDAS | set( - chain.from_iterable( - NODEIDS_THAT_FAIL_WITH_CUDF_PANDAS_WITH_REASON.values() - ) - ) - # Strip out the suffixes pytest-repeat adds to ids so that matches still work - if config.pluginmanager.has_plugin("repeat"): - - def strip_ids(item): - stripped = re.sub(r"\[(.*?)-?\d+-\d+\]$", r"[\1]", item) - return stripped.replace("[]", "") - else: - - def strip_ids(item): - return item - for item in items: - if strip_ids(item.nodeid) in TO_XFAIL: - item.add_marker( - pytest.mark.xfail(reason="Fails with cudf.pandas enabled.") - ) - if strip_ids(item.nodeid) in TO_SKIP: - # Don't think there's an easy way to remove a marker - # https://github.com/pytest-dev/pytest/issues/3324 - item.add_marker( - pytest.mark.skip(reason="XPASSes with cudf.pandas enabled.") + if (reason := NODEIDS_TO_SKIP.get(item.nodeid, None)) is not None: + item.add_marker(pytest.mark.skip(reason=reason)) + elif ( + reason := next( + ( + reasons + for path, reasons in NODEIDS_PATHS_TO_SKIP.items() + if item.nodeid.startswith(path) + ), + None, ) + ) is not None: + item.add_marker(pytest.mark.skip(reason=reason)) + elif (reason := NODEIDS_THAT_FAIL.get(item.nodeid, None)) is not None: + item.add_marker(pytest.mark.xfail(reason=reason)) sys.path.append(os.path.dirname(__file__)) diff --git a/python/cudf/cudf/pandas/scripts/pandas-2-cow-1.patch b/python/cudf/cudf/pandas/scripts/pandas-2-cow-1.patch deleted file mode 100644 index a4d49f2d6e05..000000000000 --- a/python/cudf/cudf/pandas/scripts/pandas-2-cow-1.patch +++ /dev/null @@ -1,67 +0,0 @@ -From b43b95d2b4ef015903f45c9b34e2030bb582d70a Mon Sep 17 00:00:00 2001 -From: Matthew Roeschke <10647082+mroeschke@users.noreply.github.com> -Date: Tue, 16 Dec 2025 13:10:53 -0800 -Subject: [PATCH] BUG: copy np.ndarray inputs to Index constructor by default - (#63370) - ---- - pandas/core/indexes/base.py | 22 ++++++++++++++----- - pandas/tests/copy_view/index/test_index.py | 25 ++++++++++++++++++++++ - 2 files changed, 42 insertions(+), 5 deletions(-) - -diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py -index df898ccf47bfa..3239621468c5a 100644 ---- a/pandas/core/indexes/base.py -+++ b/pandas/core/indexes/base.py -@@ -341,8 +341,13 @@ class Index(IndexOpsMixin, PandasObject): - Data type for the output Index. If not specified, this will be - inferred from `data`. - See the :ref:`user guide ` for more usages. -- copy : bool, default False -- Copy input data. -+ copy : bool, default None -+ Whether to copy input data, only relevant for array, Series, and Index -+ inputs (for other input, e.g. a list, a new array is created anyway). -+ Defaults to True for array input and False for Index/Series. -+ Set to False to avoid copying array input at your own risk (if you -+ know the input data won't be modified elsewhere). -+ Set to True to force copying Series/Index input up front. - name : object - Name to be stored in the index. - tupleize_cols : bool (default: True) -@@ -482,7 +487,7 @@ def __new__( - cls, - data=None, - dtype=None, -- copy: bool = False, -+ copy: bool | None = None, - name=None, - tupleize_cols: bool = True, - ) -> Self: -@@ -499,9 +504,16 @@ def __new__( - if not copy and isinstance(data, (ABCSeries, Index)): - refs = data._references - -+ if isinstance(data, (ExtensionArray, np.ndarray)): -+ # GH 63306 -+ if copy is not False: -+ if dtype is None or astype_is_view(data.dtype, dtype): -+ data = data.copy() -+ copy = False -+ - # range - if isinstance(data, (range, RangeIndex)): -- result = RangeIndex(start=data, copy=copy, name=name) -+ result = RangeIndex(start=data, copy=bool(copy), name=name) - if dtype is not None: - return result.astype(dtype, copy=False) - # error: Incompatible return value type (got "MultiIndex", -@@ -569,7 +581,7 @@ def __new__( - data = com.asarray_tuplesafe(data, dtype=_dtype_obj) - - try: -- arr = sanitize_array(data, None, dtype=dtype, copy=copy) -+ arr = sanitize_array(data, None, dtype=dtype, copy=bool(copy)) - except ValueError as err: - if "index must be specified when data is not list-like" in str(err): - raise cls._raise_scalar_data_error(data) from err diff --git a/python/cudf/cudf/pandas/scripts/pandas-2-cow-2.patch b/python/cudf/cudf/pandas/scripts/pandas-2-cow-2.patch deleted file mode 100644 index 20079f9daf0a..000000000000 --- a/python/cudf/cudf/pandas/scripts/pandas-2-cow-2.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 9b8598a33381915afa9a5c9afddc9cbbf2ec5c8c Mon Sep 17 00:00:00 2001 -From: Zachary Collins -Date: Thu, 18 Dec 2025 13:57:04 -0600 -Subject: [PATCH] API: Copy inputs in Index subclass constructors by default - (GH#63388) (#63398) - ---- - pandas/core/indexes/base.py | 23 ++++++++++---- - pandas/core/indexes/datetimes.py | 14 +++++++-- - 12 files changed, 177 insertions(+), 20 deletions(-) - -diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py -index f73fe77defc26..dc37f3bfa6a4c 100644 ---- a/pandas/core/indexes/base.py -+++ b/pandas/core/indexes/base.py -@@ -505,12 +505,8 @@ def __new__( - if not copy and isinstance(data, (ABCSeries, Index)): - refs = data._references - -- if isinstance(data, (ExtensionArray, np.ndarray)): -- # GH 63306 -- if copy is not False: -- if dtype is None or astype_is_view(data.dtype, dtype): -- data = data.copy() -- copy = False -+ # GH 63306, GH 63388 -+ data, copy = cls._maybe_copy_array_input(data, copy, dtype) - - # range - if isinstance(data, (range, RangeIndex)): -@@ -5197,6 +5193,21 @@ def _raise_scalar_data_error(cls, data): - "was passed" - ) - -+ @classmethod -+ def _maybe_copy_array_input( -+ cls, data, copy: bool | None, dtype -+ ) -> tuple[Any, bool]: -+ """ -+ Ensure that the input data is copied if necessary. -+ GH#63388 -+ """ -+ if isinstance(data, (ExtensionArray, np.ndarray)): -+ if copy is not False: -+ if dtype is None or astype_is_view(data.dtype, pandas_dtype(dtype)): -+ data = data.copy() -+ copy = False -+ return data, bool(copy) -+ - def _validate_fill_value(self, value): - """ - Check if the value can be inserted into our array without casting, -diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py -index a07e18b1892fd..72b009a344193 100644 ---- a/pandas/core/indexes/datetimes.py -+++ b/pandas/core/indexes/datetimes.py -@@ -181,8 +181,13 @@ class DatetimeIndex(DatetimeTimedeltaMixin): - If True parse dates in `data` with the year first order. - dtype : numpy.dtype or DatetimeTZDtype or str, default None - Note that the only NumPy dtype allowed is `datetime64[ns]`. -- copy : bool, default False -- Make a copy of input ndarray. -+ copy : bool, default None -+ Whether to copy input data, only relevant for array, Series, and Index -+ inputs (for other input, e.g. a list, a new array is created anyway). -+ Defaults to True for array input and False for Index/Series. -+ Set to False to avoid copying array input at your own risk (if you -+ know the input data won't be modified elsewhere). -+ Set to True to force copying Series/Index up front. - name : label, default None - Name to be stored in the index. - -@@ -669,7 +674,7 @@ def __new__( - dayfirst: bool = False, - yearfirst: bool = False, - dtype: Dtype | None = None, -- copy: bool = False, -+ copy: bool | None = None, - name: Hashable | None = None, - ) -> Self: - if is_scalar(data): -@@ -679,6 +684,9 @@ def __new__( - - name = maybe_extract_name(name, data, cls) - -+ # GH#63388 -+ data, copy = cls._maybe_copy_array_input(data, copy, dtype) -+ - if ( - isinstance(data, DatetimeArray) - and freq is lib.no_default diff --git a/python/cudf/cudf/pandas/scripts/run-pandas-tests.sh b/python/cudf/cudf/pandas/scripts/run-pandas-tests.sh index 9cb6187a0c38..e0bcde359474 100755 --- a/python/cudf/cudf/pandas/scripts/run-pandas-tests.sh +++ b/python/cudf/cudf/pandas/scripts/run-pandas-tests.sh @@ -41,6 +41,12 @@ if [ ! -d "pandas-tests" ]; then # imports fail if we don't do this: mkdir -p pandas-tests cp -r pandas/pandas/tests pandas-tests/ + # Some tests navigate up from tests/ and reference data files in sibling + # directories (e.g. tests/io/formats/style/test_html.py looks for + # io/formats/templates/ five levels above the test file). Copy those + # non-test data directories so that the expected relative paths resolve. + mkdir -p pandas-tests/io/formats + cp -r pandas/pandas/io/formats/templates pandas-tests/io/formats/templates # directory layout requirement # conftest.py # pyproject.toml @@ -68,132 +74,35 @@ EOF for hit in $(find pandas-tests -iname '*.py' -print0 | xargs -0 grep "pandas.tests" | cut -d ":" -f 1 | sort | uniq); do # Get the relative path to the test module test_module=$(echo "$hit" | cut -d "/" -f 2-) - # Get the number of directories to go up + # Count directory separators to find how many levels to go up. + # The sed pattern replaces "pandas.tests." (including the trailing dot) + # with N dots, where N equals the number of path components in test_module. + # E.g. tests/test_col.py (1 slash) -> 1 dot, tests/frame/f.py (2 slashes) -> 2 dots. num_dirs="${test_module//[^\/]/}" num_dirs="${#num_dirs}" - num_dots=$((num_dirs - 1)) - # Construct the relative import - relative_import=$(printf "%0.s." $(seq 1 $num_dots)) - # Replace the import - sed -i "s/pandas.tests/${relative_import}/g" "$hit" + # Build exactly num_dirs dots (0 dots is valid for num_dirs=0). + relative_import="" + for _i in $(seq 1 $num_dirs); do + relative_import="${relative_import}." + done + # Replace "pandas.tests." (including trailing dot) so the replacement + # dots are not combined with an extra dot left by the old pattern. + sed -i "s/pandas\.tests\./${relative_import}/g" "$hit" done fi # append the contents of patch-confest.py to conftest.py cat ../python/cudf/cudf/pandas/scripts/conftest-patch.py >> pandas-tests/conftest.py -# apply copy-on-write patches that won't be fixed until pandas 3 -PATCH_FILE_1="../python/cudf/cudf/pandas/scripts/pandas-2-cow-1.patch" -PATCH_FILE_2="../python/cudf/cudf/pandas/scripts/pandas-2-cow-2.patch" -PANDAS_PATH=$(python -c "import pandas, os; print(os.path.dirname(pandas.__file__))") -patch -d "$PANDAS_PATH" -p2 < "$PATCH_FILE_1" -patch -d "$PANDAS_PATH" -p2 < "$PATCH_FILE_2" - # Run the tests cd pandas-tests/ -# TODO: Needs motoserver/moto container running on http://localhost:5000 -TEST_THAT_NEED_MOTO_SERVER="not test_styler_to_s3 \ -and not test_with_s3_url[None] \ -and not test_with_s3_url[gzip] \ -and not test_with_s3_url[bz2] \ -and not test_with_s3_url[zip] \ -and not test_with_s3_url[xz] \ -and not test_with_s3_url[tar] \ -and not test_s3_permission_output[etree] \ -and not test_read_s3_jsonl \ -and not test_s3_parser_consistency \ -and not test_to_s3 \ -and not test_parse_public_s3a_bucket \ -and not test_parse_public_s3_bucket_nrows \ -and not test_parse_public_s3_bucket_chunked \ -and not test_parse_public_s3_bucket_chunked_python \ -and not test_parse_public_s3_bucket_python \ -and not test_infer_s3_compression \ -and not test_parse_public_s3_bucket_nrows_python \ -and not test_read_s3_fails_private \ -and not test_read_csv_handles_boto_s3_object \ -and not test_read_csv_chunked_download \ -and not test_read_s3_with_hash_in_key \ -and not test_read_feather_s3_file_path \ -and not test_parse_public_s3_bucket \ -and not test_parse_private_s3_bucket \ -and not test_parse_public_s3n_bucket \ -and not test_read_with_creds_from_pub_bucket \ -and not test_read_without_creds_from_pub_bucket \ -and not test_from_s3_csv \ -and not test_s3_protocols[s3] \ -and not test_s3_protocols[s3a] \ -and not test_s3_protocols[s3n] \ -and not test_s3_parquet \ -and not test_s3_roundtrip_explicit_fs \ -and not test_s3_roundtrip \ -and not test_s3_roundtrip_for_dir[partition_col0] \ -and not test_s3_roundtrip_for_dir[partition_col1] \ -and not test_s3_roundtrip" - -TEST_THAT_CRASH_PYTEST_WORKERS="not test_bitmasks_pyarrow \ -and not test_large_string_pyarrow \ -and not test_interchange_from_corrected_buffer_dtypes \ -and not test_eof_states \ -and not test_array_tz \ -and not test_resample_empty_dataframe" - -# these weakref tests are flaky, since they rely on the timing of the cyclic GC -# We skip them always -TEST_THAT_USE_WEAKREFS="not test_no_reference_cycle" -TEST_THAT_USE_STRING_DTYPE_GROUPBY="not test_string_dtype_all_na" - -# TODO: Add reason to skip these tests -TEST_THAT_NEED_REASON_TO_SKIP="not test_groupby_raises_category_on_category \ -and not test_constructor_no_pandas_array \ -and not test_is_monotonic_na \ -and not test_index_contains \ -and not test_frame_op_subclass_nonclass_constructor \ -and not test_round_trip_current \ -and not test_pickle_frame_v124_unpickle_130" - -IGNORE_TESTS_THAT_CRASH_PYTEST_COLLECTION=("--ignore=tests/io/parser/common/test_read_errors.py" - "--ignore=tests/io/test_clipboard.py" -) - -IGNORE_TESTS_THAT_TEST_PRIVATE_FUNTIONALITY=("--ignore=tests/test_nanops.py" - "--ignore=tests/test_optional_dependency.py" - "--ignore=tests/util/test_assert_produces_warning.py" - "--ignore=tests/util/test_shares_memory.py" - "--ignore=tests/util/test_validate_args.py" - "--ignore=tests/util/test_validate_args_and_kwargs.py" - "--ignore=tests/util/test_validate_inclusive.py" - "--ignore=tests/util/test_validate_kwargs.py" - "--ignore=tests/util/test_util.py" - "--ignore=tests/util/test_rewrite_warning.py" - "--ignore=tests/util/test_deprecate_nonkeyword_arguments.py" - "--ignore=tests/util/test_deprecate_kwarg.py" - "--ignore=tests/util/test_deprecate.py" - "--ignore=tests/util/test_doc.py" - "--ignore=tests/frame/methods/test_to_dict_of_blocks.py" - "--ignore=tests/tslibs/" - "--ignore=tests/libs/" - "--ignore=tests/internals/" - "--ignore=tests/groupby/test_libgroupby.py" - "--ignore=tests/frame/test_block_internals.py" - "--ignore=tests/arrays/sparse/test_libsparse.py" - "--ignore=tests/copy_view/test_internals.py" - "--ignore=tests/indexing/test_chaining_and_caching.py" - "--ignore=tests/indexing/multiindex/test_chaining_and_caching.py" -) - - PANDAS_CI="1" python -m pytest -p cudf.pandas \ --import-mode=importlib \ - -k "$TEST_THAT_NEED_MOTO_SERVER and $TEST_THAT_CRASH_PYTEST_WORKERS and $TEST_THAT_NEED_REASON_TO_SKIP and $TEST_THAT_USE_STRING_DTYPE_GROUPBY and $TEST_THAT_USE_WEAKREFS" \ - "${IGNORE_TESTS_THAT_CRASH_PYTEST_COLLECTION[@]}" \ - "${IGNORE_TESTS_THAT_TEST_PRIVATE_FUNTIONALITY[@]}" \ "$@" mv ./*.json .. cd .. -rm -rf pandas-tests/ -rapids-logger "Test script exiting with value: $EXITCODE" +echo "Test script exiting with value: $EXITCODE" exit ${EXITCODE} diff --git a/python/cudf/cudf/testing/__init__.py b/python/cudf/cudf/testing/__init__.py index 4a1d2f9ebf81..becb891f86a2 100644 --- a/python/cudf/cudf/testing/__init__.py +++ b/python/cudf/cudf/testing/__init__.py @@ -1,8 +1,9 @@ -# SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 from cudf.testing import narwhals_test_plugin from cudf.testing.testing import ( + _object_array_equal_nan, assert_arrow_table_equal, assert_eq, assert_frame_equal, diff --git a/python/cudf/cudf/testing/testing.py b/python/cudf/cudf/testing/testing.py index 1f25a8c0c896..38f5cc84d0fb 100644 --- a/python/cudf/cudf/testing/testing.py +++ b/python/cudf/cudf/testing/testing.py @@ -13,9 +13,11 @@ from pandas import testing as tm import cudf -from cudf.core.dtype.validators import is_dtype_obj_numeric +from cudf.core.dtype.validators import ( + is_dtype_obj_numeric, + is_dtype_obj_string, +) from cudf.core.missing import NA, NaT -from cudf.utils.dtypes import CUDF_STRING_DTYPE def _map_string_view_to_string(dtype: pa.DataType) -> pa.DataType: @@ -58,7 +60,7 @@ def dtype_can_compare_equal_to_other(dtype): # return True if values of this dtype can compare # as equal to equal values of a different dtype return not ( - dtype == CUDF_STRING_DTYPE + is_dtype_obj_string(dtype) or isinstance( dtype, ( @@ -791,6 +793,24 @@ def assert_frame_equal( ) +def _object_array_equal_nan(x, y): + if x.shape != y.shape: + assert False + for xe, ye in zip(x.flat, y.flat, strict=True): + if xe is ye: + continue + if ( + isinstance(xe, float) + and isinstance(ye, float) + and np.isnan(xe) + and np.isnan(ye) + ): + continue + if xe != ye: + assert False + return True + + def assert_eq(left, right, **kwargs): """Assert that two cudf-like things are equivalent diff --git a/python/cudf/cudf/tests/conftest.py b/python/cudf/cudf/tests/conftest.py index 28611e3562e3..91ecb3247bf0 100644 --- a/python/cudf/cudf/tests/conftest.py +++ b/python/cudf/cudf/tests/conftest.py @@ -15,7 +15,6 @@ import pandas as pd import pyarrow as pa import pytest -from packaging.version import parse import rmm # noqa: F401 @@ -67,17 +66,6 @@ def default_float_bitwidth(request): yield request.param -@pytest.fixture(autouse=True) -def set_copy_on_write_option(request): - if os.environ.get( - "CUDF_TEST_COPY_ON_WRITE" - ) == "1" and not request.node.get_closest_marker("no_copy_on_write"): - with cudf.option_context("copy_on_write", True): - yield - else: - yield - - @pytest.hookimpl(tryfirst=True, hookwrapper=True) def pytest_runtest_makereport(item, call): """Hook to make result information available in fixtures @@ -460,39 +448,24 @@ def all_supported_types_as_str(request): return request.param -pandas_nullables_types_with_scalars = [ - (1, pd.Int8Dtype()), - (1, pd.Int16Dtype()), - (1, pd.Int32Dtype()), - (1, pd.Int64Dtype()), - (1, pd.UInt8Dtype()), - (1, pd.UInt16Dtype()), - (1, pd.UInt32Dtype()), - (1, pd.UInt64Dtype()), - (1.5, pd.Float32Dtype()), - (1.5, pd.Float64Dtype()), - (True, pd.BooleanDtype()), -] -if parse(pd.__version__) >= parse("2.3.0"): - pandas_nullables_types_with_scalars.extend( - [ - ("a", pd.StringDtype(na_value=np.nan, storage="python")), - ("a", pd.StringDtype(na_value=pd.NA, storage="python")), - ("a", pd.StringDtype(na_value=np.nan, storage="pyarrow")), - ("a", pd.StringDtype(na_value=pd.NA, storage="pyarrow")), - ] - ) -else: - pandas_nullables_types_with_scalars.extend( - [ - ("a", pd.StringDtype(storage="python")), - ("a", pd.StringDtype(storage="pyarrow")), - ] - ) - - @pytest.fixture( - params=pandas_nullables_types_with_scalars, + params=[ + (1, pd.Int8Dtype()), + (1, pd.Int16Dtype()), + (1, pd.Int32Dtype()), + (1, pd.Int64Dtype()), + (1, pd.UInt8Dtype()), + (1, pd.UInt16Dtype()), + (1, pd.UInt32Dtype()), + (1, pd.UInt64Dtype()), + (1.5, pd.Float32Dtype()), + (1.5, pd.Float64Dtype()), + (True, pd.BooleanDtype()), + ("a", pd.StringDtype(na_value=np.nan, storage="python")), + ("a", pd.StringDtype(na_value=pd.NA, storage="python")), + ("a", pd.StringDtype(na_value=np.nan, storage="pyarrow")), + ("a", pd.StringDtype(na_value=pd.NA, storage="pyarrow")), + ], ids=lambda x: repr(x[1]), ) def all_supported_pandas_nullable_extension_dtypes(request): @@ -717,3 +690,33 @@ def pandas_compatible(request): """Param for `pandas_compatible` option""" with cudf.option_context("mode.pandas_compatible", request.param): yield request.param + + +@pytest.fixture(params=[True, False]) +def infer_objects(request): + """Param for `infer_objects` argument""" + return request.param + + +@pytest.fixture(params=[True, False]) +def convert_string(request): + """Param for `convert_string` argument""" + return request.param + + +@pytest.fixture(params=[True, False]) +def convert_integer(request): + """Param for `convert_integer` argument""" + return request.param + + +@pytest.fixture(params=[True, False]) +def convert_boolean(request): + """Param for `convert_boolean` argument""" + return request.param + + +@pytest.fixture(params=[True, False]) +def convert_floating(request): + """Param for `convert_floating` argument""" + return request.param diff --git a/python/cudf/cudf/tests/dask/test_serialize.py b/python/cudf/cudf/tests/dask/test_serialize.py index d714c80d4986..a34a2ec84a6b 100644 --- a/python/cudf/cudf/tests/dask/test_serialize.py +++ b/python/cudf/cudf/tests/dask/test_serialize.py @@ -389,7 +389,7 @@ def test_serialize_sliced_string(): # https://github.com/rapidsai/cudf/issues/7735 data = ["hi", "hello", None] pd_series = pd.Series(data, dtype=pd.StringDtype()) - gd_series = cudf.Series(data, dtype="str") + gd_series = cudf.Series(data, dtype=pd_series.dtype) sliced = gd_series[0:3] serialized_gd_series = gd_series.serialize() serialized_sliced = sliced.serialize() diff --git a/python/cudf/cudf/tests/dataframe/indexing/test_iloc.py b/python/cudf/cudf/tests/dataframe/indexing/test_iloc.py index 95b28194aef4..57c24180a160 100644 --- a/python/cudf/cudf/tests/dataframe/indexing/test_iloc.py +++ b/python/cudf/cudf/tests/dataframe/indexing/test_iloc.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -376,16 +376,19 @@ def test_iloc_single_row_with_nullable_column(): assert_eq(pdf.iloc[0], df.iloc[0]) +@pytest.mark.xfail( + raises=NotImplementedError, + reason="cuDF needs to implement boolean mask along columns", +) def test_boolean_mask_columns_iloc_series(): df = pd.DataFrame(np.zeros((3, 3))) cdf = cudf.from_pandas(df) mask = pd.Series([True, False, True], dtype=bool) - with pytest.raises(NotImplementedError): - df.iloc[:, mask] + df.iloc[:, mask] = 1 - with pytest.raises(NotImplementedError): - cdf.iloc[:, mask] + cdf.iloc[:, mask] = 1 + assert_eq(df, cdf) def test_iloc_column_boolean_mask_issue_13265(): diff --git a/python/cudf/cudf/tests/dataframe/indexing/test_loc.py b/python/cudf/cudf/tests/dataframe/indexing/test_loc.py index 149e699e2681..81de238c7d49 100644 --- a/python/cudf/cudf/tests/dataframe/indexing/test_loc.py +++ b/python/cudf/cudf/tests/dataframe/indexing/test_loc.py @@ -10,11 +10,6 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_210, - PANDAS_VERSION, -) from cudf.testing import assert_eq from cudf.testing._utils import assert_exceptions_equal, expect_warning_if @@ -795,7 +790,13 @@ def test_sliced_indexing(): ) @pytest.mark.parametrize("is_dataframe", [True, False]) def test_loc_datetime_index(sli, is_dataframe): - sli = slice(pd.to_datetime(sli.start), pd.to_datetime(sli.stop)) + # Preserve None as None (not NaT) so pandas treats it as an open bound. + # pd.to_datetime(None) returns NaT, which pandas rejects as a slice + # bound on a non-monotonic datetime index. + sli = slice( + pd.to_datetime(sli.start) if sli.start is not None else None, + pd.to_datetime(sli.stop) if sli.stop is not None else None, + ) if is_dataframe is True: pd_data = pd.DataFrame( @@ -822,13 +823,7 @@ def test_loc_datetime_index(sli, is_dataframe): slice(None, "2009"), ], ) -def test_loc_datetime_index_string_slice_non_monotonic(request, sli): - request.applymarker( - pytest.mark.xfail( - condition=not PANDAS_GE_210, - reason="See https://github.com/pandas-dev/pandas/issues/53983", - ) - ) +def test_loc_datetime_index_string_slice_non_monotonic(sli): pdf = pd.DataFrame( {"a": [1, 2, 3]}, index=pd.Series(["2001", "2009", "2002"], dtype="datetime64[ns]"), @@ -900,23 +895,18 @@ def test_dataframe_loc_iloc_inplace_update_with_RHS_dataframe(): assert_eq(expected, actual) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="No warning in older versions of pandas", -) def test_dataframe_loc_inplace_update_with_invalid_RHS_df_columns(): - gdf = cudf.DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]}) + # Use float columns so both cudf and pandas can hold NaN when aligning + # RHS columns that don't match the loc selection (int64 can't hold NaN). + gdf = cudf.DataFrame({"x": [1.0, 2.0, 3.0], "y": [4.0, 5.0, 6.0]}) pdf = gdf.to_pandas() actual = gdf.loc[[0, 2], ["x", "y"]] = cudf.DataFrame( {"b": [10, 20], "y": [30, 40]}, index=cudf.Index([0, 2]) ) - with pytest.warns(FutureWarning): - # Seems to be a false warning from pandas, - # but nevertheless catching it. - expected = pdf.loc[[0, 2], ["x", "y"]] = pd.DataFrame( - {"b": [10, 20], "y": [30, 40]}, index=pd.Index([0, 2]) - ) + expected = pdf.loc[[0, 2], ["x", "y"]] = pd.DataFrame( + {"b": [10, 20], "y": [30, 40]}, index=pd.Index([0, 2]) + ) assert_eq(expected, actual) diff --git a/python/cudf/cudf/tests/dataframe/indexing/test_setitem.py b/python/cudf/cudf/tests/dataframe/indexing/test_setitem.py index 86873af687f1..103d3817c4e7 100644 --- a/python/cudf/cudf/tests/dataframe/indexing/test_setitem.py +++ b/python/cudf/cudf/tests/dataframe/indexing/test_setitem.py @@ -9,10 +9,6 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.testing import assert_eq from cudf.testing._utils import assert_exceptions_equal, expect_warning_if @@ -108,8 +104,7 @@ def test_series_setitem_index(): def test_setitem_dataframe_series_inplace(index): gdf = cudf.DataFrame({"a": [1, 2, 3]}, index=index) expected = gdf.copy() - with cudf.option_context("copy_on_write", True): - gdf["a"].replace(1, 500, inplace=True) + gdf["a"].replace(1, 500, inplace=True) assert_eq(expected, gdf) @@ -191,33 +186,28 @@ def test_string_set_scalar(scalar): def test_dataframe_cow_slice_setitem(): - with cudf.option_context("copy_on_write", True): - df = cudf.DataFrame( - {"a": [10, 11, 12, 13, 14], "b": [20, 30, 40, 50, 60]} - ) - slice_df = df[1:4] + df = cudf.DataFrame({"a": [10, 11, 12, 13, 14], "b": [20, 30, 40, 50, 60]}) + slice_df = df[1:4] - assert_eq( - slice_df, - cudf.DataFrame( - {"a": [11, 12, 13], "b": [30, 40, 50]}, index=[1, 2, 3] - ), - ) + assert_eq( + slice_df, + cudf.DataFrame( + {"a": [11, 12, 13], "b": [30, 40, 50]}, index=[1, 2, 3] + ), + ) - slice_df["a"][2] = 1111 + slice_df["a"][2] = 1111 - assert_eq( - slice_df, - cudf.DataFrame( - {"a": [11, 1111, 13], "b": [30, 40, 50]}, index=[1, 2, 3] - ), - ) - assert_eq( - df, - cudf.DataFrame( - {"a": [10, 11, 12, 13, 14], "b": [20, 30, 40, 50, 60]} - ), - ) + assert_eq( + slice_df, + cudf.DataFrame( + {"a": [11, 1111, 13], "b": [30, 40, 50]}, index=[1, 2, 3] + ), + ) + assert_eq( + df, + cudf.DataFrame({"a": [10, 11, 12, 13, 14], "b": [20, 30, 40, 50, 60]}), + ) def test_multiindex_row_shape(): @@ -517,6 +507,7 @@ def test_dataframe_append_to_empty(): gdf = cudf.DataFrame() gdf["a"] = [] + gdf["a"] = gdf["a"].astype("str") gdf["b"] = [1, 2, 3] assert_eq(gdf, pdf) @@ -689,15 +680,10 @@ def test_tupleize_cols_False_set(): None, ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_dataframe_assign_scalar(request, col_data, assign_val): request.applymarker( pytest.mark.xfail( - condition=PANDAS_VERSION >= PANDAS_CURRENT_SUPPORTED_VERSION - and len(col_data) == 0, + condition=len(col_data) == 0, reason="https://github.com/pandas-dev/pandas/issues/56679", ) ) @@ -710,7 +696,10 @@ def test_dataframe_assign_scalar(request, col_data, assign_val): else assign_val ) gdf["b"] = assign_val - + # Assigning None in pandas creates an object column + # which cuDF doesn't support + if assign_val is None: + pdf["b"] = pdf["b"].astype(gdf["b"].dtype) assert_eq(pdf, gdf) @@ -765,5 +754,10 @@ def test_dataframe_assign_scalar_with_scalar_cols(col_data, assign_val): else assign_val ) gdf["b"] = assign_val - + # Assigning None in pandas creates an object column + # which cuDF doesn't support + if col_data is None: + pdf["a"] = pdf["a"].astype(gdf["a"].dtype) + if assign_val is None: + pdf["b"] = pdf["b"].astype(gdf["b"].dtype) assert_eq(pdf, gdf) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_apply.py b/python/cudf/cudf/tests/dataframe/methods/test_apply.py index 46f950b5f671..b6ae38580f16 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_apply.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_apply.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import decimal import math @@ -66,7 +66,9 @@ def run_masked_udf_test(func, data, args=(), nullable=True, **kwargs): pdf = data.to_pandas(nullable=nullable) expect = pdf.apply(func, args=args, axis=1) - obtain = gdf.apply(func, args=args, axis=1) + obtain = gdf.apply(func, args=args, axis=1).to_pandas(nullable=nullable) + if "check_dtype" in kwargs and not kwargs.get("check_dtype", True): + expect = expect.astype(obtain.dtype) assert_eq(expect, obtain, **kwargs) @@ -530,7 +532,6 @@ def func(row): gdf = cudf.DataFrame({"a": [1.5, None, 3, None], "b": [4, 5, None, None]}) gdf["a"] = gdf["a"].astype(numeric_types_as_str) gdf["b"] = gdf["b"].astype(numeric_types_as_str2) - run_masked_udf_test(func, gdf, check_dtype=False) @@ -673,8 +674,8 @@ def outer_gpu(row): y = row["b"] return inner_gpu(x, y) - got = gdf.apply(outer_gpu, axis=1) - expect = pdf.apply(outer, axis=1) + got = gdf.apply(outer_gpu, axis=1).to_pandas(nullable=True) + expect = pdf.apply(outer, axis=1).astype(got.dtype) assert_eq(expect, got, check_dtype=False) @@ -691,7 +692,7 @@ def func(row): return row["a"] + row["b"] data = cudf.DataFrame(data) - run_masked_udf_test(func, data) + run_masked_udf_test(func, data, check_dtype=False) @pytest.mark.parametrize( @@ -770,4 +771,6 @@ def func(row, c, k): y = binary_op(x, k) return y - run_masked_udf_test(func, data, args=(1, 2), check_dtype=False) + run_masked_udf_test( + func, data, args=(1, 2), check_dtype=False, nullable=True + ) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_applymap.py b/python/cudf/cudf/tests/dataframe/methods/test_applymap.py deleted file mode 100644 index 8f91f55a5dc3..000000000000 --- a/python/cudf/cudf/tests/dataframe/methods/test_applymap.py +++ /dev/null @@ -1,65 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2018-2024, NVIDIA CORPORATION. -# SPDX-License-Identifier: Apache-2.0 - -import pytest - -from cudf import NA, DataFrame -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION -from cudf.testing import assert_eq - - -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in all versions of pandas", -) -@pytest.mark.parametrize( - "data", - [ - {"a": [1, 2, 3], "b": [4, 5, 6]}, - {"a": [1, 2, 3], "b": [1.0, 2.0, 3.0]}, - {"a": [1, 2, 3], "b": [True, False, True]}, - {"a": [1, NA, 2], "b": [NA, 4, NA]}, - ], -) -@pytest.mark.parametrize( - "func", - [ - lambda x: x + 1, - lambda x: x - 0.5, - lambda x: 2 if x is NA else 2 + (x + 1) / 4.1, - lambda x: 42, - ], -) -@pytest.mark.parametrize("na_action", [None, "ignore"]) -def test_applymap_dataframe(data, func, na_action, request): - request.applymarker( - pytest.mark.xfail( - PANDAS_VERSION >= PANDAS_CURRENT_SUPPORTED_VERSION - and request.node.callspec.id == "None-2-data3", - reason="https://github.com/pandas-dev/pandas/issues/57390", - ) - ) - gdf = DataFrame(data) - pdf = gdf.to_pandas(nullable=True) - - with pytest.warns(FutureWarning): - expect = pdf.applymap(func, na_action=na_action) - with pytest.warns(FutureWarning): - got = gdf.applymap(func, na_action=na_action) - - assert_eq(expect, got, check_dtype=False) - - -def test_applymap_raise_cases(): - df = DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}) - - def f(x, some_kwarg=0): - return x + some_kwarg - - with pytest.warns(FutureWarning): - with pytest.raises(NotImplementedError): - df.applymap(f, some_kwarg=1) - - with pytest.warns(FutureWarning): - with pytest.raises(ValueError): - df.applymap(f, na_action="some_invalid_option") diff --git a/python/cudf/cudf/tests/dataframe/methods/test_astype.py b/python/cudf/cudf/tests/dataframe/methods/test_astype.py index b631beb521c1..f0f4c737780a 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_astype.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_astype.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -15,26 +15,27 @@ def test_df_series_dataframe_astype_copy(copy): gdf = cudf.DataFrame({"col1": [1, 2], "col2": [3, 4]}) pdf = gdf.to_pandas() - assert_eq( - gdf.astype(dtype="float", copy=copy), - pdf.astype(dtype="float", copy=copy), - ) + result = gdf.astype(dtype="float", copy=copy) + with pytest.warns(pd.errors.Pandas4Warning): + expected = pdf.astype(dtype="float", copy=copy) + assert_eq(result, expected) assert_eq(gdf, pdf) gsr = cudf.Series([1, 2]) psr = gsr.to_pandas() - assert_eq( - gsr.astype(dtype="float", copy=copy), - psr.astype(dtype="float", copy=copy), - ) + result = gsr.astype(dtype="float", copy=copy) + with pytest.warns(pd.errors.Pandas4Warning): + expected = psr.astype(dtype="float", copy=copy) + assert_eq(result, expected) assert_eq(gsr, psr) gsr = cudf.Series([1, 2]) psr = gsr.to_pandas() actual = gsr.astype(dtype="int64", copy=copy) - expected = psr.astype(dtype="int64", copy=copy) + with pytest.warns(pd.errors.Pandas4Warning): + expected = psr.astype(dtype="int64", copy=copy) assert_eq(expected, actual) assert_eq(gsr, psr) actual[0] = 3 @@ -47,33 +48,34 @@ def test_df_series_dataframe_astype_dtype_dict(copy): gdf = cudf.DataFrame({"col1": [1, 2], "col2": [3, 4]}) pdf = gdf.to_pandas() - assert_eq( - gdf.astype(dtype={"col1": "float"}, copy=copy), - pdf.astype(dtype={"col1": "float"}, copy=copy), - ) + result = gdf.astype(dtype={"col1": "float"}, copy=copy) + with pytest.warns(pd.errors.Pandas4Warning): + expected = pdf.astype(dtype={"col1": "float"}, copy=copy) + assert_eq(result, expected) assert_eq(gdf, pdf) gsr = cudf.Series([1, 2]) psr = gsr.to_pandas() - assert_eq( - gsr.astype(dtype={None: "float"}, copy=copy), - psr.astype(dtype={None: "float"}, copy=copy), - ) + result = gsr.astype(dtype={None: "float"}, copy=copy) + with pytest.warns(pd.errors.Pandas4Warning): + expected = psr.astype(dtype={None: "float"}, copy=copy) + assert_eq(result, expected) assert_eq(gsr, psr) assert_exceptions_equal( lfunc=psr.astype, rfunc=gsr.astype, - lfunc_args_and_kwargs=([], {"dtype": {"a": "float"}, "copy": copy}), - rfunc_args_and_kwargs=([], {"dtype": {"a": "float"}, "copy": copy}), + lfunc_args_and_kwargs=([], {"dtype": {"a": "float"}}), + rfunc_args_and_kwargs=([], {"dtype": {"a": "float"}}), ) gsr = cudf.Series([1, 2]) psr = gsr.to_pandas() actual = gsr.astype({None: "int64"}, copy=copy) - expected = psr.astype({None: "int64"}, copy=copy) + with pytest.warns(pd.errors.Pandas4Warning): + expected = psr.astype({None: "int64"}, copy=copy) assert_eq(expected, actual) assert_eq(gsr, psr) @@ -279,4 +281,6 @@ def test_dataframe_astype_no_copy(copy): gdf = cudf.DataFrame({"a": [1, 2], "b": [3, 4]}) result = gdf.astype("int64", copy=copy) assert_eq(result, gdf) - assert (result is gdf) is (not copy) + # Under CoW, copy=False returns a shallow copy (distinct object) rather + # than self; identity is not guaranteed regardless of copy parameter. + assert result is not gdf diff --git a/python/cudf/cudf/tests/dataframe/methods/test_convert_dtypes.py b/python/cudf/cudf/tests/dataframe/methods/test_convert_dtypes.py index fa001ca18d44..7cedf25a25fc 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_convert_dtypes.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_convert_dtypes.py @@ -1,5 +1,6 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 +import numpy as np import pandas as pd import pytest @@ -7,6 +8,18 @@ from cudf.testing import assert_eq +def _compare_to_pandas(column_specs, kwargs): + gdf = cudf.DataFrame( + {k: cudf.Series(v, dtype=d) for k, (v, d) in column_specs.items()} + ) + pdf = pd.DataFrame( + {k: pd.Series(v, dtype=d) for k, (v, d) in column_specs.items()} + ) + got = gdf.convert_dtypes(**kwargs) + expected = pdf.convert_dtypes(**kwargs) + assert_eq(got, expected, check_dtype=True) + + def test_convert_dtypes(): data = { "a": [1, 2, 3], @@ -45,3 +58,97 @@ def test_convert_dtypes(): with pytest.raises(NotImplementedError): # category and datetime64[ns] are not nullable gdf[non_nullable_columns].convert_dtypes().to_pandas(nullable=True) + + +@pytest.mark.parametrize( + "column_specs", + [ + { + "a": ([1, 2, 3], "int32"), + "b": ([1, 2, 3], "int64"), + "c": ([1, 2, 3], "uint16"), + }, + { + "x": ([1.0, 2.0, 3.0], "float64"), + "y": ([1.5, 2.5, 3.5], "float64"), + }, + { + "s": (["a", "b", "c"], "str"), + "o": (["a", "b", "c"], "O"), + }, + { + "i": ([1, 2, 3], "int32"), + "f": ([1.5, 2.5, 3.5], "float64"), + "s": (["a", "b", "c"], "str"), + }, + ], +) +def test_convert_dtypes_dataframe_multi_column(column_specs): + _compare_to_pandas(column_specs, {}) + + +@pytest.mark.parametrize("dtype_backend", ["pyarrow", "numpy_nullable"]) +def test_convert_dtypes_dataframe_backend(dtype_backend): + column_specs = { + "i": ([1, 2, 3], "int64"), + "f": ([1.5, 2.5, 3.5], "float64"), + "s": (["a", "b", "c"], "str"), + } + _compare_to_pandas(column_specs, {"dtype_backend": dtype_backend}) + + +def test_convert_dtypes_dataframe_param_combinations( + infer_objects, + convert_string, + convert_integer, + convert_boolean, + convert_floating, +): + kwargs = { + "infer_objects": infer_objects, + "convert_string": convert_string, + "convert_integer": convert_integer, + "convert_boolean": convert_boolean, + "convert_floating": convert_floating, + } + column_specs = { + "i": ([1, 2, 3], "int32"), + "f_int": ([1.0, 2.0, 3.0], "float64"), + "f_nonint": ([1.5, 2.5, 3.5], "float64"), + "s": (["a", "b", "c"], "str"), + } + _compare_to_pandas(column_specs, kwargs) + + +def test_convert_dtypes_dataframe_returns_copy(): + gdf = cudf.DataFrame( + { + "a": cudf.Series([1, 2, 3], dtype="int64"), + "b": cudf.Series([1.5, 2.5, 3.5], dtype="float64"), + } + ) + original = gdf.copy(deep=True) + result = gdf.convert_dtypes() + result.loc[:, "a"] = pd.NA + result.loc[:, "b"] = pd.NA + assert_eq(gdf, original) + + +def test_convert_dtypes_dataframe_pyarrow_all_null_column(): + _compare_to_pandas( + {"a": ([None, None], "O")}, {"dtype_backend": "pyarrow"} + ) + + +def test_convert_dtypes_dataframe_float_nan_as_null_to_int64(): + _compare_to_pandas({"a": ([10.0, np.nan, 20.0], "float64")}, {}) + + +def test_convert_dtypes_pyarrow_null(): + pytest.importorskip("pyarrow") + data = {"a": [None, None]} + + expected = pd.DataFrame(data).convert_dtypes(dtype_backend="pyarrow") + result = cudf.DataFrame(data).convert_dtypes(dtype_backend="pyarrow") + + assert_eq(result.to_pandas(), expected) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_copy.py b/python/cudf/cudf/tests/dataframe/methods/test_copy.py index bfbcfee2e1ff..159b4cbf12dc 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_copy.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_copy.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 from copy import copy, deepcopy @@ -114,23 +114,6 @@ def test_deep_copy_write_in_place(): assert_neq(gdf, cdf) -# This behavior is explicitly changed by the copy-on-write feature. -@pytest.mark.no_copy_on_write -def test_shallow_copy_write_in_place(): - pdf = pd.DataFrame( - [[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["a", "b", "c"] - ) - gdf = cudf.DataFrame(pdf) - cdf = gdf.copy(deep=False) - sr = gdf["a"] - - # Write a value in-place on the shallow copy. - # This should change the copy and original. - cp.asarray(sr._column)[1] = 42 - - assert_eq(gdf, cdf) - - @pytest.mark.xfail(reason="cudf column-wise shallow copy is immutable") def test_dataframe_copy_shallow(): pdf = pd.DataFrame( diff --git a/python/cudf/cudf/tests/dataframe/methods/test_describe.py b/python/cudf/cudf/tests/dataframe/methods/test_describe.py index d0cdcc57a854..e838d5127462 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_describe.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_describe.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -149,7 +149,7 @@ def test_dataframe_describe_include_all(): ) @pytest.mark.parametrize( "include", - [None, "all", ["object"], ["int"], ["object", "int", "category"]], + [None, "all", ["str"], ["int"], ["str", "int", "category"]], ) def test_describe_misc_include(pdf, include): df = cudf.DataFrame(pdf) @@ -209,7 +209,7 @@ def test_describe_misc_include(pdf, include): ], ) @pytest.mark.parametrize( - "exclude", [None, ["object"], ["int"], ["object", "int", "category"]] + "exclude", [None, ["str"], ["int"], ["str", "int", "category"]] ) def test_describe_misc_exclude(pdf, exclude): df = cudf.DataFrame(pdf) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_diff.py b/python/cudf/cudf/tests/dataframe/methods/test_diff.py index 8ebdbc4b32be..f9665e2046eb 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_diff.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_diff.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -21,15 +21,17 @@ @pytest.mark.parametrize("periods", (-5, -1, 0, 1, 5)) def test_diff_numeric_dtypes(data, periods): gdf = cudf.DataFrame(data) - pdf = gdf.to_pandas() + # Use arrow_type=True because that is the only case where we can guarantee that the + # same NaN/null representation will be used. Without it, pandas will fall back to + # object dtype for calling shift (called internally by diff) on boolean data. + pdf = gdf.to_pandas(arrow_type=True) actual = gdf.diff(periods=periods, axis=0) expected = pdf.diff(periods=periods, axis=0) assert_eq( expected, - actual, - check_dtype=False, + actual.to_pandas(arrow_type=True), ) @@ -46,7 +48,7 @@ def test_diff_decimal_dtypes(precision, scale, dtype): np.random.default_rng(seed=42).uniform(10.5, 75.5, (10, 6)), dtype=dtype(precision=precision, scale=scale), ) - pdf = gdf.to_pandas() + pdf = gdf.to_pandas(arrow_type=True) actual = gdf.diff() expected = pdf.diff() @@ -88,10 +90,16 @@ def test_diff_many_dtypes(): pdf = pd.DataFrame( { "dates": pd.date_range("2020-01-01", "2020-01-06", freq="D"), - "bools": [True, True, True, False, True, True], - "floats": [1.0, 2.0, 3.5, np.nan, 5.0, -1.7], - "ints": [1, 2, 3, 3, 4, 5], - "nans_nulls": [np.nan, None, None, np.nan, np.nan, None], + "bools": pd.array( + [True, True, True, False, True, True], dtype="boolean" + ), + "floats": pd.array( + [1.0, 2.0, 3.5, np.nan, 5.0, -1.7], dtype="Float64" + ), + "ints": pd.array([1, 2, 3, 3, 4, 5], dtype="Int64"), + "nans_nulls": pd.array( + [np.nan, None, None, np.nan, np.nan, None], dtype="Float64" + ), } ) gdf = cudf.from_pandas(pdf) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_explode.py b/python/cudf/cudf/tests/dataframe/methods/test_explode.py index d19a6ea2dddd..4ae4e780375d 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_explode.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_explode.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -69,10 +69,11 @@ def test_explode_preserve_categorical(): ], ) def test_explode(data, labels, ignore_index, p_index, label_to_explode): - pdf = pd.DataFrame(data, index=p_index, columns=labels) + gdf = cudf.DataFrame(data, index=p_index, columns=labels) + pdf = gdf.to_pandas(arrow_type=True) gdf = cudf.from_pandas(pdf) expect = pdf.explode(label_to_explode, ignore_index) got = gdf.explode(label_to_explode, ignore_index) - assert_eq(expect, got, check_dtype=False) + assert_eq(expect, got) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_ffill_bfill.py b/python/cudf/cudf/tests/dataframe/methods/test_ffill_bfill.py index 3b681aa42ebe..4f4c7bbf533c 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_ffill_bfill.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_ffill_bfill.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -7,7 +7,6 @@ import cudf from cudf.testing import assert_eq -from cudf.testing._utils import expect_warning_if @pytest.mark.parametrize( @@ -17,14 +16,11 @@ pd.Series([1, 2, 3, None, np.nan, 5, 6, np.nan]), ], ) -@pytest.mark.parametrize("alias", ["bfill", "backfill"]) -def test_dataframe_bfill(df, alias): +def test_dataframe_bfill(df): gdf = cudf.from_pandas(df) - with expect_warning_if(alias == "backfill"): - actual = getattr(df, alias)() - with expect_warning_if(alias == "backfill"): - expected = getattr(gdf, alias)() + actual = df.bfill() + expected = gdf.bfill() assert_eq(expected, actual) @@ -35,12 +31,9 @@ def test_dataframe_bfill(df, alias): pd.Series([1, 2, 3, None, np.nan, 5, 6, np.nan]), ], ) -@pytest.mark.parametrize("alias", ["ffill", "pad"]) -def test_dataframe_ffill(df, alias): +def test_dataframe_ffill(df): gdf = cudf.from_pandas(df) - with expect_warning_if(alias == "pad"): - actual = getattr(df, alias)() - with expect_warning_if(alias == "pad"): - expected = getattr(gdf, alias)() + actual = df.ffill() + expected = gdf.ffill() assert_eq(expected, actual) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_hash_values.py b/python/cudf/cudf/tests/dataframe/methods/test_hash_values.py index ed5c01a54656..5ca7761c4bc1 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_hash_values.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_hash_values.py @@ -1,9 +1,10 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import contextlib import numpy as np +import pandas as pd import pytest import cudf @@ -47,14 +48,15 @@ def test_dataframe_hash_values(method, seed): out = gdf.hash_values(method=method, seed=seed) assert isinstance(out, cudf.Series) assert len(out) == nrows + string_dtype = pd.StringDtype(na_value=np.nan) expected_dtypes = { "murmur3": np.uint32, - "md5": object, - "sha1": object, - "sha224": object, - "sha256": object, - "sha384": object, - "sha512": object, + "md5": string_dtype, + "sha1": string_dtype, + "sha224": string_dtype, + "sha256": string_dtype, + "sha384": string_dtype, + "sha512": string_dtype, "xxhash32": np.uint32, "xxhash64": np.uint64, } diff --git a/python/cudf/cudf/tests/dataframe/methods/test_info.py b/python/cudf/cudf/tests/dataframe/methods/test_info.py index 9a1d4a95c689..6f235bf751e7 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_info.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_info.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import io @@ -30,7 +30,7 @@ def test_dataframe_info_basic(): 8 8 10 non-null float64 9 9 10 non-null float64 dtypes: float64(10) - memory usage: 859.0+ bytes + memory usage: 903.0 bytes """ ) rng = np.random.default_rng(seed=0) @@ -54,9 +54,9 @@ def test_dataframe_info_verbose_mem_usage(): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 a 3 non-null int64 - 1 b 3 non-null object - dtypes: int64(1), object(1) - memory usage: 56.0+ bytes + 1 b 3 non-null str + dtypes: int64(1), str(1) + memory usage: 72.0 bytes """ ) cudf.from_pandas(df).info(buf=buffer, verbose=True) @@ -71,8 +71,8 @@ def test_dataframe_info_verbose_mem_usage(): RangeIndex: 3 entries, 0 to 2 Columns: 2 entries, a to b - dtypes: int64(1), object(1) - memory usage: 56.0+ bytes + dtypes: int64(1), str(1) + memory usage: 72.0 bytes """ ) cudf.from_pandas(df).info(buf=buffer, verbose=False) @@ -94,9 +94,9 @@ def test_dataframe_info_verbose_mem_usage(): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 a 3 non-null int64 - 1 b 3 non-null object - dtypes: int64(1), object(1) - memory usage: 91.0 bytes + 1 b 3 non-null str + dtypes: int64(1), str(1) + memory usage: 123.0 bytes """ ) cudf.from_pandas(df).info(buf=buffer, verbose=True, memory_usage="deep") @@ -125,9 +125,9 @@ def test_dataframe_info_verbose_mem_usage(): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 int_col 5 non-null int64 - 1 text_col 5 non-null object + 1 text_col 5 non-null str 2 float_col 5 non-null float64 - dtypes: float64(1), int64(1), object(1) + dtypes: float64(1), int64(1), str(1) memory usage: 130.0 bytes """ ) @@ -160,10 +160,10 @@ def test_dataframe_info_null_counts(): # Column Dtype --- ------ ----- 0 int_col int64 - 1 text_col object + 1 text_col str 2 float_col float64 - dtypes: float64(1), int64(1), object(1) - memory usage: 130.0+ bytes + dtypes: float64(1), int64(1), str(1) + memory usage: 130.0 bytes """ ) df.info(buf=buffer, verbose=True, null_counts=False) @@ -210,9 +210,9 @@ def test_dataframe_info_null_counts(): # Column Dtype --- ------ ----- 0 a int64 - 1 b object - dtypes: int64(1), object(1) - memory usage: 238.0+ bytes + 1 b str + dtypes: int64(1), str(1) + memory usage: 238.0 bytes """ ) with pd.option_context("display.max_info_rows", 2): @@ -231,9 +231,9 @@ def test_dataframe_info_null_counts(): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 a 6 non-null int64 - 1 b 6 non-null object - dtypes: int64(1), object(1) - memory usage: 238.0+ bytes + 1 b 6 non-null str + dtypes: int64(1), str(1) + memory usage: 238.0 bytes """ ) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_insert.py b/python/cudf/cudf/tests/dataframe/methods/test_insert.py index e65e4b80b1b3..bc546870b60c 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_insert.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_insert.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -60,4 +60,7 @@ def test_insert_NA(): pdf["C"] = pd.NA gdf["C"] = cudf.NA + # As of pandas 3.0, "C" becomes an object column broadcasting NA, + # cuDF doesn't support object type. + pdf["C"] = pdf["C"].astype(gdf["C"].dtype) assert_eq(pdf, gdf) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_interpolate.py b/python/cudf/cudf/tests/dataframe/methods/test_interpolate.py index c11bdb8e0c9e..87cffa2e35b6 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_interpolate.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_interpolate.py @@ -1,10 +1,9 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq from cudf.testing._utils import assert_exceptions_equal @@ -33,27 +32,9 @@ def test_interpolate_dataframe(data): assert_eq(expect, got) -@pytest.mark.parametrize( - "data,kwargs", - [ - ( - {"A": ["a", "b", "c"], "B": ["d", "e", "f"]}, - {"axis": 0, "method": "linear"}, - ), - ({"A": [1, 2, 3]}, {"method": "pad", "limit_direction": "forward"}), - ({"A": [1, 2, 3]}, {"method": "ffill", "limit_direction": "forward"}), - ({"A": [1, 2, 3]}, {"method": "bfill", "limit_direction": "backward"}), - ( - {"A": [1, 2, 3]}, - {"method": "backfill", "limit_direction": "backward"}, - ), - ], -) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Does not fail on older versions of pandas", -) -def test_interpolate_dataframe_error_cases(data, kwargs): +def test_interpolate_dataframe_error_cases(): + data = {"A": ["a", "b", "c"], "B": ["d", "e", "f"]} + kwargs = {"axis": 0, "method": "linear"} gsr = cudf.DataFrame(data) psr = gsr.to_pandas() diff --git a/python/cudf/cudf/tests/dataframe/methods/test_isna_notnull.py b/python/cudf/cudf/tests/dataframe/methods/test_isna_notnull.py index 330c33dc2493..862988b9111f 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_isna_notnull.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_isna_notnull.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -34,24 +34,12 @@ ) @pytest.mark.parametrize("api_call", ["isnull", "isna", "notna", "notnull"]) def test_dataframe_isnull_isna_and_reverse(na_data, nan_as_null, api_call): - def detect_nan(x): - # Check if the input is a float and if it is nan - return x.apply(lambda v: isinstance(v, float) and np.isnan(v)) + gdf = cudf.DataFrame(na_data, nan_as_null=nan_as_null) - df = na_data - nan_contains = df.select_dtypes(object).apply(detect_nan) - if nan_as_null is False and ( - nan_contains.any().any() and not nan_contains.all().all() - ): - with pytest.raises(cudf.errors.MixedTypeError): - cudf.DataFrame(df, nan_as_null=nan_as_null) - else: - gdf = cudf.DataFrame(df, nan_as_null=nan_as_null) + assert_eq(getattr(na_data, api_call)(), getattr(gdf, api_call)()) - assert_eq(getattr(df, api_call)(), getattr(gdf, api_call)()) - - # Test individual columns - for col in df: - assert_eq( - getattr(df[col], api_call)(), getattr(gdf[col], api_call)() - ) + # Test individual columns + for col in na_data: + assert_eq( + getattr(na_data[col], api_call)(), getattr(gdf[col], api_call)() + ) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_memory_usage.py b/python/cudf/cudf/tests/dataframe/methods/test_memory_usage.py index cc4a51a2981c..f44511a05ef8 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_memory_usage.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_memory_usage.py @@ -51,8 +51,10 @@ def test_memory_usage(deep, index, set_index): gdf = cudf.from_pandas(df) - if index and set_index is None: - # Special Case: Assume RangeIndex size == 0 + if index and isinstance(gdf.index, cudf.RangeIndex): + # cudf RangeIndex always reports 0 bytes (ignores deep). + # pandas may return non-zero (e.g. set_index on an arange column + # is optimised to a RangeIndex in pandas 3), so compare separately. with expect_warning_if(deep, UserWarning): assert gdf.index.memory_usage(deep=deep) == 0 diff --git a/python/cudf/cudf/tests/dataframe/methods/test_pct_change.py b/python/cudf/cudf/tests/dataframe/methods/test_pct_change.py index d9d9f0551b35..ec918661cde9 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_pct_change.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_pct_change.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -6,21 +6,9 @@ import pytest import cudf -from cudf.api.extensions import no_default -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.testing import assert_eq -from cudf.testing._utils import ( - expect_warning_if, -) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.parametrize( "data", [ @@ -30,18 +18,10 @@ ], ) @pytest.mark.parametrize("periods", [-5, 0, 2]) -@pytest.mark.parametrize( - "fill_method", ["ffill", "bfill", "pad", "backfill", no_default] -) -def test_dataframe_pct_change(data, periods, fill_method): +def test_dataframe_pct_change(data, periods): gdf = cudf.DataFrame(data) pdf = gdf.to_pandas() - - with expect_warning_if(fill_method is not no_default): - actual = gdf.pct_change(periods=periods, fill_method=fill_method) - with expect_warning_if( - fill_method is not no_default or pdf.isna().any().any() - ): - expected = pdf.pct_change(periods=periods, fill_method=fill_method) + actual = gdf.pct_change(periods=periods) + expected = pdf.pct_change(periods=periods) assert_eq(expected, actual) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_reductions.py b/python/cudf/cudf/tests/dataframe/methods/test_reductions.py index 9bdf3f51e607..b00d69356cc1 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_reductions.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_reductions.py @@ -6,7 +6,6 @@ import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq from cudf.testing._utils import expect_warning_if @@ -133,25 +132,19 @@ def test_any_all_axis_none(data, op): assert expected == actual -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Warning not given on older versions of pandas", -) -def test_reductions_axis_none_warning(request, reduction_methods): +def test_reductions_axis_none(request, reduction_methods): if reduction_methods == "quantile": pytest.skip(f"pandas {reduction_methods} doesn't support axis=None") + if reduction_methods in {"std", "var"}: + request.applymarker( + pytest.mark.xfail( + reason=f"cuDF result incorrect for {reduction_methods}" + ) + ) df = cudf.DataFrame({"a": [1, 2, 3], "b": [10, 2, 3]}) pdf = df.to_pandas() - with expect_warning_if( - reduction_methods in {"sum", "product", "std", "var"}, - FutureWarning, - ): - actual = getattr(df, reduction_methods)(axis=None) - with expect_warning_if( - reduction_methods in {"sum", "product", "std", "var"}, - FutureWarning, - ): - expected = getattr(pdf, reduction_methods)(axis=None) + actual = getattr(df, reduction_methods)(axis=None) + expected = getattr(pdf, reduction_methods)(axis=None) assert_eq(expected, actual, check_dtype=False) @@ -345,7 +338,7 @@ def test_dataframe_reductions(request, data, axis, func, skipna): RuntimeWarning, ): got = getattr(gdf, func)(axis=axis, skipna=skipna, **kwargs) - assert_eq(got, expect, check_dtype=False) + assert_eq(got, expect) @pytest.mark.parametrize( diff --git a/python/cudf/cudf/tests/dataframe/methods/test_reindex.py b/python/cudf/cudf/tests/dataframe/methods/test_reindex.py index ef132a559432..27e2530798a3 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_reindex.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_reindex.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -96,11 +96,9 @@ def test_dataframe_reindex_change_dtype(copy): pdf = gdf.to_pandas() # Validate reindexes both labels and column names when # index=index_labels and columns=column_labels - assert_eq( - pdf.reindex(index=index, columns=columns, copy=True), - gdf.reindex(index=index, columns=columns, copy=copy), - check_freq=False, - ) + expected = pdf.reindex(index=index, columns=columns) + result = gdf.reindex(index=index, columns=columns, copy=copy) + assert_eq(result, expected, check_freq=False) @pytest.mark.parametrize("copy", [True, False]) @@ -108,12 +106,10 @@ def test_series_categorical_reindex(copy): index = [-3, 0, 3, 0, -2, 1, 3, 4, 6] gdf = cudf.datasets.randomdata(nrows=6, dtypes={"a": "category"}) pdf = gdf.to_pandas() - assert_eq(pdf["a"].reindex(copy=True), gdf["a"].reindex(copy=copy)) + assert_eq(pdf["a"].reindex(), gdf["a"].reindex(copy=copy)) + assert_eq(pdf["a"].reindex(index), gdf["a"].reindex(index, copy=copy)) assert_eq( - pdf["a"].reindex(index, copy=True), gdf["a"].reindex(index, copy=copy) - ) - assert_eq( - pdf["a"].reindex(index=index, copy=True), + pdf["a"].reindex(index=index), gdf["a"].reindex(index=index, copy=copy), ) @@ -123,12 +119,10 @@ def test_series_float_reindex(copy): index = [-3, 0, 3, 0, -2, 1, 3, 4, 6] gdf = cudf.datasets.randomdata(nrows=6, dtypes={"c": float}) pdf = gdf.to_pandas() - assert_eq(pdf["c"].reindex(copy=True), gdf["c"].reindex(copy=copy)) - assert_eq( - pdf["c"].reindex(index, copy=True), gdf["c"].reindex(index, copy=copy) - ) + assert_eq(pdf["c"].reindex(), gdf["c"].reindex(copy=copy)) + assert_eq(pdf["c"].reindex(index), gdf["c"].reindex(index, copy=copy)) assert_eq( - pdf["c"].reindex(index=index, copy=True), + pdf["c"].reindex(index=index), gdf["c"].reindex(index=index, copy=copy), ) @@ -138,12 +132,10 @@ def test_series_string_reindex(copy): index = [-3, 0, 3, 0, -2, 1, 3, 4, 6] gdf = cudf.datasets.randomdata(nrows=6, dtypes={"d": str}) pdf = gdf.to_pandas() - assert_eq(pdf["d"].reindex(copy=True), gdf["d"].reindex(copy=copy)) - assert_eq( - pdf["d"].reindex(index, copy=True), gdf["d"].reindex(index, copy=copy) - ) + assert_eq(pdf["d"].reindex(), gdf["d"].reindex(copy=copy)) + assert_eq(pdf["d"].reindex(index), gdf["d"].reindex(index, copy=copy)) assert_eq( - pdf["d"].reindex(index=index, copy=True), + pdf["d"].reindex(index=index), gdf["d"].reindex(index=index, copy=copy), ) @@ -159,10 +151,10 @@ def test_reindex_multiindex_col_to_multiindex(names, klass): gdf = cudf.from_pandas(df) midx = klass.from_tuples([("A", "one"), ("A", "three")], names=names) result = gdf.reindex(columns=midx) - expected = cudf.DataFrame([[1, None]], columns=midx) - # (pandas2.0): check_dtype=False won't be needed - # as None col will return object instead of float - assert_eq(result, expected, check_dtype=False) + expected = gdf.to_pandas().reindex( + columns=midx.to_pandas() if isinstance(midx, cudf.MultiIndex) else midx + ) + assert_eq(result, expected) @pytest.mark.parametrize("names", [None, ["a", "b"]]) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_replace.py b/python/cudf/cudf/tests/dataframe/methods/test_replace.py index 384c1ef21d43..f69445469497 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_replace.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_replace.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -6,21 +6,12 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.testing import assert_eq from cudf.testing._utils import ( assert_exceptions_equal, - expect_warning_if, ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning introduced in pandas-2.2.0", -) @pytest.mark.parametrize( "data, dtype", [ @@ -86,7 +77,7 @@ ), ], ) -def test_dataframe_replace(data, dtype, to_replace, value): +def test_dataframe_replace(request, data, dtype, to_replace, value): gdf = cudf.DataFrame(data, dtype=dtype) pdf = gdf.to_pandas() @@ -102,21 +93,33 @@ def test_dataframe_replace(data, dtype, to_replace, value): else: gd_to_replace = to_replace - can_warn = ( + categories_missing = ( isinstance(gdf["a"].dtype, cudf.CategoricalDtype) and isinstance(to_replace, str) and to_replace == "two" and isinstance(value, str) and value == "three" ) - with expect_warning_if(can_warn): - if pd_value is None: - expected = pdf.replace(to_replace=pd_to_replace) - else: - expected = pdf.replace(to_replace=pd_to_replace, value=pd_value) - with expect_warning_if(can_warn): - actual = gdf.replace(to_replace=gd_to_replace, value=gd_value) - + request.applymarker( + pytest.mark.xfail( + categories_missing, + reason="cuDF result missing 'two' in dtype.categories", + ) + ) + if pd_value is None: + expected = pdf.replace(to_replace=pd_to_replace) + else: + expected = pdf.replace(to_replace=pd_to_replace, value=pd_value) + actual = gdf.replace(to_replace=gd_to_replace, value=gd_value) + if isinstance(value, list) and value == ["_", None]: + # "foo" already contained strings with NaNs, replacing with None + # results in object dtype which cuDF doesn't support + if "c" in data: + expected["c"] = expected["c"].astype(actual["c"].dtype) + elif "col two" in data: + expected["col two"] = expected["col two"].astype( + actual["col two"].dtype + ) expected_sorted = expected.sort_values(by=list(expected.columns), axis=0) actual_sorted = actual.sort_values(by=list(actual.columns), axis=0) @@ -170,4 +173,11 @@ def test_replace_multiple_rows(datadir): pdf.replace([np.inf, -np.inf], np.nan, inplace=True) gdf.replace([np.inf, -np.inf], np.nan, inplace=True) + # pandas 3 reads nullable parquet columns as Float64; cast to float64 to + # match cudf's representation before comparing. + # TODO: Remove this cast after https://github.com/rapidsai/cudf/issues/22018 is resolved. + pdf = pdf.astype( + {c: "float64" for c, d in pdf.dtypes.items() if d == pd.Float64Dtype()} + ) + assert_eq(pdf, gdf, check_dtype=False) diff --git a/python/cudf/cudf/tests/dataframe/methods/test_select_dtypes.py b/python/cudf/cudf/tests/dataframe/methods/test_select_dtypes.py index f465c5f2190f..337077f9b258 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_select_dtypes.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_select_dtypes.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -21,8 +21,8 @@ def test_select_dtype(): gdf.select_dtypes(include=["float64"]), ) assert_eq( - pdf.select_dtypes(include=["object", "int", "category"]), - gdf.select_dtypes(include=["object", "int", "category"]), + pdf.select_dtypes(include=["str", "int", "category"]), + gdf.select_dtypes(include=["str", "int", "category"]), ) assert_eq( @@ -72,12 +72,12 @@ def test_select_dtype(): ) pdf = gdf.to_pandas() assert_eq( - pdf.select_dtypes(include=["object", "int", "category"]), - gdf.select_dtypes(include=["object", "int", "category"]), + pdf.select_dtypes(include=["str", "int", "category"]), + gdf.select_dtypes(include=["str", "int", "category"]), ) assert_eq( - pdf.select_dtypes(include=["object"], exclude=["category"]), - gdf.select_dtypes(include=["object"], exclude=["category"]), + pdf.select_dtypes(include=["str"], exclude=["category"]), + gdf.select_dtypes(include=["str"], exclude=["category"]), ) gdf = cudf.DataFrame({"a": range(10), "b": range(10, 20)}) @@ -91,8 +91,8 @@ def test_select_dtype(): gdf.select_dtypes(include=["float"]), ) assert_eq( - pdf.select_dtypes(include=["object"]), - gdf.select_dtypes(include=["object"]), + pdf.select_dtypes(include=["str"]), + gdf.select_dtypes(include=["str"]), ) assert_eq( pdf.select_dtypes(include=["int"]), gdf.select_dtypes(include=["int"]) @@ -102,12 +102,12 @@ def test_select_dtype(): gdf.select_dtypes(exclude=["float"]), ) assert_eq( - pdf.select_dtypes(exclude=["object"]), - gdf.select_dtypes(exclude=["object"]), + pdf.select_dtypes(exclude=["str"]), + gdf.select_dtypes(exclude=["str"]), ) assert_eq( - pdf.select_dtypes(include=["int"], exclude=["object"]), - gdf.select_dtypes(include=["int"], exclude=["object"]), + pdf.select_dtypes(include=["int"], exclude=["str"]), + gdf.select_dtypes(include=["int"], exclude=["str"]), ) assert_exceptions_equal( @@ -120,12 +120,12 @@ def test_select_dtype(): ) pdf = gdf.to_pandas() assert_eq( - pdf.select_dtypes(exclude=["object"]), - gdf.select_dtypes(exclude=["object"]), + pdf.select_dtypes(exclude=["str"]), + gdf.select_dtypes(exclude=["str"]), ) assert_eq( - pdf.select_dtypes(include=["int"], exclude=["object"]), - gdf.select_dtypes(include=["int"], exclude=["object"]), + pdf.select_dtypes(include=["int"], exclude=["str"]), + gdf.select_dtypes(include=["int"], exclude=["str"]), ) gdf = cudf.DataFrame( diff --git a/python/cudf/cudf/tests/dataframe/methods/test_sort_index.py b/python/cudf/cudf/tests/dataframe/methods/test_sort_index.py index e34a11d3d6ba..3a7e5ca745ac 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_sort_index.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_sort_index.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import itertools @@ -7,11 +7,6 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_VERSION, -) from cudf.testing import assert_eq @@ -44,9 +39,6 @@ def test_dataframe_empty_sort_index(): def test_dataframe_sort_index( request, index, axis, ascending, inplace, ignore_index, na_position ): - if not PANDAS_GE_220 and axis in (1, "columns") and ignore_index: - pytest.skip(reason="Bug fixed in pandas-2.2") - pdf = pd.DataFrame( {"b": [1, 3, 2], "a": [1, 4, 3], "c": [4, 1, 5]}, index=index, @@ -67,11 +59,12 @@ def test_dataframe_sort_index( inplace=inplace, na_position=na_position, ) - + # As of pandas 3.0, pandas sometimes returns a RangeIndex + # instead of an Index[int64] if inplace is True: - assert_eq(pdf, gdf, check_index_type=True) + assert_eq(pdf, gdf) else: - assert_eq(expected, got, check_index_type=True) + assert_eq(expected, got) @pytest.mark.parametrize("axis", [0, 1, "index", "columns"]) @@ -92,22 +85,9 @@ def test_dataframe_sort_index( ], ) @pytest.mark.parametrize("na_position", ["first", "last"]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_dataframe_mulitindex_sort_index( request, axis, level, ascending, inplace, ignore_index, na_position ): - request.applymarker( - pytest.mark.xfail( - condition=axis in (1, "columns") - and level is None - and not ascending - and ignore_index, - reason="https://github.com/pandas-dev/pandas/issues/57293", - ) - ) pdf = pd.DataFrame( { "b": [1.0, 3.0, np.nan], diff --git a/python/cudf/cudf/tests/dataframe/methods/test_to_pandas.py b/python/cudf/cudf/tests/dataframe/methods/test_to_pandas.py index f00e326f99fb..641afba3db14 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_to_pandas.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_to_pandas.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import datetime import decimal @@ -190,7 +190,6 @@ def test_dataframe_to_pandas_arrow_type_nullable_raises(scalar): None, "rapids ai", ], - dtype="object", ), "c": cudf.Series( [0.1, None, 0.2, None, 3, 4, 1000, None], @@ -215,7 +214,7 @@ def test_dataframe_to_pandas_arrow_type_nullable_raises(scalar): None, "rapids ai", ], - dtype=pd.StringDtype(), + dtype=pd.StringDtype(na_value=np.nan), ), "c": pd.Series( [0.1, None, 0.2, None, 3, 4, 1000, None], diff --git a/python/cudf/cudf/tests/dataframe/methods/test_where.py b/python/cudf/cudf/tests/dataframe/methods/test_where.py index cfb434fe2582..8b77a1b6c912 100644 --- a/python/cudf/cudf/tests/dataframe/methods/test_where.py +++ b/python/cudf/cudf/tests/dataframe/methods/test_where.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import cupy as cp @@ -27,7 +27,7 @@ def test_dataframe_with_nulls_where_with_scalars(fill_value): assert_eq(expect, got) -def test_dataframe_with_different_types(): +def test_dataframe_with_different_types(request): # Testing for int and float pdf = pd.DataFrame( {"A": [111, 22, 31, 410, 56], "B": [-10.12, 121.2, 45.7, 98.4, 87.6]} @@ -39,13 +39,17 @@ def test_dataframe_with_different_types(): assert_eq(expect, got) # Testing for string + request.applymarker( + pytest.mark.xfail( + reason="https://github.com/pandas-dev/pandas/issues/63842" + ) + ) pdf = pd.DataFrame({"A": ["a", "bc", "cde", "fghi"]}) gdf = cudf.from_pandas(pdf) pdf_mask = pd.DataFrame({"A": [True, False, True, False]}) gdf_mask = cudf.from_pandas(pdf_mask) expect = pdf.where(pdf_mask, ["cudf"]) got = gdf.where(gdf_mask, ["cudf"]) - assert_eq(expect, got) # Testing for categoriacal diff --git a/python/cudf/cudf/tests/dataframe/test_attributes.py b/python/cudf/cudf/tests/dataframe/test_attributes.py index fb554849f4e1..67ccd3ecc13c 100644 --- a/python/cudf/cudf/tests/dataframe/test_attributes.py +++ b/python/cudf/cudf/tests/dataframe/test_attributes.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import decimal @@ -213,24 +213,7 @@ def test_dataframe_contains(name, contains, other_names): assert_eq(gdf, pdf) - if contains is cudf.NA or name is cudf.NA: - expectation = contains is cudf.NA and name is cudf.NA - assert (contains in pdf) == expectation - assert (contains in gdf) == expectation - elif gdf.columns.dtype.kind == "f": - # In some cases, the columns are converted to an Index[float] based on - # the other column names. That casts name values from None to np.nan. - expectation = contains is np.nan and (name is None or name is np.nan) - assert (contains in pdf) == expectation - assert (contains in gdf) == expectation - else: - expectation = contains == name or ( - contains is np.nan and name is np.nan - ) - assert (contains in pdf) == expectation - assert (contains in gdf) == expectation - - assert (contains in pdf) == (contains in gdf) + assert (contains in gdf) == (contains in pdf) @pytest.mark.parametrize( diff --git a/python/cudf/cudf/tests/dataframe/test_binops.py b/python/cudf/cudf/tests/dataframe/test_binops.py index e46f3a8fd773..cf28c61bbc7d 100644 --- a/python/cudf/cudf/tests/dataframe/test_binops.py +++ b/python/cudf/cudf/tests/dataframe/test_binops.py @@ -8,7 +8,7 @@ import cudf from cudf.testing import assert_eq -from cudf.testing._utils import assert_exceptions_equal, expect_warning_if +from cudf.testing._utils import assert_exceptions_equal @pytest.mark.parametrize( @@ -34,6 +34,9 @@ def test_dataframe_series_dot(): actual = gser @ gser assert_eq(expected, actual) + # 1-D dot/matmul on Series produces a 0-D scalar; cudf must return a + # numpy scalar (e.g. ``np.int64``) to match pandas, not a Python int. + assert type(actual) is type(expected) pdf = pd.DataFrame([[1, 2], [3, 4]], columns=list("ab")) gdf = cudf.from_pandas(pdf) @@ -382,12 +385,12 @@ def test_df_sr_binop(psr, colnames, binary_op): data = [[3.0, 2.0, 5.0], [3.0, None, 5.0], [6.0, 7.0, np.nan]] data = dict(zip(colnames, data, strict=True)) - gsr = cudf.Series(psr).astype("float64") + gsr = cudf.Series(psr).astype("Float64") - gdf = cudf.DataFrame(data) - pdf = gdf.to_pandas(nullable=True) + gdf = cudf.DataFrame(data).astype("Float64") + pdf = gdf.to_pandas() - psr = gsr.to_pandas(nullable=True) + psr = gsr.to_pandas() try: expect = binary_op(pdf, psr) @@ -399,12 +402,12 @@ def test_df_sr_binop(psr, colnames, binary_op): with pytest.raises(ValueError): binary_op(gsr, gdf) else: - got = binary_op(gdf, gsr).to_pandas(nullable=True) - assert_eq(expect, got, check_dtype=False, check_like=True) + got = binary_op(gdf, gsr) + assert_eq(expect, got) expect = binary_op(psr, pdf) - got = binary_op(gsr, gdf).to_pandas(nullable=True) - assert_eq(expect, got, check_dtype=False, check_like=True) + got = binary_op(gsr, gdf) + assert_eq(expect, got) @pytest.mark.parametrize( @@ -437,19 +440,7 @@ def test_df_sr_binop_col_order(op): gsr = cudf.Series([1, 2, 3, 4, 5], index=["a", "b", "d", "0", "12"]) psr = gsr.to_pandas() - with expect_warning_if( - op - in { - operator.eq, - operator.lt, - operator.le, - operator.gt, - operator.ge, - operator.ne, - }, - FutureWarning, - ): - expect = op(pdf, psr).astype("float") + expect = op(pdf, psr).astype("float") out = op(gdf, gsr).astype("float") got = out[expect.columns] @@ -634,16 +625,19 @@ def gen_df(): @pytest.mark.parametrize("data", [None, [-9, 7], [12, 18]]) @pytest.mark.parametrize("scalar", [1, 3, 12, np.nan]) def test_empty_column(binary_op, data, scalar): - gdf = cudf.DataFrame(columns=["a", "b"]) + pdf = pd.DataFrame(columns=["a", "b"]) if data is not None: - gdf["a"] = data - - pdf = gdf.to_pandas() + pdf["a"] = data + gdf = cudf.DataFrame(pdf) got = binary_op(gdf, scalar) expected = binary_op(pdf, scalar) - assert_eq(expected, got) + if data is not None: + expected = expected.fillna(None) + # pandas can still hold an all NA columns with object dtype, + # cuDF cannot, and uses StringDtype instead. + assert_eq(expected, got, check_dtype=False) @pytest.mark.parametrize( diff --git a/python/cudf/cudf/tests/dataframe/test_constructors.py b/python/cudf/cudf/tests/dataframe/test_constructors.py index 5b904d2b111e..d65da2fd14df 100644 --- a/python/cudf/cudf/tests/dataframe/test_constructors.py +++ b/python/cudf/cudf/tests/dataframe/test_constructors.py @@ -216,14 +216,10 @@ def test_arrow_handle_no_index_name(): assert_eq(expect, got) -def test_pandas_non_contiguious(): - rng = np.random.default_rng(seed=0) - arr1 = rng.random(size=(5000, 10)) - assert arr1.flags["C_CONTIGUOUS"] is True +@pytest.mark.parametrize("order", ["C", "F"]) +def test_pandas_non_contiguious(order): + arr1 = np.ones((5, 5), order=order) df = pd.DataFrame(arr1) - for col in df.columns: - assert df[col].values.flags["C_CONTIGUOUS"] is False - gdf = cudf.DataFrame(df) assert_eq(gdf.to_pandas(), df) @@ -243,7 +239,6 @@ def test_from_records(numeric_types_as_str): assert_eq(df, gdf) -@pytest.mark.parametrize("columns", [None, ["first", "second", "third"]]) @pytest.mark.parametrize( "index", [ @@ -256,17 +251,30 @@ def test_from_records(numeric_types_as_str): ["abc", "xyz"], ], ) -def test_from_records_index(columns, index): +def test_from_records_index(index): rec_ary = np.array( [("Rex", 9, 81.0), ("Fido", 3, 27.0)], dtype=[("name", "U10"), ("age", "i4"), ("weight", "f4")], ) - gdf = cudf.DataFrame.from_records(rec_ary, columns=columns, index=index) - df = pd.DataFrame.from_records(rec_ary, columns=columns, index=index) + gdf = cudf.DataFrame.from_records(rec_ary, index=index) + df = pd.DataFrame.from_records(rec_ary, index=index) assert isinstance(gdf, cudf.DataFrame) assert_eq(df, gdf) +def test_from_records_index_invalid_columns_raises(): + rec_ary = np.array( + [("Rex", 9, 81.0), ("Fido", 3, 27.0)], + dtype=[("name", "U10"), ("age", "i4"), ("weight", "f4")], + ) + index = None + columns = ["first", "second", "third"] + with pytest.raises(ValueError): + cudf.DataFrame.from_records(rec_ary, columns=columns, index=index) + with pytest.raises(ValueError): + pd.DataFrame.from_records(rec_ary, columns=columns, index=index) + + def test_dataframe_construction_from_cp_arrays(): h_ary = np.array([[1, 2, 3], [4, 5, 6]], np.int32) d_ary = cp.asarray(h_ary) @@ -294,13 +302,20 @@ def test_dataframe_construction_from_cp_arrays(): df = pd.DataFrame(h_ary) df = df.set_index(keys=0, drop=False) assert isinstance(gdf, cudf.DataFrame) - + assert gdf.index.dtype == np.dtype("int32") + # pandas retuns a RangeIndex + assert not isinstance(gdf.index, cudf.RangeIndex) + gdf.index = gdf.index.astype(np.int64) assert_eq(df, gdf) gdf = cudf.DataFrame(d_ary) gdf = gdf.set_index(keys=1, drop=False) df = pd.DataFrame(h_ary) df = df.set_index(keys=1, drop=False) + assert gdf.index.dtype == np.dtype("int32") + # pandas retuns a RangeIndex + assert not isinstance(gdf.index, cudf.RangeIndex) + gdf.index = gdf.index.astype(np.int64) assert isinstance(gdf, cudf.DataFrame) assert_eq(df, gdf) @@ -453,12 +468,11 @@ def test_dataframe_constructor_nan_as_null(data, nan_as_null): def test_dataframe_init_from_series(data, columns, index): expected = pd.DataFrame(data, columns=columns, index=index) actual = cudf.DataFrame(data, columns=columns, index=index) - - assert_eq( - expected, - actual, - check_index_type=len(expected) != 0, - ) + if columns == ["abc", "b"]: + # In pandas, new columns are object types with NaN + # which cuDF doesn't support + expected["b"] = expected["b"].astype(actual["b"].dtype) + assert_eq(expected, actual) @pytest.mark.parametrize( @@ -550,9 +564,16 @@ def test_dataframe_dict_like_with_columns(columns, index): data = {"a": [1, 2, 3], "b": [4, 5, 6], "c": [7, 8, 9]} expect = pd.DataFrame(data, columns=columns, index=index) actual = cudf.DataFrame(data, columns=columns, index=index) - if index is None and len(columns) == 0: - # We make an empty range index, pandas makes an empty index - expect = expect.reset_index(drop=True) + if isinstance(columns, list): + if columns == []: + # As of pandas 3.0, empty columns are returned as Index[object] + # which cuDF doesn't support + expect.columns = expect.columns.astype(actual.columns.dtype) + elif columns == ["a", "d", "b", "e", "c"]: + # In pandas, new columns are object types with NaN + # which cuDF doesn't support + expect["d"] = expect["d"].astype(actual["d"].dtype) + expect["e"] = expect["e"].astype(actual["e"].dtype) assert_eq(expect, actual) @@ -642,12 +663,18 @@ def test_series_data_with_name_with_columns_matching(): def test_series_data_with_name_with_columns_not_matching(): gdf = cudf.DataFrame(cudf.Series([1], name=2), columns=[1]) pdf = pd.DataFrame(pd.Series([1], name=2), columns=[1]) + # As of pandas 3.0, pandas returns object for empty columns + # which cuDF doesn't support + pdf = gdf.astype(gdf.iloc[:, 0].dtype) assert_eq(gdf, pdf) def test_series_data_with_name_with_columns_matching_align(): gdf = cudf.DataFrame(cudf.Series([1], name=2), columns=[1, 2]) pdf = pd.DataFrame(pd.Series([1], name=2), columns=[1, 2]) + # As of pandas 3.0, pandas returns object for a new broadcasted column + # which cuDF doesn't support + pdf[1] = pdf[1].astype(gdf[1].dtype) assert_eq(gdf, pdf) @@ -688,7 +715,9 @@ def test_create_dataframe_from_list_like(data): def test_create_dataframe_column(): pdf = pd.DataFrame(columns=["a", "b", "c"], index=["A", "Z", "X"]) gdf = cudf.DataFrame(columns=["a", "b", "c"], index=["A", "Z", "X"]) - + # As of pandas 3.0, pandas returns object for broadcasted columns + # which cuDF doesn't support + pdf = gdf.astype(gdf.iloc[:, 0].dtype) assert_eq(pdf, gdf) pdf = pd.DataFrame( @@ -701,7 +730,9 @@ def test_create_dataframe_column(): columns=["a", "b", "c"], index=["A", "Z", "X"], ) - + # As of pandas 3.0, pandas returns object for broadcasted columns + # which cuDF doesn't support + pdf["c"] = pdf["c"].astype(gdf["c"].dtype) assert_eq(pdf, gdf) @@ -889,6 +920,10 @@ def test_construct_dict_scalar_values_raises(): def test_construct_empty_listlike_index_and_columns(columns, index): result = cudf.DataFrame([], columns=columns, index=index) expected = pd.DataFrame([], columns=columns, index=index) + if columns is not None: + # As of pandas 3.0, pandas returns object for empty columns + # which cuDF doesn't support + expected = expected.astype(result.iloc[:, 0].dtype) assert_eq(result, expected) @@ -1246,6 +1281,10 @@ def test_dataframe_from_dict_cp_np_arrays( def test_df_list_dtypes(data): expect = pd.DataFrame(data) got = cudf.DataFrame(data) + if isinstance(data, dict) and "c" in data: + # As of pandas 3.0, pandas returns object for broadcasted columns + # which cuDF doesn't support + expect["c"] = expect["c"].astype(got["c"].dtype) assert_eq(expect, got) diff --git a/python/cudf/cudf/tests/dataframe/test_np_ufuncs.py b/python/cudf/cudf/tests/dataframe/test_np_ufuncs.py index d80c3a5c1fe7..d6ed371f1719 100644 --- a/python/cudf/cudf/tests/dataframe/test_np_ufuncs.py +++ b/python/cudf/cudf/tests/dataframe/test_np_ufuncs.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import operator @@ -10,19 +10,10 @@ from packaging.version import parse import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.testing import assert_eq -from cudf.testing._utils import expect_warning_if, set_random_null_mask_inplace +from cudf.testing._utils import set_random_null_mask_inplace -# Skip matmul since it requires aligned shapes. -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.parametrize("has_nulls", [True, False]) @pytest.mark.parametrize("indexed", [True, False]) def test_ufunc_dataframe(request, numpy_ufunc, has_nulls, indexed): @@ -107,24 +98,25 @@ def test_ufunc_dataframe(request, numpy_ufunc, has_nulls, indexed): assert_eq(g, e, check_exact=False) else: if has_nulls: - with expect_warning_if( - numpy_ufunc - in ( - np.isfinite, - np.isinf, - np.isnan, - np.logical_and, - np.logical_not, - np.logical_or, - np.logical_xor, - np.signbit, - np.equal, - np.greater, - np.greater_equal, - np.less, - np.less_equal, - np.not_equal, - ) + if numpy_ufunc in ( + np.isfinite, + np.isinf, + np.isnan, + np.logical_and, + np.logical_not, + np.logical_or, + np.logical_xor, + np.signbit, + np.equal, + np.greater, + np.greater_equal, + np.less, + np.less_equal, + np.not_equal, ): + # cuDF .to_pandas for bools with nulls represents missing as None, + # should this be np.nan? + expect = expect.astype(object).mask(mask, None) + else: expect[mask] = np.nan assert_eq(got, expect, check_exact=False) diff --git a/python/cudf/cudf/tests/dataframe/test_repr.py b/python/cudf/cudf/tests/dataframe/test_repr.py index e047d458ca58..75e698dbecd1 100644 --- a/python/cudf/cudf/tests/dataframe/test_repr.py +++ b/python/cudf/cudf/tests/dataframe/test_repr.py @@ -30,8 +30,9 @@ def test_null_dataframe(ncols): gdf = cudf.DataFrame(data) pdf = gdf.to_pandas() with pd.option_context("display.max_columns", int(ncols)): - pdf_repr = repr(pdf).replace("NaN", "") - assert pdf_repr.split() == repr(gdf).split() + pdf_repr = repr(pdf).replace("NaN", "").replace("None", "") + gdf_repr = repr(gdf).replace("NaN", "") + assert pdf_repr.split() == gdf_repr.split() @pytest.mark.parametrize("nrows", [5, 10, 15]) @@ -239,39 +240,65 @@ def test_dataframe_sliced(gdf, slc, max_seq_items, max_rows): ], ) def test_dataframe_null_index_repr(df): - pdf = df - gdf = cudf.from_pandas(pdf) + with cudf.option_context("mode.pandas_compatible", True): + pdf = df + gdf = cudf.from_pandas(pdf) - expected_repr = repr(pdf).replace("NaN", "") - actual_repr = repr(gdf) + expected_repr = repr(pdf) + actual_repr = repr(gdf) assert expected_repr.split() == actual_repr.split() @pytest.mark.parametrize( - "df,expected_repr", + "df", [ - ( - lambda: cudf.DataFrame( - { - "a": cudf.Series( - [1000000, 200000, 3000000], dtype="timedelta64[s]" - ) - } - ), - textwrap.dedent( - """ - a - 0 11 days 13:46:40 - 1 2 days 07:33:20 - 2 34 days 17:20:00 - """ - ), + lambda: cudf.DataFrame( + { + "a": cudf.Series( + [1000000, 200000, 3000000], dtype="timedelta64[s]" + ) + } ), - ( - lambda: cudf.DataFrame( - { - "a": cudf.Series( + lambda: cudf.DataFrame( + { + "a": cudf.Series( + [ + 136457654, + None, + 245345345, + 223432411, + None, + 3634548734, + 23234, + ], + dtype="timedelta64[s]", + ), + "b": [10, 11, 22, 33, 44, 55, 66], + } + ), + lambda: cudf.DataFrame( + { + "a": cudf.Series( + [ + 136457654, + None, + 245345345, + 223432411, + None, + 3634548734, + 23234, + ], + dtype="timedelta64[s]", + index=["a", "b", "c", "d", "e", "f", "g"], + ) + } + ), + lambda: cudf.DataFrame( + { + "a": cudf.Series( + [1, 2, 3, 4, 5, 6, 7], + index=cudf.Index( [ 136457654, None, @@ -281,28 +308,16 @@ def test_dataframe_null_index_repr(df): 3634548734, 23234, ], - dtype="timedelta64[s]", + dtype="timedelta64[ms]", ), - "b": [10, 11, 22, 33, 44, 55, 66], - } - ), - textwrap.dedent( - """ - a b - 0 1579 days 08:54:14 10 - 1 NaT 11 - 2 2839 days 15:29:05 22 - 3 2586 days 00:33:31 33 - 4 NaT 44 - 5 42066 days 12:52:14 55 - 6 0 days 06:27:14 66 - """ - ), + ) + } ), - ( - lambda: cudf.DataFrame( - { - "a": cudf.Series( + lambda: cudf.DataFrame( + { + "a": cudf.Series( + ["a", "f", "q", "e", "w", "e", "t"], + index=cudf.Index( [ 136457654, None, @@ -312,96 +327,17 @@ def test_dataframe_null_index_repr(df): 3634548734, 23234, ], - dtype="timedelta64[s]", - index=["a", "b", "c", "d", "e", "f", "g"], - ) - } - ), - textwrap.dedent( - """ - a - a 1579 days 08:54:14 - b NaT - c 2839 days 15:29:05 - d 2586 days 00:33:31 - e NaT - f 42066 days 12:52:14 - g 0 days 06:27:14 - """ - ), - ), - ( - lambda: cudf.DataFrame( - { - "a": cudf.Series( - [1, 2, 3, 4, 5, 6, 7], - index=cudf.Index( - [ - 136457654, - None, - 245345345, - 223432411, - None, - 3634548734, - 23234, - ], - dtype="timedelta64[ms]", - ), - ) - } - ), - textwrap.dedent( - """ - a - 1 days 13:54:17.654 1 - NaT 2 - 2 days 20:09:05.345 3 - 2 days 14:03:52.411 4 - NaT 5 - 42 days 01:35:48.734 6 - 0 days 00:00:23.234 7 - """ - ), - ), - ( - lambda: cudf.DataFrame( - { - "a": cudf.Series( - ["a", "f", "q", "e", "w", "e", "t"], - index=cudf.Index( - [ - 136457654, - None, - 245345345, - 223432411, - None, - 3634548734, - 23234, - ], - dtype="timedelta64[ns]", - ), - ) - } - ), - textwrap.dedent( - """ - a - 0 days 00:00:00.136457654 a - NaT f - 0 days 00:00:00.245345345 q - 0 days 00:00:00.223432411 e - NaT w - 0 days 00:00:03.634548734 e - 0 days 00:00:00.000023234 t - """ - ), + dtype="timedelta64[ns]", + ), + ) + } ), ], ) -def test_timedelta_dataframe_repr(df, expected_repr): - actual_repr = repr(df()) - - assert actual_repr.split() == expected_repr.split() +def test_timedelta_dataframe_repr(df): + gdf = df() + pdf = gdf.to_pandas() + assert repr(gdf).split() == repr(pdf).split() def test_categorical_dataframe_with_nan_repr(): @@ -414,9 +350,9 @@ def test_categorical_dataframe_with_nan_repr(): a 0 1.0 1 2.0 - 2 NaN + 2 3 10.0 - 4 NaN + 4 5 """ ) diff --git a/python/cudf/cudf/tests/dateoffset/test_constructors.py b/python/cudf/cudf/tests/dateoffset/test_constructors.py index 32a83c236297..c479ee29ea4a 100644 --- a/python/cudf/cudf/tests/dateoffset/test_constructors.py +++ b/python/cudf/cudf/tests/dateoffset/test_constructors.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import re @@ -8,7 +8,6 @@ import pytest import cudf -from cudf.core._compat import PANDAS_GE_230 @pytest.mark.parametrize("period", [1.5, 0.5, "string", "1", "1.0"]) @@ -67,9 +66,6 @@ def test_dateoffset_instance_subclass_check(): assert not isinstance(pd.DateOffset(), cudf.DateOffset) -@pytest.mark.skipif( - not PANDAS_GE_230, reason="freqstr not supported in pandas < 2.3.0" -) @pytest.mark.parametrize("freqstr", ["ME", "YE-DEC"]) def test_dateoffset_freq_edgecases(freqstr): expect = pd.tseries.frequencies.to_offset(freqstr) diff --git a/python/cudf/cudf/tests/dtypes/test_categoricaldtype.py b/python/cudf/cudf/tests/dtypes/test_categoricaldtype.py index 71c848d6f5e7..bbacf72c6bdd 100644 --- a/python/cudf/cudf/tests/dtypes/test_categoricaldtype.py +++ b/python/cudf/cudf/tests/dtypes/test_categoricaldtype.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -32,18 +32,21 @@ def test_cdt_eq(data, categorical_ordered): "data", [None, [], ["a"], [1], [1.0], ["a", "b", "c"]] ) def test_cdf_to_pandas(data, categorical_ordered): - assert ( - pd.CategoricalDtype(data, categorical_ordered) - == cudf.CategoricalDtype( - categories=data, ordered=categorical_ordered - ).to_pandas() + cudf_cat = cudf.CategoricalDtype( + categories=data, ordered=categorical_ordered ) + if data == []: + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + data = pd.Index([], dtype=cudf_cat.categories.dtype) + pd_cat = pd.CategoricalDtype(data, categorical_ordered) + assert cudf_cat.to_pandas() == pd_cat @pytest.mark.parametrize( "categories", [ - [], [1, 2, 3], pd.Series(["a", "c", "b"], dtype="category"), pd.Series([1, 2, 3, 4, -100], dtype="category"), diff --git a/python/cudf/cudf/tests/general_functions/test_api_types.py b/python/cudf/cudf/tests/general_functions/test_api_types.py index bab28fb0d7a6..ac23a5448d38 100644 --- a/python/cudf/cudf/tests/general_functions/test_api_types.py +++ b/python/cudf/cudf/tests/general_functions/test_api_types.py @@ -8,7 +8,6 @@ import cudf from cudf.api import types -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION @pytest.mark.parametrize( @@ -213,6 +212,17 @@ def test_is_categorical_dtype(obj, expect): (cudf.Series([[1, 2], [3, 4, 5]]), False), (cudf.Series([{"a": 1, "b": 2}, {"c": 3}]), False), (cudf.Series(dtype=cudf.IntervalDtype(int)), False), + (cudf.Index([], dtype="bool"), True), + (cudf.Index([], dtype="int64"), True), + (cudf.Index([], dtype="uint8"), True), + (cudf.Index([], dtype="float64"), True), + (cudf.Index([], dtype="boolean"), True), + (cudf.Index([], dtype="Int64"), True), + (cudf.Index([], dtype="UInt16"), True), + (cudf.Index([], dtype="Float32"), True), + (cudf.Index([], dtype="str"), False), + (cudf.Index([], dtype="datetime64[s]"), False), + (cudf.Index([], dtype="timedelta64[s]"), False), ), ) def test_is_numeric_dtype(obj, expect): @@ -484,22 +494,8 @@ def test_is_integer(obj, expect): (pd.Series(dtype="int"), False), (pd.Series(dtype="float"), False), (pd.Series(dtype="complex"), False), - pytest.param( - pd.Series(dtype="str"), - True, - marks=pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="bug in previous pandas versions", - ), - ), - pytest.param( - pd.Series(dtype="unicode"), - True, - marks=pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="bug in previous pandas versions", - ), - ), + (pd.Series(dtype="str"), True), + (pd.Series(dtype="unicode"), True), (pd.Series(dtype="datetime64[s]"), False), (pd.Series(dtype="timedelta64[s]"), False), (pd.Series(dtype="category"), False), @@ -951,10 +947,6 @@ def test_is_decimal_dtype(obj, expect): assert types.is_decimal_dtype(obj) == expect -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="inconsistent warnings in older pandas versions", -) @pytest.mark.parametrize( "obj", ( diff --git a/python/cudf/cudf/tests/general_functions/test_date_range.py b/python/cudf/cudf/tests/general_functions/test_date_range.py index 09db7e6aa35f..5d6d790e3adc 100644 --- a/python/cudf/cudf/tests/general_functions/test_date_range.py +++ b/python/cudf/cudf/tests/general_functions/test_date_range.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -7,15 +7,7 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_VERSION, -) from cudf.testing import assert_eq -from cudf.testing._utils import ( - expect_warning_if, -) def test_date_range_freq_default(): @@ -97,10 +89,6 @@ def test_date_range_start_end_periods(start, end, periods): ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="https://github.com/pandas-dev/pandas/issues/46877", -) def test_date_range_end_freq_periods(end, freq, periods): if isinstance(freq, str): _gfreq = _pfreq = freq @@ -167,31 +155,20 @@ def test_date_range_raise_overflow(kwargs): "B", ], ) -def test_date_range_raise_unsupported(freqstr_unsupported): - if not PANDAS_GE_220 and freqstr_unsupported.endswith("E"): - pytest.skip(reason="YE, etc. support was added in pandas 2.2") - +@pytest.mark.parametrize("case", ["upper", "lower"]) +def test_date_range_raise_unsupported(freqstr_unsupported, case): + if case == "lower" and freqstr_unsupported == "3MS": + pytest.skip( + "3ms parsed as 3 milliseconds, generates too large of range to test" + ) + if case == "lower" and freqstr_unsupported == "B": + pytest.skip("b is deprecated in pandas 3.0 - no need to test.") s, e = "2001-01-01", "2008-01-31" - pd.date_range(start=s, end=e, freq=freqstr_unsupported) - with pytest.raises(ValueError, match="does not yet support"): - cudf.date_range(start=s, end=e, freq=freqstr_unsupported) - - # We also check that these values are unsupported when using lowercase - # characters. We exclude the value 3MS (every 3 month starts) because 3ms - # is a valid frequency for every 3 milliseconds. - if freqstr_unsupported != "3MS": - freqstr_unsupported = freqstr_unsupported.lower() - with pytest.raises(ValueError, match="does not yet support"): - with expect_warning_if( - PANDAS_GE_220 and freqstr_unsupported not in {"b", "bh"} - ): - cudf.date_range(start=s, end=e, freq=freqstr_unsupported) - - -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) + freq = getattr(freqstr_unsupported, case)() + with pytest.raises(ValueError): + cudf.date_range(start=s, end=e, freq=freq) + + def test_date_range_start_freq_periods(start, freq, periods): if isinstance(freq, str): _gfreq = _pfreq = freq @@ -219,10 +196,6 @@ def test_daterange_pandas_compatibility(): assert_eq(expected, actual) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_date_range_start_end_freq(start, end, freq): if isinstance(freq, str): _gfreq = _pfreq = freq diff --git a/python/cudf/cudf/tests/general_functions/test_factorize.py b/python/cudf/cudf/tests/general_functions/test_factorize.py index 302fddfdec34..bd0b3c41397f 100644 --- a/python/cudf/cudf/tests/general_functions/test_factorize.py +++ b/python/cudf/cudf/tests/general_functions/test_factorize.py @@ -51,3 +51,38 @@ def test_factorize_result_classes(): assert isinstance(labels, cp.ndarray) assert isinstance(cats, cp.ndarray) + + # ``np.ndarray`` input must round-trip to ``np.ndarray`` outputs to + # mirror ``pd.factorize(np.ndarray)``; previously cudf returned an + # ``Index`` for ``cats`` here. + np_arr = np.array(data) + labels, cats = cudf.factorize(np_arr) + assert isinstance(labels, np.ndarray) + assert isinstance(cats, np.ndarray) + p_labels, p_cats = pd.factorize(np_arr) + np.testing.assert_array_equal(labels, p_labels) + np.testing.assert_array_equal(cats, p_cats) + + +def test_factorize_rangeindex_preserves_class(): + # ``cudf.factorize(RangeIndex)`` must dispatch to ``RangeIndex.factorize`` + # so ``cats`` stays a ``RangeIndex`` (matching ``pd.factorize``). + ri = cudf.RangeIndex(10) + p_ri = pd.RangeIndex(10) + + for sort in [False, True]: + labels, cats = cudf.factorize(ri, sort=sort) + p_labels, p_cats = pd.factorize(p_ri, sort=sort) + assert isinstance(cats, cudf.RangeIndex) + assert_eq(cats, p_cats, exact=True) + np.testing.assert_array_equal(labels.get(), p_labels) + + # decreasing range -> sort matters + ri2 = ri[::-1] + p_ri2 = p_ri[::-1] + for sort in [False, True]: + labels, cats = cudf.factorize(ri2, sort=sort) + p_labels, p_cats = pd.factorize(p_ri2, sort=sort) + assert isinstance(cats, cudf.RangeIndex) + assert_eq(cats, p_cats, exact=True) + np.testing.assert_array_equal(labels.get(), p_labels) diff --git a/python/cudf/cudf/tests/general_functions/test_get_dummies.py b/python/cudf/cudf/tests/general_functions/test_get_dummies.py index 0c06a0a4c539..109501dd452d 100644 --- a/python/cudf/cudf/tests/general_functions/test_get_dummies.py +++ b/python/cudf/cudf/tests/general_functions/test_get_dummies.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2018-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2018-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 from string import ascii_lowercase @@ -119,9 +119,7 @@ def test_get_dummies_prefix_sep(prefix, prefix_sep): def test_get_dummies_with_nan(): - df = cudf.DataFrame( - {"a": cudf.Series([1, 2, np.nan, None], nan_as_null=False)} - ) + df = cudf.DataFrame({"a": cudf.Series([1, 2, np.nan, None])}) expected = pd.get_dummies( df.to_pandas(nullable=True), dummy_na=True, columns=["a"] @@ -167,7 +165,7 @@ def test_get_dummies_array_like( def test_get_dummies_array_like_with_nan(): - ser = cudf.Series([0.1, 2, 3, None, np.nan], nan_as_null=False) + ser = cudf.Series([0.1, 2, 3, np.nan, np.nan]) expected = pd.get_dummies( ser.to_pandas(nullable=True), dummy_na=True, prefix="a", prefix_sep="_" diff --git a/python/cudf/cudf/tests/general_functions/test_register_accessor.py b/python/cudf/cudf/tests/general_functions/test_register_accessor.py index ddd01390d89e..113098f8ac3e 100644 --- a/python/cudf/cudf/tests/general_functions/test_register_accessor.py +++ b/python/cudf/cudf/tests/general_functions/test_register_accessor.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -37,14 +37,10 @@ def test_dataframe_accessor(): def test_dataframe_accessor_identity(): - """Test for accessor identities - - An object should hold persistent reference to the same accessor - - Different objects should hold difference instances of the accessor - """ + """Test that different objects produce different accessor instances.""" gdf1 = cudf.DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]}) gdf2 = gdf1.copy() - assert gdf1.point is gdf1.point assert gdf1.point is not gdf2.point diff --git a/python/cudf/cudf/tests/general_functions/test_to_datetime.py b/python/cudf/cudf/tests/general_functions/test_to_datetime.py index d66bc0b4e77b..dc47cf1ea869 100644 --- a/python/cudf/cudf/tests/general_functions/test_to_datetime.py +++ b/python/cudf/cudf/tests/general_functions/test_to_datetime.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -11,7 +11,6 @@ from cudf.testing import assert_eq from cudf.testing._utils import ( assert_exceptions_equal, - expect_warning_if, ) @@ -90,11 +89,13 @@ def test_cudf_to_datetime(data, dayfirst): expected = pd.to_datetime(pd_data, dayfirst=dayfirst) actual = cudf.to_datetime(gd_data, dayfirst=dayfirst) - if isinstance(expected, pd.Series): assert_eq(actual, expected, check_dtype=False) else: - assert_eq(actual, expected, check_exact=False) + if expected is pd.NaT: + assert actual is expected + else: + assert_eq(actual, expected, check_exact=False) @pytest.mark.parametrize( @@ -208,7 +209,10 @@ def test_to_datetime_units(data, unit): (["10/11/2012", "01/01/2010", "07/07/2016", "02/02/2014"], "%m/%d/%Y"), (["10/11/2012", "01/01/2010", "07/07/2016", "02/02/2014"], "%d/%m/%Y"), (["10/11/2012", "01/01/2010", "07/07/2016", "02/02/2014"], None), - (["2021-04-13 12:30:04.123456789"], "%Y-%m-%d %H:%M:%S.%f"), + ( + ["2021-04-13 12:30:04.123456789"], + "%Y-%m-%d %H:%M:%S.%f", + ), (pd.Series([2015, 2020, 2021]), "%Y"), pytest.param( pd.Series(["1", "2", "1"]), @@ -229,22 +233,15 @@ def test_to_datetime_units(data, unit): (pd.Series([2015, 2020.0, 2021.2]), "%Y"), ], ) -@pytest.mark.parametrize("infer_datetime_format", [True, False]) -def test_to_datetime_format(data, format, infer_datetime_format): +def test_to_datetime_format(data, format): pd_data = data if isinstance(pd_data, (pd.Series, pd.DataFrame, pd.Index)): gd_data = cudf.from_pandas(pd_data) else: gd_data = pd_data - with expect_warning_if(True, UserWarning): - expected = pd.to_datetime( - pd_data, format=format, infer_datetime_format=infer_datetime_format - ) - with expect_warning_if(not infer_datetime_format): - actual = cudf.to_datetime( - gd_data, format=format, infer_datetime_format=infer_datetime_format - ) + expected = pd.to_datetime(pd_data, format=format) + actual = cudf.to_datetime(gd_data, format=format) if isinstance(expected, pd.Series): assert_eq(actual, expected, check_dtype=False) @@ -311,3 +308,102 @@ def test_to_datetime_errors_non_scalar_not_implemented(errors): def test_to_datetime_errors_ignore_deprecated(): with pytest.warns(FutureWarning): cudf.to_datetime("2001-01-01 00:04:45", errors="ignore") + + +@pytest.mark.parametrize( + "data", + [ + # all-None object inputs land on [s] in pandas 3 — see + # pandas-dev/pandas#55901 (NPY_FR_GENERIC fallback to "s"). + pd.Series([None, None, None]), + pd.Series([None] * 5), + pd.Series([], dtype="object"), + ], +) +def test_to_datetime_all_null_object_returns_seconds(data): + expected = pd.to_datetime(data) + actual = cudf.to_datetime(cudf.from_pandas(data)) + assert actual.dtype == expected.dtype + assert_eq(actual, expected) + + +@pytest.mark.parametrize( + "scalar", + ["1/1/2000", "2020-01-01", "2020-01-01 12:34:56"], +) +def test_to_datetime_scalar_string_returns_us(scalar): + # Scalar string parsing should land on [us] (pandas 3 default). + expected = pd.to_datetime(scalar) + actual = cudf.to_datetime(scalar) + assert actual.unit == expected.unit + assert actual == expected + + +@pytest.mark.parametrize( + "values", + [ + [19801222, 20010112, None], + [19801222, 20010112, np.nan], + [19801222, 20010112], + ], +) +def test_to_datetime_int_with_format_us(values): + # Float-with-format path (triggered when a None/nan widens int -> float) + # must land on [us] regardless of whether the format contains "%f". + expected = pd.to_datetime(values, format="%Y%m%d") + actual = cudf.to_datetime(values, format="%Y%m%d") + assert actual.dtype == expected.dtype + assert_eq(actual, expected, check_exact=False) + + +@pytest.mark.parametrize( + "df", + [ + pd.DataFrame({"year": [2015, 2016], "month": [2, 3], "day": [4, 5]}), + pd.DataFrame( + { + "year": [2015, 2016], + "month": [2, 3], + "day": [4, 5], + } + ).astype("int16"), + pd.DataFrame( + { + "year": [2015, 2016], + "month": [2, 3], + "day": [4, 5], + "hour": [6, 7], + "minute": [58, 59], + "second": [10, 11], + } + ), + ], +) +def test_to_datetime_dataframe_default_us(df): + # DataFrame -> datetime defaults to [us] in pandas 3 (was [s] in cuDF). + expected = pd.to_datetime(df) + actual = cudf.to_datetime(cudf.from_pandas(df)) + assert actual.dtype == expected.dtype + assert_eq(actual, expected) + + +def test_to_datetime_dataframe_with_ns_field_widens_to_ns(): + # When a ns field is explicitly present, the result must widen to [ns] + # (and the integer factor arithmetic must not lose the trailing ns). + df = pd.DataFrame( + { + "year": [2015, 2016], + "month": [2, 3], + "day": [4, 5], + "hour": [6, 7], + "minute": [58, 59], + "second": [10, 11], + "ms": [1, 1], + "us": [2, 2], + "ns": [3, 3], + } + ) + expected = pd.to_datetime(df) + actual = cudf.to_datetime(cudf.from_pandas(df)) + assert actual.dtype == expected.dtype + assert_eq(actual, expected) diff --git a/python/cudf/cudf/tests/general_functions/test_to_numeric.py b/python/cudf/cudf/tests/general_functions/test_to_numeric.py index c104a62ed13f..85b25ba872c4 100644 --- a/python/cudf/cudf/tests/general_functions/test_to_numeric.py +++ b/python/cudf/cudf/tests/general_functions/test_to_numeric.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -6,9 +6,7 @@ import pytest import cudf -from cudf.core._compat import PANDAS_GE_220 from cudf.testing import assert_eq -from cudf.testing._utils import expect_warning_if @pytest.fixture(params=["integer", "signed", "unsigned", "float"]) @@ -244,7 +242,7 @@ def test_to_numeric_downcast_string_large_float(data, downcast): pd.Series(["1", "a", "3", ""]), # mix of unconvertible and empty str ], ) -@pytest.mark.parametrize("errors", ["ignore", "raise", "coerce"]) +@pytest.mark.parametrize("errors", ["raise", "coerce"]) def test_to_numeric_error(data, errors): if errors == "raise": with pytest.raises( @@ -252,10 +250,8 @@ def test_to_numeric_error(data, errors): ): cudf.to_numeric(data, errors=errors) else: - with expect_warning_if(PANDAS_GE_220 and errors == "ignore"): - expect = pd.to_numeric(data, errors=errors) - with expect_warning_if(errors == "ignore"): - got = cudf.to_numeric(data, errors=errors) + expect = pd.to_numeric(data, errors=errors) + got = cudf.to_numeric(data, errors=errors) assert_eq(expect, got) diff --git a/python/cudf/cudf/tests/groupby/test_agg.py b/python/cudf/cudf/tests/groupby/test_agg.py index c35cb9ec0041..411afd4abf23 100644 --- a/python/cudf/cudf/tests/groupby/test_agg.py +++ b/python/cudf/cudf/tests/groupby/test_agg.py @@ -8,10 +8,6 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.core.dtypes import ListDtype, StructDtype from cudf.testing import assert_eq, assert_groupby_results_equal @@ -185,13 +181,15 @@ def test_groupby_as_index_multiindex(as_index): ], ) def test_groupby_2keys_agg(func): - # gdf (Note: lack of multiIndex) nelem = 20 pdf = pd.DataFrame(np.ones((nelem, 2)), columns=["x", "y"]) gdf = cudf.DataFrame(pdf) expect_df = pdf.groupby(["x", "y"]).agg(func) got_df = gdf.groupby(["x", "y"]).agg(func) - + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + expect_df.columns = expect_df.columns.astype(got_df.columns.dtype) assert_groupby_results_equal(got_df, expect_df) @@ -211,13 +209,6 @@ def test_groupby_agg_decimal(groupby_reduction_methods, request): reason=f"{groupby_reduction_methods} not supported with Decimals in pandas", ) ) - request.applymarker( - pytest.mark.xfail( - groupby_reduction_methods in ["idxmax", "idxmin"] - and PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason=f"{groupby_reduction_methods} not supported with Decimals in an older version of pandas", - ) - ) rng = np.random.default_rng(seed=0) num_groups = 4 nelem_per_group = 10 @@ -397,11 +388,7 @@ def test_groupby_multi_agg_hash_groupby(agg): assert_groupby_results_equal(pdg, gdg, check_dtype=check_dtype) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="previous verion of pandas throws a warning", -) -def test_groupby_nulls_basic(groupby_reduction_methods, request): +def test_groupby_nulls_basic(groupby_reduction_methods): pdf = pd.DataFrame({"a": [0, 0, 1, 1, 2, 2], "b": [1, 2, 1, 2, 1, None]}) gdf = cudf.from_pandas(pdf) assert_groupby_results_equal( @@ -422,6 +409,8 @@ def test_groupby_nulls_basic(groupby_reduction_methods, request): getattr(gdf.groupby("a"), groupby_reduction_methods)(), ) + +def test_groupby_nulls_all_na_group(groupby_reduction_methods, request): pdf = pd.DataFrame( { "a": [0, 0, 1, 1, 2, 2], @@ -431,16 +420,22 @@ def test_groupby_nulls_basic(groupby_reduction_methods, request): ) gdf = cudf.from_pandas(pdf) - request.applymarker( - pytest.mark.xfail( - groupby_reduction_methods in ["prod", "sum"], - reason="cuDF returns NaN instead of an actual value", + if groupby_reduction_methods in ["idxmin", "idxmax"]: + with pytest.raises(ValueError): + getattr(gdf.groupby("a"), groupby_reduction_methods)() + with pytest.raises(ValueError): + getattr(pdf.groupby("a"), groupby_reduction_methods)() + else: + request.applymarker( + pytest.mark.xfail( + groupby_reduction_methods in ["prod", "sum"], + reason="cuDF returns NaN instead of an actual value", + ) + ) + assert_groupby_results_equal( + getattr(pdf.groupby("a"), groupby_reduction_methods)(), + getattr(gdf.groupby("a"), groupby_reduction_methods)(), ) - ) - assert_groupby_results_equal( - getattr(pdf.groupby("a"), groupby_reduction_methods)(), - getattr(gdf.groupby("a"), groupby_reduction_methods)(), - ) @pytest.mark.parametrize("agg", [lambda x: x.count(), "count"]) @@ -513,7 +508,12 @@ def test_groupby_agg_combinations(agg): @pytest.mark.parametrize("list_agg", [list, "collect"]) def test_groupby_list_simple(list_agg): - pdf = pd.DataFrame({"a": [1, 1, 1, 2, 2, 2], "b": [1, 2, None, 4, 5, 6]}) + pdf = pd.DataFrame( + { + "a": [1, 1, 1, 2, 2, 2], + "b": pd.array([1, 2, None, 4, 5, 6], dtype="double[pyarrow]"), + } + ) gdf = cudf.from_pandas(pdf) assert_groupby_results_equal( @@ -567,7 +567,9 @@ def test_groupby_list_of_structs(list_agg): @pytest.mark.parametrize("list_agg", [list, "collect"]) def test_groupby_list_single_element(list_agg): - pdf = pd.DataFrame({"a": [1, 2], "b": [3, None]}) + pdf = pd.DataFrame( + {"a": [1, 2], "b": pd.array([3, None], dtype="double[pyarrow]")} + ) gdf = cudf.from_pandas(pdf) assert_groupby_results_equal( @@ -584,7 +586,7 @@ def test_groupby_list_strings(agg): pdf = pd.DataFrame( { "a": [1, 1, 1, 2, 2], - "b": ["b", "a", None, "e", "d"], + "b": pd.array(["b", "a", None, "e", "d"], dtype="string[pyarrow]"), "c": [1, 2, 3, 4, 5], } ) diff --git a/python/cudf/cudf/tests/groupby/test_apply.py b/python/cudf/cudf/tests/groupby/test_apply.py index 7aee18b70f2c..2be508cea11e 100644 --- a/python/cudf/cudf/tests/groupby/test_apply.py +++ b/python/cudf/cudf/tests/groupby/test_apply.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2018-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2018-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import textwrap @@ -10,11 +10,6 @@ import cudf from cudf import DataFrame -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_VERSION, -) from cudf.core.udf._ops import arith_ops, comparison_ops, unary_ops from cudf.core.udf.groupby_typing import SUPPORTED_GROUPBY_NUMPY_TYPES from cudf.core.udf.utils import UDFError, precompiled @@ -27,25 +22,22 @@ def engine(request): return request.param -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Include groups missing on old versions of pandas", -) def test_groupby_as_index_apply(as_index, engine): pdf = pd.DataFrame({"x": [1, 2, 3], "y": [0, 1, 1]}) gdf = cudf.DataFrame({"x": [1, 2, 3], "y": [0, 1, 1]}) gdf = gdf.groupby("y", as_index=as_index).apply( lambda df: df["x"].mean(), engine=engine ) - kwargs = {"func": lambda df: df["x"].mean(), "include_groups": False} - pdf = pdf.groupby("y", as_index=as_index).apply(**kwargs) + pdf = pdf.groupby("y", as_index=as_index).apply( + func=lambda df: df["x"].mean(), include_groups=False + ) + if not as_index: + # pandas uses object type for the resulting ["y", None] column labels, + # cuDF uses StringDtype instead + pdf.columns = pdf.columns.astype(gdf.columns.dtype) assert_groupby_results_equal(pdf, gdf, as_index=as_index, by="y") -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply(): rng = np.random.default_rng(seed=0) nelem = 20 @@ -90,10 +82,6 @@ def f3(df, k, L, m): @pytest.mark.parametrize( "func,args", [(f1, (42,)), (f2, (42, 119)), (f3, (42, 119, 212.1))] ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_args(func, args): rng = np.random.default_rng(seed=0) nelem = 20 @@ -224,10 +212,6 @@ def func(df): "func", ["min", "max", "sum", "mean", "var", "std", "idxmin", "idxmax"] ) @pytest.mark.parametrize("dataset", ["small", "large", "nans"]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Include groups missing on old versions of pandas", -) def test_groupby_apply_jit_unary_reductions( request, func, dtype, dataset, groupby_jit_datasets ): @@ -248,14 +232,8 @@ def test_groupby_apply_jit_unary_reductions( reason=("https://github.com/rapidsai/cudf/issues/14860"), ) ) - warn_condition = ( - dataset == "nans" - and func in {"idxmax", "idxmin"} - and dtype.kind == "f" - ) dataset = groupby_jit_datasets[dataset].copy(deep=True) - with expect_warning_if(warn_condition, FutureWarning): - groupby_apply_jit_reductions_test_inner(func, dataset, dtype) + groupby_apply_jit_reductions_test_inner(func, dataset, dtype) # test unary reductions for special values @@ -281,10 +259,6 @@ def func(df): # test unary index reductions for special values -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def groupby_apply_jit_idx_reductions_special_vals_inner( func, data, dtype, special_val ): @@ -310,10 +284,6 @@ def func(df): @pytest.mark.parametrize("func", ["min", "max", "sum", "mean", "var", "std"]) @pytest.mark.parametrize("special_val", [np.nan, np.inf, -np.inf]) @pytest.mark.parametrize("dataset", ["small", "large", "nans"]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Include groups missing on old versions of pandas", -) def test_groupby_apply_jit_reductions_special_vals( func, dtype, dataset, groupby_jit_datasets, special_val ): @@ -341,10 +311,6 @@ def test_groupby_apply_jit_reductions_special_vals( ], ) @pytest.mark.parametrize("dataset", ["small", "large", "nans"]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="include_groups keyword new in pandas 2.2", -) def test_groupby_apply_jit_idx_reductions_special_vals( func, dataset, groupby_jit_datasets, special_val ): @@ -354,10 +320,6 @@ def test_groupby_apply_jit_idx_reductions_special_vals( ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_jit_sum_integer_overflow(): max = np.iinfo("int32").max @@ -392,10 +354,6 @@ def func(group): "large", ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_jit_correlation(dataset, groupby_jit_datasets, dtype): dataset = groupby_jit_datasets[dataset].copy(deep=True) @@ -422,10 +380,6 @@ def func(group): @pytest.mark.parametrize("dtype", ["int32", "int64"]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_jit_correlation_zero_variance(dtype): # pearson correlation is undefined when the variance of either # variable is zero. This test ensures that the jit implementation @@ -484,10 +438,6 @@ def func(group): @pytest.mark.parametrize("dtype", ["uint8", "str"]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_unsupported_dtype(dtype): df = cudf.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6], "c": [7, 8, 9]}) df["b"] = df["b"].astype(dtype) @@ -516,10 +466,6 @@ def func(group): lambda df: df["val1"].mean() + df["val2"].std(), ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_jit_basic(func, groupby_jit_data_small): run_groupby_apply_jit_test(groupby_jit_data_small, func, ["key1", "key2"]) @@ -539,20 +485,12 @@ def f3(df, k, L, m): @pytest.mark.parametrize( "func,args", [(f1, (42,)), (f2, (42, 119)), (f3, (42, 119, 212.1))] ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_jit_args(func, args, groupby_jit_data_small): run_groupby_apply_jit_test( groupby_jit_data_small, func, ["key1", "key2"], *args ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_jit_block_divergence(): # https://github.com/rapidsai/cudf/issues/12686 df = cudf.DataFrame( @@ -570,10 +508,6 @@ def diverging_block(grp_df): run_groupby_apply_jit_test(df, diverging_block, ["a"]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_caching(): # Make sure similar functions that differ # by simple things like constants actually @@ -610,10 +544,6 @@ def f(group): assert precompiled.currsize == 3 -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_no_bytecode_fallback(): # tests that a function which contains no bytecode # attribute, but would still be executable using @@ -632,10 +562,6 @@ def f(group): assert_groupby_results_equal(expect, got) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_return_col_from_df(): # tests a UDF that consists of purely colwise # ops, such as `lambda group: group.x + group.y` @@ -661,10 +587,6 @@ def func(df): @pytest.mark.parametrize("func", [lambda group: group.sum()]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_return_df(func): # tests a UDF that reduces over a dataframe # and produces a series with the original column names @@ -695,19 +617,15 @@ def pdf_func(df): ) pdf = df.to_pandas() - kwargs = {} - if PANDAS_GE_220: - kwargs["include_groups"] = False - - expect = pdf.groupby("key", as_index=as_index).apply(pdf_func, **kwargs) - got = df.groupby("key", as_index=as_index).apply(gdf_func, **kwargs) + expect = pdf.groupby("key", as_index=as_index).apply( + pdf_func, include_groups=False + ) + got = df.groupby("key", as_index=as_index).apply( + gdf_func, include_groups=False + ) assert_groupby_results_equal(expect, got) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Include groups missing on old versions of pandas", -) def test_groupby_apply_noempty_group(): pdf = pd.DataFrame( {"a": [1, 1, 2, 2], "b": [1, 2, 1, 2], "c": [1, 2, 3, 4]} @@ -758,10 +676,6 @@ def f3(x, k, L, m): @pytest.mark.parametrize( "func,args", create_test_groupby_apply_return_scalars_params() ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_groupby_apply_return_scalars(func, args): pdf = pd.DataFrame( { @@ -820,10 +734,6 @@ def f5(x, k, L, m): @pytest.mark.parametrize( "func,args", create_test_groupby_apply_return_series_dataframe_params() ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Include groups missing on old versions of pandas", -) def test_groupby_apply_return_series_dataframe(func, args): pdf = pd.DataFrame( {"key": [0, 0, 1, 1, 2, 2, 2], "val": [0, 1, 2, 3, 4, 5, 6]} @@ -893,6 +803,11 @@ def test_groupby_first(data, agg): gdf = cudf.from_pandas(pdf) expect = pdf.groupby("a").agg(agg) got = gdf.groupby("a").agg(agg) + if data["a"] == [None]: + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + expect.index = expect.index.astype(got.index.dtype) assert_groupby_results_equal(expect, got, check_dtype=False) @@ -959,6 +874,43 @@ def test_groupby_group_keys(group_keys, by): assert_eq(actual, expected) +def test_groupby_apply_default_include_groups_excludes_keys(): + # The cudf default for `include_groups` matches pandas 3.x (False): + # the grouping column should not be present in the per-group frame. + gdf = cudf.DataFrame( + {"A": [1, 1, 2, 2], "B": [1, 2, 3, 4], "C": [10, 20, 30, 40]} + ) + seen_columns: list[list[str]] = [] + + def record(x): + seen_columns.append(list(x.columns)) + return x["B"].sum() + + gdf.groupby("A").apply(record) + assert all("A" not in cols for cols in seen_columns), seen_columns + + +def test_seriesgroupby_apply_default_include_groups(): + # Regression: SeriesGroupBy.apply used to crash with `include_groups=False` + # because `_grouped` tried to ``del`` from a Series. + gdf = cudf.DataFrame({"A": [1, 1, 2, 2], "B": [1, 2, 3, 4]}) + pdf = gdf.to_pandas() + got = gdf.groupby("A")["B"].apply(lambda x: x.sum()) + expect = pdf.groupby("A")["B"].apply(lambda x: x.sum()) + assert_eq(got, expect) + + +def test_groupby_default_group_keys_under_pandas_compat(): + # In pandas-compatible mode, `group_keys` defaults to True so that + # ``apply`` prepends group labels to the result index, matching pandas. + gdf = cudf.DataFrame({"A": [1, 1, 2, 2], "B": [1, 2, 3, 4]}) + pdf = gdf.to_pandas() + with cudf.option_context("mode.pandas_compatible", True): + got = gdf.groupby("A").apply(lambda x: x["B"] * 2) + expect = pdf.groupby("A").apply(lambda x: x["B"] * 2) + assert_eq(got, expect) + + @pytest.mark.parametrize( "dtype", ["int32", "int64", "float64", "datetime64[ns]", "timedelta64[ns]", "bool"], @@ -967,10 +919,6 @@ def test_groupby_group_keys(group_keys, by): "apply_op", ["sum", "min", "max", "idxmax"], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_group_by_empty_apply(request, dtype, apply_op): request.applymarker( pytest.mark.xfail( diff --git a/python/cudf/cudf/tests/groupby/test_attributes.py b/python/cudf/cudf/tests/groupby/test_attributes.py index 098e3f06faeb..f44f5762bf14 100644 --- a/python/cudf/cudf/tests/groupby/test_attributes.py +++ b/python/cudf/cudf/tests/groupby/test_attributes.py @@ -1,15 +1,12 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np import pandas as pd import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.testing import assert_eq +from cudf.testing._utils import expect_warning_if def test_groups(): @@ -45,9 +42,16 @@ def test_groupby_groups(by): pdg = pdf.groupby(by) gdg = gdf.groupby(by) - for key in pdg.groups: - assert key in gdg.groups - assert_eq(pdg.groups[key], gdg.groups[key]) + warns = isinstance(by, list) and len(by) == 1 + + with expect_warning_if(warns, pd.errors.Pandas4Warning): + pd_groups = pdg.groups + with expect_warning_if(warns, FutureWarning): + gdf_groups = gdg.groups + + for key in pd_groups: + assert key in gdf_groups + assert_eq(pd_groups[key], gdf_groups[key]) @pytest.mark.parametrize( @@ -76,9 +80,15 @@ def test_groupby_groups_multi(by): pdg = pdf.groupby(by) gdg = gdf.groupby(by) - for key in pdg.groups: - assert key in gdg.groups - assert_eq(pdg.groups[key], gdg.groups[key]) + warns = isinstance(by, list) and len(by) == 1 + with expect_warning_if(warns, pd.errors.Pandas4Warning): + pd_groups = pdg.groups + with expect_warning_if(warns, FutureWarning): + gdf_groups = gdg.groups + + for key in pd_groups: + assert key in gdf_groups + assert_eq(pd_groups[key], gdf_groups[key]) def test_groupby_iterate_groups(): @@ -131,26 +141,6 @@ def test_grouping(grouper): assert_eq(pdf_group[1], gdf_group[1]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -@pytest.mark.parametrize( - "groups", ["a", "b", "c", ["a", "c"], ["a", "b", "c"]] -) -def test_groupby_dtypes(groups): - df = cudf.DataFrame( - {"a": [1, 2, 3, 3], "b": ["x", "y", "z", "a"], "c": [10, 11, 12, 12]} - ) - pdf = df.to_pandas() - with pytest.warns(FutureWarning): - expected = pdf.groupby(groups).dtypes - with pytest.warns(FutureWarning): - actual = df.groupby(groups).dtypes - - assert_eq(expected, actual) - - def test_ngroups(): pdf = pd.DataFrame({"a": [1, 1, 3], "b": range(3)}) gdf = cudf.DataFrame(pdf) diff --git a/python/cudf/cudf/tests/groupby/test_diff.py b/python/cudf/cudf/tests/groupby/test_diff.py index ca4891b5276d..45e7b5512157 100644 --- a/python/cudf/cudf/tests/groupby/test_diff.py +++ b/python/cudf/cudf/tests/groupby/test_diff.py @@ -7,10 +7,6 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.testing import assert_groupby_results_equal from cudf.testing.dataset_generator import rand_dataframe @@ -55,13 +51,15 @@ def test_groupby_diff_row_mixed_numerics(shift_perc, direction): seed=0, ) gdf = cudf.DataFrame.from_arrow(t) - pdf = gdf.to_pandas() + pdf = gdf.to_pandas(arrow_type=True) n_shift = int(nelem * shift_perc) * direction expected = pdf.groupby(["0"]).diff(periods=n_shift) got = gdf.groupby(["0"]).diff(periods=n_shift) - assert_groupby_results_equal(expected, got) + assert_groupby_results_equal( + expected, got.to_pandas(arrow_type=True), check_dtype=False + ) def test_groupby_diff_row_zero_shift(): @@ -96,105 +94,6 @@ def test_groupby_diff_row_zero_shift(): ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -def test_groupby_fillna_multi_value(): - nelem = 20 - t = rand_dataframe( - dtypes_meta=[ - {"dtype": "int64", "null_frequency": 0, "cardinality": 10}, - {"dtype": "int64", "null_frequency": 0.4, "cardinality": 10}, - {"dtype": "float32", "null_frequency": 0.4, "cardinality": 10}, - { - "dtype": "datetime64[ms]", - "null_frequency": 0.4, - "cardinality": 10, - }, - { - "dtype": "timedelta64[ns]", - "null_frequency": 0.4, - "cardinality": 10, - }, - {"dtype": "decimal64", "null_frequency": 0.4, "cardinality": 10}, - {"dtype": "str", "null_frequency": 0.4, "cardinality": 10}, - ], - rows=nelem, - use_threads=False, - seed=0, - ) - key_col = "0" - value_cols = ["1", "2", "3", "4", "5", "6"] - pdf = t.to_pandas() - gdf = cudf.from_pandas(pdf) - - # fill the dataframe with the first non-null item in the column - fill_values = { - name: pdf[name].loc[pdf[name].first_valid_index()] - for name in value_cols - } - # cudf can't fillna with a pandas.Timedelta type - fill_values["4"] = fill_values["4"].to_numpy() - with pytest.warns(FutureWarning): - expect = pdf.groupby(key_col).fillna(value=fill_values) - with pytest.warns(FutureWarning): - got = gdf.groupby(key_col).fillna(value=fill_values) - - assert_groupby_results_equal(expect[value_cols], got[value_cols]) - - -# TODO: cudf.fillna does not support decimal column to column fill yet -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -def test_groupby_fillna_multi_value_df(): - nelem = 20 - t = rand_dataframe( - dtypes_meta=[ - {"dtype": "int64", "null_frequency": 0, "cardinality": 10}, - {"dtype": "int64", "null_frequency": 0.4, "cardinality": 10}, - {"dtype": "float32", "null_frequency": 0.4, "cardinality": 10}, - { - "dtype": "datetime64[ms]", - "null_frequency": 0.4, - "cardinality": 10, - }, - { - "dtype": "timedelta64[ns]", - "null_frequency": 0.4, - "cardinality": 10, - }, - {"dtype": "str", "null_frequency": 0.4, "cardinality": 10}, - ], - rows=nelem, - use_threads=False, - seed=0, - ) - key_col = "0" - value_cols = ["1", "2", "3", "4", "5"] - pdf = t.to_pandas() - gdf = cudf.from_pandas(pdf) - - # fill the dataframe with the first non-null item in the column - fill_values = { - name: pdf[name].loc[pdf[name].first_valid_index()] - for name in value_cols - } - # cudf can't fillna with a pandas.Timedelta type - fill_values["4"] = fill_values["4"].to_numpy() - fill_values = pd.DataFrame(fill_values, index=pdf.index) - with pytest.warns(FutureWarning): - expect = pdf.groupby(key_col).fillna(value=fill_values) - - fill_values = cudf.from_pandas(fill_values) - with pytest.warns(FutureWarning): - got = gdf.groupby(key_col).fillna(value=fill_values) - - assert_groupby_results_equal(expect[value_cols], got[value_cols]) - - def test_groupby_select_then_diff(): pdf = pd.DataFrame( {"a": [1, 1, 1, 2, 2], "b": [1, 2, 3, 4, 5], "c": [3, 4, 5, 6, 7]} diff --git a/python/cudf/cudf/tests/groupby/test_ffill.py b/python/cudf/cudf/tests/groupby/test_ffill.py index 3fb554a29ae9..a3dbd9df7cf5 100644 --- a/python/cudf/cudf/tests/groupby/test_ffill.py +++ b/python/cudf/cudf/tests/groupby/test_ffill.py @@ -1,10 +1,12 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd +import pytest import cudf from cudf.testing import assert_groupby_results_equal +from cudf.testing.dataset_generator import rand_dataframe def test_groupby_select_then_ffill(): @@ -21,3 +23,41 @@ def test_groupby_select_then_ffill(): actual = gdf.groupby("a")["c"].ffill() assert_groupby_results_equal(expected, actual) + + +@pytest.mark.xfail( + reason="decimal64 .to_pandas() fillna null with None instead of NaN" +) +def test_groupby_ffill_multi_value(): + nelem = 20 + t = rand_dataframe( + dtypes_meta=[ + {"dtype": "int64", "null_frequency": 0, "cardinality": 10}, + {"dtype": "int64", "null_frequency": 0.4, "cardinality": 10}, + {"dtype": "float32", "null_frequency": 0.4, "cardinality": 10}, + { + "dtype": "datetime64[ms]", + "null_frequency": 0.4, + "cardinality": 10, + }, + { + "dtype": "timedelta64[ns]", + "null_frequency": 0.4, + "cardinality": 10, + }, + {"dtype": "decimal64", "null_frequency": 0.4, "cardinality": 10}, + {"dtype": "str", "null_frequency": 0.4, "cardinality": 10}, + ], + rows=nelem, + use_threads=False, + seed=0, + ) + key_col = "0" + value_cols = ["1", "2", "3", "4", "5", "6"] + pdf = t.to_pandas() + gdf = cudf.from_pandas(pdf) + + expect = pdf.groupby(key_col).ffill() + got = gdf.groupby(key_col).ffill() + + assert_groupby_results_equal(expect[value_cols], got[value_cols]) diff --git a/python/cudf/cudf/tests/groupby/test_fillna.py b/python/cudf/cudf/tests/groupby/test_fillna.py deleted file mode 100644 index 434ad7ba8c2c..000000000000 --- a/python/cudf/cudf/tests/groupby/test_fillna.py +++ /dev/null @@ -1,213 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2018-2025, NVIDIA CORPORATION. -# SPDX-License-Identifier: Apache-2.0 - - -import pandas as pd -import pytest - -import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) -from cudf.testing import assert_groupby_results_equal -from cudf.testing._utils import assert_exceptions_equal -from cudf.testing.dataset_generator import rand_dataframe - - -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -def test_groupby_fillna_multi_value(): - nelem = 20 - t = rand_dataframe( - dtypes_meta=[ - {"dtype": "int64", "null_frequency": 0, "cardinality": 10}, - {"dtype": "int64", "null_frequency": 0.4, "cardinality": 10}, - {"dtype": "float32", "null_frequency": 0.4, "cardinality": 10}, - { - "dtype": "datetime64[ms]", - "null_frequency": 0.4, - "cardinality": 10, - }, - { - "dtype": "timedelta64[ns]", - "null_frequency": 0.4, - "cardinality": 10, - }, - {"dtype": "decimal64", "null_frequency": 0.4, "cardinality": 10}, - {"dtype": "str", "null_frequency": 0.4, "cardinality": 10}, - ], - rows=nelem, - use_threads=False, - seed=0, - ) - key_col = "0" - value_cols = ["1", "2", "3", "4", "5", "6"] - pdf = t.to_pandas() - gdf = cudf.from_pandas(pdf) - - # fill the dataframe with the first non-null item in the column - fill_values = { - name: pdf[name].loc[pdf[name].first_valid_index()] - for name in value_cols - } - # cudf can't fillna with a pandas.Timedelta type - fill_values["4"] = fill_values["4"].to_numpy() - with pytest.warns(FutureWarning): - expect = pdf.groupby(key_col).fillna(value=fill_values) - with pytest.warns(FutureWarning): - got = gdf.groupby(key_col).fillna(value=fill_values) - - assert_groupby_results_equal(expect[value_cols], got[value_cols]) - - -# TODO: cudf.fillna does not support decimal column to column fill yet -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -def test_groupby_fillna_multi_value_df(): - nelem = 20 - t = rand_dataframe( - dtypes_meta=[ - {"dtype": "int64", "null_frequency": 0, "cardinality": 10}, - {"dtype": "int64", "null_frequency": 0.4, "cardinality": 10}, - {"dtype": "float32", "null_frequency": 0.4, "cardinality": 10}, - { - "dtype": "datetime64[ms]", - "null_frequency": 0.4, - "cardinality": 10, - }, - { - "dtype": "timedelta64[ns]", - "null_frequency": 0.4, - "cardinality": 10, - }, - {"dtype": "str", "null_frequency": 0.4, "cardinality": 10}, - ], - rows=nelem, - use_threads=False, - seed=0, - ) - key_col = "0" - value_cols = ["1", "2", "3", "4", "5"] - pdf = t.to_pandas() - gdf = cudf.from_pandas(pdf) - - # fill the dataframe with the first non-null item in the column - fill_values = { - name: pdf[name].loc[pdf[name].first_valid_index()] - for name in value_cols - } - # cudf can't fillna with a pandas.Timedelta type - fill_values["4"] = fill_values["4"].to_numpy() - fill_values = pd.DataFrame(fill_values, index=pdf.index) - with pytest.warns(FutureWarning): - expect = pdf.groupby(key_col).fillna(value=fill_values) - - fill_values = cudf.from_pandas(fill_values) - with pytest.warns(FutureWarning): - got = gdf.groupby(key_col).fillna(value=fill_values) - - assert_groupby_results_equal(expect[value_cols], got[value_cols]) - - -@pytest.mark.parametrize( - "by", - [pd.Series([1, 1, 2, 2, 3, 4]), lambda x: x % 2 == 0, pd.Grouper(level=0)], -) -@pytest.mark.parametrize( - "data", [[1, None, 2, None, 3, None], [1, 2, 3, 4, 5, 6]] -) -@pytest.mark.parametrize("args", [{"value": 42}, {"method": "ffill"}]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -def test_groupby_various_by_fillna(by, data, args): - ps = pd.Series(data) - gs = cudf.from_pandas(ps) - - with pytest.warns(FutureWarning): - expect = ps.groupby(by).fillna(**args) - if isinstance(by, pd.Grouper): - by = cudf.Grouper(level=by.level) - with pytest.warns(FutureWarning): - got = gs.groupby(by).fillna(**args) - - assert_groupby_results_equal(expect, got, check_dtype=False) - - -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -@pytest.mark.parametrize("method", ["ffill", "bfill"]) -def test_groupby_fillna_method(method): - nelem = 20 - t = rand_dataframe( - dtypes_meta=[ - {"dtype": "int64", "null_frequency": 0, "cardinality": 10}, - {"dtype": "int64", "null_frequency": 0.4, "cardinality": 10}, - {"dtype": "float32", "null_frequency": 0.4, "cardinality": 10}, - { - "dtype": "datetime64[ns]", - "null_frequency": 0.4, - "cardinality": 10, - }, - { - "dtype": "timedelta64[ns]", - "null_frequency": 0.4, - "cardinality": 10, - }, - { - "dtype": "list", - "null_frequency": 0.4, - "cardinality": 10, - "lists_max_length": 10, - "nesting_max_depth": 3, - "value_type": "int64", - }, - {"dtype": "category", "null_frequency": 0.4, "cardinality": 10}, - {"dtype": "decimal64", "null_frequency": 0.4, "cardinality": 10}, - {"dtype": "str", "null_frequency": 0.4, "cardinality": 10}, - ], - rows=nelem, - use_threads=False, - seed=0, - ) - key_col = "0" - value_cols = ["1", "2", "3", "4", "5", "6", "7", "8"] - pdf = t.to_pandas() - gdf = cudf.from_pandas(pdf) - - with pytest.warns(FutureWarning): - expect = pdf.groupby(key_col).fillna(method=method) - with pytest.warns(FutureWarning): - got = gdf.groupby(key_col).fillna(method=method) - - assert_groupby_results_equal( - expect[value_cols], got[value_cols], sort=False - ) - - -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Does not warn on older versions of pandas", -) -def test_cat_groupby_fillna(): - ps = pd.Series(["a", "b", "c"], dtype="category") - gs = cudf.from_pandas(ps) - - with pytest.warns(FutureWarning): - pg = ps.groupby(ps) - gg = gs.groupby(gs) - - assert_exceptions_equal( - lfunc=pg.fillna, - rfunc=gg.fillna, - lfunc_args_and_kwargs=(("d",), {}), - rfunc_args_and_kwargs=(("d",), {}), - ) diff --git a/python/cudf/cudf/tests/groupby/test_get_group.py b/python/cudf/cudf/tests/groupby/test_get_group.py index 6c1069a186d7..3bb5a7a5023b 100644 --- a/python/cudf/cudf/tests/groupby/test_get_group.py +++ b/python/cudf/cudf/tests/groupby/test_get_group.py @@ -1,17 +1,11 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_VERSION, -) from cudf.testing import assert_eq, assert_groupby_results_equal -from cudf.testing._utils import expect_warning_if def test_rank_return_type_compatible_mode(): @@ -24,58 +18,33 @@ def test_rank_return_type_compatible_mode(): @pytest.mark.parametrize( - "pdf, group, name, obj", + "group, name", [ ( - pd.DataFrame({"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}), "X", "A", - None, ), ( - pd.DataFrame({"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}), "X", "B", - None, - ), - ( - pd.DataFrame({"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}), - "X", - "A", - pd.DataFrame({"a": [1, 2, 4, 5, 10, 11]}), ), ( - pd.DataFrame({"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}), "Y", 1, - pd.DataFrame({"a": [1, 2, 4, 5, 10, 11]}), ), ( - pd.DataFrame({"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}), "Y", 3, - pd.DataFrame({"a": [1, 2, 0, 11]}), ), ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Warnings only given on newer versions.", -) -def test_groupby_get_group(pdf, group, name, obj): +def test_groupby_get_group(group, name): + pdf = pd.DataFrame({"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}) gdf = cudf.from_pandas(pdf) - - if isinstance(obj, pd.DataFrame): - gobj = cudf.from_pandas(obj) - else: - gobj = obj - pgb = pdf.groupby(group) ggb = gdf.groupby(group) - with expect_warning_if(obj is not None): - expected = pgb.get_group(name=name, obj=obj) - with expect_warning_if(obj is not None): - actual = ggb.get_group(name=name, obj=gobj) + expected = pgb.get_group(name=name) + actual = ggb.get_group(name=name) assert_groupby_results_equal(expected, actual) @@ -85,9 +54,6 @@ def test_groupby_get_group(pdf, group, name, obj): assert_eq(expected, actual) -@pytest.mark.skipif( - not PANDAS_GE_220, reason="pandas behavior applicable in >=2.2" -) def test_get_group_list_like(): df = cudf.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}) result = df.groupby(["a"]).get_group((1,)) diff --git a/python/cudf/cudf/tests/groupby/test_pct_change.py b/python/cudf/cudf/tests/groupby/test_pct_change.py index 96181bbe0beb..4ea328cb4ca8 100644 --- a/python/cudf/cudf/tests/groupby/test_pct_change.py +++ b/python/cudf/cudf/tests/groupby/test_pct_change.py @@ -1,25 +1,13 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pytest import cudf -from cudf.api.extensions import no_default -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.testing import assert_eq -from cudf.testing._utils import ( - expect_warning_if, -) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.parametrize( "data, gkey", [ @@ -40,34 +28,29 @@ }, ["id", "a"], ), - ( + pytest.param( { "id": ["a", "a", "b", "b", "c", "c"], "val1": [None, None, None, None, None, None], }, ["id"], + marks=pytest.mark.xfail( + reason="cuDF null values are None instead of NaN" + ), ), ], ) @pytest.mark.parametrize("periods", [-2, 0, 5]) -@pytest.mark.parametrize("fill_method", ["ffill", "bfill", no_default, None]) -def test_groupby_pct_change(data, gkey, periods, fill_method): +def test_groupby_pct_change(data, gkey, periods): gdf = cudf.DataFrame(data) pdf = gdf.to_pandas() - with expect_warning_if(fill_method not in (no_default, None)): - actual = gdf.groupby(gkey).pct_change( - periods=periods, fill_method=fill_method - ) - with expect_warning_if( - ( - fill_method not in (no_default, None) - or (fill_method is not None and pdf.isna().any().any()) - ) - ): - expected = pdf.groupby(gkey).pct_change( - periods=periods, fill_method=fill_method - ) + actual = gdf.groupby(gkey).pct_change( + periods=periods, + ) + expected = pdf.groupby(gkey).pct_change( + periods=periods, + ) assert_eq(expected, actual) @@ -90,7 +73,13 @@ def test_groupby_pct_change_multiindex_dataframe(periods): def test_groupby_pct_change_empty_columns(): - gdf = cudf.DataFrame(columns=["id", "val1", "val2"]) + gdf = cudf.DataFrame( + { + "id": cudf.Series([], dtype="object"), + "val1": cudf.Series([], dtype="float64"), + "val2": cudf.Series([], dtype="float64"), + } + ) pdf = gdf.to_pandas() actual = gdf.groupby("id").pct_change() diff --git a/python/cudf/cudf/tests/groupby/test_reductions.py b/python/cudf/cudf/tests/groupby/test_reductions.py index edac5c501464..03bd566cab6c 100644 --- a/python/cudf/cudf/tests/groupby/test_reductions.py +++ b/python/cudf/cudf/tests/groupby/test_reductions.py @@ -6,10 +6,6 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.testing import assert_eq, assert_groupby_results_equal, assert_neq from cudf.testing._utils import assert_exceptions_equal @@ -436,7 +432,7 @@ def test_groupby_index_type(): df["string_col"] = ["a", "b", "c"] df["counts"] = [1, 2, 3] res = df.groupby(by="string_col").counts.sum() - assert res.index.dtype == cudf.dtype("object") + assert res.index.dtype == cudf.dtype("str") @pytest.mark.parametrize( @@ -444,15 +440,6 @@ def test_groupby_index_type(): ) @pytest.mark.parametrize("q", [0.25, 0.4, 0.5, 0.7, 1]) def test_groupby_quantile(request, interpolation, q): - request.applymarker( - pytest.mark.xfail( - condition=(q == 0.5 and interpolation == "nearest"), - reason=( - "Pandas NaN Rounding will fail nearest interpolation at 0.5" - ), - ) - ) - raw_data = { "y": [None, 1, 2, 3, 4, None, 6, 7, 8, 9], "x": [1, 2, 3, 1, 2, 2, 1, None, 3, 2], @@ -881,10 +868,6 @@ def test_group_by_pandas_sort_order(groups, sort): ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_group_by_empty_reduction( all_supported_types_as_str, groupby_reduction_methods, request ): @@ -928,8 +911,14 @@ def test_group_by_empty_reduction( ) request.applymarker( pytest.mark.xfail( - condition=all_supported_types_as_str in {"str", "category"} - and groupby_reduction_methods in {"sum", "prod", "mean"}, + condition=( + all_supported_types_as_str in {"str", "category"} + and groupby_reduction_methods in {"prod", "mean"} + ) + or ( + all_supported_types_as_str == "category" + and groupby_reduction_methods == "sum" + ), raises=TypeError, reason=f"{all_supported_types_as_str} raises TypeError with {groupby_reduction_methods}", ) @@ -956,10 +945,6 @@ def test_group_by_empty_reduction( ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Warning only given on newer versions.", -) def test_categorical_grouping_pandas_compatibility(): gdf = cudf.DataFrame( { @@ -971,9 +956,7 @@ def test_categorical_grouping_pandas_compatibility(): with cudf.option_context("mode.pandas_compatible", True): actual = gdf.groupby("key", sort=False).sum() - with pytest.warns(FutureWarning): - # observed param deprecation. - expected = pdf.groupby("key", sort=False).sum() + expected = pdf.groupby("key", sort=False).sum() assert_eq(actual, expected) @@ -1212,3 +1195,193 @@ def test_string_groupby_key_index(): got = gdf.groupby("a", sort=True).count() assert_eq(expect, got, check_dtype=False) + + +@pytest.mark.parametrize("op", ["all", "any"]) +@pytest.mark.parametrize( + "data", + [ + [True, False, True, True, False, False], + [1, 0, 2, 3, 0, 0], + [1.0, 0.0, 2.5, 3.5, 0.0, 0.0], + ], +) +def test_groupby_all_any(op, data): + pdf = pd.DataFrame({"a": [1, 1, 2, 2, 3, 3], "b": data}) + gdf = cudf.from_pandas(pdf) + with cudf.option_context("mode.pandas_compatible", True): + got = getattr(gdf.groupby("a"), op)() + expect = getattr(pdf.groupby("a"), op)() + assert_eq(expect, got) + + +@pytest.mark.parametrize("op", ["all", "any"]) +def test_groupby_all_any_string(op): + pdf = pd.DataFrame( + {"a": [1, 1, 2, 2, 3, 3], "b": ["x", "", "", "", "y", "z"]} + ) + gdf = cudf.from_pandas(pdf) + with cudf.option_context("mode.pandas_compatible", True): + got = getattr(gdf.groupby("a"), op)() + expect = getattr(pdf.groupby("a"), op)() + assert_eq(expect, got) + + +@pytest.mark.parametrize("op", ["all", "any"]) +def test_groupby_all_any_empty(op): + pdf = pd.DataFrame( + { + "a": pd.array([], dtype="int64"), + "b": pd.array([], dtype="bool"), + } + ) + gdf = cudf.from_pandas(pdf) + with cudf.option_context("mode.pandas_compatible", True): + got = getattr(gdf.groupby("a"), op)() + expect = getattr(pdf.groupby("a"), op)() + assert_eq(expect, got, check_index_type=False) + + +@pytest.mark.parametrize( + "string_dtype", + [ + pd.StringDtype(storage="python", na_value=pd.NA), + pd.StringDtype(storage="python", na_value=np.nan), + pd.StringDtype(storage="pyarrow", na_value=pd.NA), + pd.StringDtype(storage="pyarrow", na_value=np.nan), + ], +) +@pytest.mark.parametrize("op", ["count", "nunique", "size"]) +def test_groupby_string_int_returning_aggs_dtype(string_dtype, op): + psr = pd.Series( + ["x", "y", "x", None, "z"], + dtype=string_dtype, + name="b", + ) + pkeys = pd.Series([1, 1, 2, 2, 3], name="a") + gsr = cudf.from_pandas(psr) + gkeys = cudf.from_pandas(pkeys) + with cudf.option_context("mode.pandas_compatible", True): + got = getattr(gsr.groupby(gkeys), op)() + expect = getattr(psr.groupby(pkeys), op)() + assert_eq(expect, got) + + +@pytest.mark.parametrize( + "string_dtype", + [ + pd.StringDtype(storage="python", na_value=pd.NA), + pd.StringDtype(storage="python", na_value=np.nan), + pd.StringDtype(storage="pyarrow", na_value=pd.NA), + pd.StringDtype(storage="pyarrow", na_value=np.nan), + ], +) +def test_groupby_string_sum(string_dtype): + pdf = pd.DataFrame( + { + "a": [1, 1, 2, 2, 3], + "b": pd.array(["x", "y", "", "z", "q"], dtype=string_dtype), + } + ) + gdf = cudf.from_pandas(pdf) + with cudf.option_context("mode.pandas_compatible", True): + got = gdf.groupby("a").sum() + expect = pdf.groupby("a").sum() + assert_eq(expect, got) + + +@pytest.mark.parametrize( + "string_dtype", + [ + pd.StringDtype(storage="python", na_value=pd.NA), + pd.StringDtype(storage="python", na_value=np.nan), + pd.StringDtype(storage="pyarrow", na_value=pd.NA), + pd.StringDtype(storage="pyarrow", na_value=np.nan), + ], +) +@pytest.mark.parametrize("op", ["min", "max", "first", "last"]) +def test_groupby_string_min_max_preserves_dtype(string_dtype, op): + pdf = pd.DataFrame( + { + "a": [1, 1, 2, 2], + "b": pd.array(["x", "y", "a", "b"], dtype=string_dtype), + } + ) + gdf = cudf.from_pandas(pdf) + with cudf.option_context("mode.pandas_compatible", True): + got = getattr(gdf.groupby("a"), op)() + expect = getattr(pdf.groupby("a"), op)() + assert_eq(expect, got) + assert got["b"].dtype == expect["b"].dtype + + +def test_groupby_series_identity_column_exclusion(): + pdf = pd.DataFrame( + {"a": [1, 1, 2, 2, 3, 3], "b": [10, 20, 30, 40, 50, 60]} + ) + gdf = cudf.from_pandas(pdf) + with cudf.option_context("mode.pandas_compatible", True): + got = gdf.groupby(gdf["a"]).sum() + expect = pdf.groupby(pdf["a"]).sum() + assert_eq(expect, got) + + +def test_groupby_series_copy_no_column_exclusion(): + pdf = pd.DataFrame( + {"a": [1, 1, 2, 2, 3, 3], "b": [10, 20, 30, 40, 50, 60]} + ) + gdf = cudf.from_pandas(pdf) + with cudf.option_context("mode.pandas_compatible", True): + got = gdf.groupby(gdf["a"].copy()).sum() + expect = pdf.groupby(pdf["a"].copy()).sum() + assert_eq(expect, got) + + +def test_groupby_series_self_does_not_exclude(): + psr = pd.Series([1, 1, 2, 2, 3, 3], name="a") + gsr = cudf.from_pandas(psr) + with cudf.option_context("mode.pandas_compatible", True): + got = gsr.groupby(gsr).count() + expect = psr.groupby(psr).count() + assert_eq(expect, got) + + +@pytest.mark.parametrize("key_cols", [["a"], ["a", "b"]]) +def test_groupby_multi_series_identity_column_exclusion(key_cols): + pdf = pd.DataFrame( + { + "a": [1, 1, 2, 2, 3, 3], + "b": [10, 10, 20, 20, 30, 30], + "c": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0], + } + ) + gdf = cudf.from_pandas(pdf) + with cudf.option_context("mode.pandas_compatible", True): + got = gdf.groupby([gdf[c] for c in key_cols]).sum() + expect = pdf.groupby([pdf[c] for c in key_cols]).sum() + assert_eq(expect, got) + + +@pytest.mark.parametrize("op", ["sum", "min", "max", "first", "last"]) +@pytest.mark.parametrize("min_count", [0, 1, 2, 3, 5]) +def test_groupby_reduce_min_count(op, min_count): + pdf = pd.DataFrame( + {"a": [1, 1, 2, 2, 3], "b": [1.0, 2.0, 3.0, np.nan, 5.0]} + ) + gdf = cudf.from_pandas(pdf) + with cudf.option_context("mode.pandas_compatible", True): + got = getattr(gdf.groupby("a"), op)(min_count=min_count) + expect = getattr(pdf.groupby("a"), op)(min_count=min_count) + assert_eq(expect, got) + + +@pytest.mark.parametrize("min_count", [0, 2, 3]) +def test_groupby_series_reduce_min_count(min_count): + psr = pd.Series([1.0, 2.0, 3.0, 4.0, 5.0]) + pkeys = pd.Series([1, 1, 2, 2, 3]) + gsr = cudf.from_pandas(psr) + gkeys = cudf.from_pandas(pkeys) + with cudf.option_context("mode.pandas_compatible", True): + got = gsr.groupby(gkeys).sum(min_count=min_count) + expect = psr.groupby(pkeys).sum(min_count=min_count) + assert_eq(expect, got) diff --git a/python/cudf/cudf/tests/groupby/test_resample.py b/python/cudf/cudf/tests/groupby/test_resample.py index 5bd4acb88123..2c3b9f5aa606 100644 --- a/python/cudf/cudf/tests/groupby/test_resample.py +++ b/python/cudf/cudf/tests/groupby/test_resample.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2024, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -6,7 +6,6 @@ import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq @@ -49,6 +48,19 @@ def test_series_upsample_simple(): ) +def test_series_resample_preserves_frequency(): + index = pd.DatetimeIndex( + pd.date_range("2020-01-01", freq="D", periods=3).to_numpy() + ) + psr = pd.Series(range(3), index=index) + gsr = cudf.from_pandas(psr) + + expected = psr.resample("D").max() + result = gsr.resample("D").max() + + assert_eq(result, expected, check_dtype=False, check_index_type=False) + + @pytest.mark.parametrize("rule", ["2s", "10s"]) def test_series_resample_ffill(rule): date_idx = pd.date_range("1/1/2012", periods=10, freq="5s") @@ -144,26 +156,22 @@ def test_dataframe_resample_level(): @pytest.mark.parametrize( - "in_freq, sampling_freq, out_freq", + "in_freq, sampling_freq", [ - ("1ns", "1us", "us"), - ("1us", "10us", "us"), - ("ms", "100us", "us"), - ("ms", "1s", "s"), - ("s", "1min", "s"), - ("1min", "30s", "s"), - ("1D", "10D", "s"), - ("10D", "1D", "s"), + ("1ns", "1us"), + ("1us", "10us"), + ("ms", "100us"), + ("ms", "1s"), + ("s", "1min"), + ("1min", "30s"), + ("1D", "10D"), + ("10D", "1D"), ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) -def test_resampling_frequency_conversion(in_freq, sampling_freq, out_freq): +def test_resampling_frequency_conversion(in_freq, sampling_freq): rng = np.random.default_rng(seed=0) - # test that we cast to the appropriate frequency - # when resampling: + # Pandas resample preserves the input column's unit; verify cuDF + # matches that behavior across sampling frequencies. pdf = pd.DataFrame( { "x": rng.standard_normal(size=100), @@ -175,13 +183,9 @@ def test_resampling_frequency_conversion(in_freq, sampling_freq, out_freq): got = gdf.resample(sampling_freq, on="y").mean() assert_resample_results_equal(expect, got) - assert got.index.dtype == np.dtype(f"datetime64[{out_freq}]") + assert got.index.dtype == pdf["y"].dtype -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_resampling_downsampling_ms(): pdf = pd.DataFrame( { @@ -194,3 +198,52 @@ def test_resampling_downsampling_ms(): result = gdf.resample("10ms", on="time").mean() result.index = result.index.astype("datetime64[ns]") assert_eq(result, expected, check_freq=False) + + +@pytest.mark.parametrize("input_unit", ["s", "ms", "us", "ns"]) +@pytest.mark.parametrize("freq", ["D", "h", "30min"]) +@pytest.mark.parametrize( + "agg", ["mean", "sum", "min", "max", "first", "last", "count", "var"] +) +def test_resample_empty_preserves_input_unit_and_freq(input_unit, freq, agg): + # Resample on an empty datetime index must preserve the input column's + # unit (pandas behavior; cuDF previously collapsed to [s] for D/h offsets) + # and must keep the offset attached to the result index. + idx = pd.DatetimeIndex([], dtype=f"datetime64[{input_unit}]", name="t") + pser = pd.Series([], index=idx, dtype=float) + gser = cudf.from_pandas(pser) + + expected = getattr(pser.resample(freq), agg)() + actual = getattr(gser.resample(freq), agg)() + + assert actual.index.dtype == expected.index.dtype + assert_eq(actual, expected, check_dtype=False, check_index_type=False) + + +def test_resample_size_matches_pandas_with_empty_buckets(): + # GroupBy.size bypasses _Resampler.agg, so the freq has to be re-attached + # by the size override; empty buckets must come back as 0 (not NaN), and + # the result must be sorted by bin label like pandas. + idx = pd.date_range("2020-01-01", periods=4, freq="1h") + pser = pd.Series(range(4), index=idx) + gser = cudf.from_pandas(pser) + + expected = pser.resample("30min").size() + actual = gser.resample("30min").size() + + assert_eq(actual, expected, check_dtype=False, check_index_type=False) + + # Empty case + idx_empty = pd.DatetimeIndex([], dtype="datetime64[us]", name="t") + pser_empty = pd.Series([], index=idx_empty, dtype=float) + gser_empty = cudf.from_pandas(pser_empty) + + expected_empty = pser_empty.resample("h").size() + actual_empty = gser_empty.resample("h").size() + + assert_eq( + actual_empty, + expected_empty, + check_dtype=False, + check_index_type=False, + ) diff --git a/python/cudf/cudf/tests/groupby/test_value_counts.py b/python/cudf/cudf/tests/groupby/test_value_counts.py index 393c0bad8520..1bfbbd6997b2 100644 --- a/python/cudf/cudf/tests/groupby/test_value_counts.py +++ b/python/cudf/cudf/tests/groupby/test_value_counts.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2018-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2018-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -28,15 +28,13 @@ def test_group_by_value_counts(normalize, sort, ascending, dropna, as_index): expected = pdf.groupby("gender", as_index=as_index).value_counts( normalize=normalize, sort=sort, ascending=ascending, dropna=dropna ) - - # TODO: Remove `check_names=False` once testing against `pandas>=2.0.0` + # Always sort for comparison since row order is + # implementation-defined when value_counts(sort=False). assert_groupby_results_equal( actual, expected, - check_index_type=False, as_index=as_index, - by=["gender", "education"], - sort=sort, + by=["gender", "education", "country"], ) diff --git a/python/cudf/cudf/tests/indexes/categoricalindex/test_constructors.py b/python/cudf/cudf/tests/indexes/categoricalindex/test_constructors.py index a7082f3a805c..93f4636f6dab 100644 --- a/python/cudf/cudf/tests/indexes/categoricalindex/test_constructors.py +++ b/python/cudf/cudf/tests/indexes/categoricalindex/test_constructors.py @@ -1,6 +1,7 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 +import numpy as np import pandas as pd import pytest @@ -25,6 +26,9 @@ def test_categorical_index_basic(data, categories, dtype, ordered, name): if dtype is not None: categories = None ordered = None + if data == [] and categories is None and dtype is None: + # pandas otherwise returns Index[object] which cuDF does not support + categories = pd.Index([], dtype=pd.StringDtype(na_value=np.nan)) pindex = pd.CategoricalIndex( data=data, categories=categories, diff --git a/python/cudf/cudf/tests/indexes/categoricalindex/test_repr.py b/python/cudf/cudf/tests/indexes/categoricalindex/test_repr.py index ebe1518ee88a..d1ec6ce683e7 100644 --- a/python/cudf/cudf/tests/indexes/categoricalindex/test_repr.py +++ b/python/cudf/cudf/tests/indexes/categoricalindex/test_repr.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -17,15 +17,15 @@ def test_categorical_index_with_nan_repr(): ) expected_repr = ( - "CategoricalIndex([1.0, 2.0, NaN, 10.0, NaN, ], " - "categories=[1.0, 2.0, 10.0, NaN], ordered=False, dtype='category')" + "CategoricalIndex([1.0, 2.0, , 10.0, , ], " + "categories=[1.0, 2.0, 10.0], ordered=False, dtype='category')" ) assert repr(cat_index) == expected_repr sliced_expected_repr = ( - "CategoricalIndex([NaN, 10.0, NaN, ], " - "categories=[1.0, 2.0, 10.0, NaN], ordered=False, dtype='category')" + "CategoricalIndex([, 10.0, , ], " + "categories=[1.0, 2.0, 10.0], ordered=False, dtype='category')" ) assert repr(cat_index[2:]) == sliced_expected_repr diff --git a/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_repeat.py b/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_repeat.py index ea9fa16f7244..f27443744900 100644 --- a/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_repeat.py +++ b/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_repeat.py @@ -1,6 +1,7 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 +import pandas as pd import cudf from cudf.testing import assert_eq @@ -18,3 +19,17 @@ def test_index_datetime_repeat(): actual = gidx.to_frame().repeat(5) assert_eq(actual.index, expected) + + +def test_repeat_matches_pandas_drops_freq(): + # Repeating values produces duplicates that no longer respect the + # original spacing, so pandas drops freq — cudf must match. + pidx = pd.date_range("2021-01-01", periods=3, freq="D") + gidx = cudf.from_pandas(pidx) + + expected = pidx.repeat(2) + actual = gidx.repeat(2) + + assert expected.freq is None + assert actual.freq is None + assert_eq(actual, expected) diff --git a/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_sort_values.py b/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_sort_values.py new file mode 100644 index 000000000000..e2666459550b --- /dev/null +++ b/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_sort_values.py @@ -0,0 +1,50 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION. +# SPDX-License-Identifier: Apache-2.0 + +import pandas as pd + +import cudf +from cudf.testing import assert_eq + + +def test_sort_values_descending_values_match_pandas_freq_dropped(): + # Pandas keeps freq as -1*Day on a descending sort; cudf is more + # conservative and drops it. The values must still match pandas. + pidx = pd.date_range("2001-01-01", periods=5, freq="D") + gidx = cudf.from_pandas(pidx) + + expected = pidx.sort_values(ascending=False) + actual = gidx.sort_values(ascending=False) + + assert actual.freq is None + assert_eq(actual.values, expected.values) + assert_eq(actual, expected) + + +def test_sort_values_after_take_matches_pandas(): + # take() then sort_values() must not surface a stale freq, and the + # values must agree with pandas. + pidx = pd.date_range("2001-01-01", periods=11, freq="D") + gidx = cudf.from_pandas(pidx) + + perm = [4, 1, 3, 10, 9, 7, 8, 5, 0, 2, 6] + expected = pidx.take(perm).sort_values() + actual = gidx.take(perm).sort_values() + + assert_eq(actual.values, expected.values) + assert_eq(actual, expected) + # Pandas re-attaches Day freq here because the values are regular again; + # cudf is conservative and leaves it None — no stale freq either way. + assert actual.freq is None + + +def test_sort_values_to_pandas_round_trip_matches_pandas_values(): + # Regression for the to_pandas() ValueError on reversed values. + pidx = pd.date_range("2001-01-01", periods=5, freq="D") + gidx = cudf.from_pandas(pidx) + + expected = pidx.sort_values(ascending=False) + actual = gidx.sort_values(ascending=False) + + assert_eq(actual.values, expected.values) + assert_eq(actual, expected) diff --git a/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_take.py b/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_take.py new file mode 100644 index 000000000000..6c037ab3d5be --- /dev/null +++ b/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_take.py @@ -0,0 +1,80 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION. +# SPDX-License-Identifier: Apache-2.0 + +import pandas as pd +import pytest + +import cudf +from cudf.testing import assert_eq + + +def test_take_shuffled_matches_pandas_drops_freq(): + # Pandas drops freq when take(...) shuffles values; cudf must match. + pidx = pd.date_range("2001-01-01", periods=11, freq="D") + gidx = cudf.from_pandas(pidx) + + perm = [4, 1, 3, 10, 9, 7, 8, 5, 0, 2, 6] + expected = pidx.take(perm) + actual = gidx.take(perm) + + assert expected.freq is None + assert actual.freq is None + assert_eq(actual, expected) + + +def test_take_to_pandas_after_shuffle_matches_pandas(): + # Regression: prior to the fix, this raised + # "Inferred frequency None ... does not conform to passed frequency D". + pidx = pd.date_range("2001-01-01", periods=11, freq="D") + gidx = cudf.from_pandas(pidx) + + perm = [4, 1, 3, 10, 9, 7, 8, 5, 0, 2, 6] + expected = pidx.take(perm) + actual = gidx.take(perm).to_pandas() + + assert actual.freq == expected.freq # both None + assert_eq(actual, expected) + + +def test_take_preserving_order_values_match_pandas(): + # The gather map preserves order — values must match pandas. + # (cudf is more conservative about freq here; we don't compare freq.) + pidx = pd.date_range("2001-01-01", periods=5, freq="D") + gidx = cudf.from_pandas(pidx) + + perm = [0, 1, 2, 3, 4] + assert_eq( + gidx.take(perm), + pidx.take(perm), + ) + assert_eq( + gidx.take(perm).values, + pidx.take(perm).values, + ) + + +def test_take_on_no_freq_index_matches_pandas(): + pidx = pd.DatetimeIndex(["2020-01-01", "2020-03-15", "2020-07-04"]) + gidx = cudf.from_pandas(pidx) + + perm = [2, 0, 1] + expected = pidx.take(perm) + actual = gidx.take(perm) + + assert expected.freq is None + assert actual.freq is None + assert_eq(actual, expected) + + +@pytest.mark.parametrize("freq", ["D", "h", "min"]) +def test_take_shuffled_matches_pandas_for_various_freqs(freq): + pidx = pd.date_range("2001-01-01", periods=6, freq=freq) + gidx = cudf.from_pandas(pidx) + + perm = [2, 5, 0, 1] + expected = pidx.take(perm) + actual = gidx.take(perm) + + assert expected.freq is None + assert actual.freq is None + assert_eq(actual, expected) diff --git a/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_to_pandas.py b/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_to_pandas.py new file mode 100644 index 000000000000..f53317697938 --- /dev/null +++ b/python/cudf/cudf/tests/indexes/datetimeindex/methods/test_to_pandas.py @@ -0,0 +1,86 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION. +# SPDX-License-Identifier: Apache-2.0 + +import pandas as pd +import pytest + +import cudf +from cudf.testing import assert_eq + + +def test_to_pandas_regular_range_matches_pandas(): + # Round-trip through cudf must preserve the same DatetimeIndex (incl. freq) + # that pandas would produce on its own. + pidx = pd.date_range("2001-01-01", periods=5, freq="D") + gidx = cudf.from_pandas(pidx) + + actual = gidx.to_pandas() + assert actual.freq == pidx.freq + assert_eq(actual, pidx) + + +def test_to_pandas_after_take_matches_pandas(): + # Regression: prior to the fix, to_pandas() raised. Now it should + # match pandas's own take() output. + pidx = pd.date_range("2001-01-01", periods=11, freq="D") + gidx = cudf.from_pandas(pidx) + + perm = [4, 1, 3, 10, 9, 7, 8, 5, 0, 2, 6] + expected = pidx.take(perm) + actual = gidx.take(perm).to_pandas() + + assert actual.freq is None + assert expected.freq is None + assert_eq(actual, expected) + + +def test_to_pandas_arrow_type_values_match_pandas(): + pidx = pd.date_range("2001-01-01", periods=5, freq="D") + gidx = cudf.from_pandas(pidx) + + actual = gidx.to_pandas(arrow_type=True) + # arrow-backed Index has no freq — compare the underlying values. + assert_eq(actual.to_numpy(), pidx.to_numpy()) + + +def test_to_pandas_externally_set_stale_freq_matches_pandas_inferred(): + # If a stale freq sneaks in (e.g. via deserialization or external mutation), + # to_pandas() should produce the freq pandas would have inferred from the + # values, rather than raising. + pidx = pd.date_range("2001-01-01", periods=5, freq="D") + gidx = cudf.from_pandas(pidx) + gidx._freq = cudf.DateOffset._from_freqstr( + "h" + ) # nonsense for daily values + + actual = gidx.to_pandas() + expected_freq = pidx.inferred_freq # what pandas would infer + + assert actual.freq == pd.tseries.frequencies.to_offset(expected_freq) + assert_eq(actual.values, pidx.values) + + +@pytest.mark.parametrize("freq", ["D", "h", "30min", "2D", "ME"]) +def test_to_pandas_empty_with_freq_falls_back_to_cached(freq): + # Empty indexes have nothing to infer from, so to_pandas() must fall back + # to the cached freq mapped through DateOffset._maybe_as_fast_pandas_offset + # (matches pandas, which keeps the offset on empty resample/asfreq output). + pidx = pd.DatetimeIndex([], dtype="datetime64[us]", freq=freq, name="t") + gidx = cudf.from_pandas(pidx) + + actual = gidx.to_pandas() + assert actual.freq == pidx.freq + assert actual.dtype == pidx.dtype + assert_eq(actual, pidx) + + +@pytest.mark.parametrize("freq", ["D", "h", "30min"]) +def test_to_pandas_single_element_with_freq_falls_back_to_cached(freq): + # Single-element indexes can't infer freq (pandas inferred_freq is None), + # but the cached freq is still authoritative — preserve it on round-trip. + pidx = pd.DatetimeIndex(["2020-01-01"], freq=freq, name="t") + gidx = cudf.from_pandas(pidx) + + actual = gidx.to_pandas() + assert actual.freq == pidx.freq + assert_eq(actual, pidx) diff --git a/python/cudf/cudf/tests/indexes/datetimeindex/test_attributes.py b/python/cudf/cudf/tests/indexes/datetimeindex/test_attributes.py index 4a7d9a5865cd..f948db635a3e 100644 --- a/python/cudf/cudf/tests/indexes/datetimeindex/test_attributes.py +++ b/python/cudf/cudf/tests/indexes/datetimeindex/test_attributes.py @@ -8,6 +8,7 @@ import cudf from cudf.testing import assert_eq +from cudf.testing._utils import assert_exceptions_equal @pytest.mark.parametrize( @@ -123,6 +124,82 @@ def test_dti_properties(attr): assert result == expected +@pytest.mark.parametrize( + "data,freq", + [ + (["2020-01-31"], "ME"), + (["2020-01-01", "2020-01-02", "2020-01-03"], "D"), + (["2020-01-01", "2020-01-02"], "D"), + (["2020-01-01", "2020-01-08", "2020-01-15"], "7D"), + ([], "D"), + ], +) +def test_dti_freq_setter(data, freq): + pd_dti = pd.DatetimeIndex(data) + cudf_dti = cudf.DatetimeIndex(data) + pd_dti.freq = freq + cudf_dti.freq = freq + assert_eq(cudf_dti, pd_dti) + assert cudf_dti.freq == pd_dti.freq + + +def test_dti_freq_setter_none_clears(): + pd_dti = pd.date_range("2020-01-01", periods=3, freq="D") + cudf_dti = cudf.from_pandas(pd_dti) + assert cudf_dti.freq is not None + pd_dti.freq = None + cudf_dti.freq = None + assert cudf_dti.freq is None + assert pd_dti.freq is None + assert_eq(cudf_dti, pd_dti) + + +def test_dti_freq_setter_via_cudf_dateoffset(): + data = ["2020-01-01", "2020-01-02", "2020-01-03"] + cudf_dti = cudf.DatetimeIndex(data) + cudf_dti.freq = cudf.DateOffset(days=1) + pd_dti = pd.DatetimeIndex(data) + pd_dti.freq = "D" + assert_eq(cudf_dti, pd_dti) + + +@pytest.mark.parametrize( + "data,freq", + [ + (["2020-01-01", "2020-01-02", "2020-01-03"], "ME"), + (["2020-01-01", "2020-01-02"], "2D"), + (["2020-01-01", "2020-01-03", "2020-01-05"], "D"), + ], +) +def test_dti_freq_setter_invalid_raises(data, freq): + def _set(idx_cls, freq_val): + idx = idx_cls(data) + idx.freq = freq_val + + assert_exceptions_equal( + lfunc=_set, + rfunc=_set, + lfunc_args_and_kwargs=([pd.DatetimeIndex, freq], {}), + rfunc_args_and_kwargs=([cudf.DatetimeIndex, freq], {}), + ) + + +@pytest.mark.parametrize("freq", ["asdfgh", "not_a_freq"]) +def test_dti_freq_setter_unparseable_raises(freq): + data = ["2020-01-01", "2020-01-02"] + + def _set(idx_cls, freq_val): + idx = idx_cls(data) + idx.freq = freq_val + + assert_exceptions_equal( + lfunc=_set, + rfunc=_set, + lfunc_args_and_kwargs=([pd.DatetimeIndex, freq], {}), + rfunc_args_and_kwargs=([cudf.DatetimeIndex, freq], {}), + ) + + def test_writable_numpy_array(): gi = cudf.Index([1, 2, 3], dtype="datetime64[ns]") expected_flags = pd.Index( diff --git a/python/cudf/cudf/tests/indexes/datetimeindex/test_constructor.py b/python/cudf/cudf/tests/indexes/datetimeindex/test_constructor.py index 795455aeebe6..1e91ffda8b83 100644 --- a/python/cudf/cudf/tests/indexes/datetimeindex/test_constructor.py +++ b/python/cudf/cudf/tests/indexes/datetimeindex/test_constructor.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -98,3 +98,44 @@ def test_from_pandas_datetimeindex_freq(): actual = cudf.Index(expected) assert_eq(expected, actual) assert actual.freq is not None + + +@pytest.mark.parametrize( + "data", + [ + [], + (), + [None], + [None, None], + pd.Series([], dtype="object"), + ], +) +def test_datetime_index_empty_object_default_dtype(data): + # Pandas's array_to_datetime falls back to "s" precision when no + # concrete (non-NaT) datetime is observed (pandas-dev/pandas#55901). + # cuDF should match so cudf.pandas-wrapped pd.DatetimeIndex([]) doesn't + # diverge from plain pandas. Inputs to this test deliberately carry no + # explicit dtype so cuDF's default-unit logic is what's exercised. + pd_data = data + gd_data = cudf.from_pandas(data) if isinstance(data, pd.Series) else data + expected = pd.DatetimeIndex(pd_data) + actual = cudf.DatetimeIndex(gd_data) + assert actual.dtype == expected.dtype + assert_eq(actual, expected) + + +@pytest.mark.parametrize( + "values", + [ + ["2020-01-01"], + ["2020-01-01", "2020-01-02"], + ["1970-01-01 00:00:00.000000"], + ], +) +def test_datetime_index_string_input_us_default(values): + # Non-empty string parsing should still resolve to [us] (pandas 3 default + # when no nanosecond-precision component is present). + expected = pd.DatetimeIndex(values) + actual = cudf.DatetimeIndex(values) + assert actual.dtype == expected.dtype + assert_eq(actual, expected) diff --git a/python/cudf/cudf/tests/indexes/index/methods/test_append.py b/python/cudf/cudf/tests/indexes/index/methods/test_append.py index 14204eeffd72..10f48db06dd3 100644 --- a/python/cudf/cudf/tests/indexes/index/methods/test_append.py +++ b/python/cudf/cudf/tests/indexes/index/methods/test_append.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import re @@ -8,15 +8,10 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.core.index import Index from cudf.testing import assert_eq from cudf.testing._utils import ( assert_exceptions_equal, - expect_warning_if, ) @@ -54,10 +49,6 @@ ["abcd", "defgh", "werty", "poiu"], ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Does not warn on older versions of pandas", -) def test_index_append(data, other): pd_data = pd.Index(data) pd_other = pd.Index(other) @@ -68,21 +59,17 @@ def test_index_append(data, other): if cudf.utils.dtypes.is_mixed_with_object_dtype(gd_data, gd_other): gd_data = gd_data.astype("str") gd_other = gd_other.astype("str") + # As of pandas 3.0, mixed string/numbers will return object type (of PyObjects) + pd_data = pd_data.astype("str") + pd_other = pd_other.astype("str") - with expect_warning_if( - (len(data) == 0 or len(other) == 0) and pd_data.dtype != pd_other.dtype - ): - expected = pd_data.append(pd_other) - with expect_warning_if( - (len(data) == 0 or len(other) == 0) and gd_data.dtype != gd_other.dtype - ): - actual = gd_data.append(gd_other) + expected = pd_data.append(pd_other) + actual = gd_data.append(gd_other) if len(data) == 0 and len(other) == 0: - # Pandas default dtype to "object" for empty list - # cudf default dtype to "float" for empty list - assert_eq(expected, actual.astype("str")) - elif actual.dtype == "object": - assert_eq(expected.astype("str"), actual) + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + assert_eq(expected.astype(actual.dtype), actual) else: assert_eq(expected, actual) @@ -92,12 +79,10 @@ def test_index_empty_append_name_conflict(): non_empty = cudf.Index([1], name="bar") expected = cudf.Index([1]) - with pytest.warns(FutureWarning): - result = non_empty.append(empty) + result = non_empty.append(empty) assert_eq(result, expected) - with pytest.warns(FutureWarning): - result = empty.append(non_empty) + result = empty.append(non_empty) assert_eq(result, expected) @@ -126,17 +111,12 @@ def test_index_append_error(data, other): gd_data = Index(data) gd_other = Index(other) - got_dtype = ( - gd_other.dtype - if gd_data.dtype == np.dtype("object") - else gd_data.dtype - ) with pytest.raises( TypeError, match=re.escape( f"cudf does not support appending an Index of " - f"dtype `{np.dtype('object')}` with an Index " - f"of dtype `{got_dtype}`, please type-cast " + f"dtype `{gd_other.dtype}` with an Index " + f"of dtype `{gd_data.dtype}`, please type-cast " f"either one of them to same dtypes." ), ): @@ -146,8 +126,8 @@ def test_index_append_error(data, other): TypeError, match=re.escape( f"cudf does not support appending an Index of " - f"dtype `{np.dtype('object')}` with an Index " - f"of dtype `{got_dtype}`, please type-cast " + f"dtype `{gd_other.dtype}` with an Index " + f"of dtype `{gd_data.dtype}`, please type-cast " f"either one of them to same dtypes." ), ): @@ -261,10 +241,6 @@ def test_index_append_error(data, other): ), ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Does not warn on older versions of pandas", -) def test_index_append_list(data, other): pd_data = data pd_other = other @@ -272,16 +248,8 @@ def test_index_append_list(data, other): gd_data = cudf.from_pandas(data) gd_other = [cudf.from_pandas(i) for i in other] - with expect_warning_if( - (len(data) == 0 or any(len(d) == 0 for d in other)) - and (any(d.dtype != data.dtype for d in other)) - ): - expected = pd_data.append(pd_other) - with expect_warning_if( - (len(data) == 0 or any(len(d) == 0 for d in other)) - and (any(d.dtype != data.dtype for d in other)) - ): - actual = gd_data.append(gd_other) + expected = pd_data.append(pd_other) + actual = gd_data.append(gd_other) assert_eq(expected, actual) diff --git a/python/cudf/cudf/tests/indexes/index/methods/test_astype.py b/python/cudf/cudf/tests/indexes/index/methods/test_astype.py index e8071b6a71fa..20f30f2736f9 100644 --- a/python/cudf/cudf/tests/indexes/index/methods/test_astype.py +++ b/python/cudf/cudf/tests/indexes/index/methods/test_astype.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -25,4 +25,5 @@ def test_index_astype_no_copy(copy): gidx = cudf.Index([1, 2, 3], dtype="int64") result = gidx.astype("int64", copy=copy) assert_eq(result, gidx) - assert (result is gidx) is (not copy) + # Under CoW, copy=False returns a shallow copy (distinct object). + assert result is not gidx diff --git a/python/cudf/cudf/tests/indexes/index/methods/test_copy.py b/python/cudf/cudf/tests/indexes/index/methods/test_copy.py index 1dda56716364..3fe638175b75 100644 --- a/python/cudf/cudf/tests/indexes/index/methods/test_copy.py +++ b/python/cudf/cudf/tests/indexes/index/methods/test_copy.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -22,8 +22,7 @@ pd.CategoricalIndex(["a", "b", "c"]), ], ) -@pytest.mark.parametrize("copy_on_write", [True, False]) -def test_index_copy(data, deep, copy_on_write): +def test_index_copy(data, deep): name = "x" cidx = cudf.Index(data) pidx = cidx.to_pandas() @@ -33,12 +32,10 @@ def test_index_copy(data, deep, copy_on_write): assert_eq(pidx_copy, cidx_copy) - with cudf.option_context("copy_on_write", copy_on_write): - if not isinstance(cidx, cudf.RangeIndex): - if not deep: - # When `copy_on_write` is turned on, Index objects will - # have unique column object but they all point to same - # data pointers. - assert_column_memory_eq(cidx._column, cidx_copy._column) - else: - assert_column_memory_ne(cidx._column, cidx_copy._column) + if not isinstance(cidx, cudf.RangeIndex): + if not deep: + # Index objects will have unique column object but they + # all point to same data pointers via copy-on-write. + assert_column_memory_eq(cidx._column, cidx_copy._column) + else: + assert_column_memory_ne(cidx._column, cidx_copy._column) diff --git a/python/cudf/cudf/tests/indexes/index/methods/test_difference.py b/python/cudf/cudf/tests/indexes/index/methods/test_difference.py index a93a535f2794..a4bc8d2ff5bc 100644 --- a/python/cudf/cudf/tests/indexes/index/methods/test_difference.py +++ b/python/cudf/cudf/tests/indexes/index/methods/test_difference.py @@ -1,14 +1,9 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_VERSION, -) from cudf.testing import assert_eq from cudf.testing._utils import ( assert_exceptions_equal, @@ -54,31 +49,21 @@ "name_data,name_other", [("abc", "c"), (None, "abc"), ("abc", pd.NA), ("abc", "abc")], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_index_difference(data, other, sort, name_data, name_other): pd_data = pd.Index(data, name=name_data) pd_other = pd.Index(other, name=name_other) - if ( - not PANDAS_GE_220 - and isinstance(pd_data.dtype, pd.CategoricalDtype) - and not isinstance(pd_other.dtype, pd.CategoricalDtype) - and pd_other.isnull().any() - ): - pytest.skip(reason="https://github.com/pandas-dev/pandas/issues/57318") - - if ( - not PANDAS_GE_220 - and len(pd_other) == 0 - and len(pd_data) != len(pd_data.unique()) - ): - pytest.skip(reason="Bug fixed in pandas-2.2+") gd_data = cudf.from_pandas(pd_data) gd_other = cudf.from_pandas(pd_other) + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + if pd_data.dtype == "object": + pd_data = pd_data.astype(gd_data.dtype) + if pd_other.dtype == "object": + pd_other = pd_other.astype(gd_other.dtype) + expected = pd_data.difference(pd_other, sort=sort) actual = gd_data.difference(gd_other, sort=sort) diff --git a/python/cudf/cudf/tests/indexes/index/methods/test_drop_duplicates.py b/python/cudf/cudf/tests/indexes/index/methods/test_drop_duplicates.py index 5926556d26f1..b9084db8b6c3 100644 --- a/python/cudf/cudf/tests/indexes/index/methods/test_drop_duplicates.py +++ b/python/cudf/cudf/tests/indexes/index/methods/test_drop_duplicates.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -10,15 +10,16 @@ @pytest.mark.parametrize("data", [[1, 2, 3, 1, 2, 3, 4], [], [1], [1, 2, 3]]) def test_index_drop_duplicates(data, all_supported_types_as_str, request): - request.applymarker( - pytest.mark.xfail( - len(data) > 0 - and all_supported_types_as_str - in {"timedelta64[us]", "timedelta64[ms]", "timedelta64[s]"}, - reason=f"wrong result for {all_supported_types_as_str}", - ) - ) pdi = pd.Index(data, dtype=all_supported_types_as_str) gdi = cudf.Index(data, dtype=all_supported_types_as_str) - assert_eq(pdi.drop_duplicates(), gdi.drop_duplicates()) + result = gdi.drop_duplicates() + expected = pdi.drop_duplicates() + if data == [] and all_supported_types_as_str == "category": + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + expected = expected.set_categories( + pd.Index([], dtype=result.categories.dtype) + ) + assert_eq(expected, result) diff --git a/python/cudf/cudf/tests/indexes/index/methods/test_intersection.py b/python/cudf/cudf/tests/indexes/index/methods/test_intersection.py index 4b2810dc55d2..fc03ad49c4e1 100644 --- a/python/cudf/cudf/tests/indexes/index/methods/test_intersection.py +++ b/python/cudf/cudf/tests/indexes/index/methods/test_intersection.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -60,31 +60,20 @@ def test_intersection_index(idx1, idx2, sort, pandas_compatible): ) -@pytest.mark.parametrize( - "idx1, idx2", - [ - (pd.Index(["a", "b", "c"], dtype="category"), pd.Index([1, 2, 3])), - ], -) @pytest.mark.parametrize("sort", [None, False, True]) @pytest.mark.parametrize("pandas_compatible", [True, False]) -def test_intersection_index_error(idx1, idx2, sort, pandas_compatible): +def test_intersection_index_mixed_string_categorical_integer( + sort, pandas_compatible +): + idx1 = pd.Index(["a", "b", "c"], dtype="category") + idx2 = pd.Index([1, 2, 3]) expected = idx1.intersection(idx2, sort=sort) with cudf.option_context("mode.pandas_compatible", pandas_compatible): idx1 = cudf.from_pandas(idx1) if isinstance(idx1, pd.Index) else idx1 idx2 = cudf.from_pandas(idx2) if isinstance(idx2, pd.Index) else idx2 - - if pandas_compatible: - with pytest.raises( - ValueError, - match="Cannot convert numerical column to string column when dtype is an object dtype in pandas compatibility mode.", - ): - idx1.intersection(idx2, sort=sort) - else: - actual = idx1.intersection(idx2, sort=sort) - - assert_eq( - expected, - actual, - ) + actual = idx1.intersection(idx2, sort=sort) + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + assert_eq(expected.astype(actual.dtype), actual) diff --git a/python/cudf/cudf/tests/indexes/index/methods/test_isin.py b/python/cudf/cudf/tests/indexes/index/methods/test_isin.py index 481a5893fcf2..a95cd7525d68 100644 --- a/python/cudf/cudf/tests/indexes/index/methods/test_isin.py +++ b/python/cudf/cudf/tests/indexes/index/methods/test_isin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import re @@ -7,9 +7,7 @@ import pytest import cudf -from cudf.core._compat import PANDAS_GE_220 from cudf.testing import assert_eq -from cudf.testing._utils import expect_warning_if @pytest.mark.parametrize( @@ -33,16 +31,8 @@ def test_isin_index(index, values): pidx = index gidx = cudf.Index(pidx) - - is_dt_str = ( - next(iter(values), None) == "2019-01-01 04:00:00" - and len(pidx) - and pidx.dtype.kind == "M" - ) - with expect_warning_if(is_dt_str): - got = gidx.isin(values) - with expect_warning_if(PANDAS_GE_220 and is_dt_str): - expected = pidx.isin(values) + got = gidx.isin(values) + expected = pidx.isin(values) assert_eq(got, expected) diff --git a/python/cudf/cudf/tests/indexes/index/methods/test_to_pandas.py b/python/cudf/cudf/tests/indexes/index/methods/test_to_pandas.py index 94471704b858..26f6399041a6 100644 --- a/python/cudf/cudf/tests/indexes/index/methods/test_to_pandas.py +++ b/python/cudf/cudf/tests/indexes/index/methods/test_to_pandas.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import datetime @@ -17,7 +17,7 @@ [ ([10, 11, 12], pd.Int64Dtype()), ([0.1, 10.2, 12.3], pd.Float64Dtype()), - (["abc", None, "def"], pd.StringDtype()), + (["abc", None, "def"], pd.StringDtype(na_value=np.nan)), ], ) def test_index_to_pandas_nullable(data, expected_dtype): diff --git a/python/cudf/cudf/tests/indexes/index/test_attributes.py b/python/cudf/cudf/tests/indexes/index/test_attributes.py index ba13804251fc..14903573f420 100644 --- a/python/cudf/cudf/tests/indexes/index/test_attributes.py +++ b/python/cudf/cudf/tests/indexes/index/test_attributes.py @@ -116,58 +116,12 @@ def test_index_iter_error(data, all_supported_types_as_str): @pytest.mark.parametrize("data", [[], [1]]) def test_index_values_host(data, all_supported_types_as_str, request): - request.applymarker( - pytest.mark.xfail( - len(data) > 0 - and all_supported_types_as_str - in {"timedelta64[us]", "timedelta64[ms]", "timedelta64[s]"}, - reason=f"wrong result for {all_supported_types_as_str}", - ) - ) gdi = cudf.Index(data, dtype=all_supported_types_as_str) pdi = pd.Index(data, dtype=all_supported_types_as_str) np.testing.assert_array_equal(gdi.to_numpy(), pdi.values) -@pytest.mark.parametrize( - "data", - [ - [1, 2, 3], - ["a", "v", "d"], - [234.243, 2432.3, None], - [True, False, True], - pd.Series(["a", " ", "v"], dtype="category"), - pd.IntervalIndex.from_breaks([0, 1, 2, 3]), - ], -) -@pytest.mark.parametrize( - "func", - [ - "is_numeric", - "is_boolean", - "is_integer", - "is_floating", - "is_object", - "is_categorical", - "is_interval", - ], -) -def test_index_type_methods(data, func): - pidx = pd.Index(data) - gidx = cudf.from_pandas(pidx) - - with pytest.warns(FutureWarning): - expected = getattr(pidx, func)() - with pytest.warns(FutureWarning): - actual = getattr(gidx, func)() - - if gidx.dtype == np.dtype("bool") and func == "is_object": - assert_eq(False, actual) - else: - assert_eq(expected, actual) - - def test_index_values(): gidx = cudf.Index([1, 2, 3]) pidx = gidx.to_pandas() @@ -186,12 +140,7 @@ def test_index_null_values(): "data", [ [1, 2, 3], - pytest.param( - [np.nan, 10, 15, 16], - marks=pytest.mark.xfail( - reason="https://github.com/pandas-dev/pandas/issues/49818" - ), - ), + [np.nan, 10, 15, 16], range(0, 10), [np.nan, None, 10, 20], ["ab", "zx", "pq"], diff --git a/python/cudf/cudf/tests/indexes/index/test_constructor.py b/python/cudf/cudf/tests/indexes/index/test_constructor.py index e6d18697888f..0b9a13445afe 100644 --- a/python/cudf/cudf/tests/indexes/index/test_constructor.py +++ b/python/cudf/cudf/tests/indexes/index/test_constructor.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import re @@ -131,16 +131,13 @@ def test_range_index_from_range(data): @pytest.mark.parametrize("data", [[1, 2, 3, 4], []]) @pytest.mark.parametrize("name", [1, "a", None]) def test_index_basic(data, all_supported_types_as_str, name, request): - request.applymarker( - pytest.mark.xfail( - len(data) > 0 - and all_supported_types_as_str - in {"timedelta64[us]", "timedelta64[ms]", "timedelta64[s]"}, - reason=f"wrong result for {all_supported_types_as_str}", - ) - ) pdi = pd.Index(data, dtype=all_supported_types_as_str, name=name) gdi = cudf.Index(data, dtype=all_supported_types_as_str, name=name) + if all_supported_types_as_str == "category" and len(data) == 0: + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + pdi = pdi.set_categories(pd.Index([], dtype=gdi.categories.dtype)) assert_eq(pdi, gdi) @@ -160,7 +157,10 @@ def test_index_nan_as_null(data, nan_idx, NA_idx, nan_as_null): assert np.isnan(idx[nan_idx]) if NA_idx is not None: - assert idx[NA_idx] is cudf.NA + if idx.dtype.kind == "f": + assert np.isnan(idx[NA_idx]) + else: + assert idx[NA_idx] is cudf.NA def test_index_constructor_integer(default_integer_bitwidth): @@ -226,28 +226,22 @@ def test_index_date_duration_freq_error(cls): def test_index_empty_from_pandas(all_supported_types_as_str): pidx = pd.Index([], dtype=all_supported_types_as_str) gidx = cudf.from_pandas(pidx) - + if all_supported_types_as_str == "category": + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + pidx = pidx.set_categories(pd.Index([], dtype=gidx.categories.dtype)) assert_eq(pidx, gidx) def test_empty_index_init(): pidx = pd.Index([]) gidx = cudf.Index([]) - assert_eq(pidx, gidx) @pytest.mark.parametrize("data", [[1, 2, 3], range(0, 10)]) def test_index_with_index_dtype(request, data, all_supported_types_as_str): - request.applymarker( - pytest.mark.xfail( - isinstance(data, list) - and all_supported_types_as_str - in {"timedelta64[us]", "timedelta64[ms]", "timedelta64[s]"}, - reason=f"wrong result for {all_supported_types_as_str}", - ) - ) - pidx = pd.Index(data) gidx = cudf.Index(data) diff --git a/python/cudf/cudf/tests/indexes/index/test_repr.py b/python/cudf/cudf/tests/indexes/index/test_repr.py index 61f5acb224d0..105a53a77877 100644 --- a/python/cudf/cudf/tests/indexes/index/test_repr.py +++ b/python/cudf/cudf/tests/indexes/index/test_repr.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -28,21 +28,21 @@ def test_numeric_index_repr(length, numeric_types_as_str): ), ( lambda: cudf.Index([None, 2.2, 3.324342, None]), - "Index([, 2.2, 3.324342, ], dtype='float64')", + "Index([NaN, 2.2, 3.324342, NaN], dtype='float64')", ), ( lambda: cudf.Index([None, None, None], name="hello"), - "Index([, , ], dtype='object', name='hello')", + "Index([None, None, None], dtype='object', name='hello')", ), ( lambda: cudf.Index( [None, None, None], dtype="float", name="hello" ), - "Index([, , ], dtype='float64', name='hello')", + "Index([NaN, NaN, NaN], dtype='float64', name='hello')", ), ( lambda: cudf.Index([None], dtype="float64", name="hello"), - "Index([], dtype='float64', name='hello')", + "Index([NaN], dtype='float64', name='hello')", ), ( lambda: cudf.Index([None], dtype="int8", name="hello"), @@ -50,12 +50,12 @@ def test_numeric_index_repr(length, numeric_types_as_str): ), ( lambda: cudf.Index([None] * 50, dtype="object"), - "Index([, , , , , , , , , " - ", , ,\n , , , , , , , " - ", , , , ,\n , , , , " - ", , , , , , , ,\n , " - ", , , , , , , , , , " - ",\n , ],\n dtype='object')", + "Index([None, None, None, None, None, None, None, None, None, None" + ", None, None,\n None, None, None, None, None, None, None, " + "None, None, None, None, None,\n None, None, None, None, " + "None, None, None, None, None, None, None, None,\n None, " + "None, None, None, None, None, None, None, None, None, None, " + "None,\n None, None],\n dtype='object')", ), ( lambda: cudf.Index([None] * 20, dtype="uint32"), diff --git a/python/cudf/cudf/tests/indexes/intervalindex/test_constructors.py b/python/cudf/cudf/tests/indexes/intervalindex/test_constructors.py index 4b37319173f8..e6e19f21ac7b 100644 --- a/python/cudf/cudf/tests/indexes/intervalindex/test_constructors.py +++ b/python/cudf/cudf/tests/indexes/intervalindex/test_constructors.py @@ -1,20 +1,15 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd import pytest import cudf -from cudf.core._compat import PANDAS_GE_220 from cudf.testing import assert_eq @pytest.mark.parametrize("box", [pd.Series, pd.IntervalIndex]) @pytest.mark.parametrize("tz", ["US/Eastern", None]) -@pytest.mark.skipif( - condition=not PANDAS_GE_220, - reason="ME frequency new in pandas 2.2", -) def test_interval_with_datetime(tz, box): dti = pd.date_range( start=pd.Timestamp("20180101", tz=tz), diff --git a/python/cudf/cudf/tests/indexes/multiindex/methods/test_argsort.py b/python/cudf/cudf/tests/indexes/multiindex/methods/test_argsort.py index efd45a246e5b..f94098f26c09 100644 --- a/python/cudf/cudf/tests/indexes/multiindex/methods/test_argsort.py +++ b/python/cudf/cudf/tests/indexes/multiindex/methods/test_argsort.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -26,22 +26,22 @@ codes=[[0, 0, 1, 2, 3], [0, 2, 1, 1, 0]], names=["x", "y"], ), - pytest.param( - pd.MultiIndex( - levels=[[None, "b", "c", "a"], ["1", None, "5"]], - codes=[[0, 0, 1, 2, 3], [0, 2, 1, 1, 0]], - names=["x", "y"], - ), - marks=[ - pytest.mark.xfail( - reason="https://github.com/pandas-dev/pandas/issues/35584" - ) - ], + pd.MultiIndex( + levels=[[None, "b", "c", "a"], ["1", None, "5"]], + codes=[[0, 0, 1, 2, 3], [0, 2, 1, 1, 0]], + names=["x", "y"], ), ], ) @pytest.mark.parametrize("ascending", [True, False]) -def test_multiindex_argsort(pdi, ascending): +def test_multiindex_argsort(pdi, ascending, request): + request.applymarker( + pytest.mark.xfail( + not ascending + and any(pd.isna(level).any() for level in pdi.levels), + reason=f"argsort with {ascending=} with NA levels is incorrect.", + ) + ) gdi = cudf.from_pandas(pdi) if not ascending: diff --git a/python/cudf/cudf/tests/indexes/multiindex/methods/test_copy.py b/python/cudf/cudf/tests/indexes/multiindex/methods/test_copy.py index 89dad3c31a7a..4a0ab1629cc6 100644 --- a/python/cudf/cudf/tests/indexes/multiindex/methods/test_copy.py +++ b/python/cudf/cudf/tests/indexes/multiindex/methods/test_copy.py @@ -60,54 +60,50 @@ def test_multiindex_copy_sem(): ), ], ) -@pytest.mark.parametrize("copy_on_write", [True, False]) @pytest.mark.parametrize("deep", [True, False]) -def test_multiindex_copy_deep(data, copy_on_write, deep): +def test_multiindex_copy_deep(data, deep): """Test memory identity for deep copy Case1: Constructed from arrays, StringColumns Case2: Constructed from MultiIndex, NumericColumns """ - with cudf.option_context("copy_on_write", copy_on_write): - if isinstance(data, list): - mi1 = cudf.MultiIndex.from_arrays(data) - mi2 = mi1.copy(deep=deep) - for col1, col2 in zip(mi1._columns, mi2._columns, strict=True): - if not deep or (copy_on_write and not deep): - assert_column_memory_eq(col1, col2) - else: - assert_column_memory_ne(col1, col2) - elif isinstance(data, pd.MultiIndex): - data = cudf.MultiIndex( - levels=data.levels, - codes=data.codes, - names=data.names, - ) - same_ref = (not deep) or ( - cudf.get_option("copy_on_write") and not deep - ) - mi1 = data - mi2 = mi1.copy(deep=deep) + if isinstance(data, list): + mi1 = cudf.MultiIndex.from_arrays(data) + mi2 = mi1.copy(deep=deep) + for col1, col2 in zip(mi1._columns, mi2._columns, strict=True): + if not deep: + assert_column_memory_eq(col1, col2) + else: + assert_column_memory_ne(col1, col2) + elif isinstance(data, pd.MultiIndex): + data = cudf.MultiIndex( + levels=data.levels, + codes=data.codes, + names=data.names, + ) + same_ref = not deep + mi1 = data + mi2 = mi1.copy(deep=deep) - # Assert ._levels identity - lptrs = [lv._column.data.ptr for lv in mi1._levels] - rptrs = [lv._column.data.ptr for lv in mi2._levels] + # Assert ._levels identity + lptrs = [lv._column.data.ptr for lv in mi1._levels] + rptrs = [lv._column.data.ptr for lv in mi2._levels] - assert all( - (x == y) == same_ref for x, y in zip(lptrs, rptrs, strict=True) - ) + assert all( + (x == y) == same_ref for x, y in zip(lptrs, rptrs, strict=True) + ) - # Assert ._codes identity - lptrs = [c.data.ptr for c in mi1._codes] - rptrs = [c.data.ptr for c in mi2._codes] + # Assert ._codes identity + lptrs = [c.data.ptr for c in mi1._codes] + rptrs = [c.data.ptr for c in mi2._codes] - assert all( - (x == y) == same_ref for x, y in zip(lptrs, rptrs, strict=True) - ) + assert all( + (x == y) == same_ref for x, y in zip(lptrs, rptrs, strict=True) + ) - # Assert ._data identity - lptrs = [d.data.ptr for d in mi1._columns] - rptrs = [d.data.ptr for d in mi2._columns] + # Assert ._data identity + lptrs = [d.data.ptr for d in mi1._columns] + rptrs = [d.data.ptr for d in mi2._columns] - assert all( - (x == y) == same_ref for x, y in zip(lptrs, rptrs, strict=True) - ) + assert all( + (x == y) == same_ref for x, y in zip(lptrs, rptrs, strict=True) + ) diff --git a/python/cudf/cudf/tests/indexes/multiindex/methods/test_get_indexer.py b/python/cudf/cudf/tests/indexes/multiindex/methods/test_get_indexer.py index 85cfa5cb13d2..9973d2bb69b4 100644 --- a/python/cudf/cudf/tests/indexes/multiindex/methods/test_get_indexer.py +++ b/python/cudf/cudf/tests/indexes/multiindex/methods/test_get_indexer.py @@ -1,14 +1,10 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.testing import assert_eq from cudf.testing._utils import assert_exceptions_equal @@ -61,10 +57,6 @@ def test_get_indexer_multi_numeric_deviate(key, method): @pytest.mark.parametrize("method", ["ffill", "bfill"]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_get_indexer_multi_error(method): pi = pd.MultiIndex.from_tuples( [(2, 1, 1), (1, 2, 3), (1, 2, 1), (1, 1, 10), (1, 1, 1), (2, 2, 1)] diff --git a/python/cudf/cudf/tests/indexes/multiindex/test_attributes.py b/python/cudf/cudf/tests/indexes/multiindex/test_attributes.py index 072567818f8a..a5f7ef83da87 100644 --- a/python/cudf/cudf/tests/indexes/multiindex/test_attributes.py +++ b/python/cudf/cudf/tests/indexes/multiindex/test_attributes.py @@ -153,48 +153,6 @@ def test_multiindex_levels(): assert_eq(gidx.levels[1], pidx.levels[1]) -@pytest.mark.parametrize( - "pidx", - [ - pd.MultiIndex.from_arrays( - [[1, 1, 2, 2], ["Red", "Blue", "Red", "Blue"]] - ), - pd.MultiIndex.from_arrays( - [[1, 2, 3, 4], [5, 6, 7, 10], [11, 12, 12, 13]], - names=["a", "b", "c"], - ), - pd.MultiIndex.from_arrays( - [[1.0, 2, 3, 4], [5, 6, 7.8, 10], [11, 12, 12, 13]], - ), - ], -) -@pytest.mark.parametrize( - "func", - [ - "is_numeric", - "is_boolean", - "is_integer", - "is_floating", - "is_object", - "is_categorical", - "is_interval", - ], -) -def test_multiindex_type_methods(pidx, func): - gidx = cudf.from_pandas(pidx) - - with pytest.warns(FutureWarning): - expected = getattr(pidx, func)() - - with pytest.warns(FutureWarning): - actual = getattr(gidx, func)() - - if func == "is_object": - assert_eq(False, actual) - else: - assert_eq(expected, actual) - - def test_multiindex_iter_error(): midx = cudf.MultiIndex( levels=[[1, 3, 4, 5], [1, 2, 5]], diff --git a/python/cudf/cudf/tests/indexes/multiindex/test_repr.py b/python/cudf/cudf/tests/indexes/multiindex/test_repr.py index c42199f30f54..c611505b33c9 100644 --- a/python/cudf/cudf/tests/indexes/multiindex/test_repr.py +++ b/python/cudf/cudf/tests/indexes/multiindex/test_repr.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import textwrap @@ -55,10 +55,10 @@ def test_multiindex_repr(pmi, max_seq_items): textwrap.dedent( """ MultiIndex([(, 'abc'), - ( 1, ), + ( 1, nan), ( 2, 'xyz'), - ( 3, )], - names=['a', 'b']) + ( 3, nan)], + names=['a', 'b']) """ ), ), @@ -75,10 +75,10 @@ def test_multiindex_repr(pmi, max_seq_items): textwrap.dedent( """ MultiIndex([(, 'abc'), - ( nan, ), + (, nan), ( 2.0, 'xyz'), - ( 3.0, )], - names=['a', 'b']) + ( 3.0, nan)], + names=['a', 'b']) """ ), ), @@ -95,10 +95,10 @@ def test_multiindex_repr(pmi, max_seq_items): textwrap.dedent( """ MultiIndex([( 'NaT', 'abc'), - ('1970-01-01 00:00:00.000000001', ), + ('1970-01-01 00:00:00.000000001', nan), ('1970-01-01 00:00:00.000000002', 'xyz'), - ('1970-01-01 00:00:00.000000003', )], - names=['a', 'b']) + ('1970-01-01 00:00:00.000000003', nan)], + names=['a', 'b']) """ ), ), @@ -115,10 +115,10 @@ def test_multiindex_repr(pmi, max_seq_items): textwrap.dedent( """ MultiIndex([( 'NaT', 'abc', 0.345), - ('1970-01-01 00:00:00.000000001', , ), + ('1970-01-01 00:00:00.000000001', nan, ), ('1970-01-01 00:00:00.000000002', 'xyz', 100.0), - ('1970-01-01 00:00:00.000000003', , 10.0)], - names=['a', 'b', 'c']) + ('1970-01-01 00:00:00.000000003', nan, 10.0)], + names=['a', 'b', 'c']) """ ), ), @@ -135,10 +135,10 @@ def test_multiindex_repr(pmi, max_seq_items): textwrap.dedent( """ MultiIndex([('abc', NaT, 0.345), - ( , '0 days 00:00:00.000000001', ), + ( nan, '0 days 00:00:00.000000001', ), ('xyz', '0 days 00:00:00.000000002', 100.0), - ( , '0 days 00:00:00.000000003', 10.0)], - names=['a', 'b', 'c']) + ( nan, '0 days 00:00:00.000000003', 10.0)], + names=['a', 'b', 'c']) """ ), ), @@ -155,10 +155,10 @@ def test_multiindex_repr(pmi, max_seq_items): textwrap.dedent( """ MultiIndex([(0.345, 'abc'), - ( , ), + ( , nan), (100.0, 'xyz'), - ( 10.0, )], - names=['c', 'a']) + ( 10.0, nan)], + names=['c', 'a']) """ ), ), @@ -176,11 +176,11 @@ def test_multiindex_repr(pmi, max_seq_items): .index, textwrap.dedent( """ - MultiIndex([(NaT, ), - (NaT, ), - (NaT, ), - (NaT, )], - names=['b', 'a']) + MultiIndex([(NaT, nan), + (NaT, nan), + (NaT, nan), + (NaT, nan)], + names=['b', 'a']) """ ), ), @@ -206,11 +206,11 @@ def test_multiindex_repr(pmi, max_seq_items): textwrap.dedent( """ MultiIndex([( 1, 'abc', 0.3232, ), - ( 2, 'def, hi, bye', nan, 100), - (, , 1.0, 2000324), + ( 2, 'def, hi, bye', , 100), + (, nan, 1.0, 2000324), ( 3, ', one, two, three, four', , ), - ( 5, , -0.34534, )], - names=['a', 'b', 'c', 'd']) + ( 5, nan, -0.34534, )], + names=['a', 'b', 'c', 'd']) """ ), ), @@ -236,11 +236,11 @@ def test_multiindex_repr(pmi, max_seq_items): textwrap.dedent( """ MultiIndex([( 'abc', 1, 0.3232, ), - ( 'def, hi, bye', 2, nan, 100), - ( , , 1.0, 2000324), + ( 'def, hi, bye', 2, , 100), + ( nan, , 1.0, 2000324), (', one, two, three, four', 3, , ), - ( , 5, -0.34534, )], - names=['b', 'a', 'c', 'd']) + ( nan, 5, -0.34534, )], + names=['b', 'a', 'c', 'd']) """ ), ), @@ -266,11 +266,11 @@ def test_multiindex_repr(pmi, max_seq_items): textwrap.dedent( """ MultiIndex([('(abc', 'abc', 0.3232, ), - ( '2', 'def, hi, bye', nan, 100), - ( , , 1.0, 2000324), + ( '2', 'def, hi, bye', , 100), + ( nan, nan, 1.0, 2000324), ( '3', ', one, two, three, four', , ), - ( '5', , -0.34534, )], - names=['a', 'b', 'c', 'd']) + ( '5', nan, -0.34534, )], + names=['a', 'b', 'c', 'd']) """ ), ), diff --git a/python/cudf/cudf/tests/indexes/rangeindex/methods/test_rename.py b/python/cudf/cudf/tests/indexes/rangeindex/methods/test_rename.py index 242601a1c8bc..6fa6685c05d9 100644 --- a/python/cudf/cudf/tests/indexes/rangeindex/methods/test_rename.py +++ b/python/cudf/cudf/tests/indexes/rangeindex/methods/test_rename.py @@ -1,6 +1,7 @@ # SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 +import numpy as np import pandas as pd import cudf @@ -9,7 +10,9 @@ def test_rename_shallow_copy(): idx = pd.Index([1]) result = idx.rename("a") - assert idx.to_numpy(copy=False) is result.to_numpy(copy=False) + assert np.shares_memory( + idx.to_numpy(copy=False), result.to_numpy(copy=False) + ) idx = cudf.Index([1]) result = idx.rename("a") diff --git a/python/cudf/cudf/tests/indexes/test_interval.py b/python/cudf/cudf/tests/indexes/test_interval.py index 6cc096bac2c8..8042e5d00f86 100644 --- a/python/cudf/cudf/tests/indexes/test_interval.py +++ b/python/cudf/cudf/tests/indexes/test_interval.py @@ -1,12 +1,12 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np import pandas as pd import pyarrow as pa import pytest +from packaging.version import parse import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.core.index import IntervalIndex, interval_range from cudf.testing import assert_eq @@ -42,20 +42,6 @@ def test_interval_to_arrow(): ] -def assert_with_pandas_2_bug(pindex, gindex): - # pandas upcasts to 64 bit https://github.com/pandas-dev/pandas/issues/57268 - # using Series to use check_dtype - if gindex.dtype.subtype.kind == "f": - gindex = gindex.astype( - cudf.IntervalDtype(subtype="float64", closed=gindex.dtype.closed) - ) - elif gindex.dtype.subtype.kind == "i": - gindex = gindex.astype( - cudf.IntervalDtype(subtype="int64", closed=gindex.dtype.closed) - ) - assert_eq(pd.Series(pindex), cudf.Series(gindex), check_dtype=False) - - @pytest.mark.parametrize("closed", ["left", "right", "both", "neither"]) @pytest.mark.parametrize("start", [0, 1, 2, 3]) @pytest.mark.parametrize("end", [4, 5, 6, 7]) @@ -106,7 +92,7 @@ def test_interval_range_freq_basic_dtype(start_t, end_t, freq_t): gindex = cudf.interval_range( start=start, end=end, freq=freq, closed="left" ) - assert_with_pandas_2_bug(pindex, gindex) + assert_eq(pindex, gindex) @pytest.mark.parametrize("closed", ["left", "right", "both", "neither"]) @@ -135,28 +121,30 @@ def test_interval_range_periods_basic_dtype(start_t, end_t, periods_t): gindex = cudf.interval_range( start=start, end=end, periods=periods, closed="left" ) + if ( + parse(np.__version__) < parse("2") + and pindex.dtype.subtype != gindex.dtype.subtype + ): + # NEP 50 in numpy 2 changes pandas' subtype result to match cudf + pindex = pindex.astype( + pd.IntervalDtype(gindex.dtype.subtype, pindex.dtype.closed) + ) assert_eq(pindex, gindex) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Does not warn on older versions of pandas", -) -def test_interval_range_periods_warnings(): +def test_interval_range_periods_non_integer_raises(): start_val, end_val, periods_val = 0, 4, 1.0 - with pytest.warns(FutureWarning): - pindex = pd.interval_range( + with pytest.raises(TypeError): + pd.interval_range( start=start_val, end=end_val, periods=periods_val, closed="left" ) - with pytest.warns(FutureWarning): - gindex = cudf.interval_range( + with pytest.raises(TypeError): + cudf.interval_range( start=start_val, end=end_val, periods=periods_val, closed="left" ) - assert_eq(pindex, gindex) - @pytest.mark.parametrize("closed", ["left", "right", "both", "neither"]) @pytest.mark.parametrize("periods", [1, 2, 3]) @@ -184,7 +172,17 @@ def test_interval_range_periods_freq_end_dtype(periods_t, freq_t, end_t): gindex = cudf.interval_range( end=end, freq=freq, periods=periods, closed="left" ) - assert_with_pandas_2_bug(pindex, gindex) + if ( + parse(np.__version__) < parse("2") + and pindex.dtype.subtype != gindex.dtype.subtype + ): + # NEP 50 in numpy 2 changes pandas' subtype result to match cudf + pindex = pindex.astype( + pd.IntervalDtype( + subtype=gindex.dtype.subtype, closed=pindex.dtype.closed + ) + ) + assert_eq(pindex, gindex) @pytest.mark.parametrize("closed", ["left", "right", "both", "neither"]) @@ -213,7 +211,17 @@ def test_interval_range_periods_freq_start_dtype(periods_t, freq_t, start_t): gindex = cudf.interval_range( start=start, freq=freq, periods=periods, closed="left" ) - assert_with_pandas_2_bug(pindex, gindex) + if ( + parse(np.__version__) < parse("2") + and pindex.dtype.subtype != gindex.dtype.subtype + ): + # NEP 50 in numpy 2 changes pandas' subtype result to match cudf + pindex = pindex.astype( + pd.IntervalDtype( + subtype=gindex.dtype.subtype, closed=pindex.dtype.closed + ) + ) + assert_eq(pindex, gindex) @pytest.mark.parametrize("closed", ["right", "left", "both", "neither"]) @@ -290,26 +298,18 @@ def test_interval_index_from_breaks(closed): [ (0.0, None, 0.2, 5), (0.0, 1.0, None, 5), - pytest.param( + ( 0.0, 1.0, 0.2, None, - marks=pytest.mark.skipif( - condition=PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="https://github.com/pandas-dev/pandas/pull/54477", - ), ), (None, 1.0, 0.2, 5), - pytest.param( + ( 0.0, 1.0, 0.1, None, - marks=pytest.mark.xfail( - condition=PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="https://github.com/pandas-dev/pandas/pull/54477", - ), ), (0.0, 1.0, None, 10), (0.0, None, 0.25, 4), diff --git a/python/cudf/cudf/tests/indexes/test_np_ufuncs.py b/python/cudf/cudf/tests/indexes/test_np_ufuncs.py index 360e29029973..e5ffa8ac76ba 100644 --- a/python/cudf/cudf/tests/indexes/test_np_ufuncs.py +++ b/python/cudf/cudf/tests/indexes/test_np_ufuncs.py @@ -1,27 +1,19 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import cupy as cp import numpy as np +import pandas as pd import pytest from packaging.version import parse import cudf -from cudf.core._compat import ( - PANDAS_LT_300, -) from cudf.testing import assert_eq def test_ufunc_index(request, numpy_ufunc): # Note: This test assumes that all ufuncs are unary or binary. - request.applymarker( - pytest.mark.xfail( - condition=numpy_ufunc == np.matmul and PANDAS_LT_300, - reason="Fixed by https://github.com/pandas-dev/pandas/pull/57079", - ) - ) request.applymarker( pytest.mark.xfail( condition=numpy_ufunc in {np.ceil, np.floor, np.trunc} @@ -30,6 +22,12 @@ def test_ufunc_index(request, numpy_ufunc): reason="https://github.com/cupy/cupy/issues/9018", ) ) + request.applymarker( + pytest.mark.xfail( + condition=numpy_ufunc == np.matmul, + reason="cuDF doesn't support matmul for Indexes yet", + ) + ) N = 100 # Avoid zeros in either array to skip division by 0 errors. Also limit the @@ -54,6 +52,35 @@ def test_ufunc_index(request, numpy_ufunc): assert_eq(got, expect, check_exact=False) +@pytest.mark.parametrize( + "ufunc", [np.add, np.logaddexp, np.greater, np.logical_and] +) +@pytest.mark.parametrize("reflect", [True, False]) +def test_binary_ufunc_index_series_returns_series(ufunc, reflect): + # ``np.ufunc(Index, Series)`` should defer to ``Series`` (which has + # higher priority than ``Index``) and return a ``Series``, matching + # pandas. Previously cudf's ``Index.__array_ufunc__`` handled the call + # itself and returned an ``Index``. + rng = np.random.default_rng(0) + a = rng.integers(low=1, high=10, size=20) + b = rng.integers(low=1, high=10, size=20) + + gidx = cudf.Index(a, name="name") + gser = cudf.Series(b, name="name") + pidx = pd.Index(a, name="name") + pser = pd.Series(b, name="name") + + if reflect: + got = ufunc(gser, gidx) + expect = ufunc(pser, pidx) + else: + got = ufunc(gidx, gser) + expect = ufunc(pidx, pser) + + assert type(got).__name__ == type(expect).__name__ + assert_eq(got, expect, check_exact=False) + + @pytest.mark.parametrize( "ufunc", [np.add, np.greater, np.greater_equal, np.logical_and] ) diff --git a/python/cudf/cudf/tests/input_output/test_avro.py b/python/cudf/cudf/tests/input_output/test_avro.py index d0f31828b3d2..9820c6c93344 100644 --- a/python/cudf/cudf/tests/input_output/test_avro.py +++ b/python/cudf/cudf/tests/input_output/test_avro.py @@ -15,7 +15,6 @@ import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq from cudf.testing.dataset_generator import rand_dataframe @@ -297,10 +296,6 @@ def get_days_from_epoch(date: datetime.date | None) -> int | None: @pytest.mark.parametrize("namespace", [None, "root_ns"]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas (datetime(9999, ...) too large)", -) def test_can_parse_avro_date_logical_type(namespace, nullable, prepend_null): avro_type = {"logicalType": "date", "type": "int"} if nullable: @@ -426,18 +421,20 @@ def test_alltypes_plain_avro(): data = [{column: row[column] for column in columns} for row in records] - # discard timezone information as we don't support it: expected = pd.DataFrame(data) - expected["timestamp_col"].dt.tz_localize(None) # The fastavro.reader supports the `'logicalType': 'timestamp-micros'` used # by the 'timestamp_col' column, which is converted into Python # datetime.datetime() objects (see output of pprint(records[0]) above). - # As we don't support that logical type yet in cudf, we need to convert to - # int64, then divide by 1000 to convert from nanoseconds to microseconds. - timestamps = expected["timestamp_col"].astype("int64") - timestamps //= 1000 - expected["timestamp_col"] = timestamps + # cudf reads this column as int64 (raw microseconds) because the logical + # type appears inside a union schema (['timestamp-micros', 'null']), so we + # convert the expected datetime values to int64 microseconds to match. + expected["timestamp_col"] = ( + expected["timestamp_col"] + .dt.tz_convert(None) + .astype("datetime64[us]") + .astype("int64") + ) # Furthermore, we need to force the 'int_col' into an int32, per the schema # definition. (It ends up as an int64 due to cudf.DataFrame() defaulting diff --git a/python/cudf/cudf/tests/input_output/test_csv.py b/python/cudf/cudf/tests/input_output/test_csv.py index cab4ff4ce37a..4a612a7bfd3e 100644 --- a/python/cudf/cudf/tests/input_output/test_csv.py +++ b/python/cudf/cudf/tests/input_output/test_csv.py @@ -15,13 +15,8 @@ import cudf from cudf import read_csv -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_VERSION, -) from cudf.testing import assert_eq -from cudf.testing._utils import assert_exceptions_equal, expect_warning_if +from cudf.testing._utils import assert_exceptions_equal @pytest.fixture @@ -131,6 +126,9 @@ def test_csv_reader_numeric_data(numeric_types_as_str, tmp_path): assert_eq(df, out) +@pytest.mark.skip( + reason="Disabled until https://github.com/rapidsai/cudf/pull/22094 is fixed" +) @pytest.mark.parametrize("parse_dates", [["date2"], [0], ["date1", 1, "bad"]]) def test_csv_reader_datetime(parse_dates): df = pd.DataFrame( @@ -292,10 +290,6 @@ def test_csv_reader_dtype_extremes(use_names, numeric_extremes_dataframe): assert_eq(gdf, pdf) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="https://github.com/pandas-dev/pandas/issues/52449", -) def test_csv_reader_skiprows_skipfooter(tmp_path, pd_mixed_dataframe): fname = tmp_path / "tmp_csvreader_file5.csv" @@ -373,7 +367,7 @@ def test_csv_reader_strings(tmp_path): ) assert len(df.columns) == 2 - assert df["text"].dtype == np.dtype("object") + assert df["text"].dtype == pd.StringDtype(na_value=np.nan) assert df["int"].dtype == np.dtype("int64") assert df["text"][0] == "a" assert df["text"][1] == "b" @@ -401,7 +395,7 @@ def test_csv_reader_strings_quotechars(tmp_path): ) assert len(df.columns) == 2 - assert df["text"].dtype == np.dtype("object") + assert df["text"].dtype == pd.StringDtype(na_value=np.nan) assert df["int"].dtype == np.dtype("int64") assert df["text"][0] == "a,\n" assert df["text"][1] == 'b "c" d' @@ -546,9 +540,9 @@ def test_csv_reader_NaN_values(): assert gdf.dtypes.iloc[0] == "int8" assert all(gdf["0"][idx] is cudf.NA for idx in range(len(gdf["0"]))) - # data type detection should evaluate the column to object if some nulls + # data type detection should evaluate the column to StringDtype if some nulls gdf = read_csv(StringIO(all_cells), header=None) - assert gdf.dtypes.iloc[0] == np.dtype("object") + assert gdf.dtypes.iloc[0] == pd.StringDtype(na_value=np.nan) def test_csv_reader_thousands(tmp_path): @@ -600,7 +594,7 @@ def test_csv_reader_buffer_strings(): df = read_csv(StringIO(buffer), names=names, dtype=dtypes, skiprows=1) assert len(df.columns) == 2 - assert df["text"].dtype == np.dtype("object") + assert df["text"].dtype == pd.StringDtype(na_value=np.nan) assert df["int"].dtype == np.dtype("int64") assert df["text"][0] == "a" assert df["text"][1] == "b" @@ -611,7 +605,7 @@ def test_csv_reader_buffer_strings(): BytesIO(str.encode(buffer)), names=names, dtype=dtypes, skiprows=1 ) assert len(df2.columns) == 2 - assert df2["text"].dtype == np.dtype("object") + assert df2["text"].dtype == pd.StringDtype(na_value=np.nan) assert df2["int"].dtype == np.dtype("int64") assert df2["text"][0] == "a" assert df2["text"][1] == "b" @@ -769,7 +763,7 @@ def test_csv_reader_bools_NA(): false_values=falses, ) assert len(df.columns) == 2 - assert df["text"].dtype == np.dtype("object") + assert df["text"].dtype == pd.StringDtype(na_value=np.nan) assert df["int"].dtype == np.dtype("int64") expected = pd.DataFrame( { @@ -899,7 +893,7 @@ def test_csv_reader_gzip_compression_strings(tmp_path): ) assert len(df.columns) == 2 - assert df["text"].dtype == np.dtype("object") + assert df["text"].dtype == pd.StringDtype(na_value=np.nan) assert df["int"].dtype == np.dtype("int64") assert df["text"][0] == "a" assert df["text"][1] == "b" @@ -975,16 +969,19 @@ def test_csv_reader_dtype_inference_whitespace(): def test_csv_reader_empty_dataframe(): dtypes = ["float64", "int64"] buffer = "float_point, integer" + dtype = dict(zip(buffer.split(","), dtypes, strict=True)) # should work fine with dtypes - df = read_csv(StringIO(buffer), dtype=dtypes) - assert df.shape == (0, 2) - assert all(df.dtypes == ["float64", "int64"]) + result = read_csv(StringIO(buffer), dtype=dtype) + expected = pd.read_csv(StringIO(buffer), dtype=dtype) + assert_eq(result, expected) # should default to string columns without dtypes - df = read_csv(StringIO(buffer)) - assert df.shape == (0, 2) - assert all(df.dtypes == ["object", "object"]) + result = read_csv(StringIO(buffer)) + expected = pd.read_csv(StringIO(buffer)).astype( + pd.StringDtype(na_value=np.nan) + ) + assert_eq(result, expected) def test_csv_reader_filenotfound(tmp_path): @@ -1204,34 +1201,6 @@ def test_csv_reader_prefix(): assert column_names[col] == prefix_str + str(col) -def test_csv_reader_delim_whitespace(): - buffer = "1 2 3\n4 5 6" - - # with header row - with pytest.warns(FutureWarning): - cu_df = read_csv(StringIO(buffer), delim_whitespace=True) - with expect_warning_if(PANDAS_GE_220): - pd_df = pd.read_csv(StringIO(buffer), delim_whitespace=True) - assert_eq(pd_df, cu_df) - - # without header row - with pytest.warns(FutureWarning): - cu_df = read_csv(StringIO(buffer), delim_whitespace=True, header=None) - with expect_warning_if(PANDAS_GE_220): - pd_df = pd.read_csv( - StringIO(buffer), delim_whitespace=True, header=None - ) - assert pd_df.shape == cu_df.shape - - # should raise an error if used with delimiter or sep - with pytest.raises(ValueError): - with pytest.warns(FutureWarning): - read_csv(StringIO(buffer), delim_whitespace=True, delimiter=" ") - with pytest.raises(ValueError): - with pytest.warns(FutureWarning): - read_csv(StringIO(buffer), delim_whitespace=True, sep=" ") - - def test_csv_reader_unnamed_cols(): # first and last columns are unnamed buffer = ",1,2,3,\n4,5,6,7,8" @@ -1503,7 +1472,7 @@ def test_csv_empty_file(tmp_path, contents): col_names = ["col1", "col2", "col3", "col4"] in_dtypes = ["int", "str", "float", "short"] - out_dtypes = ["int64", "object", "float64", "int16"] + out_dtypes = ["int64", pd.StringDtype(na_value=np.nan), "float64", "int16"] # Empty dataframe if no columns names specified or inferred df = read_csv(str(fname)) @@ -1519,7 +1488,7 @@ def test_csv_empty_file(tmp_path, contents): def test_csv_empty_buffer(contents): col_names = ["col1", "col2", "col3", "col4"] in_dtypes = ["int", "str", "float", "short"] - out_dtypes = ["int64", "object", "float64", "int16"] + out_dtypes = ["int64", pd.StringDtype(na_value=np.nan), "float64", "int16"] # Empty dataframe if no columns names specified or inferred df = read_csv(StringIO(contents)) @@ -1815,10 +1784,9 @@ def test_csv_writer_empty_dataframe(tmp_path): gdf.to_csv(df_fname, index=False) - df = cudf.read_csv(df_fname) - - assert df.shape == (0, 2) - assert all(df.dtypes == ["object", "object"]) + result = cudf.read_csv(df_fname) + expect = cudf.DataFrame({"float_point": [], "integer": []}, dtype="str") + assert_eq(expect, result) def test_csv_write_chunksize_corner_case(tmp_path): @@ -1884,12 +1852,17 @@ def test_csv_write_empty_dataframe(idx, index): None: [12, 12, 32, 44], } ), - pd.DataFrame( - { - np.nan: [1, 2, 3, None], - "": ["a", "v", None, None], - None: [12, 12, 32, 44], - } + pytest.param( + pd.DataFrame( + { + np.nan: [1, 2, 3, None], + "": ["a", "v", None, None], + None: [12, 12, 32, 44], + } + ), + marks=pytest.mark.xfail( + reason="https://github.com/rapidsai/cudf/issues/16533, np.nan/None coerced to NA since pandas 3" + ), ), pd.DataFrame({"": [1, None, 3, 4]}), pd.DataFrame({None: [1, None, 3, 4]}), @@ -1921,7 +1894,7 @@ def test_csv_write_dataframe_na_rep(df, na_rep): {"a": "int32", "b": "float64", "c": "uint8"}, int, str, - object, + pd.StringDtype(na_value=np.nan), ], ) def test_csv_reader_dtypes(dtype): @@ -2003,8 +1976,7 @@ def test_csv_writer_category(df): {"a": "category"}, {"a": pd.CategoricalDtype([1, 2, 3])}, {"b": pd.CategoricalDtype(["a", "b", "c"])}, - {"b": pd.CategoricalDtype(["b", "a"]), "a": "str"}, - pd.CategoricalDtype(["a", "b"]), + {"b": pd.CategoricalDtype(["b", "a", "c"]), "a": "str"}, ], ) def test_csv_reader_category(dtype): diff --git a/python/cudf/cudf/tests/input_output/test_feather.py b/python/cudf/cudf/tests/input_output/test_feather.py index 3c517aeb62d8..14c305ebd7c5 100644 --- a/python/cudf/cudf/tests/input_output/test_feather.py +++ b/python/cudf/cudf/tests/input_output/test_feather.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2018-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2018-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 from string import ascii_letters @@ -62,5 +62,13 @@ def test_feather_writer(tmp_path, pdf): expect = pa.feather.read_table(pdf_fname) got = pa.feather.read_table(gdf_fname) - + # For empty dataframes, pandas writes category dict with null values type + # while cudf writes it with string values type. Cast to match. + if len(expect) == 0 and "col_category" in expect.column_names: + idx = expect.schema.get_field_index("col_category") + expect = expect.set_column( + idx, + got.schema.field(idx), + expect.column(idx).cast(got.schema.field(idx).type), + ) assert pa.Table.equals(expect, got) diff --git a/python/cudf/cudf/tests/input_output/test_json.py b/python/cudf/cudf/tests/input_output/test_json.py index f07783ff627a..dcd10e689cec 100644 --- a/python/cudf/cudf/tests/input_output/test_json.py +++ b/python/cudf/cudf/tests/input_output/test_json.py @@ -13,7 +13,6 @@ import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq from cudf.testing._utils import ( DATETIME_TYPES, @@ -115,7 +114,6 @@ def test_json_reader(index, compression, orient, pdf, tmp_path): got_df = cudf.read_json(path_df, orient=orient, compression=compression) if len(expect_df) == 0: expect_df = expect_df.reset_index(drop=True) - expect_df.columns = expect_df.columns.astype("object") if len(got_df) == 0: got_df = got_df.reset_index(drop=True) @@ -313,9 +311,7 @@ def test_cudf_json_writer_sinks(sink, tmp_path): assert f.read() == '[{"a":1,"b":4},{"a":2,"b":5},{"a":3,"b":6}]' -@pytest.fixture( - params=["string", "filepath", "pathobj", "bytes_io", "string_io", "url"] -) +@pytest.fixture(params=["filepath", "pathobj", "bytes_io", "string_io", "url"]) def json_input(request, tmp_path): input_type = request.param buffer = "[1, 2, 3]\n[4, 5, 6]\n[7, 8, 9]\n" @@ -326,8 +322,6 @@ def json_input(request, tmp_path): with open(str(fname), "w") as fp: fp.write(buffer) - if input_type == "string": - return buffer if input_type == "filepath": return str(fname) if input_type == "pathobj": @@ -340,10 +334,6 @@ def json_input(request, tmp_path): return Path(fname).as_uri() -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.filterwarnings("ignore:Using CPU") def test_json_lines_basic(json_input, engine): can_warn = isinstance(json_input, str) and not json_input.endswith(".json") @@ -368,10 +358,6 @@ def test_nonexistent_json_correct_error(engine): cudf.read_json(json_input, engine=engine) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.filterwarnings("ignore:Using CPU") def test_json_lines_multiple(tmp_path, json_input, engine): if engine == "pandas": @@ -395,10 +381,6 @@ def test_json_lines_multiple(tmp_path, json_input, engine): np.testing.assert_array_equal(pd_df[pd_col], cu_df[cu_col].to_numpy()) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) def test_json_read_directory(tmp_path, json_input, engine): if engine == "pandas": pytest.skip("pandas engine does not support directories") @@ -840,8 +822,19 @@ def test_json_empty_types(): {"c": {"d": []}} {"e": [{}]} """ - df = cudf.read_json(StringIO(json_str), orient="records", lines=True) - pdf = pd.read_json(StringIO(json_str), orient="records", lines=True) + df = cudf.read_json( + StringIO(json_str), orient="records", lines=True + ).to_pandas(arrow_type=True) + pdf = pd.read_json( + StringIO(json_str), + orient="records", + lines=True, + dtype_backend="pyarrow", + ) + + # TODO: Remove this workaround after + # https://github.com/pandas-dev/pandas/issues/65034 is fixed. + pdf = pdf.astype(df.dtypes) assert_eq(df, pdf) @@ -1160,10 +1153,6 @@ def test_chunked_nested_json_reader(self, tag, data, chunk_size): df = cudf.concat(chunks, ignore_index=True) assert expected.to_arrow().equals(df.to_arrow()) - @pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="https://github.com/pandas-dev/pandas/pull/57439", - ) def test_order_nested_json_reader(self, tag, data): expected = pd.read_json(StringIO(data), lines=True) target = cudf.read_json(StringIO(data), lines=True) @@ -1344,8 +1333,18 @@ def _replace_with_nulls(df, replace_items): # both json lines and json string tested. json_string = "[" + jsonl_string.replace("\n", ",") + "]" - pdf = pd.read_json(StringIO(jsonl_string), orient="records", lines=True) - pdf2 = pd.read_json(StringIO(json_string), orient="records", lines=False) + pdf = pd.read_json( + StringIO(jsonl_string), + orient="records", + lines=True, + dtype_backend="pyarrow", + ) + pdf2 = pd.read_json( + StringIO(json_string), + orient="records", + lines=False, + dtype_backend="pyarrow", + ) assert_eq(pdf, pdf2) # replace list elements with None if it has dict and non-dict # in above test cases, these items are mixed with dict/list items @@ -1364,8 +1363,14 @@ def _replace_with_nulls(df, replace_items): ) if """[{"0": 123}, {}]""" not in jsonl_string: # {} in pandas is represented as {"0": None} in cudf - assert_eq(gdf, pdf) - assert_eq(gdf2, pdf) + actual_gdf = gdf.to_pandas(arrow_type=True) + # TODO: Remove this workaround after + # https://github.com/pandas-dev/pandas/issues/65034 is fixed. + pdf = pdf.astype(actual_gdf.dtypes) + assert_eq(actual_gdf, pdf) + + actual_gdf2 = gdf2.to_pandas(arrow_type=True) + assert_eq(actual_gdf2, pdf) pa_table_pdf = pa.Table.from_pandas( pdf, schema=gdf.to_arrow().schema, safe=False ) diff --git a/python/cudf/cudf/tests/input_output/test_orc.py b/python/cudf/cudf/tests/input_output/test_orc.py index 1f99c61edd32..81b38ed51ed1 100644 --- a/python/cudf/cudf/tests/input_output/test_orc.py +++ b/python/cudf/cudf/tests/input_output/test_orc.py @@ -16,7 +16,6 @@ from pyarrow import orc import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.io.orc import ( ORCWriter, is_supported_read_orc, @@ -142,10 +141,6 @@ def test_orc_reader_filepath_or_buffer(path_or_buf, src): assert_eq(expect, got) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Bug in older version of pandas", -) def test_orc_reader_trailing_nulls(datadir): path = datadir / "TestOrcFile.nulls-at-end-snappy.orc" expect = pd.read_orc(path) @@ -639,7 +634,11 @@ def normalized_equals(value1, value2): if isinstance(value1, float) or isinstance(value2, float): return np.isclose(value1, value2) - return value1 == value2 + try: + assert_eq(value1, value2) + return True + except AssertionError: + return False @pytest.mark.parametrize("stats_freq", ["STRIPE", "ROWGROUP"]) @@ -1505,8 +1504,10 @@ def test_orc_writer_lists_empty_rg(): df = cudf.read_orc(buffer) assert_eq(df, cudf_in) - pdf_out = pd.read_orc(buffer) - assert_eq(pdf_in, pdf_out) + # Compare via pyarrow since pd.read_orc converts nullable integer + # lists to float arrays ([None] -> [nan]), losing the original types. + pa_out = orc.ORCFile(buffer).read() + assert pa_out.equals(cudf_in.to_arrow()) def test_statistics_sum_overflow(): @@ -1679,24 +1680,18 @@ def run_orc_columns_and_index_param(index_obj, index, columns): expected = pd.read_orc(buffer, columns=columns) got = cudf.read_orc(buffer, columns=columns) - assert_eq(expected, got, check_index_type=True) + # When columns is an empty list, pandas uses dtype='object' for + # the empty column Index while cudf uses dtype='str'. Avoid + # checking the column index type in that case. + check_col_type = columns is None or len(columns) > 0 + assert_eq( + expected, got, check_index_type=True, check_column_type=check_col_type + ) @pytest.mark.parametrize("index_obj", [None, [10, 11, 12], ["x", "y", "z"]]) @pytest.mark.parametrize("index", [True, False, None]) -@pytest.mark.parametrize( - "columns", - [ - None, - pytest.param( - [], - marks=pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Bug in older version of pandas", - ), - ), - ], -) +@pytest.mark.parametrize("columns", [None, []]) def test_orc_columns_and_index_param(index_obj, index, columns): run_orc_columns_and_index_param(index_obj, index, columns) diff --git a/python/cudf/cudf/tests/input_output/test_parquet.py b/python/cudf/cudf/tests/input_output/test_parquet.py index d0f786a649f3..0e2d953bf8fa 100644 --- a/python/cudf/cudf/tests/input_output/test_parquet.py +++ b/python/cudf/cudf/tests/input_output/test_parquet.py @@ -22,7 +22,6 @@ from pyarrow import parquet as pq import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.io.parquet import ( ParquetDatasetWriter, ParquetWriter, @@ -113,7 +112,6 @@ def build_pdf(num_columns, day_resolution_timestamps): "float64", "datetime64[ms]", "datetime64[us]", - "str", ] nrows = num_columns @@ -159,11 +157,21 @@ def build_pdf(num_columns, day_resolution_timestamps): # Create non-numeric categorical data otherwise parquet may typecast it data = [ascii_letters[rng.integers(0, 52)] for i in range(nrows)] - test_pdf["col_category"] = pd.Series(data, dtype="category") + test_pdf["col_category"] = pd.Series( + data, + dtype=pd.CategoricalDtype( + categories=pd.Index( + list(dict.fromkeys(data)), + dtype=pd.StringDtype(na_value=np.nan), + ) + ), + ) # Create non-numeric str data data = [ascii_letters[rng.integers(0, 52)] for i in range(nrows)] - test_pdf["col_str"] = pd.Series(data, dtype="str") + test_pdf["col_str"] = pd.Series( + data, dtype=pd.StringDtype(na_value=np.nan) + ) return test_pdf @@ -246,14 +254,29 @@ def test_parquet_reader_basic(tmp_path, pdf, columns, engine, compression): expect = pd.read_parquet(parquet_file, columns=columns) got = cudf.read_parquet(parquet_file, engine=engine, columns=columns) - # PANDAS returns category objects whereas cuDF returns hashes + # pandas returns category objects whereas cuDF returns hashes if engine == "cudf": if "col_category" in expect.columns: expect = expect.drop(columns=["col_category"]) if "col_category" in got.columns: got = got.drop(columns=["col_category"]) - assert_eq(expect, got) + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + if len(pdf.index) == 0: + expect.index = expect.index.astype(got.index.dtype) + expect.columns = expect.columns.astype(got.columns.dtype) + + if "col_category" in expect.columns: + # pyarrow read_parquet reader returns category[object] instead of category[pd.StringDtype] + casted_categories = expect["col_category"].dtype.categories.astype( + got["col_category"].dtype.categories.dtype + ) + expect["col_category"] = expect["col_category"].cat.set_categories( + casted_categories + ) + assert_eq(expect, got, check_dtype=False) @pytest.mark.filterwarnings("ignore:Using CPU") @@ -283,8 +306,6 @@ def test_parquet_reader_strings(tmp_path, has_null): assert os.path.exists(fname) gdf = cudf.read_parquet(fname, engine="cudf") - - assert gdf["b"].dtype == np.dtype("object") assert_eq(gdf["b"], df["b"]) @@ -312,14 +333,14 @@ def test_parquet_reader_index_col(tmp_path, index_col, columns): pdf = pd.read_parquet(fname, columns=columns) gdf = cudf.read_parquet(fname, engine="cudf", columns=columns) + # pyarrow read_parquet reader returns Index[object] instead of Index[pd.StringDtype] + pdf.columns = pdf.columns.astype(gdf.columns.dtype) assert_eq(pdf, gdf, check_categorical=False) @pytest.mark.parametrize("pandas_compat", [True, False]) -@pytest.mark.parametrize( - "columns", [["a"], ["d"], ["a", "b"], ["a", "d"], None] -) +@pytest.mark.parametrize("columns", [["a"], ["d"], ["a", "d"], None]) def test_parquet_reader_pandas_metadata(tmp_path, columns, pandas_compat): df = pd.DataFrame( { @@ -343,11 +364,7 @@ def test_parquet_reader_pandas_metadata(tmp_path, columns, pandas_compat): got = cudf.read_parquet( fname, columns=columns, use_pandas_metadata=pandas_compat ) - - if pandas_compat or columns is None or "b" in columns: - assert got.index.name == "b" - else: - assert got.index.name is None + assert got.index.name == "b" assert_eq(expect, got, check_categorical=False) @@ -460,9 +477,9 @@ def test_parquet_read_filtered_everything(tmp_path): # Check filter df_filtered = cudf.read_parquet(fname, filters=[("x", "==", 12)]) - assert_eq(len(df_filtered), 0) - assert_eq(df_filtered["x"].dtype, "int64") - assert_eq(df_filtered["y"].dtype, "object") + assert len(df_filtered) == 0 + assert df_filtered["x"].dtype == "int64" + assert df_filtered["y"].dtype == pd.StringDtype(na_value=np.nan) def test_parquet_read_filtered_multiple_files(tmp_path): @@ -1545,7 +1562,10 @@ def string_list_gen_wrapped(x, y): ) cdf2 = cudf.from_pandas(pd.read_parquet(cudf_fname)) # string columns can result in StringDtype vs object with nulls - assert_eq(cdf2, cdf, check_dtype=not add_nulls) + if delta_num_rows == 1: + assert_eq(cdf2, cdf.to_pandas(arrow_type=True), check_dtype=False) + else: + assert_eq(cdf2, cdf, check_dtype=not add_nulls) @pytest.mark.parametrize( @@ -2287,19 +2307,17 @@ def test_read_parquet_partitioned_filtered( row_groups=row_groups, categorical_partitions=use_cat, ) - expect["b"] = expect["b"].astype(str) + expect["c"] = expect["c"].astype(int) if use_cat: - assert got.dtypes["b"] == "category" assert got.dtypes["c"] == "category" - got["b"] = got["b"].astype(str) got["c"] = got["c"].astype(int) else: # Check that we didn't get categorical # columns, but convert back to categorical # for comparison with pandas - assert got.dtypes["b"] == "object" - assert got.dtypes["c"] == "int" + assert got.dtypes["b"] == pd.StringDtype(na_value=np.nan) + got["b"] = got["b"].astype(expect["b"].dtype) assert_eq(expect, got) @@ -2472,8 +2490,8 @@ def test_parquet_writer_list_large_mixed(tmp_path): gdf.to_parquet(fname) assert os.path.exists(fname) - got = pd.read_parquet(fname) - assert_eq(expect, got) + got = cudf.read_parquet(fname) + assert_eq(gdf, got) @pytest.mark.parametrize("store_schema", [True, False]) @@ -2525,7 +2543,8 @@ def test_parquet_nullable_boolean(tmp_path, engine): result = cudf.read_parquet(pandas_path, engine=engine) if engine == "cudf": # TODO: Preserve BooleanDtype from the parquet metadata? - expected["a"] = expected["a"].astype("object") + result["a"] = result["a"].astype(pd.BooleanDtype()) + assert_eq(result, expected) @@ -2816,6 +2835,15 @@ def test_parquet_writer_nested(tmp_path, data): assert os.path.exists(fname) got = pd.read_parquet(fname) + + # Normalize expect via a pandas parquet round-trip so that nested + # nullable integer lists (stored as Python lists with None) match + # the representation pyarrow produces when reading parquet back + # (numpy float arrays with NaN, since numpy int can't hold NaN). + pd_fname = tmp_path / "test_parquet_writer_nested_pd.parquet" + expect.to_parquet(pd_fname) + expect = pd.read_parquet(pd_fname) + assert_eq(expect, got) @@ -2906,6 +2934,11 @@ def test_parquet_writer_nulls_pandas_read(tmp_path, pdf): gdf = gdf.drop(columns="col_datetime64[us]") got = got.drop(columns="col_datetime64[ms]") got = got.drop(columns="col_datetime64[us]") + if len(got.index) == 0: + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + got.index = got.index.astype(gdf.index.dtype) assert_eq(gdf.to_pandas(nullable=nullable), got) @@ -3167,10 +3200,6 @@ def test_parquet_reader_rle_boolean(datadir): # a list column in a schema, the cudf reader was confusing # nesting information between a list column and a subsequent # string column, ultimately causing a crash. -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Older versions of pandas do not have DataFrame.map()", -) def test_parquet_reader_one_level_list2(datadir): # we are reading in a file containing binary types, but cudf returns # those as strings. so we have to massage the pandas data to get @@ -3303,7 +3332,7 @@ def test_parquet_columns_and_index_param(index, columns): expected = pd.read_parquet(buffer, columns=columns) got = cudf.read_parquet(buffer, columns=columns) - if columns == [] and index in {False, None}: + if columns == []: # cuDF returns RangeIndex columns compared # to pandas' Index[object] columns got.columns = expected.columns @@ -4759,6 +4788,11 @@ def test_parquet_decompression( # Read the Parquet file back into a DataFrame got = cudf.read_parquet(buffer) + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + if len(pdf_day_timestamps.index) == 0: + expect.index = expect.index.astype(got.index.dtype) assert_eq(expect, got) diff --git a/python/cudf/cudf/tests/options/test_options.py b/python/cudf/cudf/tests/options/test_options.py index 938f51a50eac..1307b945e16f 100644 --- a/python/cudf/cudf/tests/options/test_options.py +++ b/python/cudf/cudf/tests/options/test_options.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 from contextlib import redirect_stdout @@ -46,9 +46,6 @@ def validator(x): del cudf.options._OPTIONS["even_option"] -# These tests overwrite existing options so the copy_on_write option will not be valid -# to set during the lifetime of these tests. -@pytest.mark.no_copy_on_write @pytest.mark.usefixtures("odd_option", "even_option") class TestCleanOptions: def test_option_get_set(odd_option): diff --git a/python/cudf/cudf/tests/private_objects/test_column.py b/python/cudf/cudf/tests/private_objects/test_column.py index 5cd3c11e5d36..d3332e3979f1 100644 --- a/python/cudf/cudf/tests/private_objects/test_column.py +++ b/python/cudf/cudf/tests/private_objects/test_column.py @@ -9,10 +9,6 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.core.column.column import _can_values_be_equal, as_column from cudf.core.column.decimal import ( Decimal32Column, @@ -49,7 +45,10 @@ def random_ints(dtype, size): data = random_ints(np.int64, size) elif dtype.kind == "U": # Unicode strings of integers like "12345" + # As of pandas 3.0, pandas interprets numpy string type as object data = random_ints(np.int64, size).astype(dtype.str) + data = pd.array(data, dtype=pd.StringDtype(na_value=np.nan)) + dtype = None elif dtype.kind == "f": # floats in [0.0, 1.0) data = rng.random(size=size, dtype=dtype) @@ -451,10 +450,6 @@ def test_string_int_to_ipv4_dtype_fail(numeric_types_as_str): gsr._column.int2ip() -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas.", -) def test_datetime_can_cast_safely(): sr = cudf.Series( ["1679-01-01", "2000-01-31", "2261-01-01"], dtype="datetime64[ms]" diff --git a/python/cudf/cudf/tests/reshape/test_concat.py b/python/cudf/cudf/tests/reshape/test_concat.py index 5da14c5e8f26..28ee6c70e748 100644 --- a/python/cudf/cudf/tests/reshape/test_concat.py +++ b/python/cudf/cudf/tests/reshape/test_concat.py @@ -1,8 +1,6 @@ # SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 -import warnings -from contextlib import contextmanager from decimal import Decimal import numpy as np @@ -10,10 +8,9 @@ import pytest import cudf -from cudf.core._compat import PANDAS_GE_220 from cudf.core.dtypes import Decimal32Dtype, Decimal64Dtype, Decimal128Dtype from cudf.testing import assert_eq -from cudf.testing._utils import assert_exceptions_equal, expect_warning_if +from cudf.testing._utils import assert_exceptions_equal @pytest.fixture(params=["outer", "inner"]) @@ -21,20 +18,6 @@ def join(request): return request.param -@contextmanager -def _hide_concat_empty_dtype_warning(): - with warnings.catch_warnings(): - # Ignoring warnings in this test as warnings are - # being caught and validated in other tests. - warnings.filterwarnings( - "ignore", - "The behavior of array concatenation with empty entries " - "is deprecated.", - category=FutureWarning, - ) - yield - - def make_frames(index=None, nulls="none"): rng = np.random.default_rng(seed=0) df = pd.DataFrame( @@ -84,11 +67,8 @@ def test_concat_dataframe(index, nulls, axis_0): df_empty1 = gdf_empty1.to_pandas() # DataFrame - with _hide_concat_empty_dtype_warning(): - res = cudf.concat( - [gdf, gdf2, gdf, gdf_empty1], axis=axis_0 - ).to_pandas() - sol = pd.concat([df, df2, df, df_empty1], axis=axis_0) + res = cudf.concat([gdf, gdf2, gdf, gdf_empty1], axis=axis_0).to_pandas() + sol = pd.concat([df, df2, df, df_empty1], axis=axis_0) assert_eq( res, sol, @@ -121,7 +101,7 @@ def test_concat_dataframe(index, nulls, axis_0): ) def test_concat_all_nulls(values): pa = pd.Series(values) - pb = pd.Series([None]) + pb = pd.Series([None], dtype=pa.dtype) ps = pd.concat([pa, pb]) ga = cudf.Series(values) @@ -457,84 +437,53 @@ def test_concat_mixed_input(): [pd.Series([1, 2, 3]), pd.DataFrame({"a": []})], [pd.Series([], dtype="float64"), pd.DataFrame({"a": []})], [pd.Series([], dtype="float64"), pd.DataFrame({"a": [1, 2]})], - pytest.param( - [ - pd.Series([1, 2, 3.0, 1.2], name="abc"), - pd.DataFrame({"a": [1, 2]}), - ], - marks=pytest.mark.skipif( - not PANDAS_GE_220, - reason="https://github.com/pandas-dev/pandas/pull/56365", + [ + pd.Series([1, 2, 3.0, 1.2], name="abc"), + pd.DataFrame({"a": [1, 2]}), + ], + [ + pd.Series( + [1, 2, 3.0, 1.2], name="abc", index=[100, 110, 120, 130] ), - ), - pytest.param( - [ - pd.Series( - [1, 2, 3.0, 1.2], name="abc", index=[100, 110, 120, 130] - ), - pd.DataFrame({"a": [1, 2]}), - ], - marks=pytest.mark.skipif( - not PANDAS_GE_220, - reason="https://github.com/pandas-dev/pandas/pull/56365", + pd.DataFrame({"a": [1, 2]}), + ], + [ + pd.Series( + [1, 2, 3.0, 1.2], name="abc", index=["a", "b", "c", "d"] ), - ), - pytest.param( - [ - pd.Series( - [1, 2, 3.0, 1.2], name="abc", index=["a", "b", "c", "d"] - ), - pd.DataFrame({"a": [1, 2]}, index=["a", "b"]), - ], - marks=pytest.mark.skipif( - not PANDAS_GE_220, - reason="https://github.com/pandas-dev/pandas/pull/56365", + pd.DataFrame({"a": [1, 2]}, index=["a", "b"]), + ], + [ + pd.Series( + [1, 2, 3.0, 1.2, 8, 100], + name="New name", + index=["a", "b", "c", "d", "e", "f"], ), - ), - pytest.param( - [ - pd.Series( - [1, 2, 3.0, 1.2, 8, 100], - name="New name", - index=["a", "b", "c", "d", "e", "f"], - ), - pd.DataFrame( - {"a": [1, 2, 4, 10, 11, 12]}, - index=["a", "b", "c", "d", "e", "f"], - ), - ], - marks=pytest.mark.skipif( - not PANDAS_GE_220, - reason="https://github.com/pandas-dev/pandas/pull/56365", + pd.DataFrame( + {"a": [1, 2, 4, 10, 11, 12]}, + index=["a", "b", "c", "d", "e", "f"], ), - ), - pytest.param( - [ - pd.Series( - [1, 2, 3.0, 1.2, 8, 100], - name="New name", - index=["a", "b", "c", "d", "e", "f"], - ), - pd.DataFrame( - {"a": [1, 2, 4, 10, 11, 12]}, - index=["a", "b", "c", "d", "e", "f"], - ), - ] - * 7, - marks=pytest.mark.skipif( - not PANDAS_GE_220, - reason="https://github.com/pandas-dev/pandas/pull/56365", + ], + [ + pd.Series( + [1, 2, 3.0, 1.2, 8, 100], + name="New name", + index=["a", "b", "c", "d", "e", "f"], ), - ), + pd.DataFrame( + {"a": [1, 2, 4, 10, 11, 12]}, + index=["a", "b", "c", "d", "e", "f"], + ), + ] + * 7, ], ) def test_concat_series_dataframe_input(objs): pd_objs = objs gd_objs = [cudf.from_pandas(obj) for obj in objs] - with _hide_concat_empty_dtype_warning(): - expected = pd.concat(pd_objs) - actual = cudf.concat(gd_objs) + expected = pd.concat(pd_objs) + actual = cudf.concat(gd_objs) assert_eq( expected.fillna(-1), @@ -679,7 +628,7 @@ def test_concat_empty_and_nonempty_series(ignore_index, data, axis_0): got = cudf.concat([s1, s2], axis=axis_0, ignore_index=ignore_index) expect = pd.concat([ps1, ps2], axis=axis_0, ignore_index=ignore_index) - assert_eq(got, expect, check_index_type=True) + assert_eq(got, expect, check_index_type=True, check_dtype=False) def test_concat_two_empty_series(ignore_index, axis_0): @@ -869,24 +818,23 @@ def test_concat_join_many_df_and_empty_df(ignore_index, sort, join, axis): gdf3 = cudf.from_pandas(pdf3) gdf_empty1 = cudf.from_pandas(pdf_empty1) - with _hide_concat_empty_dtype_warning(): - assert_eq( - pd.concat( - [pdf1, pdf2, pdf3, pdf_empty1], - sort=sort, - join=join, - ignore_index=ignore_index, - axis=axis, - ), - cudf.concat( - [gdf1, gdf2, gdf3, gdf_empty1], - sort=sort, - join=join, - ignore_index=ignore_index, - axis=axis, - ), - check_index_type=False, - ) + assert_eq( + pd.concat( + [pdf1, pdf2, pdf3, pdf_empty1], + sort=sort, + join=join, + ignore_index=ignore_index, + axis=axis, + ), + cudf.concat( + [gdf1, gdf2, gdf3, gdf_empty1], + sort=sort, + join=join, + ignore_index=ignore_index, + axis=axis, + ), + check_index_type=False, + ) def test_concat_join_one_df(ignore_index, sort, join, axis): @@ -969,21 +917,20 @@ def test_concat_join_no_overlapping_columns_many_and_empty( gdf6 = cudf.from_pandas(pdf6) gdf_empty = cudf.from_pandas(pdf_empty) - with _hide_concat_empty_dtype_warning(): - expected = pd.concat( - [pdf4, pdf5, pdf6, pdf_empty], - sort=sort, - join=join, - ignore_index=ignore_index, - axis=axis, - ) - actual = cudf.concat( - [gdf4, gdf5, gdf6, gdf_empty], - sort=sort, - join=join, - ignore_index=ignore_index, - axis=axis, - ) + expected = pd.concat( + [pdf4, pdf5, pdf6, pdf_empty], + sort=sort, + join=join, + ignore_index=ignore_index, + axis=axis, + ) + actual = cudf.concat( + [gdf4, gdf5, gdf6, gdf_empty], + sort=sort, + join=join, + ignore_index=ignore_index, + axis=axis, + ) assert_eq( expected, actual, @@ -1023,14 +970,12 @@ def test_concat_join_no_overlapping_columns_many_and_empty( ), pd.DataFrame(index=pd.Index([], dtype="str")), ], - pytest.param( - [ - pd.DataFrame( - {"a": [1, 2, 3], "nb": [10, 11, 12]}, index=["Q", "W", "R"] - ), - None, - ], - ), + [ + pd.DataFrame( + {"a": [1, 2, 3], "nb": [10, 11, 12]}, index=["Q", "W", "R"] + ), + None, + ], ], ) def test_concat_join_no_overlapping_columns_many_and_empty2( @@ -1038,21 +983,20 @@ def test_concat_join_no_overlapping_columns_many_and_empty2( ): objs_gd = [cudf.from_pandas(o) if o is not None else o for o in objs] - with _hide_concat_empty_dtype_warning(): - expected = pd.concat( - objs, - sort=sort, - join=join, - ignore_index=ignore_index, - axis=axis, - ) - actual = cudf.concat( - objs_gd, - sort=sort, - join=join, - ignore_index=ignore_index, - axis=axis, - ) + expected = pd.concat( + objs, + sort=sort, + join=join, + ignore_index=ignore_index, + axis=axis, + ) + actual = cudf.concat( + objs_gd, + sort=sort, + join=join, + ignore_index=ignore_index, + axis=axis, + ) assert_eq(expected, actual, check_index_type=False) @@ -1071,21 +1015,20 @@ def test_concat_join_no_overlapping_columns_empty_df_basic( gdf6 = cudf.from_pandas(pdf6) gdf_empty = cudf.from_pandas(pdf_empty) - with _hide_concat_empty_dtype_warning(): - expected = pd.concat( - [pdf6, pdf_empty], - sort=sort, - join=join, - ignore_index=ignore_index, - axis=axis, - ) - actual = cudf.concat( - [gdf6, gdf_empty], - sort=sort, - join=join, - ignore_index=ignore_index, - axis=axis, - ) + expected = pd.concat( + [pdf6, pdf_empty], + sort=sort, + join=join, + ignore_index=ignore_index, + axis=axis, + ) + actual = cudf.concat( + [gdf6, gdf_empty], + sort=sort, + join=join, + ignore_index=ignore_index, + axis=axis, + ) assert_eq( expected, actual, @@ -1112,14 +1055,13 @@ def test_concat_join_series(ignore_index, sort, join, axis): ignore_index=ignore_index, axis=axis, ) - with expect_warning_if(axis in {1, "columns"}): - actual = cudf.concat( - [s1, s2, s3, s4], - sort=sort, - join=join, - ignore_index=ignore_index, - axis=axis, - ) + actual = cudf.concat( + [s1, s2, s3, s4], + sort=sort, + join=join, + ignore_index=ignore_index, + axis=axis, + ) assert_eq( expected, @@ -1266,21 +1208,20 @@ def test_concat_join_empty_dataframes_axis_1( gdf = cudf.from_pandas(df) other_gd = [gdf] + [cudf.from_pandas(o) for o in other] - with _hide_concat_empty_dtype_warning(): - expected = pd.concat( - other_pd, - ignore_index=ignore_index, - axis=axis, - join=join, - sort=sort, - ) - actual = cudf.concat( - other_gd, - ignore_index=ignore_index, - axis=axis, - join=join, - sort=sort, - ) + expected = pd.concat( + other_pd, + ignore_index=ignore_index, + axis=axis, + join=join, + sort=sort, + ) + actual = cudf.concat( + other_gd, + ignore_index=ignore_index, + axis=axis, + join=join, + sort=sort, + ) if expected.shape != df.shape: if axis == 0: for key, col in actual[actual.columns].items(): @@ -2270,13 +2211,12 @@ def test_dataframe_concat_lists(df, other, sort, ignore_index): gdf = cudf.from_pandas(df) other_gd = [cudf.from_pandas(o) for o in other_pd] - with _hide_concat_empty_dtype_warning(): - expected = pd.concat( - [pdf, *other_pd], sort=sort, ignore_index=ignore_index - ) - actual = cudf.concat( - [gdf, *other_gd], sort=sort, ignore_index=ignore_index - ) + expected = pd.concat( + [pdf, *other_pd], sort=sort, ignore_index=ignore_index + ) + actual = cudf.concat( + [gdf, *other_gd], sort=sort, ignore_index=ignore_index + ) if expected.shape != df.shape: assert_eq( @@ -2429,13 +2369,12 @@ def test_dataframe_concat_dataframe_lists(df, other, sort, ignore_index): gdf = cudf.from_pandas(df) other_gd = [cudf.from_pandas(o) for o in other] - with _hide_concat_empty_dtype_warning(): - expected = pd.concat( - [pdf, *other_pd], sort=sort, ignore_index=ignore_index - ) - actual = cudf.concat( - [gdf, *other_gd], sort=sort, ignore_index=ignore_index - ) + expected = pd.concat( + [pdf, *other_pd], sort=sort, ignore_index=ignore_index + ) + actual = cudf.concat( + [gdf, *other_gd], sort=sort, ignore_index=ignore_index + ) # In some cases, Pandas creates an empty Index([], dtype="object") for # columns whereas cudf creates a RangeIndex(0, 0). @@ -2461,15 +2400,16 @@ def test_dataframe_concat_dataframe_lists(df, other, sort, ignore_index): def test_dataframe_concat_series_mixed_index(): df = cudf.DataFrame({"first": [], "d": []}) - pdf = df.to_pandas() + pdf = df.to_pandas(arrow_type=True) + df = cudf.from_pandas(pdf) sr = cudf.Series([1, 2, 3, 4]) - psr = sr.to_pandas() + psr = sr.to_pandas(arrow_type=True) + sr = cudf.from_pandas(psr) assert_eq( cudf.concat([df, sr], ignore_index=True), pd.concat([pdf, psr], ignore_index=True), - check_dtype=False, ) @@ -2603,13 +2543,8 @@ def test_dataframe_concat_dataframe(df, other, sort, ignore_index): gdf = cudf.from_pandas(df) other_gd = cudf.from_pandas(other) - with _hide_concat_empty_dtype_warning(): - expected = pd.concat( - [pdf, other_pd], sort=sort, ignore_index=ignore_index - ) - actual = cudf.concat( - [gdf, other_gd], sort=sort, ignore_index=ignore_index - ) + expected = pd.concat([pdf, other_pd], sort=sort, ignore_index=ignore_index) + actual = cudf.concat([gdf, other_gd], sort=sort, ignore_index=ignore_index) # In empty dataframe cases, Pandas & cudf differ in columns # creation, pandas creates RangeIndex(0, 0) @@ -2639,9 +2574,8 @@ def test_dataframe_concat_dataframe(df, other, sort, ignore_index): def test_concat_empty_dataframe(df_1_data, df_2_data): df_1 = cudf.DataFrame(df_1_data) df_2 = cudf.DataFrame(df_2_data) - with _hide_concat_empty_dtype_warning(): - got = cudf.concat([df_1, df_2]) - expect = pd.concat([df_1.to_pandas(), df_2.to_pandas()], sort=False) + got = cudf.concat([df_1, df_2]) + expect = pd.concat([df_1.to_pandas(), df_2.to_pandas()], sort=False) # ignoring dtypes as pandas upcasts int to float # on concatenation with empty dataframes @@ -2666,28 +2600,31 @@ def test_concat_empty_dataframe(df_1_data, df_2_data): {}, ], ) -def test_concat_different_column_dataframe(df1_d, df2_d): - with _hide_concat_empty_dtype_warning(): - got = cudf.concat( - [ - cudf.DataFrame(df1_d), - cudf.DataFrame(df2_d), - cudf.DataFrame(df1_d), - ], - sort=False, - ) - +def test_concat_different_column_dataframe(request, df1_d, df2_d): pdf1 = pd.DataFrame(df1_d) pdf2 = pd.DataFrame(df2_d) - expect = pd.concat([pdf1, pdf2, pdf1], sort=False) - - # numerical columns are upcasted to float in cudf.DataFrame.to_pandas() - # casts nan to 0 in non-float numerical columns + got = cudf.concat( + [ + cudf.from_pandas(pdf1), + cudf.from_pandas(pdf2), + cudf.from_pandas(pdf1), + ], + sort=False, + ) - numeric_cols = got.dtypes[got.dtypes != "object"].index - for col in numeric_cols: - got[col] = got[col].astype(np.float64).fillna(np.nan) + expect = pd.concat([pdf1, pdf2, pdf1], sort=False) + xfail_pair = df2_d == { + "a": [1, None, 3], + "b": [True, True, False], + "c": ["s3", None, "s4"], + } and isinstance(df1_d["b"], pd.Series) + request.applymarker( + pytest.mark.xfail( + xfail_pair, + reason="As of pandas 3.0, pandas coerces to float, cuDF coerces to bool", + ) + ) assert_eq(got, expect, check_dtype=False, check_index_type=True) @@ -2697,9 +2634,8 @@ def test_concat_different_column_dataframe(df1_d, df2_d): ) def test_concat_empty_series(ser_1): ser_2 = pd.Series([], dtype="float64") - with _hide_concat_empty_dtype_warning(): - got = cudf.concat([cudf.Series(ser_1), cudf.Series(ser_2)]) - expect = pd.concat([ser_1, ser_2]) + got = cudf.concat([cudf.Series(ser_1), cudf.Series(ser_2)]) + expect = pd.concat([ser_1, ser_2]) assert_eq(got, expect, check_index_type=True) diff --git a/python/cudf/cudf/tests/reshape/test_join.py b/python/cudf/cudf/tests/reshape/test_join.py index 862e33504b87..93a86dbe96ab 100644 --- a/python/cudf/cudf/tests/reshape/test_join.py +++ b/python/cudf/cudf/tests/reshape/test_join.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -7,7 +7,6 @@ import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq from cudf.testing._utils import ( assert_exceptions_equal, @@ -135,10 +134,6 @@ def work_gdf(df): assert direct_equal or nanfilled_equal, msg -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="bug in older version of pandas", -) def test_dataframe_join_suffix(): rng = np.random.default_rng(seed=0) @@ -202,8 +197,8 @@ def test_dataframe_join_combine_cats(): lhs_pd = lhs.to_pandas() rhs_pd = rhs.to_pandas() - lhs_pd.index = lhs_pd.index.astype("object") - rhs_pd.index = rhs_pd.index.astype("object") + lhs_pd.index = lhs_pd.index.astype(pd.StringDtype(na_value=np.nan)) + rhs_pd.index = rhs_pd.index.astype(pd.StringDtype(na_value=np.nan)) expect = lhs_pd.join(rhs_pd, how="outer") expect.index = expect.index.astype("category") @@ -327,11 +322,6 @@ def test_join_multi(how, column_a, column_b, column_c): gdf_result = gdf1.join(gdf2, how=how, sort=True) pdf_result = df1.join(df2, how=how, sort=True) - # Make sure columns are in the same order - columns = pdf_result.columns.values - gdf_result = gdf_result[columns] - pdf_result = pdf_result[columns] - assert_join_results_equal(pdf_result, gdf_result, how="inner") diff --git a/python/cudf/cudf/tests/reshape/test_merge.py b/python/cudf/cudf/tests/reshape/test_merge.py index cb29e0dc64dc..fd2f9343621a 100644 --- a/python/cudf/cudf/tests/reshape/test_merge.py +++ b/python/cudf/cudf/tests/reshape/test_merge.py @@ -1,20 +1,13 @@ # SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import itertools -import operator import string -from collections import defaultdict import numpy as np import pandas as pd import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_VERSION, -) from cudf.core.dtypes import CategoricalDtype, Decimal64Dtype, Decimal128Dtype from cudf.testing import assert_eq from cudf.testing._utils import ( @@ -1364,148 +1357,9 @@ def test_merge_datetime_timedelta_error(temporal_types_as_str): df1.merge(df2) -if PANDAS_GE_220: - # Behaviour in sort=False case didn't match documentation in many - # cases prior to https://github.com/pandas-dev/pandas/pull/54611 - # (released as part of pandas 2.2) - def expected(left, right, sort, *, how): - left = left.to_pandas() - right = right.to_pandas() - return left.merge(right, on="key", how=how, sort=sort) - -else: - - def expect_inner(left, right, sort): - left_key = left.key.to_numpy().tolist() - left_val = left.val.to_numpy().tolist() - right_key = right.key.to_numpy().tolist() - right_val = right.val.to_numpy().tolist() - - right_have = defaultdict(list) - for i, k in enumerate(right_key): - right_have[k].append(i) - keys = [] - val_x = [] - val_y = [] - for k, v in zip(left_key, left_val, strict=True): - if k not in right_have: - continue - for i in right_have[k]: - keys.append(k) - val_x.append(v) - val_y.append(right_val[i]) - - if sort: - # Python sort is stable, so this will preserve input order for - # equal items. - keys, val_x, val_y = zip( - *sorted( - zip(keys, val_x, val_y, strict=True), - key=operator.itemgetter(0), - ), - strict=True, - ) - return cudf.DataFrame({"key": keys, "val_x": val_x, "val_y": val_y}) - - def expect_left(left, right, sort): - left_key = left.key.to_numpy().tolist() - left_val = left.val.to_numpy().tolist() - right_key = right.key.to_numpy().tolist() - right_val = right.val.to_numpy().tolist() - - right_have = defaultdict(list) - for i, k in enumerate(right_key): - right_have[k].append(i) - keys = [] - val_x = [] - val_y = [] - for k, v in zip(left_key, left_val, strict=True): - if k not in right_have: - right_vals = [None] - else: - right_vals = [right_val[i] for i in right_have[k]] - - for rv in right_vals: - keys.append(k) - val_x.append(v) - val_y.append(rv) - - if sort: - # Python sort is stable, so this will preserve input order for - # equal items. - keys, val_x, val_y = zip( - *sorted( - zip(keys, val_x, val_y, strict=True), - key=operator.itemgetter(0), - ), - strict=True, - ) - return cudf.DataFrame({"key": keys, "val_x": val_x, "val_y": val_y}) - - def expect_outer(left, right, sort): - left_key = left.key.to_numpy().tolist() - left_val = left.val.to_numpy().tolist() - right_key = right.key.to_numpy().tolist() - right_val = right.val.to_numpy().tolist() - right_have = defaultdict(list) - for i, k in enumerate(right_key): - right_have[k].append(i) - keys = [] - val_x = [] - val_y = [] - for k, v in zip(left_key, left_val, strict=True): - if k not in right_have: - right_vals = [None] - else: - right_vals = [right_val[i] for i in right_have[k]] - for rv in right_vals: - keys.append(k) - val_x.append(v) - val_y.append(rv) - left_have = set(left_key) - for k, v in zip(right_key, right_val, strict=True): - if k not in left_have: - keys.append(k) - val_x.append(None) - val_y.append(v) - - # Python sort is stable, so this will preserve input order for - # equal items. - # outer joins are always sorted, but we test both sort values - keys, val_x, val_y = zip( - *sorted( - zip(keys, val_x, val_y, strict=True), - key=operator.itemgetter(0), - ), - strict=True, - ) - return cudf.DataFrame({"key": keys, "val_x": val_x, "val_y": val_y}) - - def expected(left, right, sort, *, how): - if how == "inner": - return expect_inner(left, right, sort) - elif how == "outer": - return expect_outer(left, right, sort) - elif how == "left": - return expect_left(left, right, sort) - elif how == "right": - return expect_left(right, left, sort).rename( - {"val_x": "val_y", "val_y": "val_x"}, axis=1 - ) - else: - raise NotImplementedError() - - def test_join_ordering_pandas_compat(request, sort, how): if how in ["leftanti", "leftsemi", "cross"]: pytest.skip(f"Test not applicable for {how}") - request.applymarker( - pytest.mark.xfail( - PANDAS_VERSION >= PANDAS_CURRENT_SUPPORTED_VERSION - and how == "right", - reason="TODO: Result ording of suffix'ed columns is incorrect", - ) - ) left_key = [1, 3, 2, 1, 1, 2, 5, 1, 4, 5, 8, 12, 12312, 1] * 100 left_val = range(len(left_key)) left = cudf.DataFrame({"key": left_key, "val": left_val}) @@ -1516,7 +1370,9 @@ def test_join_ordering_pandas_compat(request, sort, how): right = cudf.DataFrame({"key": right_key, "val": right_val}) with cudf.option_context("mode.pandas_compatible", True): actual = left.merge(right, on="key", how=how, sort=sort) - expect = expected(left, right, sort, how=how) + expect = left.to_pandas().merge( + right.to_pandas(), on="key", how=how, sort=sort + ) assert_eq(expect, actual) diff --git a/python/cudf/cudf/tests/reshape/test_pivot.py b/python/cudf/cudf/tests/reshape/test_pivot.py index dbd48e7a40af..59c4f24b8bea 100644 --- a/python/cudf/cudf/tests/reshape/test_pivot.py +++ b/python/cudf/cudf/tests/reshape/test_pivot.py @@ -43,7 +43,7 @@ def test_pivot_simple(index, column, data): def test_pivot_multi_values(): # from Pandas docs: - # https://pandas.pydata.org/pandas-docs/version/2.3.3/reference/api/pandas.DataFrame.pivot.html + # https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot.html pdf = pd.DataFrame( { "foo": ["one", "one", "one", "two", "two", "two"], diff --git a/python/cudf/cudf/tests/reshape/test_stack.py b/python/cudf/cudf/tests/reshape/test_stack.py index cfec7b64b965..ac08ece520e2 100644 --- a/python/cudf/cudf/tests/reshape/test_stack.py +++ b/python/cudf/cudf/tests/reshape/test_stack.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -6,15 +6,7 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_VERSION, -) from cudf.testing import assert_eq -from cudf.testing._utils import ( - expect_warning_if, -) @pytest.mark.parametrize("nulls", ["none", "some"]) @@ -71,10 +63,6 @@ def test_df_stack_reset_index(): assert_eq(expected, actual) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Need pandas-2.1.0+ to match `stack` api", -) @pytest.mark.parametrize( "tuples", [ @@ -124,7 +112,7 @@ def test_df_stack_multiindex_column_axis(tuples, index, level, dropna): with pytest.warns(FutureWarning): got = gdf.stack(level=level, dropna=dropna, future_stack=False) - with expect_warning_if(PANDAS_GE_220, FutureWarning): + with pytest.warns(pd.errors.Pandas4Warning): expect = pdf.stack(level=level, dropna=dropna, future_stack=False) assert_eq(expect, got, check_dtype=False) @@ -151,10 +139,6 @@ def test_df_stack_mixed_dtypes(): assert_eq(expect, got, check_dtype=False) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Need pandas-2.1.0+ to match `stack` api", -) @pytest.mark.parametrize("level", [["animal", "hair_length"], [1, 2]]) def test_df_stack_multiindex_column_axis_pd_example(level): columns = pd.MultiIndex.from_tuples( @@ -169,7 +153,7 @@ def test_df_stack_multiindex_column_axis_pd_example(level): rng = np.random.default_rng(seed=0) df = pd.DataFrame(rng.standard_normal(size=(4, 4)), columns=columns) - with expect_warning_if(PANDAS_GE_220, FutureWarning): + with pytest.warns(pd.errors.Pandas4Warning): expect = df.stack(level=level, future_stack=False) gdf = cudf.from_pandas(df) with pytest.warns(FutureWarning): diff --git a/python/cudf/cudf/tests/series/accessors/test_cat.py b/python/cudf/cudf/tests/series/accessors/test_cat.py index 84ca0aa463b3..8c0c253626b4 100644 --- a/python/cudf/cudf/tests/series/accessors/test_cat.py +++ b/python/cudf/cudf/tests/series/accessors/test_cat.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 from textwrap import dedent @@ -56,7 +56,7 @@ def test_categorical_integer(): 3 c 4 a dtype: category - Categories (3, object): ['a', 'b', 'c']""" + Categories (3, str): ['a', 'b', 'c']""" ) assert str(sr) == expect_str @@ -80,7 +80,11 @@ def test_categorical_empty(): np.testing.assert_array_equal(cat.codes, sr.cat.codes.to_numpy()) # Test attributes - assert_eq(pdsr.cat.categories, sr.cat.categories) + assert sr.cat.categories.dtype == np.dtype(object) + assert pdsr.cat.categories.dtype == np.dtype(object) + assert_eq( + pdsr.cat.categories.astype(sr.cat.categories.dtype), sr.cat.categories + ) assert pdsr.cat.ordered == sr.cat.ordered np.testing.assert_array_equal( @@ -251,6 +255,13 @@ def test_categorical_set_categories_categoricals(data, new_categories): expected = pd_data.cat.set_categories(new_categories=new_categories) actual = gd_data.cat.set_categories(new_categories=new_categories) + if isinstance(new_categories, list) and len(new_categories) == 0: + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + expected = expected.cat.set_categories( + pd.Index([], dtype=actual.cat.categories.dtype) + ) assert_eq(expected, actual) expected = pd_data.cat.set_categories( @@ -259,6 +270,13 @@ def test_categorical_set_categories_categoricals(data, new_categories): actual = gd_data.cat.set_categories( new_categories=cudf.Series(new_categories, dtype="category") ) + if isinstance(new_categories, list) and len(new_categories) == 0: + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + expected = expected.cat.set_categories( + pd.Index([], dtype=actual.cat.categories.dtype) + ) assert_eq(expected, actual) @@ -333,10 +351,10 @@ def test_add_categories_mixed_error(): def test_categorical_allow_nan(): gs = cudf.Series([1, 2, np.nan, 10, np.nan, None], nan_as_null=False) gs = gs.astype("category") - expected_codes = cudf.Series([0, 1, 3, 2, 3, None], dtype="uint8") + expected_codes = cudf.Series([0, 1, None, 2, None, None], dtype="uint8") assert_eq(expected_codes, gs.cat.codes) - expected_categories = cudf.Index([1.0, 2.0, 10.0, np.nan], dtype="float64") + expected_categories = cudf.Index([1.0, 2.0, 10.0], dtype="float64") assert_eq(expected_categories, gs.cat.categories) actual_ps = gs.to_pandas() diff --git a/python/cudf/cudf/tests/series/accessors/test_dt.py b/python/cudf/cudf/tests/series/accessors/test_dt.py index 8d5f8d6eed87..15338cb4078b 100644 --- a/python/cudf/cudf/tests/series/accessors/test_dt.py +++ b/python/cudf/cudf/tests/series/accessors/test_dt.py @@ -6,16 +6,19 @@ import cupy as cp import numpy as np import pandas as pd +import pyarrow as pa import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_VERSION, -) from cudf.testing import assert_eq +# Parametrize between numpy datetime64 and pandas ArrowDtype timestamp so +# every dt accessor test exercises both code paths. +_DT_DTYPES = [ + "datetime64[ns]", + pd.ArrowDtype(pa.timestamp("ns")), +] + @pytest.fixture( params=[ @@ -104,6 +107,24 @@ def test_timedelta_series_total_seconds( assert_eq(expected, actual) +@pytest.mark.parametrize("unit", ["s", "ms", "us", "ns"]) +def test_timedelta_total_seconds_arrow_dtype(unit): + # ArrowDtype duration: result must be float64[pyarrow] to match pandas. + ps = pd.Series( + [ + pd.Timedelta(days=1, seconds=2, microseconds=3, nanoseconds=4), + None, + pd.Timedelta(seconds=86400.5), + ], + dtype=pd.ArrowDtype(pa.duration(unit)), + ) + gs = cudf.from_pandas(ps) + + expected = ps.dt.total_seconds() + actual = gs.dt.total_seconds() + assert_eq(expected, actual) + + @pytest.mark.parametrize("meth", ["day_name", "month_name"]) @pytest.mark.parametrize("klass", [cudf.Series, cudf.DatetimeIndex]) def test_day_month_name_locale_not_implemented(meth, klass): @@ -143,6 +164,30 @@ def test_day_month_name(meth, klass): assert_eq(expect, got) +@pytest.mark.parametrize("meth", ["day_name", "month_name"]) +def test_day_month_name_arrow_dtype(meth): + data = [ + "2020-05-31 08:00:00", + None, + "1999-12-31 18:40:00", + "2000-12-31 04:00:00", + None, + "1900-02-28 07:00:00", + "1800-03-14 07:30:00", + "2100-03-14 07:30:00", + "1970-01-01 00:00:00", + "1969-12-31 12:59:00", + ] + + ps = pd.Series(data, dtype=pd.ArrowDtype(pa.timestamp("s"))) + gs = cudf.from_pandas(ps) + + expect = getattr(ps.dt, meth)() + got = getattr(gs.dt, meth)() + + assert_eq(expect, got) + + @pytest.mark.parametrize( "freqstr", [ @@ -154,12 +199,12 @@ def test_day_month_name(meth, klass): "S", ], ) -def test_datetime_ceil_raise_warning(freqstr): +def test_datetime_ceil_invalid_freq_raises(freqstr): t = cudf.Series( ["2001-01-01 00:04:45", "2001-01-01 00:04:58", "2001-01-01 00:05:04"], dtype="datetime64[ns]", ) - with pytest.warns(FutureWarning): + with pytest.raises(ValueError): t.dt.ceil(freqstr) @@ -185,10 +230,6 @@ def test_round(datetime_types_as_str, resolution): assert_eq(expect, got) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="https://github.com/pandas-dev/pandas/issues/52761", -) @pytest.mark.parametrize( "resolution", ["D", "h", "min", "min", "s", "ms", "us", "ns"] ) @@ -211,10 +252,6 @@ def test_floor(datetime_types_as_str, resolution): assert_eq(expect, got) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="https://github.com/pandas-dev/pandas/issues/52761", -) @pytest.mark.parametrize( "resolution", ["D", "h", "min", "min", "s", "ms", "us", "ns"] ) @@ -237,7 +274,8 @@ def test_ceil(datetime_types_as_str, resolution): assert_eq(expect, got) -def test_days_in_months(): +@pytest.mark.parametrize("dtype", _DT_DTYPES) +def test_days_in_months(dtype): data = [ "2020-05-31", None, @@ -250,14 +288,15 @@ def test_days_in_months(): "1970-01-01", "1969-12-11", ] - ps = pd.Series(data, dtype="datetime64[ns]") + ps = pd.Series(data, dtype=dtype) gs = cudf.from_pandas(ps) assert_eq(ps.dt.days_in_month, gs.dt.days_in_month) assert_eq(ps.dt.daysinmonth, gs.dt.daysinmonth) -def test_is_month_start(): +@pytest.mark.parametrize("dtype", _DT_DTYPES) +def test_is_month_start(dtype): data = [ "2020-05-31", None, @@ -270,7 +309,7 @@ def test_is_month_start(): "1970-01-01", "1969-12-11", ] - ps = pd.Series(data, dtype="datetime64[ns]") + ps = pd.Series(data, dtype=dtype) gs = cudf.from_pandas(ps) expect = ps.dt.is_month_start @@ -279,7 +318,8 @@ def test_is_month_start(): assert_eq(expect, got) -def test_is_month_end(): +@pytest.mark.parametrize("dtype", _DT_DTYPES) +def test_is_month_end(dtype): data = [ "2020-05-31", "2020-02-29", @@ -293,7 +333,7 @@ def test_is_month_end(): "1970-01-01", "1969-12-11", ] - ps = pd.Series(data, dtype="datetime64[ns]") + ps = pd.Series(data, dtype=dtype) gs = cudf.from_pandas(ps) expect = ps.dt.is_month_end @@ -302,7 +342,8 @@ def test_is_month_end(): assert_eq(expect, got) -def test_is_year_start(): +@pytest.mark.parametrize("dtype", _DT_DTYPES) +def test_is_year_start(dtype): data = [ "2020-05-31", None, @@ -318,7 +359,7 @@ def test_is_year_start(): "2017-12-31", "2018-01-01", ] - ps = pd.Series(data, dtype="datetime64[ns]") + ps = pd.Series(data, dtype=dtype) gs = cudf.from_pandas(ps) expect = ps.dt.is_year_start @@ -327,7 +368,8 @@ def test_is_year_start(): assert_eq(expect, got) -def test_is_year_end(): +@pytest.mark.parametrize("dtype", _DT_DTYPES) +def test_is_year_end(dtype): data = [ "2020-05-31", None, @@ -347,7 +389,7 @@ def test_is_year_end(): "2100-12-14 07:30:00", "2020-05-31", ] - ps = pd.Series(data, dtype="datetime64[ns]") + ps = pd.Series(data, dtype=dtype) gs = cudf.from_pandas(ps) expect = ps.dt.is_year_end @@ -356,7 +398,8 @@ def test_is_year_end(): assert_eq(expect, got) -def test_is_quarter_start(): +@pytest.mark.parametrize("dtype", _DT_DTYPES) +def test_is_quarter_start(dtype): data = [ "2020-05-01", "2020-05-31", @@ -373,7 +416,7 @@ def test_is_quarter_start(): "1969-12-11", "2020-12-31", ] - ps = pd.Series(data, dtype="datetime64[ns]") + ps = pd.Series(data, dtype=dtype) gs = cudf.from_pandas(ps) expect = ps.dt.is_quarter_start @@ -382,7 +425,8 @@ def test_is_quarter_start(): assert_eq(expect, got) -def test_is_quarter_end(): +@pytest.mark.parametrize("dtype", _DT_DTYPES) +def test_is_quarter_end(dtype): data = [ "2020-05-01", "2020-05-31", @@ -399,7 +443,7 @@ def test_is_quarter_end(): "1969-12-11", "2020-12-31", ] - ps = pd.Series(data, dtype="datetime64[ns]") + ps = pd.Series(data, dtype=dtype) gs = cudf.from_pandas(ps) expect = ps.dt.is_quarter_end @@ -408,7 +452,11 @@ def test_is_quarter_end(): assert_eq(expect, got) -def test_is_leap_year(): +@pytest.mark.parametrize( + "dtype", + ["datetime64[s]", pd.ArrowDtype(pa.timestamp("s"))], +) +def test_is_leap_year(dtype): data = [ "2020-05-31 08:00:00", None, @@ -423,7 +471,7 @@ def test_is_leap_year(): ] # Series - ps = pd.Series(data, dtype="datetime64[s]") + ps = pd.Series(data, dtype=dtype) gs = cudf.from_pandas(ps) expect = ps.dt.is_leap_year @@ -431,14 +479,16 @@ def test_is_leap_year(): assert_eq(expect, got) - # DatetimeIndex - pIndex = pd.DatetimeIndex(data) - gIndex = cudf.from_pandas(pIndex) + # DatetimeIndex (ArrowDtype isn't accepted by DatetimeIndex; only + # exercise the index code path for the numpy variant.) + if isinstance(dtype, str): + pIndex = pd.DatetimeIndex(data) + gIndex = cudf.from_pandas(pIndex) - expect2 = pIndex.is_leap_year - got2 = gIndex.is_leap_year + expect2 = pIndex.is_leap_year + got2 = gIndex.is_leap_year - assert_eq(expect2, got2) + assert_eq(expect2, got2) def test_quarter(): @@ -484,6 +534,11 @@ def test_quarter(): pd.date_range(start="2021-07-25", end="2021-07-30"), index=["a", "b", "c", "d", "e", "f"], ), + pd.Series( + ["2010-01-01", "2010-12-31", None], + dtype=pd.ArrowDtype(pa.timestamp("ns")), + ), + pd.Series([None, None], dtype=pd.ArrowDtype(pa.timestamp("us"))), ], ) def test_isocalendar_series(data): @@ -544,6 +599,40 @@ def test_datetime_strftime_not_implemented_formats(date_format): gsr.dt.strftime(date_format=date_format) +@pytest.mark.parametrize( + "unit", + ["s", "ms", "us", "ns"], +) +@pytest.mark.parametrize( + "date_format", + [ + # %S in pyarrow includes the subsecond fraction at the timestamp's + # resolution -- cudf must translate this so the output matches. + "%Y-%m-%d", + "%Y-%m-%dT%H:%M:%S", + "%H:%M:%S no-subsec-after", + ], +) +def test_datetime_strftime_arrow_dtype(unit, date_format): + # ArrowDtype timestamps: pyarrow's "%S" carries the subsecond fraction + # at the timestamp's resolution; cudf must produce the same output. + # Use second-resolution input strings so each unit can hold them + # losslessly. + data = [ + "2023-01-02 03:04:05", + None, + "2024-12-31 23:59:59", + ] + ps = pd.Series(data, dtype=pd.ArrowDtype(pa.timestamp(unit))) + gs = cudf.from_pandas(ps) + + # pandas' ArrowTemporalProperties.strftime takes the format positionally. + expected = ps.dt.strftime(date_format) + actual = gs.dt.strftime(date_format) + + assert_eq(expected, actual) + + @pytest.mark.parametrize( "data", [ @@ -582,13 +671,12 @@ def test_dt_series_datetime_fields(data, field): @pytest.mark.parametrize("fmt", ["%Y-%m-%dT%H:%M%z", "%Y-%m-%dT%H:%M"]) -def test_strftime_tz_aware_as_utc(fmt): +def test_strftime_tz_aware(fmt): data = [datetime.datetime(2024, 1, 1, tzinfo=datetime.timezone.utc)] cudf_pacific = cudf.Series(data).dt.tz_convert("US/Pacific") - pd_utc = pd.Series(data) - assert cudf_pacific.dtype != pd_utc.dtype + pd_pacific = pd.Series(data).dt.tz_convert("US/Pacific") result = cudf_pacific.dt.strftime(fmt) - expected = pd_utc.dt.strftime(fmt) + expected = pd_pacific.dt.strftime(fmt) assert_eq(result, expected) @@ -693,6 +781,45 @@ def test_convert(from_tz, to_tz): assert_eq(expect, got) +@pytest.mark.parametrize("unit", ["us", "ns"]) +@pytest.mark.parametrize("to_tz", ["US/Eastern", "Europe/London", "UTC", None]) +def test_convert_arrow_dtype(unit, to_tz): + # tz_convert on an ArrowDtype timestamp must keep the result as + # ArrowDtype (timestamp[unit, tz=...][pyarrow]) rather than falling + # back to DatetimeTZDtype. + # cudf cannot construct a tz-aware ArrowDtype Series via from_pandas, + # so build it by localizing a naive ArrowDtype Series first. + ps = pd.Series( + ["2023-01-01 03:00", None, "2023-06-15 12:00"], + dtype=pd.ArrowDtype(pa.timestamp(unit)), + ).dt.tz_localize("US/Pacific") + gs = cudf.from_pandas( + pd.Series( + ["2023-01-01 03:00", None, "2023-06-15 12:00"], + dtype=pd.ArrowDtype(pa.timestamp(unit)), + ) + ).dt.tz_localize("US/Pacific") + + expect = ps.dt.tz_convert(to_tz) + got = gs.dt.tz_convert(to_tz) + assert_eq(expect, got) + + +@pytest.mark.parametrize("unit", ["us", "ns"]) +def test_localize_arrow_dtype(unit): + # tz_localize on an ArrowDtype timestamp must keep the result as + # ArrowDtype rather than DatetimeTZDtype. + ps = pd.Series( + ["2023-01-02 03:00", None, "2023-06-15 12:00"], + dtype=pd.ArrowDtype(pa.timestamp(unit)), + ) + gs = cudf.from_pandas(ps) + + expect = ps.dt.tz_localize("US/Pacific") + got = gs.dt.tz_localize("US/Pacific") + assert_eq(expect, got) + + def test_convert_from_naive(): gs = cudf.Series(cudf.date_range("2023-01-01", periods=3, freq="h")) with pytest.raises(TypeError): @@ -740,9 +867,7 @@ def test_convert_edge_cases(data, original_timezone, target_timezone): "data", [ pd.date_range("2020-01-01", periods=10, freq="D"), - pd.date_range( - "1990-01-01", periods=100, freq="ME" if PANDAS_GE_220 else "M" - ), + pd.date_range("1990-01-01", periods=100, freq="ME"), pd.to_datetime(["2023-12-25", "2024-01-01", "2024-06-15", None]), ], ) @@ -767,3 +892,106 @@ def test_dt_component_dtype_pandas_compat(data, component): expect = getattr(ps.dt, component) got = getattr(gs.dt, component) assert_eq(expect, got, check_dtype=True) + + +@pytest.mark.parametrize( + "unit", + ["s", "ms", "us", "ns"], +) +@pytest.mark.parametrize( + "component", + [ + "year", + "month", + "day", + "hour", + "minute", + "second", + "microsecond", + "nanosecond", + "weekday", + "day_of_year", + "dayofyear", + "days_in_month", + "daysinmonth", + "is_leap_year", + "is_month_start", + "is_month_end", + "is_quarter_start", + "is_quarter_end", + "is_year_start", + "is_year_end", + ], +) +def test_dt_component_arrow_dtype(unit, component): + # Verify dt accessor results on ArrowDtype timestamps match pandas + # in both dtype (e.g. int64[pyarrow], bool[pyarrow]) and values + # (including null preservation for nullable extension dtype). + # Use only second-resolution timestamps so the fixture data is valid + # for every unit (pandas can't losslessly downcast ns -> s, etc). + data = [ + "2023-01-02 03:04:05", + None, + "2024-02-29 23:59:59", + "1969-12-31 12:00:00", + ] + ps = pd.Series(data, dtype=pd.ArrowDtype(pa.timestamp(unit))) + gs = cudf.from_pandas(ps) + + expect = getattr(ps.dt, component) + got = getattr(gs.dt, component) + assert_eq(expect, got) + + +@pytest.mark.parametrize( + "dtype", + [ + "datetime64[ns]", + "datetime64[us]", + pd.ArrowDtype(pa.timestamp("ns")), + pd.ArrowDtype(pa.timestamp("us")), + ], +) +def test_to_pydatetime(dtype): + # Verify Series.dt.to_pydatetime returns a Series of datetime.datetime + # objects matching pandas, for both numpy datetime and ArrowDtype. + data = [ + datetime.datetime(2022, 1, 1), + datetime.datetime(2023, 6, 15, 12, 30, 45), + ] + ps = pd.Series(data, dtype=dtype) + gs = cudf.from_pandas(ps) + + expect = ps.dt.to_pydatetime() + got = gs.dt.to_pydatetime() + assert_eq(expect, got) + assert all(type(v) is datetime.datetime for v in got) + + +@pytest.mark.parametrize( + "dtype", + [ + "timedelta64[ns]", + "timedelta64[us]", + pd.ArrowDtype(pa.duration("ns")), + pd.ArrowDtype(pa.duration("us")), + ], +) +def test_to_pytimedelta(dtype): + # Verify Series.dt.to_pytimedelta returns an ndarray of + # datetime.timedelta objects matching pandas. + data = [ + datetime.timedelta(days=1, seconds=2, microseconds=3), + datetime.timedelta(days=2, seconds=4, microseconds=5), + ] + ps = pd.Series(data, dtype=dtype) + gs = cudf.from_pandas(ps) + + # pandas emits a Pandas4Warning here; ignore it because the function is + # being deprecated upstream and behaviour parity is what we care about. + with pytest.warns((DeprecationWarning, FutureWarning, Warning)): + expect = ps.dt.to_pytimedelta() + with pytest.warns((DeprecationWarning, FutureWarning, Warning)): + got = gs.dt.to_pytimedelta() + np.testing.assert_array_equal(expect, got) + assert all(type(v) is datetime.timedelta for v in got) diff --git a/python/cudf/cudf/tests/series/accessors/test_list.py b/python/cudf/cudf/tests/series/accessors/test_list.py index b6de99febccb..f583edadc90c 100644 --- a/python/cudf/cudf/tests/series/accessors/test_list.py +++ b/python/cudf/cudf/tests/series/accessors/test_list.py @@ -57,12 +57,12 @@ def test_leaves(data): ) def test_len(data): gsr = cudf.Series(data) - psr = gsr.to_pandas() - - expect = psr.map(lambda x: len(x) if x is not None else None) - got = gsr.list.len() - - assert_eq(expect, got, check_dtype=False) + psr = gsr.to_pandas(arrow_type=True) + if pa.types.is_null(psr.dtype.pyarrow_dtype): + psr = psr.astype(pd.ArrowDtype(gsr.dtype.to_arrow())) + expect = psr.list.len() + got = gsr.list.len().to_pandas(arrow_type=True) + assert_eq(expect, got) @pytest.mark.parametrize( @@ -193,7 +193,7 @@ def test_get(data, index, expect): expect = cudf.Series(expect) got = sr.list.get(index) - assert_eq(expect, got, check_dtype=not expect.isnull().all()) + assert_eq(expect, got) @pytest.mark.parametrize( diff --git a/python/cudf/cudf/tests/series/accessors/test_str.py b/python/cudf/cudf/tests/series/accessors/test_str.py index e7f1a25b32ad..d1e728f3e22d 100644 --- a/python/cudf/cudf/tests/series/accessors/test_str.py +++ b/python/cudf/cudf/tests/series/accessors/test_str.py @@ -8,13 +8,11 @@ import numpy as np import pandas as pd -import pyarrow as pa import pytest import cudf from cudf import concat from cudf.api.extensions import no_default -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq from cudf.testing._utils import ( assert_exceptions_equal, @@ -205,8 +203,7 @@ def test_string_get_json_object_empty_json_strings(json_path): ) got = gs.str.get_json_object(json_path) - expect = cudf.Series([None], dtype="object") - + expect = cudf.Series([None], dtype="str") assert_eq(got, expect) @@ -282,13 +279,13 @@ def test_string_get_json_object_allow_single_quotes(): gs.str.get_json_object( "$.store.book[0].author", allow_single_quotes=False ), - cudf.Series([None]), + cudf.Series([None], dtype="str"), ) assert_eq( gs.str.get_json_object( "$.store.book[*].title", allow_single_quotes=False ), - cudf.Series([None]), + cudf.Series([None], dtype="str"), ) @@ -382,7 +379,7 @@ def test_string_get_json_object_missing_fields_as_nulls(): gs.str.get_json_object( "$.store.book[0].category", missing_fields_as_nulls=False ), - cudf.Series([None]), + cudf.Series([None], dtype="str"), ) assert_eq( gs.str.get_json_object( @@ -1101,12 +1098,12 @@ def test_string_str_rindex(data, sub, er): ( ["hello", "there", "world", "-1234", None, "accént"], ["lo", "e", "o", "+1234", " ", "e"], - [True, True, True, False, None, False], + [True, True, True, False, False, False], ), ( ["1. Ant. ", "2. Bee!\n", "3. Cat?\t", "", "x", None], ["A", "B", "C", " ", "y", "e"], - [True, True, True, False, False, None], + [True, True, True, False, False, False], ), ], ) @@ -1115,7 +1112,7 @@ def test_string_contains_multi(data, sub, expect): sub = cudf.Series(sub) got = gs.str.contains(sub) expect = cudf.Series(expect) - assert_eq(expect, got, check_dtype=False) + assert_eq(expect, got) # Pandas does not allow 'case' or 'flags' if 'pat' is re.Pattern @@ -1135,7 +1132,7 @@ def test_string_compiled_re(ps_gs, pat, repl): expect = ps.str.match(pat) got = gs.str.match(pat) assert_eq(expect, got) - + # count raises error with re.compile expect = ps.str.count(pat) got = gs.str.count(pat) assert_eq(expect, got, check_dtype=False) @@ -1159,16 +1156,7 @@ def test_string_compiled_re(ps_gs, pat, repl): ], ) @pytest.mark.parametrize("pat", ["", " ", "a", "abc", "cat", "$", "\n"]) -@pytest.mark.parametrize( - "na", - [ - None - if PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION - else no_default, - True, - False, - ], -) +@pytest.mark.parametrize("na", [no_default, True, False]) def test_string_str_match(data, pat, na): ps = pd.Series(data) gs = cudf.Series(data) @@ -1796,22 +1784,24 @@ def test_split_part_whitespace(data, index, expected): @pytest.mark.parametrize("n", [-1, 0, 1, 4]) @pytest.mark.parametrize("expand", [True, False]) def test_strings_split(data, n, expand): - gs = cudf.Series(data) - ps = pd.Series(data) + gs = cudf.Series(data, dtype=pd.StringDtype("pyarrow")) + ps = gs.to_pandas() assert_eq( - ps.str.split(n=n, expand=expand).reset_index(), - gs.str.split(n=n, expand=expand).reset_index(), - check_index_type=False, + ps.str.split(n=n, expand=expand), + gs.str.split(n=n, expand=expand), + check_dtype=expand, ) assert_eq( ps.str.split(",", n=n, expand=expand), gs.str.split(",", n=n, expand=expand), + check_dtype=expand, ) assert_eq( ps.str.split("-", n=n, expand=expand), gs.str.split("-", n=n, expand=expand), + check_dtype=expand, ) @@ -1948,21 +1938,23 @@ def test_string_partition_fail(): @pytest.mark.parametrize("n", [-1, 2, 9]) @pytest.mark.parametrize("expand", [True, False]) def test_strings_rsplit(data, n, expand): - gs = cudf.Series(data) - ps = pd.Series(data) + gs = cudf.Series(data, dtype=pd.StringDtype("pyarrow")) + ps = gs.to_pandas() assert_eq( - ps.str.rsplit(n=n, expand=expand).reset_index(), - gs.str.rsplit(n=n, expand=expand).reset_index(), - check_index_type=False, + ps.str.rsplit(n=n, expand=expand), + gs.str.rsplit(n=n, expand=expand), + check_dtype=expand, ) assert_eq( ps.str.rsplit(",", n=n, expand=expand), gs.str.rsplit(",", n=n, expand=expand), + check_dtype=expand, ) assert_eq( ps.str.rsplit("-", n=n, expand=expand), gs.str.rsplit("-", n=n, expand=expand), + check_dtype=expand, ) @@ -2015,9 +2007,9 @@ def data_char_types(request): "islower", ], ) -def test_string_char_types(type_op, data_char_types): - gs = cudf.Series(data_char_types) - ps = pd.Series(data_char_types) +def test_string_char_types(request, type_op, data_char_types): + gs = cudf.Series(data_char_types, dtype=pd.StringDtype("python")) + ps = gs.to_pandas() assert_eq(getattr(gs.str, type_op)(), getattr(ps.str, type_op)()) @@ -2087,8 +2079,11 @@ def test_string_filter_alphanum(): ], ) def test_string_char_case(case_op, data_char_types): - gs = cudf.Series(data_char_types) - ps = pd.Series(data_char_types) + gs = cudf.Series(data_char_types, dtype=pd.StringDtype("python")) + ps = gs.to_pandas() + # https://github.com/pandas-dev/pandas/issues/63372 + # python/cudf/cudf/tests/series/accessors/test_str.py::test_string_char_case[data_char_types3-isdigit] + # python/cudf/cudf/tests/series/accessors/test_str.py::test_string_char_case[data_char_types6-isdigit] assert_eq(getattr(gs.str, case_op)(), getattr(ps.str, case_op)()) @@ -2253,13 +2248,13 @@ def test_string_split_all_empty(pat, regex, expand): @pytest.mark.parametrize("n", [-1, 0, 1, 3, 10]) @pytest.mark.parametrize("expand", [True, False]) def test_string_split_re(data, pat, n, expand): - ps = pd.Series(data, dtype="str") - gs = cudf.Series(data, dtype="str") + ps = pd.Series(data, dtype=pd.StringDtype("pyarrow")) + gs = cudf.from_pandas(ps) expect = ps.str.split(pat=pat, n=n, expand=expand, regex=True) got = gs.str.split(pat=pat, n=n, expand=expand, regex=True) - assert_eq(expect, got) + assert_eq(expect, got, check_dtype=expand) def test_string_lower(ps_gs): @@ -2286,14 +2281,13 @@ def test_string_lower(ps_gs): ], ) def test_string_lower_greek_final_sigma(data): - with cudf.option_context("mode.pandas_compatible", True): - ps = pd.Series([data]) - gs = cudf.Series([data]) + ps = pd.Series([data], dtype=pd.StringDtype("python")) + gs = cudf.from_pandas(ps) - expect = ps.str.lower() - got = gs.str.lower() + expect = ps.str.lower() + got = gs.str.lower() - assert_eq(expect, got) + assert_eq(expect, got) def test_string_upper(ps_gs): @@ -2318,13 +2312,12 @@ def test_string_upper(ps_gs): @pytest.mark.parametrize("n", [-1, 0, 1, 3, 10]) @pytest.mark.parametrize("expand", [True, False]) def test_string_split(data, pat, n, expand): - ps = pd.Series(data, dtype="str") - gs = cudf.Series(data, dtype="str") + ps = pd.Series(data, dtype=pd.StringDtype("pyarrow")) + gs = cudf.from_pandas(ps) expect = ps.str.split(pat=pat, n=n, expand=expand) got = gs.str.split(pat=pat, n=n, expand=expand) - - assert_eq(expect, got) + assert_eq(expect, got, check_dtype=expand) # Pandas doesn't respect the `n` parameter so ignoring it in test parameters @@ -2351,7 +2344,11 @@ def test_string_replace( @pytest.mark.parametrize("pat", ["A*", "F?H?"]) def test_string_replace_zero_length(ps_gs, pat): - ps, gs = ps_gs + _, gs = ps_gs + # https://github.com/pandas-dev/pandas/issues/64872 + # Need to typecast because of the above bug + gs = gs.astype(pd.StringDtype("python")) + ps = gs.to_pandas() expect = ps.str.replace(pat, "_", regex=True) got = gs.str.replace(pat, "_", regex=True) @@ -2383,16 +2380,7 @@ def test_string_replace_n(n): "flags,flags_raise", [(0, 0), (re.MULTILINE | re.DOTALL, 0), (re.I, 0), (re.I | re.DOTALL, 0)], ) -@pytest.mark.parametrize( - "na", - [ - None - if PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION - else no_default, - True, - False, - ], -) +@pytest.mark.parametrize("na", [no_default, True, False]) def test_string_contains(ps_gs, pat, regex, flags, flags_raise, na): ps, gs = ps_gs @@ -2479,10 +2467,14 @@ def test_string_repeat(data, repeats): ps = pd.Series(["hello", "world", None, "", "!"]) gs = cudf.from_pandas(ps) - expect = ps.str.repeat(repeats) - got = gs.str.repeat(repeats) + if isinstance(repeats, int) and repeats < 0: + with pytest.raises(ValueError): + gs.str.repeat(repeats) + else: + expect = ps.str.repeat(repeats) + got = gs.str.repeat(repeats) - assert_eq(expect, got) + assert_eq(expect, got) def test_string_cat_str_error(): @@ -2492,7 +2484,7 @@ def test_string_cat_str_error(): with pytest.raises( TypeError, match=re.escape( - "others must be Series, Index, DataFrame, np.ndarrary " + "others must be Series, Index, DataFrame, np.ndarray " "or list-like (either containing only strings or " "containing only objects of type Series/Index/" "np.ndarray[1-dim])" @@ -2777,20 +2769,36 @@ def test_string_index_duplicate_str_cat(data, others, sep, na_rep, name): ) @pytest.mark.parametrize("sep", [None, "", " ", "|", ",", "|||"]) @pytest.mark.parametrize("na_rep", [None, "", "null", "a"]) -@pytest.mark.parametrize( - "index", - [["1", "2", "3", "4", "5"]], -) -def test_string_cat(ps_gs, others, sep, na_rep, index): +def test_string_cat(ps_gs, others, sep, na_rep, index, request): + # https://github.com/pandas-dev/pandas/issues/63371 ps, gs = ps_gs - + is_any_others_ndarray = isinstance(others, (list, tuple)) and any( + isinstance(item, np.ndarray) for item in others + ) + is_any_others_series_with_string_index = isinstance( + others, (list, tuple) + ) and any( + isinstance(item, pd.Series) + and isinstance(item.index.dtype, pd.StringDtype) + for item in others + ) + request.applymarker( + pytest.mark.xfail( + is_any_others_series_with_string_index, + reason="https://github.com/rapidsai/cudf/issues/21123", + ) + ) pd_others = others gd_others = _cat_convert_seq_to_cudf(others) expect = ps.str.cat(others=pd_others, sep=sep, na_rep=na_rep) got = gs.str.cat(others=gd_others, sep=sep, na_rep=na_rep) + if is_any_others_ndarray: + # pandas returns Index[object] which cuDF doesn't support + expect.index = expect.index.astype(got.index.dtype) assert_eq(expect, got) + index = ["1", "2", "3", "4", "5"] ps.index = index gs.index = index @@ -2916,12 +2924,8 @@ def test_string_len(ps_gs): expect = ps.str.len() got = gs.str.len() - - # Can't handle nulls in Pandas so use PyArrow instead - # Pandas will return as a float64 so need to typecast to int32 - expect = pa.array(expect, from_pandas=True).cast(pa.int32()) - got = got.to_arrow() - assert pa.Array.equals(expect, got) + # pandas returns int64, cuDF returns int32 + assert_eq(expect, got, check_dtype=False) def test_string_concat(): @@ -2965,8 +2969,7 @@ def test_string_list_get_access(): gs = cudf.from_pandas(ps) expect = ps.str.split(",") - got = gs.str.split(",") - + got = gs.str.split(",").to_pandas().fillna(np.nan) assert_eq(expect, got) expect = expect.str.get(1) diff --git a/python/cudf/cudf/tests/series/indexing/test_getitem.py b/python/cudf/cudf/tests/series/indexing/test_getitem.py index c41bb5e0c98b..b6661059a4d7 100644 --- a/python/cudf/cudf/tests/series/indexing/test_getitem.py +++ b/python/cudf/cudf/tests/series/indexing/test_getitem.py @@ -8,9 +8,8 @@ import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq -from cudf.testing._utils import assert_exceptions_equal, expect_warning_if +from cudf.testing._utils import assert_exceptions_equal @pytest.mark.parametrize( @@ -341,16 +340,11 @@ def test_series_indexing(i1, i2, i3): assert series[i] == a1[i] -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.parametrize( "arg", [ 1, -1, - "b", np.int32(1), np.uint32(1), np.int8(1), @@ -361,18 +355,15 @@ def test_series_indexing(i1, i2, i3): np.uint64(1), ], ) -def test_series_get_item_iloc_defer(arg): +def test_series_get_item_integer_label_non_integer_index_raises(arg): # Indexing for non-numeric dtype Index ps = pd.Series([1, 2, 3], index=pd.Index(["a", "b", "c"])) gs = cudf.from_pandas(ps) - arg_not_str = not isinstance(arg, str) - with expect_warning_if(arg_not_str): - expect = ps[arg] - with expect_warning_if(arg_not_str): - got = gs[arg] - - assert_eq(expect, got) + with pytest.raises(KeyError): + ps[arg] + with pytest.raises(KeyError): + gs[arg] def test_series_indexing_large_size(): diff --git a/python/cudf/cudf/tests/series/indexing/test_iloc.py b/python/cudf/cudf/tests/series/indexing/test_iloc.py index 1bc440a8f282..5d41ea31d47d 100644 --- a/python/cudf/cudf/tests/series/indexing/test_iloc.py +++ b/python/cudf/cudf/tests/series/indexing/test_iloc.py @@ -1,16 +1,14 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import cupy as cp import numpy as np import pandas as pd -import pyarrow as pa import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq -from cudf.testing._utils import assert_exceptions_equal, expect_warning_if +from cudf.testing._utils import assert_exceptions_equal def test_series_setitem_singleton_range(): @@ -58,21 +56,23 @@ def test_string_get_item(data, item): ps = pd.Series(data, dtype="str", name="nice name") gs = cudf.Series(data, dtype="str", name="nice name") - got = gs.iloc[item] - if isinstance(got, cudf.Series): - got = got.to_arrow() - if isinstance(item, cp.ndarray): - item = cp.asnumpy(item) + item_np = cp.asnumpy(item) + else: + item_np = item + + got = gs.iloc[item] + expect = ps.iloc[item_np] - expect = ps.iloc[item] if isinstance(expect, pd.Series): - expect = pa.Array.from_pandas(expect) - pa.Array.equals(expect, got) + assert_eq(expect, got) else: if got is cudf.NA and expect is None: return - assert expect == got + if isinstance(expect, float) and np.isnan(expect): + assert isinstance(got, float) and np.isnan(got) + else: + assert expect == got @pytest.mark.parametrize("bool_", [True, False]) @@ -83,19 +83,21 @@ def test_string_bool_mask(data, bool_, box): gs = cudf.Series(data, dtype="str", name="nice name") item = box([bool_] * len(data)) - got = gs.iloc[item] - if isinstance(got, cudf.Series): - got = got.to_arrow() - if isinstance(item, cp.ndarray): - item = cp.asnumpy(item) + item_np = cp.asnumpy(item) + else: + item_np = item + + got = gs.iloc[item] + expect = ps[item_np] - expect = ps[item] if isinstance(expect, pd.Series): - expect = pa.Array.from_pandas(expect) - pa.Array.equals(expect, got) + assert_eq(expect, got) else: - assert expect == got + got_scalar = got + if got_scalar is cudf.NA and expect is None: + return + assert expect == got_scalar def test_series_iloc(): @@ -134,10 +136,6 @@ def test_series_iloc(): ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.parametrize( "key, value", [ @@ -148,7 +146,6 @@ def test_series_iloc(): (slice(0, 2), [4, 5]), (slice(1, None), [4, 5, 6, 7]), ([], 1), - ([], []), (slice(None, None), 1), (slice(-1, -3), 7), ], @@ -161,14 +158,9 @@ def test_series_setitem_iloc(key, value, nulls): elif nulls == "all": psr[:] = None gsr = cudf.from_pandas(psr) - with expect_warning_if( - isinstance(value, list) and len(value) == 0 and nulls == "none" - ): - psr.iloc[key] = value - with expect_warning_if( - isinstance(value, list) and len(value) == 0 and not len(key) == 0 - ): - gsr.iloc[key] = value + gsr.iloc[key] = value + psr.iloc[key] = value + assert_eq(psr, gsr, check_dtype=False) diff --git a/python/cudf/cudf/tests/series/indexing/test_loc.py b/python/cudf/cudf/tests/series/indexing/test_loc.py index 5a3196910aa9..3d1a425add80 100644 --- a/python/cudf/cudf/tests/series/indexing/test_loc.py +++ b/python/cudf/cudf/tests/series/indexing/test_loc.py @@ -7,7 +7,6 @@ import pytest import cudf -from cudf.core._compat import PANDAS_GE_210 from cudf.testing import assert_eq @@ -297,13 +296,7 @@ def test_loc_datetime_index_slice_not_in(sli): slice(None, "2009"), ], ) -def test_loc_datetime_index_string_slice_non_monotonic(request, sli): - request.applymarker( - pytest.mark.xfail( - condition=not PANDAS_GE_210, - reason="See https://github.com/pandas-dev/pandas/issues/53983", - ) - ) +def test_loc_datetime_index_string_slice_non_monotonic(sli): pd_data = pd.Series( [1, 2, 3], pd.Series(["2001", "2009", "2002"], dtype="datetime64[ns]"), diff --git a/python/cudf/cudf/tests/series/indexing/test_setitem.py b/python/cudf/cudf/tests/series/indexing/test_setitem.py index 06170d3b8e4b..395aeea5ee98 100644 --- a/python/cudf/cudf/tests/series/indexing/test_setitem.py +++ b/python/cudf/cudf/tests/series/indexing/test_setitem.py @@ -9,10 +9,8 @@ import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION -from cudf.core.buffer.spill_manager import get_global_manager from cudf.testing import assert_eq -from cudf.testing._utils import assert_exceptions_equal, expect_warning_if +from cudf.testing._utils import assert_exceptions_equal @pytest.mark.parametrize( @@ -102,30 +100,16 @@ def test_series_slice_setitem_struct(): assert_eq(actual, expected) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -@pytest.mark.parametrize("dtype", [np.int32, np.int64, np.float32, np.float64]) +@pytest.mark.parametrize("dtype", [np.int32, np.int64, np.float32]) @pytest.mark.parametrize("indices", [0, [1, 2]]) -def test_series_setitem_upcasting(dtype, indices): +def test_series_setitem_upcasting_raises(dtype, indices): sr = pd.Series([0, 0, 0], dtype=dtype) cr = cudf.from_pandas(sr) - assert_eq(sr, cr) - # Must be a non-integral floating point value that can't be losslessly - # converted to float32, otherwise pandas will try and match the source - # column dtype. new_value = np.float64(np.pi) - col_ref = cr._column - with expect_warning_if(dtype != np.float64): + with pytest.raises(TypeError): sr[indices] = new_value - with expect_warning_if(dtype != np.float64): + with pytest.raises(TypeError): cr[indices] = new_value - assert_eq(sr, cr) - - if dtype == np.float64: - # no-op type cast should not modify backing column - assert col_ref == cr._column @pytest.mark.parametrize( @@ -178,11 +162,10 @@ def test_series_setitem_upcasting_string_column(): def test_series_setitem_upcasting_string_value(): sr = cudf.Series([0, 0, 0], dtype=int) - # This is a distinction with pandas, which lets you instead make an - # object column with ["10", 0, 0] - sr[0] = "10" - assert_eq(pd.Series([10, 0, 0], dtype=int), sr) - with pytest.raises(ValueError): + # Matches pandas: assigning a string scalar to a numeric column raises. + with pytest.raises(TypeError, match="Invalid value"): + sr[0] = "10" + with pytest.raises(TypeError, match="Invalid value"): sr[0] = "non-integer" @@ -428,339 +411,235 @@ def test_null_copy(): assert len(col) == 2049 -@pytest.mark.parametrize( - "copy_on_write, expected", - [ - (True, [1, 2, 3, 4, 5]), - (False, [1, 100, 3, 4, 5]), - ], -) -def test_series_setitem_cow(copy_on_write, expected): - with cudf.option_context("copy_on_write", copy_on_write): - actual = cudf.Series([1, 2, 3, 4, 5]) - new_copy = actual.copy(deep=False) +def test_series_setitem_cow(): + actual = cudf.Series([1, 2, 3, 4, 5]) + new_copy = actual.copy(deep=False) - actual[1] = 100 - assert_eq(actual, cudf.Series([1, 100, 3, 4, 5])) - assert_eq(new_copy, cudf.Series(expected)) + actual[1] = 100 + assert_eq(actual, cudf.Series([1, 100, 3, 4, 5])) + assert_eq(new_copy, cudf.Series([1, 2, 3, 4, 5])) -def test_series_setitem_both_slice_cow_on(): - with cudf.option_context("copy_on_write", True): - actual = cudf.Series([1, 2, 3, 4, 5]) - new_copy = actual.copy(deep=False) +def test_series_setitem_both_slice(): + actual = cudf.Series([1, 2, 3, 4, 5]) + new_copy = actual.copy(deep=False) - actual[slice(0, 2, 1)] = 100 - assert_eq(actual, cudf.Series([100, 100, 3, 4, 5])) - assert_eq(new_copy, cudf.Series([1, 2, 3, 4, 5])) + actual[slice(0, 2, 1)] = 100 + assert_eq(actual, cudf.Series([100, 100, 3, 4, 5])) + assert_eq(new_copy, cudf.Series([1, 2, 3, 4, 5])) - new_copy[slice(2, 4, 1)] = 300 - assert_eq(actual, cudf.Series([100, 100, 3, 4, 5])) - assert_eq(new_copy, cudf.Series([1, 2, 300, 300, 5])) + new_copy[slice(2, 4, 1)] = 300 + assert_eq(actual, cudf.Series([100, 100, 3, 4, 5])) + assert_eq(new_copy, cudf.Series([1, 2, 300, 300, 5])) -def test_series_setitem_both_slice_cow_off(): - with cudf.option_context("copy_on_write", False): - actual = cudf.Series([1, 2, 3, 4, 5]) - new_copy = actual.copy(deep=False) +def test_series_setitem_partial_slice(): + actual = cudf.Series([1, 2, 3, 4, 5]) + new_copy = actual.copy(deep=False) - actual[slice(0, 2, 1)] = 100 - assert_eq(actual, cudf.Series([100, 100, 3, 4, 5])) - assert_eq(new_copy, cudf.Series([100, 100, 3, 4, 5])) + new_copy[slice(2, 4, 1)] = 300 + assert_eq(actual, cudf.Series([1, 2, 3, 4, 5])) + assert_eq(new_copy, cudf.Series([1, 2, 300, 300, 5])) - new_copy[slice(2, 4, 1)] = 300 - assert_eq(actual, cudf.Series([100, 100, 300, 300, 5])) - assert_eq(new_copy, cudf.Series([100, 100, 300, 300, 5])) + new_slice = actual[2:] + assert new_slice._column.data.owner == actual._column.data.owner + new_slice[0:2] = 10 + assert_eq(new_slice, cudf.Series([10, 10, 5], index=[2, 3, 4])) + assert_eq(actual, cudf.Series([1, 2, 3, 4, 5])) -def test_series_setitem_partial_slice_cow_on(): - with cudf.option_context("copy_on_write", True): - actual = cudf.Series([1, 2, 3, 4, 5]) - new_copy = actual.copy(deep=False) +def test_multiple_series_cow(): + # Verify constructing, modifying, deleting + # multiple copies of a series preserves + # the data appropriately when COW is enabled. + s = cudf.Series([10, 20, 30, 40, 50]) + s1 = s.copy(deep=False) + s2 = s.copy(deep=False) + s3 = s.copy(deep=False) + s4 = s2.copy(deep=False) + s5 = s4.copy(deep=False) + s6 = s3.copy(deep=False) + + s1[0:3] = 10000 + # s1 will be unlinked from actual data in s, + # and then modified. Rest all should + # contain the original data. + assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) + for ser in [s, s2, s3, s4, s5, s6]: + assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) + + s6[0:3] = 3000 + # s6 will be unlinked from actual data in s, + # and then modified. Rest all should + # contain the original data. + assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) + assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) + for ser in [s2, s3, s4, s5]: + assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) + + s2[1:4] = 4000 + # s2 will be unlinked from actual data in s, + # and then modified. Rest all should + # contain the original data. + assert_eq(s2, cudf.Series([10, 4000, 4000, 4000, 50])) + assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) + assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) + for ser in [s3, s4, s5]: + assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) + + s4[2:4] = 5000 + # s4 will be unlinked from actual data in s, + # and then modified. Rest all should + # contain the original data. + assert_eq(s4, cudf.Series([10, 20, 5000, 5000, 50])) + assert_eq(s2, cudf.Series([10, 4000, 4000, 4000, 50])) + assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) + assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) + for ser in [s3, s5]: + assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) + + s5[2:4] = 6000 + # s5 will be unlinked from actual data in s, + # and then modified. Rest all should + # contain the original data. + assert_eq(s5, cudf.Series([10, 20, 6000, 6000, 50])) + assert_eq(s4, cudf.Series([10, 20, 5000, 5000, 50])) + assert_eq(s2, cudf.Series([10, 4000, 4000, 4000, 50])) + assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) + assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) + for ser in [s3]: + assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) + + s7 = s5.copy(deep=False) + assert_eq(s7, cudf.Series([10, 20, 6000, 6000, 50])) + s7[1:3] = 55 + # Making a copy of s5, i.e., s7 and modifying shouldn't + # be touching/modifying data in other series. + assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) + + assert_eq(s4, cudf.Series([10, 20, 5000, 5000, 50])) + assert_eq(s2, cudf.Series([10, 4000, 4000, 4000, 50])) + assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) + assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) + for ser in [s3]: + assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) + + # Deleting any of the following series objects + # shouldn't delete rest of the weekly referenced data + # elsewhere. + + del s2 + + assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) + assert_eq(s3, cudf.Series([10, 20, 30, 40, 50])) + assert_eq(s4, cudf.Series([10, 20, 5000, 5000, 50])) + assert_eq(s5, cudf.Series([10, 20, 6000, 6000, 50])) + assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) + assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) + + del s4 + del s1 + + assert_eq(s3, cudf.Series([10, 20, 30, 40, 50])) + assert_eq(s5, cudf.Series([10, 20, 6000, 6000, 50])) + assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) + assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) + + del s + del s6 + + assert_eq(s3, cudf.Series([10, 20, 30, 40, 50])) + assert_eq(s5, cudf.Series([10, 20, 6000, 6000, 50])) + assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) + + del s5 + + assert_eq(s3, cudf.Series([10, 20, 30, 40, 50])) + assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) + + del s3 + assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) + + +def test_series_zero_copy_cow(): + s = cudf.Series([1, 2, 3, 4, 5]) + s1 = s.copy(deep=False) + cp_array = cp.asarray(s) + + # Ensure all original data & zero-copied + # data is same. + assert_eq(s, cudf.Series([1, 2, 3, 4, 5])) + assert_eq(s1, cudf.Series([1, 2, 3, 4, 5])) + assert_eq(cp_array, cp.array([1, 2, 3, 4, 5])) + + cp_array[0:3] = 10 + + assert_eq(s.to_numpy(), np.array([10, 10, 10, 4, 5])) + assert_eq(s, cudf.Series([10, 10, 10, 4, 5])) + assert_eq(s1, cudf.Series([10, 10, 10, 4, 5])) + assert_eq(cp_array, cp.array([10, 10, 10, 4, 5])) + + s2 = cudf.Series(cp_array) + assert_eq(s2, cudf.Series([10, 10, 10, 4, 5])) + + s3 = s2.copy(deep=False) + cp_array[0] = 20 + + assert_eq(s, cudf.Series([20, 10, 10, 4, 5])) + assert_eq(s1, cudf.Series([20, 10, 10, 4, 5])) + assert_eq(cp_array, cp.array([20, 10, 10, 4, 5])) + assert_eq(s2, cudf.Series([20, 10, 10, 4, 5])) + assert_eq(s3, cudf.Series([20, 10, 10, 4, 5])) + + s4 = cudf.Series([10, 20, 30, 40, 50]) + s5 = cudf.Series(s4) + assert_eq(s5, cudf.Series([10, 20, 30, 40, 50])) + s5[0:2] = 1 + # With CoW, modifying `s5` should NOT modify `s4`. + assert_eq(s5, cudf.Series([1, 1, 30, 40, 50])) + assert_eq(s4, cudf.Series([10, 20, 30, 40, 50])) + + +def test_series_str_copy(): + s = cudf.Series(["a", "b", "c", "d", "e"]) + s1 = s.copy(deep=True) + s2 = s.copy(deep=True) - new_copy[slice(2, 4, 1)] = 300 - assert_eq(actual, cudf.Series([1, 2, 3, 4, 5])) - assert_eq(new_copy, cudf.Series([1, 2, 300, 300, 5])) + assert_eq(s, cudf.Series(["a", "b", "c", "d", "e"])) + assert_eq(s1, cudf.Series(["a", "b", "c", "d", "e"])) + assert_eq(s2, cudf.Series(["a", "b", "c", "d", "e"])) - new_slice = actual[2:] - assert new_slice._column.data.owner == actual._column.data.owner - new_slice[0:2] = 10 - assert_eq(new_slice, cudf.Series([10, 10, 5], index=[2, 3, 4])) - assert_eq(actual, cudf.Series([1, 2, 3, 4, 5])) + s[0:3] = "abc" + assert_eq(s, cudf.Series(["abc", "abc", "abc", "d", "e"])) + assert_eq(s1, cudf.Series(["a", "b", "c", "d", "e"])) + assert_eq(s2, cudf.Series(["a", "b", "c", "d", "e"])) -def test_series_setitem_partial_slice_cow_off(): - with cudf.option_context("copy_on_write", False): - actual = cudf.Series([1, 2, 3, 4, 5]) - new_copy = actual.copy(deep=False) + s2[1:4] = "xyz" - new_copy[slice(2, 4, 1)] = 300 - assert_eq(actual, cudf.Series([1, 2, 300, 300, 5])) - assert_eq(new_copy, cudf.Series([1, 2, 300, 300, 5])) + assert_eq(s, cudf.Series(["abc", "abc", "abc", "d", "e"])) + assert_eq(s1, cudf.Series(["a", "b", "c", "d", "e"])) + assert_eq(s2, cudf.Series(["a", "xyz", "xyz", "xyz", "e"])) - new_slice = actual[2:] - # Since COW is off, a slice should point to the same memory - ptr1 = new_slice._column.data.ptr - ptr2 = actual._column.data.ptr - assert ptr1 == ptr2 - new_slice[0:2] = 10 - assert_eq(new_slice, cudf.Series([10, 10, 5], index=[2, 3, 4])) - assert_eq(actual, cudf.Series([1, 2, 10, 10, 5])) +def test_series_cat_copy(): + s = cudf.Series([10, 20, 30, 40, 50], dtype="category") + s1 = s.copy(deep=True) + s2 = s1.copy(deep=True) + s3 = s1.copy(deep=True) + s[0] = 50 + assert_eq(s, cudf.Series([50, 20, 30, 40, 50], dtype=s.dtype)) + assert_eq(s1, cudf.Series([10, 20, 30, 40, 50], dtype="category")) + assert_eq(s2, cudf.Series([10, 20, 30, 40, 50], dtype="category")) + assert_eq(s3, cudf.Series([10, 20, 30, 40, 50], dtype="category")) -def test_multiple_series_cow(): - with cudf.option_context("copy_on_write", True): - # Verify constructing, modifying, deleting - # multiple copies of a series preserves - # the data appropriately when COW is enabled. - s = cudf.Series([10, 20, 30, 40, 50]) - s1 = s.copy(deep=False) - s2 = s.copy(deep=False) - s3 = s.copy(deep=False) - s4 = s2.copy(deep=False) - s5 = s4.copy(deep=False) - s6 = s3.copy(deep=False) - - s1[0:3] = 10000 - # s1 will be unlinked from actual data in s, - # and then modified. Rest all should - # contain the original data. - assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) - for ser in [s, s2, s3, s4, s5, s6]: - assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) - - s6[0:3] = 3000 - # s6 will be unlinked from actual data in s, - # and then modified. Rest all should - # contain the original data. - assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) - assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) - for ser in [s2, s3, s4, s5]: - assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) - - s2[1:4] = 4000 - # s2 will be unlinked from actual data in s, - # and then modified. Rest all should - # contain the original data. - assert_eq(s2, cudf.Series([10, 4000, 4000, 4000, 50])) - assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) - assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) - for ser in [s3, s4, s5]: - assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) - - s4[2:4] = 5000 - # s4 will be unlinked from actual data in s, - # and then modified. Rest all should - # contain the original data. - assert_eq(s4, cudf.Series([10, 20, 5000, 5000, 50])) - assert_eq(s2, cudf.Series([10, 4000, 4000, 4000, 50])) - assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) - assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) - for ser in [s3, s5]: - assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) - - s5[2:4] = 6000 - # s5 will be unlinked from actual data in s, - # and then modified. Rest all should - # contain the original data. - assert_eq(s5, cudf.Series([10, 20, 6000, 6000, 50])) - assert_eq(s4, cudf.Series([10, 20, 5000, 5000, 50])) - assert_eq(s2, cudf.Series([10, 4000, 4000, 4000, 50])) - assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) - assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) - for ser in [s3]: - assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) - - s7 = s5.copy(deep=False) - assert_eq(s7, cudf.Series([10, 20, 6000, 6000, 50])) - s7[1:3] = 55 - # Making a copy of s5, i.e., s7 and modifying shouldn't - # be touching/modifying data in other series. - assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) - - assert_eq(s4, cudf.Series([10, 20, 5000, 5000, 50])) - assert_eq(s2, cudf.Series([10, 4000, 4000, 4000, 50])) - assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) - assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) - for ser in [s3]: - assert_eq(ser, cudf.Series([10, 20, 30, 40, 50])) - - # Deleting any of the following series objects - # shouldn't delete rest of the weekly referenced data - # elsewhere. - - del s2 - - assert_eq(s1, cudf.Series([10000, 10000, 10000, 40, 50])) - assert_eq(s3, cudf.Series([10, 20, 30, 40, 50])) - assert_eq(s4, cudf.Series([10, 20, 5000, 5000, 50])) - assert_eq(s5, cudf.Series([10, 20, 6000, 6000, 50])) - assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) - assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) - - del s4 - del s1 - - assert_eq(s3, cudf.Series([10, 20, 30, 40, 50])) - assert_eq(s5, cudf.Series([10, 20, 6000, 6000, 50])) - assert_eq(s6, cudf.Series([3000, 3000, 3000, 40, 50])) - assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) - - del s - del s6 - - assert_eq(s3, cudf.Series([10, 20, 30, 40, 50])) - assert_eq(s5, cudf.Series([10, 20, 6000, 6000, 50])) - assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) - - del s5 - - assert_eq(s3, cudf.Series([10, 20, 30, 40, 50])) - assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) - - del s3 - assert_eq(s7, cudf.Series([10, 55, 55, 6000, 50])) - - -def test_series_zero_copy_cow_on(): - with cudf.option_context("copy_on_write", True): - s = cudf.Series([1, 2, 3, 4, 5]) - s1 = s.copy(deep=False) - cp_array = cp.asarray(s) - - # Ensure all original data & zero-copied - # data is same. - assert_eq(s, cudf.Series([1, 2, 3, 4, 5])) - assert_eq(s1, cudf.Series([1, 2, 3, 4, 5])) - assert_eq(cp_array, cp.array([1, 2, 3, 4, 5])) - - cp_array[0:3] = 10 - - assert_eq(s.to_numpy(), np.array([10, 10, 10, 4, 5])) - assert_eq(s, cudf.Series([10, 10, 10, 4, 5])) - assert_eq(s1, cudf.Series([10, 10, 10, 4, 5])) - assert_eq(cp_array, cp.array([10, 10, 10, 4, 5])) - - s2 = cudf.Series(cp_array) - assert_eq(s2, cudf.Series([10, 10, 10, 4, 5])) - - s3 = s2.copy(deep=False) - cp_array[0] = 20 - - assert_eq(s, cudf.Series([20, 10, 10, 4, 5])) - assert_eq(s1, cudf.Series([20, 10, 10, 4, 5])) - assert_eq(cp_array, cp.array([20, 10, 10, 4, 5])) - assert_eq(s2, cudf.Series([20, 10, 10, 4, 5])) - assert_eq(s3, cudf.Series([20, 10, 10, 4, 5])) - - s4 = cudf.Series([10, 20, 30, 40, 50]) - s5 = cudf.Series(s4) - assert_eq(s5, cudf.Series([10, 20, 30, 40, 50])) - s5[0:2] = 1 - # Modifying `s5` should also modify `s4` - # because they are zero-copied. - assert_eq(s5, cudf.Series([1, 1, 30, 40, 50])) - assert_eq(s4, cudf.Series([1, 1, 30, 40, 50])) - - -def test_series_zero_copy_cow_off(): - is_spill_enabled = get_global_manager() is not None - - with cudf.option_context("copy_on_write", False): - s = cudf.Series([1, 2, 3, 4, 5]) - s1 = s.copy(deep=False) - cp_array = cp.asarray(s) - - # Ensure all original data & zero-copied - # data is same. - assert_eq(s, cudf.Series([1, 2, 3, 4, 5])) - assert_eq(s1, cudf.Series([1, 2, 3, 4, 5])) - assert_eq(cp_array, cp.array([1, 2, 3, 4, 5])) - - cp_array[0:3] = 10 - # When COW is off, modifying a zero-copied array - # will need to modify `s` & `s1` since they are - # shallow copied. - - assert_eq(s, cudf.Series([10, 10, 10, 4, 5])) - assert_eq(s1, cudf.Series([10, 10, 10, 4, 5])) - assert_eq(cp_array, cp.array([10, 10, 10, 4, 5])) - - s2 = cudf.Series(cp_array) - assert_eq(s2, cudf.Series([10, 10, 10, 4, 5])) - s3 = s2.copy(deep=False) - cp_array[0] = 20 - - # Modifying `cp_array`, will propagate the changes - # across all Series objects, because they are - # either shallow copied or zero-copied. - - assert_eq(s, cudf.Series([20, 10, 10, 4, 5])) - assert_eq(s1, cudf.Series([20, 10, 10, 4, 5])) - assert_eq(cp_array, cp.array([20, 10, 10, 4, 5])) - if not is_spill_enabled: - # Since spilling might make a copy of the data, we cannot - # expect the two series to be a zero-copy of the cupy array - # when spilling is enabled globally. - assert_eq(s2, cudf.Series([20, 10, 10, 4, 5])) - assert_eq(s3, cudf.Series([20, 10, 10, 4, 5])) - - s4 = cudf.Series([10, 20, 30, 40, 50]) - s5 = cudf.Series(s4) - assert_eq(s5, cudf.Series([10, 20, 30, 40, 50])) - s5[0:2] = 1 - - # Modifying `s5` should also modify `s4` - # because they are zero-copied. - assert_eq(s5, cudf.Series([1, 1, 30, 40, 50])) - assert_eq(s4, cudf.Series([1, 1, 30, 40, 50])) - - -@pytest.mark.parametrize("copy_on_write", [True, False]) -def test_series_str_copy(copy_on_write): - with cudf.option_context("copy_on_write", copy_on_write): - s = cudf.Series(["a", "b", "c", "d", "e"]) - s1 = s.copy(deep=True) - s2 = s.copy(deep=True) - - assert_eq(s, cudf.Series(["a", "b", "c", "d", "e"])) - assert_eq(s1, cudf.Series(["a", "b", "c", "d", "e"])) - assert_eq(s2, cudf.Series(["a", "b", "c", "d", "e"])) - - s[0:3] = "abc" - - assert_eq(s, cudf.Series(["abc", "abc", "abc", "d", "e"])) - assert_eq(s1, cudf.Series(["a", "b", "c", "d", "e"])) - assert_eq(s2, cudf.Series(["a", "b", "c", "d", "e"])) - - s2[1:4] = "xyz" - - assert_eq(s, cudf.Series(["abc", "abc", "abc", "d", "e"])) - assert_eq(s1, cudf.Series(["a", "b", "c", "d", "e"])) - assert_eq(s2, cudf.Series(["a", "xyz", "xyz", "xyz", "e"])) - - -@pytest.mark.parametrize("copy_on_write", [True, False]) -def test_series_cat_copy(copy_on_write): - with cudf.option_context("copy_on_write", copy_on_write): - s = cudf.Series([10, 20, 30, 40, 50], dtype="category") - s1 = s.copy(deep=True) - s2 = s1.copy(deep=True) - s3 = s1.copy(deep=True) - - s[0] = 50 - assert_eq(s, cudf.Series([50, 20, 30, 40, 50], dtype=s.dtype)) - assert_eq(s1, cudf.Series([10, 20, 30, 40, 50], dtype="category")) - assert_eq(s2, cudf.Series([10, 20, 30, 40, 50], dtype="category")) - assert_eq(s3, cudf.Series([10, 20, 30, 40, 50], dtype="category")) - - s2[3] = 10 - s3[2:5] = 20 - assert_eq(s, cudf.Series([50, 20, 30, 40, 50], dtype=s.dtype)) - assert_eq(s1, cudf.Series([10, 20, 30, 40, 50], dtype=s.dtype)) - assert_eq(s2, cudf.Series([10, 20, 30, 10, 50], dtype=s.dtype)) - assert_eq(s3, cudf.Series([10, 20, 20, 20, 20], dtype=s.dtype)) + s2[3] = 10 + s3[2:5] = 20 + assert_eq(s, cudf.Series([50, 20, 30, 40, 50], dtype=s.dtype)) + assert_eq(s1, cudf.Series([10, 20, 30, 40, 50], dtype=s.dtype)) + assert_eq(s2, cudf.Series([10, 20, 30, 10, 50], dtype=s.dtype)) + assert_eq(s3, cudf.Series([10, 20, 20, 20, 20], dtype=s.dtype)) @pytest.mark.parametrize( @@ -845,11 +724,11 @@ def test_series_setitem_decimal(data, dtype, item, to, expect): assert_eq(data, expect) -def test_categorical_setitem_with_nan(): +def test_categorical_setitem_with_na(): gs = cudf.Series( [1, 2, np.nan, 10, np.nan, None], nan_as_null=False ).astype("category") - gs[[1, 3]] = np.nan + gs[[1, 3]] = None expected_series = cudf.Series( [1, np.nan, np.nan, np.nan, np.nan, None], nan_as_null=False @@ -857,10 +736,6 @@ def test_categorical_setitem_with_nan(): assert_eq(gs, expected_series) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.parametrize( "key, value", [ @@ -871,7 +746,6 @@ def test_categorical_setitem_with_nan(): (slice(0, 2), [4, 5]), (slice(1, None), [4, 5, 6, 7]), ([], 1), - ([], []), (slice(None, None), 1), (slice(-1, -3), 7), ], @@ -884,17 +758,20 @@ def test_series_setitem_basics(key, value, nulls): elif nulls == "all": psr[:] = None gsr = cudf.from_pandas(psr) - with expect_warning_if( - isinstance(value, list) and len(value) == 0 and nulls == "none" - ): - psr[key] = value - with expect_warning_if( - isinstance(value, list) and len(value) == 0 and not len(key) == 0 - ): - gsr[key] = value + psr[key] = value + gsr[key] = value assert_eq(psr, gsr, check_dtype=False) +def test_series_setitem_empty_list_raises(): + psr = pd.Series([1, 2, 3, 4, 5]) + gsr = cudf.Series([1, 2, 3, 4, 5]) + with pytest.raises(TypeError): + psr[[]] = [] + with pytest.raises(TypeError): + gsr[[]] = [] + + def test_series_setitem_null(): gsr = cudf.Series([1, 2, 3, 4]) gsr[0] = None @@ -914,27 +791,19 @@ def test_series_setitem_null(): @pytest.mark.parametrize( "key, value", [ - (0, 0.5), - ([0, 1], 0.5), ([0, 1], [0.5, 2.5]), (slice(0, 2), [0.5, 0.25]), ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) -def test_series_setitem_dtype(key, value): +def test_series_setitem_upcasting_list_like_raises(key, value): psr = pd.Series([1, 2, 3], dtype="int32") gsr = cudf.from_pandas(psr) - with pytest.warns(FutureWarning): + with pytest.raises(TypeError): psr[key] = value - with pytest.warns(FutureWarning): + with pytest.raises(TypeError): gsr[key] = value - assert_eq(psr, gsr) - def test_series_setitem_datetime(): psr = pd.Series(["2001", "2002", "2003"], dtype="datetime64[ns]") @@ -1024,3 +893,100 @@ def test_out_of_bounds_indexing(): lambda: psr.__setitem__([0, 1, -4], 2), lambda: gsr.__setitem__([0, 1, -4], 2), ) + + +@pytest.mark.parametrize( + "dtype", + ["datetime64[ns]", "datetime64[us]", "timedelta64[ns]", "timedelta64[us]"], +) +@pytest.mark.parametrize("value", [0, 1, 0.0, 1.5]) +def test_temporal_setitem_numeric_scalar_pandas_compat(dtype, value): + # cuDF must reject scalar int/float assignment into datetime/timedelta + # columns under pandas-compatible mode (pyarrow would silently coerce + # them to epoch values). + psr = pd.Series([1, 2, 3], dtype=dtype) + gsr = cudf.from_pandas(psr) + with cudf.option_context("mode.pandas_compatible", True): + assert_exceptions_equal( + lfunc=psr.__setitem__, + rfunc=gsr.__setitem__, + lfunc_args_and_kwargs=([0, value], {}), + rfunc_args_and_kwargs=([0, value], {}), + ) + + +@pytest.mark.parametrize( + "dtype", + ["datetime64[ns]", "datetime64[us]", "timedelta64[ns]", "timedelta64[us]"], +) +def test_temporal_setitem_numeric_array_pandas_compat(dtype): + # cuDF must reject numeric array assignment into temporal columns + # under pandas-compatible mode. + psr = pd.Series([1, 2, 3], dtype=dtype) + gsr = cudf.from_pandas(psr) + with cudf.option_context("mode.pandas_compatible", True): + assert_exceptions_equal( + lfunc=psr.__setitem__, + rfunc=gsr.__setitem__, + lfunc_args_and_kwargs=([[0, 1], pd.Series([0, 1])], {}), + rfunc_args_and_kwargs=([[0, 1], cudf.Series([0, 1])], {}), + ) + + +@pytest.mark.parametrize("value", [None, np.nan, pd.NA]) +def test_bool_setitem_null_pandas_compat(value): + # bool dtype cannot hold NA without dtype change; pandas raises + # TypeError when assigning a null-like into a bool column. + psr = pd.Series([True, False, True]) + gsr = cudf.from_pandas(psr) + with cudf.option_context("mode.pandas_compatible", True): + assert_exceptions_equal( + lfunc=psr.__setitem__, + rfunc=gsr.__setitem__, + lfunc_args_and_kwargs=([0, value], {}), + rfunc_args_and_kwargs=([0, value], {}), + ) + + +@pytest.mark.parametrize("value", [1, 1.5, True, [1, 2]]) +def test_string_setitem_non_string_pandas_compat(value): + # pandas string dtype rejects non-string values (int/float/bool/etc.) + # cuDF must raise TypeError to match. + psr = pd.Series(["a", "b", "c"], dtype="str") + gsr = cudf.from_pandas(psr) + with cudf.option_context("mode.pandas_compatible", True): + if isinstance(value, list): + assert_exceptions_equal( + lfunc=psr.__setitem__, + rfunc=gsr.__setitem__, + lfunc_args_and_kwargs=([[0, 1], value], {}), + rfunc_args_and_kwargs=([[0, 1], value], {}), + ) + else: + assert_exceptions_equal( + lfunc=psr.__setitem__, + rfunc=gsr.__setitem__, + lfunc_args_and_kwargs=([0, value], {}), + rfunc_args_and_kwargs=([0, value], {}), + ) + + +@pytest.mark.parametrize("dtype", ["int8", "int16", "int32", "int64"]) +def test_int_setitem_lossy_float_array_pandas_compat(dtype): + # pandas rejects float→int array assignment when values can't be + # losslessly cast (have non-zero fractional parts). + psr = pd.Series([10, 11, 12], dtype=dtype) + gsr = cudf.from_pandas(psr) + with cudf.option_context("mode.pandas_compatible", True): + assert_exceptions_equal( + lfunc=psr.__setitem__, + rfunc=gsr.__setitem__, + lfunc_args_and_kwargs=( + [[0, 1], pd.Series([0.5, 1.5], index=[0, 1])], + {}, + ), + rfunc_args_and_kwargs=( + [[0, 1], cudf.Series([0.5, 1.5], index=[0, 1])], + {}, + ), + ) diff --git a/python/cudf/cudf/tests/series/methods/test_add_prefix_suffix.py b/python/cudf/cudf/tests/series/methods/test_add_prefix_suffix.py index 5d9de81a6fff..301b323d4c66 100644 --- a/python/cudf/cudf/tests/series/methods/test_add_prefix_suffix.py +++ b/python/cudf/cudf/tests/series/methods/test_add_prefix_suffix.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -13,7 +13,8 @@ def test_series_add_prefix(): got = cd_s.add_prefix("item_") expected = pd_s.add_prefix("item_") - assert_eq(got, expected) + # Pandas still returns "object" dtype for the index, while cuDF returns "string" dtype. Ignore index type for this test. + assert_eq(got, expected, check_index_type=False) def test_series_add_suffix(): @@ -23,4 +24,5 @@ def test_series_add_suffix(): got = cd_s.add_suffix("_item") expected = pd_s.add_suffix("_item") - assert_eq(got, expected) + # Pandas still returns "object" dtype for the index, while cuDF returns "string" dtype. Ignore index type for this test. + assert_eq(got, expected, check_index_type=False) diff --git a/python/cudf/cudf/tests/series/methods/test_apply.py b/python/cudf/cudf/tests/series/methods/test_apply.py index 6ca7b50a11e0..47960032df6f 100644 --- a/python/cudf/cudf/tests/series/methods/test_apply.py +++ b/python/cudf/cudf/tests/series/methods/test_apply.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import operator @@ -6,17 +6,18 @@ import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.core.udf.utils import precompiled from cudf.testing import assert_eq -def run_masked_udf_series(func, data, args=(), **kwargs): +def run_masked_udf_series(func, data, args=(), nullable=True, **kwargs): gsr = data - psr = data.to_pandas(nullable=True) + psr = data.to_pandas(nullable=nullable) expect = psr.apply(func, args=args) - obtain = gsr.apply(func, args=args) + obtain = gsr.apply(func, args=args).to_pandas(nullable=nullable) + if "check_dtype" in kwargs and not kwargs.get("check_dtype", True): + obtain = obtain.astype(expect.dtype, errors="ignore") assert_eq(expect, obtain, **kwargs) @@ -137,7 +138,6 @@ def test_masked_udf_scalar_args_binops_multiple_series( operator.gt, operator.ge, ] - and PANDAS_VERSION >= PANDAS_CURRENT_SUPPORTED_VERSION and data.dtype.kind != "b", reason="https://github.com/pandas-dev/pandas/issues/57390", ) @@ -182,7 +182,6 @@ def func(x): @pytest.mark.xfail( - PANDAS_VERSION >= PANDAS_CURRENT_SUPPORTED_VERSION, reason="https://github.com/pandas-dev/pandas/issues/57390", ) def test_series_apply_null_conditional(): @@ -206,7 +205,6 @@ def func(x): @pytest.mark.xfail( - PANDAS_VERSION >= PANDAS_CURRENT_SUPPORTED_VERSION, reason="https://github.com/pandas-dev/pandas/issues/57390", ) def test_series_compare_masked_vs_masked(comparison_op): @@ -267,7 +265,6 @@ def func(x): @pytest.mark.xfail( - PANDAS_VERSION >= PANDAS_CURRENT_SUPPORTED_VERSION, reason="https://github.com/pandas-dev/pandas/issues/57390", ) def test_series_masked_is_null_conditional(): diff --git a/python/cudf/cudf/tests/series/methods/test_astype.py b/python/cudf/cudf/tests/series/methods/test_astype.py index 18d0ff6743e2..ae3d22a3c4a2 100644 --- a/python/cudf/cudf/tests/series/methods/test_astype.py +++ b/python/cudf/cudf/tests/series/methods/test_astype.py @@ -11,7 +11,6 @@ import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.core.column.decimal import Decimal32Column, Decimal64Column from cudf.core.column.numerical import NumericalColumn from cudf.testing import assert_eq @@ -70,6 +69,46 @@ def test_series_typecast_to_object(): assert new_series[0] == "1970-01-01 00:00:00.000000001" +@pytest.mark.parametrize( + "dtype", + [ + pd.StringDtype(storage="python", na_value=pd.NA), + pd.StringDtype(storage="pyarrow", na_value=pd.NA), + pd.ArrowDtype(pa.string()), + ], +) +def test_string_astype_object_pd_na_pandas_compat(dtype): + sr = cudf.Series(["a", None, "b"], dtype=dtype) + + with cudf.option_context("mode.pandas_compatible", True): + with pytest.raises( + NotImplementedError, + match="Casting nullable string columns with pd.NA to object", + ): + sr.astype(object) + + with cudf.option_context("mode.pandas_compatible", False): + result = sr.astype(object) + assert result.dtype == np.dtype("object") + + +@pytest.mark.parametrize( + "dtype", + [ + pd.StringDtype(storage="python", na_value=pd.NA), + pd.StringDtype(storage="pyarrow", na_value=pd.NA), + pd.ArrowDtype(pa.string()), + ], +) +def test_string_astype_object_pd_na_pandas_compat_no_nulls(dtype): + sr = cudf.Series(["a", "b", "c"], dtype=dtype) + + with cudf.option_context("mode.pandas_compatible", True): + result = sr.astype(object) + assert result.dtype == np.dtype("object") + assert result.to_arrow().to_pylist() == ["a", "b", "c"] + + @pytest.mark.parametrize( "dtype", [ @@ -146,11 +185,19 @@ def test_cast_float_nan_to_bool_pandas_compat(): def test_empty_astype_always_castable(type1, type2, as_dtype, copy): ser = cudf.Series([], dtype=as_dtype(type1)) result = ser.astype(as_dtype(type2), copy=copy) - expected = cudf.Series([], dtype=as_dtype(type2)) + if type2 == "category": + # Empty astype to category inherits the source dtype as the + # categories dtype, matching pandas behavior. + expected = cudf.Series([], dtype=result.dtype) + else: + expected = cudf.Series([], dtype=as_dtype(type2)) assert_eq(result, expected) - if not copy and cudf.dtype(type1) == cudf.dtype(type2): + if not copy and type1 == type2 == "category": + # Categorical shallow copy reuses the same column object. assert ser._column is result._column else: + # Under CoW, copy=False returns a shallow copy (distinct column + # object sharing the same buffer), so column identity never holds. assert ser._column is not result._column @@ -243,131 +290,37 @@ def test_timedelta_datetime_cast_invalid(): @pytest.mark.parametrize( - "sr_data, sr_dtype, exp_data, exp_dtype", + "sr_data, sr_dtype", [ - [ - [1, 2, 3], - "timedelta64[ns]", - [ - "0 days 00:00:00.000000001", - "0 days 00:00:00.000000002", - "0 days 00:00:00.000000003", - ], - None, - ], - [ - [1000000, 200000, 3000000], - "timedelta64[ms]", - ["0 days 00:16:40", "0 days 00:03:20", "0 days 00:50:00"], - None, - ], - [ - [1000000, 200000, 3000000], - "timedelta64[s]", - ["11 days 13:46:40", "2 days 07:33:20", "34 days 17:20:00"], - None, - ], - [ - [None, None, None, None, None], + ([1, 2, 3], "timedelta64[ns]"), + ([1000000, 200000, 3000000], "timedelta64[ms]"), + ([1000000, 200000, 3000000], "timedelta64[s]"), + ([None, None, None, None, None], "timedelta64[us]"), + ( + [136457654, None, 245345345, 223432411, None, 3634548734, 23234], "timedelta64[us]", - [None, None, None, None, None], - "str", - ], - [ - [ - 136457654, - None, - 245345345, - 223432411, - None, - 3634548734, - 23234, - ], - "timedelta64[us]", - [ - "0 days 00:02:16.457654", - None, - "0 days 00:04:05.345345", - "0 days 00:03:43.432411", - None, - "0 days 01:00:34.548734", - "0 days 00:00:00.023234", - ], - None, - ], - [ - [ - 136457654, - None, - 245345345, - 223432411, - None, - 3634548734, - 23234, - ], + ), + ( + [136457654, None, 245345345, 223432411, None, 3634548734, 23234], "timedelta64[ms]", - [ - "1 days 13:54:17.654", - None, - "2 days 20:09:05.345", - "2 days 14:03:52.411", - None, - "42 days 01:35:48.734", - "0 days 00:00:23.234", - ], - None, - ], - [ - [ - 136457654, - None, - 245345345, - 223432411, - None, - 3634548734, - 23234, - ], + ), + ( + [136457654, None, 245345345, 223432411, None, 3634548734, 23234], "timedelta64[s]", - [ - "1579 days 08:54:14", - None, - "2839 days 15:29:05", - "2586 days 00:33:31", - None, - "42066 days 12:52:14", - "0 days 06:27:14", - ], - None, - ], - [ - [ - 136457654, - None, - 245345345, - 223432411, - None, - 3634548734, - 23234, - ], + ), + ( + [136457654, None, 245345345, 223432411, None, 3634548734, 23234], "timedelta64[ns]", - [ - "0 days 00:00:00.136457654", - None, - "0 days 00:00:00.245345345", - "0 days 00:00:00.223432411", - None, - "0 days 00:00:03.634548734", - "0 days 00:00:00.000023234", - ], - None, - ], + ), ], ) -def test_timedelta_str_roundtrip(sr_data, sr_dtype, exp_data, exp_dtype): +def test_timedelta_str_roundtrip(sr_data, sr_dtype): gsr = cudf.Series(sr_data, dtype=sr_dtype) + psr = gsr.to_pandas() + actual_series = gsr.astype("str") + expected_series = psr.astype("str") - expected_series = cudf.Series(exp_data, dtype=exp_dtype) assert_eq(expected_series, actual_series) assert_eq(gsr, actual_series.astype(gsr.dtype)) @@ -382,11 +335,35 @@ def test_timedelta_astype_object_raises_pandas_compat(): sr.astype(np.dtype("object")) +@pytest.mark.parametrize( + "dtype", ["datetime64[ns]", "datetime64[us]", "timedelta64[ns]"] +) +@pytest.mark.parametrize( + "target_dtype", ["float32", "float64", np.float64, np.float32] +) +def test_temporal_astype_float_raises_pandas_compat(dtype, target_dtype): + # pandas raises TypeError when casting datetime/timedelta to float; + # cuDF must match this under pandas-compatible mode. + from cudf.testing._utils import assert_exceptions_equal + + psr = pd.Series([1, 2, 3], dtype=dtype) + gsr = cudf.from_pandas(psr) + with cudf.option_context("mode.pandas_compatible", True): + assert_exceptions_equal( + lfunc=psr.astype, + rfunc=gsr.astype, + lfunc_args_and_kwargs=([target_dtype], {}), + rfunc_args_and_kwargs=([target_dtype], {}), + ) + + def test_timedelta_astype_unicode_dtype_pandas_compat(): sr = cudf.Series([1000000000], dtype="timedelta64[ns]") with cudf.option_context("mode.pandas_compatible", True): result = sr.astype(np.dtype("U")) - expected = pd.Series(pd.to_timedelta([1000000000], unit="ns")).astype(str) + expected = pd.Series(pd.to_timedelta([1000000000], unit="ns")).astype( + np.dtype("U") + ) assert result.dtype == np.dtype("object") assert_eq(result, cudf.Series(expected)) @@ -431,10 +408,6 @@ def test_timedelta_astype_unicode_dtype_pandas_compat(): "timedelta64[s]", ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Bug in older pandas versions", -) def test_timedelta_astype_str_pandas_compat(data, min_unit, unit): ptd = pd.to_timedelta(data).astype(unit) psr = pd.Series(ptd) @@ -540,7 +513,7 @@ def test_string_timstamp_typecast_to_different_datetime_resolutions( pd_sr = pd.Series(data) gdf_sr = cudf.Series(pd_sr) - expect = pd_sr.values.astype(datetime_types_as_str) + expect = np.array(data).astype(datetime_types_as_str) got = gdf_sr.astype(datetime_types_as_str).to_numpy() np.testing.assert_equal(expect, got) @@ -958,14 +931,6 @@ def test_series_astype_numeric_to_other( pytest.skip( f"Casting {all_supported_types_as_str} to {as_dtype} for test data is invalid." ) - request.applymarker( - pytest.mark.xfail( - all_supported_types_as_str - in {"timedelta64[us]", "timedelta64[ms]", "timedelta64[s]"} - and as_dtype == "str", - reason=f"Casting {all_supported_types_as_str} to {as_dtype} is incorrect.", - ) - ) psr = pd.Series([1, 2, 3], dtype=all_supported_types_as_str) gsr = cudf.from_pandas(psr) assert_eq(psr.astype(as_dtype), gsr.astype(as_dtype)) @@ -1378,7 +1343,12 @@ def test_categorical_typecast(data, categories): gd_data = cudf.from_pandas(data) cat_type = pd.CategoricalDtype(categories) - assert_eq(pd_data.astype(cat_type), gd_data.astype(cat_type)) + actual = gd_data.astype(cat_type) + warns = actual.null_count != gd_data.null_count + with expect_warning_if(warns, pd.errors.Pandas4Warning): + expected = pd_data.astype(cat_type) + + assert_eq(expected, actual) @pytest.mark.parametrize( @@ -1420,7 +1390,8 @@ def test_series_astype_no_copy(copy): gsr = cudf.Series([1, 2, 3]) result = gsr.astype("int64", copy=copy) assert_eq(result, gsr) - assert (result is gsr) is (not copy) + # Under CoW, copy=False returns a shallow copy (distinct object). + assert result is not gsr def test_astype_aware_to_naive_raises(): diff --git a/python/cudf/cudf/tests/series/methods/test_between.py b/python/cudf/cudf/tests/series/methods/test_between.py index 6a5b2acc3b01..9e5e81d2d54c 100644 --- a/python/cudf/cudf/tests/series/methods/test_between.py +++ b/python/cudf/cudf/tests/series/methods/test_between.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -41,23 +41,24 @@ def test_series_between(data, left, right, inclusive): @pytest.mark.parametrize( - "data,left,right", + "data,dtype,left,right", [ - ([0, 1, 2, None, 4, 5, 10], 0, 5), - ([0, 1, 2, 3, None, 5, 10], 10, 1), - ([None, 1, 2, 3, 4, None], [0, 10, 11] * 2, [1, 2, 5] * 2), + ([0, 1, 2, None, 4, 5, 10], "Int64", 0, 5), + ([0, 1, 2, 3, None, 5, 10], "Int64", 10, 1), + ([None, 1, 2, 3, 4, None], "Int64", [0, 10, 11] * 2, [1, 2, 5] * 2), ( ["a", "few", "set", None, "strings", "xyz", "abc"], + "string", ["a", "hello", "rapids", "ai", "world", "chars", "strs"], ["yes", "no", "hi", "bye", "test", "pass", "fail"], ), ], ) -def test_series_between_with_null(data, left, right, inclusive): - gs = cudf.Series(data) - ps = gs.to_pandas(nullable=True) +def test_series_between_with_null(data, dtype, left, right, inclusive): + gs = cudf.Series(data, dtype=dtype) + ps = gs.to_pandas() expected = ps.between(left, right, inclusive=inclusive) actual = gs.between(left, right, inclusive=inclusive) - assert_eq(expected, actual.to_pandas(nullable=True)) + assert_eq(expected, actual) diff --git a/python/cudf/cudf/tests/series/methods/test_convert_dtypes.py b/python/cudf/cudf/tests/series/methods/test_convert_dtypes.py index bcca9a3af57c..2f900ce53814 100644 --- a/python/cudf/cudf/tests/series/methods/test_convert_dtypes.py +++ b/python/cudf/cudf/tests/series/methods/test_convert_dtypes.py @@ -1,5 +1,6 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 +import numpy as np import pandas as pd import pytest @@ -7,6 +8,14 @@ from cudf.testing import assert_eq +def _compare_to_pandas(data, dtype, kwargs): + gs = cudf.Series(data, dtype=dtype) + ps = pd.Series(data, dtype=dtype) + got = gs.convert_dtypes(**kwargs) + expected = ps.convert_dtypes(**kwargs) + assert_eq(got, expected, check_dtype=True) + + @pytest.mark.parametrize( "data, dtype", [ @@ -43,3 +52,200 @@ def test_convert_integer_false_convert_floating_true(): .to_pandas(nullable=True) ) assert_eq(result, expected) + + +def test_convert_dtypes_integer_to_nullable(integer_types_as_str): + _compare_to_pandas([1, 2, 3], integer_types_as_str, {}) + + +def test_convert_dtypes_integer_convert_integer_false(integer_types_as_str): + _compare_to_pandas( + [1, 2, 3], integer_types_as_str, {"convert_integer": False} + ) + + +def test_convert_dtypes_float_noninteger(float_types_as_str): + _compare_to_pandas([1.5, 2.5, 3.5], float_types_as_str, {}) + + +def test_convert_dtypes_float_integer_like_to_int64(float_types_as_str): + _compare_to_pandas([1.0, 2.0, 3.0], float_types_as_str, {}) + + +def test_convert_dtypes_float_convert_integer_false(float_types_as_str): + _compare_to_pandas( + [1.0, 2.0, 3.0], float_types_as_str, {"convert_integer": False} + ) + + +def test_convert_dtypes_float_both_false(float_types_as_str): + _compare_to_pandas( + [1.0, 2.0, 3.0], + float_types_as_str, + {"convert_integer": False, "convert_floating": False}, + ) + + +@pytest.mark.parametrize( + "kwargs", + [ + {}, + {"convert_boolean": False}, + { + "convert_boolean": False, + "convert_integer": False, + "convert_floating": False, + }, + ], +) +def test_convert_dtypes_bool(kwargs): + _compare_to_pandas([True, False, True], "bool", kwargs) + + +@pytest.mark.parametrize( + "kwargs", + [ + {}, + {"convert_string": False, "infer_objects": True}, + {"convert_string": False, "infer_objects": False}, + ], +) +def test_convert_dtypes_object_strings(kwargs): + _compare_to_pandas(["a", "b", "c"], "O", kwargs) + + +@pytest.mark.parametrize( + "kwargs", + [ + {}, + {"convert_string": False}, + {"convert_string": False, "infer_objects": False}, + ], +) +def test_convert_dtypes_string_dtype(kwargs): + _compare_to_pandas(["a", "b", "c"], "str", kwargs) + + +def test_convert_dtypes_already_nullable_unchanged( + all_supported_pandas_nullable_extension_dtypes, +): + scalar, dtype = all_supported_pandas_nullable_extension_dtypes + _compare_to_pandas([scalar, scalar, scalar], dtype, {}) + + +@pytest.mark.parametrize( + "data, dtype", + [ + (["a", "b", "c"], "category"), + (["2001-01-01", "2001-01-02", "2001-01-03"], "datetime64[ns]"), + ], +) +def test_convert_dtypes_non_nullable_kept(data, dtype): + _compare_to_pandas(data, dtype, {}) + + +@pytest.mark.parametrize( + "values, dtype", + [ + ([1, 2, 3], "int64"), + ([1, 2, 3], "int32"), + ([1.0, 2.0, 3.0], "float64"), + ([1.5, 2.5, 3.5], "float64"), + ([True, False, True], "bool"), + (["a", "b", "c"], "str"), + ], +) +def test_convert_dtypes_returns_copy(values, dtype): + gs = cudf.Series(values, dtype=dtype) + original = gs.copy(deep=True) + result = gs.convert_dtypes() + result[result.notna()] = pd.NA + assert_eq(gs, original) + + +@pytest.mark.parametrize( + "data, dtype", + [ + ([1, 2, 3], "int64"), + ([1, 2, 3], "int32"), + ([1.5, 2.5, 3.5], "float64"), + (["a", "b", "c"], "str"), + ], +) +def test_convert_dtypes_pyarrow_backend(data, dtype): + _compare_to_pandas(data, dtype, {"dtype_backend": "pyarrow"}) + + +def test_convert_dtypes_pyarrow_all_null_to_pa_null(): + _compare_to_pandas([None, None], "O", {"dtype_backend": "pyarrow"}) + + +def test_convert_dtypes_float_nan_as_null_converts_to_int(): + _compare_to_pandas([10.0, np.nan, 20.0], "float64", {}) + + +def test_convert_dtypes_float_preserved_nan_blocks_int_conversion(): + with pd.option_context("future.distinguish_nan_and_na", True): + gs = cudf.Series( + [10.0, np.nan, 20.0], dtype="float64", nan_as_null=False + ) + ps = pd.Series([10.0, np.nan, 20.0], dtype="float64") + assert_eq( + gs.convert_dtypes(), + ps.convert_dtypes(), + check_dtype=True, + ) + + +def test_convert_dtypes_float_with_null_to_int64(): + _compare_to_pandas([10.0, None, 20.0], "float64", {}) + + +def test_convert_dtypes_float_nonint_values_with_null(): + _compare_to_pandas([10.5, None, 20.5], "float64", {}) + + +def test_convert_dtypes_pandas_compatible_mode(): + with cudf.option_context("mode.pandas_compatible", True): + _compare_to_pandas([1, 2, 3], "int32", {}) + + +@pytest.mark.parametrize( + "data, dtype", + [ + ([1, 2, 3], "int32"), + ([1, 2, 3], "int64"), + ([1.0, 2.0, 3.0], "float64"), + ([1.5, 2.5, 3.5], "float64"), + ([True, False, True], "bool"), + (["a", "b", "c"], "str"), + (["a", "b", "c"], "O"), + ], +) +def test_convert_dtypes_matches_pandas_all_param_combinations( + data, + dtype, + infer_objects, + convert_string, + convert_integer, + convert_boolean, + convert_floating, +): + kwargs = { + "infer_objects": infer_objects, + "convert_string": convert_string, + "convert_integer": convert_integer, + "convert_boolean": convert_boolean, + "convert_floating": convert_floating, + } + _compare_to_pandas(data, dtype, kwargs) + + +def test_convert_dtypes_pyarrow_null(): + pytest.importorskip("pyarrow") + data = [None, None] + + expected = pd.Series(data).convert_dtypes(dtype_backend="pyarrow") + result = cudf.Series(data).convert_dtypes(dtype_backend="pyarrow") + + assert_eq(result.to_pandas(), expected) diff --git a/python/cudf/cudf/tests/series/methods/test_count.py b/python/cudf/cudf/tests/series/methods/test_count.py index 0382ff2f88ce..184f45c31cf0 100644 --- a/python/cudf/cudf/tests/series/methods/test_count.py +++ b/python/cudf/cudf/tests/series/methods/test_count.py @@ -24,11 +24,9 @@ def test_series_dataframe_count_float(): def test_series_dataframe_count_nullable_int(): - gs = cudf.Series( - [1, 2, 3, None, np.nan, 10], dtype="Float64", nan_as_null=False - ) - assert gs.count() == gs.to_pandas(nullable=True).count() + gs = cudf.Series([1, 2, 3, None, np.nan, 10], dtype="Float64") + assert gs.count() == gs.to_pandas().count() assert_eq( gs.to_frame().count(), - gs.to_frame().to_pandas(nullable=True).count(), + gs.to_frame().to_pandas().count(), ) diff --git a/python/cudf/cudf/tests/series/methods/test_cov_corr.py b/python/cudf/cudf/tests/series/methods/test_cov_corr.py index 31d6438d4aab..2929929f06bb 100644 --- a/python/cudf/cudf/tests/series/methods/test_cov_corr.py +++ b/python/cudf/cudf/tests/series/methods/test_cov_corr.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -8,7 +8,6 @@ import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq from cudf.testing._utils import expect_warning_if @@ -83,10 +82,6 @@ def test_cov1d(data1, data2): np.array([5]), ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Warnings missing on older pandas (scipy version seems unrelated?)", -) def test_corr1d(data1, data2, corr_method): if corr_method == "spearman": # Pandas uses scipy.stats.spearmanr code-path @@ -146,10 +141,6 @@ def test_corr1d(data1, data2, corr_method): [10, 1, 3, 5], ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_cov_corr_datetime_timedelta(data1, data2, temporal_types_as_str): gsr1 = cudf.Series(data1, dtype=temporal_types_as_str) gsr2 = cudf.Series(data2, dtype=temporal_types_as_str) diff --git a/python/cudf/cudf/tests/series/methods/test_describe.py b/python/cudf/cudf/tests/series/methods/test_describe.py index bab5ba3aaa7e..b831bf4d4b96 100644 --- a/python/cudf/cudf/tests/series/methods/test_describe.py +++ b/python/cudf/cudf/tests/series/methods/test_describe.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -17,13 +17,7 @@ def test_series_describe_numeric(numeric_types_as_str): assert_eq(expected, actual, check_dtype=True) -def test_series_describe_temporal(temporal_types_as_str, request): - if "ms" in temporal_types_as_str: - request.applymarker( - pytest.mark.xfail( - reason=f"string formatting of {temporal_types_as_str} incorrect in cuDF" - ) - ) +def test_series_describe_temporal(temporal_types_as_str): gs = cudf.Series([0, 1, 2, 3, 1, 2, 3], dtype=temporal_types_as_str) ps = gs.to_pandas() diff --git a/python/cudf/cudf/tests/series/methods/test_diff.py b/python/cudf/cudf/tests/series/methods/test_diff.py index 81154f48374f..b758ab51fd2d 100644 --- a/python/cudf/cudf/tests/series/methods/test_diff.py +++ b/python/cudf/cudf/tests/series/methods/test_diff.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -58,5 +58,17 @@ def test_diff_unsupported_dtypes(): def test_diff_many_dtypes(data): ps = pd.Series(data) gs = cudf.from_pandas(ps) - assert_eq(ps.diff(), gs.diff()) - assert_eq(ps.diff(periods=2), gs.diff(periods=2)) + + pd_diff = ps.diff() + gs_diff = gs.diff() + pd_diff2 = ps.diff(periods=2) + gs_diff2 = gs.diff(periods=2) + + if pd_diff.dtype == object: + # pandas 3 returns object dtype with nan for bool.diff(); + # cudf returns bool dtype with None - normalize for comparison + gs_diff = gs_diff.to_pandas().fillna(value=np.nan) + gs_diff2 = gs_diff2.to_pandas().fillna(value=np.nan) + + assert_eq(pd_diff, gs_diff) + assert_eq(pd_diff2, gs_diff2) diff --git a/python/cudf/cudf/tests/series/methods/test_drop_duplicates.py b/python/cudf/cudf/tests/series/methods/test_drop_duplicates.py index 4c2789233e11..fcbf56629afc 100644 --- a/python/cudf/cudf/tests/series/methods/test_drop_duplicates.py +++ b/python/cudf/cudf/tests/series/methods/test_drop_duplicates.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -17,12 +17,17 @@ [1, 2, 4, 5, 6, 6], [], ["a", "b", "s", "sd", "a", "b"], - pd.Series(["aaa"] * 10, dtype="object"), + pd.Series(["aaa"] * 10), ], ) def test_drop_duplicates_series(data, keep, ignore_index): pds = pd.Series(data) gds = cudf.from_pandas(pds) + if isinstance(data, list) and len(data) == 0: + # As of pandas 3.0, empty default type of object isn't + # necessarily equivalent to cuDF's empty default type of + # pandas.StringDtype + pds = pds.astype(gds.dtype) assert_eq( pds.drop_duplicates(keep=keep, ignore_index=ignore_index), diff --git a/python/cudf/cudf/tests/series/methods/test_explode.py b/python/cudf/cudf/tests/series/methods/test_explode.py index ac560379e40f..581d2b9af3e0 100644 --- a/python/cudf/cudf/tests/series/methods/test_explode.py +++ b/python/cudf/cudf/tests/series/methods/test_explode.py @@ -11,7 +11,7 @@ @pytest.mark.parametrize( "data", - [[[1, 2, 3], None, [4], [], [5, 6]], [1, 2, 3, 4, 5]], + [[[1, 2, 3], pd.NA, [4], [], [5, 6]], [1, 2, 3, 4, 5]], ) @pytest.mark.parametrize( "p_index", @@ -24,12 +24,11 @@ ], ) def test_explode(data, ignore_index, p_index): - pdf = pd.Series(data, index=p_index, name="someseries") - gdf = cudf.from_pandas(pdf) + gdf = cudf.Series(data, index=p_index, name="someseries") + pdf = gdf.to_pandas(arrow_type=True) expect = pdf.explode(ignore_index) got = gdf.explode(ignore_index) - assert_eq(expect, got, check_dtype=False) diff --git a/python/cudf/cudf/tests/series/methods/test_factorize.py b/python/cudf/cudf/tests/series/methods/test_factorize.py index 5ee3273b593b..5d1d6b416556 100644 --- a/python/cudf/cudf/tests/series/methods/test_factorize.py +++ b/python/cudf/cudf/tests/series/methods/test_factorize.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import cupy as cp @@ -79,10 +79,7 @@ def test_factorize_series_index(index): result_unique, result_labels = ser.factorize() expected_unique, expected_labels = pser.factorize() assert_eq(result_unique.get(), expected_unique) - assert_eq( - result_labels.to_pandas().values, - expected_labels.values, - ) + assert_eq(result_labels, expected_labels) def test_cudf_factorize_series(): diff --git a/python/cudf/cudf/tests/series/methods/test_fillna.py b/python/cudf/cudf/tests/series/methods/test_fillna.py index 92b7d59c9a23..8ee74670b13f 100644 --- a/python/cudf/cudf/tests/series/methods/test_fillna.py +++ b/python/cudf/cudf/tests/series/methods/test_fillna.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import decimal @@ -8,11 +8,6 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_VERSION, -) from cudf.testing import assert_eq from cudf.testing._utils import assert_exceptions_equal @@ -129,52 +124,6 @@ def test_timedelta_fillna(data, timedelta_types_as_str, fill_value): assert_eq(expected, actual) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -@pytest.mark.parametrize( - "data", - [ - [1, None, None, 2, 3, 4], - [None, None, 1, 2, None, 3, 4], - [1, 2, None, 3, 4, None, None], - [0] + [None] * 14, - [None] * 14 + [0], - ], -) -@pytest.mark.parametrize("container", [pd.Series, pd.DataFrame]) -@pytest.mark.parametrize("method", ["ffill", "bfill"]) -def test_fillna_method_numerical( - data, container, numeric_types_as_str, method, inplace -): - if container == pd.DataFrame: - data = {"a": data, "b": data, "c": data} - - pdata = container(data) - - data_dtype = numeric_types_as_str - if np.dtype(numeric_types_as_str).kind != "f": - data_dtype = cudf.utils.dtypes.np_dtypes_to_pandas_dtypes[ - np.dtype(numeric_types_as_str) - ] - pdata = pdata.astype(data_dtype) - - # Explicitly using nans_as_nulls=True - gdata = cudf.from_pandas(pdata, nan_as_null=True) - - with pytest.warns(FutureWarning): - expected = pdata.fillna(method=method, inplace=inplace) - with pytest.warns(FutureWarning): - actual = gdata.fillna(method=method, inplace=inplace) - - if inplace: - expected = pdata - actual = gdata - - assert_eq(expected, actual, check_dtype=False) - - @pytest.mark.parametrize( "gsr_data, dtype", [ @@ -213,7 +162,7 @@ def test_fillna_method_numerical( lambda: decimal.Decimal("-12.87"), lambda: cudf.Series( [None, -854, 9533, -274, -845, 7924], dtype="int32" - ), + ).astype(cudf.Decimal64Dtype(7, 2)), lambda: cudf.Series( ["-53.5", "13.4", "-64.3", None, "42.42", None] ).astype(cudf.Decimal64Dtype(7, 2)), @@ -224,15 +173,21 @@ def test_fillna_method_numerical( ) def test_fillna_decimal(gsr_data, dtype, fill_value, inplace): gsr = cudf.Series(gsr_data).astype(dtype) - psr = gsr.to_pandas() + psr = gsr.to_pandas(arrow_type=True) fill_value = fill_value() if isinstance(fill_value, cudf.Series): - p_fill_value = fill_value.to_pandas() + p_fill_value = fill_value.to_pandas(arrow_type=True) else: p_fill_value = fill_value - expected = psr.fillna(p_fill_value, inplace=inplace) - got = gsr.fillna(fill_value, inplace=inplace) + if inplace: + psr.fillna(p_fill_value, inplace=inplace) + gsr.fillna(fill_value, inplace=inplace) + expected = psr + got = gsr + else: + expected = psr.fillna(p_fill_value, inplace=inplace) + got = gsr.fillna(fill_value, inplace=inplace) assert_eq(expected, got, check_dtype=False) @@ -315,7 +270,7 @@ def test_fillna_categorical(psr, fill_value, inplace): pd.date_range( "2010-01-01", "2020-01-10", - freq="1YE" if PANDAS_GE_220 else "1y", + freq="1YE", ) ), pd.Series(["2010-01-01", None, "2011-10-10"], dtype="datetime64[ns]"), @@ -362,7 +317,7 @@ def test_fillna_categorical(psr, fill_value, inplace): pd.date_range( "2010-01-01", "2020-01-10", - freq="1YE" if PANDAS_GE_220 else "1y", + freq="1YE", ) ) + pd.Timedelta(days=1), @@ -422,105 +377,11 @@ def test_fillna_datetime(psr, fill_value, inplace): assert_eq(expected, got) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -@pytest.mark.parametrize( - "data", - [ - # Categorical - pd.Categorical([1, 2, None, None, 3, 4]), - pd.Categorical([None, None, 1, None, 3, 4]), - pd.Categorical([1, 2, None, 3, 4, None, None]), - pd.Categorical(["1", "20", None, None, "3", "40"]), - pd.Categorical([None, None, "10", None, "30", "4"]), - pd.Categorical(["1", "20", None, "30", "4", None, None]), - # Datetime - np.array( - [ - "2020-01-01 08:00:00", - "2020-01-01 09:00:00", - None, - "2020-01-01 10:00:00", - None, - "2020-01-01 10:00:00", - ], - dtype="datetime64[ns]", - ), - np.array( - [ - None, - None, - "2020-01-01 09:00:00", - "2020-01-01 10:00:00", - None, - "2020-01-01 10:00:00", - ], - dtype="datetime64[ns]", - ), - np.array( - [ - "2020-01-01 09:00:00", - None, - None, - "2020-01-01 10:00:00", - None, - None, - ], - dtype="datetime64[ns]", - ), - # Timedelta - np.array( - [10, 100, 1000, None, None, 10, 100, 1000], dtype="datetime64[ns]" - ), - np.array( - [None, None, 10, None, 1000, 100, 10], dtype="datetime64[ns]" - ), - np.array( - [10, 100, None, None, 1000, None, None], dtype="datetime64[ns]" - ), - # String - np.array( - ["10", "100", "1000", None, None, "10", "100", "1000"], - dtype="object", - ), - np.array( - [None, None, "1000", None, "10", "100", "10"], dtype="object" - ), - np.array( - ["10", "100", None, None, "1000", None, None], dtype="object" - ), - ], -) -@pytest.mark.parametrize("container", [pd.Series, pd.DataFrame]) -@pytest.mark.parametrize("method", ["ffill", "bfill"]) -def test_fillna_method_fixed_width_non_num(data, container, method, inplace): - if container == pd.DataFrame: - data = {"a": data, "b": data, "c": data} - - pdata = container(data) - - # Explicitly using nans_as_nulls=True - gdata = cudf.from_pandas(pdata, nan_as_null=True) - - with pytest.warns(FutureWarning): - expected = pdata.fillna(method=method, inplace=inplace) - with pytest.warns(FutureWarning): - actual = gdata.fillna(method=method, inplace=inplace) - - if inplace: - expected = pdata - actual = gdata - - assert_eq(expected, actual) - - @pytest.mark.parametrize( "psr", [ pd.Series(["a", "b", "c", "d"]), - pd.Series([None] * 4, dtype="object"), + pd.Series([None] * 4, dtype="str"), pd.Series(["z", None, "z", None]), pd.Series(["x", "y", None, None, None]), pd.Series([None, None, None, "i", "P"]), diff --git a/python/cudf/cudf/tests/series/methods/test_first_last.py b/python/cudf/cudf/tests/series/methods/test_first_last.py deleted file mode 100644 index 106fc31cd861..000000000000 --- a/python/cudf/cudf/tests/series/methods/test_first_last.py +++ /dev/null @@ -1,127 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. -# SPDX-License-Identifier: Apache-2.0 - - -import pandas as pd -import pytest - -import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) -from cudf.testing import assert_eq - - -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -@pytest.mark.parametrize( - "idx", - [ - pd.DatetimeIndex([]), - pd.DatetimeIndex(["2010-05-31"]), - pd.date_range("2000-01-01", "2000-12-31", periods=21), - ], -) -@pytest.mark.parametrize( - "offset", - [ - "10Y", - "6M", - "M", - "31D", - "0H", - "44640T", - "44640min", - "2678000S", - "2678000000L", - "2678000000ms", - "2678000000000U", - "2678000000000us", - "2678000000000000N", - "2678000000000000ns", - ], -) -def test_first(idx, offset): - p = pd.Series(range(len(idx)), dtype="int64", index=idx) - g = cudf.from_pandas(p) - - with pytest.warns(FutureWarning): - expect = p.first(offset=offset) - with pytest.warns(FutureWarning): - got = g.first(offset=offset) - - assert_eq(expect, got) - - -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -def test_first_start_at_end_of_month(): - idx = pd.DatetimeIndex( - [ - "2020-01-31", - "2020-02-15", - "2020-02-29", - "2020-03-15", - "2020-03-31", - "2020-04-15", - "2020-04-30", - ] - ) - offset = "3M" - p = pd.Series(range(len(idx)), index=idx) - g = cudf.from_pandas(p) - - with pytest.warns(FutureWarning): - expect = p.first(offset=offset) - with pytest.warns(FutureWarning): - got = g.first(offset=offset) - - assert_eq(expect, got) - - -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) -@pytest.mark.parametrize( - "idx", - [ - pd.DatetimeIndex([]), - pd.DatetimeIndex(["2010-05-31"]), - pd.date_range("2000-01-01", "2000-12-31", periods=21), - ], -) -@pytest.mark.parametrize( - "offset", - [ - "10Y", - "6M", - "M", - "31D", - "0H", - "44640T", - "44640min", - "2678000S", - "2678000000L", - "2678000000ms", - "2678000000000U", - "2678000000000us", - "2678000000000000N", - "2678000000000000ns", - ], -) -def test_last(idx, offset): - p = pd.Series(range(len(idx)), dtype="int64", index=idx) - g = cudf.from_pandas(p) - - with pytest.warns(FutureWarning): - expect = p.last(offset=offset) - with pytest.warns(FutureWarning): - got = g.last(offset=offset) - - assert_eq(expect, got) diff --git a/python/cudf/cudf/tests/series/methods/test_interpolate.py b/python/cudf/cudf/tests/series/methods/test_interpolate.py index 4b047106f8c1..f08d714c7337 100644 --- a/python/cudf/cudf/tests/series/methods/test_interpolate.py +++ b/python/cudf/cudf/tests/series/methods/test_interpolate.py @@ -1,18 +1,12 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq -from cudf.testing._utils import expect_warning_if -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.parametrize( "data", [ @@ -22,7 +16,6 @@ [1.0, None, 3.0, None], [None, None, 3.0, 4.0], [1.0, 2.0, None, None], - [None, None, None, None], [0.1, 0.2, 0.3], ], ) @@ -32,13 +25,10 @@ def test_interpolate_series(data): gsr = cudf.Series(data) psr = gsr.to_pandas() - is_str_dtype = psr.dtype == "object" - with expect_warning_if(is_str_dtype): - expect = psr.interpolate(method=method, axis=axis) - with expect_warning_if(is_str_dtype): - got = gsr.interpolate(method=method, axis=axis) + expect = psr.interpolate(method=method, axis=axis) + got = gsr.interpolate(method=method, axis=axis) - assert_eq(expect, got, check_dtype=psr.dtype != "object") + assert_eq(expect, got) def test_interpolate_series_unsorted_index(): @@ -51,10 +41,6 @@ def test_interpolate_series_unsorted_index(): assert_eq(expect, got) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.parametrize( "data", [ @@ -65,7 +51,6 @@ def test_interpolate_series_unsorted_index(): [1.0, 2.0, None, None], [1.0, None, 3.0, None], [None, 2.0, None, 4.0], - [None, None, None, None], ], ) @pytest.mark.parametrize("index", [[0, 1, 2, 3], [0, 2, 4, 6], [0, 3, 4, 9]]) @@ -74,13 +59,10 @@ def test_interpolate_series_values_or_index(data, index, method): gsr = cudf.Series(data, index=index) psr = gsr.to_pandas() - is_str_dtype = gsr.dtype == "object" - with expect_warning_if(is_str_dtype): - expect = psr.interpolate(method=method) - with expect_warning_if(is_str_dtype): - got = gsr.interpolate(method=method) + expect = psr.interpolate(method=method) + got = gsr.interpolate(method=method) - assert_eq(expect, got, check_dtype=psr.dtype != "object") + assert_eq(expect, got) def test_interpolate_noop_new_column(): diff --git a/python/cudf/cudf/tests/series/methods/test_isin.py b/python/cudf/cudf/tests/series/methods/test_isin.py index 1ace41132570..9a168ae93c73 100644 --- a/python/cudf/cudf/tests/series/methods/test_isin.py +++ b/python/cudf/cudf/tests/series/methods/test_isin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -6,11 +6,7 @@ import pytest import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION from cudf.testing import assert_eq -from cudf.testing._utils import ( - expect_warning_if, -) @pytest.mark.parametrize( @@ -53,10 +49,6 @@ def test_isin_numeric(data, values): assert_eq(got, expected) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Warning newly introduced in pandas-2.2.0", -) @pytest.mark.parametrize( "data", [ @@ -105,11 +97,9 @@ def test_isin_datetime(data, values): psr = pd.Series(data) gsr = cudf.Series(psr) - is_len_str = isinstance(next(iter(values), None), str) and len(data) - with expect_warning_if(is_len_str): - got = gsr.isin(values) - with expect_warning_if(is_len_str): - expected = psr.isin(values) + got = gsr.isin(values) + expected = psr.isin(values) + assert_eq(got, expected) diff --git a/python/cudf/cudf/tests/series/methods/test_nlargest_nsmallest.py b/python/cudf/cudf/tests/series/methods/test_nlargest_nsmallest.py index a2ce866ae105..840439add6f2 100644 --- a/python/cudf/cudf/tests/series/methods/test_nlargest_nsmallest.py +++ b/python/cudf/cudf/tests/series/methods/test_nlargest_nsmallest.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -12,12 +12,23 @@ @pytest.mark.parametrize("attr", ["nlargest", "nsmallest"]) -def test_series_nlargest_nsmallest_str_error(attr): - gs = cudf.Series(["a", "b", "c", "d", "e"]) - ps = gs.to_pandas() +@pytest.mark.parametrize( + "data,dtype", + [ + (["a", "b", "c", "d", "e"], None), + (["a", "b", "c", "d", "e"], "category"), + ], +) +def test_series_nlargest_nsmallest_unsupported_dtype_error(attr, data, dtype): + # pandas rejects nlargest/nsmallest on string and categorical dtypes. + if dtype is None: + ps = pd.Series(data) + else: + ps = pd.Series(data, dtype=dtype) + gs = cudf.from_pandas(ps) assert_exceptions_equal( - getattr(gs, attr), getattr(ps, attr), ([], {"n": 1}), ([], {"n": 1}) + getattr(ps, attr), getattr(gs, attr), ([], {"n": 1}), ([], {"n": 1}) ) diff --git a/python/cudf/cudf/tests/series/methods/test_pct_change.py b/python/cudf/cudf/tests/series/methods/test_pct_change.py index 5b8a420acca1..cf80f324b289 100644 --- a/python/cudf/cudf/tests/series/methods/test_pct_change.py +++ b/python/cudf/cudf/tests/series/methods/test_pct_change.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 @@ -6,15 +6,8 @@ import pytest import cudf -from cudf.api.extensions import no_default -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION -from cudf.testing._utils import expect_warning_if -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.parametrize( "data", [ @@ -28,23 +21,12 @@ ], ) @pytest.mark.parametrize("periods", [-5, 0, 5]) -@pytest.mark.parametrize( - "fill_method", ["ffill", "bfill", "pad", "backfill", no_default, None] -) -def test_series_pct_change(data, periods, fill_method): +def test_series_pct_change(data, periods): cs = cudf.Series(data) ps = cs.to_pandas() - if np.abs(periods) <= len(cs): - with expect_warning_if(fill_method not in (no_default, None)): - got = cs.pct_change(periods=periods, fill_method=fill_method) - with expect_warning_if( - ( - fill_method not in (no_default, None) - or (fill_method is not None and ps.isna().any()) - ) - ): - expected = ps.pct_change(periods=periods, fill_method=fill_method) - np.testing.assert_array_almost_equal( - got.to_numpy(na_value=np.nan), expected - ) + got = cs.pct_change(periods=periods) + expected = ps.pct_change(periods=periods) + np.testing.assert_array_almost_equal( + got.to_numpy(na_value=np.nan), expected + ) diff --git a/python/cudf/cudf/tests/series/methods/test_reductions.py b/python/cudf/cudf/tests/series/methods/test_reductions.py index 26579ec6b0df..03fcb79ad848 100644 --- a/python/cudf/cudf/tests/series/methods/test_reductions.py +++ b/python/cudf/cudf/tests/series/methods/test_reductions.py @@ -10,9 +10,8 @@ import pytest import cudf -from cudf.core._compat import PANDAS_GE_230 from cudf.testing import assert_eq -from cudf.testing._utils import assert_exceptions_equal, expect_warning_if +from cudf.testing._utils import assert_exceptions_equal @pytest.mark.parametrize("data", [[], [1, 2, 3]]) @@ -198,6 +197,106 @@ def test_misc_quantiles(data, q): assert_eq(expected, actual) +@pytest.mark.parametrize("dtype", ["bool", "boolean", "bool[pyarrow]"]) +@pytest.mark.parametrize("q", [0.5, [0.25, 0.75]]) +def test_quantile_bool_raises(dtype, q, quantile_interpolation): + gs = cudf.Series([True, False, True], dtype=dtype) + with pytest.raises(NotImplementedError): + gs.quantile(q, interpolation=quantile_interpolation) + + +@pytest.mark.parametrize( + "value", + [ + # Larger than 2**53 — round-trips through float64 lose precision. + 1577840461000001000, + 9007199254740993, + -9007199254740993, + ], +) +@pytest.mark.parametrize("interpolation", ["lower", "higher", "nearest"]) +@pytest.mark.parametrize("q", [0.5, [0.5, 0.5]]) +def test_quantile_int64_non_interpolating_preserves_precision( + value, interpolation, q +): + ps = pd.Series([value, value, value], dtype="int64") + gs = cudf.Series([value, value, value], dtype="int64") + expected = ps.quantile(q, interpolation=interpolation) + actual = gs.quantile(q, interpolation=interpolation) + assert_eq(expected, actual) + + +@pytest.mark.parametrize("unit", ["s", "ms", "us", "ns"]) +@pytest.mark.parametrize("interpolation", ["lower", "higher", "nearest"]) +@pytest.mark.parametrize("q", [0.5, [0.5, 0.5]]) +def test_quantile_datetime_non_interpolating_preserves_precision( + unit, interpolation, q +): + # Repeats of a single timestamp whose underlying int64 exceeds 2**53. + # For non-arithmetic interpolations the result must equal the input + # value exactly (no float64 round-trip). + ts = pd.Timestamp("2020-01-01 01:01:01.000001").as_unit(unit) + ps = pd.Series([ts, ts, ts]) + gs = cudf.Series([ts, ts, ts]) + expected = ps.quantile(q, interpolation=interpolation) + actual = gs.quantile(q, interpolation=interpolation) + assert_eq(expected, actual) + + +@pytest.mark.parametrize("unit", ["s", "ms", "us", "ns"]) +@pytest.mark.parametrize("tz", ["US/Pacific", "US/Eastern", "UTC"]) +@pytest.mark.parametrize("q", [0.1, 0.5, [0.25, 0.75]]) +def test_quantile_datetime_tz_preserves_tz( + unit, tz, q, quantile_interpolation +): + # Pre-compute via numpy datetime so we exercise both the scalar and + # column return paths. + ps = ( + pd.Series([1, 2, 3]) + .astype("datetime64[ns]") + .dt.tz_localize(tz) + .astype(f"datetime64[{unit}, {tz}]") + ) + gs = cudf.Series(ps) + expected = ps.quantile(q, interpolation=quantile_interpolation) + actual = gs.quantile(q, interpolation=quantile_interpolation) + assert_eq(expected, actual) + + +@pytest.mark.parametrize( + "dtype", + [ + "Int8", + "Int16", + "Int32", + "Int64", + "UInt8", + "UInt16", + "UInt32", + "UInt64", + "Float32", + "Float64", + "int8[pyarrow]", + "int16[pyarrow]", + "int32[pyarrow]", + "int64[pyarrow]", + "uint8[pyarrow]", + "uint16[pyarrow]", + "uint32[pyarrow]", + "uint64[pyarrow]", + "float32[pyarrow]", + "float64[pyarrow]", + ], +) +@pytest.mark.parametrize("q", [0.5, [0.25, 0.5, 0.75]]) +def test_quantile_pandas_nullable_dtype(dtype, q, quantile_interpolation): + ps = pd.Series([1, 2, 3], dtype=dtype) + gs = cudf.Series([1, 2, 3], dtype=dtype) + expected = ps.quantile(q, interpolation=quantile_interpolation) + actual = gs.quantile(q, interpolation=quantile_interpolation) + assert_eq(expected, actual) + + @pytest.mark.parametrize( "data", [ @@ -693,6 +792,7 @@ def test_categorical_reductions(request, reduction_methods): ) +@pytest.mark.filterwarnings("ignore:Mean of empty slice:RuntimeWarning") @pytest.mark.parametrize( "data_non_overflow", [ @@ -721,17 +821,7 @@ def test_timedelta_reduction_ops( gsr = cudf.Series(data_non_overflow, dtype=timedelta_types_as_str) psr = gsr.to_pandas() - if len(psr) > 0 and psr.isnull().all() and reduction_methods == "median": - with pytest.warns(RuntimeWarning, match="Mean of empty slice"): - expected = getattr(psr, reduction_methods)() - else: - with expect_warning_if( - PANDAS_GE_230 - and reduction_methods == "quantile" - and len(data_non_overflow) == 0 - and timedelta_types_as_str != "timedelta64[ns]" - ): - expected = getattr(psr, reduction_methods)() + expected = getattr(psr, reduction_methods)() actual = getattr(gsr, reduction_methods)() if pd.isna(expected) and pd.isna(actual): pass @@ -847,22 +937,13 @@ def test_string_std(): assert_exceptions_equal(lfunc=psr.std, rfunc=sr.std) -def test_string_reduction_error(): +def test_string_reduction(): s = cudf.Series([None, None], dtype="str") ps = s.to_pandas(nullable=True) - assert_exceptions_equal( - s.any, - ps.any, - lfunc_args_and_kwargs=([], {"skipna": False}), - rfunc_args_and_kwargs=([], {"skipna": False}), - ) - - assert_exceptions_equal( - s.all, - ps.all, - lfunc_args_and_kwargs=([], {"skipna": False}), - rfunc_args_and_kwargs=([], {"skipna": False}), - ) + # pandas 3 treats the NaN null sentinel as truthy (numpy semantics), so + # any/all(skipna=False) return True (not TypeError) on null-only string series. + assert s.any(skipna=False) == ps.any(skipna=False) + assert s.all(skipna=False) == ps.all(skipna=False) @pytest.mark.parametrize("data", [[1, 2, 3], [], [1, 20, 1000, None]]) @@ -872,13 +953,7 @@ def test_datetime_stats(data, datetime_types_as_str, reduction_methods): gsr = cudf.Series(data, dtype=datetime_types_as_str) psr = gsr.to_pandas() - with expect_warning_if( - PANDAS_GE_230 - and reduction_methods == "quantile" - and len(data) == 0 - and datetime_types_as_str != "datetime64[ns]" - ): - expected = getattr(psr, reduction_methods)() + expected = getattr(psr, reduction_methods)() actual = getattr(gsr, reduction_methods)() if len(data) == 0: @@ -887,6 +962,7 @@ def test_datetime_stats(data, datetime_types_as_str, reduction_methods): assert_eq(expected, actual) +@pytest.mark.filterwarnings("ignore:Mean of empty slice:RuntimeWarning") @pytest.mark.parametrize( "data", [ @@ -904,11 +980,7 @@ def test_datetime_reductions(data, reduction_methods, datetime_types_as_str): psr = sr.to_pandas() actual = getattr(sr, reduction_methods)() - with expect_warning_if( - psr.size > 0 and psr.isnull().all() and reduction_methods == "median", - RuntimeWarning, - ): - expected = getattr(psr, reduction_methods)() + expected = getattr(psr, reduction_methods)() if ( expected is pd.NaT diff --git a/python/cudf/cudf/tests/series/methods/test_replace.py b/python/cudf/cudf/tests/series/methods/test_replace.py index 24b0f63a101c..dfd54e391148 100644 --- a/python/cudf/cudf/tests/series/methods/test_replace.py +++ b/python/cudf/cudf/tests/series/methods/test_replace.py @@ -8,16 +8,9 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_GT_214, - PANDAS_VERSION, -) from cudf.testing import assert_eq from cudf.testing._utils import ( assert_exceptions_equal, - expect_warning_if, ) @@ -44,7 +37,10 @@ (np.inf, 4), ], ) -def test_series_replace_all(gsr_data, dtype, to_replace, value): +def test_series_replace_all(request, gsr_data, dtype, to_replace, value): + if dtype == "category" and isinstance(value, str) and value == "five": + pytest.skip("Tested in test_series_replace_new_string_category_raises") + gsr = cudf.Series(gsr_data, dtype=dtype) psr = gsr.to_pandas() @@ -60,25 +56,32 @@ def test_series_replace_all(gsr_data, dtype, to_replace, value): else: pd_value = value - expect_warn = ( - isinstance(gsr.dtype, cudf.CategoricalDtype) - and isinstance(gd_to_replace, str) - and gd_to_replace == "one" + request.applymarker( + pytest.mark.xfail( + isinstance(gsr.dtype, cudf.CategoricalDtype) + and isinstance(value, str) + and value == "two", + reason="cuDF missing 'one' from the result categories", + ) ) - with expect_warning_if(expect_warn): - actual = gsr.replace(to_replace=gd_to_replace, value=gd_value) - with expect_warning_if(expect_warn and PANDAS_GE_220): - if pd_value is None: - # TODO: Remove this workaround once cudf - # introduces `no_default` values - expected = psr.replace(to_replace=pd_to_replace) - else: - expected = psr.replace(to_replace=pd_to_replace, value=pd_value) + actual = gsr.replace(to_replace=gd_to_replace, value=gd_value) + if pd_value is None: + # TODO: Remove this workaround once cudf + # introduces `no_default` values + expected = psr.replace(to_replace=pd_to_replace) + else: + expected = psr.replace(to_replace=pd_to_replace, value=pd_value) - assert_eq( - expected.sort_values().reset_index(drop=True), - actual.sort_values().reset_index(drop=True), - ) + assert_eq(expected, actual) + + +def test_series_replace_new_string_category_raises(): + psr = pd.Series(["one", "two", "three", None, "one"], dtype="category") + gsr = cudf.Series(["one", "two", "three", None, "one"], dtype="category") + with pytest.raises(TypeError): + psr.replace("one", "five") + with pytest.raises(TypeError): + gsr.replace("one", "five") def test_series_replace(): @@ -90,24 +93,6 @@ def test_series_replace(): sr2 = sr1.replace(0, 5) assert_eq(a2, sr2.to_numpy()) - # Categorical - psr3 = pd.Series(["one", "two", "three"], dtype="category") - with expect_warning_if(PANDAS_GE_220, FutureWarning): - psr4 = psr3.replace("one", "two") - sr3 = cudf.from_pandas(psr3) - with pytest.warns(FutureWarning): - sr4 = sr3.replace("one", "two") - assert_eq( - psr4.sort_values().reset_index(drop=True), - sr4.sort_values().reset_index(drop=True), - ) - with expect_warning_if(PANDAS_GE_220, FutureWarning): - psr5 = psr3.replace("one", "five") - with pytest.warns(FutureWarning): - sr5 = sr3.replace("one", "five") - - assert_eq(psr5, sr5) - # List input a6 = np.array([5, 6, 2, 3, 4]) sr6 = sr1.replace([0, 1], [5, 6]) @@ -189,7 +174,7 @@ def test_series_fillna_numerical( psr = psr.copy(deep=True) # TODO: These tests should use Pandas' nullable int type # when we support a recent enough version of Pandas - # https://pandas.pydata.org/pandas-docs/version/2.3.3/user_guide/integer_na.html + # https://pandas.pydata.org/pandas-docs/stable/user_guide/integer_na.html if np.dtype(numeric_types_as_str).kind != "f" and psr.dtype.kind == "i": psr = psr.astype( cudf.utils.dtypes.np_dtypes_to_pandas_dtypes[ @@ -241,20 +226,15 @@ def test_numeric_series_replace_dtype( ): request.applymarker( pytest.mark.xfail( - condition=PANDAS_GT_214 - and ( - ( - numeric_types_as_str == "int8" - and replacement in {128, 128.0, 32769, 32769.0} - ) - or ( - numeric_types_as_str == "int16" - and replacement in {32769, 32769.0} - ) + ( + numeric_types_as_str == "int8" + and replacement in {128, 128.0, 32769, 32769.0} + ) + or ( + numeric_types_as_str == "int16" + and replacement in {32769, 32769.0} ), - reason="Pandas throws an AssertionError for these " - "cases and asks us to log a bug, they are trying to " - "avoid a RecursionError which cudf will not run into", + reason="Something has gone wrong, please report a bug at https://github.com/pandas-dev/pandas/issues", ) ) psr = pd.Series([0, 1, 2, 3, 4, 5], dtype=numeric_types_as_str) @@ -296,12 +276,10 @@ def test_numeric_series_replace_dtype( pd.Series([5, 1, 2, 3, 4]), {"to_replace": {5: 0, 3: -5}, "inplace": True}, ), - (pd.Series([5, 1, 2, 3, 4]), {}), pytest.param( pd.Series(["one", "two", "three"], dtype="category"), {"to_replace": "one", "value": "two", "inplace": True}, marks=pytest.mark.xfail( - condition=PANDAS_VERSION >= PANDAS_CURRENT_SUPPORTED_VERSION, reason="https://github.com/pandas-dev/pandas/issues/43232" "https://github.com/pandas-dev/pandas/issues/53358", ), @@ -344,10 +322,6 @@ def test_numeric_series_replace_dtype( ), ], ) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Warning not given on older versions of pandas", -) def test_replace_inplace(pframe, replace_args): gpu_frame = cudf.from_pandas(pframe) pandas_frame = pframe.copy() @@ -357,14 +331,21 @@ def test_replace_inplace(pframe, replace_args): assert_eq(gpu_frame, pandas_frame) assert_eq(gpu_copy, cpu_copy) - with expect_warning_if(len(replace_args) == 0): - gpu_frame.replace(**replace_args) - with expect_warning_if(len(replace_args) == 0): - pandas_frame.replace(**replace_args) + gpu_frame.replace(**replace_args) + pandas_frame.replace(**replace_args) assert_eq(gpu_frame, pandas_frame) assert_eq(gpu_copy, cpu_copy) +def test_series_replace_value_no_args(): + psr = pd.Series([5, 1, 2, 3, 4]) + gsr = cudf.Series([5, 1, 2, 3, 4]) + with pytest.raises(ValueError): + psr.replace() + with pytest.raises(ValueError): + gsr.replace() + + def test_series_replace_errors(): gsr = cudf.Series([1, 2, None, 3, None]) psr = gsr.to_pandas() @@ -374,7 +355,7 @@ def test_series_replace_errors(): match=re.escape( "to_replace and value should be of same types," "got to_replace dtype: int64 and " - "value dtype: object" + "value dtype: str" ), ): gsr.replace(1, "a") @@ -385,7 +366,7 @@ def test_series_replace_errors(): match=re.escape( "to_replace and value should be of same types," "got to_replace dtype: int64 and " - "value dtype: object" + "value dtype: str" ), ): gsr.replace([1, 2], ["a", "b"]) @@ -420,78 +401,72 @@ def test_series_replace_errors(): @pytest.mark.parametrize( - "gsr,old,new,expected", + "gsr,old,new", [ ( lambda: cudf.Series(["a", "b", "c", None]), - None, + pd.NA, "a", - lambda: cudf.Series(["a", "b", "c", "a"]), ), ( lambda: cudf.Series(["a", "b", "c", None]), - [None, "a", "a"], + [pd.NA, "a", "a"], ["c", "b", "d"], - lambda: cudf.Series(["d", "b", "c", "c"]), ), ( lambda: cudf.Series(["a", "b", "c", None]), - [None, "a"], - ["b", None], - lambda: cudf.Series([None, "b", "c", "b"]), + [pd.NA, "a"], + ["b", pd.NA], ), ( lambda: cudf.Series(["a", "b", "c", None]), - [None, None], - [None, None], - lambda: cudf.Series(["a", "b", "c", None]), + [pd.NA, pd.NA], + [pd.NA, pd.NA], ), ( - lambda: cudf.Series([1, 2, None, 3]), - None, + lambda: cudf.Series([1, 2, None, 3], dtype="Int64"), + pd.NA, 10, - lambda: cudf.Series([1, 2, 10, 3]), ), ( - lambda: cudf.Series([1, 2, None, 3]), + lambda: cudf.Series([1, 2, None, 3], dtype="Int64"), [None, 1, 1], [3, 2, 4], - lambda: cudf.Series([4, 2, 3, 3]), ), ( - lambda: cudf.Series([1, 2, None, 3]), - [None, 1], - [2, None], - lambda: cudf.Series([None, 2, 2, 3]), + lambda: cudf.Series([1, 2, None, 3], dtype="Int64"), + [pd.NA, 1], + [2, pd.NA], ), ( lambda: cudf.Series(["a", "q", "t", None], dtype="category"), None, "z", - lambda: cudf.Series(["a", "q", "t", "z"], dtype="category"), ), ( lambda: cudf.Series(["a", "q", "t", None], dtype="category"), [None, "a", "q"], ["z", None, None], - lambda: cudf.Series([None, None, "t", "z"], dtype="category"), ), ( lambda: cudf.Series(["a", None, "t", None], dtype="category"), [None, "t"], ["p", None], - lambda: cudf.Series(["a", "p", None, "p"], dtype="category"), ), ], ) -def test_replace_nulls(gsr, old, new, expected): +def test_replace_nulls(gsr, old, new): gsr = gsr() - with expect_warning_if(isinstance(gsr.dtype, cudf.CategoricalDtype)): + psr = gsr.to_pandas() + + try: + expected = psr.replace(old, new) + except Exception as e: + with pytest.raises(type(e)): + gsr.replace(old, new) + else: actual = gsr.replace(old, new) - assert_eq( - expected().sort_values().reset_index(drop=True), - actual.sort_values().reset_index(drop=True), - ) + assert_eq(expected, actual) def test_replace_with_index_objects(): diff --git a/python/cudf/cudf/tests/series/methods/test_reset_index.py b/python/cudf/cudf/tests/series/methods/test_reset_index.py index a422d10fcd1c..e4ffbcb7201b 100644 --- a/python/cudf/cudf/tests/series/methods/test_reset_index.py +++ b/python/cudf/cudf/tests/series/methods/test_reset_index.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -22,25 +22,28 @@ def drop(request): @pytest.mark.parametrize("original_name", [None, "original_ser"]) @pytest.mark.parametrize("name", [None, "ser", no_default]) def test_reset_index(level, drop, inplace, original_name, name): - midx = pd.MultiIndex.from_tuples( - [("a", 1), ("a", 2), ("b", 1), ("b", 2)], names=["l0", None] - ) - ps = pd.Series(range(4), index=midx, name=original_name) - gs = cudf.from_pandas(ps) - if not drop and inplace: pytest.skip( "For exception checks, see " "test_reset_index_dup_level_name_exceptions" ) + midx = pd.MultiIndex.from_tuples( + [("a", 1), ("a", 2), ("b", 1), ("b", 2)], names=["l0", None] + ) + ps = pd.Series(range(4), index=midx, name=original_name) + gs = cudf.from_pandas(ps) + expect = ps.reset_index(level=level, drop=drop, name=name, inplace=inplace) got = gs.reset_index(level=level, drop=drop, name=name, inplace=inplace) if inplace: expect = ps got = gs - + if isinstance(expect, pd.DataFrame) and expect.columns.dtype == "object": + # pandas preserves None as a column label, returning Index[object] + # which cuDF does not support + expect.columns = expect.columns.astype(got.columns.dtype) assert_eq(expect, got) @@ -49,20 +52,25 @@ def test_reset_index(level, drop, inplace, original_name, name): @pytest.mark.parametrize("name", [None, "ser"]) def test_reset_index_dup_level_name(level, drop, inplace, original_name, name): # midx levels are named [None, None] - midx = pd.MultiIndex.from_tuples([("a", 1), ("a", 2), ("b", 1), ("b", 2)]) - ps = pd.Series(range(4), index=midx, name=original_name) - gs = cudf.from_pandas(ps) if level == [None] or not drop and inplace: pytest.skip( "For exception checks, see " "test_reset_index_dup_level_name_exceptions" ) + midx = pd.MultiIndex.from_tuples([("a", 1), ("a", 2), ("b", 1), ("b", 2)]) + ps = pd.Series(range(4), index=midx, name=original_name) + gs = cudf.from_pandas(ps) + expect = ps.reset_index(level=level, drop=drop, inplace=inplace, name=name) got = gs.reset_index(level=level, drop=drop, inplace=inplace, name=name) if inplace: expect = ps got = gs + if isinstance(expect, pd.DataFrame) and expect.columns.dtype == "object": + # pandas preserves None as a column label, returning Index[object] + # which cuDF does not support + expect.columns = expect.columns.astype(got.columns.dtype) assert_eq(expect, got) @@ -70,24 +78,28 @@ def test_reset_index_dup_level_name(level, drop, inplace, original_name, name): @pytest.mark.parametrize("original_name", [None, "original_ser"]) @pytest.mark.parametrize("name", [None, "ser"]) def test_reset_index_named(drop, inplace, original_name, name): - ps = pd.Series(range(4), index=["x", "y", "z", "w"], name=original_name) - gs = cudf.from_pandas(ps) - - ps.index.name = "cudf" - gs.index.name = "cudf" - if not drop and inplace: pytest.skip( "For exception checks, see " "test_reset_index_dup_level_name_exceptions" ) + ps = pd.Series(range(4), index=["x", "y", "z", "w"], name=original_name) + gs = cudf.from_pandas(ps) + + ps.index.name = "cudf" + gs.index.name = "cudf" + expect = ps.reset_index(drop=drop, inplace=inplace, name=name) got = gs.reset_index(drop=drop, inplace=inplace, name=name) if inplace: expect = ps got = gs + if isinstance(expect, pd.DataFrame) and expect.columns.dtype == "object": + # pandas preserves None as a column label, returning Index[object] + # which cuDF does not support + expect.columns = expect.columns.astype(got.columns.dtype) assert_eq(expect, got) diff --git a/python/cudf/cudf/tests/series/methods/test_round.py b/python/cudf/cudf/tests/series/methods/test_round.py index b80d5ef7bfd7..54a721dbbd67 100644 --- a/python/cudf/cudf/tests/series/methods/test_round.py +++ b/python/cudf/cudf/tests/series/methods/test_round.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import decimal @@ -126,7 +126,12 @@ def test_series_round_decimal( "data", [ [1.2234242333234, 323432.3243423, np.nan], - pd.Series([34224, 324324, 324342], dtype="datetime64[ns]"), + pytest.param( + pd.Series([34224, 324324, 324342], dtype="datetime64[ns]"), + marks=pytest.mark.filterwarnings( + "ignore:obj.round has no effect:UserWarning" + ), + ), pd.Series([224.242, None, 2424.234324], dtype="category"), [ decimal.Decimal("342.3243234234242"), diff --git a/python/cudf/cudf/tests/series/methods/test_sort_index.py b/python/cudf/cudf/tests/series/methods/test_sort_index.py index dba2e7a83ed9..436ffb505100 100644 --- a/python/cudf/cudf/tests/series/methods/test_sort_index.py +++ b/python/cudf/cudf/tests/series/methods/test_sort_index.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -41,7 +41,8 @@ def test_series_sort_index( na_position=na_position, ) + # As of pandas 3.0, pandas may coerce a Index[int64] to a RangeIndex if inplace is True: - assert_eq(ps, gs, check_index_type=True) + assert_eq(ps, gs) else: - assert_eq(expected, got, check_index_type=True) + assert_eq(expected, got) diff --git a/python/cudf/cudf/tests/series/methods/test_to_arrow.py b/python/cudf/cudf/tests/series/methods/test_to_arrow.py index 561af75889e4..db121464e60a 100644 --- a/python/cudf/cudf/tests/series/methods/test_to_arrow.py +++ b/python/cudf/cudf/tests/series/methods/test_to_arrow.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -8,7 +8,7 @@ def test_to_arrow_missing_categorical(): - pd_cat = pd.Categorical(["a", "b", "c"], categories=["a", "b"]) + pd_cat = pd.Categorical.from_codes([0, 1, -1], categories=["a", "b"]) pa_cat = pa.array(pd_cat, from_pandas=True) gd_cat = cudf.Series(pa_cat) diff --git a/python/cudf/cudf/tests/series/methods/test_to_pandas.py b/python/cudf/cudf/tests/series/methods/test_to_pandas.py index 0b86a9e6e5b8..80a180f11f2d 100644 --- a/python/cudf/cudf/tests/series/methods/test_to_pandas.py +++ b/python/cudf/cudf/tests/series/methods/test_to_pandas.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import datetime @@ -11,7 +11,7 @@ import pytest import cudf -from cudf.testing import assert_eq +from cudf.testing import _object_array_equal_nan, assert_eq def test_to_pandas_index_true_timezone(): @@ -107,7 +107,7 @@ def test_to_pandas_index_true_timezone(): None, "rapids ai", ], - dtype=pd.StringDtype(), + dtype=pd.StringDtype(na_value=np.nan), ), ), ( @@ -262,9 +262,12 @@ def test_string_export(data): expect = np.array(ps) got = gs.to_numpy() - assert_eq(expect, got) + + try: + assert_eq(expect, got) + except AssertionError: + _object_array_equal_nan(expect, got) expect = pa.Array.from_pandas(ps) got = gs.to_arrow() - assert pa.Array.equals(expect, got) diff --git a/python/cudf/cudf/tests/series/methods/test_update.py b/python/cudf/cudf/tests/series/methods/test_update.py index 2d3ecb89f76e..65ac90c275c1 100644 --- a/python/cudf/cudf/tests/series/methods/test_update.py +++ b/python/cudf/cudf/tests/series/methods/test_update.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -21,8 +21,8 @@ ], ) def test_series_update(index, other): - pd_data = pd.Series([1, 2, 3], index=index) - data = cudf.Series(pd_data) + ps = pd.Series([1, 2, 3], index=index) + data = cudf.Series(ps) gs = data.copy(deep=True) if isinstance(other, pd.Series): other = cudf.Series(other, nan_as_null=False) @@ -32,8 +32,26 @@ def test_series_update(index, other): g_other = other p_other = other - ps = gs.to_pandas() - ps.update(p_other) gs.update(g_other) assert_eq(gs, ps) + + +@pytest.mark.parametrize("dtype", ["int8", "int16", "int32", "int64"]) +def test_series_update_lossy_float_to_int_pandas_compat(dtype): + # pandas raises TypeError when Series.update would cast float values + # with non-zero fractional parts into an integer column. cuDF must + # match this behavior under pandas-compatible mode. + from cudf.testing._utils import assert_exceptions_equal + + psr = pd.Series([10, 11, 12], dtype=dtype) + gsr = cudf.from_pandas(psr) + pother = pd.Series([61.1, 63.1], index=[1, 3]) + gother = cudf.from_pandas(pother) + with cudf.option_context("mode.pandas_compatible", True): + assert_exceptions_equal( + lfunc=psr.update, + rfunc=gsr.update, + lfunc_args_and_kwargs=([pother], {}), + rfunc_args_and_kwargs=([gother], {}), + ) diff --git a/python/cudf/cudf/tests/series/methods/test_value_counts.py b/python/cudf/cudf/tests/series/methods/test_value_counts.py index 4bd94f673491..a186e6ab33b3 100644 --- a/python/cudf/cudf/tests/series/methods/test_value_counts.py +++ b/python/cudf/cudf/tests/series/methods/test_value_counts.py @@ -138,12 +138,30 @@ def test_series_value_counts_optional_arguments(ascending, dropna, normalize): ) -def test_series_categorical_missing_value_count(): - ps = pd.Series(pd.Categorical(list("abcccb"), categories=list("cabd"))) +@pytest.mark.parametrize( + "categorical", + [ + # No nulls + pd.Categorical(list("abcccb"), categories=list("cabd")), + # With nulls (used to drop the NaN group when ``dropna=False``) + pd.Categorical( + [*list("aaaaa"), None, *list("bbbcc")], categories=list("abc") + ), + # With nulls + ordered (used to lose the ``ordered`` flag too) + pd.Categorical( + [*list("aaaa"), None, *list("bbbcc")], + categories=list("bac"), + ordered=True, + ), + ], + ids=["no-nulls", "with-nulls", "with-nulls-ordered"], +) +def test_series_categorical_missing_value_count(categorical, dropna): + ps = pd.Series(categorical) gs = cudf.from_pandas(ps) - expected = ps.value_counts() - actual = gs.value_counts() + expected = ps.value_counts(dropna=dropna) + actual = gs.value_counts(dropna=dropna) assert_eq(expected, actual, check_dtype=False) @@ -173,3 +191,48 @@ def test_numeric_alpha_value_counts(): gdf.alpha.value_counts().sort_index(), check_dtype=False, ) + + +@pytest.mark.parametrize( + "dtype", + [ + "Float32", + "Float64", + "Int8", + "Int16", + "Int32", + "Int64", + "UInt8", + "UInt16", + "UInt32", + "UInt64", + "boolean", + ], +) +def test_value_counts_empty_pandas_nullable(dtype, normalize, dropna): + psr = pd.Series([], dtype=dtype) + gsr = cudf.from_pandas(psr) + + expected = psr.value_counts(dropna=dropna, normalize=normalize) + got = gsr.value_counts(dropna=dropna, normalize=normalize) + + assert_eq(expected, got, check_dtype=True, check_index_type=True) + + +@pytest.mark.parametrize( + "dtype", + ["Float64", "Int64", "UInt32", "boolean"], +) +def test_value_counts_all_null_pandas_nullable(dtype, normalize, dropna): + psr = pd.Series([pd.NA, pd.NA, pd.NA], dtype=dtype) + gsr = cudf.from_pandas(psr) + + expected = psr.value_counts(dropna=dropna, normalize=normalize) + got = gsr.value_counts(dropna=dropna, normalize=normalize) + + assert_eq( + expected.sort_index(), + got.sort_index(), + check_dtype=True, + check_index_type=True, + ) diff --git a/python/cudf/cudf/tests/series/methods/test_where.py b/python/cudf/cudf/tests/series/methods/test_where.py index 1e7c661da928..934e426daff2 100644 --- a/python/cudf/cudf/tests/series/methods/test_where.py +++ b/python/cudf/cudf/tests/series/methods/test_where.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import operator import re @@ -71,3 +71,33 @@ def test_series_with_nulls_where(fill_value): expect = psr.where(psr == 0, fill_value) got = sr.where(sr == 0, fill_value) assert_eq(expect, got) + + +@pytest.mark.parametrize( + "dtype", ["datetime64[ns]", "datetime64[us]", "timedelta64[ns]"] +) +def test_series_mask_inplace_int_into_temporal_pandas_compat(dtype): + # Series.mask with inplace=True must reject incompatible dtype values + # (e.g. int into datetime/timedelta) under pandas-compatible mode. + from cudf.testing._utils import assert_exceptions_equal + + psr = pd.Series([1, 2, 3], dtype=dtype) + gsr = cudf.from_pandas(psr) + pmask = pd.Series([True, False, True]) + gmask = cudf.from_pandas(pmask) + + def pmask_call(): + psr_copy = psr.copy() + psr_copy.mask(pmask, 4, inplace=True) + + def gmask_call(): + gsr_copy = gsr.copy() + gsr_copy.mask(gmask, 4, inplace=True) + + with cudf.option_context("mode.pandas_compatible", True): + assert_exceptions_equal( + lfunc=pmask_call, + rfunc=gmask_call, + lfunc_args_and_kwargs=([], {}), + rfunc_args_and_kwargs=([], {}), + ) diff --git a/python/cudf/cudf/tests/series/test_attributes.py b/python/cudf/cudf/tests/series/test_attributes.py index 65f492bfe254..5ff3bec2b0c3 100644 --- a/python/cudf/cudf/tests/series/test_attributes.py +++ b/python/cudf/cudf/tests/series/test_attributes.py @@ -229,12 +229,7 @@ def test_series_empty(ps): "data", [ [1, 2, 3], - pytest.param( - [np.nan, 10, 15, 16], - marks=pytest.mark.xfail( - reason="https://github.com/pandas-dev/pandas/issues/49818" - ), - ), + [np.nan, 10, 15, 16], [np.nan, None, 10, 20], ["ab", "zx", "pq"], ["ab", "zx", None, "pq"], diff --git a/python/cudf/cudf/tests/series/test_binops.py b/python/cudf/cudf/tests/series/test_binops.py index 264bf1bb8d4e..348238b1eeaa 100644 --- a/python/cudf/cudf/tests/series/test_binops.py +++ b/python/cudf/cudf/tests/series/test_binops.py @@ -14,11 +14,6 @@ import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_220, - PANDAS_VERSION, -) from cudf.testing import assert_eq from cudf.testing._utils import ( _decimal_series, @@ -427,10 +422,10 @@ def test_timedelta_invalid_ops(): def test_timdelta_binop_tz_timestamp(op): s = cudf.Series([1, 2, 3], dtype="timedelta64[ns]") pd_tz_timestamp = pd.Timestamp("1970-01-01 00:00:00.000000001", tz="utc") - with pytest.raises(NotImplementedError): + with pytest.raises(TypeError): op(s, pd_tz_timestamp) date_tz_scalar = datetime.datetime.now(datetime.timezone.utc) - with pytest.raises(NotImplementedError): + with pytest.raises(TypeError): op(s, date_tz_scalar) @@ -462,6 +457,22 @@ def test_compare_ops_numeric_to_null_pandas_compatible(comparison_op): assert_eq(expected, result) +@pytest.mark.parametrize("op", [operator.add, operator.sub]) +@pytest.mark.parametrize("reflect", [False, True]) +def test_numeric_series_pd_nat_raises(op, reflect): + data = [0, 1, 2, 3, 4] + pser = pd.Series(data, dtype="int64") + gser = cudf.Series(data, dtype="int64") + pleft, pright = (pd.NaT, pser) if reflect else (pser, pd.NaT) + gleft, gright = (pd.NaT, gser) if reflect else (gser, pd.NaT) + assert_exceptions_equal( + lfunc=op, + rfunc=op, + lfunc_args_and_kwargs=([pleft, pright],), + rfunc_args_and_kwargs=([gleft, gright],), + ) + + def test_compare_ops_decimal_to_null_pandas_compatible(comparison_op): data = pa.array([None, 1, 3], pa.decimal128(3, 2)) gser = cudf.Series(data) @@ -799,14 +810,94 @@ def test_datetime_invalid_ops(): def test_datetime_binop_tz_timestamp(comparison_op): s = cudf.Series([1, 2, 3], dtype="datetime64[ns]") pd_tz_timestamp = pd.Timestamp("1970-01-01 00:00:00.000000001", tz="utc") - with pytest.raises(NotImplementedError): + with pytest.raises(TypeError): comparison_op(s, pd_tz_timestamp) date_scalar = datetime.datetime.now(datetime.timezone.utc) - with pytest.raises(NotImplementedError): + with pytest.raises(TypeError): comparison_op(s, date_scalar) +def test_datetime_binop_tz_timestamp_pandas_compat(comparison_op): + # Under pandas-compatible mode, comparing a tz-naive datetime Series + # with a tz-aware Timestamp scalar must raise TypeError (matching + # pandas), not NotImplementedError. eq/ne return False/True without + # raising, matching pandas semantics. + if comparison_op in (operator.eq, operator.ne): + pytest.skip("eq/ne do not raise on tz mismatch") + psr = pd.Series([1, 2, 3], dtype="datetime64[ns]") + gsr = cudf.from_pandas(psr) + pd_tz_timestamp = pd.Timestamp("1970-01-01 00:00:00.000000001", tz="utc") + with cudf.option_context("mode.pandas_compatible", True): + assert_exceptions_equal( + lfunc=comparison_op, + rfunc=comparison_op, + lfunc_args_and_kwargs=([psr, pd_tz_timestamp],), + rfunc_args_and_kwargs=([gsr, pd_tz_timestamp],), + ) + + +@pytest.mark.parametrize( + "lhs_tz,rhs_tz", + [(None, "US/Pacific"), ("US/Pacific", None)], +) +def test_datetime_column_tz_mismatch_pandas_compat( + comparison_op, lhs_tz, rhs_tz +): + # Column-vs-column comparison between tz-naive and tz-aware datetime + # Series must raise TypeError under pandas-compatible mode for the + # inequality ops; equality ops still return False/True. + if comparison_op in (operator.eq, operator.ne): + pytest.skip("eq/ne do not raise on tz mismatch") + psr_lhs = pd.Series(pd.date_range("2020-01-01", periods=3, tz=lhs_tz)) + psr_rhs = pd.Series(pd.date_range("2020-01-01", periods=3, tz=rhs_tz)) + gsr_lhs = cudf.from_pandas(psr_lhs) + gsr_rhs = cudf.from_pandas(psr_rhs) + with cudf.option_context("mode.pandas_compatible", True): + assert_exceptions_equal( + lfunc=comparison_op, + rfunc=comparison_op, + lfunc_args_and_kwargs=([psr_lhs, psr_rhs],), + rfunc_args_and_kwargs=([gsr_lhs, gsr_rhs],), + ) + + +def test_datetime_sub_tz_mismatch_pandas_compat(): + # Subtracting a tz-aware datetime Series from a tz-naive one must + # raise TypeError under pandas-compatible mode. + psr_naive = pd.Series(pd.date_range("2020-01-01", periods=3)) + psr_aware = pd.Series( + pd.date_range("2020-01-01", periods=3, tz="US/Pacific") + ) + gsr_naive = cudf.from_pandas(psr_naive) + gsr_aware = cudf.from_pandas(psr_aware) + with cudf.option_context("mode.pandas_compatible", True): + assert_exceptions_equal( + lfunc=operator.sub, + rfunc=operator.sub, + lfunc_args_and_kwargs=([psr_naive, psr_aware],), + rfunc_args_and_kwargs=([gsr_naive, gsr_aware],), + ) + + +@pytest.mark.parametrize( + "op", [operator.lt, operator.le, operator.gt, operator.ge] +) +@pytest.mark.parametrize("scalar", [None, np.nan]) +def test_datetime_inequality_vs_none_pandas_compat(op, scalar): + # pandas raises TypeError on inequality ops between datetime Series + # and None / NaN scalars; cuDF must too under pandas-compatible mode. + psr = pd.Series(pd.date_range("2020-01-01", periods=3)) + gsr = cudf.from_pandas(psr) + with cudf.option_context("mode.pandas_compatible", True): + assert_exceptions_equal( + lfunc=op, + rfunc=op, + lfunc_args_and_kwargs=([psr, scalar],), + rfunc_args_and_kwargs=([gsr, scalar],), + ) + + def test_datetime_series_cmpops_pandas_compatibility(comparison_op): data1 = ["20110101", "20120101", None, "20140101", None] data2 = ["20110101", "20120101", "20130101", None, None] @@ -1397,8 +1488,7 @@ def test_operator_func_series_and_scalar_logical( ): request.applymarker( pytest.mark.xfail( - PANDAS_VERSION >= PANDAS_CURRENT_SUPPORTED_VERSION - and fill_value == 1.0 + fill_value == 1.0 and scalar is np.nan and ( has_nulls @@ -1568,27 +1658,12 @@ def test_datetime_dateoffset_binaryop( ): request.applymarker( pytest.mark.xfail( - PANDAS_VERSION >= PANDAS_CURRENT_SUPPORTED_VERSION - and dtype in {"datetime64[ms]", "datetime64[s]"} + dtype in {"datetime64[ms]", "datetime64[s]"} and frequency == "microseconds" and n_periods == 0, reason="https://github.com/pandas-dev/pandas/issues/57448", ) ) - if ( - not PANDAS_GE_220 - and dtype in {"datetime64[ms]", "datetime64[s]"} - and frequency in ("microseconds", "nanoseconds") - and n_periods != 0 - ): - pytest.skip(reason="https://github.com/pandas-dev/pandas/pull/55595") - if ( - not PANDAS_GE_220 - and dtype == "datetime64[us]" - and frequency == "nanoseconds" - and n_periods != 0 - ): - pytest.skip(reason="https://github.com/pandas-dev/pandas/pull/55595") date_col = [ f"2000-01-01 00:00:{components}", @@ -1653,10 +1728,6 @@ def test_datetime_dateoffset_binaryop( "ignore:Discarding nonzero nanoseconds:UserWarning" ) @pytest.mark.parametrize("op", [operator.add, operator.sub]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_datetime_dateoffset_binaryop_multiple(kwargs, op): gsr = cudf.Series( [ @@ -1703,21 +1774,6 @@ def test_datetime_dateoffset_binaryop_multiple(kwargs, op): def test_datetime_dateoffset_binaryop_reflected( n_periods, frequency, dtype, components ): - if ( - not PANDAS_GE_220 - and dtype in {"datetime64[ms]", "datetime64[s]"} - and frequency in ("microseconds", "nanoseconds") - and n_periods != 0 - ): - pytest.skip(reason="https://github.com/pandas-dev/pandas/pull/55595") - if ( - not PANDAS_GE_220 - and dtype == "datetime64[us]" - and frequency == "nanoseconds" - and n_periods != 0 - ): - pytest.skip(reason="https://github.com/pandas-dev/pandas/pull/55595") - date_col = [ f"2000-01-01 00:00:{components}", f"2000-01-31 00:00:{components}", @@ -2838,6 +2894,19 @@ def test_column_null_scalar_comparison( data = [1, 2, 3, 4, 5] sr = cudf.Series(data, dtype=dtype) + # Ordering comparisons between a datetime64/timedelta64 series and a + # non-typed null (``None``) now raise ``TypeError`` to match pandas. + if ( + null_scalar is None + and comparison_op.__name__ in {"lt", "le", "gt", "ge"} + and ( + all_supported_types_as_str.startswith("datetime64") + or all_supported_types_as_str.startswith("timedelta64") + ) + ): + with pytest.raises(TypeError, match="Invalid comparison"): + comparison_op(sr, null_scalar) + return result = comparison_op(sr, null_scalar) if all_supported_types_as_str.startswith( "datetime64" @@ -3074,8 +3143,19 @@ def test_eq_ne_non_comparable_types( def test_binops_compare_stdlib_date_scalar(comparison_op): dt = datetime.date(2020, 1, 1) data = [dt] - result = comparison_op(cudf.Series(data), dt) - expected = comparison_op(pd.Series(data), dt) + sr = cudf.Series(data) + # cudf promotes ``date`` to ``datetime64``. pandas treats a bare + # ``date`` as not comparable with a datetime64 column: ordering ops + # raise, ``==``/``!=`` return all-False/True. + ps = pd.Series(data, dtype=sr.dtype) + if comparison_op.__name__ in {"lt", "le", "gt", "ge"}: + with pytest.raises(TypeError, match="Invalid comparison"): + comparison_op(sr, dt) + with pytest.raises(TypeError, match="Invalid comparison"): + comparison_op(ps, dt) + return + result = comparison_op(sr, dt) + expected = comparison_op(ps, dt) assert_eq(result, expected) diff --git a/python/cudf/cudf/tests/series/test_constructors.py b/python/cudf/cudf/tests/series/test_constructors.py index 2f41bd04ff17..10bac401af82 100644 --- a/python/cudf/cudf/tests/series/test_constructors.py +++ b/python/cudf/cudf/tests/series/test_constructors.py @@ -11,13 +11,9 @@ import pandas as pd import pyarrow as pa import pytest +from packaging.version import parse import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_GE_210, - PANDAS_VERSION, -) from cudf.core.buffer.spill_manager import get_global_manager from cudf.core.column.column import as_column from cudf.errors import MixedTypeError @@ -285,13 +281,7 @@ def test_series_unitness_np_datetimelike_units(): def test_from_numpyextensionarray_string_object_pandas_compat_mode(): - NumpyExtensionArray = ( - pd.arrays.NumpyExtensionArray - if PANDAS_GE_210 - else pd.arrays.PandasArray - ) - - data = NumpyExtensionArray(np.array(["a", None], dtype=object)) + data = pd.arrays.NumpyExtensionArray(np.array(["a", None], dtype=object)) with cudf.option_context("mode.pandas_compatible", True): result = cudf.Series(data) expected = pd.Series(data) @@ -519,12 +509,7 @@ def test_series_init_scalar_with_index(data, index): pandas_series = pd.Series(data, index=index) cudf_series = cudf.Series(data, index=index) - assert_eq( - pandas_series, - cudf_series, - check_index_type=data is not None or index is not None, - check_dtype=data is not None, - ) + assert_eq(pandas_series, cudf_series) @pytest.mark.parametrize( @@ -565,11 +550,6 @@ def __getitem__(self, key): cudf.Series(A()) -def test_series_constructor_error_mixed_type(): - with pytest.raises(MixedTypeError): - cudf.Series(["abc", np.nan, "123"], nan_as_null=False) - - def test_series_from_pandas_sparse(): pser = pd.Series(range(2), dtype=pd.SparseDtype(np.int64, 0)) with pytest.raises(NotImplementedError): @@ -805,7 +785,8 @@ def test_series_all_valid_nan(num_elements): def test_series_empty_dtype(): expected = pd.Series([]) actual = cudf.Series([]) - assert_eq(expected, actual, check_dtype=True) + assert expected.dtype == actual.dtype + assert_eq(expected, actual) @pytest.mark.parametrize("data", [None, {}, []]) @@ -815,6 +796,26 @@ def test_series_empty_index_rangeindex(data): assert_eq(result, expected) +@pytest.mark.parametrize("index", [None, []]) +def test_series_no_data_empty_index_defaults_to_object(index): + # When no data is supplied and the index is empty (None or []), the + # resulting dtype should be object to match pandas. Only a non-empty + # index without explicit dtype should default to float64. + expected = pd.Series(index=index) + result = cudf.Series(index=index) + assert result.dtype == np.dtype("object") + assert_eq(result, expected) + + +def test_series_no_data_nonempty_index_defaults_to_float64(): + # Sanity check: a non-empty index without explicit dtype keeps the + # float64 default that pandas uses. + expected = pd.Series(index=[1, 2, 3]) + result = cudf.Series(index=[1, 2, 3]) + assert result.dtype == np.dtype("float64") + assert_eq(result, expected) + + @pytest.mark.parametrize( "pandas_type", [ @@ -1135,7 +1136,7 @@ def test_series_arrow_list_types_roundtrip(): def test_series_error_nan_mixed_types(): - ps = pd.Series([np.nan, "ab", "cd"]) + ps = pd.Series([np.nan, "ab", "cd"], dtype=object) with cudf.option_context("mode.pandas_compatible", True): with pytest.raises(MixedTypeError): cudf.from_pandas(ps) @@ -1208,6 +1209,8 @@ def test_series_np_array_all_nan_object_raises(): def test_roundtrip_series_plc_column(ps): expect = cudf.Series(ps) actual = cudf.Series.from_pylibcudf(*expect.to_pylibcudf()) + if expect.dtype == "object": + actual = actual.astype("object") assert_eq(expect, actual) @@ -1288,10 +1291,6 @@ def test_datetime_array_timeunit_cast(dtype): @pytest.mark.parametrize("timeunit", ["D", "W", "M", "Y"]) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_datetime_scalar_timeunit_cast(timeunit): testscalar = np.datetime64("2016-11-20", timeunit) @@ -1312,10 +1311,6 @@ def test_datetime_scalar_timeunit_cast(timeunit): assert_eq(pdf, gdf, check_dtype=True) -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Fails in older versions of pandas", -) def test_datetime_string_to_datetime_resolution_loss_raises(): data = ["2020-01-01 00:00:00.00001"] dtype = "datetime64[s]" @@ -1339,7 +1334,7 @@ def test_string_ingest(one_dimensional_array_types): expect = ["a", "a", "b", "c", "a"] data = one_dimensional_array_types(expect) got = cudf.Series(data) - assert got.dtype == np.dtype("object") + assert got.dtype == pd.StringDtype(na_value=np.nan) assert len(got) == 5 for idx, val in enumerate(expect): assert expect[idx] == got[idx] @@ -1430,6 +1425,23 @@ def test_categorical_creation(codes, categories): assert_eq(expected, got) +@pytest.mark.parametrize("tz", ["US/Eastern", "Asia/Tokyo", "UTC"]) +@pytest.mark.parametrize( + "data", + [ + ["2024-01-01", "2024-02-01", "2024-01-01"], + ["2024-01-01", None, "2024-02-01"], + ], +) +def test_categorical_creation_tz_aware(data, tz): + cats = pd.to_datetime(data).tz_localize(tz) + pd_cat = pd.Categorical(cats) + expected = pd.Series(pd_cat) + got = cudf.Series(pd_cat) + assert_eq(expected, got) + assert got.cat.categories.dtype == expected.cat.categories.dtype + + @pytest.mark.parametrize("input_obj", [[1, cudf.NA, 3]]) def test_series_construction_with_nulls_as_category( input_obj, all_supported_types_as_str @@ -1510,17 +1522,15 @@ def test_as_column_types(): assert_eq(pds, gds) col = as_column(cudf.Series([], dtype="float64"), dtype=cudf.dtype("str")) - assert_eq(col.dtype, np.dtype("object")) + assert_eq(col.dtype, pd.StringDtype(na_value=np.nan)) gds = cudf.Series._from_column(col) pds = pd.Series(pd.Series([], dtype="str")) - assert_eq(pds, gds) col = as_column(cudf.Series([], dtype="float64"), dtype=cudf.dtype("str")) - assert_eq(col.dtype, np.dtype("object")) + assert_eq(col.dtype, pd.StringDtype(na_value=np.nan)) gds = cudf.Series._from_column(col) - pds = pd.Series(pd.Series([], dtype="object")) - + pds = pd.Series(pd.Series([], dtype="str")) assert_eq(pds, gds) pds = pd.Series(np.array([1, 2, 3]), dtype="float32") @@ -1593,18 +1603,13 @@ def test_series_constructor_dtype_is_pandas_nullable_extension_type( def test_series_constructor_dtype_is_pandas_arrowdtype( all_supported_pandas_arrowdtypes, - request, ): scalar, dtype = all_supported_pandas_arrowdtypes - if PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION: - if dtype.kind == "M" and dtype.pyarrow_dtype.tz is not None: - pytest.skip( - f"RecursionError occurs in older versions of pandas/pyarrow for {dtype}" - ) - elif pa.types.is_decimal(dtype.pyarrow_dtype): - pytest.skip( - "Decimal types coerced to object in older versions of pandas/pyarrow" - ) + if ( + pa.types.is_decimal32(dtype.pyarrow_dtype) + or pa.types.is_decimal64(dtype.pyarrow_dtype) + ) and parse(pa.__version__) < parse("20"): + pytest.skip("pyarrow < 19 converts decimal32/64 to object") result = cudf.Series([scalar], dtype=dtype) expected = pd.Series([scalar], dtype=dtype) assert result.dtype == expected.dtype diff --git a/python/cudf/cudf/tests/series/test_np_ufuncs.py b/python/cudf/cudf/tests/series/test_np_ufuncs.py index bad5f915de55..d146852e8d36 100644 --- a/python/cudf/cudf/tests/series/test_np_ufuncs.py +++ b/python/cudf/cudf/tests/series/test_np_ufuncs.py @@ -6,21 +6,14 @@ import cupy as cp import numpy as np +import pandas as pd import pytest import cudf -from cudf.core._compat import ( - PANDAS_CURRENT_SUPPORTED_VERSION, - PANDAS_VERSION, -) from cudf.testing import assert_eq -from cudf.testing._utils import expect_warning_if, set_random_null_mask_inplace +from cudf.testing._utils import set_random_null_mask_inplace -@pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="warning not present in older pandas versions", -) @pytest.mark.parametrize("has_nulls", [True, False]) @pytest.mark.parametrize("indexed", [True, False]) def test_ufunc_series(request, numpy_ufunc, has_nulls, indexed): @@ -48,15 +41,6 @@ def test_ufunc_series(request, numpy_ufunc, has_nulls, indexed): reason="Can't call cupy on column with nulls", ) ) - request.applymarker( - pytest.mark.xfail( - condition=numpy_ufunc.__name__.startswith("bitwise") - and numpy_ufunc != np.bitwise_count - and indexed - and has_nulls, - reason="https://github.com/pandas-dev/pandas/issues/52500", - ) - ) N = 100 # Avoid zeros in either array to skip division by 0 errors. Also limit the @@ -100,25 +84,26 @@ def test_ufunc_series(request, numpy_ufunc, has_nulls, indexed): assert_eq(g, e, check_exact=False) else: if has_nulls: - with expect_warning_if( - numpy_ufunc - in ( - np.isfinite, - np.isinf, - np.isnan, - np.logical_and, - np.logical_not, - np.logical_or, - np.logical_xor, - np.signbit, - np.equal, - np.greater, - np.greater_equal, - np.less, - np.less_equal, - np.not_equal, - ) + if numpy_ufunc in ( + np.isfinite, + np.isinf, + np.isnan, + np.logical_and, + np.logical_not, + np.logical_or, + np.logical_xor, + np.signbit, + np.equal, + np.greater, + np.greater_equal, + np.less, + np.less_equal, + np.not_equal, ): + # cuDF .to_pandas for bools with nulls represents missing as None, + # should this be np.nan? + expect = expect.astype(object).mask(mask, None) + else: expect[mask] = np.nan assert_eq(got, expect, check_exact=False) @@ -214,6 +199,94 @@ def test_ufunc_cudf_series_error_with_out_kwarg(): np.add(x1=cudf_s1, x2=cudf_s2, out=cudf_s3) +@pytest.mark.parametrize( + "ufunc", [np.cos, np.sin, np.exp, np.log, np.sqrt, np.sign, np.abs] +) +@pytest.mark.parametrize( + "input_dtype", + [ + "Float32", + "Float64", + "Int8", + "Int16", + "Int32", + "Int64", + "UInt8", + "UInt16", + "UInt32", + "UInt64", + ], +) +def test_unary_ufunc_preserves_pandas_nullable_dtype( + request, ufunc, input_dtype +): + # Match pandas behavior: a unary ufunc on a Series with a pandas-nullable + # dtype should return a Series whose dtype is the corresponding + # pandas-nullable dtype (Float64 for transcendental ops on integers, same + # dtype family for sign/abs, etc.). + request.applymarker( + pytest.mark.xfail( + condition=( + input_dtype in {"Int8", "UInt8"} + and ufunc in {np.cos, np.sin, np.exp, np.log, np.sqrt} + ), + reason=( + "cupy promotes 8-bit ints to float16 for transcendental ops, " + "which cudf does not support." + ), + ) + ) + psr = pd.Series([1, 2, 3, pd.NA], dtype=input_dtype) + gsr = cudf.from_pandas(psr) + + with np.errstate(invalid="ignore"): + expected = ufunc(psr) + got = ufunc(gsr) + + assert expected.dtype == got.dtype + assert_eq(expected, got, check_dtype=True) + + +@pytest.mark.parametrize("ufunc", [np.add, np.subtract, np.multiply]) +@pytest.mark.parametrize( + "left_dtype, right_dtype", + [ + ("Float64", "Float64"), + ("Int64", "Int64"), + ("Float64", "Int64"), + ("Int32", "Float32"), + ], +) +def test_binary_ufunc_preserves_pandas_nullable_dtype( + ufunc, left_dtype, right_dtype +): + pa = pd.Series([1, 2, 3, pd.NA], dtype=left_dtype) + pb = pd.Series([4, 5, pd.NA, 7], dtype=right_dtype) + ga = cudf.from_pandas(pa) + gb = cudf.from_pandas(pb) + + expected = ufunc(pa, pb) + got = ufunc(ga, gb) + + assert expected.dtype == got.dtype + assert_eq(expected, got, check_dtype=True) + + +@pytest.mark.parametrize("ufunc", [np.cos, np.sqrt, np.sign]) +def test_unary_ufunc_plain_numpy_dtype_unchanged(ufunc): + # Sanity check: plain numpy dtypes still produce plain numpy dtype outputs + # (no accidental upcast to pandas-nullable). + psr = pd.Series([1.0, 2.0, 3.0]) + gsr = cudf.from_pandas(psr) + + with np.errstate(invalid="ignore"): + expected = ufunc(psr) + got = ufunc(gsr) + + assert expected.dtype == got.dtype + assert_eq(expected, got, check_dtype=True) + + @pytest.mark.parametrize( "data", [ diff --git a/python/cudf/cudf/tests/series/test_repr.py b/python/cudf/cudf/tests/series/test_repr.py index 64e54d8e82ed..c0c46b3ab176 100644 --- a/python/cudf/cudf/tests/series/test_repr.py +++ b/python/cudf/cudf/tests/series/test_repr.py @@ -16,7 +16,7 @@ def test_null_series(nrows, all_supported_types_as_str, request): request.applymarker( pytest.mark.xfail( - all_supported_types_as_str in {"bool", "timedelta64[ms]"}, + all_supported_types_as_str in {"bool"}, reason=f"cuDF repr doesn't match pandas repr for {all_supported_types_as_str}", ) ) @@ -34,7 +34,9 @@ def test_null_series(nrows, all_supported_types_as_str, request): ps = sr.to_pandas() with pd.option_context("display.max_rows", int(nrows)): - psrepr = repr(ps).replace("NaN", "") + psrepr = repr(ps) + if "category" in psrepr: + psrepr = psrepr.replace("NaN", "") if "UInt" in psrepr: psrepr = psrepr.replace("UInt", "uint") elif "Int" in psrepr: @@ -76,7 +78,7 @@ def test_float_series(x): @pytest.mark.parametrize( - "sr", + "psr", [ pd.Series([1, 2, 3], index=[10, 20, None]), pd.Series([1, None, 3], name="a", index=[None, "a", "b"]), @@ -114,13 +116,11 @@ def test_float_series(x): ).set_index(["a", "v"])["p"], ], ) -def test_series_null_index_repr(sr): - psr = sr +def test_series_null_index_repr(psr): gsr = cudf.from_pandas(psr) - expected_repr = repr(psr).replace("NaN", "") + expected_repr = repr(psr) actual_repr = repr(gsr) - assert expected_repr.split() == actual_repr.split() @@ -165,324 +165,142 @@ def test_timedelta_series_s_us_repr(data, dtype): @pytest.mark.parametrize( - "ser, expected_repr", + "ser", [ - ( - lambda: cudf.Series([], dtype="timedelta64[ns]"), - textwrap.dedent( - """ - Series([], dtype: timedelta64[ns]) - """ - ), - ), - ( - lambda: cudf.Series([], dtype="timedelta64[ms]"), - textwrap.dedent( - """ - Series([], dtype: timedelta64[ms]) - """ - ), - ), - ( - lambda: cudf.Series( - [1000000, 200000, 3000000], dtype="timedelta64[ns]" - ), - textwrap.dedent( - """ - 0 0 days 00:00:00.001000 - 1 0 days 00:00:00.000200 - 2 0 days 00:00:00.003000 - dtype: timedelta64[ns] - """ - ), + lambda: cudf.Series([], dtype="timedelta64[ns]"), + lambda: cudf.Series([], dtype="timedelta64[ms]"), + lambda: cudf.Series( + [1000000, 200000, 3000000], dtype="timedelta64[ns]" ), - ( - lambda: cudf.Series( - [1000000, 200000, 3000000], dtype="timedelta64[ms]" - ), - textwrap.dedent( - """ - 0 0 days 00:16:40 - 1 0 days 00:03:20 - 2 0 days 00:50:00 - dtype: timedelta64[ms] - """ - ), + lambda: cudf.Series( + [1000000, 200000, 3000000], dtype="timedelta64[ms]" ), - ( - lambda: cudf.Series( - [1000000, 200000, None], dtype="timedelta64[ns]" - ), - textwrap.dedent( - """ - 0 0 days 00:00:00.001000000 - 1 0 days 00:00:00.000200000 - 2 NaT - dtype: timedelta64[ns] - """ - ), + lambda: cudf.Series([1000000, 200000, None], dtype="timedelta64[ns]"), + lambda: cudf.Series([1000000, 200000, None], dtype="timedelta64[ms]"), + lambda: cudf.Series( + [None, None, None, None, None], dtype="timedelta64[ns]" ), - ( - lambda: cudf.Series( - [1000000, 200000, None], dtype="timedelta64[ms]" - ), - textwrap.dedent( - """ - 0 0 days 00:16:40 - 1 0 days 00:03:20 - 2 NaT - dtype: timedelta64[ms] - """ - ), + lambda: cudf.Series( + [None, None, None, None, None], dtype="timedelta64[ms]" ), - ( - lambda: cudf.Series( - [None, None, None, None, None], dtype="timedelta64[ns]" - ), - textwrap.dedent( - """ - 0 NaT - 1 NaT - 2 NaT - 3 NaT - 4 NaT - dtype: timedelta64[ns] - """ - ), + lambda: cudf.Series( + [12, 12, 22, 343, 4353534, 435342], dtype="timedelta64[ns]" ), - ( - lambda: cudf.Series( - [None, None, None, None, None], dtype="timedelta64[ms]" - ), - textwrap.dedent( - """ - 0 NaT - 1 NaT - 2 NaT - 3 NaT - 4 NaT - dtype: timedelta64[ms] - """ - ), + lambda: cudf.Series( + [12, 12, 22, 343, 4353534, 435342], dtype="timedelta64[ms]" ), - ( - lambda: cudf.Series( - [12, 12, 22, 343, 4353534, 435342], dtype="timedelta64[ns]" - ), - textwrap.dedent( - """ - 0 0 days 00:00:00.000000012 - 1 0 days 00:00:00.000000012 - 2 0 days 00:00:00.000000022 - 3 0 days 00:00:00.000000343 - 4 0 days 00:00:00.004353534 - 5 0 days 00:00:00.000435342 - dtype: timedelta64[ns] - """ - ), + lambda: cudf.Series( + [1.321, 1132.324, 23223231.11, 233.41, 0.2434, 332, 323], + dtype="timedelta64[ns]", ), - ( - lambda: cudf.Series( - [12, 12, 22, 343, 4353534, 435342], dtype="timedelta64[ms]" - ), - textwrap.dedent( - """ - 0 0 days 00:00:00.012000 - 1 0 days 00:00:00.012000 - 2 0 days 00:00:00.022000 - 3 0 days 00:00:00.343000 - 4 0 days 01:12:33.534000 - 5 0 days 00:07:15.342000 - dtype: timedelta64[ms] - """ - ), + lambda: cudf.Series( + [1.321, 1132.324, 23223231.11, 233.41, 0.2434, 332, 323], + dtype="timedelta64[ms]", ), - ( - lambda: cudf.Series( - [1.321, 1132.324, 23223231.11, 233.41, 0.2434, 332, 323], - dtype="timedelta64[ns]", - ), - textwrap.dedent( - """ - 0 0 days 00:00:00.000000001 - 1 0 days 00:00:00.000001132 - 2 0 days 00:00:00.023223231 - 3 0 days 00:00:00.000000233 - 4 0 days 00:00:00 - 5 0 days 00:00:00.000000332 - 6 0 days 00:00:00.000000323 - dtype: timedelta64[ns] - """ - ), + lambda: cudf.Series( + [ + 13645765432432, + 134736784, + 245345345, + 223432411, + 999992343241, + 3634548734, + 23234, + ], + dtype="timedelta64[ms]", ), - ( - lambda: cudf.Series( - [1.321, 1132.324, 23223231.11, 233.41, 0.2434, 332, 323], - dtype="timedelta64[ms]", - ), - textwrap.dedent( - """ - 0 0 days 00:00:00.001000 - 1 0 days 00:00:01.132000 - 2 0 days 06:27:03.231000 - 3 0 days 00:00:00.233000 - 4 0 days 00:00:00 - 5 0 days 00:00:00.332000 - 6 0 days 00:00:00.323000 - dtype: timedelta64[ms] - """ - ), + lambda: cudf.Series( + [ + 13645765432432, + 134736784, + 245345345, + 223432411, + 999992343241, + 3634548734, + 23234, + ], + dtype="timedelta64[ns]", ), - ( - lambda: cudf.Series( - [ - 13645765432432, - 134736784, - 245345345, - 223432411, - 999992343241, - 3634548734, - 23234, - ], - dtype="timedelta64[ms]", - ), - textwrap.dedent( - """ - 0 157937 days 02:23:52.432000 - 1 1 days 13:25:36.784000 - 2 2 days 20:09:05.345000 - 3 2 days 14:03:52.411000 - 4 11573 days 23:39:03.241000 - 5 42 days 01:35:48.734000 - 6 0 days 00:00:23.234000 - dtype: timedelta64[ms] - """ - ), + lambda: cudf.Series( + [ + 13645765432432, + 134736784, + 245345345, + 223432411, + 999992343241, + 3634548734, + 23234, + ], + dtype="timedelta64[ms]", + name="abc", ), - ( - lambda: cudf.Series( - [ - 13645765432432, - 134736784, - 245345345, - 223432411, - 999992343241, - 3634548734, - 23234, - ], - dtype="timedelta64[ns]", - ), - textwrap.dedent( - """ - 0 0 days 03:47:25.765432432 - 1 0 days 00:00:00.134736784 - 2 0 days 00:00:00.245345345 - 3 0 days 00:00:00.223432411 - 4 0 days 00:16:39.992343241 - 5 0 days 00:00:03.634548734 - 6 0 days 00:00:00.000023234 - dtype: timedelta64[ns] - """ - ), - ), - ( - lambda: cudf.Series( - [ - 13645765432432, - 134736784, - 245345345, - 223432411, - 999992343241, - 3634548734, - 23234, - ], - dtype="timedelta64[ms]", - name="abc", - ), - textwrap.dedent( - """ - 0 157937 days 02:23:52.432000 - 1 1 days 13:25:36.784000 - 2 2 days 20:09:05.345000 - 3 2 days 14:03:52.411000 - 4 11573 days 23:39:03.241000 - 5 42 days 01:35:48.734000 - 6 0 days 00:00:23.234000 - Name: abc, dtype: timedelta64[ms] - """ - ), - ), - ( - lambda: cudf.Series( - [ - 13645765432432, - 134736784, - 245345345, - 223432411, - 999992343241, - 3634548734, - 23234, - ], - dtype="timedelta64[ns]", - index=["a", "b", "z", "x", "y", "l", "m"], - name="hello", - ), - textwrap.dedent( - """ - a 0 days 03:47:25.765432432 - b 0 days 00:00:00.134736784 - z 0 days 00:00:00.245345345 - x 0 days 00:00:00.223432411 - y 0 days 00:16:39.992343241 - l 0 days 00:00:03.634548734 - m 0 days 00:00:00.000023234 - Name: hello, dtype: timedelta64[ns] - """ - ), + lambda: cudf.Series( + [ + 13645765432432, + 134736784, + 245345345, + 223432411, + 999992343241, + 3634548734, + 23234, + ], + dtype="timedelta64[ns]", + index=["a", "b", "z", "x", "y", "l", "m"], + name="hello", ), ], ) -def test_timedelta_series_ns_ms_repr(ser, expected_repr): - expected = expected_repr - actual = repr(ser()) - - assert expected.split() == actual.split() +def test_timedelta_series_ns_ms_repr(ser): + gsr = ser() + psr = gsr.to_pandas() + assert repr(psr).split() == repr(gsr).split() def test_categorical_series_with_nan_repr(): - series = cudf.Series( - [1, 2, np.nan, 10, np.nan, None], nan_as_null=False - ).astype("category") + series = cudf.Series([1, 2.0, np.nan, 10, np.nan, np.nan]).astype( + "category" + ) expected_repr = textwrap.dedent( """ 0 1.0 1 2.0 - 2 NaN + 2 3 10.0 - 4 NaN + 4 5 dtype: category - Categories (4, float64): [1.0, 2.0, 10.0, NaN] + Categories (3, float64): [1.0, 2.0, 10.0] """ ) - assert repr(series).split() == expected_repr.split() sliced_expected_repr = textwrap.dedent( """ - 2 NaN + 2 3 10.0 - 4 NaN + 4 5 dtype: category - Categories (4, float64): [1.0, 2.0, 10.0, NaN] + Categories (3, float64): [1.0, 2.0, 10.0] """ ) assert repr(series[2:]).split() == sliced_expected_repr.split() +@pytest.mark.parametrize("tz", [None, "US/Eastern"]) +@pytest.mark.parametrize("ordered", [False, True]) +def test_categorical_series_repr_datetime_multiline(tz, ordered): + idx = pd.date_range( + "2011-01-01 09:00", freq="h", periods=5, tz=tz, unit="ns" + ) + cat = pd.Categorical(idx, ordered=ordered) + expected = repr(pd.Series(cat)) + got = repr(cudf.Series(cat)) + assert got == expected + + def test_empty_series_name(): ps = pd.Series([], name="abc", dtype="int") gs = cudf.from_pandas(ps) diff --git a/python/cudf/cudf/tests/series/test_unary.py b/python/cudf/cudf/tests/series/test_unary.py index 1e16e1f8441c..bea1990f68d5 100644 --- a/python/cudf/cudf/tests/series/test_unary.py +++ b/python/cudf/cudf/tests/series/test_unary.py @@ -6,10 +6,8 @@ import numpy as np import pandas as pd import pyarrow as pa -import pytest from cudf import Series, from_pandas, option_context -from cudf.core._compat import PANDAS_GE_210 from cudf.testing import assert_eq @@ -47,13 +45,7 @@ def test_series_decimal_neg(): assert_eq((-sr).to_pandas(), -psr, check_dtype=True) -def test_series_invert_arrow_dtype(request): - request.applymarker( - pytest.mark.xfail( - condition=not PANDAS_GE_210, - reason="PyArrow-backed integer dtypes now support bitwise operations in Pandas 2.1 and above", - ) - ) +def test_series_invert_arrow_dtype(): ps = pd.Series( pd.arrays.ArrowExtensionArray( pa.array([1, 0, 1, 0, None, 2, 1, 2], type=pa.uint32()) diff --git a/python/cudf/cudf/tests/test_doctests.py b/python/cudf/cudf/tests/test_doctests.py index 7c91242bad5f..ad85bad30a51 100644 --- a/python/cudf/cudf/tests/test_doctests.py +++ b/python/cudf/cudf/tests/test_doctests.py @@ -4,14 +4,12 @@ import doctest import inspect import io -import os import numpy as np import pytest from packaging import version import cudf -from cudf.core._compat import PANDAS_CURRENT_SUPPORTED_VERSION, PANDAS_VERSION pytestmark = pytest.mark.filterwarnings("ignore::FutureWarning") _SKIP_DOCTESTS = frozenset( @@ -123,18 +121,7 @@ def printoptions(cls): _all_doctests, ids=lambda docstring: docstring.name, ) - @pytest.mark.skipif( - PANDAS_VERSION < PANDAS_CURRENT_SUPPORTED_VERSION, - reason="Doctests not expected to pass on older versions of pandas", - ) def test_docstring(self, docstring, monkeypatch, tmp_path): - if ( - docstring.name == "copy" - and os.environ.get("CUDF_TEST_COPY_ON_WRITE") == "1" - ): - pytest.skip( - "copy doctest not compatible with CUDF_TEST_COPY_ON_WRITE=1" - ) if docstring.name in _SKIP_DOCTESTS: pytest.skip(f"{docstring.name} doctest is not runnable") # We ignore differences in whitespace in the doctest output, and enable diff --git a/python/cudf/cudf/tests/test_flags.py b/python/cudf/cudf/tests/test_flags.py new file mode 100644 index 000000000000..8953bf1eabe3 --- /dev/null +++ b/python/cudf/cudf/tests/test_flags.py @@ -0,0 +1,621 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION. +# SPDX-License-Identifier: Apache-2.0 + +import operator + +import pandas as pd +import pytest + +import cudf +from cudf.testing import assert_eq +from cudf.testing._utils import assert_exceptions_equal + + +@pytest.fixture( + params=[(cudf.Series, pd.Series), (cudf.DataFrame, pd.DataFrame)] +) +def frame_or_series(request): + return request.param + + +def _make(cu_cls, pd_cls, data=None): + if data is None: + data = [1, 2, 3] + if cu_cls is cudf.Series: + return cu_cls(data), pd_cls(data) + return cu_cls({"a": data}), pd_cls({"a": data}) + + +def _assert_flags_eq(cu_obj, pd_obj): + assert ( + cu_obj.flags.allows_duplicate_labels + == pd_obj.flags.allows_duplicate_labels + ) + + +def test_flags_default_allows_duplicates(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + _assert_flags_eq(cu, pd_obj) + assert_eq(cu, pd_obj) + + +def test_flags_setter_attribute(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + cu.flags.allows_duplicate_labels = False + pd_obj.flags.allows_duplicate_labels = False + _assert_flags_eq(cu, pd_obj) + + +def test_flags_getitem_and_setitem(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + assert ( + cu.flags["allows_duplicate_labels"] + == pd_obj.flags["allows_duplicate_labels"] + ) + cu.flags["allows_duplicate_labels"] = False + pd_obj.flags["allows_duplicate_labels"] = False + _assert_flags_eq(cu, pd_obj) + + +def test_flags_unknown_key_raises_getitem(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + assert_exceptions_equal( + lfunc=pd_obj.flags.__getitem__, + rfunc=cu.flags.__getitem__, + lfunc_args_and_kwargs=(["nonexistent"],), + rfunc_args_and_kwargs=(["nonexistent"],), + ) + + +def test_flags_unknown_key_raises_setitem(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + assert_exceptions_equal( + lfunc=pd_obj.flags.__setitem__, + rfunc=cu.flags.__setitem__, + lfunc_args_and_kwargs=(["nonexistent", True],), + rfunc_args_and_kwargs=(["nonexistent", True],), + ) + + +def test_flags_repr(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + assert repr(cu.flags) == repr(pd_obj.flags) + cu.flags.allows_duplicate_labels = False + pd_obj.flags.allows_duplicate_labels = False + assert repr(cu.flags) == repr(pd_obj.flags) + + +def test_flags_equality(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu_a, pd_a = _make(cu_cls, pd_cls) + cu_b, pd_b = _make(cu_cls, pd_cls) + assert (cu_a.flags == cu_b.flags) == (pd_a.flags == pd_b.flags) + cu_b.flags.allows_duplicate_labels = False + pd_b.flags.allows_duplicate_labels = False + assert (cu_a.flags == cu_b.flags) == (pd_a.flags == pd_b.flags) + assert (cu_a.flags == object()) == (pd_a.flags == object()) + + +def test_flags_setter_casts_to_bool(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + cu.flags.allows_duplicate_labels = 0 + pd_obj.flags.allows_duplicate_labels = 0 + _assert_flags_eq(cu, pd_obj) + cu.flags.allows_duplicate_labels = 1 + pd_obj.flags.allows_duplicate_labels = 1 + _assert_flags_eq(cu, pd_obj) + + +def test_flags_rejects_duplicates_when_disabled(): + def _set_false(df): + df.flags.allows_duplicate_labels = False + + pdf = pd.DataFrame({"a": [1, 2, 3]}, index=[1, 1, 2]) + gdf = cudf.DataFrame({"a": [1, 2, 3]}, index=[1, 1, 2]) + assert_exceptions_equal( + lfunc=_set_false, + rfunc=_set_false, + lfunc_args_and_kwargs=([pdf],), + rfunc_args_and_kwargs=([gdf],), + ) + + +def test_flags_allows_non_unique_when_enabled(): + pdf = pd.DataFrame({"a": [1, 2]}, index=[1, 1]) + gdf = cudf.DataFrame({"a": [1, 2]}, index=[1, 1]) + pdf.flags.allows_duplicate_labels = True + gdf.flags.allows_duplicate_labels = True + _assert_flags_eq(gdf, pdf) + + +def test_flags_weakref_dead_obj_raises(): + # Pandas also raises ValueError once the referenced object is gone. + def _setter(cls): + obj = cls({"a": [1]}) if cls is cudf.DataFrame else cls([1]) + flags = obj.flags + del obj + flags.allows_duplicate_labels = False + + assert_exceptions_equal( + lfunc=_setter, + rfunc=_setter, + lfunc_args_and_kwargs=([pd.DataFrame],), + rfunc_args_and_kwargs=([cudf.DataFrame],), + ) + + +def test_set_flags_returns_new_object(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + cu_new = cu.set_flags(allows_duplicate_labels=False) + pd_new = pd_obj.set_flags(allows_duplicate_labels=False) + assert (cu_new is cu) == (pd_new is pd_obj) + _assert_flags_eq(cu, pd_obj) + _assert_flags_eq(cu_new, pd_new) + assert_eq(cu_new, pd_new) + + +def test_set_flags_no_change_when_none(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + cu.flags.allows_duplicate_labels = False + pd_obj.flags.allows_duplicate_labels = False + cu_new = cu.set_flags() + pd_new = pd_obj.set_flags() + _assert_flags_eq(cu_new, pd_new) + + +def test_set_flags_copy_true_makes_deep_copy(): + # Match pandas' observable behaviour: mutating the copy does not + # alter the original. ``copy=True`` is deprecated in pandas 3; we + # still accept it for API parity. + import warnings + + pdf = pd.DataFrame({"a": [1, 2, 3]}) + gdf = cudf.DataFrame({"a": [1, 2, 3]}) + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + p_new = pdf.set_flags(copy=True, allows_duplicate_labels=False) + g_new = gdf.set_flags(copy=True, allows_duplicate_labels=False) + p_new.loc[0, "a"] = 99 + g_new.loc[0, "a"] = 99 + assert_eq(pdf, gdf) + assert_eq(p_new, g_new) + + +def test_copy_preserves_flags(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + cu = cu.set_flags(allows_duplicate_labels=False) + pd_obj = pd_obj.set_flags(allows_duplicate_labels=False) + _assert_flags_eq(cu.copy(), pd_obj.copy()) + _assert_flags_eq(cu.copy(deep=False), pd_obj.copy(deep=False)) + + +@pytest.mark.parametrize("left_flag", [True, False]) +@pytest.mark.parametrize("right_flag", [True, False]) +def test_binop_flags_anded(frame_or_series, left_flag, right_flag): + cu_cls, pd_cls = frame_or_series + cu_l, pd_l = _make(cu_cls, pd_cls) + cu_r, pd_r = _make(cu_cls, pd_cls) + cu_l = cu_l.set_flags(allows_duplicate_labels=left_flag) + cu_r = cu_r.set_flags(allows_duplicate_labels=right_flag) + pd_l = pd_l.set_flags(allows_duplicate_labels=left_flag) + pd_r = pd_r.set_flags(allows_duplicate_labels=right_flag) + cu_out = cu_l + cu_r + pd_out = pd_l + pd_r + _assert_flags_eq(cu_out, pd_out) + assert_eq(cu_out, pd_out) + + +def test_binop_with_scalar_preserves_flags(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + cu = cu.set_flags(allows_duplicate_labels=False) + pd_obj = pd_obj.set_flags(allows_duplicate_labels=False) + _assert_flags_eq(cu + 1, pd_obj + 1) + _assert_flags_eq(1 + cu, 1 + pd_obj) + assert_eq(cu + 1, pd_obj + 1) + + +def test_binop_attrs_right_overrides_left(): + a_cu = cudf.Series([1]) + b_cu = cudf.Series([1]) + a_pd = pd.Series([1]) + b_pd = pd.Series([1]) + a_cu.attrs = a_pd.attrs = {"a": 1} + b_cu.attrs = b_pd.attrs = {"b": 2} + assert (a_cu + b_cu).attrs == (a_pd + b_pd).attrs + + +def test_binop_attrs_inherit_from_non_empty_side(): + a_cu, a_pd = cudf.Series([1]), pd.Series([1]) + b_cu, b_pd = cudf.Series([1]), pd.Series([1]) + b_cu.attrs = b_pd.attrs = {"x": 1} + assert (a_cu + b_cu).attrs == (a_pd + b_pd).attrs + + a_cu.attrs = a_pd.attrs = {"y": 2} + b_cu.attrs = b_pd.attrs = {} + assert (a_cu + b_cu).attrs == (a_pd + b_pd).attrs + + +@pytest.mark.parametrize("left_flag", [True, False]) +@pytest.mark.parametrize("right_flag", [True, False]) +@pytest.mark.parametrize("how", ["left", "right", "inner", "outer", "cross"]) +def test_merge_flags_anded(how, left_flag, right_flag): + gdf_l = cudf.DataFrame({"test": [1]}).set_flags( + allows_duplicate_labels=left_flag + ) + gdf_r = cudf.DataFrame({"test": [1]}).set_flags( + allows_duplicate_labels=right_flag + ) + pdf_l = pd.DataFrame({"test": [1]}).set_flags( + allows_duplicate_labels=left_flag + ) + pdf_r = pd.DataFrame({"test": [1]}).set_flags( + allows_duplicate_labels=right_flag + ) + if how == "cross": + cu_out = gdf_l.merge(gdf_r, how=how) + pd_out = pdf_l.merge(pdf_r, how=how) + else: + cu_out = gdf_l.merge(gdf_r, how=how, on="test") + pd_out = pdf_l.merge(pdf_r, how=how, on="test") + _assert_flags_eq(cu_out, pd_out) + assert_eq(cu_out, pd_out) + + +def test_merge_propagates_attrs_only_when_equal(): + pdf_l = pd.DataFrame({"test": [1]}) + pdf_r = pd.DataFrame({"test": [1]}) + pdf_l.attrs = pdf_r.attrs = {"a": [1, 2]} + gdf_l = cudf.DataFrame({"test": [1]}) + gdf_r = cudf.DataFrame({"test": [1]}) + gdf_l.attrs = gdf_r.attrs = {"a": [1, 2]} + assert ( + gdf_l.merge(gdf_r, how="inner", on="test").attrs + == pdf_l.merge(pdf_r, how="inner", on="test").attrs + ) + + +def test_merge_drops_attrs_when_inputs_differ(): + pdf_l = pd.DataFrame({"test": [1]}) + pdf_r = pd.DataFrame({"test": [1]}) + pdf_l.attrs = {"a": 1} + pdf_r.attrs = {"b": 2} + gdf_l = cudf.DataFrame({"test": [1]}) + gdf_r = cudf.DataFrame({"test": [1]}) + gdf_l.attrs = {"a": 1} + gdf_r.attrs = {"b": 2} + assert ( + gdf_l.merge(gdf_r, how="inner", on="test").attrs + == pdf_l.merge(pdf_r, how="inner", on="test").attrs + ) + + +def test_merge_drops_attrs_when_one_side_empty(): + pdf_l = pd.DataFrame({"test": [1]}) + pdf_r = pd.DataFrame({"test": [1]}) + pdf_l.attrs = {"a": 1} + gdf_l = cudf.DataFrame({"test": [1]}) + gdf_r = cudf.DataFrame({"test": [1]}) + gdf_l.attrs = {"a": 1} + assert ( + gdf_l.merge(gdf_r, how="inner", on="test").attrs + == pdf_l.merge(pdf_r, how="inner", on="test").attrs + ) + + +def test_from_pandas_preserves_flags(frame_or_series): + cu_cls, pd_cls = frame_or_series + if cu_cls is cudf.Series: + src = pd_cls([1, 2]).set_flags(allows_duplicate_labels=False) + else: + src = pd_cls({"a": [1, 2]}).set_flags(allows_duplicate_labels=False) + out = cudf.from_pandas(src) + _assert_flags_eq(out, src) + assert_eq(out, src) + + +def test_to_pandas_preserves_flags(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + cu = cu.set_flags(allows_duplicate_labels=False) + pd_obj = pd_obj.set_flags(allows_duplicate_labels=False) + assert ( + cu.to_pandas().flags.allows_duplicate_labels + == pd_obj.flags.allows_duplicate_labels + ) + assert_eq(cu.to_pandas(), pd_obj) + + +def test_roundtrip_through_pandas_preserves_flags(frame_or_series): + cu_cls, pd_cls = frame_or_series + cu, pd_obj = _make(cu_cls, pd_cls) + cu = cu.set_flags(allows_duplicate_labels=False) + pd_obj = pd_obj.set_flags(allows_duplicate_labels=False) + _assert_flags_eq(cudf.from_pandas(cu.to_pandas()), pd_obj) + + +def test_dataframe_constructor_preserves_flags_from_pandas(): + pdf = pd.DataFrame({"a": [1, 2]}).set_flags(allows_duplicate_labels=False) + gdf = cudf.DataFrame(pdf) + _assert_flags_eq(gdf, pdf) + assert_eq(gdf, pdf) + + +def test_series_constructor_preserves_flags_from_pandas(): + ps = pd.Series([1, 2]).set_flags(allows_duplicate_labels=False) + gs = cudf.Series(ps) + _assert_flags_eq(gs, ps) + assert_eq(gs, ps) + + +def test_dataframe_constructor_preserves_flags_from_cudf(): + # Intentional divergence from pandas: cudf preserves flags when + # constructing from another cudf/pandas frame so that the + # ``cudf.pandas`` slow->fast round-trip keeps the flag. Pandas' + # own constructor drops flags (tracked there by ``__finalize__`` on + # the specific operation, not on the constructor). + gdf = cudf.DataFrame({"a": [1, 2]}).set_flags( + allows_duplicate_labels=False + ) + assert cudf.DataFrame(gdf).flags.allows_duplicate_labels is False + + +def test_series_constructor_preserves_flags_from_cudf(): + # See note in ``test_dataframe_constructor_preserves_flags_from_cudf``. + gs = cudf.Series([1, 2]).set_flags(allows_duplicate_labels=False) + assert cudf.Series(gs).flags.allows_duplicate_labels is False + + +def test_from_data_accepts_allows_duplicate_labels(): + # cudf-private code path (no pandas equivalent); just verify the + # flag survives the constructor. + df = cudf.DataFrame._from_data( + cudf.DataFrame({"a": [1]})._data, + allows_duplicate_labels=False, + ) + assert df.flags.allows_duplicate_labels is False + + +def test_flags_class_is_exposed(): + # Used by users who want to type-hint or isinstance-check. + assert isinstance(cudf.DataFrame().flags, pd.Flags) + + +def test_binop_attrs_deepcopied(): + # Mutating the result's attrs must not bleed back into the source, + # matching pandas semantics. + a_cu, a_pd = cudf.Series([1]), pd.Series([1]) + b_cu, b_pd = cudf.Series([2]), pd.Series([2]) + b_cu.attrs = b_pd.attrs = {"nested": [1, 2]} + (a_cu + b_cu).attrs["nested"].append(3) + (a_pd + b_pd).attrs["nested"].append(3) + assert b_cu.attrs == b_pd.attrs + + +@pytest.mark.parametrize( + "op", + [ + operator.add, + operator.sub, + operator.mul, + operator.truediv, + operator.floordiv, + ], +) +def test_binop_flag_propagation_with_operators(op): + a_cu = cudf.Series([1, 2]).set_flags(allows_duplicate_labels=False) + b_cu = cudf.Series([3, 4]) + a_pd = pd.Series([1, 2]).set_flags(allows_duplicate_labels=False) + b_pd = pd.Series([3, 4]) + cu_out = op(a_cu, b_cu) + pd_out = op(a_pd, b_pd) + _assert_flags_eq(cu_out, pd_out) + assert_eq(cu_out, pd_out) + + +def test_series_rename_preserves_flags(): + ps = pd.Series([0, 1], index=["a", "b"]).set_flags( + allows_duplicate_labels=False + ) + gs = cudf.Series([0, 1], index=["a", "b"]).set_flags( + allows_duplicate_labels=False + ) + _assert_flags_eq(gs.rename("renamed"), ps.rename("renamed")) + assert_eq(gs.rename("renamed"), ps.rename("renamed")) + + +def test_series_to_frame_preserves_flags(): + ps = pd.Series([1, 2], name="a").set_flags(allows_duplicate_labels=False) + gs = cudf.Series([1, 2], name="a").set_flags(allows_duplicate_labels=False) + _assert_flags_eq(gs.to_frame(), ps.to_frame()) + assert_eq(gs.to_frame(), ps.to_frame()) + + +def test_dataframe_getitem_preserves_flags(): + pdf = pd.DataFrame({"A": [1, 2], "B": [3, 4]}).set_flags( + allows_duplicate_labels=False + ) + gdf = cudf.DataFrame({"A": [1, 2], "B": [3, 4]}).set_flags( + allows_duplicate_labels=False + ) + _assert_flags_eq(gdf[["A"]], pdf[["A"]]) + _assert_flags_eq(gdf["A"], pdf["A"]) + assert_eq(gdf[["A"]], pdf[["A"]]) + assert_eq(gdf["A"], pdf["A"]) + + +def test_dataframe_loc_preserves_flags(): + pdf = pd.DataFrame({"A": [1, 2], "B": [3, 4]}, index=["x", "y"]).set_flags( + allows_duplicate_labels=False + ) + gdf = cudf.DataFrame( + {"A": [1, 2], "B": [3, 4]}, index=["x", "y"] + ).set_flags(allows_duplicate_labels=False) + _assert_flags_eq(gdf.loc["x"], pdf.loc["x"]) + _assert_flags_eq(gdf.loc[["x"]], pdf.loc[["x"]]) + _assert_flags_eq(gdf.loc["x", ["A"]], pdf.loc["x", ["A"]]) + assert_eq(gdf.loc["x"], pdf.loc["x"]) + assert_eq(gdf.loc[["x"]], pdf.loc[["x"]]) + assert_eq(gdf.loc["x", ["A"]], pdf.loc["x", ["A"]]) + + +def test_dataframe_iloc_preserves_flags(): + pdf = pd.DataFrame({"A": [1, 2]}).set_flags(allows_duplicate_labels=False) + gdf = cudf.DataFrame({"A": [1, 2]}).set_flags( + allows_duplicate_labels=False + ) + _assert_flags_eq(gdf.iloc[[0]], pdf.iloc[[0]]) + assert_eq(gdf.iloc[[0]], pdf.iloc[[0]]) + + +def test_loc_raises_duplicate_label_error(): + pdf = pd.DataFrame({"A": [1, 2]}, index=["a", "b"]).set_flags( + allows_duplicate_labels=False + ) + gdf = cudf.DataFrame({"A": [1, 2]}, index=["a", "b"]).set_flags( + allows_duplicate_labels=False + ) + assert_exceptions_equal( + lfunc=pdf.loc.__getitem__, + rfunc=gdf.loc.__getitem__, + lfunc_args_and_kwargs=([["a", "a"]],), + rfunc_args_and_kwargs=([["a", "a"]],), + ) + + +def test_iloc_raises_duplicate_label_error(): + pdf = pd.DataFrame({"A": [1, 2]}).set_flags(allows_duplicate_labels=False) + gdf = cudf.DataFrame({"A": [1, 2]}).set_flags( + allows_duplicate_labels=False + ) + assert_exceptions_equal( + lfunc=pdf.iloc.__getitem__, + rfunc=gdf.iloc.__getitem__, + lfunc_args_and_kwargs=([[0, 0]],), + rfunc_args_and_kwargs=([[0, 0]],), + ) + + +@pytest.mark.parametrize("left_flag", [True, False]) +@pytest.mark.parametrize("right_flag", [True, False]) +def test_concat_flags_anded(frame_or_series, left_flag, right_flag): + cu_cls, pd_cls = frame_or_series + if cu_cls is cudf.Series: + cu_a = cudf.Series([1], index=["a"]).set_flags( + allows_duplicate_labels=left_flag + ) + cu_b = cudf.Series([2], index=["b"]).set_flags( + allows_duplicate_labels=right_flag + ) + pd_a = pd.Series([1], index=["a"]).set_flags( + allows_duplicate_labels=left_flag + ) + pd_b = pd.Series([2], index=["b"]).set_flags( + allows_duplicate_labels=right_flag + ) + else: + cu_a = cudf.DataFrame({"x": [1]}, index=["a"]).set_flags( + allows_duplicate_labels=left_flag + ) + cu_b = cudf.DataFrame({"x": [2]}, index=["b"]).set_flags( + allows_duplicate_labels=right_flag + ) + pd_a = pd.DataFrame({"x": [1]}, index=["a"]).set_flags( + allows_duplicate_labels=left_flag + ) + pd_b = pd.DataFrame({"x": [2]}, index=["b"]).set_flags( + allows_duplicate_labels=right_flag + ) + cu_out = cudf.concat([cu_a, cu_b]) + pd_out = pd.concat([pd_a, pd_b]) + _assert_flags_eq(cu_out, pd_out) + assert_eq(cu_out, pd_out) + + +def test_concat_raises_on_duplicate_labels(): + pd_objs = [ + pd.Series([1], index=["a"]).set_flags(allows_duplicate_labels=False), + pd.Series([2], index=["a"]).set_flags(allows_duplicate_labels=False), + ] + cu_objs = [ + cudf.Series([1], index=["a"]).set_flags(allows_duplicate_labels=False), + cudf.Series([2], index=["a"]).set_flags(allows_duplicate_labels=False), + ] + assert_exceptions_equal( + lfunc=pd.concat, + rfunc=cudf.concat, + lfunc_args_and_kwargs=([pd_objs],), + rfunc_args_and_kwargs=([cu_objs],), + ) + + +def test_concat_propagates_attrs_only_when_equal(): + pdf_a = pd.DataFrame({"x": [1]}) + pdf_b = pd.DataFrame({"x": [2]}) + gdf_a = cudf.DataFrame({"x": [1]}) + gdf_b = cudf.DataFrame({"x": [2]}) + pdf_a.attrs = pdf_b.attrs = {"k": 1} + gdf_a.attrs = gdf_b.attrs = {"k": 1} + assert cudf.concat([gdf_a, gdf_b]).attrs == pd.concat([pdf_a, pdf_b]).attrs + pdf_b.attrs = {"k": 2} + gdf_b.attrs = {"k": 2} + assert cudf.concat([gdf_a, gdf_b]).attrs == pd.concat([pdf_a, pdf_b]).attrs + + +def test_set_index_inplace_raises_when_flags_false(): + pdf = pd.DataFrame({"A": [0, 1], "B": [1, 2]}).set_flags( + allows_duplicate_labels=False + ) + gdf = cudf.DataFrame({"A": [0, 1], "B": [1, 2]}).set_flags( + allows_duplicate_labels=False + ) + assert_exceptions_equal( + lfunc=pdf.set_index, + rfunc=gdf.set_index, + lfunc_args_and_kwargs=(["A"], {"inplace": True}), + rfunc_args_and_kwargs=(["A"], {"inplace": True}), + ) + + +def test_reset_index_inplace_raises_when_flags_false(): + pdf = pd.DataFrame({"A": [0, 1]}, index=["a", "b"]).set_flags( + allows_duplicate_labels=False + ) + gdf = cudf.DataFrame({"A": [0, 1]}, index=["a", "b"]).set_flags( + allows_duplicate_labels=False + ) + assert_exceptions_equal( + lfunc=pdf.reset_index, + rfunc=gdf.reset_index, + lfunc_args_and_kwargs=([], {"inplace": True}), + rfunc_args_and_kwargs=([], {"inplace": True}), + ) + + +def test_set_index_inplace_ok_when_flags_true(): + pdf = pd.DataFrame({"A": [0, 1], "B": [1, 2]}) + gdf = cudf.DataFrame({"A": [0, 1], "B": [1, 2]}) + pdf.set_index("A", inplace=True) + gdf.set_index("A", inplace=True) + assert_eq(gdf, pdf) + + +def test_reset_index_preserves_flags(): + pdf = pd.DataFrame({"A": [0, 1]}, index=["a", "b"]).set_flags( + allows_duplicate_labels=False + ) + gdf = cudf.DataFrame({"A": [0, 1]}, index=["a", "b"]).set_flags( + allows_duplicate_labels=False + ) + _assert_flags_eq(gdf.reset_index(), pdf.reset_index()) + assert_eq(gdf.reset_index(), pdf.reset_index()) diff --git a/python/cudf/cudf/tests/test_spilling.py b/python/cudf/cudf/tests/test_spilling.py index a11723a757c9..0dde839bdd50 100644 --- a/python/cudf/cudf/tests/test_spilling.py +++ b/python/cudf/cudf/tests/test_spilling.py @@ -386,25 +386,6 @@ def test_spilling_df_views(manager): assert single_column_df_data(df).owner.spillable -# This behavior is not compatible with copy-on-write -@pytest.mark.no_copy_on_write -def test_modify_spilled_views(manager): - df = single_column_df() - df_view = df.iloc[1:] - buf = single_column_df_data(df) - buf.owner.spill(target="cpu") - - # modify the spilled df and check that the changes are reflected - # in the view - df.iloc[1:] = 0 - assert_eq(df_view, df.iloc[1:]) - - # now, modify the view and check that the changes are reflected in - # the df - df_view.iloc[:] = -1 - assert_eq(df_view, df.iloc[1:]) - - @pytest.mark.parametrize("target", ["gpu", "cpu"]) def test_get_ptr(manager: SpillManager, target): if target == "gpu": @@ -650,67 +631,66 @@ def test_spill_on_demand(manager: SpillManager): def test_spilling_and_copy_on_write(manager: SpillManager): - with cudf.option_context("copy_on_write", True): - a: SpillableBuffer = as_buffer(data=rmm.DeviceBuffer(size=10)) - - b = a.copy(deep=False) - assert a.owner == b.owner - a.owner.spill(target="cpu") - assert a.owner.is_spilled - assert b.owner.is_spilled - - # Write access trigger copy of `a` into `b` but since `a` is spilled - # the copy is done in host memory and `a` remains spilled. - with b.access(mode="write"): - b.ptr - assert a.owner.is_spilled - assert not b.owner.is_spilled - - # Deep copy of the spilled buffer `a` - b = a.copy(deep=True) - assert a.owner != b.owner - assert a.owner.is_spilled - assert b.owner.is_spilled - a.owner.spill(target="gpu") - assert not a.owner.is_spilled - assert b.owner.is_spilled - - # Deep copy of the unspilled buffer `a` - b = a.copy(deep=True) - assert a.owner.spillable - assert not a.owner.is_spilled - assert not b.owner.is_spilled - - b = a.copy(deep=False) - assert a.owner == b.owner - # Write access trigger copy of `a` into `b` in device memory - with b.access(mode="write"): - b.ptr - assert a.owner != b.owner - assert not a.owner.is_spilled - assert not b.owner.is_spilled - # And `a` and `b` is now separated with there one spilling status - a.owner.spill(target="cpu") - assert a.owner.is_spilled - assert not b.owner.is_spilled - b.owner.spill(target="cpu") - assert a.owner.is_spilled - assert b.owner.is_spilled - - # Read access with a spill lock unspill `a` and allows copy-on-write - with a.access(mode="read", scope="internal"): - a.ptr - b = a.copy(deep=False) - assert a.owner == b.owner - assert not a.owner.is_spilled - - # Read access without a spill lock exposes `a` and forces a deep copy + a: SpillableBuffer = as_buffer(data=rmm.DeviceBuffer(size=10)) + + b = a.copy(deep=False) + assert a.owner == b.owner + a.owner.spill(target="cpu") + assert a.owner.is_spilled + assert b.owner.is_spilled + + # Write access trigger copy of `a` into `b` but since `a` is spilled + # the copy is done in host memory and `a` remains spilled. + with b.access(mode="write"): + b.ptr + assert a.owner.is_spilled + assert not b.owner.is_spilled + + # Deep copy of the spilled buffer `a` + b = a.copy(deep=True) + assert a.owner != b.owner + assert a.owner.is_spilled + assert b.owner.is_spilled + a.owner.spill(target="gpu") + assert not a.owner.is_spilled + assert b.owner.is_spilled + + # Deep copy of the unspilled buffer `a` + b = a.copy(deep=True) + assert a.owner.spillable + assert not a.owner.is_spilled + assert not b.owner.is_spilled + + b = a.copy(deep=False) + assert a.owner == b.owner + # Write access trigger copy of `a` into `b` in device memory + with b.access(mode="write"): + b.ptr + assert a.owner != b.owner + assert not a.owner.is_spilled + assert not b.owner.is_spilled + # And `a` and `b` is now separated with there one spilling status + a.owner.spill(target="cpu") + assert a.owner.is_spilled + assert not b.owner.is_spilled + b.owner.spill(target="cpu") + assert a.owner.is_spilled + assert b.owner.is_spilled + + # Read access with a spill lock unspill `a` and allows copy-on-write + with a.access(mode="read", scope="internal"): a.ptr - b = a.copy(deep=False) - assert a.owner != b.owner - assert not a.owner.is_spilled - assert a.owner.exposed - assert not b.owner.exposed + b = a.copy(deep=False) + assert a.owner == b.owner + assert not a.owner.is_spilled + + # Read access without a spill lock exposes `a` and forces a deep copy + a.ptr + b = a.copy(deep=False) + assert a.owner != b.owner + assert not a.owner.is_spilled + assert a.owner.exposed + assert not b.owner.exposed def test_scatter_by_map(): diff --git a/python/cudf/cudf/tests/testing/test_assert_series_equal.py b/python/cudf/cudf/tests/testing/test_assert_series_equal.py index 985879ab4ff3..f3004df51058 100644 --- a/python/cudf/cudf/tests/testing/test_assert_series_equal.py +++ b/python/cudf/cudf/tests/testing/test_assert_series_equal.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import pandas as pd @@ -39,16 +39,16 @@ def test_datetime_like_compaibility(rdata, check_datetimelike_compat): sr1 = cudf.from_pandas(psr1) sr2 = cudf.from_pandas(psr2) - - assert_asserters_equal( - pd.testing.assert_series_equal, - assert_series_equal, - psr1, - psr2, - sr1, - sr2, - check_datetimelike_compat=check_datetimelike_compat, - ) + with pytest.warns(pd.errors.Pandas4Warning): + assert_asserters_equal( + pd.testing.assert_series_equal, + assert_series_equal, + psr1, + psr2, + sr1, + sr2, + check_datetimelike_compat=check_datetimelike_compat, + ) @pytest.mark.parametrize("rdata", [[1, 2, 5], [1, 2, 6], [1, 2, 5, 6]]) diff --git a/python/cudf/cudf/tests/text/test_text_methods.py b/python/cudf/cudf/tests/text/test_text_methods.py index 04f8d3b6d0c7..15d589b1fc2b 100644 --- a/python/cudf/cudf/tests/text/test_text_methods.py +++ b/python/cudf/cudf/tests/text/test_text_methods.py @@ -529,7 +529,7 @@ def test_character_tokenize_series(): assert_eq(expected, actual) sr = cudf.Series([""]) - expected = cudf.Series([], dtype="object") + expected = cudf.Series([], dtype="str") actual = sr.str.character_tokenize() assert_eq(expected, actual) @@ -645,7 +645,7 @@ def test_character_tokenize_index(): assert_eq(expected, actual) sr = cudf.Index([""]) - expected = cudf.Index([], dtype="object") + expected = cudf.Index([], dtype="str") actual = sr.str.character_tokenize() assert_eq(expected, actual) diff --git a/python/cudf/cudf/tests/window/test_ewm.py b/python/cudf/cudf/tests/window/test_ewm.py index ecb6592a1ea7..c11f3a08e1d7 100644 --- a/python/cudf/cudf/tests/window/test_ewm.py +++ b/python/cudf/cudf/tests/window/test_ewm.py @@ -1,5 +1,7 @@ # SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 +import math + import pytest import cudf @@ -29,7 +31,7 @@ ], ) @pytest.mark.parametrize("adjust", [True, False]) -def test_ewma(data, params, adjust): +def test_ewma(request, data, params, adjust): """ The most basic test asserts that we obtain the same numerical values as pandas for various @@ -39,6 +41,24 @@ def test_ewma(data, params, adjust): gsr = cudf.Series(data, dtype="float64") psr = gsr.to_pandas() + # pandas 3 produces an incorrect EWM result when adjust=False and + # com=1.0 (alpha=0.5) and the data contains nulls. For every other + # alpha value the cudf formula matches pandas exactly; the discrepancy + # is specific to the alpha==1-alpha symmetry point. + com = cudf.core.window.ewm.get_center_of_mass( + comass=params.get("com"), + span=params.get("span"), + halflife=params.get("halflife"), + alpha=params.get("alpha"), + ) + if not adjust and math.isclose(com, 1.0) and psr.isna().any(): + request.applymarker( + pytest.mark.xfail( + reason="pandas 3 bug: " + "https://github.com/pandas-dev/pandas/issues/58538" + ) + ) + expect = psr.ewm(**params, adjust=adjust).mean() got = gsr.ewm(**params, adjust=adjust).mean() diff --git a/python/cudf/cudf/tests/window/test_rolling.py b/python/cudf/cudf/tests/window/test_rolling.py index b70f089d9440..fd222fa969d7 100644 --- a/python/cudf/cudf/tests/window/test_rolling.py +++ b/python/cudf/cudf/tests/window/test_rolling.py @@ -67,12 +67,12 @@ def test_rolling_series_basic( expect = getattr( psr.rolling(window_size, min_periods, center), supported_rolling_reductions, - )().fillna(-1) + )() got = getattr( gsr.rolling(window_size, min_periods, center), supported_rolling_reductions, - )().fillna(-1) - assert_eq(expect, got, check_dtype=False, check_freq=False) + )() + assert_eq(expect, got, check_freq=False) @pytest.mark.parametrize( @@ -113,12 +113,12 @@ def test_rolling_dataframe_basic( expect = getattr( pdf.rolling(window_size, min_periods, center), supported_rolling_reductions, - )().fillna(-1) + )() got = getattr( gdf.rolling(window_size, min_periods, center), supported_rolling_reductions, - )().fillna(-1) - assert_eq(expect, got, check_dtype=False) + )() + assert_eq(expect, got) def test_rolling_with_offset(supported_rolling_reductions): @@ -135,9 +135,8 @@ def test_rolling_with_offset(supported_rolling_reductions): ) gsr = cudf.from_pandas(psr) assert_eq( - getattr(psr.rolling("2s"), supported_rolling_reductions)().fillna(-1), - getattr(gsr.rolling("2s"), supported_rolling_reductions)().fillna(-1), - check_dtype=False, + getattr(psr.rolling("2s"), supported_rolling_reductions)(), + getattr(gsr.rolling("2s"), supported_rolling_reductions)(), ) @@ -236,7 +235,7 @@ def test_rolling_count_with_offset(): ) gsr = cudf.from_pandas(psr) assert_eq( - getattr(gsr.rolling("2s"), "count")().fillna(-1), + getattr(gsr.rolling("2s"), "count")(), pd.Series( [1, 2, 2, 1, 0, 1], index=[ @@ -257,9 +256,8 @@ def test_rolling_getattr(): gdf = cudf.from_pandas(pdf) assert_eq( - pdf.rolling(2).a.sum().fillna(-1), - gdf.rolling(2).a.sum().fillna(-1), - check_dtype=False, + pdf.rolling(2).a.sum(), + gdf.rolling(2).a.sum(), ) @@ -268,19 +266,16 @@ def test_rolling_getitem(): gdf = cudf.from_pandas(pdf) assert_eq( - pdf.rolling(2)["a"].sum().fillna(-1), - gdf.rolling(2)["a"].sum().fillna(-1), - check_dtype=False, + pdf.rolling(2)["a"].sum(), + gdf.rolling(2)["a"].sum(), ) assert_eq( - pdf.rolling(2)["a", "b"].sum().fillna(-1), - gdf.rolling(2)["a", "b"].sum().fillna(-1), - check_dtype=False, + pdf.rolling(2)["a", "b"].sum(), + gdf.rolling(2)["a", "b"].sum(), ) assert_eq( - pdf.rolling(2)[["a", "b"]].sum().fillna(-1), - gdf.rolling(2)["a", "b"].sum().fillna(-1), - check_dtype=False, + pdf.rolling(2)[["a", "b"]].sum(), + gdf.rolling(2)[["a", "b"]].sum(), ) @@ -314,13 +309,8 @@ def some_func(A): for window_size in range(1, len(data) + 1): for min_periods in range(1, window_size + 1): assert_eq( - psr.rolling(window_size, min_periods, center) - .apply(some_func) - .fillna(-1), - gsr.rolling(window_size, min_periods, center) - .apply(some_func) - .fillna(-1), - check_dtype=False, + psr.rolling(window_size, min_periods, center).apply(some_func), + gsr.rolling(window_size, min_periods, center).apply(some_func), ) @@ -349,13 +339,8 @@ def some_func(A): for window_size in range(1, len(data) + 1): for min_periods in range(1, window_size + 1): assert_eq( - pdf.rolling(window_size, min_periods, center) - .apply(some_func) - .fillna(-1), - gdf.rolling(window_size, min_periods, center) - .apply(some_func) - .fillna(-1), - check_dtype=False, + pdf.rolling(window_size, min_periods, center).apply(some_func), + gdf.rolling(window_size, min_periods, center).apply(some_func), ) @@ -380,9 +365,8 @@ def some_func(A): return b / len(A) assert_eq( - psr.rolling("2s").apply(some_func).fillna(-1), - gsr.rolling("2s").apply(some_func).fillna(-1), - check_dtype=False, + psr.rolling("2s").apply(some_func), + gsr.rolling("2s").apply(some_func), ) @@ -398,11 +382,11 @@ def test_rolling_groupby_simple(supported_rolling_reductions): for window_size in range(1, len(pdf) + 1): expect = getattr( pdf.groupby("a").rolling(window_size), supported_rolling_reductions - )().fillna(-1) + )() got = getattr( gdf.groupby("a").rolling(window_size), supported_rolling_reductions - )().fillna(-1) - assert_eq(expect, got, check_dtype=False) + )() + assert_eq(expect, got) pdf = pd.DataFrame( {"a": [1, 1, 1, 2, 2], "b": [1, 1, 2, 2, 3], "c": [1, 2, 3, 4, 5]} @@ -412,11 +396,11 @@ def test_rolling_groupby_simple(supported_rolling_reductions): for window_size in range(1, len(pdf) + 1): expect = getattr( pdf.groupby("a").rolling(window_size), supported_rolling_reductions - )().fillna(-1) + )() got = getattr( gdf.groupby("a").rolling(window_size), supported_rolling_reductions - )().fillna(-1) - assert_eq(expect, got, check_dtype=False) + )() + assert_eq(expect, got) def test_rolling_groupby_multi(supported_rolling_reductions): @@ -433,12 +417,12 @@ def test_rolling_groupby_multi(supported_rolling_reductions): expect = getattr( pdf.groupby(["a", "b"], sort=True).rolling(window_size), supported_rolling_reductions, - )().fillna(-1) + )() got = getattr( gdf.groupby(["a", "b"], sort=True).rolling(window_size), supported_rolling_reductions, - )().fillna(-1) - assert_eq(expect, got, check_dtype=False) + )() + assert_eq(expect, got) @pytest.mark.parametrize("window_size", ["1D", "3D", "6D", "7D"]) @@ -453,11 +437,11 @@ def test_rolling_groupby_offset(supported_rolling_reductions, window_size): gdf = cudf.from_pandas(pdf) expect = getattr( pdf.groupby("group").rolling(window_size), supported_rolling_reductions - )().fillna(-1) + )() got = getattr( gdf.groupby("group").rolling(window_size), supported_rolling_reductions - )().fillna(-1) - assert_eq(expect, got, check_dtype=False) + )() + assert_eq(expect, got) def test_rolling_custom_index_support(): @@ -487,7 +471,7 @@ def get_window_bounds( expected = df.rolling(window=indexer).sum() actual = gdf.rolling(window=indexer).sum() - assert_eq(expected, actual, check_dtype=False) + assert_eq(expected, actual) @pytest.mark.parametrize( @@ -519,6 +503,23 @@ def test_rolling_series(): assert_eq(expected, actual) +@pytest.mark.parametrize("key", ["a", ["a"], ["a", "b"]]) +def test_rolling_groupby_getitem_preserves_grouping(key): + # Subsetting a RollingGroupby with [] used to drop the grouping context + # and return a plain Rolling, losing the per-group MultiIndex. + pdf = pd.DataFrame( + { + "g": [1, 1, 1, 2, 2, 2], + "a": [1, 2, 3, 4, 5, 6], + "b": [10, 20, 30, 40, 50, 60], + } + ) + gdf = cudf.from_pandas(pdf) + expect = pdf.groupby("g").rolling(2)[key].sum() + got = gdf.groupby("g").rolling(2)[key].sum() + assert_eq(expect, got) + + @pytest.mark.parametrize("klass", ["DataFrame", "Series"]) def test_pandas_compat_int_nan_min_periods(klass): data = [None, 1, 2, None, 4, 6, 11] diff --git a/python/cudf/cudf/utils/docutils.py b/python/cudf/cudf/utils/docutils.py index 6492899ce348..94093b79dd09 100644 --- a/python/cudf/cudf/utils/docutils.py +++ b/python/cudf/cudf/utils/docutils.py @@ -201,13 +201,13 @@ def wrapper(func): 4 c 5 a dtype: category - Categories (3, object): ['a', 'b', 'c'] + Categories (3, str): ['a', 'b', 'c'] >>> s.describe() count 6 unique 3 top a freq 3 - dtype: object + dtype: str Describing a timestamp ``Series``. @@ -229,7 +229,7 @@ def wrapper(func): 50% 2010-01-01 00:00:00 75% 2010-01-01 00:00:00 max 2010-01-01 00:00:00 - dtype: object + dtype: str Describing a ``DataFrame``. By default only numeric fields are returned. @@ -237,10 +237,10 @@ def wrapper(func): >>> df = cudf.DataFrame({"categorical": cudf.Series(['d', 'e', 'f'], ... dtype='category'), ... "numeric": [1, 2, 3], - ... "object": ['a', 'b', 'c'] + ... "string": ['a', 'b', 'c'] ... }) >>> df - categorical numeric object + categorical numeric string 0 d 1 a 1 e 2 b 2 f 3 c @@ -258,18 +258,18 @@ def wrapper(func): Describing all columns of a ``DataFrame`` regardless of data type. >>> df.describe(include='all') - categorical numeric object + categorical numeric string count 3 3.0 3 - unique 3 3 - top d a - freq 1 1 - mean None 2.0 None - std None 1.0 None - min None 1.0 None - 25% None 1.5 None - 50% None 2.0 None - 75% None 2.5 None - max None 3.0 None + unique 3 NaN 3 + top d NaN a + freq 1 NaN 1 + mean NaN 2.0 NaN + std NaN 1.0 NaN + min NaN 1.0 NaN + 25% NaN 1.5 NaN + 50% NaN 2.0 NaN + 75% NaN 2.5 NaN + max NaN 3.0 NaN Describing a column from a ``DataFrame`` by accessing it as an attribute. @@ -300,8 +300,8 @@ def wrapper(func): Including only string columns in a ``DataFrame`` description. - >>> df.describe(include=[object]) - object + >>> df.describe(include=[str]) + string count 3 unique 3 top a @@ -319,7 +319,7 @@ def wrapper(func): Excluding numeric columns from a ``DataFrame`` description. >>> df.describe(exclude=[np.number]) - categorical object + categorical string count 3 3 unique 3 3 top d a @@ -327,18 +327,18 @@ def wrapper(func): Excluding object columns from a ``DataFrame`` description. - >>> df.describe(exclude=[object]) + >>> df.describe(exclude=[str]) categorical numeric count 3 3.0 - unique 3 - top d - freq 1 - mean None 2.0 - std None 1.0 - min None 1.0 - 25% None 1.5 - 50% None 2.0 - 75% None 2.5 - max None 3.0 + unique 3 NaN + top d NaN + freq 1 NaN + mean NaN 2.0 + std NaN 1.0 + min NaN 1.0 + 25% NaN 1.5 + 50% NaN 2.0 + 75% NaN 2.5 + max NaN 3.0 """ ) diff --git a/python/cudf/cudf/utils/dtypes.py b/python/cudf/cudf/utils/dtypes.py index 1020a8d56f39..44ff11d553e3 100644 --- a/python/cudf/cudf/utils/dtypes.py +++ b/python/cudf/cudf/utils/dtypes.py @@ -21,6 +21,7 @@ from cudf._typing import DtypeObj from cudf.core.dtypes import DecimalDtype +DEFAULT_STRING_DTYPE = pd.StringDtype(na_value=np.nan) np_dtypes_to_pandas_dtypes: dict[ np.dtype[Any], pd.core.dtypes.base.ExtensionDtype ] = { @@ -33,8 +34,8 @@ np.dtype("int32"): pd.Int32Dtype(), np.dtype("int64"): pd.Int64Dtype(), np.dtype("bool_"): pd.BooleanDtype(), - np.dtype("object"): pd.StringDtype(), - np.dtype("str"): pd.StringDtype(), + np.dtype("object"): DEFAULT_STRING_DTYPE, + np.dtype("str"): DEFAULT_STRING_DTYPE, np.dtype("float32"): pd.Float32Dtype(), np.dtype("float64"): pd.Float64Dtype(), } @@ -77,7 +78,7 @@ "timedelta64[ns]", } OTHER_TYPES = {"bool", "category", "str"} -STRING_TYPES = {"object"} +STRING_TYPES = {"object", "str", "string"} BOOL_TYPES = {"bool"} ALL_TYPES = NUMERIC_TYPES | DATETIME_TYPES | TIMEDELTA_TYPES | OTHER_TYPES @@ -109,6 +110,8 @@ def cudf_dtype_to_pa_type(dtype: DtypeObj) -> pa.DataType: """Given a cudf pandas dtype, converts it into the equivalent cuDF Python dtype. """ + from cudf.core.dtype.validators import is_dtype_obj_string + dtype = getattr(dtype, "numpy_dtype", dtype) if isinstance(dtype, cudf.CategoricalDtype): raise NotImplementedError( @@ -121,7 +124,7 @@ def cudf_dtype_to_pa_type(dtype: DtypeObj) -> pa.DataType: return dtype.to_arrow() elif isinstance(dtype, pd.DatetimeTZDtype): return pa.timestamp(dtype.unit, str(dtype.tz)) - elif dtype == CUDF_STRING_DTYPE or isinstance(dtype, pd.StringDtype): + elif is_dtype_obj_string(dtype): return pa.string() else: return pa.from_numpy_dtype(dtype) @@ -143,8 +146,12 @@ def cudf_dtype_from_pa_type(typ: pa.DataType) -> DtypeObj: return cudf.Decimal128Dtype.from_arrow(typ) elif pa.types.is_timestamp(typ) and typ.tz is not None: return get_compatible_timezone(pd.DatetimeTZDtype(typ.unit, typ.tz)) - elif pa.types.is_large_string(typ) or pa.types.is_string(typ): - return CUDF_STRING_DTYPE + elif ( + pa.types.is_large_string(typ) + or pa.types.is_string(typ) + or pa.types.is_string_view(typ) + ): + return DEFAULT_STRING_DTYPE elif pa.types.is_date(typ): # typ.to_pandas_dtype() produces np.dtype("datetime64[ms]"). # Conversely pylibcudf will produce TIMESTAMP_DAYS for date types - the most @@ -155,7 +162,7 @@ def cudf_dtype_from_pa_type(typ: pa.DataType) -> DtypeObj: return np.dtype("datetime64[s]") elif pa.types.is_null(typ): # Similar to PYLIBCUDF_TO_SUPPORTED_NUMPY_TYPES[plc.types.TypeId.EMPTY] - return np.dtype(np.int8) + return np.dtype("object") elif isinstance(typ, ArrowIntervalType): return cudf.IntervalDtype.from_arrow(typ) else: @@ -253,11 +260,6 @@ def is_mixed_with_object_dtype(lhs, rhs): elif isinstance(rhs.dtype, cudf.CategoricalDtype): return is_mixed_with_object_dtype(lhs, rhs.dtype.categories) - res = (lhs.dtype == "object" and rhs.dtype != "object") or ( - rhs.dtype == "object" and lhs.dtype != "object" - ) - if res: - return res return ( cudf.api.types.is_string_dtype(lhs.dtype) and not cudf.api.types.is_string_dtype(rhs.dtype) @@ -289,7 +291,7 @@ def _get_nan_for_dtype(dtype: DtypeObj) -> np.generic: return np.float64("nan") -def find_common_type(dtypes: Iterable[DtypeObj]) -> DtypeObj | None: +def find_common_type(dtypes: Iterable[DtypeObj]) -> DtypeObj: """ Wrapper over np.result_type to handle cudf specific types. @@ -300,12 +302,18 @@ def find_common_type(dtypes: Iterable[DtypeObj]) -> DtypeObj | None: Returns ------- - dtype : np.dtype or None - None if input is empty - DtypeObj otherwise + dtype : DtypeObj + + Raises + ------ + ValueError + If ``dtypes`` is empty (matches ``pandas.core.dtypes.cast.find_common_type``). """ if len(dtypes) == 0: # type: ignore[arg-type] - return None + # Match pandas.core.dtypes.cast.find_common_type, which raises. + raise ValueError("no types given") + + pandas_compatible = cudf.get_option("mode.pandas_compatible") # Early exit for categoricals since they're not hashable and therefore # can't be put in a set. @@ -360,7 +368,7 @@ def find_common_type(dtypes: Iterable[DtypeObj]) -> DtypeObj | None: ] ) else: - return CUDF_STRING_DTYPE + return DEFAULT_STRING_DTYPE elif any( isinstance( dtype, (cudf.ListDtype, cudf.StructDtype, cudf.IntervalDtype) @@ -377,6 +385,25 @@ def find_common_type(dtypes: Iterable[DtypeObj]) -> DtypeObj | None: "not supported" ) + if pandas_compatible: + # cudf follows NumPy promotion: bool+int->int, bool+float->float, + # datetime64+timedelta64->datetime64. Pandas returns `object` for + # these mixes. Raise so that, when used as the cudf.pandas fast path + # for `pandas.core.dtypes.cast.find_common_type`, we fall back to + # pandas' implementation rather than silently producing a different + # answer. + kinds = {dtype.kind for dtype in dtypes if isinstance(dtype, np.dtype)} + if "b" in kinds and kinds & set("iuf"): + raise NotImplementedError( + "Common type of bool with numeric dtypes is not supported " + "in pandas-compatible mode." + ) + if "M" in kinds and "m" in kinds: + raise NotImplementedError( + "Common type of datetime64 with timedelta64 is not supported " + "in pandas-compatible mode." + ) + try: common_dtype = np.result_type(*dtypes) # noqa: TID251 except TypeError: @@ -481,7 +508,7 @@ def dtype_to_pylibcudf_type(dtype: DtypeObj) -> plc.DataType: elif isinstance(dtype, pd.DatetimeTZDtype): dtype = _get_base_dtype(dtype) elif isinstance(dtype, pd.StringDtype): - dtype = CUDF_STRING_DTYPE + dtype = np.dtype("object") elif is_pandas_nullable_numpy_dtype(dtype): dtype = dtype.numpy_dtype # type: ignore[union-attr] return plc.DataType(SUPPORTED_NUMPY_TO_PYLIBCUDF_TYPES[dtype]) @@ -495,6 +522,8 @@ def dtype_to_pandas_arrowdtype(dtype: DtypeObj) -> pd.ArrowDtype: (cudf.ListDtype, cudf.StructDtype, cudf.core.dtypes.DecimalDtype), ): return pd.ArrowDtype(dtype.to_arrow()) + elif isinstance(dtype, pd.StringDtype): + return pd.ArrowDtype(pa.large_string()) # libcudf types don't support timezones so convert to the base type elif isinstance(dtype, pd.DatetimeTZDtype): return pd.ArrowDtype(pa.timestamp(dtype.unit, str(dtype.tz))) @@ -523,8 +552,26 @@ def get_dtype_of_same_kind(source_dtype: DtypeObj, target_dtype: DtypeObj): If no such dtype exists, return the default dtype. """ if isinstance(source_dtype, pd.ArrowDtype): + # Preserve the source Arrow string variant (string vs large_string) + # when the target is a string-like dtype. + if pa.types.is_string( + source_dtype.pyarrow_dtype + ) or pa.types.is_large_string(source_dtype.pyarrow_dtype): + if isinstance(target_dtype, pd.StringDtype) or ( + isinstance(target_dtype, pd.ArrowDtype) + and ( + pa.types.is_string(target_dtype.pyarrow_dtype) + or pa.types.is_large_string(target_dtype.pyarrow_dtype) + ) + ): + return source_dtype return dtype_to_pandas_arrowdtype(target_dtype) elif is_pandas_nullable_extension_dtype(source_dtype): + # Preserve StringDtype storage/na_value when target is also a StringDtype. + if isinstance(source_dtype, pd.StringDtype) and isinstance( + target_dtype, pd.StringDtype + ): + return source_dtype if ( isinstance(source_dtype, pd.StringDtype) and source_dtype.na_value is np.nan @@ -534,11 +581,6 @@ def get_dtype_of_same_kind(source_dtype: DtypeObj, target_dtype: DtypeObj): isinstance(source_dtype, pd.StringDtype) and source_dtype.storage == "pyarrow" ): - if ( - isinstance(target_dtype, pd.StringDtype) - and source_dtype == target_dtype - ): - return source_dtype return dtype_to_pandas_arrowdtype(target_dtype) return dtype_to_pandas_nullable_extension_type(target_dtype) else: @@ -584,10 +626,19 @@ def dtype_from_pylibcudf_column(col: plc.Column) -> DtypeObj: return cudf.Decimal128Dtype( precision=cudf.Decimal128Dtype.MAX_PRECISION, scale=-type_.scale() ) + elif tid == plc.TypeId.STRING: + return DEFAULT_STRING_DTYPE else: return PYLIBCUDF_TO_SUPPORTED_NUMPY_TYPES[tid] +def is_arrow_null_dtype(dtype: DtypeObj) -> bool: + """Check if dtype is a pandas ArrowDtype wrapping pa.null().""" + return isinstance(dtype, pd.ArrowDtype) and pa.types.is_null( + dtype.pyarrow_dtype + ) + + SUPPORTED_NUMPY_TO_PYLIBCUDF_TYPES: dict[np.dtype[Any], plc.types.TypeId] = { np.dtype("int8"): plc.types.TypeId.INT8, np.dtype("int16"): plc.types.TypeId.INT16, @@ -616,9 +667,9 @@ def dtype_from_pylibcudf_column(col: plc.Column) -> DtypeObj: for np_type, plc_type in SUPPORTED_NUMPY_TO_PYLIBCUDF_TYPES.items() } # There's no equivalent to EMPTY in cudf. We translate EMPTY -# columns from libcudf to ``int8`` columns of all nulls in Python. -# ``int8`` is chosen because it uses the least amount of memory. -PYLIBCUDF_TO_SUPPORTED_NUMPY_TYPES[plc.types.TypeId.EMPTY] = np.dtype("int8") +# columns from libcudf to ``object`` columns of all nulls in Python. +# ``object`` is chosen to match pandas behavior. +PYLIBCUDF_TO_SUPPORTED_NUMPY_TYPES[plc.types.TypeId.EMPTY] = np.dtype("object") # TIMESTAMP_DAYS is converted to TIMESTAMP_SECONDS to match the default resolution # choice used by pandas for datetime.date objects. PYLIBCUDF_TO_SUPPORTED_NUMPY_TYPES[plc.types.TypeId.TIMESTAMP_DAYS] = np.dtype( @@ -633,4 +684,3 @@ def dtype_from_pylibcudf_column(col: plc.Column) -> DtypeObj: ) SIZE_TYPE_DTYPE = PYLIBCUDF_TO_SUPPORTED_NUMPY_TYPES[plc.types.SIZE_TYPE_ID] -CUDF_STRING_DTYPE = PYLIBCUDF_TO_SUPPORTED_NUMPY_TYPES[plc.types.TypeId.STRING] diff --git a/python/cudf/cudf/utils/ioutils.py b/python/cudf/cudf/utils/ioutils.py index d63f7f96593f..3b39451e10e8 100644 --- a/python/cudf/cudf/utils/ioutils.py +++ b/python/cudf/cudf/utils/ioutils.py @@ -8,7 +8,6 @@ import operator import os import urllib -import warnings from io import BufferedWriter, BytesIO, IOBase, TextIOWrapper from threading import Thread from typing import TYPE_CHECKING, Any @@ -20,7 +19,6 @@ import cudf from cudf.api.types import is_list_like -from cudf.core._compat import PANDAS_LT_300 from cudf.utils.docutils import docfmt_partial from cudf.utils.dtypes import cudf_dtype_to_pa_type, np_dtypes_to_pandas_dtypes @@ -819,31 +817,24 @@ ... json_str = df.to_json(orient='records', lines=True) >>> json_str '{"a":"hello","b":"hello"}\n{"a":"rapids","b":"worlds"}\n' ->>> cudf.read_json(json_str, engine="cudf", lines=True) +>>> from io import StringIO +>>> cudf.read_json(StringIO(json_str), engine="cudf", lines=True) a b 0 hello hello 1 rapids worlds To read the strings with additional set of quotes: ->>> cudf.read_json(json_str, engine="cudf", lines=True, +>>> cudf.read_json(StringIO(json_str), engine="cudf", lines=True, ... keep_quotes=True) a b 0 "hello" "hello" 1 "rapids" "worlds" -Reading a JSON string containing ordered lists and name/value pairs: - ->>> json_str = '[{"list": [0,1,2], "struct": {"k":"v1"}}, {"list": [3,4,5], "struct": {"k":"v2"}}]' ->>> cudf.read_json(json_str, engine='cudf') - list struct -0 [0, 1, 2] {'k': 'v1'} -1 [3, 4, 5] {'k': 'v2'} - Reading JSON Lines data containing ordered lists and name/value pairs: >>> json_str = '{"a": [{"k1": "v1"}]}\n{"a": [{"k1":"v2"}]}' ->>> cudf.read_json(json_str, engine='cudf', lines=True) +>>> cudf.read_json(StringIO(json_str), engine='cudf', lines=True) a 0 [{'k1': 'v1'}] 1 [{'k1': 'v2'}] @@ -851,7 +842,7 @@ Using the `dtype` argument to specify type casting: >>> json_str = '{"k1": 1, "k2":[1.5]}' ->>> cudf.read_json(json_str, engine='cudf', lines=True, dtype={'k1':float, 'k2':cudf.ListDtype(int)}) +>>> cudf.read_json(StringIO(json_str), engine='cudf', lines=True, dtype={'k1':float, 'k2':cudf.ListDtype(int)}) k1 k2 0 1.0 [1] """ @@ -939,7 +930,7 @@ ---------- path_or_buf : string, buffer or path object Path to the file to open, or an open `HDFStore - `_. + `_. object. Supports any object implementing the ``__fspath__`` protocol. This includes :class:`pathlib.Path` and py._path.local.LocalPath @@ -950,7 +941,7 @@ mode : {'r', 'r+', 'a'}, optional Mode to use when opening the file. Ignored if path_or_buf is a `Pandas HDFS - `_. + `_. Default is 'r'. where : list, optional A list of Term (or convertible) objects. @@ -994,7 +985,7 @@ please use append mode and a different a key. For more information see the `user guide -`_. +`_. Parameters ---------- @@ -1024,7 +1015,7 @@ List of columns to create as indexed data columns for on-disk queries, or True to use all columns. By default only the axes of the object are indexed. See `Query via Data Columns - `_. + `_. Applicable only to format='table'. complevel : {0-9}, optional Specifies a compression level for data. @@ -1209,8 +1200,6 @@ comment : char, default None Character used as a comments indicator. If found at the beginning of a line, the line will be ignored altogether. -delim_whitespace : bool, default False - Determines whether to use whitespace as delimiter. byte_range : list or tuple, default None Byte range within the input file to be read. The first number is the offset in bytes, the second number is the range size in bytes. Set the @@ -1454,11 +1443,6 @@ Mode in which file is opened iotypes : (), default (BytesIO) Object type to exclude from file-like check -allow_raw_text_input : boolean, default False - If True, this indicates the input `path_or_data` could be a raw text - input and will not check for its existence in the filesystem. If False, - the input must be a path and an error will be raised if it does not - exist. storage_options : dict, optional Extra options that make sense for a particular storage connection, e.g. host, port, username, password, etc. For HTTP(S) URLs the key-value @@ -1810,10 +1794,8 @@ def get_reader_filepath_or_buffer( mode="rb", fs=None, iotypes=(BytesIO,), - allow_raw_text_input=False, storage_options=None, bytes_per_thread=_BYTES_PER_THREAD_DEFAULT, - warn_on_raw_text_input=None, warn_meta=None, expand_dir_pattern=None, prefetch_options=None, @@ -1833,8 +1815,7 @@ def get_reader_filepath_or_buffer( filepaths_or_buffers = [] string_paths = [isinstance(source, str) for source in input_sources] if any(string_paths): - # Sources are all strings. The strings are typically - # file paths, but they may also be raw text strings. + # Sources are all strings and should be file paths. # Don't allow a mix of source types if not all(string_paths): @@ -1850,37 +1831,9 @@ def get_reader_filepath_or_buffer( paths = _maybe_expand_directories(paths, expand_dir_pattern, fs) if _is_local_filesystem(fs): - # Doing this as `read_json` accepts a json string - # path_or_data need not be a filepath like string - - # helper for checking if raw text looks like a json filename - compression_extensions = [ - ".tar", - ".tar.gz", - ".tar.bz2", - ".tar.xz", - ".gz", - ".bz2", - ".zip", - ".xz", - ".zst", - "", - ] - if len(paths): if fs.exists(paths[0]): filepaths_or_buffers = paths - - # raise FileNotFound if path looks like json - # following pandas - # see - # https://github.com/pandas-dev/pandas/pull/46718/files#diff-472ce5fe087e67387942e1e1c409a5bc58dde9eb8a2db6877f1a45ae4974f694R724-R729 - elif not allow_raw_text_input or paths[0].lower().endswith( - tuple(f".json{c}" for c in compression_extensions) - ): - raise FileNotFoundError( - f"{input_sources} could not be resolved to any files" - ) else: raw_text_input = True else: @@ -1906,23 +1859,9 @@ def get_reader_filepath_or_buffer( raw_text_input = True if raw_text_input: - # Assuming _all_ strings are raw data and not a mix of file paths too - filepaths_or_buffers = [ - source.encode() for source in input_sources - ] - if warn_on_raw_text_input: - # Do not remove until pandas 3.0 support is added. - assert PANDAS_LT_300, ( - "Need to drop after pandas-3.0 support is added." - ) - warnings.warn( - f"Passing literal {warn_meta[0]} to {warn_meta[1]} is " - "deprecated and will be removed in a future version. " - "To read from a literal string, wrap it in a " - "'StringIO' object.", - FutureWarning, - ) - + raise FileNotFoundError( + f"{input_sources} could not be resolved to any files" + ) else: # Sources are already buffers or file-like objects for source in input_sources: diff --git a/python/cudf/cudf/utils/queryutils.py b/python/cudf/cudf/utils/queryutils.py index 6dc68d808a35..88bfea527d09 100644 --- a/python/cudf/cudf/utils/queryutils.py +++ b/python/cudf/cudf/utils/queryutils.py @@ -52,7 +52,7 @@ def visit_Name(self, node): def query_parser(text): """The query expression parser. - See https://pandas.pydata.org/pandas-docs/version/2.3.3/generated/pandas.DataFrame.query.html + See https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.query.html * names with '@' prefix are global reference. * other names must be column names of the dataframe. diff --git a/python/cudf/cudf/utils/temporal.py b/python/cudf/cudf/utils/temporal.py index 24d94e570017..2625786b8d1d 100644 --- a/python/cudf/cudf/utils/temporal.py +++ b/python/cudf/cudf/utils/temporal.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 from __future__ import annotations @@ -8,13 +8,6 @@ import pandas as pd import cudf -from cudf.core._compat import PANDAS_GE_220 - -if PANDAS_GE_220: - _guess_datetime_format = pd.tseries.api.guess_datetime_format -else: - _guess_datetime_format = pd.core.tools.datetimes.guess_datetime_format - unit_to_nanoseconds_conversion = { "ns": 1, @@ -34,7 +27,7 @@ def infer_format(element: str, **kwargs) -> str: if not cudf.get_option("mode.pandas_compatible"): # We allow "Z" but don't localize it to datetime64[ns, UTC] type (yet) element = element.replace("Z", "") - fmt = _guess_datetime_format(element, **kwargs) + fmt = pd.tseries.api.guess_datetime_format(element, **kwargs) if fmt is not None: if "%z" in fmt or "%Z" in fmt: @@ -58,11 +51,15 @@ def infer_format(element: str, **kwargs) -> str: second_parts = re.split(r"(\D+)", element_parts[1], maxsplit=1) subsecond_fmt = ".%" + str(len(second_parts[0])) + "f" - first_part = _guess_datetime_format(element_parts[0], **kwargs) + first_part = pd.tseries.api.guess_datetime_format( + element_parts[0], **kwargs + ) # For the case where first_part is '00:00:03' if first_part is None: tmp = "1970-01-01 " + element_parts[0] - first_part = _guess_datetime_format(tmp, **kwargs).split(" ", 1)[1] + first_part = pd.tseries.api.guess_datetime_format(tmp, **kwargs).split( + " ", 1 + )[1] if first_part is None: raise ValueError("Unable to infer the timestamp format from the data") @@ -77,7 +74,9 @@ def infer_format(element: str, **kwargs) -> str: if len(second_part) > 1: # Only infer if second_parts is not an empty string. - second_part = _guess_datetime_format(second_part, **kwargs) + second_part = pd.tseries.api.guess_datetime_format( + second_part, **kwargs + ) else: second_part = "" diff --git a/python/cudf/cudf_pandas_tests/test_cudf_pandas.py b/python/cudf/cudf_pandas_tests/test_cudf_pandas.py index ab2660fc348d..7dcf4742461e 100644 --- a/python/cudf/cudf_pandas_tests/test_cudf_pandas.py +++ b/python/cudf/cudf_pandas_tests/test_cudf_pandas.py @@ -2,7 +2,6 @@ # SPDX-License-Identifier: Apache-2.0 import collections -import contextlib import copy import cProfile import datetime @@ -27,15 +26,11 @@ import pytest from nbconvert.preprocessors import ExecutePreprocessor from numba import ( - NumbaDeprecationWarning, vectorize, ) -from packaging import version -from pytz import utc from rmm import RMMError -from cudf.core._compat import PANDAS_GE_210, PANDAS_GE_220, PANDAS_VERSION from cudf.pandas import LOADED, Profiler from cudf.pandas.fast_slow_proxy import ( AttributeFallbackError, @@ -114,7 +109,7 @@ def array(series): @pytest.fixture( params=[ - lambda group: group["a"].sum(), + lambda group: group["b"].sum(), lambda group: group.sum().apply(lambda val: [val]), ] ) @@ -304,14 +299,13 @@ def test_df_from_series(series): tm.assert_frame_equal(pd.DataFrame(psr), xpd.DataFrame(sr)) -@pytest.mark.filterwarnings( - "ignore:Setting an item of incompatible dtype is deprecated" -) def test_iloc_change_type(series): + # In pandas 3.0+, setting an item of incompatible dtype raises TypeError. psr, sr = series - psr.iloc[0] = "a" - sr.iloc[0] = "a" - tm.assert_series_equal(psr, sr) + with pytest.raises(TypeError): + psr.iloc[0] = "a" + with pytest.raises(TypeError): + sr.iloc[0] = "a" def test_rename_categories(): @@ -502,7 +496,7 @@ def test_groupby_grouper_fallback(dataframe, groupby_udf): def test_options_mode(): - assert xpd.options.mode.copy_on_write == pd.options.mode.copy_on_write + assert xpd.options.mode.string_storage == pd.options.mode.string_storage # Codecov and Profiler interfere with each-other, @@ -572,23 +566,21 @@ def test_array_ufunc(series): @pytest.mark.xfail(strict=False, reason="Fails in CI, passes locally.") def test_groupby_apply_func_returns_series(dataframe): pdf, df = dataframe - if PANDAS_GE_220: - kwargs = {"include_groups": False} - else: - kwargs = {} - expect = pdf.groupby("a").apply( - lambda group: pd.Series({"x": 1}), **kwargs + lambda group: pd.Series({"x": 1}), include_groups=False + ) + got = df.groupby("a").apply( + lambda group: xpd.Series({"x": 1}), include_groups=False ) - got = df.groupby("a").apply(lambda group: xpd.Series({"x": 1}), **kwargs) tm.assert_equal(expect, got) @pytest.mark.parametrize("data", [[1, 2, 3], ["a", None, "b"]]) def test_pyarrow_array_construction(data): cudf_pandas_series = xpd.Series(data) + pandas_series = pd.Series(data) actual_pa_array = pa.array(cudf_pandas_series) - expected_pa_array = pa.array(data) + expected_pa_array = pa.array(pandas_series) assert actual_pa_array.equals(expected_pa_array) @@ -718,10 +710,6 @@ def test_rolling_win_type(): tm.assert_equal(result, expected) -@pytest.mark.xfail( - PANDAS_VERSION < version.parse("2.1"), - reason="requires pandas >= 2.1", -) def test_rolling_apply_numba_engine(): def weighted_mean(x): arr = np.ones((1, x.shape[1])) @@ -731,15 +719,9 @@ def weighted_mean(x): pdf = pd.DataFrame([[1, 2, 0.6], [2, 3, 0.4], [3, 4, 0.2], [4, 5, 0.7]]) df = xpd.DataFrame([[1, 2, 0.6], [2, 3, 0.4], [3, 4, 0.2], [4, 5, 0.7]]) - ctx = ( - contextlib.nullcontext() - if PANDAS_GE_210 - else pytest.warns(NumbaDeprecationWarning) + expect = pdf.rolling(2, method="table", min_periods=0).apply( + weighted_mean, raw=True, engine="numba" ) - with ctx: - expect = pdf.rolling(2, method="table", min_periods=0).apply( - weighted_mean, raw=True, engine="numba" - ) got = df.rolling(2, method="table", min_periods=0).apply( weighted_mean, raw=True, engine="numba" ) @@ -1055,6 +1037,38 @@ def test_string_array(): tm.assert_extension_array_equal(xobj, pobj) +def test_string_array_is_numpy_extension_subclass(): + assert issubclass(xpd.arrays.StringArray, xpd.arrays.NumpyExtensionArray) + + +@pytest.mark.parametrize( + "comparison_op", + [ + operator.eq, + operator.ne, + operator.lt, + operator.le, + operator.gt, + operator.ge, + ], +) +def test_string_array_object_array_comparison(comparison_op): + xa = xpd.array(["a", None, "c"], dtype=object) + xb = xpd.array([None, None, "c"], dtype="string[python]") + pa_ = pd.array(["a", None, "c"], dtype=object) + pb_ = pd.array([None, None, "c"], dtype="string[python]") + + tm.assert_extension_array_equal( + comparison_op(xa, xb), comparison_op(pa_, pb_) + ) + tm.assert_extension_array_equal( + comparison_op(xb, xa), comparison_op(pb_, pa_) + ) + tm.assert_extension_array_equal( + comparison_op(xa, xb), comparison_op(xb, xa) + ) + + def test_subclass_series(): class foo(pd.Series): def __init__(self, myinput): @@ -1313,10 +1327,6 @@ def max_times_two(self): assert s.max_times_two() == 6 -@pytest.mark.xfail( - PANDAS_VERSION < version.parse("2.1"), - reason="DatetimeArray.__floordiv__ missing in pandas-2.0.0", -) def test_floordiv_array_vs_df(): xarray = xpd.Series([1, 2, 3], dtype="datetime64[ns]").array parray = pd.Series([1, 2, 3], dtype="datetime64[ns]").array @@ -1470,10 +1480,10 @@ def test_holidays_within_dates(holiday, start, expected): # Verify that timezone info is preserved. assert list( holiday.dates( - utc.localize(xpd.Timestamp(start)), - utc.localize(xpd.Timestamp(start)), + xpd.Timestamp(start, tz="UTC"), + xpd.Timestamp(start, tz="UTC"), ) - ) == [utc.localize(dt) for dt in expected] + ) == [dt.tz_localize("UTC") for dt in expected] @pytest.mark.serial @@ -1593,10 +1603,6 @@ def test_numpy_cupy_flatiter(series): assert type(arr.flat._fsproxy_slow) is np.flatiter -@pytest.mark.xfail( - PANDAS_VERSION < version.parse("2.1"), - reason="pyarrow_numpy storage type was not supported in pandas-2.0.0", -) def test_arrow_string_arrays(): cu_s = xpd.Series(["a", "b", "c"]) pd_s = pd.Series(["a", "b", "c"]) @@ -1610,17 +1616,10 @@ def test_arrow_string_arrays(): tm.assert_equal(cu_arr, pd_arr) - xpd_pa_np_storage_type = ( - xpd.StringDtype("pyarrow_numpy") - if PANDAS_VERSION < version.parse("2.3.1") - else pd.StringDtype(storage="pyarrow", na_value=np.nan) - ) + # TODO: Should this use xpd.StringDtype? + xpd_pa_np_storage_type = pd.StringDtype(storage="pyarrow", na_value=np.nan) - pd_pa_np_storage_type = ( - pd.StringDtype("pyarrow_numpy") - if PANDAS_VERSION < version.parse("2.3.1") - else pd.StringDtype(storage="pyarrow", na_value=np.nan) - ) + pd_pa_np_storage_type = pd.StringDtype(storage="pyarrow", na_value=np.nan) cu_arr = xpd.core.arrays.string_arrow.ArrowStringArray._from_sequence( cu_s, dtype=xpd_pa_np_storage_type @@ -1854,16 +1853,12 @@ def test_fallback_raises_specific_error( "_exceptions", "version", "_print_versions", - "capitalize_first_letter", "_validators", "_decorators", ], ) def test_cudf_pandas_util_version(attrs): - if not PANDAS_GE_220 and attrs == "capitalize_first_letter": - assert not hasattr(pd.util, attrs) - else: - assert hasattr(pd.util, attrs) + assert hasattr(pd.util, attrs) def test_iteration_over_dataframe_dtypes_produces_proxy_objects(dataframe): diff --git a/python/cudf/cudf_pandas_tests/third_party_integration_tests/tests/test_pytorch.py b/python/cudf/cudf_pandas_tests/third_party_integration_tests/tests/test_pytorch.py index 9e05d47ce1c7..14da72a44e9c 100644 --- a/python/cudf/cudf_pandas_tests/third_party_integration_tests/tests/test_pytorch.py +++ b/python/cudf/cudf_pandas_tests/third_party_integration_tests/tests/test_pytorch.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION. # SPDX-License-Identifier: Apache-2.0 import numpy as np @@ -140,4 +140,4 @@ def test_torch_tensor_ctor(): def test_torch_tensor_from_numpy(): s = pd.Series(range(5)) - return torch.from_numpy(s.values) + return torch.from_numpy(s.to_numpy(copy=True)) diff --git a/python/cudf/pyproject.toml b/python/cudf/pyproject.toml index d640c0c3d139..e0cd6e83e2e7 100644 --- a/python/cudf/pyproject.toml +++ b/python/cudf/pyproject.toml @@ -29,7 +29,7 @@ dependencies = [ "numpy>=1.26,<3.0", "nvtx>=0.2.1", "packaging", - "pandas>=2.0,<2.4.0", + "pandas>=3.0.0,<3.1.0", "pyarrow>=19.0.0,<24", "pylibcudf==26.8.*,>=0.0.0a0", "rich", diff --git a/python/custreamz/custreamz/tests/test_dataframes.py b/python/custreamz/custreamz/tests/test_dataframes.py index da3eb0f5bbf3..2c343be7ec0c 100644 --- a/python/custreamz/custreamz/tests/test_dataframes.py +++ b/python/custreamz/custreamz/tests/test_dataframes.py @@ -619,7 +619,7 @@ def test_windowing_n(func, n, getter): @pytest.mark.parametrize("func", [lambda x: x.sum(), lambda x: x.mean()]) -@pytest.mark.parametrize("value", ["10h", "1d"]) +@pytest.mark.parametrize("value", ["10h", "1D"]) @pytest.mark.parametrize("getter", [lambda df: df, lambda df: df.x]) @pytest.mark.parametrize( "grouper", [lambda a: "y", lambda a: a.index, lambda a: ["y"]] @@ -843,7 +843,7 @@ def test_rolling_aggs_with_start_state(stream): ) stream = Stream() - example = cudf.DataFrame({"name": [], "amount": []}) + example = cudf.DataFrame({"name": [], "amount": []}, dtype="float64") sdf = DataFrame(stream, example=example) output1 = ( sdf.rolling(2, with_state=True, start=output0[-1][0]) diff --git a/python/dask_cudf/dask_cudf/io/tests/test_csv.py b/python/dask_cudf/dask_cudf/io/tests/test_csv.py index 06c9e0c02270..a8c9e7ef8060 100644 --- a/python/dask_cudf/dask_cudf/io/tests/test_csv.py +++ b/python/dask_cudf/dask_cudf/io/tests/test_csv.py @@ -228,10 +228,13 @@ def test_read_csv_skiprows_error(csv_begin_bad_lines): def test_read_csv_skipfooter(csv_end_bad_lines): # Repro from Issue#13552 + # Use pd.read_csv as the reference: dd.read_csv has a meta-inference + # issue where it reads the first few rows without skipfooter (exposing + # the bad footer rows), causing column-A dtype to be inferred as string + # rather than int. pd.read_csv and dask_cudf.read_csv both produce the + # correct result. with dask.config.set({"dataframe.convert-string": False}): - ddf_cpu = dd.read_csv( - csv_end_bad_lines, skipfooter=3, engine="python" - ).compute() + ddf_cpu = pd.read_csv(csv_end_bad_lines, skipfooter=3, engine="python") ddf_gpu = dask_cudf.read_csv(csv_end_bad_lines, skipfooter=3).compute() dd.assert_eq(ddf_cpu, ddf_gpu, check_dtype=False) diff --git a/python/dask_cudf/dask_cudf/tests/test_applymap.py b/python/dask_cudf/dask_cudf/tests/test_applymap.py index 95430f4b1ca6..969741337b13 100644 --- a/python/dask_cudf/dask_cudf/tests/test_applymap.py +++ b/python/dask_cudf/dask_cudf/tests/test_applymap.py @@ -6,8 +6,6 @@ from dask import dataframe as dd -from cudf.core._compat import PANDAS_GE_210 - from dask_cudf.tests.utils import _make_random_frame @@ -24,10 +22,6 @@ ], ) @pytest.mark.parametrize("has_na", [True, False]) -@pytest.mark.skipif( - not PANDAS_GE_210, - reason="DataFrame.map requires pandas>=2.1.0", -) def test_applymap_basic(func, has_na, meta): size = 2000 pdf, dgdf = _make_random_frame(size, include_na=False) diff --git a/python/dask_cudf/dask_cudf/tests/test_distributed.py b/python/dask_cudf/dask_cudf/tests/test_distributed.py index 189578bea3ca..6f01e77dda4d 100644 --- a/python/dask_cudf/dask_cudf/tests/test_distributed.py +++ b/python/dask_cudf/dask_cudf/tests/test_distributed.py @@ -33,11 +33,12 @@ def dask_client(worker_id: str): scheduler_port = 8800 + worker_index dashboard_address = 8900 + worker_index else: - scheduler_port = None + scheduler_port = 0 dashboard_address = None with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=Warning, message="Port") + warnings.filterwarnings("ignore", category=ResourceWarning) with dask_cuda.LocalCUDACluster( n_workers=1, @@ -139,6 +140,7 @@ def test_p2p_shuffle(): not at_least_n_gpus(3), reason="Machine does not have three GPUs", ) +@pytest.mark.filterwarnings("ignore::ResourceWarning") def test_unique(): # Using `"p2p"` can produce dispatching problems # TODO: Test "p2p" after dask > 2024.4.1 is required diff --git a/python/dask_cudf/pyproject.toml b/python/dask_cudf/pyproject.toml index 813f3a3dfcd2..78015967656f 100644 --- a/python/dask_cudf/pyproject.toml +++ b/python/dask_cudf/pyproject.toml @@ -26,7 +26,7 @@ dependencies = [ "fsspec>=0.6.0", "numpy>=1.26,<3.0", "nvidia-ml-py>=12", - "pandas>=2.0,<2.4.0", + "pandas>=3.0.0,<3.1.0", "rapids-dask-dependency==26.8.*,>=0.0.0a0", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. classifiers = [ diff --git a/python/pylibcudf/pylibcudf/expressions.pyx b/python/pylibcudf/pylibcudf/expressions.pyx index aa251a3f387b..26fad2bc7b9f 100644 --- a/python/pylibcudf/pylibcudf/expressions.pyx +++ b/python/pylibcudf/pylibcudf/expressions.pyx @@ -331,7 +331,7 @@ _python_cudf_operator_map = { # corresponding libcudf C++ AST operators. _python_cudf_function_map = { # TODO: Operators listed on - # https://pandas.pydata.org/pandas-docs/version/2.3.3/user_guide/enhancingperf.html#expression-evaluation-via-eval # noqa: E501 + # https://pandas.pydata.org/pandas-docs/stable/user_guide/enhancingperf.html#expression-evaluation-via-eval # noqa: E501 # that we don't support yet: # expm1, log1p, arctan2 and log10. "isnull": ASTOperator.IS_NULL, diff --git a/python/pylibcudf/pyproject.toml b/python/pylibcudf/pyproject.toml index d717ea091555..c8ee2da7d61f 100644 --- a/python/pylibcudf/pyproject.toml +++ b/python/pylibcudf/pyproject.toml @@ -43,7 +43,7 @@ test = [ "nanoarrow", "numba-cuda>=0.22.2,<0.29.0", "numba>=0.60.0,<0.65.0", - "pandas>=2.0,<2.4.0", + "pandas>=3.0.0,<3.1.0", "pyarrow>=19.0.0,<24", "pytest", "pytest-cov", diff --git a/python/pylibcudf/tests/io/test_csv.py b/python/pylibcudf/tests/io/test_csv.py index d0f69eab388e..819ed097f2e8 100644 --- a/python/pylibcudf/tests/io/test_csv.py +++ b/python/pylibcudf/tests/io/test_csv.py @@ -28,6 +28,16 @@ } +def _replace_large_string_from_pandas(schema: pa.Schema) -> pa.Schema: + # pandas 3 strings use convert to pyarrow.large_string + return pa.schema( + { + name: pa.string() if pa.types.is_large_string(typ) else typ + for name, typ in zip(schema.names, schema.types, strict=True) + } + ) + + @pytest.fixture(scope="module") def csv_table_data(table_data): """ @@ -149,7 +159,11 @@ def test_read_csv_byte_range(table_data, chunk_size, tmp_path): plc.Table.from_arrow(full_tbl), tbls_w_meta[0].column_names(include_children=True), ) - assert_table_and_meta_eq(pa.Table.from_pandas(exp), full_tbl_plc) + pa_table = pa.Table.from_pandas(exp) + expected = pa_table.cast( + _replace_large_string_from_pandas(pa_table.schema) + ) + assert_table_and_meta_eq(expected, full_tbl_plc) @pytest.mark.parametrize("usecols", [None, ["col_int64", "col_bool"], [0, 1]]) @@ -232,7 +246,11 @@ def test_read_csv_parse_options( quotechar=quotechar, lineterminator=lineterminator, ) - assert_table_and_meta_eq(pa.Table.from_pandas(df), plc_table_w_meta) + pa_table = pa.Table.from_pandas(df) + expected = pa_table.cast( + _replace_large_string_from_pandas(pa_table.schema) + ) + assert_table_and_meta_eq(expected, plc_table_w_meta) @pytest.mark.parametrize("na_filter", [True, False]) @@ -263,7 +281,11 @@ def test_read_csv_na_values( na_values=na_values if na_filter else None, keep_default_na=keep_default_na, ) - assert_table_and_meta_eq(pa.Table.from_pandas(df), plc_table_w_meta) + pa_table = pa.Table.from_pandas(df) + expected = pa_table.cast( + _replace_large_string_from_pandas(pa_table.schema) + ) + assert_table_and_meta_eq(expected, plc_table_w_meta) @pytest.mark.parametrize("header", [0, 10, -1])