예제 #1
0
파일: test_tz.py 프로젝트: chmp/flowly
def test_update_dict():
    transform = itemsetter(
        dict(a=chained(op.itemgetter('i'), lambda x: 2 * x)),
        b=chained(op.itemgetter('i'), lambda x: 3 * x),
    )

    assert transform(dict(i=4)) == dict(i=4, a=8, b=12)
예제 #2
0
def test_checkpoints__rewrites():
    """
    Test that only parts that were changed are executed if a pipeline is
    changed.
    """
    _checkpoints = {}
    calls = {}

    transform = chained(
        _count(calls, 'step 1', lambda x: x * 2),
        checkpoint(target=_checkpoints),
        _count(calls, 'step 2', lambda x: x - 3),
        checkpoint(target=_checkpoints),
        _count(calls, 'step 3', lambda x: x),
    )

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 1, 'step 2': 1, 'step 3': 1}

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 1, 'step 2': 1, 'step 3': 2}

    transform = chained(
        _count(calls, 'step 1', lambda x: x * 2),
        checkpoint(target=_checkpoints),
        _count(calls, 'alt-step 2', lambda x: x),
        checkpoint(target=_checkpoints),
        _count(calls, 'step 3', lambda x: x),
    )

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 10
    assert calls == {'step 1': 1, 'step 2': 1, 'alt-step 2': 1, 'step 3': 3}

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 10
    assert calls == {'step 1': 1, 'step 2': 1, 'alt-step 2': 1, 'step 3': 4}
예제 #3
0
파일: test_tz.py 프로젝트: chmp/flowly
def test_chained__example_iter():
    transform = chained(*chained(
        lambda a: 2 * a,
        lambda a: a - 3
    ))

    assert transform(5) == 7
예제 #4
0
def test_update_dict():
    transform = itemsetter(
        dict(a=chained(op.itemgetter('i'), lambda x: 2 * x)),
        b=chained(op.itemgetter('i'), lambda x: 3 * x),
    )

    assert transform(dict(i=4)) == dict(i=4, a=8, b=12)
예제 #5
0
def test_checkpoints__rewrites():
    """
    Test that only parts that were changed are executed if a pipeline is
    changed.
    """
    _checkpoints = {}
    calls = {}

    transform = chained(
        _count(calls, 'step 1', lambda x: x * 2),
        checkpoint(target=_checkpoints),
        _count(calls, 'step 2', lambda x: x - 3),
        checkpoint(target=_checkpoints),
        _count(calls, 'step 3', lambda x: x),
    )

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 1, 'step 2': 1, 'step 3': 1}

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 1, 'step 2': 1, 'step 3': 2}

    transform = chained(
        _count(calls, 'step 1', lambda x: x * 2),
        checkpoint(target=_checkpoints),
        _count(calls, 'alt-step 2', lambda x: x),
        checkpoint(target=_checkpoints),
        _count(calls, 'step 3', lambda x: x),
    )

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 10
    assert calls == {'step 1': 1, 'step 2': 1, 'alt-step 2': 1, 'step 3': 3}

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 10
    assert calls == {'step 1': 1, 'step 2': 1, 'alt-step 2': 1, 'step 3': 4}
예제 #6
0
파일: test_dsk.py 프로젝트: chmp/flowly
def test_flowly_tz_update_dict():
    obj = dict(l=db.from_sequence([1, 2, 3, 4], npartitions=3))

    transform = itemsetter(
        # varargs are also allowed
        dict(max=chained(op.itemgetter('l'), max)),
        min=chained(op.itemgetter('l'), min),
        sum=chained(op.itemgetter('l'), sum),
    )

    actual = apply(transform, obj).compute()

    assert actual == dict(l=[1, 2, 3, 4], min=1, max=4, sum=10)
예제 #7
0
def test_pipeline_example():
    from functools import reduce
    import operator as op

    data = range(100)
    result1 = math.sqrt(
        reduce(
            op.add,
            builtins.map(lambda x: x**2.0,
                         builtins.filter(
                             lambda x: x % 2 == 0,
                             data,
                         ))))

    from toolz.curried import filter, map, reduce
    from flowly.tz import chained

    transform = chained(
        filter(lambda x: x % 2 == 0),
        map(lambda x: x**2.0),
        reduce(op.add),
        math.sqrt,
    )

    result2 = transform(data)

    assert result1 == result2
