def test_or(schema, file):
    assert not InclusiveMetricsEvaluator(schema,
                                         Expressions.or_(Expressions.less_than("id", 5),
                                                         Expressions.greater_than_or_equal("id", 80))).eval(file)
    assert InclusiveMetricsEvaluator(schema,
                                     Expressions.or_(Expressions.less_than("id", 5),
                                                     Expressions.greater_than_or_equal("id", 60))).eval(file)
def test_or(strict_schema, strict_file):
    assert not StrictMetricsEvaluator(strict_schema,
                                      Expressions.or_(Expressions.less_than("id", 5),
                                                      Expressions.greater_than_or_equal("id", 80))).eval(strict_file)
    assert not StrictMetricsEvaluator(strict_schema,
                                      Expressions.or_(Expressions.less_than("id", 5),
                                                      Expressions.greater_than_or_equal("id", 60))).eval(strict_file)
    assert StrictMetricsEvaluator(strict_schema,
                                  Expressions.or_(Expressions.less_than("id", 5),
                                                  Expressions.greater_than_or_equal("id", 30))).eval(strict_file)
def test_multiple_references(assert_all_bound):
    expr = Expressions.or_(
        Expressions.and_(Expressions.equal("x", 7),
                         Expressions.less_than("y", 100)),
        Expressions.greater_than("z", -100))

    assert_all_bound("Multiple references", Binder.bind(STRUCT, expr))
示例#4
0
def test_precedence_with_between():
    expected_expr = Expressions.or_(
        Expressions.and_(Expressions.greater_than_or_equal("col_a", 1),
                         Expressions.less_than_or_equal("col_a", 2)),
        Expressions.equal("col_c", 3))

    conv_expr = Expressions.convert_string_to_expr(
        "col_a between 1 and 2 or col_c=3")
    assert expected_expr == conv_expr
示例#5
0
def test_precedence_explicit():
    expected_expr = Expressions.and_(
        Expressions.equal("col_a", 1),
        Expressions.or_(Expressions.equal("col_b", 2),
                        Expressions.equal("col_c", 3)))

    conv_expr = Expressions.convert_string_to_expr(
        "col_a=1 and (col_b=2 or col_c=3)")
    assert expected_expr == conv_expr
示例#6
0
def test_precedence_opposite_order():
    expected_expr = Expressions.or_(
        Expressions.and_(Expressions.equal("col_a", 1),
                         Expressions.equal("col_b", 2)),
        Expressions.equal("col_c", 3))

    conv_expr = Expressions.convert_string_to_expr(
        "col_a=1 and col_b=2 or col_c=3")
    assert expected_expr == conv_expr
示例#7
0
def test_complex_expansion():
    expected_expr = Expressions.or_(
        Expressions.and_(
            Expressions.equal("a", 1),
            Expressions.and_(Expressions.equal("b", 2),
                             Expressions.not_equal("c", 3))),
        Expressions.is_null("d"))
    conv_expr = Expressions.convert_string_to_expr(
        "(a=1 and b=2 and c<>3) or d is null")
    assert expected_expr == conv_expr
def test_or(assert_all_bound, assert_and_unwrap):
    expr = Expressions.or_(Expressions.greater_than("z", -100),
                           Expressions.less_than("y", 100))
    bound_expr = Binder.bind(STRUCT, expr)
    assert_all_bound("Or", bound_expr)

    or_ = assert_and_unwrap(bound_expr, Or)

    left = assert_and_unwrap(or_.left, None)
    # should bind z correctly
    assert 2 == left.ref.field_id
    right = assert_and_unwrap(or_.right, None)
    # should bind y correctly
    assert 1 == right.ref.field_id
def test_complex_expr():
    expr = Expressions.or_(
        Expressions.and_(Expressions.greater_than('a', 1),
                         Expressions.equal("b", "US")),
        Expressions.equal("c", True))

    translated_dataset_filter = get_dataset_filter(expr, {
        'a': 'a',
        'b': 'b',
        'c': 'c'
    })
    dataset_filter = (((ds.field("a") > 1) & (ds.field("b") == "US")) |
                      (ds.field("c") == True))  # noqa: E712
    assert dataset_filter.equals(translated_dataset_filter)
def test_basic_simplification(assert_and_unwrap):
    # Should simplify or expression to alwaysTrue
    assert Expressions.always_true() == Binder.bind(
        STRUCT,
        Expressions.or_(Expressions.less_than("y", 100),
                        Expressions.greater_than("z", -9999999999)))
    # Should simplify or expression to alwaysfalse
    assert Expressions.always_false() == Binder.bind(
        STRUCT,
        Expressions.and_(Expressions.less_than("y", 100),
                         Expressions.less_than("z", -9999999999)))

    bound = Binder.bind(
        STRUCT,
        Expressions.not_(Expressions.not_(Expressions.less_than("y", 100))))
    pred = assert_and_unwrap(bound, None)
    assert 1 == pred.ref.field_id
示例#11
0
def test_or():
    expected_expr = Expressions.or_(Expressions.equal("col_a", 1),
                                    Expressions.equal("col_b", 2))
    conv_expr = Expressions.convert_string_to_expr("col_a=1 or col_b=2")
    assert expected_expr == conv_expr
示例#12
0
@pytest.fixture(scope="session",
                params=[
                    Expressions.always_false(),
                    Expressions.always_true(),
                    Expressions.less_than("x", 5),
                    Expressions.less_than_or_equal("y", -3),
                    Expressions.greater_than("z", 0),
                    Expressions.greater_than_or_equal("t", 129),
                    Expressions.equal("col", "data"),
                    Expressions.not_equal("col", "abc"),
                    Expressions.not_null("maybeNull"),
                    Expressions.is_null("maybeNull2"),
                    Expressions.not_(Expressions.greater_than("a", 10)),
                    Expressions.and_(Expressions.greater_than_or_equal("a", 0),
                                     Expressions.less_than("a", 3)),
                    Expressions.or_(Expressions.less_than("a", 0),
                                    Expressions.greater_than("a", 10)),
                    Expressions.equal("a", 5).bind(exp_schema.as_struct())
                ])
def expression(request):
    yield request.param


@pytest.fixture(scope="session",
                params=[
                    Expressions.less_than("no_stats", 5),
                    Expressions.less_than_or_equal("no_stats", 30),
                    Expressions.equal("no_stats", 70),
                    Expressions.greater_than("no_stats", 78),
                    Expressions.greater_than_or_equal("no_stats", 90),
                    Expressions.not_equal("no_stats", 101),
                    Expressions.is_null("no_stats"),
def test_or(inc_man_spec, inc_man_file, expr1, expr2, expected):
    assert InclusiveManifestEvaluator(inc_man_spec, Expressions.or_(expr1, expr2)).eval(inc_man_file) == expected