pyedb 0.9.0__py3-none-any.whl → 0.10.dev0__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.

@@ -68,16 +68,253 @@ if not is_ironpython:
68
68
  logger = logging.getLogger(__name__)
69
69
 
70
70
 
71
- class Stackup(object):
71
+ class LayerCollection(object):
72
+ auto_refresh = True
73
+
74
+ def __init__(self, pedb, edb_object=None):
75
+ self._pedb = pedb
76
+ self._edb_object = (
77
+ self._pedb.edb_api.cell._cell.LayerCollection(edb_object)
78
+ if edb_object
79
+ else self._pedb.edb_api.cell._cell.LayerCollection()
80
+ )
81
+ self._layer_type_set_mapping = {
82
+ "stackup_layer_set": self._pedb.edb_api.cell.layer_type_set.StackupLayerSet,
83
+ "signal_ayer_et": self._pedb.edb_api.cell.layer_type_set.SignalLayerSet,
84
+ "non_stackup_layer_set": self._pedb.edb_api.cell.layer_type_set.NonStackupLayerSet,
85
+ "all_layer_et": self._pedb.edb_api.cell.layer_type_set.AllLayerSet,
86
+ }
87
+ self._lc_mode_mapping = {
88
+ "laminate": self._pedb.edb_api.cell._cell.LayerCollectionMode.Laminate,
89
+ "overlapping": self._pedb.edb_api.cell._cell.LayerCollectionMode.Overlapping,
90
+ "multizone": self._pedb.edb_api.cell._cell.LayerCollectionMode.MultiZone,
91
+ }
92
+
93
+ def update_layout(self, stackup=None):
94
+ """Set layer collection into edb.
95
+
96
+ Parameters
97
+ ----------
98
+ stackup
99
+ """
100
+ if stackup:
101
+ self._edb_object = stackup._edb_object
102
+ self._pedb.layout.layer_collection = self._edb_object
103
+
104
+ @pyedb_function_handler
105
+ def _add_layer(self, add_method, base_layer_name="", **kwargs):
106
+ """Add a layer to edb.
107
+
108
+ Parameters
109
+ ----------
110
+ add_method
111
+ base_layer_name
112
+ """
113
+ layer_clone = kwargs.get("layer_clone", None)
114
+ if layer_clone:
115
+ obj = layer_clone
116
+ else:
117
+ obj = StackupLayerEdbClass(self._pedb, edb_object=None, **kwargs)
118
+ method_top_bottom = None
119
+ method_above_below = None
120
+ if add_method == "add_layer_top":
121
+ method_top_bottom = self._edb_object.AddLayerTop
122
+ elif add_method == "add_layer_bottom":
123
+ method_top_bottom = self._edb_object.AddLayerBottom
124
+ elif add_method == "add_layer_above":
125
+ method_above_below = self._edb_object.AddLayerAbove
126
+ elif add_method == "add_layer_below":
127
+ method_above_below = self._edb_object.AddLayerBelow
128
+ else: # pragma: no cover
129
+ logger.error("The way of defining layer addition is not correct")
130
+ return False
131
+
132
+ if method_top_bottom:
133
+ obj = obj if method_top_bottom(obj._edb_object) else False
134
+ elif method_above_below:
135
+ obj = obj if method_above_below(obj._edb_object, base_layer_name) else False
136
+ if self.auto_refresh:
137
+ self.update_layout()
138
+ return obj
139
+
140
+ @pyedb_function_handler
141
+ def add_layer_top(self, name, layer_type="signal", **kwargs):
142
+ """Add a layer on top of the stackup.
143
+
144
+ Parameters
145
+ ----------
146
+ name : str
147
+ Name of the layer.
148
+ layer_type: str, optional
149
+ Type of the layer. The default to ``"signal"``. Options are ``"signal"``, ``"dielectric"``
150
+ kwargs
151
+
152
+ Returns
153
+ -------
154
+
155
+ """
156
+ kwargs["name"] = name
157
+ kwargs["layer_type"] = layer_type
158
+ return self._add_layer(add_method="add_layer_top", **kwargs)
159
+
160
+ @pyedb_function_handler
161
+ def add_layer_bottom(self, name, layer_type="signal", **kwargs):
162
+ """Add a layer on bottom of the stackup.
163
+
164
+ Parameters
165
+ ----------
166
+ name : str
167
+ Name of the layer.
168
+ layer_type: str, optional
169
+ Type of the layer. The default to ``"signal"``. Options are ``"signal"``, ``"dielectric"``
170
+ kwargs
171
+
172
+ Returns
173
+ -------
174
+
175
+ """
176
+ kwargs["name"] = name
177
+ kwargs["layer_type"] = layer_type
178
+ return self._add_layer(add_method="add_layer_bottom", **kwargs)
179
+
180
+ @pyedb_function_handler
181
+ def add_layer_below(self, name, base_layer_name, layer_type="signal", **kwargs):
182
+ """Add a layer below a layer.
183
+
184
+ Parameters
185
+ ----------
186
+ name : str
187
+ Name of the layer.
188
+ base_layer_name: str
189
+ Name of the base layer.
190
+ layer_type: str, optional
191
+ Type of the layer. The default to ``"signal"``. Options are ``"signal"``, ``"dielectric"``
192
+ kwargs
193
+
194
+ Returns
195
+ -------
196
+
197
+ """
198
+ kwargs["name"] = name
199
+ kwargs["layer_type"] = layer_type
200
+ return self._add_layer(add_method="add_layer_below", base_layer_name=base_layer_name, **kwargs)
201
+
202
+ @pyedb_function_handler
203
+ def add_layer_above(self, name, base_layer_name, layer_type="signal", **kwargs):
204
+ """Add a layer above a layer.
205
+
206
+ Parameters
207
+ ----------
208
+ name : str
209
+ Name of the layer.
210
+ base_layer_name: str
211
+ Name of the base layer.
212
+ layer_type: str, optional
213
+ Type of the layer. The default to ``"signal"``. Options are ``"signal"``, ``"dielectric"``
214
+ kwargs
215
+
216
+ Returns
217
+ -------
218
+
219
+ """
220
+ kwargs["name"] = name
221
+ kwargs["layer_type"] = layer_type
222
+ return self._add_layer(add_method="add_layer_above", base_layer_name=base_layer_name, **kwargs)
223
+
224
+ @pyedb_function_handler
225
+ def add_document_layer(self, name, layer_type="UndefinedLayerType", **kwargs):
226
+ """Add a document layer.
227
+
228
+ Parameters
229
+ ----------
230
+ name : str
231
+ Name of the layer.
232
+ layer_type: str, optional
233
+ Type of the layer. The default to ``"signal"``. Options are ``"signal"``, ``"dielectric"``
234
+ kwargs
235
+
236
+ Returns
237
+ -------
238
+
239
+ """
240
+ kwargs["name"] = name
241
+ kwargs["layer_type"] = layer_type
242
+ return self._add_layer(add_method="add_layer_bottom", **kwargs)
243
+
244
+ @pyedb_function_handler
245
+ def set_layer_clone(self, layer_clone):
246
+ lc = self._pedb.edb_api.cell._cell.LayerCollection() # empty layer collection
247
+ lc.SetMode(self._edb_object.GetMode())
248
+ if self.mode.lower() == "laminate":
249
+ add_method = lc.AddLayerBottom
250
+ else:
251
+ add_method = lc.AddStackupLayerAtElevation
252
+
253
+ obj = False
254
+ # Add stackup layers
255
+ for _, i in self.stackup_layers.items():
256
+ if i.id == layer_clone.id: # replace layer
257
+ add_method(layer_clone._edb_object)
258
+ obj = layer_clone
259
+ else: # keep existing layer
260
+ add_method(i._edb_object)
261
+ # Add non stackup layers
262
+ for _, i in self.non_stackup_layers.items():
263
+ if i.id == layer_clone.id:
264
+ lc.AddLayerBottom(layer_clone._edb_object)
265
+ obj = layer_clone
266
+ else:
267
+ lc.AddLayerBottom(i._edb_object)
268
+
269
+ self._edb_object = lc
270
+ if self.auto_refresh:
271
+ self.update_layout()
272
+
273
+ if not obj:
274
+ logger.info("Layer clone was not found in stackup or non stackup layers.")
275
+ return obj
276
+
277
+ @property
278
+ def stackup_layers(self):
279
+ """Retrieve the dictionary of signal and dielectric layers."""
280
+ temp = list(self._edb_object.Layers((self._pedb.edb_api.cell.layer_type_set.StackupLayerSet)))
281
+ layers = OrderedDict()
282
+ for i in temp:
283
+ name = i.GetName()
284
+ layers[name] = StackupLayerEdbClass(self._pedb, i.Clone(), name=name)
285
+ return layers
286
+
287
+ @property
288
+ def non_stackup_layers(self):
289
+ """Retrieve the dictionary of signal layers."""
290
+ temp = list(self._edb_object.Layers(self._layer_type_set_mapping["non_stackup_layer_set"]))
291
+ layers = OrderedDict()
292
+ for i in temp:
293
+ name = i.GetName()
294
+ layers[name] = LayerEdbClass(self._pedb, i, name=name)
295
+ return layers
296
+
297
+ @property
298
+ def layers_by_id(self):
299
+ """Retrieve the list of layers with their ids."""
300
+ layer_list = list(self._layer_collection.Layers(self._pedb.edb_api.cell.layer_type_set.AllLayerSet))
301
+ temp = []
302
+ for i in layer_list:
303
+ obj = StackupLayerEdbClass(self._pedb, i.Clone(), name=i.GetName)
304
+ temp.append([obj.id, obj.name])
305
+ return temp
306
+
307
+
308
+ class Stackup(LayerCollection):
72
309
  """Manages EDB methods for stackup accessible from `Edb.stackup` property."""
