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

1"""Model definitions for qpdk.""" 

2 

3import sax 

4 

5from qpdk.models.capacitor import ( 

6 interdigital_capacitor, 

7 plate_capacitor, 

8) 

9from qpdk.models.junction import josephson_junction, squid_junction 

10 

11sax.set_port_naming_strategy("optical") 

12 

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) 

101 

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] 

181 

182 

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 

199 

200 

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}