def test_merge_modes(): for x, y in [({1, 2}, {3, 4}), ([1, 2], [3, 4]), ((1, 2), (3, 4))]: assert merge(x, y, mode="reset") == y assert merge(x, Reset(y)) == y assert merge(x, Reset(y), mode="merge") == y assert merge(x, y, mode="override") == y assert merge(x, Override(y)) == y assert merge(x, Override(y), mode="merge") == y a = {"a": 1} b = {"b": 2} c = {"a": 1, "b": 2} assert merge(a, b, mode="reset") == b assert merge(a, b, mode="override") == c a = {"a": [1, 2], "b": [3, 4]} b = {"a": [5, 6], "b": Override([7, 8])} c = {"a": [1, 2, 5, 6], "b": [7, 8]} d = {"a": [5, 6], "b": [7, 8]} assert merge(a, b) == c assert merge(a, b, mode="override") == d a = {"a": [1, 2]} assert merge(a, Merge(a=[3, 4])) == {"a": [1, 2, 3, 4]}
def test_Pipeline_configure(op_pipeline): pdef = op_pipeline pip = pdef.configure(addp=Merge(param=2)).make() assert pip(value=3) == {'value': 100} pip = pdef.configure({'addp.param': 2}).make() assert pip(value=3) == {'value': 100} pip = pdef.configure({ 'addp.param': 2 }, addp=Merge(op=lambda p, x: p - x)).make() assert pip(value=3) == {'value': 4} pip = pdef.configure(addp=Reset(op=lambda p, x: p - x, param=2)).make() assert pip(value=3) == {'value': 4} with pytest.raises(TypeError): pdef.configure(addp=Reset(param=2)).make() pip = pdef.configure(mulp=False).make() assert pip(value=3) == {'value': 16} with pytest.raises(KeyError): pip = pdef.configure(mulp=False).configure(mulp=True).make() pip = pdef.configure(mulp=False).configure(addp=False).make() assert pip(value=3) == {'value': 9} with pytest.raises(KeyError): pdef.configure(quack=[1, 2])
def test_merge_modes(): for x, y in [({1, 2}, {3, 4}), ([1, 2], [3, 4]), ((1, 2), (3, 4))]: assert merge(x, y, mode='reset') == y assert merge(x, Reset(y)) == y assert merge(x, Reset(y), mode='merge') == y assert merge(x, y, mode='override') == y assert merge(x, Override(y)) == y assert merge(x, Override(y), mode='merge') == y a = {'a': 1} b = {'b': 2} c = {'a': 1, 'b': 2} assert merge(a, b, mode='reset') == b assert merge(a, b, mode='override') == c a = {'a': [1, 2], 'b': [3, 4]} b = {'a': [5, 6], 'b': Override([7, 8])} c = {'a': [1, 2, 5, 6], 'b': [7, 8]} d = {'a': [5, 6], 'b': [7, 8]} assert merge(a, b) == c assert merge(a, b, mode='override') == d
def test_Pipeline_configure(op_pipeline): pdef = op_pipeline pip = pdef.configure(addp=Merge(param=2)).make() assert pip(value=3) == {'value': 100} pip = pdef.configure({'addp.param': 2}).make() assert pip(value=3) == {'value': 100} pip = pdef.configure( {'addp.param': 2}, addp=Merge(op=lambda p, x: p - x) ).make() assert pip(value=3) == {'value': 4} pip = pdef.configure(addp=Reset(op=lambda p, x: p - x, param=2)).make() assert pip(value=3) == {'value': 4} with pytest.raises(TypeError): pdef.configure(addp=Reset(param=2)).make() pip = pdef.configure(mulp=False).make() assert pip(value=3) == {'value': 16} pip = pdef.configure(mulp=False).configure(mulp=True).make() assert pip(value=3) == {'value': 64} pip = pdef.configure(mulp=False).configure(addp=False).make() assert pip(value=3) == {'value': 9} pip = pdef.configure(param=3).make() assert pip(value=3) == {'value': 144} with pytest.raises(KeyError): pdef.configure(quack=[1, 2]) pdef2 = pdef.configure_resources(quack=[1, 2]) assert pdef2.make().resources.quack == [1, 2] assert pdef2.configure(quack=Merge([3])).make().resources.quack \ == [1, 2, 3] assert pdef2.configure(quack=[3]).make().resources.quack == [3]
def test_Partial(): def f(x, y): return x + y p1 = Partial(f, x=10) p2 = Partial(f, y=20) assert p1(y=3) == 13 assert p2(x=3) == 23 assert merge(p1, p2)() == 30 assert merge(p1, {'y': 20})() == 30 with pytest.raises(TypeError): Partial(f, z=10) p3 = Reset(Partial(f, y=20)) with pytest.raises(TypeError): merge(p1, p3)() p4 = Partial(f, x=[1, 2]) p5 = Partial(f, x=[3, 4]) assert merge(p4, p5)(y=[10]) == [1, 2, 3, 4, 10] assert merge(p5, p4)(y=[10]) == [3, 4, 1, 2, 10] p6 = Override(Partial(f, x=[3, 4])) assert merge(p4, p6)(y=[10]) == [3, 4, 10] def g(x, y): return x * y p7 = Partial(g, y=20) with pytest.raises(ValueError): merge(p1, p7) p8 = Override(Partial(g, y=20)) assert merge(p1, p8)() == 200 def h(**kw): return kw p9 = Partial(h, x=10) assert p9(y=20, z=30) == dict(x=10, y=20, z=30) str(p9), repr(p9)