91 lines
2.7 KiB
Python
91 lines
2.7 KiB
Python
![]() |
import pytest
|
||
|
|
||
|
from pandas import Categorical
|
||
|
import pandas._testing as tm
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"c",
|
||
|
[Categorical([1, 2, 3, 4]), Categorical([1, 2, 3, 4], categories=[1, 2, 3, 4, 5])],
|
||
|
)
|
||
|
def test_categorical_equal(c):
|
||
|
tm.assert_categorical_equal(c, c)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize("check_category_order", [True, False])
|
||
|
def test_categorical_equal_order_mismatch(check_category_order):
|
||
|
c1 = Categorical([1, 2, 3, 4], categories=[1, 2, 3, 4])
|
||
|
c2 = Categorical([1, 2, 3, 4], categories=[4, 3, 2, 1])
|
||
|
kwargs = {"check_category_order": check_category_order}
|
||
|
|
||
|
if check_category_order:
|
||
|
msg = """Categorical\\.categories are different
|
||
|
|
||
|
Categorical\\.categories values are different \\(100\\.0 %\\)
|
||
|
\\[left\\]: Int64Index\\(\\[1, 2, 3, 4\\], dtype='int64'\\)
|
||
|
\\[right\\]: Int64Index\\(\\[4, 3, 2, 1\\], dtype='int64'\\)"""
|
||
|
with pytest.raises(AssertionError, match=msg):
|
||
|
tm.assert_categorical_equal(c1, c2, **kwargs)
|
||
|
else:
|
||
|
tm.assert_categorical_equal(c1, c2, **kwargs)
|
||
|
|
||
|
|
||
|
def test_categorical_equal_categories_mismatch():
|
||
|
msg = """Categorical\\.categories are different
|
||
|
|
||
|
Categorical\\.categories values are different \\(25\\.0 %\\)
|
||
|
\\[left\\]: Int64Index\\(\\[1, 2, 3, 4\\], dtype='int64'\\)
|
||
|
\\[right\\]: Int64Index\\(\\[1, 2, 3, 5\\], dtype='int64'\\)"""
|
||
|
|
||
|
c1 = Categorical([1, 2, 3, 4])
|
||
|
c2 = Categorical([1, 2, 3, 5])
|
||
|
|
||
|
with pytest.raises(AssertionError, match=msg):
|
||
|
tm.assert_categorical_equal(c1, c2)
|
||
|
|
||
|
|
||
|
def test_categorical_equal_codes_mismatch():
|
||
|
categories = [1, 2, 3, 4]
|
||
|
msg = """Categorical\\.codes are different
|
||
|
|
||
|
Categorical\\.codes values are different \\(50\\.0 %\\)
|
||
|
\\[left\\]: \\[0, 1, 3, 2\\]
|
||
|
\\[right\\]: \\[0, 1, 2, 3\\]"""
|
||
|
|
||
|
c1 = Categorical([1, 2, 4, 3], categories=categories)
|
||
|
c2 = Categorical([1, 2, 3, 4], categories=categories)
|
||
|
|
||
|
with pytest.raises(AssertionError, match=msg):
|
||
|
tm.assert_categorical_equal(c1, c2)
|
||
|
|
||
|
|
||
|
def test_categorical_equal_ordered_mismatch():
|
||
|
data = [1, 2, 3, 4]
|
||
|
msg = """Categorical are different
|
||
|
|
||
|
Attribute "ordered" are different
|
||
|
\\[left\\]: False
|
||
|
\\[right\\]: True"""
|
||
|
|
||
|
c1 = Categorical(data, ordered=False)
|
||
|
c2 = Categorical(data, ordered=True)
|
||
|
|
||
|
with pytest.raises(AssertionError, match=msg):
|
||
|
tm.assert_categorical_equal(c1, c2)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize("obj", ["index", "foo", "pandas"])
|
||
|
def test_categorical_equal_object_override(obj):
|
||
|
data = [1, 2, 3, 4]
|
||
|
msg = f"""{obj} are different
|
||
|
|
||
|
Attribute "ordered" are different
|
||
|
\\[left\\]: False
|
||
|
\\[right\\]: True"""
|
||
|
|
||
|
c1 = Categorical(data, ordered=False)
|
||
|
c2 = Categorical(data, ordered=True)
|
||
|
|
||
|
with pytest.raises(AssertionError, match=msg):
|
||
|
tm.assert_categorical_equal(c1, c2, obj=obj)
|