Пример #1
0
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])
Пример #2
0
        "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