73
310
 
74
311
  def __getitem__(self, item):
75
312
  return self.layers[item]
76
313
 
77
- def __init__(self, pedb):
314
+ def __init__(self, pedb, edb_object=None):
315
+ super().__init__(pedb, edb_object)
78
316
  # parent caller class
79
- self._pedb = pedb
80
- self._lc = None
317
+ self._lc = self._edb_object
81
318
 
82
319
  @property
83
320
  def _logger(self):
@@ -323,27 +560,8 @@ class Stackup(object):
323
560
  @pyedb_function_handler()
324
561
  def refresh_layer_collection(self):
325
562
  """Refresh layer collection from Edb. This method is run on demand after all edit operations on stackup."""
326
- lc_readonly = self._pedb.layout.layer_collection
327
- layers = [
328
- i.Clone() for i in list(list(lc_readonly.Layers(self._pedb.edb_api.cell.layer_type_set.StackupLayerSet)))
329
- ]
330
- non_stackup = [
331
- i.Clone() for i in list(list(lc_readonly.Layers(self._pedb.edb_api.cell.layer_type_set.NonStackupLayerSet)))
332
- ]
333
- self._lc = self._pedb.edb_api.cell._cell.LayerCollection()
334
- mode = lc_readonly.GetMode()
335
- self._lc.SetMode(lc_readonly.GetMode())
336
- if str(mode) == "Overlapping":
337
- for layer in layers:
338
- self._lc.AddStackupLayerAtElevation(layer)
339
- elif str(mode) == "Laminate":
340
- for layer in layers:
341
- self._lc.AddLayerBottom(layer)
342
- else:
343
- self._lc.AddLayers(convert_py_list_to_net_list(layers, self._pedb.edb_api.cell.layer))
344
- for layer in non_stackup:
345
- self._lc.AddLayerBottom(layer)
346
- self._lc.SetMode(lc_readonly.GetMode())
563
+ self._lc = self._pedb.edb_api.cell._cell.LayerCollection(self._pedb.layout.layer_collection)
564
+ self._edb_object = self._lc
347
565
 
