def test_nested_2(dictionary=nested_dictionary):
    rule = df.Rule((('m', ), df.Not(('M', )), df.Not(('rr', )), df.All()))
    queries = set(df.expand_rule(rule, dictionary))
    queries0 = set([('m', 'MM', 'iii', 'kkkk'), ('m', 'MM', 'iii', 'uuuu'),
                    ('m', 'RR', 'iii', 'kkkk'), ('m', 'II', 'ooo', 'ssss'),
                    ('m', 'II', 'ooo', 'llll')])
    assert queries == queries0, queries
def test_nested_lambda2(dictionary=nested_dictionary):

    pattern = re.compile('^ssss$')
    want = lambda key, pattern=pattern: pattern.match(key) is not None
    rule = df.Rule(
        (df.All(), (lambda key: len(key) == 2, ), df.All(), (want, )))

    queries = set(df.expand_rule(rule, dictionary))
    queries0 = set([('m', 'II', 'ooo', 'ssss')])
    assert queries == queries0, (queries, queries0)
def test_nested_4(dictionary=nested_dictionary):
    rule = df.Rule((('m', ), ('MM', 'II'), df.All()))
    queries = set(df.expand_rule(rule, dictionary))
    queries0 = set([('m', 'MM', 'iii'), ('m', 'MM', 'rrr'), ('m', 'MM', 'ooo'),
                    ('m', 'II', 'rrr'), ('m', 'II', 'ooo')])
    assert queries == queries0, queries
def test_simple_single(dictionary=dictionary):
    rule = df.Rule((('m', ), ))
    queries = set(df.expand_rule(rule, dictionary))
    print(queries)
    queries0 = set([('m', )])
    assert queries == queries0, (queries, queries0)
def test_fhi_report(data=data):
    data = df.fhi_filter_dict(data)
    # We can find all keys
    for key in chain(*[df.expand_rule(data, r) for r in df.FHI_RULES]):
        df.nested_get(data, key)
    assert True
def test_simple_all(dictionary=dictionary):
    rule = df.Rule((df.All(), ))
    queries = set(df.expand_rule(rule, dictionary))
    print(queries)
    queries0 = set([('m', ), ('i', ), ('r', ), ('o', )])
    assert queries == queries0, queries
def test_nested_lambda(dictionary=nested_dictionary):
    rule = df.Rule((df.All(), (lambda key: len(key) == 2, )))

    queries = set(df.expand_rule(rule, dictionary))
    queries0 = set([('m', 'MM'), ('m', 'II'), ('m', 'RR')])
    assert queries == queries0, queries
def test_nested_8(dictionary=nested_dictionary):
    # Empty one
    rule = df.Rule(('aa', ))
    queries = set(df.expand_rule(rule, dictionary))
    assert not queries
def test_nested_7(dictionary=nested_dictionary):
    # Empty one
    rule = df.Rule((df.All(), df.All(), df.All(), df.All(), ('ssss', )))
    queries = set(df.expand_rule(rule, dictionary))
    assert not queries
def test_nested_6(dictionary=nested_dictionary):
    rule = df.Rule((df.All(), ('MM', 'RR'), df.All(), ('kkkk', 'uuuu')))
    queries = set(df.expand_rule(rule, dictionary))
    queries0 = set([('m', 'MM', 'iii', 'kkkk'), ('m', 'MM', 'iii', 'uuuu'),
                    ('m', 'RR', 'iii', 'kkkk')])
    assert queries == queries0, queries
def test_nested_5(dictionary=nested_dictionary):
    # Four level where last is 's'
    rule = df.Rule((df.All(), df.All(), df.All(), ('ssss', )))
    queries = set(df.expand_rule(rule, dictionary))
    queries0 = set([('m', 'II', 'ooo', 'ssss')])
    assert queries == queries0, queries