59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
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():
 | 
						|
    return pd.array(
 | 
						|
        [True, False] * 4 + [np.nan] + [True, False] * 44 + [np.nan] + [True, False],
 | 
						|
        dtype="boolean",
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def dtype():
 | 
						|
    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")
 | 
						|
        )
 |