348
566
  @property
349
567
  def _layer_collection(self):
@@ -414,11 +632,6 @@ class Stackup(object):
414
632
  layer_list = list(self._layer_collection.Layers(self._pedb.edb_api.cell.layer_type_set.AllLayerSet))
415
633
  return [i.Clone() for i in layer_list]
416
634
 
417
- @property
418
- def _edb_layer_list_nonstackup(self):
419
- layer_list = list(self._layer_collection.Layers(self._pedb.edb_api.cell.layer_type_set.NonStackupLayerSet))
420
- return [i.Clone() for i in layer_list]
421
-
422
635
  @property
423
636
  def layers(self):
424
637
  """Retrieve the dictionary of layers.
@@ -431,9 +644,9 @@ class Stackup(object):
431
644
  for l in self._edb_layer_list:
432
645
  name = l.GetName()
433
646
  if not l.IsStackupLayer():
434
- _lays[name] = LayerEdbClass(self, name)
647
+ _lays[name] = LayerEdbClass(self._pedb, l, name=name)
435
648
  else:
436
- _lays[name] = StackupLayerEdbClass(self, name)
649
+ _lays[name] = StackupLayerEdbClass(self._pedb, l, name=name)
437
650
  return _lays
438
651
 
439
652
  @property
@@ -451,24 +664,6 @@ class Stackup(object):
451
664
  _lays[name] = obj
452
665
  return _lays
453
666
 
454
- @property
455
- def stackup_layers(self):
456
- """Retrieve the dictionary of signal and dielectric layers.
457
-
458
- Returns
459
- -------
460
- Dict[str, :class:`dotnet.edb_core.edb_data.layer_data.LayerEdbClass`]
461
- """
462
- layer_type = [
463
- self._pedb.edb_api.cell.layer_type.SignalLayer,
464
- self._pedb.edb_api.cell.layer_type.DielectricLayer,
465
- ]
466
- _lays = OrderedDict()
467
- for name, obj in self.layers.items():
468
- if obj._edb_layer.GetLayerType() in layer_type:
469
- _lays[name] = obj
470
- return _lays
471
-
472
667
  @property
473
668
  def dielectric_layers(self):
474
669
  """Dielectric layers.
