Source code for jitxlib.voltage_divider.circuit

import warnings
from typing import Optional

from jitx.circuit import Circuit
from jitx.net import Net, Port
from jitx.toleranced import Toleranced
from jitxlib.parts import Resistor

from .solver import VoltageDividerSolution, solve
from .constraints import VoltageDividerConstraints
from .inverse import InverseDividerConstraints


[docs] class VoltageDividerCircuit(Circuit): """ Circuit for a voltage divider solution. Ports: hi, out, lo Instances: r_hi, r_lo """ hi: Port out: Port lo: Port r_hi: Resistor r_lo: Resistor nets: list[Net] output_voltage: Toleranced def __init__(self, sol: VoltageDividerSolution): # Ports self.hi = Port() self.out = Port() self.lo = Port() # Resistor instances, instantiated from the solver's pinned queries via # the public parts factory (safe under active instantiation). self.r_hi = Resistor(sol.R_h.query) self.r_lo = Resistor(sol.R_l.query) # Nets (connections). A resistor is symmetric, so p1/p2 orientation is # electrically irrelevant. self.nets = [ self.r_hi.p1 + self.hi, self.r_hi.p2 + self.r_lo.p1 + self.out, self.r_lo.p2 + self.lo, ] # FIXME: Properties are a concept of JITX ESIR interface and don't have a port in the python interface. self.output_voltage = sol.vo
def _warn_name_ignored(name: Optional[str]) -> None: if name is not None: warnings.warn( "The `name` argument is deprecated and ignored; the circuit is " "always named 'VoltageDividerCircuit'.", DeprecationWarning, stacklevel=3, )
[docs] def voltage_divider( sol: VoltageDividerSolution, name: Optional[str] = None ) -> VoltageDividerCircuit: """ Construct a voltage divider circuit from a solution. .. deprecated:: The `name` argument is deprecated and ignored. """ _warn_name_ignored(name) return VoltageDividerCircuit(sol)
[docs] def voltage_divider_from_constraints( cxt: VoltageDividerConstraints, name: Optional[str] = None ) -> VoltageDividerCircuit: """ Construct a voltage divider circuit from constraints (forward or inverse). """ sol = solve(cxt) return voltage_divider(sol, name=name)
[docs] def forward_divider( v_in: Toleranced, v_out: Toleranced, current: float, name: Optional[str] = None ) -> VoltageDividerCircuit: """ Construct a forward voltage divider circuit from basic parameters. """ cxt = VoltageDividerConstraints(v_in=v_in, v_out=v_out, current=current) return voltage_divider_from_constraints(cxt, name=name)
[docs] def inverse_divider( v_in: Toleranced, v_out: Toleranced, current: float, name: Optional[str] = None ) -> VoltageDividerCircuit: """ Construct an inverse voltage divider circuit from basic parameters. """ cxt = InverseDividerConstraints(v_in=v_in, v_out=v_out, current=current) return voltage_divider_from_constraints(cxt, name=name)