Skip to content

registry

registry ¤

RegistryFunc = TypeVar('RegistryFunc') module-attribute ¤

RegistrySign = TypeVar('RegistrySign') module-attribute ¤

CompilationRuleNotFound ¤

Bases: Exception

Source code in cirkit/backend/registry.py
20
21
22
class CompilationRuleNotFound(Exception):
    def __init__(self, signature: RegistrySign):
        super().__init__(f"Compilation rule for signature '{signature}' not found")

__init__(signature) ¤

Source code in cirkit/backend/registry.py
21
22
def __init__(self, signature: RegistrySign):
    super().__init__(f"Compilation rule for signature '{signature}' not found")

CompilerRegistry ¤

Bases: Generic[RegistrySign, RegistryFunc], ABC

Source code in cirkit/backend/registry.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class CompilerRegistry(Generic[RegistrySign, RegistryFunc], ABC):
    def __init__(self, rules: dict[RegistrySign, RegistryFunc] | None = None):
        self._rules = {} if rules is None else rules

    @classmethod
    @abstractmethod
    def _validate_rule_function(cls, func: RegistryFunc) -> bool: ...

    @classmethod
    def _retrieve_signature(cls, func: RegistryFunc) -> RegistrySign:
        raise InvalidRuleSign(func.__annotations__)

    @property
    def signatures(self) -> list[RegistrySign]:
        return list(self._rules)

    def add_rule(self, func: RegistryFunc, *, signature: RegistrySign | None = None) -> None:
        if not self._validate_rule_function(func):
            raise InvalidRuleFunction(func.__annotations__)
        if signature is None:
            signature = self._retrieve_signature(func)
        self._rules[signature] = func

    def retrieve_rule(self, signature: RegistrySign) -> RegistryFunc:
        func = self._rules.get(signature, None)
        if func is not None:
            return func
        raise CompilationRuleNotFound(signature)

signatures property ¤

__init__(rules=None) ¤

Source code in cirkit/backend/registry.py
26
27
def __init__(self, rules: dict[RegistrySign, RegistryFunc] | None = None):
    self._rules = {} if rules is None else rules

add_rule(func, *, signature=None) ¤

Source code in cirkit/backend/registry.py
41
42
43
44
45
46
def add_rule(self, func: RegistryFunc, *, signature: RegistrySign | None = None) -> None:
    if not self._validate_rule_function(func):
        raise InvalidRuleFunction(func.__annotations__)
    if signature is None:
        signature = self._retrieve_signature(func)
    self._rules[signature] = func

retrieve_rule(signature) ¤

Source code in cirkit/backend/registry.py
48
49
50
51
52
def retrieve_rule(self, signature: RegistrySign) -> RegistryFunc:
    func = self._rules.get(signature, None)
    if func is not None:
        return func
    raise CompilationRuleNotFound(signature)

InvalidRuleFunction ¤

Bases: Exception

Source code in cirkit/backend/registry.py
15
16
17
class InvalidRuleFunction(Exception):
    def __init__(self, annotations: dict[str, type]):
        super().__init__(f"Invalid Compilation rule function with annotations '{annotations}'")

__init__(annotations) ¤

Source code in cirkit/backend/registry.py
16
17
def __init__(self, annotations: dict[str, type]):
    super().__init__(f"Invalid Compilation rule function with annotations '{annotations}'")

InvalidRuleSign ¤

Bases: Exception

Source code in cirkit/backend/registry.py
 8
 9
10
11
12
class InvalidRuleSign(Exception):
    def __init__(self, annotations: dict[str, type]):
        super().__init__(
            f"Cannot extract rule signature from function with annotations '{annotations}"
        )

__init__(annotations) ¤

Source code in cirkit/backend/registry.py
 9
10
11
12
def __init__(self, annotations: dict[str, type]):
    super().__init__(
        f"Cannot extract rule signature from function with annotations '{annotations}"
    )