@@ -485,16 +680,6 @@ class Stackup(object):
485
680
  _lays[name] = obj
486
681
  return _lays
487
682
 
488
- @property
489
- def non_stackup_layers(self):
490
- """Retrieve the dictionary of signal layers.
491
-
492
- Returns
493
- -------
494
- Dict[str, :class:`dotnet.edb_core.edb_data.layer_data.LayerEdbClass`]
495
- """
496
- return {l.GetName(): LayerEdbClass(self, l.GetName()) for l in self._edb_layer_list_nonstackup}
497
-
498
683
  @pyedb_function_handler()
499
684
  def _edb_value(self, value):
500
685
  return self._pedb.edb_value(value)
@@ -1860,7 +2045,8 @@ class Stackup(object):
1860
2045
 
1861
2046
  layer.material = layer_info.Material
1862
2047
  layer.thickness = layer_info.Thickness
1863
- layer.dielectric_fill = layer_info.Dielectric_Fill
2048
+ if not str(layer_info.Dielectric_Fill) == "nan":
2049
+ layer.dielectric_fill = layer_info.Dielectric_Fill
1864
2050
 
1865
2051
  lc_new = self._pedb.edb_api.Cell.LayerCollection()
1866
2052
  for name, _ in df.iterrows():
@@ -2122,34 +2308,51 @@ class Stackup(object):
2122
2308
  stackup = root.find("Stackup")
2123
2309
  stackup_dict = {}
2124
2310
  if stackup.find("Materials"):
2125
- stackup_dict["materials"] = {}
2311
+ mats = []
2126
2312
  for m in stackup.find("Materials").findall("Material"):
2127
- material = {"name": m.attrib["Name"]}
2313
+ temp = dict()
2128
2314
  for i in list(m):
2129
- material[i.tag.lower()] = float(list(i)[0].text)
2130
- if material:
2131
- stackup_dict["materials"][material["name"]] = material
2315
+ value = list(i)[0].text
2316
+ temp[i.tag] = value
2317
+ mat = {"name": m.attrib["Name"]}
2318
+ temp_dict = {
2319
+ "Permittivity": "permittivity",
2320
+ "Conductivity": "conductivity",
2321
+ "DielectricLossTangent": "dielectric_loss_tangent",
2322
+ }
2323
+ for i in temp_dict.keys():
2324
+ value = temp.get(i, None)
2325
+ if value:
2326
+ mat[temp_dict[i]] = value
2327
+ mats.append(mat)
2328
+ stackup_dict["materials"] = mats
2329
+
2132
2330
  stackup_section = stackup.find("Layers")
2133
2331
  if stackup_section:
2134
2332
  length_unit = stackup_section.attrib["LengthUnit"]
