pyedb 0.13.dev0__py3-none-any.whl → 0.15.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.

Files changed (75) hide show
  1. pyedb/__init__.py +1 -1
  2. pyedb/configuration/cfg_common.py +0 -5
  3. pyedb/configuration/cfg_components.py +0 -2
  4. pyedb/configuration/cfg_operations.py +0 -2
  5. pyedb/configuration/cfg_package_definition.py +0 -2
  6. pyedb/configuration/cfg_ports_sources.py +14 -11
  7. pyedb/configuration/cfg_stackup.py +0 -7
  8. pyedb/configuration/configuration.py +0 -6
  9. pyedb/dotnet/application/Variables.py +4 -40
  10. pyedb/dotnet/edb.py +27 -82
  11. pyedb/dotnet/edb_core/{edb_data/components_data.py → cell/hierarchy/component.py} +13 -133
  12. pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -3
  13. pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +30 -0
  14. pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +105 -0
  15. pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +34 -0
  16. pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +34 -0
  17. pyedb/dotnet/edb_core/cell/layout.py +137 -0
  18. pyedb/dotnet/edb_core/cell/layout_obj.py +2 -4
  19. pyedb/dotnet/edb_core/cell/primitive.py +199 -1
  20. pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +52 -0
  21. pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +50 -0
  22. pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +88 -0
  23. pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +59 -0
  24. pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +73 -0
  25. pyedb/dotnet/edb_core/{edb_data/terminals.py → cell/terminal/terminal.py} +33 -242
  26. pyedb/dotnet/edb_core/components.py +10 -56
  27. pyedb/dotnet/edb_core/definition/component_def.py +1 -8
  28. pyedb/dotnet/edb_core/definition/component_model.py +0 -2
  29. pyedb/dotnet/edb_core/definition/definitions.py +0 -2
  30. pyedb/dotnet/edb_core/definition/package_def.py +7 -5
  31. pyedb/dotnet/edb_core/edb_data/control_file.py +0 -3
  32. pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -5
  33. pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +4 -9
  34. pyedb/dotnet/edb_core/edb_data/layer_data.py +0 -7
  35. pyedb/dotnet/edb_core/edb_data/nets_data.py +2 -5
  36. pyedb/dotnet/edb_core/edb_data/padstacks_data.py +11 -29
  37. pyedb/dotnet/edb_core/edb_data/ports.py +4 -4
  38. pyedb/dotnet/edb_core/edb_data/primitives_data.py +3 -26
  39. pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +13 -20
  40. pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +3 -11
  41. pyedb/dotnet/edb_core/edb_data/sources.py +12 -17
  42. pyedb/dotnet/edb_core/general.py +1 -6
  43. pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -3
  44. pyedb/dotnet/edb_core/hfss.py +1 -33
  45. pyedb/dotnet/edb_core/layout.py +0 -35
  46. pyedb/dotnet/edb_core/layout_validation.py +1 -3
  47. pyedb/dotnet/edb_core/materials.py +1 -22
  48. pyedb/dotnet/edb_core/net_class.py +0 -8
  49. pyedb/dotnet/edb_core/nets.py +4 -29
  50. pyedb/dotnet/edb_core/padstack.py +76 -30
  51. pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +72 -0
  52. pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +287 -0
  53. pyedb/dotnet/edb_core/{edb_data/hfss_simulation_setup_data.py → sim_setup_data/data/settings.py} +174 -878
  54. pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +509 -0
  55. pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
  56. pyedb/dotnet/edb_core/{edb_data/siwave_simulation_setup_data.py → sim_setup_data/io/siwave.py} +0 -341
  57. pyedb/dotnet/edb_core/siwave.py +5 -33
  58. pyedb/dotnet/edb_core/stackup.py +4 -51
  59. pyedb/dotnet/edb_core/utilities/simulation_setup.py +613 -366
  60. pyedb/generic/data_handlers.py +1 -9
  61. pyedb/generic/general_methods.py +3 -53
  62. pyedb/generic/plot.py +1 -2
  63. pyedb/ipc2581/ecad/cad_data/layer_feature.py +1 -7
  64. pyedb/ipc2581/ecad/cad_data/package.py +1 -4
  65. pyedb/ipc2581/ecad/cad_data/path.py +1 -3
  66. pyedb/ipc2581/ecad/cad_data/polygon.py +1 -6
  67. pyedb/ipc2581/ecad/cad_data/step.py +1 -10
  68. pyedb/ipc2581/ipc2581.py +8 -15
  69. pyedb/modeler/geometry_operators.py +164 -67
  70. pyedb/siwave.py +25 -32
  71. {pyedb-0.13.dev0.dist-info → pyedb-0.15.dev0.dist-info}/METADATA +2 -2
  72. {pyedb-0.13.dev0.dist-info → pyedb-0.15.dev0.dist-info}/RECORD +75 -61
  73. /pyedb/dotnet/edb_core/cell/{__init__.py → terminal/__init__.py} +0 -0
  74. {pyedb-0.13.dev0.dist-info → pyedb-0.15.dev0.dist-info}/LICENSE +0 -0
  75. {pyedb-0.13.dev0.dist-info → pyedb-0.15.dev0.dist-info}/WHEEL +0 -0
@@ -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
- @pyedb_function_handler()
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
- @pyedb_function_handler()
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
- @pyedb_function_handler()
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,