Coverage for qpdk / models / __init__.py: 96%
27 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-14 10:27 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-14 10:27 +0000
1"""Model definitions for qpdk."""
3import sax
5from qpdk.models.capacitor import (
6 interdigital_capacitor,
7 plate_capacitor,
8)
9from qpdk.models.junction import josephson_junction, squid_junction
11sax.set_port_naming_strategy("optical")
13from qpdk.models.constants import (
14 DEFAULT_FREQUENCY,
15)
16from qpdk.models.couplers import (
17 coupler_ring,
18 coupler_straight,
19 cpw_cpw_coupling_capacitance,
20)
21from qpdk.models.cpw import (
22 cpw_epsilon_eff,
23 cpw_parameters,
24 cpw_thickness_correction,
25 cpw_z0,
26 cpw_z0_from_cross_section,
27 microstrip_epsilon_eff,
28 microstrip_thickness_correction,
29 microstrip_z0,
30 propagation_constant,
31 transmission_line_s_params,
32)
33from qpdk.models.generic import (
34 admittance,
35 capacitor,
36 electrical_open,
37 electrical_short,
38 electrical_short_2_port,
39 gamma_0_load,
40 impedance,
41 inductor,
42 lc_resonator,
43 lc_resonator_coupled,
44 open,
45 short,
46 short_2_port,
47)
48from qpdk.models.perturbation import (
49 dispersive_shift,
50 dispersive_shift_to_coupling,
51 ej_ec_to_frequency_and_anharmonicity,
52 measurement_induced_dephasing,
53 purcell_decay_rate,
54 resonator_linewidth_from_q,
55)
56from qpdk.models.qubit import (
57 coupling_strength_to_capacitance,
58 double_island_transmon,
59 double_island_transmon_with_bbox,
60 double_island_transmon_with_resonator,
61 double_pad_transmon,
62 double_pad_transmon_with_bbox,
63 double_pad_transmon_with_resonator,
64 ec_to_capacitance,
65 ej_to_inductance,
66 flipmon,
67 flipmon_with_bbox,
68 flipmon_with_resonator,
69 qubit_with_resonator,
70 shunted_transmon,
71 transmon_coupled,
72 transmon_with_resonator,
73 xmon_transmon,
74)
75from qpdk.models.resonator import (
76 quarter_wave_resonator_coupled,
77 resonator,
78 resonator_coupled,
79 resonator_frequency,
80 resonator_half_wave,
81 resonator_quarter_wave,
82)
83from qpdk.models.waveguides import (
84 airbridge,
85 bend_circular,
86 bend_euler,
87 bend_s,
88 indium_bump,
89 launcher,
90 nxn,
91 rectangle,
92 straight,
93 straight_double_open,
94 straight_microstrip,
95 straight_open,
96 straight_shorted,
97 taper_cross_section,
98 tee,
99 tsv,
100)
102__all__ = [
103 "DEFAULT_FREQUENCY",
104 "admittance",
105 "airbridge",
106 "bend_circular",
107 "bend_euler",
108 "bend_s",
109 "capacitor",
110 "coupler_ring",
111 "coupler_straight",
112 "coupling_strength_to_capacitance",
113 "cpw_cpw_coupling_capacitance",
114 "cpw_epsilon_eff",
115 "cpw_parameters",
116 "cpw_thickness_correction",
117 "cpw_z0",
118 "cpw_z0_from_cross_section",
119 "dispersive_shift",
120 "dispersive_shift_to_coupling",
121 "double_island_transmon",
122 "double_island_transmon_with_bbox",
123 "double_island_transmon_with_resonator",
124 "double_pad_transmon",
125 "double_pad_transmon_with_bbox",
126 "double_pad_transmon_with_resonator",
127 "ec_to_capacitance",
128 "ej_ec_to_frequency_and_anharmonicity",
129 "ej_to_inductance",
130 "electrical_open",
131 "electrical_short",
132 "electrical_short_2_port",
133 "flipmon",
134 "flipmon_with_bbox",
135 "flipmon_with_resonator",
136 "gamma_0_load",
137 "impedance",
138 "indium_bump",
139 "inductor",
140 "interdigital_capacitor",
141 "josephson_junction",
142 "launcher",
143 "lc_resonator",
144 "lc_resonator_coupled",
145 "measurement_induced_dephasing",
146 "microstrip_epsilon_eff",
147 "microstrip_thickness_correction",
148 "microstrip_z0",
149 "models",
150 "nxn",
151 "open",
152 "plate_capacitor",
153 "propagation_constant",
154 "purcell_decay_rate",
155 "quarter_wave_resonator_coupled",
156 "qubit_with_resonator",
157 "rectangle",
158 "resonator",
159 "resonator_coupled",
160 "resonator_frequency",
161 "resonator_half_wave",
162 "resonator_linewidth_from_q",
163 "resonator_quarter_wave",
164 "short",
165 "short_2_port",
166 "shunted_transmon",
167 "squid_junction",
168 "straight",
169 "straight_double_open",
170 "straight_microstrip",
171 "straight_open",
172 "straight_shorted",
173 "taper_cross_section",
174 "tee",
175 "transmission_line_s_params",
176 "transmon_coupled",
177 "transmon_with_resonator",
178 "tsv",
179 "xmon_transmon",
180]
183def _is_sax_model(obj: object) -> bool:
184 """Check if an object is a SAX model function."""
185 if not callable(obj):
186 return False
187 # Check if return type is sax.SType or sax.SDict
188 for target in [obj, getattr(obj, "__wrapped__", None)]:
189 if target is None:
190 continue
191 if hasattr(target, "__annotations__") and "return" in target.__annotations__:
192 ret = target.__annotations__["return"]
193 if hasattr(ret, "__name__") and ret.__name__ in ["SType", "SDict"]:
194 return True
195 # Also check identity for standard cases
196 if ret in [sax.SType, sax.SDict]:
197 return True
198 return sax.try_into[sax.Model](obj) is not None
201models = {
202 k: v
203 for k, v in globals().items()
204 if k in __all__ and k != "models" and _is_sax_model(v)
205}