2135
- stackup_dict["layers"] = {}
2333
+ layers = []
2136
2334
  for l in stackup.find("Layers").findall("Layer"):
2137
- layer = {"name": l.attrib["Name"]}
2138
- for k, v in l.attrib.items():
2139
- if k == "Color":
2140
- layer[k.lower()] = [int(x * 255) for x in list(colors.to_rgb(v))]
2141
- elif k == "Thickness":
2142
- layer[k.lower()] = v + length_unit
2143
- elif v == "conductor":
2144
- layer[k.lower()] = "signal"
2145
- elif k == "FillMaterial":
2146
- layer["dielectric_fill"] = v
2147
- else:
2148
- layer[k.lower()] = v
2149
- if layer:
2150
- if layer["type"] == "signal" or layer["type"] == "dielectric":
2151
- stackup_dict["layers"][layer["name"]] = layer
2152
- return self._import_dict(stackup_dict, rename=rename)
2335
+ temp = l.attrib
2336
+ layer = dict()
2337
+ temp_dict = {
2338
+ "Name": "name",
2339
+ "Color": "color",
2340
+ "Material": "material",
2341
+ "Thickness": "thickness",
2342
+ "Type": "type",
2343
+ "FillMaterial": "fill_material",
2344
+ }
2345
+ for i in temp_dict.keys():
2346
+ value = temp.get(i, None)
2347
+ if value:
2348
+ value = "signal" if value == "conductor" else value
2349
+ if i == "Color":
2350
+ value = [int(x * 255) for x in list(colors.to_rgb(value))]
2351
+ layer[temp_dict[i]] = value
2352
+ layers.append(layer)
2353
+ stackup_dict["layers"] = layers
2354
+ cfg = {"stackup": stackup_dict}
2355
+ return self._pedb.configuration.load(cfg, apply_file=True)
2153
2356
 
2154
2357
  @pyedb_function_handler()
2155
2358
  def _export_xml(self, file_path):
@@ -2204,7 +2407,9 @@ class Stackup(object):
2204
2407
 
2205
2408
  @pyedb_function_handler()
2206
2409
  def load(self, file_path, rename=False):
2207
- """Import stackup from a file. The file format can be XML, CSV, or JSON.
2410
+ """Import stackup from a file. The file format can be XML, CSV, or JSON. Valid control file must
2411
+ have the same number of signal layers. Signals layers can be renamed. Dielectric layers can be
2412
+ added and deleted.
2208
2413
 
2209
2414
 
2210
2415
  Parameters
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyedb
3
- Version: 0.9.0
3
+ Version: 0.10.dev0
4
4
  Summary: Higher-Level Pythonic Ansys Electronics Data Base
5
5
  Author-email: "ANSYS, Inc." <pyansys.core@ansys.com>
6
6
  Maintainer-email: PyEDB developers <simon.vandenbrouck@ansys.com>
@@ -24,7 +24,7 @@ Requires-Dist: toml == 0.10.2
24
24
  Requires-Dist: Rtree >= 1.2.0
25
25
  Requires-Dist: ansys-sphinx-theme>=0.10.0,<0.16 ; extra == "doc"
26
26
  Requires-Dist: imageio>=2.30.0,<2.35 ; extra == "doc"
27
- Requires-Dist: ipython>=8.13.0,<8.24 ; extra == "doc"
27
+ Requires-Dist: ipython>=8.13.0,<8.25 ; extra == "doc"
28
28
  Requires-Dist: jupyterlab>=4.0.0,<4.3 ; extra == "doc"
29
29
  Requires-Dist: matplotlib>=3.5.0,<3.9 ; extra == "doc"
30
30
  Requires-Dist: nbsphinx>=0.9.0,<0.10 ; extra == "doc"
@@ -35,7 +35,7 @@ Requires-Dist: Sphinx>=7.1.0,<7.4 ; extra == "doc"
35
35
  Requires-Dist: sphinx-autobuild==2024.2.4 ; extra == "doc" and ( python_version == '3.8')
36
36
  Requires-Dist: sphinx-autobuild==2024.2.4 ; extra == "doc" and ( python_version > '3.8')
37
37
  Requires-Dist: sphinx-copybutton>=0.5.0,<0.6 ; extra == "doc"