예제 #8
0
def test_pipeline_example():
    from functools import reduce
    import operator as op

    data = range(100)
    result1 = math.sqrt(
        reduce(
            op.add,
            builtins.map(
                lambda x: x ** 2.0,
                builtins.filter(
                    lambda x: x % 2 == 0,
                    data,
                )
            )
        )
    )

    from toolz.curried import filter, map, reduce
    from flowly.tz import chained

    transform = chained(
        filter(lambda x: x % 2 == 0),
        map(lambda x: x ** 2.0),
        reduce(op.add),
        math.sqrt,
    )

    result2 = transform(data)

    assert result1 == result2
예제 #9
0
def test_dags(executor):
    # build dags by using itemgetter and dicts
    scope = dict(
        a=db.from_sequence(range(0, 10), npartitions=3),
        b=db.from_sequence(range(10, 20), npartitions=3),
        c=db.from_sequence(range(20, 30), npartitions=3),
    )

    graph = chained(
        apply_concat([
            chained(op.itemgetter('a'), sum, seq),
            chained(op.itemgetter('b'), sum, seq),
            chained(op.itemgetter('c'), sum, seq),
        ]),
        apply_concat([
            chained(max, seq),
            chained(min, seq),
            chained(sum, seq),
        ]))

    actual = executor(graph, scope)
    assert sorted(actual) == sorted([
        sum(range(20, 30)),
        sum(range(0, 10)),
        sum(range(0, 30)),
    ])
예제 #10
0
def test_dags(executor):
    # build dags by using itemgetter and dicts
    scope = dict(
        a=db.from_sequence(range(0, 10), npartitions=3),
        b=db.from_sequence(range(10, 20), npartitions=3),
        c=db.from_sequence(range(20, 30), npartitions=3),
    )

    graph = chained(
        apply_concat([
            chained(op.itemgetter('a'), sum, seq),
            chained(op.itemgetter('b'), sum, seq),
            chained(op.itemgetter('c'), sum, seq),
        ]),
        apply_concat([
            chained(max, seq),
            chained(min, seq),
            chained(sum, seq),
        ])
    )

    actual = executor(graph, scope)
    assert sorted(actual) == sorted([
        sum(range(20, 30)),
        sum(range(0, 10)),
        sum(range(0, 30)),
    ])
예제 #11
0
def test_checkpoints__repr():
    """
    Test that only parts that were changed are executed if a pipeline is
    changed.
    """
    _checkpoints = {}
    transform = add_checkpoints(
        chained(lambda x: x * 2, checkpoint(target=_checkpoints), lambda x: x))
    repr(transform)
예제 #12
0
파일: test_dsk.py 프로젝트: chmp/flowly
def test_flowly_kv_transform__chained(executor):
    actual = executor(
        kv_transform(chained(
            map(lambda i: 2 * i),
            map(lambda i: 5 * i),
        ), ),
        [(i % 2, i) for i in range(20)],
        npartitions=10,
    )
    assert sorted(actual) == sorted([(i % 2, 10 * i) for i in range(20)])
예제 #13
0
파일: test_dsk.py 프로젝트: chmp/flowly
def test_flowly_kv_transform__collect(executor):
    actual = executor(
        chained(collect, kv_valmap(sorted)),
        [(i % 2, i) for i in [1, 2, 3, 4, 5, 6, 7]],
        npartitions=3,
    )

    assert sorted(actual) == sorted([
        (0, [2, 4, 6]),
        (1, [1, 3, 5, 7]),
    ])
예제 #14
0
def test_checkpoints__repr():
    """
    Test that only parts that were changed are executed if a pipeline is
    changed.
    """
    _checkpoints = {}
    transform = add_checkpoints(chained(
        lambda x: x * 2,
        checkpoint(target=_checkpoints),
        lambda x: x
    ))
    repr(transform)
예제 #15
0
def test_checkpoints__single_no_rewrite():
    _checkpoints = {}
    calls = {}

    transform = chained(_count(calls, 'step 1', lambda x: x * 2),
                        checkpoint(target=_checkpoints),
                        _count(calls, 'step 2', lambda x: x - 3))

    assert apply(transform, 5) == 7
    assert calls == {'step 1': 1, 'step 2': 1}

    assert apply(transform, 5) == 7
    assert calls == {'step 1': 2, 'step 2': 2}
