pyedb 0.13.dev0__py3-none-any.whl → 0.14.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_common.py +0 -5
- pyedb/configuration/cfg_components.py +0 -2
- pyedb/configuration/cfg_operations.py +0 -2
- pyedb/configuration/cfg_package_definition.py +0 -2
- pyedb/configuration/cfg_ports_sources.py +14 -11
- pyedb/configuration/cfg_stackup.py +0 -7
- pyedb/configuration/configuration.py +0 -6
- pyedb/dotnet/application/Variables.py +4 -40
- pyedb/dotnet/edb.py +27 -82
- pyedb/dotnet/edb_core/{edb_data/components_data.py → cell/hierarchy/component.py} +13 -133
- pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -3
- pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +30 -0
- pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +105 -0
- pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +34 -0
- pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +34 -0
- pyedb/dotnet/edb_core/cell/layout.py +137 -0
- pyedb/dotnet/edb_core/cell/layout_obj.py +2 -4
- pyedb/dotnet/edb_core/cell/primitive.py +199 -1
- pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +52 -0
- pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +50 -0
- pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +88 -0
- pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +59 -0
- pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +73 -0
- pyedb/dotnet/edb_core/{edb_data/terminals.py → cell/terminal/terminal.py} +33 -242
- pyedb/dotnet/edb_core/components.py +10 -56
- pyedb/dotnet/edb_core/definition/component_def.py +1 -8
- pyedb/dotnet/edb_core/definition/component_model.py +0 -2
- pyedb/dotnet/edb_core/definition/definitions.py +0 -2
- pyedb/dotnet/edb_core/definition/package_def.py +7 -5
- pyedb/dotnet/edb_core/edb_data/control_file.py +0 -3
- pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -5
- pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +4 -9
- pyedb/dotnet/edb_core/edb_data/layer_data.py +0 -7
- pyedb/dotnet/edb_core/edb_data/nets_data.py +2 -5
- pyedb/dotnet/edb_core/edb_data/padstacks_data.py +11 -29
- pyedb/dotnet/edb_core/edb_data/ports.py +4 -4
- pyedb/dotnet/edb_core/edb_data/primitives_data.py +3 -26
- pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +13 -20
- pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +3 -11
- pyedb/dotnet/edb_core/edb_data/sources.py +12 -17
- pyedb/dotnet/edb_core/general.py +1 -6
- pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -3
- pyedb/dotnet/edb_core/hfss.py +1 -33
- pyedb/dotnet/edb_core/layout.py +0 -35
- pyedb/dotnet/edb_core/layout_validation.py +1 -3
- pyedb/dotnet/edb_core/materials.py +1 -22
- pyedb/dotnet/edb_core/net_class.py +0 -8
- pyedb/dotnet/edb_core/nets.py +4 -29
- pyedb/dotnet/edb_core/padstack.py +76 -30
- pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +72 -0
- pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +287 -0
- pyedb/dotnet/edb_core/{edb_data/hfss_simulation_setup_data.py → sim_setup_data/data/settings.py} +174 -878
- pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +509 -0
- pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
- pyedb/dotnet/edb_core/{edb_data/siwave_simulation_setup_data.py → sim_setup_data/io/siwave.py} +0 -341
- pyedb/dotnet/edb_core/siwave.py +5 -33
- pyedb/dotnet/edb_core/stackup.py +4 -51
- pyedb/dotnet/edb_core/utilities/simulation_setup.py +612 -366
- pyedb/generic/data_handlers.py +1 -9
- pyedb/generic/general_methods.py +3 -53
- pyedb/generic/plot.py +1 -2
- pyedb/ipc2581/ecad/cad_data/layer_feature.py +1 -7
- pyedb/ipc2581/ecad/cad_data/package.py +1 -4
- pyedb/ipc2581/ecad/cad_data/path.py +1 -3
- pyedb/ipc2581/ecad/cad_data/polygon.py +1 -6
- pyedb/ipc2581/ecad/cad_data/step.py +1 -10
- pyedb/ipc2581/ipc2581.py +8 -15
- pyedb/modeler/geometry_operators.py +164 -67
- pyedb/siwave.py +1 -16
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.0.dist-info}/METADATA +2 -2
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.0.dist-info}/RECORD +75 -61
- /pyedb/dotnet/edb_core/cell/{__init__.py → terminal/__init__.py} +0 -0
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.0.dist-info}/LICENSE +0 -0
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.0.dist-info}/WHEEL +0 -0
pyedb/dotnet/edb_core/stackup.py
CHANGED
|
@@ -38,12 +38,7 @@ from pyedb.dotnet.edb_core.edb_data.layer_data import (
|
|
|
38
38
|
StackupLayerEdbClass,
|
|
39
39
|
)
|
|
40
40
|
from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
|
|
41
|
-
from pyedb.generic.general_methods import
|
|
42
|
-
ET,
|
|
43
|
-
generate_unique_name,
|
|
44
|
-
is_ironpython,
|
|
45
|
-
pyedb_function_handler,
|
|
46
|
-
)
|
|
41
|
+
from pyedb.generic.general_methods import ET, generate_unique_name, is_ironpython
|
|
47
42
|
from pyedb.misc.aedtlib_personalib_install import write_pretty_xml
|
|
48
43
|
|
|
49
44
|
colors = None
|
|
@@ -98,13 +93,11 @@ class LayerCollection(object):
|
|
|
98
93
|
"""
|
|
99
94
|
self._pedb.layout.layer_collection = self._edb_object
|
|
100
95
|
|
|
101
|
-
@pyedb_function_handler()
|
|
102
96
|
def refresh_layer_collection(self):
|
|
103
97
|
"""Refresh layer collection from Edb. This method is run on demand after all edit operations on stackup."""
|
|
104
98
|
self._edb_object = self._pedb.edb_api.cell._cell.LayerCollection(self._pedb.layout.layer_collection)
|
|
105
99
|
self._lc = self._edb_object
|
|
106
100
|
|
|
107
|
-
@pyedb_function_handler
|
|
108
101
|
def _add_layer(self, add_method, base_layer_name="", **kwargs):
|
|
109
102
|
"""Add a layer to edb.
|
|
110
103
|
|
|
@@ -145,7 +138,6 @@ class LayerCollection(object):
|
|
|
145
138
|
self.update_layout()
|
|
146
139
|
return obj
|
|
147
140
|
|
|
148
|
-
@pyedb_function_handler
|
|
149
141
|
def add_layer_top(self, name, layer_type="signal", **kwargs):
|
|
150
142
|
"""Add a layer on top of the stackup.
|
|
151
143
|
|
|
@@ -165,7 +157,6 @@ class LayerCollection(object):
|
|
|
165
157
|
kwargs["layer_type"] = layer_type
|
|
166
158
|
return self._add_layer(add_method="add_layer_top", **kwargs)
|
|
167
159
|
|
|
168
|
-
@pyedb_function_handler
|
|
169
160
|
def add_layer_bottom(self, name, layer_type="signal", **kwargs):
|
|
170
161
|
"""Add a layer on bottom of the stackup.
|
|
171
162
|
|
|
@@ -185,7 +176,6 @@ class LayerCollection(object):
|
|
|
185
176
|
kwargs["layer_type"] = layer_type
|
|
186
177
|
return self._add_layer(add_method="add_layer_bottom", **kwargs)
|
|
187
178
|
|
|
188
|
-
@pyedb_function_handler
|
|
189
179
|
def add_layer_below(self, name, base_layer_name, layer_type="signal", **kwargs):
|
|
190
180
|
"""Add a layer below a layer.
|
|
191
181
|
|
|
@@ -207,7 +197,6 @@ class LayerCollection(object):
|
|
|
207
197
|
kwargs["layer_type"] = layer_type
|
|
208
198
|
return self._add_layer(add_method="add_layer_below", base_layer_name=base_layer_name, **kwargs)
|
|
209
199
|
|
|
210
|
-
@pyedb_function_handler
|
|
211
200
|
def add_layer_above(self, name, base_layer_name, layer_type="signal", **kwargs):
|
|
212
201
|
"""Add a layer above a layer.
|
|
213
202
|
|
|
@@ -229,7 +218,6 @@ class LayerCollection(object):
|
|
|
229
218
|
kwargs["layer_type"] = layer_type
|
|
230
219
|
return self._add_layer(add_method="add_layer_above", base_layer_name=base_layer_name, **kwargs)
|
|
231
220
|
|
|
232
|
-
@pyedb_function_handler
|
|
233
221
|
def add_document_layer(self, name, layer_type="UndefinedLayerType", **kwargs):
|
|
234
222
|
"""Add a document layer.
|
|
235
223
|
|
|
@@ -249,7 +237,6 @@ class LayerCollection(object):
|
|
|
249
237
|
kwargs["layer_type"] = layer_type
|
|
250
238
|
return self._add_layer(add_method="add_layer_bottom", **kwargs)
|
|
251
239
|
|
|
252
|
-
@pyedb_function_handler
|
|
253
240
|
def set_layer_clone(self, layer_clone):
|
|
254
241
|
lc = self._pedb.edb_api.cell._cell.LayerCollection() # empty layer collection
|
|
255
242
|
lc.SetMode(self._edb_object.GetMode())
|
|
@@ -371,7 +358,6 @@ class Stackup(LayerCollection):
|
|
|
371
358
|
"""
|
|
372
359
|
return len(list(self.stackup_layers.keys()))
|
|
373
360
|
|
|
374
|
-
@pyedb_function_handler()
|
|
375
361
|
def _int_to_layer_types(self, val):
|
|
376
362
|
if int(val) == 0:
|
|
377
363
|
return self.layer_types.SignalLayer
|
|
@@ -412,7 +398,6 @@ class Stackup(LayerCollection):
|
|
|
412
398
|
elif int(val) == -1:
|
|
413
399
|
return self.layer_types.UndefinedLayerType
|
|
414
400
|
|
|
415
|
-
@pyedb_function_handler()
|
|
416
401
|
def _layer_types_to_int(self, layer_type):
|
|
417
402
|
if not isinstance(layer_type, int):
|
|
418
403
|
if layer_type == self.layer_types.SignalLayer:
|
|
@@ -450,7 +435,6 @@ class Stackup(LayerCollection):
|
|
|
450
435
|
elif isinstance(layer_type, int):
|
|
451
436
|
return
|
|
452
437
|
|
|
453
|
-
@pyedb_function_handler()
|
|
454
438
|
def create_symmetric_stackup(
|
|
455
439
|
self,
|
|
456
440
|
layer_count,
|
|
@@ -672,11 +656,9 @@ class Stackup(LayerCollection):
|
|
|
672
656
|
_lays[name] = obj
|
|
673
657
|
return _lays
|
|
674
658
|
|
|
675
|
-
@pyedb_function_handler()
|
|
676
659
|
def _edb_value(self, value):
|
|
677
660
|
return self._pedb.edb_value(value)
|
|
678
661
|
|
|
679
|
-
@pyedb_function_handler()
|
|
680
662
|
def _set_layout_stackup(self, layer_clone, operation, base_layer=None, method=1):
|
|
681
663
|
"""Internal method. Apply stackup change into EDB.
|
|
682
664
|
|
|
@@ -738,7 +720,6 @@ class Stackup(LayerCollection):
|
|
|
738
720
|
self.refresh_layer_collection()
|
|
739
721
|
return True
|
|
740
722
|
|
|
741
|
-
@pyedb_function_handler()
|
|
742
723
|
def _create_stackup_layer(self, layer_name, thickness, layer_type="signal"):
|
|
743
724
|
if layer_type == "signal":
|
|
744
725
|
_layer_type = self._pedb.edb_api.cell.layer_type.SignalLayer
|
|
@@ -755,7 +736,6 @@ class Stackup(LayerCollection):
|
|
|
755
736
|
self.refresh_layer_collection()
|
|
756
737
|
return result
|
|
757
738
|
|
|
758
|
-
@pyedb_function_handler()
|
|
759
739
|
def _create_nonstackup_layer(self, layer_name, layer_type):
|
|
760
740
|
if layer_type == "conducting": # pragma: no cover
|
|
761
741
|
_layer_type = self._pedb.edb_api.cell.layer_type.ConductingLayer
|
|
@@ -794,7 +774,6 @@ class Stackup(LayerCollection):
|
|
|
794
774
|
self.refresh_layer_collection()
|
|
795
775
|
return result
|
|
796
776
|
|
|
797
|
-
@pyedb_function_handler()
|
|
798
777
|
def add_outline_layer(self, outline_name="Outline"):
|
|
799
778
|
"""Add an outline layer named ``"Outline"`` if it is not present.
|
|
800
779
|
|
|
@@ -806,7 +785,7 @@ class Stackup(LayerCollection):
|
|
|
806
785
|
return self.add_document_layer(name="Outline", layer_type="outline")
|
|
807
786
|
|
|
808
787
|
# TODO: Update optional argument material into material_name and fillMaterial into fill_material_name
|
|
809
|
-
|
|
788
|
+
|
|
810
789
|
def add_layer(
|
|
811
790
|
self,
|
|
812
791
|
layer_name,
|
|
@@ -923,7 +902,6 @@ class Stackup(LayerCollection):
|
|
|
923
902
|
self.refresh_layer_collection()
|
|
924
903
|
return True
|
|
925
904
|
|
|
926
|
-
@pyedb_function_handler()
|
|
927
905
|
def export(self, fpath, file_format="xml", include_material_with_layer=False):
|
|
928
906
|
"""Export stackup definition to a CSV or JSON file.
|
|
929
907
|
|
|
@@ -960,7 +938,6 @@ class Stackup(LayerCollection):
|
|
|
960
938
|
self._logger.warning("Layer stackup format is not supported. Skipping import.")
|
|
961
939
|
return False
|
|
962
940
|
|
|
963
|
-
@pyedb_function_handler()
|
|
964
941
|
def export_stackup(self, fpath, file_format="xml", include_material_with_layer=False):
|
|
965
942
|
"""Export stackup definition to a CSV or JSON file.
|
|
966
943
|
|
|
@@ -989,7 +966,6 @@ class Stackup(LayerCollection):
|
|
|
989
966
|
self._logger.warning("Method export_stackup is deprecated. Use .export.")
|
|
990
967
|
return self.export(fpath, file_format=file_format, include_material_with_layer=include_material_with_layer)
|
|
991
968
|
|
|
992
|
-
@pyedb_function_handler()
|
|
993
969
|
def _export_layer_stackup_to_csv_xlsx(self, fpath=None, file_format=None):
|
|
994
970
|
if not pd:
|
|
995
971
|
self._pedb.logger.error("Pandas is needed. Please, install it first.")
|
|
@@ -1020,7 +996,6 @@ class Stackup(LayerCollection):
|
|
|
1020
996
|
df.to_excel(fpath)
|
|
1021
997
|
return True
|
|
1022
998
|
|
|
1023
|
-
@pyedb_function_handler()
|
|
1024
999
|
def _export_layer_stackup_to_json(self, output_file=None, include_material_with_layer=False):
|
|
1025
1000
|
if not include_material_with_layer:
|
|
1026
1001
|
material_out = {}
|
|
@@ -1056,7 +1031,7 @@ class Stackup(LayerCollection):
|
|
|
1056
1031
|
return False
|
|
1057
1032
|
|
|
1058
1033
|
# TODO: This method might need some refactoring
|
|
1059
|
-
|
|
1034
|
+
|
|
1060
1035
|
def _import_layer_stackup(self, input_file=None):
|
|
1061
1036
|
if input_file:
|
|
1062
1037
|
f = open(input_file)
|
|
@@ -1107,7 +1082,6 @@ class Stackup(LayerCollection):
|
|
|
1107
1082
|
self.refresh_layer_collection()
|
|
1108
1083
|
return True
|
|
1109
1084
|
|
|
1110
|
-
@pyedb_function_handler()
|
|
1111
1085
|
def stackup_limits(self, only_metals=False):
|
|
1112
1086
|
"""Retrieve stackup limits.
|
|
1113
1087
|
|
|
@@ -1127,7 +1101,6 @@ class Stackup(LayerCollection):
|
|
|
1127
1101
|
warnings.warn("`stackup_limits` is deprecated. Use `limits` property instead.", DeprecationWarning)
|
|
1128
1102
|
return self.limits(only_metals=only_metals)
|
|
1129
1103
|
|
|
1130
|
-
@pyedb_function_handler()
|
|
1131
1104
|
def limits(self, only_metals=False):
|
|
1132
1105
|
"""Retrieve stackup limits.
|
|
1133
1106
|
|
|
@@ -1149,7 +1122,6 @@ class Stackup(LayerCollection):
|
|
|
1149
1122
|
res, topl, topz, bottoml, bottomz = self._layer_collection.GetTopBottomStackupLayers(input_layers)
|
|
1150
1123
|
return topl.GetName(), topz, bottoml.GetName(), bottomz
|
|
1151
1124
|
|
|
1152
|
-
@pyedb_function_handler()
|
|
1153
1125
|
def flip_design(self):
|
|
1154
1126
|
"""Flip the current design of a layout.
|
|
1155
1127
|
|
|
@@ -1279,7 +1251,6 @@ class Stackup(LayerCollection):
|
|
|
1279
1251
|
except:
|
|
1280
1252
|
return False
|
|
1281
1253
|
|
|
1282
|
-
@pyedb_function_handler()
|
|
1283
1254
|
def get_layout_thickness(self):
|
|
1284
1255
|
"""Return the layout thickness.
|
|
1285
1256
|
|
|
@@ -1297,14 +1268,12 @@ class Stackup(LayerCollection):
|
|
|
1297
1268
|
thickness = abs(top_layer.upper_elevation - bottom_layer.lower_elevation)
|
|
1298
1269
|
return round(thickness, 7)
|
|
1299
1270
|
|
|
1300
|
-
@pyedb_function_handler()
|
|
1301
1271
|
def _get_solder_height(self, layer_name):
|
|
1302
1272
|
for _, val in self._pedb.components.components.items():
|
|
1303
1273
|
if val.solder_ball_height and val.placement_layer == layer_name:
|
|
1304
1274
|
return val.solder_ball_height
|
|
1305
1275
|
return 0
|
|
1306
1276
|
|
|
1307
|
-
@pyedb_function_handler()
|
|
1308
1277
|
def _remove_solder_pec(self, layer_name):
|
|
1309
1278
|
for _, val in self._pedb.components.components.items():
|
|
1310
1279
|
if val.solder_ball_height and val.placement_layer == layer_name:
|
|
@@ -1315,7 +1284,6 @@ class Stackup(LayerCollection):
|
|
|
1315
1284
|
comp_prop.SetPortProperty(port_property)
|
|
1316
1285
|
val.edbcomponent.SetComponentProperty(comp_prop)
|
|
1317
1286
|
|
|
1318
|
-
@pyedb_function_handler()
|
|
1319
1287
|
def adjust_solder_dielectrics(self):
|
|
1320
1288
|
"""Adjust the stack-up by adding or modifying dielectric layers that contains Solder Balls.
|
|
1321
1289
|
This method identifies the solder-ball height and adjust the dielectric thickness on top (or bottom) to fit
|
|
@@ -1352,7 +1320,6 @@ class Stackup(LayerCollection):
|
|
|
1352
1320
|
list(self.stackup_layers.values())[0].thickness = val.solder_ball_height
|
|
1353
1321
|
return True
|
|
1354
1322
|
|
|
1355
|
-
@pyedb_function_handler()
|
|
1356
1323
|
def place_in_layout(
|
|
1357
1324
|
self,
|
|
1358
1325
|
edb,
|
|
@@ -1446,7 +1413,6 @@ class Stackup(LayerCollection):
|
|
|
1446
1413
|
self.refresh_layer_collection()
|
|
1447
1414
|
return True
|
|
1448
1415
|
|
|
1449
|
-
@pyedb_function_handler()
|
|
1450
1416
|
def place_in_layout_3d_placement(
|
|
1451
1417
|
self,
|
|
1452
1418
|
edb,
|
|
@@ -1579,7 +1545,6 @@ class Stackup(LayerCollection):
|
|
|
1579
1545
|
self.refresh_layer_collection()
|
|
1580
1546
|
return True
|
|
1581
1547
|
|
|
1582
|
-
@pyedb_function_handler()
|
|
1583
1548
|
def place_instance(
|
|
1584
1549
|
self,
|
|
1585
1550
|
component_edb,
|
|
@@ -1731,7 +1696,6 @@ class Stackup(LayerCollection):
|
|
|
1731
1696
|
self.refresh_layer_collection()
|
|
1732
1697
|
return cell_inst2
|
|
1733
1698
|
|
|
1734
|
-
@pyedb_function_handler()
|
|
1735
1699
|
def place_a3dcomp_3d_placement(
|
|
1736
1700
|
self,
|
|
1737
1701
|
a3dcomp_path,
|
|
@@ -1820,7 +1784,6 @@ class Stackup(LayerCollection):
|
|
|
1820
1784
|
self.refresh_layer_collection()
|
|
1821
1785
|
return True
|
|
1822
1786
|
|
|
1823
|
-
@pyedb_function_handler()
|
|
1824
1787
|
def residual_copper_area_per_layer(self):
|
|
1825
1788
|
"""Report residual copper area per layer in percentage.
|
|
1826
1789
|
|
|
@@ -1851,7 +1814,7 @@ class Stackup(LayerCollection):
|
|
|
1851
1814
|
return temp_data
|
|
1852
1815
|
|
|
1853
1816
|
# TODO: This method might need some refactoring
|
|
1854
|
-
|
|
1817
|
+
|
|
1855
1818
|
def _import_dict(self, json_dict, rename=False):
|
|
1856
1819
|
"""Import stackup from a dictionary."""
|
|
1857
1820
|
if not "materials" in json_dict:
|
|
@@ -1991,7 +1954,6 @@ class Stackup(LayerCollection):
|
|
|
1991
1954
|
|
|
1992
1955
|
return True
|
|
1993
1956
|
|
|
1994
|
-
@pyedb_function_handler()
|
|
1995
1957
|
def _import_json(self, file_path, rename=False):
|
|
1996
1958
|
"""Import stackup from a json file."""
|
|
1997
1959
|
if file_path:
|
|
@@ -1999,7 +1961,6 @@ class Stackup(LayerCollection):
|
|
|
1999
1961
|
json_dict = json.load(f) # pragma: no cover
|
|
2000
1962
|
return self._import_dict(json_dict, rename)
|
|
2001
1963
|
|
|
2002
|
-
@pyedb_function_handler()
|
|
2003
1964
|
def _import_csv(self, file_path):
|
|
2004
1965
|
"""Import stackup definition from a CSV file.
|
|
2005
1966
|
|
|
@@ -2046,7 +2007,6 @@ class Stackup(LayerCollection):
|
|
|
2046
2007
|
self.refresh_layer_collection()
|
|
2047
2008
|
return True
|
|
2048
2009
|
|
|
2049
|
-
@pyedb_function_handler()
|
|
2050
2010
|
def _set(self, layers=None, materials=None, roughness=None, non_stackup_layers=None):
|
|
2051
2011
|
"""Update stackup information.
|
|
2052
2012
|
|
|
@@ -2175,7 +2135,6 @@ class Stackup(LayerCollection):
|
|
|
2175
2135
|
|
|
2176
2136
|
return True
|
|
2177
2137
|
|
|
2178
|
-
@pyedb_function_handler()
|
|
2179
2138
|
def _get(self):
|
|
2180
2139
|
"""Get stackup information from layout.
|
|
2181
2140
|
|
|
@@ -2247,7 +2206,6 @@ class Stackup(LayerCollection):
|
|
|
2247
2206
|
|
|
2248
2207
|
return layers, materials, roughness_models, non_stackup_layers
|
|
2249
2208
|
|
|
2250
|
-
@pyedb_function_handler()
|
|
2251
2209
|
def _add_materials_from_dictionary(self, material_dict):
|
|
2252
2210
|
materials = self.self._pedb.materials.materials
|
|
2253
2211
|
for name, material_properties in material_dict.items():
|
|
@@ -2269,7 +2227,6 @@ class Stackup(LayerCollection):
|
|
|
2269
2227
|
material.loss_tanget = material_properties["DielectricLossTangent"]
|
|
2270
2228
|
return True
|
|
2271
2229
|
|
|
2272
|
-
@pyedb_function_handler()
|
|
2273
2230
|
def _import_xml(self, file_path, rename=False):
|
|
2274
2231
|
"""Read external xml file and convert into json file.
|
|
2275
2232
|
You can use xml file to import layer stackup but using json file is recommended.
|
|
@@ -2342,7 +2299,6 @@ class Stackup(LayerCollection):
|
|
|
2342
2299
|
cfg = {"stackup": stackup_dict}
|
|
2343
2300
|
return self._pedb.configuration.load(cfg, apply_file=True)
|
|
2344
2301
|
|
|
2345
|
-
@pyedb_function_handler()
|
|
2346
2302
|
def _export_xml(self, file_path):
|
|
2347
2303
|
"""Export stackup information to an external XMLfile.
|
|
2348
2304
|
|
|
@@ -2393,7 +2349,6 @@ class Stackup(LayerCollection):
|
|
|
2393
2349
|
write_pretty_xml(root, file_path)
|
|
2394
2350
|
return True
|
|
2395
2351
|
|
|
2396
|
-
@pyedb_function_handler()
|
|
2397
2352
|
def load(self, file_path, rename=False):
|
|
2398
2353
|
"""Import stackup from a file. The file format can be XML, CSV, or JSON. Valid control file must
|
|
2399
2354
|
have the same number of signal layers. Signals layers can be renamed. Dielectric layers can be
|
|
@@ -2433,7 +2388,6 @@ class Stackup(LayerCollection):
|
|
|
2433
2388
|
else:
|
|
2434
2389
|
return False
|
|
2435
2390
|
|
|
2436
|
-
@pyedb_function_handler()
|
|
2437
2391
|
def import_stackup(self, file_path):
|
|
2438
2392
|
"""Import stackup from a file. The file format can be XML, CSV, or JSON.
|
|
2439
2393
|
|
|
@@ -2460,7 +2414,6 @@ class Stackup(LayerCollection):
|
|
|
2460
2414
|
self._logger.warning("Method import_stackup is deprecated. Use .load")
|
|
2461
2415
|
return self.load(file_path)
|
|
2462
2416
|
|
|
2463
|
-
@pyedb_function_handler()
|
|
2464
2417
|
def plot(
|
|
2465
2418
|
self,
|
|
2466
2419
|
save_plot=None,
|