38
- Requires-Dist: sphinx-gallery>=0.14.0,<0.16 ; extra == "doc"
38
+ Requires-Dist: sphinx-gallery>=0.14.0,<0.17 ; extra == "doc"
39
39
  Requires-Dist: sphinx_design>=0.4.0,<0.6 ; extra == "doc"
40
40
  Requires-Dist: matplotlib>=3.5.0,<3.9 ; extra == "full"
41
41
  Requires-Dist: numpy>=1.20.0,<2 ; extra == "full"
@@ -44,9 +44,9 @@ Requires-Dist: matplotlib>=3.5.0,<3.9 ; extra == "tests"
44
44
  Requires-Dist: numpy>=1.20.0,<2 ; extra == "tests"
45
45
  Requires-Dist: mock>=5.1.0,<5.2 ; extra == "tests"
46
46
  Requires-Dist: pandas>=1.1.0,<2.3 ; extra == "tests"
47
- Requires-Dist: pytest>=7.4.0,<8.2 ; extra == "tests"
47
+ Requires-Dist: pytest>=7.4.0,<8.3 ; extra == "tests"
48
48
  Requires-Dist: pytest-cov>=4.0.0,<5.1 ; extra == "tests"
49
- Requires-Dist: pytest-xdist>=3.5.0,<3.6 ; extra == "tests"
49
+ Requires-Dist: pytest-xdist>=3.5.0,<3.7 ; extra == "tests"
50
50
  Project-URL: Bugs, https://github.com/ansys/pyedb/issues
51
51
  Project-URL: Discussions, https://github.com/ansys/pyedb/discussions
52
52
  Project-URL: Documentation, https://edb.docs.pyansys.com
@@ -1,26 +1,29 @@
1
- pyedb/__init__.py,sha256=-PeC-ezpiaDf1K0QUwu4B6kfQtg_3GxtEASzpnqsK2c,1520
1
+ pyedb/__init__.py,sha256=PykRKseZ3Vjcieln23EB5nk51C24X0m0vkRvdK3BQm8,1524
2
2
  pyedb/edb_logger.py,sha256=yNkXnoL2me7ubLT6O6r6ElVnkZ1g8fmfFYC_2XJZ1Sw,14950
3
3
  pyedb/exceptions.py,sha256=n94xluzUks6BA24vd_L6HkrvoP_H_l6__hQmqzdCyPo,111
4
4
  pyedb/siwave.py,sha256=ilUsA74QKy7VpRfmfvRrcVZhPAsyfgXHZm0SDDHiGBE,11576
5
+ pyedb/configuration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ pyedb/configuration/cfg_data.py,sha256=5zkqMMfEWWYnAwXFVYZA4f-SRogpvXWvN3UOMGXDFUo,1887
7
+ pyedb/configuration/cfg_ports.py,sha256=Pj30RbsbgY7_kpSdANXDGUbhaPBqQXGO7pSLBZ3bK7Y,5569
8
+ pyedb/configuration/configuration.py,sha256=UqeR6Io8SJAZWVeVA4S6rxVq9DIHc4heoeUubmx5xt4,35124
5
9
  pyedb/dotnet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
10
  pyedb/dotnet/clr_module.py,sha256=Mo13Of3DVSA5HR-5xZEXOiHApIKy52CUxtJ2gPkEu1A,3406
7
- pyedb/dotnet/edb.py,sha256=OqZ7-tBRkzvgZLxELBW6b9BIJ8l2Eil6BIPA_1pj274,171632
11
+ pyedb/dotnet/edb.py,sha256=ezzRRR9pcpKtTSZA7DqyAHXXXB3uNPO7SHoNlFeOJ2E,171743
8
12
  pyedb/dotnet/application/Variables.py,sha256=nov1kIyJO25iz8pvbU3MK1meMpRLwtISmzYqJhc7Ouo,79042
9
13
  pyedb/dotnet/application/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
14
  pyedb/dotnet/edb_core/__init__.py,sha256=nIRLJ8VZLcMAp12zmGsnZ5x2BEEl7q_Kj_KAOXxVjpQ,52
