def test_expression(): a = ds.ScalarExpression(1) b = ds.ScalarExpression(1.1) c = ds.ScalarExpression(True) d = ds.ScalarExpression("string") e = ds.ScalarExpression(None) equal = ds.ComparisonExpression(ds.CompareOperator.Equal, a, b) greater = a > b assert equal.op == ds.CompareOperator.Equal and_ = ds.AndExpression(a, b) assert and_.left_operand.equals(a) assert and_.right_operand.equals(b) assert and_.equals(ds.AndExpression(a, b)) assert and_.equals(and_) or_ = ds.OrExpression(a, b) not_ = ds.NotExpression(ds.OrExpression(a, b)) is_valid = ds.IsValidExpression(a) cast_safe = ds.CastExpression(a, pa.int32()) cast_unsafe = ds.CastExpression(a, pa.int32(), safe=False) in_ = ds.InExpression(a, pa.array([1, 2, 3])) assert is_valid.operand == a assert in_.set_.equals(pa.array([1, 2, 3])) assert cast_unsafe.to == pa.int32() assert cast_unsafe.safe is False assert cast_safe.safe is True condition = ds.ComparisonExpression(ds.CompareOperator.Greater, ds.FieldExpression('i64'), ds.ScalarExpression(5)) schema = pa.schema( [pa.field('i64', pa.int64()), pa.field('f64', pa.float64())]) assert condition.validate(schema) == pa.bool_() i64_is_5 = ds.ComparisonExpression(ds.CompareOperator.Equal, ds.FieldExpression('i64'), ds.ScalarExpression(5)) i64_is_7 = ds.ComparisonExpression(ds.CompareOperator.Equal, ds.FieldExpression('i64'), ds.ScalarExpression(7)) assert condition.assume(i64_is_5).equals(ds.ScalarExpression(False)) assert condition.assume(i64_is_7).equals(ds.ScalarExpression(True)) assert str(condition) == "(i64 > 5:int64)" assert "(i64 > 5:int64)" in repr(condition) all_exprs = [ a, b, c, d, e, equal, greater, and_, or_, not_, is_valid, cast_unsafe, cast_safe, in_, condition, i64_is_5, i64_is_7 ] for expr in all_exprs: restored = pickle.loads(pickle.dumps(expr)) assert expr.equals(restored)
def test_expression(): a = ds.ScalarExpression(1) b = ds.ScalarExpression(1.1) c = ds.ScalarExpression(True) d = ds.ScalarExpression("string") equal = ds.ComparisonExpression(ds.CompareOperator.Equal, a, b) assert equal.op() == ds.CompareOperator.Equal and_ = ds.AndExpression(a, b) assert and_.left_operand.equals(a) assert and_.right_operand.equals(b) assert and_.equals(ds.AndExpression(a, b)) assert and_.equals(and_) ds.AndExpression(a, b, c) ds.OrExpression(a, b) ds.OrExpression(a, b, c, d) ds.NotExpression(ds.OrExpression(a, b, c)) ds.IsValidExpression(a) ds.CastExpression(a, pa.int32()) ds.CastExpression(a, pa.int32(), safe=True) ds.InExpression(a, pa.array([1, 2, 3])) condition = ds.ComparisonExpression( ds.CompareOperator.Greater, ds.FieldExpression('i64'), ds.ScalarExpression(5) ) schema = pa.schema([ pa.field('i64', pa.int64()), pa.field('f64', pa.float64()) ]) assert condition.validate(schema) == pa.bool_() i64_is_5 = ds.ComparisonExpression( ds.CompareOperator.Equal, ds.FieldExpression('i64'), ds.ScalarExpression(5) ) i64_is_7 = ds.ComparisonExpression( ds.CompareOperator.Equal, ds.FieldExpression('i64'), ds.ScalarExpression(7) ) assert condition.assume(i64_is_5).equals(ds.ScalarExpression(False)) assert condition.assume(i64_is_7).equals(ds.ScalarExpression(True)) assert str(condition) == "(i64 > 5:int64)" assert "(i64 > 5:int64)" in repr(condition)