pyedb 0.42.0__py3-none-any.whl → 0.43.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyedb might be problematic. Click here for more details.
- pyedb/__init__.py +1 -1
- pyedb/configuration/cfg_boundaries.py +148 -71
- pyedb/configuration/cfg_general.py +30 -14
- pyedb/configuration/cfg_modeler.py +161 -67
- pyedb/configuration/cfg_nets.py +33 -17
- pyedb/configuration/cfg_operations.py +63 -31
- pyedb/configuration/cfg_package_definition.py +72 -51
- pyedb/configuration/cfg_pin_groups.py +75 -33
- pyedb/configuration/cfg_s_parameter_models.py +95 -70
- pyedb/configuration/cfg_setup.py +229 -258
- pyedb/configuration/cfg_stackup.py +122 -90
- pyedb/configuration/configuration.py +342 -209
- pyedb/dotnet/database/edb_data/padstacks_data.py +7 -2
- pyedb/dotnet/database/sim_setup_data/data/sweep_data.py +63 -10
- pyedb/dotnet/database/utilities/simulation_setup.py +7 -13
- pyedb/dotnet/edb.py +75 -105
- {pyedb-0.42.0.dist-info → pyedb-0.43.0.dist-info}/METADATA +1 -1
- {pyedb-0.42.0.dist-info → pyedb-0.43.0.dist-info}/RECORD +20 -20
- {pyedb-0.42.0.dist-info → pyedb-0.43.0.dist-info}/LICENSE +0 -0
- {pyedb-0.42.0.dist-info → pyedb-0.43.0.dist-info}/WHEEL +0 -0
pyedb/configuration/cfg_setup.py
CHANGED
|
@@ -20,299 +20,270 @@
|
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
# SOFTWARE.
|
|
22
22
|
|
|
23
|
-
from pyedb.configuration.cfg_common import CfgBase
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
class CfgSetup:
|
|
25
|
+
"""
|
|
26
|
+
Parameters
|
|
27
|
+
----------
|
|
28
|
+
name : str, optional
|
|
29
|
+
type : str
|
|
30
|
+
Type of the setup. Optionals are ``"hfss"``, ``"siwave_ac"``, ``"siwave_dc"``.
|
|
31
|
+
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
class Common:
|
|
35
|
+
@property
|
|
36
|
+
def pyedb_obj(self):
|
|
37
|
+
return self.parent.pyedb_obj
|
|
38
|
+
|
|
39
|
+
def __init__(self, parent):
|
|
40
|
+
self.parent = parent
|
|
41
|
+
self.pedb = parent.pedb
|
|
42
|
+
|
|
43
|
+
def _retrieve_parameters_from_edb_common(self):
|
|
44
|
+
self.parent.name = self.pyedb_obj.name
|
|
45
|
+
self.parent.type = self.pyedb_obj.type
|
|
46
|
+
|
|
47
|
+
def _apply_freq_sweep(self, edb_setup):
|
|
48
|
+
for i in self.parent.freq_sweep:
|
|
49
|
+
f_set = []
|
|
50
|
+
freq_string = []
|
|
51
|
+
for f in i.get("frequencies", []):
|
|
52
|
+
if isinstance(f, dict):
|
|
53
|
+
increment = f.get("increment", f.get("points", f.get("samples", f.get("step"))))
|
|
54
|
+
f_set.append([f["distribution"], f["start"], f["stop"], increment])
|
|
55
|
+
else:
|
|
56
|
+
freq_string.append(f)
|
|
57
|
+
sweep = edb_setup.add_sweep(i["name"], frequency_set=f_set, sweep_type=i["type"])
|
|
58
|
+
if len(freq_string) > 0:
|
|
59
|
+
sweep.frequency_string = freq_string
|
|
60
|
+
|
|
61
|
+
class Grpc(Common):
|
|
62
|
+
def __init__(self, parent):
|
|
63
|
+
super().__init__(parent)
|
|
64
|
+
|
|
65
|
+
def set_parameters_to_edb(self):
|
|
66
|
+
pass
|
|
67
|
+
|
|
68
|
+
def retrieve_parameters_from_edb(self):
|
|
69
|
+
pass
|
|
70
|
+
|
|
71
|
+
class DotNet(Grpc):
|
|
72
|
+
def __init__(self, parent):
|
|
73
|
+
super().__init__(parent)
|
|
74
|
+
|
|
75
|
+
def __init__(self, pedb, pedb_obj, **kwargs):
|
|
76
|
+
self.pedb = pedb
|
|
77
|
+
self.pyedb_obj = pedb_obj
|
|
36
78
|
self.name = kwargs.get("name")
|
|
37
|
-
self.type =
|
|
38
|
-
self.frequencies = []
|
|
39
|
-
for kw in kwargs.get("frequencies", []):
|
|
40
|
-
self.frequencies.append(CfgFrequencies(**kw))
|
|
79
|
+
self.type = ""
|
|
41
80
|
|
|
81
|
+
self.freq_sweep = []
|
|
42
82
|
|
|
43
|
-
|
|
44
|
-
def __init__(self, pedb, **kwargs):
|
|
45
|
-
self._pedb = pedb
|
|
46
|
-
self.name = kwargs.get("name")
|
|
47
|
-
self.type = kwargs.get("type").lower() if kwargs.get("type") else None
|
|
83
|
+
self.freq_sweep = kwargs.get("freq_sweep", [])
|
|
48
84
|
|
|
49
|
-
self.
|
|
50
|
-
|
|
51
|
-
|
|
85
|
+
if self.pedb.grpc:
|
|
86
|
+
self.api = self.Grpc(self)
|
|
87
|
+
else:
|
|
88
|
+
self.api = self.DotNet(self)
|
|
52
89
|
|
|
53
|
-
def
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
edb_setup.add_sweep(i.name, frequency_set=f_set, sweep_type=i.type)
|
|
90
|
+
def _to_dict_setup(self):
|
|
91
|
+
return {
|
|
92
|
+
"name": self.name,
|
|
93
|
+
"type": self.type,
|
|
94
|
+
}
|
|
59
95
|
|
|
60
96
|
|
|
61
97
|
class CfgSIwaveACSetup(CfgSetup):
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
self.pi_slider_position = kwargs.get("pi_slider_position")
|
|
98
|
+
class Grpc(CfgSetup.Common):
|
|
99
|
+
def __init__(self, parent):
|
|
100
|
+
super().__init__(parent)
|
|
66
101
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
102
|
+
def set_parameters_to_edb(self):
|
|
103
|
+
if self.parent.name in self.pedb.setups:
|
|
104
|
+
raise "Setup {} already existing. Editing it.".format(self.parent.name)
|
|
70
105
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
else
|
|
106
|
+
edb_setup = self.pedb.create_siwave_syz_setup(name=self.parent.name)
|
|
107
|
+
if self.parent.si_slider_position is not None:
|
|
108
|
+
edb_setup.si_slider_position = self.parent.si_slider_position
|
|
109
|
+
else:
|
|
110
|
+
edb_setup.pi_slider_position = self.parent.pi_slider_position
|
|
111
|
+
self._apply_freq_sweep(edb_setup)
|
|
112
|
+
|
|
113
|
+
def retrieve_parameters_from_edb(self):
|
|
114
|
+
self._retrieve_parameters_from_edb_common()
|
|
115
|
+
self.parent.use_si_settings = self.pyedb_obj.use_si_settings
|
|
116
|
+
self.parent.si_slider_position = self.pyedb_obj.si_slider_position
|
|
117
|
+
self.parent.pi_slider_position = self.pyedb_obj.pi_slider_position
|
|
118
|
+
|
|
119
|
+
class DotNet(Grpc):
|
|
120
|
+
def __init__(self, parent):
|
|
121
|
+
super().__init__(parent)
|
|
122
|
+
|
|
123
|
+
def __init__(self, pedb, pyedb_obj, **kwargs):
|
|
124
|
+
super().__init__(pedb, pyedb_obj, **kwargs)
|
|
125
|
+
self.type = "siwave_ac"
|
|
126
|
+
self.use_si_settings = kwargs.get("use_si_settings", True)
|
|
127
|
+
self.si_slider_position = kwargs.get("si_slider_position", 1)
|
|
128
|
+
self.pi_slider_position = kwargs.get("pi_slider_position", 1)
|
|
129
|
+
|
|
130
|
+
def to_dict(self):
|
|
131
|
+
temp = self._to_dict_setup()
|
|
132
|
+
temp.update(
|
|
133
|
+
{
|
|
134
|
+
"use_si_settings": self.use_si_settings,
|
|
135
|
+
"si_slider_position": self.si_slider_position,
|
|
136
|
+
"pi_slider_position": self.pi_slider_position,
|
|
137
|
+
}
|
|
75
138
|
)
|
|
76
|
-
|
|
77
|
-
edb_setup = self._pedb.create_siwave_syz_setup(name=self.name, **kwargs)
|
|
78
|
-
self._apply_freq_sweep(edb_setup)
|
|
139
|
+
return temp
|
|
79
140
|
|
|
80
141
|
|
|
81
142
|
class CfgSIwaveDCSetup(CfgSetup):
|
|
82
|
-
|
|
83
|
-
|
|
143
|
+
class Grpc(CfgSetup.Common):
|
|
144
|
+
def __init__(self, parent):
|
|
145
|
+
super().__init__(parent)
|
|
146
|
+
|
|
147
|
+
def set_parameters_to_edb(self):
|
|
148
|
+
edb_setup = self.pedb.create_siwave_dc_setup(
|
|
149
|
+
name=self.parent.name, dc_slider_position=self.parent.dc_slider_position
|
|
150
|
+
)
|
|
151
|
+
edb_setup.dc_settings.dc_slider_position = self.parent.dc_slider_position
|
|
152
|
+
dc_ir_settings = self.parent.dc_ir_settings
|
|
153
|
+
edb_setup.dc_ir_settings.export_dc_thermal_data = dc_ir_settings["export_dc_thermal_data"]
|
|
154
|
+
|
|
155
|
+
def retrieve_parameters_from_edb(self):
|
|
156
|
+
self._retrieve_parameters_from_edb_common()
|
|
157
|
+
self.parent.dc_slider_position = self.pyedb_obj.dc_settings.dc_slider_position
|
|
158
|
+
dc_ir_settings = dict()
|
|
159
|
+
dc_ir_settings["export_dc_thermal_data"] = self.pyedb_obj.dc_ir_settings.export_dc_thermal_data
|
|
160
|
+
self.parent.dc_ir_settings = dc_ir_settings
|
|
161
|
+
|
|
162
|
+
class DotNet(Grpc):
|
|
163
|
+
def __init__(self, parent):
|
|
164
|
+
super().__init__(parent)
|
|
165
|
+
|
|
166
|
+
def __init__(self, pedb, pyedb_obj, **kwargs):
|
|
167
|
+
super().__init__(pedb, pyedb_obj, **kwargs)
|
|
168
|
+
self.type = "siwave_dc"
|
|
84
169
|
self.dc_slider_position = kwargs.get("dc_slider_position")
|
|
85
|
-
self.dc_ir_settings =
|
|
86
|
-
self.freq_sweep = None
|
|
170
|
+
self.dc_ir_settings = kwargs.get("dc_ir_settings", {})
|
|
87
171
|
|
|
88
|
-
def
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
edb_setup.dc_settings.dc_slider_position = v
|
|
93
|
-
else:
|
|
94
|
-
setattr(edb_setup.dc_ir_settings, k, v)
|
|
172
|
+
def to_dict(self):
|
|
173
|
+
temp = self._to_dict_setup()
|
|
174
|
+
temp.update({"dc_slider_position": self.dc_slider_position, "dc_ir_settings": self.dc_ir_settings})
|
|
175
|
+
return temp
|
|
95
176
|
|
|
96
177
|
|
|
97
178
|
class CfgHFSSSetup(CfgSetup):
|
|
98
|
-
|
|
99
|
-
|
|
179
|
+
class Grpc(CfgSetup.Common):
|
|
180
|
+
def __init__(self, parent):
|
|
181
|
+
super().__init__(parent)
|
|
100
182
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
183
|
+
def set_parameters_to_edb(self):
|
|
184
|
+
if self.parent.name in self.pedb.setups:
|
|
185
|
+
raise "Setup {} already existing. Editing it.".format(self.parent.name)
|
|
104
186
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
def apply(self):
|
|
110
|
-
if self.name in self._pedb.setups:
|
|
111
|
-
raise "Setup {} already existing. Editing it.".format(self.name)
|
|
112
|
-
|
|
113
|
-
edb_setup = self._pedb.create_hfss_setup(self.name)
|
|
114
|
-
edb_setup.set_solution_single_frequency(self.f_adapt, self.max_num_passes, self.max_mag_delta_s)
|
|
115
|
-
|
|
116
|
-
self._apply_freq_sweep(edb_setup)
|
|
117
|
-
|
|
118
|
-
for i in self.mesh_operations:
|
|
119
|
-
edb_setup.add_length_mesh_operation(
|
|
120
|
-
net_layer_list=i.nets_layers_list,
|
|
121
|
-
name=i.name,
|
|
122
|
-
# max_elements=i.max_elements,
|
|
123
|
-
max_length=i.max_length,
|
|
124
|
-
# restrict_elements=i.restrict_max_elements,
|
|
125
|
-
restrict_length=i.restrict_length,
|
|
126
|
-
refine_inside=i.refine_inside,
|
|
127
|
-
# mesh_region=i.mesh_region
|
|
187
|
+
edb_setup = self.pedb.create_hfss_setup(self.parent.name)
|
|
188
|
+
edb_setup.set_solution_single_frequency(
|
|
189
|
+
self.parent.f_adapt, self.parent.max_num_passes, self.parent.max_mag_delta_s
|
|
128
190
|
)
|
|
129
191
|
|
|
192
|
+
self._apply_freq_sweep(edb_setup)
|
|
193
|
+
|
|
194
|
+
for i in self.parent.mesh_operations:
|
|
195
|
+
edb_setup.add_length_mesh_operation(
|
|
196
|
+
name=i["name"],
|
|
197
|
+
max_elements=i.get("max_elements", 1000),
|
|
198
|
+
max_length=i.get("max_length", "1mm"),
|
|
199
|
+
restrict_length=i.get("restrict_length", True),
|
|
200
|
+
refine_inside=i.get("refine_inside", False),
|
|
201
|
+
# mesh_region=i.get(mesh_region),
|
|
202
|
+
net_layer_list=i.get("nets_layers_list", {}),
|
|
203
|
+
)
|
|
130
204
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
205
|
+
def retrieve_parameters_from_edb(self):
|
|
206
|
+
self._retrieve_parameters_from_edb_common()
|
|
207
|
+
adaptive_frequency_data_list = list(self.pyedb_obj.adaptive_settings.adaptive_frequency_data_list)[0]
|
|
208
|
+
self.parent.f_adapt = adaptive_frequency_data_list.adaptive_frequency
|
|
209
|
+
self.parent.max_num_passes = adaptive_frequency_data_list.max_passes
|
|
210
|
+
self.parent.max_mag_delta_s = adaptive_frequency_data_list.max_delta
|
|
211
|
+
self.parent.freq_sweep = []
|
|
212
|
+
for name, sw in self.pyedb_obj.sweeps.items():
|
|
213
|
+
self.parent.freq_sweep.append({"name": name, "type": sw.type, "frequencies": sw.frequency_string})
|
|
214
|
+
|
|
215
|
+
self.parent.mesh_operations = []
|
|
216
|
+
for name, mop in self.pyedb_obj.mesh_operations.items():
|
|
217
|
+
self.parent.mesh_operations.append(
|
|
218
|
+
{
|
|
219
|
+
"name": name,
|
|
220
|
+
"type": mop.type,
|
|
221
|
+
"max_elements": mop.max_elements,
|
|
222
|
+
"max_length": mop.max_length,
|
|
223
|
+
"restrict_length": mop.restrict_length,
|
|
224
|
+
"refine_inside": mop.refine_inside,
|
|
225
|
+
"nets_layers_list": mop.nets_layers_list,
|
|
226
|
+
}
|
|
227
|
+
)
|
|
143
228
|
|
|
229
|
+
class DotNet(Grpc):
|
|
230
|
+
def __init__(self, parent):
|
|
231
|
+
super().__init__(parent)
|
|
144
232
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
233
|
+
def __init__(self, pedb, pyedb_obj, **kwargs):
|
|
234
|
+
super().__init__(pedb, pyedb_obj, **kwargs)
|
|
235
|
+
self.type = "hfss"
|
|
236
|
+
self.f_adapt = kwargs.get("f_adapt")
|
|
237
|
+
self.max_num_passes = kwargs.get("max_num_passes")
|
|
238
|
+
self.max_mag_delta_s = kwargs.get("max_mag_delta_s")
|
|
148
239
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
240
|
+
self.mesh_operations = kwargs.get("mesh_operations", [])
|
|
241
|
+
|
|
242
|
+
def to_dict(self):
|
|
243
|
+
temp = self._to_dict_setup()
|
|
244
|
+
temp.update(
|
|
245
|
+
{
|
|
246
|
+
"f_adapt": self.f_adapt,
|
|
247
|
+
"max_num_passes": self.max_num_passes,
|
|
248
|
+
"max_mag_delta_s": self.max_mag_delta_s,
|
|
249
|
+
"mesh_operations": self.mesh_operations,
|
|
250
|
+
"freq_sweep": self.freq_sweep,
|
|
251
|
+
}
|
|
252
|
+
)
|
|
253
|
+
return temp
|
|
154
254
|
|
|
155
255
|
|
|
156
256
|
class CfgSetups:
|
|
157
257
|
def __init__(self, pedb, setups_data):
|
|
158
|
-
self.
|
|
258
|
+
self.pedb = pedb
|
|
159
259
|
self.setups = []
|
|
160
260
|
for stp in setups_data:
|
|
161
|
-
if stp
|
|
162
|
-
self.setups.append(CfgHFSSSetup(self.
|
|
163
|
-
elif stp
|
|
164
|
-
self.setups.append(CfgSIwaveACSetup(self.
|
|
165
|
-
elif stp
|
|
166
|
-
self.setups.append(CfgSIwaveDCSetup(self.
|
|
261
|
+
if stp["type"].lower() == "hfss":
|
|
262
|
+
self.setups.append(CfgHFSSSetup(self.pedb, None, **stp))
|
|
263
|
+
elif stp["type"].lower() in ["siwave_ac", "siwave_syz"]:
|
|
264
|
+
self.setups.append(CfgSIwaveACSetup(self.pedb, None, **stp))
|
|
265
|
+
elif stp["type"].lower() == "siwave_dc":
|
|
266
|
+
self.setups.append(CfgSIwaveDCSetup(self.pedb, None, **stp))
|
|
167
267
|
|
|
168
268
|
def apply(self):
|
|
169
269
|
for s in self.setups:
|
|
170
|
-
s.
|
|
171
|
-
|
|
172
|
-
def get_data_from_db(self):
|
|
173
|
-
setups = []
|
|
174
|
-
for _, s in self._pedb.setups.items():
|
|
175
|
-
if float(self._pedb.edbversion) < 2025.1:
|
|
176
|
-
if not s.type == "hfss":
|
|
177
|
-
self._pedb.logger.warning("Only HFSS setups are exported in 2024 R2 and earlier version.")
|
|
178
|
-
continue
|
|
179
|
-
|
|
180
|
-
stp = {}
|
|
181
|
-
if self._pedb.grpc:
|
|
182
|
-
from ansys.edb.core.simulation_setup.mesh_operation import (
|
|
183
|
-
LengthMeshOperation as GrpcLengthMeshOperation,
|
|
184
|
-
)
|
|
270
|
+
s.api.set_parameters_to_edb()
|
|
185
271
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if sw_p_name == "frequencies":
|
|
205
|
-
pass # Frequencies cannot be read from EDB
|
|
206
|
-
else:
|
|
207
|
-
sweep_data[sw_p_name] = getattr(sw, sw_p_name)
|
|
208
|
-
f_sweep.append(sweep_data)
|
|
209
|
-
stp["freq_sweep"] = f_sweep
|
|
210
|
-
elif p_name == "mesh_operations":
|
|
211
|
-
mops = []
|
|
212
|
-
for i in s.mesh_operations:
|
|
213
|
-
mop = {}
|
|
214
|
-
for mop_p_name in CfgLengthMeshOperation().__dict__:
|
|
215
|
-
if mop_p_name == "type":
|
|
216
|
-
if isinstance(i, GrpcLengthMeshOperation):
|
|
217
|
-
mop[mop_p_name] = "length"
|
|
218
|
-
elif mop_p_name == "nets_layers_list":
|
|
219
|
-
mop[mop_p_name] = i.__dict__["_net_layer_info"]
|
|
220
|
-
elif mop_p_name == "restrict_length":
|
|
221
|
-
mop[mop_p_name] = i.__dict__["_restrict_max_length"]
|
|
222
|
-
else:
|
|
223
|
-
mop[mop_p_name] = i.__dict__[f"_{mop_p_name}"]
|
|
224
|
-
mops.append(mop)
|
|
225
|
-
stp["mesh_operations"] = mops
|
|
226
|
-
else:
|
|
227
|
-
stp[p_name] = getattr(s, p_name)
|
|
228
|
-
|
|
229
|
-
elif s_type == "siwave_ac":
|
|
230
|
-
for p_name in CfgSIwaveACSetup(self._pedb).__dict__:
|
|
231
|
-
if p_name.startswith("_"):
|
|
232
|
-
continue
|
|
233
|
-
elif p_name == "freq_sweep":
|
|
234
|
-
pass # Bug in EDB API
|
|
235
|
-
else:
|
|
236
|
-
stp[p_name] = getattr(s, p_name)
|
|
237
|
-
elif s_type == "siwave_dc":
|
|
238
|
-
for p_name in CfgSIwaveDCSetup(self._pedb).__dict__:
|
|
239
|
-
if p_name.startswith("_"):
|
|
240
|
-
continue
|
|
241
|
-
elif p_name == "freq_sweep":
|
|
242
|
-
pass
|
|
243
|
-
elif p_name == "dc_ir_settings":
|
|
244
|
-
dc_ir_s = {}
|
|
245
|
-
for dcir_p_name in CfgDcIrSettings().__dict__:
|
|
246
|
-
dc_ir_s[dcir_p_name] = getattr(s.dc_ir_settings, dcir_p_name)
|
|
247
|
-
stp["dc_ir_settings"] = dc_ir_s
|
|
248
|
-
elif p_name == "dc_slider_position":
|
|
249
|
-
stp[p_name] = getattr(s.dc_settings, p_name)
|
|
250
|
-
else:
|
|
251
|
-
stp[p_name] = getattr(s, p_name)
|
|
252
|
-
else:
|
|
253
|
-
for _, s in self._pedb.setups.items():
|
|
254
|
-
if float(self._pedb.edbversion) < 2025.1:
|
|
255
|
-
if not s.type == "hfss":
|
|
256
|
-
self._pedb.logger.warning("Only HFSS setups are exported in 2024 R2 and earlier version.")
|
|
257
|
-
continue
|
|
258
|
-
if s.type == "hfss":
|
|
259
|
-
for p_name in CfgHFSSSetup(self._pedb).__dict__:
|
|
260
|
-
if p_name.startswith("_"):
|
|
261
|
-
continue
|
|
262
|
-
elif p_name == "type":
|
|
263
|
-
stp[p_name] = s.type
|
|
264
|
-
elif p_name == "f_adapt":
|
|
265
|
-
stp[p_name] = list(s.adaptive_settings.adaptive_frequency_data_list)[
|
|
266
|
-
0
|
|
267
|
-
].adaptive_frequency
|
|
268
|
-
elif p_name == "max_num_passes":
|
|
269
|
-
stp[p_name] = list(s.adaptive_settings.adaptive_frequency_data_list)[0].max_passes
|
|
270
|
-
elif p_name == "max_mag_delta_s":
|
|
271
|
-
stp[p_name] = list(s.adaptive_settings.adaptive_frequency_data_list)[0].max_delta
|
|
272
|
-
elif p_name == "freq_sweep":
|
|
273
|
-
f_sweep = []
|
|
274
|
-
for sw in s.sweeps.items():
|
|
275
|
-
sweep_data = {}
|
|
276
|
-
for sw_p_name in CfgSweepData().__dict__:
|
|
277
|
-
if sw_p_name == "frequencies":
|
|
278
|
-
pass # Frequencies cannot be read from EDB
|
|
279
|
-
else:
|
|
280
|
-
sweep_data[sw_p_name] = getattr(sw[1], sw_p_name)
|
|
281
|
-
f_sweep.append(sweep_data)
|
|
282
|
-
stp["freq_sweep"] = f_sweep
|
|
283
|
-
elif p_name == "mesh_operations":
|
|
284
|
-
mops = []
|
|
285
|
-
for _, i in s.mesh_operations.items():
|
|
286
|
-
mop = {}
|
|
287
|
-
for mop_p_name in CfgLengthMeshOperation().__dict__:
|
|
288
|
-
mop[mop_p_name] = getattr(i, mop_p_name)
|
|
289
|
-
mops.append(mop)
|
|
290
|
-
stp["mesh_operations"] = mops
|
|
291
|
-
else:
|
|
292
|
-
stp[p_name] = getattr(s, p_name)
|
|
293
|
-
|
|
294
|
-
elif s.type == "siwave_ac":
|
|
295
|
-
for p_name in CfgSIwaveACSetup(self._pedb).__dict__:
|
|
296
|
-
if p_name.startswith("_"):
|
|
297
|
-
continue
|
|
298
|
-
elif p_name == "freq_sweep":
|
|
299
|
-
pass # Bug in EDB API
|
|
300
|
-
else:
|
|
301
|
-
stp[p_name] = getattr(s, p_name)
|
|
302
|
-
elif s.type == "siwave_dc":
|
|
303
|
-
for p_name in CfgSIwaveDCSetup(self._pedb).__dict__:
|
|
304
|
-
if p_name.startswith("_"):
|
|
305
|
-
continue
|
|
306
|
-
elif p_name == "freq_sweep":
|
|
307
|
-
pass
|
|
308
|
-
elif p_name == "dc_ir_settings":
|
|
309
|
-
dc_ir_s = {}
|
|
310
|
-
for dcir_p_name in CfgDcIrSettings().__dict__:
|
|
311
|
-
dc_ir_s[dcir_p_name] = getattr(s.dc_ir_settings, dcir_p_name)
|
|
312
|
-
stp["dc_ir_settings"] = dc_ir_s
|
|
313
|
-
elif p_name == "dc_slider_position":
|
|
314
|
-
stp[p_name] = getattr(s.dc_settings, p_name)
|
|
315
|
-
else:
|
|
316
|
-
stp[p_name] = getattr(s, p_name)
|
|
317
|
-
setups.append(stp)
|
|
318
|
-
return setups
|
|
272
|
+
def to_dict(self):
|
|
273
|
+
return [i.to_dict() for i in self.setups]
|
|
274
|
+
|
|
275
|
+
def retrieve_parameters_from_edb(self):
|
|
276
|
+
self.setups = []
|
|
277
|
+
for _, setup in self.pedb.setups.items():
|
|
278
|
+
if setup.type == "hfss":
|
|
279
|
+
hfss = CfgHFSSSetup(self.pedb, setup)
|
|
280
|
+
hfss.api.retrieve_parameters_from_edb()
|
|
281
|
+
self.setups.append(hfss)
|
|
282
|
+
elif setup.type == "siwave_dc":
|
|
283
|
+
siwave_dc = CfgSIwaveDCSetup(self.pedb, setup)
|
|
284
|
+
siwave_dc.api.retrieve_parameters_from_edb()
|
|
285
|
+
self.setups.append(siwave_dc)
|
|
286
|
+
elif setup.type == "siwave_ac":
|
|
287
|
+
siwave_ac = CfgSIwaveACSetup(self.pedb, setup)
|
|
288
|
+
siwave_ac.api.retrieve_parameters_from_edb()
|
|
289
|
+
self.setups.append(siwave_ac)
|