コード例 #1
0
ファイル: registry.py プロジェクト: ordabayevy/funsor
    def register(self, key, *types):
        key = getattr(key, "__origin__", key)
        register = self.registry[key].register
        if self.default:
            objects = (object,) * len(types)
            try:
                if objects != types and supercedes(types, objects):
                    register(*objects)(self.default)
            except TypeError:
                pass  # mysterious source of ambiguity in Python 3.5 breaks this

        # This decorator supports stacking multiple decorators, which is not
        # supported by multipledipatch (which returns a Dispatch object rather
        # than the original function).
        def decorator(fn):
            register(*types)(fn)
            return fn

        return decorator
コード例 #2
0
def test_supercedes():
    assert supercedes([B], [A])
    assert supercedes([B, A], [A, A])
    assert not supercedes([B, A], [A, B])
    assert not supercedes([A], [B])
コード例 #3
0
def _test_supercedes(a, b):
    assert supercedes(a, b)
    assert not supercedes(b, a)
コード例 #4
0
def test_supercedes():
    assert supercedes([B], [A])
    assert supercedes([B, A], [A, A])
    assert not supercedes([B, A], [A, B])
    assert not supercedes([A], [B])