Skip to content

Commit b4774f7

Browse files
implement library support for X element
1 parent 770b473 commit b4774f7

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

PySpice/Spice/BasicElement.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@
127127
IntKeyParameter,
128128
ModelPositionalParameter,
129129
)
130+
from . import Library
130131
from .StringTools import join_list, join_dict
131132
from .unit import str_spice
132133

@@ -164,7 +165,27 @@ class SubCircuitElement(NPinElement):
164165

165166
##############################################
166167

167-
def __init__(self, netlist: 'Netlist', name: str, subcircuit_name, *nodes, **parameters) -> None:
168+
def __init__(
169+
self,
170+
netlist: 'Netlist',
171+
name: str,
172+
subcircuit_name: str | Library.Subcircuit,
173+
*nodes,
174+
**parameters,
175+
) -> None:
176+
if isinstance(subcircuit_name, Library.Subcircuit):
177+
subcircuit = subcircuit_name
178+
subcircuit_name = subcircuit.name
179+
pins = {}
180+
for pin in subcircuit.pin_names:
181+
_ = parameters.pop(pin, None)
182+
if _ is None:
183+
raise ValueError(f"Missing pin {pin} for subcircuit {subcircuit_name}")
184+
pins[pin] = _
185+
nodes = subcircuit.map_nodes(**pins)
186+
# isinstance(netlist, Circuit)
187+
if hasattr(netlist, 'include'):
188+
netlist.include(subcircuit)
168189
super().__init__(netlist, name, nodes, subcircuit_name)
169190
# Fixme: match parameters to subcircuit
170191
self.parameters = parameters

examples/diode/diode-characteristic-curve.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,9 @@
9696
circuit.V('input', 'in', circuit.gnd, 10@u_V)
9797
circuit.R(1, 'in', 'out', 1@u_Ω) # not required for simulation
9898
D1N4148 = spice_library['1N4148']
99-
circuit.include(D1N4148)
99+
# circuit.include(D1N4148)
100100
# circuit.X('D1', '1N4148', 'out', circuit.gnd)
101-
diode_nodes = D1N4148.map_nodes(anode=0, cathode='out')
102-
circuit.X('D1', D1N4148.name, *diode_nodes)
101+
circuit.X('D1', D1N4148, cathode='out', anode=circuit.gnd)
103102

104103
#r# We simulate the circuit at these temperatures: 0, 25 and 100 °C.
105104

0 commit comments

Comments
 (0)