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_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_merge_registry(): a = Registry() a.update(dict(a=1, b=2, c=3)) b = Registry() b.update(dict(d=4)) c = Registry() c.update(dict(a=1, b=2, c=3, d=4)) assert merge(a, b) == c assert type(merge(a, b)) is Registry
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)
def resolve_options( *option_dicts, read_argv=True, read_config=True, rest_target="--fn" ): options = {} for o in option_dicts: options = merge(options, o) if read_argv: options = merge(options, docopt(__doc__)) if read_config: while True: configs = resolve( options["--config"], default_modules=[cfg], always_wrap=False ) options["--config"] = [] if not configs: break for config in configs: options = merge(config, options) return options
def test_Partial_class(): class C: def __init__(self, x, y): self.x = x self.y = y def __call__(self): return self.x + self.y p1 = Partial(C, x=10) p2 = Partial(C, y=20) assert p1(y=3)() == 13 assert p2(x=3)() == 23 assert merge(p1, p2)()() == 30 with pytest.raises(TypeError): Partial(C, z=10)
def test_merge(): assert merge(1, 2) == 2 assert merge([1, 2], [3, 4]) == [1, 2, 3, 4] assert merge((1, 2), (3, 4)) == (1, 2, 3, 4) assert merge({1, 2}, {3, 4}) == {1, 2, 3, 4} a = dict(a=1, b=2, c=dict(d=3, e=[4, 5])) b = dict(a=1, b=2, c=dict(e=[6, 7], f=8)) c = dict(a=1, b=2, c=dict(d=3, e=[4, 5, 6, 7], f=8)) assert merge(a, b) == c dlt = dict(c=DELETE, d=3) assert merge(a, dlt) == dict(a=1, b=2, d=3)
def __call__(self, *args, **kwargs): """Create a MyiaFunctionTest.""" kwargs = merge(self.spec, kwargs) kwargs["args"] = args return MyiaFunctionTest(self.runtest, kwargs)
def configure(self, **spec): """Configure the factory with more kwargs.""" return MyiaFunctionTestFactory(self.runtest, merge(self.spec, spec))
def test_merge_subclass(): tm = TypeMap({int: "int"}) mtm = merge(tm, {str: "str"}) assert isinstance(mtm, TypeMap) assert mtm == TypeMap({int: "int", str: "str"})