From b47d9b3f13ac7aac1dd28a8d392cc0411772de55 Mon Sep 17 00:00:00 2001 From: Daniel Saxton Date: Sat, 15 Aug 2020 23:08:41 -0500 Subject: [PATCH 1/6] Pass check_dtype to assert_extension_array_equal --- pandas/_testing.py | 4 ++-- pandas/tests/util/test_assert_extension_array_equal.py | 7 +++++++ pandas/tests/util/test_assert_frame_equal.py | 6 ++++++ pandas/tests/util/test_assert_series_equal.py | 6 ++++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/pandas/_testing.py b/pandas/_testing.py index 713f29466f097..92055de05e8c6 100644 --- a/pandas/_testing.py +++ b/pandas/_testing.py @@ -1377,12 +1377,12 @@ def assert_series_equal( ) elif is_extension_array_dtype(left.dtype) and is_extension_array_dtype(right.dtype): assert_extension_array_equal( - left._values, right._values, index_values=np.asarray(left.index) + left._values, right._values, check_dtype=check_dtype, index_values=np.asarray(left.index) ) elif needs_i8_conversion(left.dtype) or needs_i8_conversion(right.dtype): # DatetimeArray or TimedeltaArray assert_extension_array_equal( - left._values, right._values, index_values=np.asarray(left.index) + left._values, right._values, check_dtype=check_dtype, index_values=np.asarray(left.index) ) else: _testing.assert_almost_equal( diff --git a/pandas/tests/util/test_assert_extension_array_equal.py b/pandas/tests/util/test_assert_extension_array_equal.py index d9fdf1491c328..0e517613139ea 100644 --- a/pandas/tests/util/test_assert_extension_array_equal.py +++ b/pandas/tests/util/test_assert_extension_array_equal.py @@ -1,6 +1,7 @@ import numpy as np import pytest +from pandas import array import pandas._testing as tm from pandas.core.arrays.sparse import SparseArray @@ -102,3 +103,9 @@ def test_assert_extension_array_equal_non_extension_array(side): with pytest.raises(AssertionError, match=msg): tm.assert_extension_array_equal(*args) + + +def test_assert_extension_array_equal_ignore_dtype_mismatch(): + left = array([1, 2, 3], dtype="Int64") + right = array([1, 2, 3], dtype="Int32") + tm.assert_extension_array_equal(left, right, check_dtype=False) diff --git a/pandas/tests/util/test_assert_frame_equal.py b/pandas/tests/util/test_assert_frame_equal.py index fe3e1ff906919..43d9bac32c672 100644 --- a/pandas/tests/util/test_assert_frame_equal.py +++ b/pandas/tests/util/test_assert_frame_equal.py @@ -260,3 +260,9 @@ def test_assert_frame_equal_interval_dtype_mismatch(): with pytest.raises(AssertionError, match=msg): tm.assert_frame_equal(left, right, check_dtype=True) + + +def test_assert_frame_equal_ignore_extension_dtype_mismatch(): + left = pd.DataFrame({"a": [1, 2, 3]}, dtype="Int64") + right = pd.DataFrame({"a": [1, 2, 3]}, dtype="Int32") + tm.assert_frame_equal(left, right, check_dtype=False) diff --git a/pandas/tests/util/test_assert_series_equal.py b/pandas/tests/util/test_assert_series_equal.py index a7b5aeac560e4..414b9072e5d9c 100644 --- a/pandas/tests/util/test_assert_series_equal.py +++ b/pandas/tests/util/test_assert_series_equal.py @@ -296,3 +296,9 @@ def test_series_equal_exact_for_nonnumeric(): tm.assert_series_equal(s1, s3, check_exact=True) with pytest.raises(AssertionError): tm.assert_series_equal(s3, s1, check_exact=True) + + +def test_assert_series_equal_ignore_extension_dtype_mismatch(): + left = pd.Series([1, 2, 3], dtype="Int64") + right = pd.Series([1, 2, 3], dtype="Int32") + tm.assert_series_equal(left, right, check_dtype=False) From d4ff630e95d00eae1a8b13e7873b0e884a8351d5 Mon Sep 17 00:00:00 2001 From: Daniel Saxton Date: Sat, 15 Aug 2020 23:15:01 -0500 Subject: [PATCH 2/6] Lint --- pandas/_testing.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pandas/_testing.py b/pandas/_testing.py index 92055de05e8c6..ef6232fa6d575 100644 --- a/pandas/_testing.py +++ b/pandas/_testing.py @@ -1377,12 +1377,18 @@ def assert_series_equal( ) elif is_extension_array_dtype(left.dtype) and is_extension_array_dtype(right.dtype): assert_extension_array_equal( - left._values, right._values, check_dtype=check_dtype, index_values=np.asarray(left.index) + left._values, + right._values, + check_dtype=check_dtype, + index_values=np.asarray(left.index), ) elif needs_i8_conversion(left.dtype) or needs_i8_conversion(right.dtype): # DatetimeArray or TimedeltaArray assert_extension_array_equal( - left._values, right._values, check_dtype=check_dtype, index_values=np.asarray(left.index) + left._values, + right._values, + check_dtype=check_dtype, + index_values=np.asarray(left.index), ) else: _testing.assert_almost_equal( From 3f7d6d920e24f2a340d589dc50eff3c002da82b7 Mon Sep 17 00:00:00 2001 From: Daniel Saxton Date: Sun, 16 Aug 2020 08:20:03 -0500 Subject: [PATCH 3/6] Issue number --- pandas/tests/util/test_assert_extension_array_equal.py | 1 + pandas/tests/util/test_assert_frame_equal.py | 1 + pandas/tests/util/test_assert_series_equal.py | 1 + 3 files changed, 3 insertions(+) diff --git a/pandas/tests/util/test_assert_extension_array_equal.py b/pandas/tests/util/test_assert_extension_array_equal.py index 0e517613139ea..c5cc522f8d123 100644 --- a/pandas/tests/util/test_assert_extension_array_equal.py +++ b/pandas/tests/util/test_assert_extension_array_equal.py @@ -106,6 +106,7 @@ def test_assert_extension_array_equal_non_extension_array(side): def test_assert_extension_array_equal_ignore_dtype_mismatch(): + # https://github.com/pandas-dev/pandas/issues/35715 left = array([1, 2, 3], dtype="Int64") right = array([1, 2, 3], dtype="Int32") tm.assert_extension_array_equal(left, right, check_dtype=False) diff --git a/pandas/tests/util/test_assert_frame_equal.py b/pandas/tests/util/test_assert_frame_equal.py index 43d9bac32c672..ad599bc455a37 100644 --- a/pandas/tests/util/test_assert_frame_equal.py +++ b/pandas/tests/util/test_assert_frame_equal.py @@ -263,6 +263,7 @@ def test_assert_frame_equal_interval_dtype_mismatch(): def test_assert_frame_equal_ignore_extension_dtype_mismatch(): + # https://github.com/pandas-dev/pandas/issues/35715 left = pd.DataFrame({"a": [1, 2, 3]}, dtype="Int64") right = pd.DataFrame({"a": [1, 2, 3]}, dtype="Int32") tm.assert_frame_equal(left, right, check_dtype=False) diff --git a/pandas/tests/util/test_assert_series_equal.py b/pandas/tests/util/test_assert_series_equal.py index 414b9072e5d9c..6814a0c6481ee 100644 --- a/pandas/tests/util/test_assert_series_equal.py +++ b/pandas/tests/util/test_assert_series_equal.py @@ -299,6 +299,7 @@ def test_series_equal_exact_for_nonnumeric(): def test_assert_series_equal_ignore_extension_dtype_mismatch(): + # https://github.com/pandas-dev/pandas/issues/35715 left = pd.Series([1, 2, 3], dtype="Int64") right = pd.Series([1, 2, 3], dtype="Int32") tm.assert_series_equal(left, right, check_dtype=False) From e4f5c6f6bed37a6a169be9d0f790d15776a2477f Mon Sep 17 00:00:00 2001 From: Daniel Saxton Date: Sun, 16 Aug 2020 10:20:30 -0500 Subject: [PATCH 4/6] Add whatsnew --- doc/source/whatsnew/v1.1.1.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/whatsnew/v1.1.1.rst b/doc/source/whatsnew/v1.1.1.rst index cdc244ca193b4..d9de29e7d547d 100644 --- a/doc/source/whatsnew/v1.1.1.rst +++ b/doc/source/whatsnew/v1.1.1.rst @@ -32,6 +32,7 @@ Bug fixes ~~~~~~~~~ - Bug in ``Styler`` whereby `cell_ids` argument had no effect due to other recent changes (:issue:`35588`). +- Bug in :func:`pandas.testing.assert_series_equal` and :func:`pandas.testing.assert_frame_equal` where extension dtypes were not ignored when ``check_dtypes`` was set to ``False`` (:issue:`35715`). Categorical ^^^^^^^^^^^ From 6dffe3b722001c6723033338ffc344659dc151dd Mon Sep 17 00:00:00 2001 From: Daniel Saxton Date: Mon, 17 Aug 2020 11:20:09 -0500 Subject: [PATCH 5/6] Parametrize --- pandas/tests/util/test_assert_extension_array_equal.py | 5 +++-- pandas/tests/util/test_assert_frame_equal.py | 5 +++-- pandas/tests/util/test_assert_series_equal.py | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/pandas/tests/util/test_assert_extension_array_equal.py b/pandas/tests/util/test_assert_extension_array_equal.py index c5cc522f8d123..b950f9a26265c 100644 --- a/pandas/tests/util/test_assert_extension_array_equal.py +++ b/pandas/tests/util/test_assert_extension_array_equal.py @@ -105,8 +105,9 @@ def test_assert_extension_array_equal_non_extension_array(side): tm.assert_extension_array_equal(*args) -def test_assert_extension_array_equal_ignore_dtype_mismatch(): +@pytest.mark.parametrize("right_dtype", ["Int32", "Int64"]) +def test_assert_extension_array_equal_ignore_dtype_mismatch(right_dtype): # https://github.com/pandas-dev/pandas/issues/35715 left = array([1, 2, 3], dtype="Int64") - right = array([1, 2, 3], dtype="Int32") + right = array([1, 2, 3], dtype=right_dtype) tm.assert_extension_array_equal(left, right, check_dtype=False) diff --git a/pandas/tests/util/test_assert_frame_equal.py b/pandas/tests/util/test_assert_frame_equal.py index ad599bc455a37..083be00525206 100644 --- a/pandas/tests/util/test_assert_frame_equal.py +++ b/pandas/tests/util/test_assert_frame_equal.py @@ -262,8 +262,9 @@ def test_assert_frame_equal_interval_dtype_mismatch(): tm.assert_frame_equal(left, right, check_dtype=True) -def test_assert_frame_equal_ignore_extension_dtype_mismatch(): +@pytest.mark.parametrize("right_dtype", ["Int32", "Int64"]) +def test_assert_frame_equal_ignore_extension_dtype_mismatch(right_dtype): # https://github.com/pandas-dev/pandas/issues/35715 left = pd.DataFrame({"a": [1, 2, 3]}, dtype="Int64") - right = pd.DataFrame({"a": [1, 2, 3]}, dtype="Int32") + right = pd.DataFrame({"a": [1, 2, 3]}, dtype=right_dtype) tm.assert_frame_equal(left, right, check_dtype=False) diff --git a/pandas/tests/util/test_assert_series_equal.py b/pandas/tests/util/test_assert_series_equal.py index 6814a0c6481ee..60863e2c71846 100644 --- a/pandas/tests/util/test_assert_series_equal.py +++ b/pandas/tests/util/test_assert_series_equal.py @@ -298,8 +298,9 @@ def test_series_equal_exact_for_nonnumeric(): tm.assert_series_equal(s3, s1, check_exact=True) -def test_assert_series_equal_ignore_extension_dtype_mismatch(): +@pytest.mark.parametrize("right_dtype", ["Int32", "Int64"]) +def test_assert_series_equal_ignore_extension_dtype_mismatch(right_dtype): # https://github.com/pandas-dev/pandas/issues/35715 left = pd.Series([1, 2, 3], dtype="Int64") - right = pd.Series([1, 2, 3], dtype="Int32") + right = pd.Series([1, 2, 3], dtype=right_dtype) tm.assert_series_equal(left, right, check_dtype=False) From 0d0f53f3c3a729c7e76cdb26da15c23cc10d37ea Mon Sep 17 00:00:00 2001 From: Daniel Saxton Date: Mon, 17 Aug 2020 12:22:14 -0500 Subject: [PATCH 6/6] Lowercase --- pandas/tests/util/test_assert_extension_array_equal.py | 2 +- pandas/tests/util/test_assert_frame_equal.py | 2 +- pandas/tests/util/test_assert_series_equal.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pandas/tests/util/test_assert_extension_array_equal.py b/pandas/tests/util/test_assert_extension_array_equal.py index b950f9a26265c..f9259beab5d13 100644 --- a/pandas/tests/util/test_assert_extension_array_equal.py +++ b/pandas/tests/util/test_assert_extension_array_equal.py @@ -105,7 +105,7 @@ def test_assert_extension_array_equal_non_extension_array(side): tm.assert_extension_array_equal(*args) -@pytest.mark.parametrize("right_dtype", ["Int32", "Int64"]) +@pytest.mark.parametrize("right_dtype", ["Int32", "int64"]) def test_assert_extension_array_equal_ignore_dtype_mismatch(right_dtype): # https://github.com/pandas-dev/pandas/issues/35715 left = array([1, 2, 3], dtype="Int64") diff --git a/pandas/tests/util/test_assert_frame_equal.py b/pandas/tests/util/test_assert_frame_equal.py index 083be00525206..3aa3c64923b14 100644 --- a/pandas/tests/util/test_assert_frame_equal.py +++ b/pandas/tests/util/test_assert_frame_equal.py @@ -262,7 +262,7 @@ def test_assert_frame_equal_interval_dtype_mismatch(): tm.assert_frame_equal(left, right, check_dtype=True) -@pytest.mark.parametrize("right_dtype", ["Int32", "Int64"]) +@pytest.mark.parametrize("right_dtype", ["Int32", "int64"]) def test_assert_frame_equal_ignore_extension_dtype_mismatch(right_dtype): # https://github.com/pandas-dev/pandas/issues/35715 left = pd.DataFrame({"a": [1, 2, 3]}, dtype="Int64") diff --git a/pandas/tests/util/test_assert_series_equal.py b/pandas/tests/util/test_assert_series_equal.py index 60863e2c71846..f3c66052b1904 100644 --- a/pandas/tests/util/test_assert_series_equal.py +++ b/pandas/tests/util/test_assert_series_equal.py @@ -298,7 +298,7 @@ def test_series_equal_exact_for_nonnumeric(): tm.assert_series_equal(s3, s1, check_exact=True) -@pytest.mark.parametrize("right_dtype", ["Int32", "Int64"]) +@pytest.mark.parametrize("right_dtype", ["Int32", "int64"]) def test_assert_series_equal_ignore_extension_dtype_mismatch(right_dtype): # https://github.com/pandas-dev/pandas/issues/35715 left = pd.Series([1, 2, 3], dtype="Int64")