11
- pyedb/dotnet/edb_core/components.py,sha256=Lo7o_9TN2EhlTEQMtT2KD1e9XW3QMg5i-aAo_Tzg0dY,102985
12
- pyedb/dotnet/edb_core/configuration.py,sha256=huxXAAfRUFarJQbuoAEhH3JnmNylb2r__lfrEd8oMaA,33626
15
+ pyedb/dotnet/edb_core/components.py,sha256=guxNCJalAnVEVjxSdxTvoaqgLtn9YGuu9Velh4aJu-0,103685
13
16
  pyedb/dotnet/edb_core/general.py,sha256=QP6lqNEcqCdj_hSKhfKbmJ2hGBOYkhjPtsVEmyrO8KU,4726
14
- pyedb/dotnet/edb_core/hfss.py,sha256=O81AB-0it9kIWTfUDaw5Frfq3EVRl0adcAurJZUIDuk,68343
17
+ pyedb/dotnet/edb_core/hfss.py,sha256=pKq46cZ08nKHc1s__hkco-tA3AiBi4vV0T7w6RyQrEI,69696
15
18
  pyedb/dotnet/edb_core/layout.py,sha256=Sde2-8E-sGiO0JvjY31ydlq0QZrVkutbT_afp1FkK0w,50907
16
19
  pyedb/dotnet/edb_core/layout_validation.py,sha256=7Wj_VSAJOSA-RKOPgJXO-y9i6vfgJ4V9vxx0M1g1NUI,11798
17
- pyedb/dotnet/edb_core/materials.py,sha256=xYfud7EWDmK6O_hvANRqzFjp8ZqJdM0AJ8KYhUBVTyc,44463
20
+ pyedb/dotnet/edb_core/materials.py,sha256=xgXImJ0gcOqCL3p0uQ1hdey_hBK4rkTIhj4MERDbS7E,43987
18
21
  pyedb/dotnet/edb_core/net_class.py,sha256=lr-7Z0Q1A2fshxwjrIOmQSZnEBYe0NoxuUuJT6vYdyA,11857
19
22
  pyedb/dotnet/edb_core/nets.py,sha256=EK-jjRFvRX_NtqMQ46ebJbv9HOvP1uYK_EZ3jPnmxB0,43882
20
23
  pyedb/dotnet/edb_core/obj_base.py,sha256=lufR0sZj0QfZ2wlNvLL6aM1KVqCNY2A7taPPdWcK20w,3312
21
24
  pyedb/dotnet/edb_core/padstack.py,sha256=h9NYecM5_Z00KeMkli-Sm97btbvnJsz2COSmyWfoVHA,56581
22
25
  pyedb/dotnet/edb_core/siwave.py,sha256=wdLAKiz0Qhiktz3OPekBQtw_y2Kb8Vyk19QdF-FcUVU,62356
23
- pyedb/dotnet/edb_core/stackup.py,sha256=vFHc9uroqdb193uHHNVRa1rxy-9Oe76eQZ98X2Kfx54,115372
26
+ pyedb/dotnet/edb_core/stackup.py,sha256=7LpRWcE8V_zT5tZiZfvwV2e-C-wj3Lo4TA2rvbiCxoU,122296
24
27
  pyedb/dotnet/edb_core/cell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
28
  pyedb/dotnet/edb_core/cell/hierarchy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
29
  pyedb/dotnet/edb_core/cell/hierarchy/model.py,sha256=cJzNJLiuuoesfCL8-jWo8LbgGbfXrTYNQqmeeE38ieM,3309
@@ -41,14 +44,14 @@ pyedb/dotnet/edb_core/edb_data/control_file.py,sha256=2Gfrs8qW3N7y0A8ynAlKQpA6q9
41
44
  pyedb/dotnet/edb_core/edb_data/design_options.py,sha256=RO9ip-T5Bfxpsl97_QEk0qDZsza3tLzIX2t25XLutys,2057
42
45
  pyedb/dotnet/edb_core/edb_data/edbvalue.py,sha256=Vj_11HXsQUNavizKp5FicORm6cjhXRh9uvxhv_D_RJc,1977
43
46
  pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py,sha256=5koQSKdYC6Deh4haLUDAxnHlRa-j5S6g4eyAfiGgZP8,13190
