Source code for sax.backends

""" SAX Backends """

from __future__ import annotations

import warnings
from typing import Any, Dict

from ..netlist import Component
from ..saxtypes import Model, SType
from .additive import (
    analyze_circuit_additive,
    analyze_instances_additive,
    evaluate_circuit_additive,
)
from .filipsson_gunnar import (
    analyze_circuit_fg,
    analyze_instances_fg,
    evaluate_circuit_fg,
)

circuit_backends = {
    "fg": (
        analyze_instances_fg,
        analyze_circuit_fg,
        evaluate_circuit_fg,
    ),
    "filipsson_gunnar": (
        analyze_instances_fg,
        analyze_circuit_fg,
        evaluate_circuit_fg,
    ),
    "additive": (
        analyze_instances_additive,
        analyze_circuit_additive,
        evaluate_circuit_additive,
    ),
}

try:
    from .klu import analyze_circuit_klu, analyze_instances_klu, evaluate_circuit_klu

    circuit_backends["klu"] = (
        analyze_instances_klu,
        analyze_circuit_klu,
        evaluate_circuit_klu,
    )
    circuit_backends["default"] = (
        analyze_instances_klu,
        analyze_circuit_klu,
        evaluate_circuit_klu,
    )
except ImportError:
    circuit_backends["default"] = (
        analyze_instances_fg,
        analyze_circuit_fg,
        evaluate_circuit_fg,
    )
    warnings.warn(
        "klujax not found. Please install klujax for "
        "better performance during circuit evaluation!"
    )


[docs]def analyze_instances( instances: Dict[str, Component], models: Dict[str, Model], ) -> Any: return circuit_backends["default"][0](instances, models)
[docs]def analyze_circuit( analyzed_instances: Any, connections: Dict[str, str], ports: Dict[str, str], ) -> Any: return circuit_backends["default"][1](analyzed_instances, connections, ports)
[docs]def evaluate_circuit( analyzed: Any, instances: Dict[str, SType], ) -> SType: return circuit_backends["default"][2](analyzed, instances)