예제 #16
0
파일: test_dsk.py 프로젝트: chmp/flowly
def test_checkpoint__not_rewritten():
    """checkpoints are currently ignored.
    """
    _checkpoints = {}

    transform = chained(
        map(lambda x: x * 2),
        checkpoint(target=_checkpoints),
        map(lambda x: x - 3),
    )

    seq = [1, 2, 3, 4, 5]
    actual = apply_to_local(transform, seq, npartitions=3)
    assert actual == [-1, 1, 3, 5, 7]
예제 #17
0
def test_checkpoints__single_no_rewrite():
    _checkpoints = {}
    calls = {}

    transform = chained(
        _count(calls, 'step 1', lambda x: x * 2),
        checkpoint(target=_checkpoints),
        _count(calls, 'step 2', lambda x: x - 3)
    )

    assert apply(transform, 5) == 7
    assert calls == {'step 1': 1, 'step 2': 1}

    assert apply(transform, 5) == 7
    assert calls == {'step 1': 2, 'step 2': 2}
예제 #18
0
def test_checkpoints__single():
    _checkpoints = {}
    calls = {}

    transform = chained(_count(calls, 'step 1', lambda x: x * 2),
                        checkpoint(target=_checkpoints),
                        _count(calls, 'step 2', lambda x: x - 3))

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 1, 'step 2': 1}

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 1, 'step 2': 2}

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 1, 'step 2': 3}

    _checkpoints.clear()

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 2, 'step 2': 4}
예제 #19
0
def test_checkpoints__single():
    _checkpoints = {}
    calls = {}

    transform = chained(
        _count(calls, 'step 1', lambda x: x * 2),
        checkpoint(target=_checkpoints),
        _count(calls, 'step 2', lambda x: x - 3)
    )

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 1, 'step 2': 1}

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 1, 'step 2': 2}

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 1, 'step 2': 3}

    _checkpoints.clear()

    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
    assert calls == {'step 1': 2, 'step 2': 4}
예제 #20
0
파일: test_tz.py 프로젝트: chmp/flowly
def test_chained__composition():
    transform = chained(lambda a: a * 2) + chained(lambda a: a - 3)
    assert transform(5) == 7
예제 #21
0
def test_checkpoints__no_checkpoints():
    transform = chained(lambda x: x * 2, lambda x: x - 3)
    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
예제 #22
0
def test_checkpoints__no_checkpoints():
    transform = chained(lambda x: x * 2, lambda x: x - 3)
    assert apply(transform, 5, rewrites=[add_checkpoints]) == 7
예제 #23
0
파일: test_dsk.py 프로젝트: chmp/flowly
def test_flowly_tz_chained(executor):
    actual = executor(chained(it.chain.from_iterable, sum),
                      [[1, 2, 3], [4, 5, 6], [7, 8, 9]],
                      npartitions=3)

    assert actual == sum(range(1, 10))
예제 #24
0
def test_checkpoints__empty():
    transform = chained()
    assert apply(transform, 5, rewrites=[add_checkpoints]) == 5
예제 #25
0
def test_chained__repr():
    repr(chained(lambda a: 2 * a, lambda a: a - 3))
예제 #26
0
def test_chained__composition():
    transform = chained(lambda a: a * 2) + chained(lambda a: a - 3)
    assert transform(5) == 7
예제 #27
0
def test_checkpoints__empty():
    transform = chained()
    assert apply(transform, 5, rewrites=[add_checkpoints]) == 5
예제 #28
0
파일: test_tz.py 프로젝트: chmp/flowly
def test_chained__hash():
    hash_1 = functional_hash(chained(lambda a: 2 * a, lambda a: a - 3))
    hash_2 = functional_hash(chained(lambda a: 2 * a, lambda a: a - 3))

    assert hash_1 == hash_2
예제 #29
0
def test_chained__example_iter():
    transform = chained(*chained(lambda a: 2 * a, lambda a: a - 3))

    assert transform(5) == 7
예제 #30
0
파일: test_tz.py 프로젝트: chmp/flowly
def test_chained__repr():
    repr(chained(
        lambda a: 2 * a,
        lambda a: a - 3
    ))
예제 #31
0
def test_chained__hash():
    hash_1 = functional_hash(chained(lambda a: 2 * a, lambda a: a - 3))
    hash_2 = functional_hash(chained(lambda a: 2 * a, lambda a: a - 3))

    assert hash_1 == hash_2