44
- pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py,sha256=FtNyCgJ4ioUxOi6cMgtjsDdLLnETybJJBMizC4ZPeOo,48944
45
- pyedb/dotnet/edb_core/edb_data/layer_data.py,sha256=iLfX7bsMzolxEowjdrN8Q1TMyZTfkLzK5UHklmboH6E,21945
47
+ pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py,sha256=rXzh95N_jLf6a3OEEJRm50qFX0rM6lS5B5osnKlVzf4,49037
48
+ pyedb/dotnet/edb_core/edb_data/layer_data.py,sha256=HVPmE_Rny29J1c8qlJ3TSNZaMOTSxTgE9_vIiQJG0cE,25900
46
49
  pyedb/dotnet/edb_core/edb_data/nets_data.py,sha256=iULEOUsn3sfLT5FVY_4lMWTm0KzC-01AZ-aYIkM0U-k,9933
47
50
  pyedb/dotnet/edb_core/edb_data/padstacks_data.py,sha256=T7m7s5KAZB-gZ9wrPw6k2Yoon6uwCfJSOeg2hvyX1LI,78754
48
51
  pyedb/dotnet/edb_core/edb_data/ports.py,sha256=FYxB2rDUtN_OsYAbodXbc5mA_d0BUebmin_B5kkUw3U,9223
49
52
  pyedb/dotnet/edb_core/edb_data/primitives_data.py,sha256=veMDPCb6T84KZ_xgo52g7vHxObsx-Y2ysWXBS2CqZpQ,48155
50
53
  pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py,sha256=FPQ1myUhmBAyyAsqPQZnr0Y-_k-tvq-JhQtESp3ea0g,21065
51
- pyedb/dotnet/edb_core/edb_data/simulation_configuration.py,sha256=0U5sHLn8rvQFOveRQE3Y84TGk0-DUfOnbvEO6Iffya4,99967
54
+ pyedb/dotnet/edb_core/edb_data/simulation_configuration.py,sha256=FVytbP5wx1lWS6708_JfB2aVXjAeTzTH0-3CeMLMdv8,101304
52
55
  pyedb/dotnet/edb_core/edb_data/siwave_simulation_setup_data.py,sha256=fPmdhh6t6HM2pE_mQCT0ZQYO-PkqhwumwiuRUNEn00Q,42354
53
56
  pyedb/dotnet/edb_core/edb_data/sources.py,sha256=XmdpOdlpBa3QiYFY0cRtVIolt4nvUR9Ptk5YnRVvU4c,15342
54
57
  pyedb/dotnet/edb_core/edb_data/terminals.py,sha256=m2kch7Md-MSGUEbKFW8m8RpBzq6lNMFdgPgOtDUbsMA,25287
@@ -132,7 +135,7 @@ pyedb/misc/siw_feature_config/emc/net_tags.py,sha256=HVYOQacmaLr6Mvf7FqZhqbhtqJL
132
135
  pyedb/misc/siw_feature_config/emc/tag_library.py,sha256=yUK4w3hequU017E2DbkA4KE2MWIh1R6bfJBrevlDx6g,1557
133
136
  pyedb/misc/siw_feature_config/emc/xml_generic.py,sha256=55X-V0OxWq-v7FTiDVjaZif8V_2xxsvJlJ8bs9Bf61I,2521
134
137
  pyedb/modeler/geometry_operators.py,sha256=LDqEaeerw9H8Yva-SJhX3Afdni08OciO9t5G0c_tdqs,66820
135
- pyedb-0.9.0.dist-info/LICENSE,sha256=qQWivZ12ETN5l3QxvTARY-QI5eoRRlyHdwLlAj0Bg5I,1089
136
- pyedb-0.9.0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
137
- pyedb-0.9.0.dist-info/METADATA,sha256=agt4Ryp5D6tkoEv2hdVvEvo15DvymqpK-71wsXOrTps,8350
138
- pyedb-0.9.0.dist-info/RECORD,,
138
+ pyedb-0.10.dev0.dist-info/LICENSE,sha256=qQWivZ12ETN5l3QxvTARY-QI5eoRRlyHdwLlAj0Bg5I,1089
139
+ pyedb-0.10.dev0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
140
+ pyedb-0.10.dev0.dist-info/METADATA,sha256=KN-2OTvEn6-z8cWu1XV6Hc_qbW--qmLNif9rKsX9ysY,8354
141
+ pyedb-0.10.dev0.dist-info/RECORD,,