def test_logical(): a = pa.array([True, False, False, None]) b = pa.array([True, True, False, True]) assert pc.and_(a, b) == pa.array([True, False, False, None]) assert pc.and_kleene(a, b) == pa.array([True, False, False, None]) assert pc.or_(a, b) == pa.array([True, True, False, None]) assert pc.or_kleene(a, b) == pa.array([True, True, False, True]) assert pc.xor(a, b) == pa.array([False, True, False, None]) assert pc.invert(a) == pa.array([False, True, True, None])
"gt": pc.greater, "le": pc.less_equal, "ge": pc.greater_equal, } ARROW_LOGICAL_FUNCS = { "and": NotImplemented if pa_version_under2p0 else pc.and_kleene, "rand": NotImplemented if pa_version_under2p0 else lambda x, y: pc.and_kleene(y, x), "or": NotImplemented if pa_version_under2p0 else pc.or_kleene, "ror": NotImplemented if pa_version_under2p0 else lambda x, y: pc.or_kleene(y, x), "xor": NotImplemented if pa_version_under2p0 else pc.xor, "rxor": NotImplemented if pa_version_under2p0 else lambda x, y: pc.xor(y, x), } def cast_for_truediv(arrow_array: pa.ChunkedArray, pa_object: pa.Array | pa.Scalar) -> pa.ChunkedArray: # Ensure int / int -> float mirroring Python/Numpy behavior # as pc.divide_checked(int, int) -> int if pa.types.is_integer(arrow_array.type) and pa.types.is_integer( pa_object.type): return arrow_array.cast(pa.float64()) return arrow_array