123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import numpy as np
- import pytest
- import pandas as pd
- import pandas._testing as tm
- from pandas.arrays import BooleanArray
- from pandas.tests.arrays.masked_shared import ComparisonOps
- @pytest.fixture
- def data():
- """Fixture returning boolean array with valid and missing data"""
- return pd.array(
- [True, False] * 4 + [np.nan] + [True, False] * 44 + [np.nan] + [True, False],
- dtype="boolean",
- )
- @pytest.fixture
- def dtype():
- """Fixture returning BooleanDtype"""
- return pd.BooleanDtype()
- class TestComparisonOps(ComparisonOps):
- def test_compare_scalar(self, data, comparison_op):
- self._compare_other(data, comparison_op, True)
- def test_compare_array(self, data, comparison_op):
- other = pd.array([True] * len(data), dtype="boolean")
- self._compare_other(data, comparison_op, other)
- other = np.array([True] * len(data))
- self._compare_other(data, comparison_op, other)
- other = pd.Series([True] * len(data))
- self._compare_other(data, comparison_op, other)
- @pytest.mark.parametrize("other", [True, False, pd.NA])
- def test_scalar(self, other, comparison_op, dtype):
- ComparisonOps.test_scalar(self, other, comparison_op, dtype)
- def test_array(self, comparison_op):
- op = comparison_op
- a = pd.array([True] * 3 + [False] * 3 + [None] * 3, dtype="boolean")
- b = pd.array([True, False, None] * 3, dtype="boolean")
- result = op(a, b)
- values = op(a._data, b._data)
- mask = a._mask | b._mask
- expected = BooleanArray(values, mask)
- tm.assert_extension_array_equal(result, expected)
- # ensure we haven't mutated anything inplace
- result[0] = None
- tm.assert_extension_array_equal(
- a, pd.array([True] * 3 + [False] * 3 + [None] * 3, dtype="boolean")
- )
- tm.assert_extension_array_equal(
- b, pd.array([True, False, None] * 3, dtype="boolean")
- )
|