From c40e97cf3766bbf1c0051ce261b27f54c3d338a0 Mon Sep 17 00:00:00 2001 From: Isaac Virshup Date: Mon, 3 Aug 2020 17:13:44 +1000 Subject: [PATCH 1/3] BUG: Fix assert_equal when check_exact=True for non-numeric dtypes #35446 --- pandas/_testing.py | 6 ++---- pandas/tests/util/test_assert_series_equal.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/pandas/_testing.py b/pandas/_testing.py index a020fbff3553a..713f29466f097 100644 --- a/pandas/_testing.py +++ b/pandas/_testing.py @@ -1339,10 +1339,8 @@ def assert_series_equal( else: assert_attr_equal("dtype", left, right, obj=f"Attributes of {obj}") - if check_exact: - if not is_numeric_dtype(left.dtype): - raise AssertionError("check_exact may only be used with numeric Series") - + if check_exact and is_numeric_dtype(left.dtype) and is_numeric_dtype(right.dtype): + # Only check exact if dtype is numeric assert_numpy_array_equal( left._values, right._values, diff --git a/pandas/tests/util/test_assert_series_equal.py b/pandas/tests/util/test_assert_series_equal.py index 1284cc9d4f49b..9dce517612216 100644 --- a/pandas/tests/util/test_assert_series_equal.py +++ b/pandas/tests/util/test_assert_series_equal.py @@ -281,3 +281,13 @@ class MySeries(Series): with pytest.raises(AssertionError, match="Series classes are different"): tm.assert_series_equal(s3, s1, check_series_type=True) + + +def test_series_equal_exact_for_nonnumeric(): + # https://github.com/pandas-dev/pandas/issues/35446 + s1 = Series(["a", "b"]) + s2 = Series(["a", "b"]) + s3 = Series(["b", "a"]) + + _assert_series_equal_both(s1, s2, check_exact=True) + _assert_not_series_equal_both(s1, s3, check_exact=True) From 95b766c985b2b9b9d7170ef37cda80572dc5deff Mon Sep 17 00:00:00 2001 From: Isaac Virshup Date: Tue, 4 Aug 2020 16:21:08 +1000 Subject: [PATCH 2/3] DOC: whatsnew entry --- 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 6a327a4fc732f..bd26161349290 100644 --- a/doc/source/whatsnew/v1.1.1.rst +++ b/doc/source/whatsnew/v1.1.1.rst @@ -16,6 +16,7 @@ Fixed regressions ~~~~~~~~~~~~~~~~~ - Fixed regression where :func:`read_csv` would raise a ``ValueError`` when ``pandas.options.mode.use_inf_as_na`` was set to ``True`` (:issue:`35493`). +- Fixed regression where :func:`pandas.testing.assert_series_equal` would raise an error when non-numeric dtypes were passed with ``check_exact=True`` (:issue:`35446`) - - From 72258e6a39d3bae8b3dcdce843b2a16c298be192 Mon Sep 17 00:00:00 2001 From: Isaac Virshup Date: Mon, 10 Aug 2020 13:19:20 +1000 Subject: [PATCH 3/3] CLN don't use internal functions (from review) --- pandas/tests/util/test_assert_series_equal.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pandas/tests/util/test_assert_series_equal.py b/pandas/tests/util/test_assert_series_equal.py index 9dce517612216..a7b5aeac560e4 100644 --- a/pandas/tests/util/test_assert_series_equal.py +++ b/pandas/tests/util/test_assert_series_equal.py @@ -289,5 +289,10 @@ def test_series_equal_exact_for_nonnumeric(): s2 = Series(["a", "b"]) s3 = Series(["b", "a"]) - _assert_series_equal_both(s1, s2, check_exact=True) - _assert_not_series_equal_both(s1, s3, check_exact=True) + tm.assert_series_equal(s1, s2, check_exact=True) + tm.assert_series_equal(s2, s1, check_exact=True) + + with pytest.raises(AssertionError): + tm.assert_series_equal(s1, s3, check_exact=True) + with pytest.raises(AssertionError): + tm.assert_series_equal(s3, s1, check_exact=True)