pyedb 0.53.0__py3-none-any.whl → 0.55.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.

Files changed (119) hide show
  1. pyedb/__init__.py +1 -8
  2. pyedb/configuration/cfg_boundaries.py +69 -151
  3. pyedb/configuration/cfg_components.py +201 -460
  4. pyedb/configuration/cfg_data.py +4 -2
  5. pyedb/configuration/cfg_general.py +13 -36
  6. pyedb/configuration/cfg_modeler.py +2 -1
  7. pyedb/configuration/cfg_nets.py +21 -35
  8. pyedb/configuration/cfg_operations.py +22 -151
  9. pyedb/configuration/cfg_package_definition.py +56 -112
  10. pyedb/configuration/cfg_padstacks.py +292 -688
  11. pyedb/configuration/cfg_pin_groups.py +32 -79
  12. pyedb/configuration/cfg_ports_sources.py +20 -9
  13. pyedb/configuration/cfg_s_parameter_models.py +67 -172
  14. pyedb/configuration/cfg_setup.py +102 -295
  15. pyedb/configuration/configuration.py +66 -6
  16. pyedb/dotnet/database/cell/connectable.py +38 -9
  17. pyedb/dotnet/database/cell/hierarchy/component.py +28 -28
  18. pyedb/dotnet/database/cell/hierarchy/model.py +1 -1
  19. pyedb/dotnet/database/cell/layout.py +64 -3
  20. pyedb/dotnet/database/cell/layout_obj.py +3 -3
  21. pyedb/dotnet/database/cell/primitive/path.py +6 -8
  22. pyedb/dotnet/database/cell/primitive/primitive.py +10 -31
  23. pyedb/dotnet/database/cell/terminal/edge_terminal.py +2 -2
  24. pyedb/dotnet/database/cell/terminal/padstack_instance_terminal.py +1 -1
  25. pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +1 -1
  26. pyedb/dotnet/database/cell/terminal/point_terminal.py +1 -1
  27. pyedb/dotnet/database/cell/terminal/terminal.py +26 -28
  28. pyedb/dotnet/database/cell/voltage_regulator.py +0 -21
  29. pyedb/dotnet/database/components.py +99 -91
  30. pyedb/dotnet/database/definition/component_def.py +4 -4
  31. pyedb/dotnet/database/definition/component_model.py +1 -1
  32. pyedb/dotnet/database/definition/package_def.py +2 -3
  33. pyedb/dotnet/database/dotnet/database.py +27 -218
  34. pyedb/dotnet/database/dotnet/primitive.py +16 -16
  35. pyedb/dotnet/database/edb_data/control_file.py +5 -5
  36. pyedb/dotnet/database/edb_data/hfss_extent_info.py +6 -6
  37. pyedb/dotnet/database/edb_data/layer_data.py +35 -35
  38. pyedb/dotnet/database/edb_data/padstacks_data.py +65 -90
  39. pyedb/dotnet/database/edb_data/primitives_data.py +5 -5
  40. pyedb/dotnet/database/edb_data/sources.py +6 -6
  41. pyedb/dotnet/database/edb_data/variables.py +8 -4
  42. pyedb/dotnet/database/geometry/point_data.py +14 -10
  43. pyedb/dotnet/database/geometry/polygon_data.py +3 -5
  44. pyedb/dotnet/database/hfss.py +50 -52
  45. pyedb/dotnet/database/layout_validation.py +14 -11
  46. pyedb/dotnet/database/materials.py +10 -11
  47. pyedb/dotnet/database/modeler.py +104 -101
  48. pyedb/dotnet/database/nets.py +20 -23
  49. pyedb/dotnet/database/padstack.py +156 -84
  50. pyedb/dotnet/database/sim_setup_data/data/settings.py +24 -0
  51. pyedb/dotnet/database/sim_setup_data/io/siwave.py +26 -1
  52. pyedb/dotnet/database/siwave.py +47 -47
  53. pyedb/dotnet/database/stackup.py +152 -87
  54. pyedb/dotnet/database/utilities/heatsink.py +4 -4
  55. pyedb/dotnet/database/utilities/obj_base.py +3 -3
  56. pyedb/dotnet/database/utilities/simulation_setup.py +2 -2
  57. pyedb/dotnet/database/utilities/value.py +116 -0
  58. pyedb/dotnet/edb.py +248 -170
  59. pyedb/edb_logger.py +12 -27
  60. pyedb/extensions/via_design_backend.py +6 -3
  61. pyedb/generic/design_types.py +68 -21
  62. pyedb/generic/general_methods.py +0 -120
  63. pyedb/generic/process.py +44 -108
  64. pyedb/generic/settings.py +75 -19
  65. pyedb/grpc/__init__.py +0 -0
  66. pyedb/grpc/database/components.py +55 -17
  67. pyedb/grpc/database/control_file.py +5 -5
  68. pyedb/grpc/database/definition/materials.py +24 -31
  69. pyedb/grpc/database/definition/package_def.py +18 -18
  70. pyedb/grpc/database/definition/padstack_def.py +104 -51
  71. pyedb/grpc/database/geometry/arc_data.py +7 -5
  72. pyedb/grpc/database/geometry/point_3d_data.py +8 -7
  73. pyedb/grpc/database/geometry/polygon_data.py +4 -3
  74. pyedb/grpc/database/hierarchy/component.py +43 -38
  75. pyedb/grpc/database/hierarchy/pin_pair_model.py +15 -14
  76. pyedb/grpc/database/hierarchy/pingroup.py +9 -9
  77. pyedb/grpc/database/layers/stackup_layer.py +45 -44
  78. pyedb/grpc/database/layout/layout.py +17 -13
  79. pyedb/grpc/database/layout/voltage_regulator.py +7 -7
  80. pyedb/grpc/database/layout_validation.py +16 -15
  81. pyedb/grpc/database/modeler.py +60 -58
  82. pyedb/grpc/database/net/net.py +15 -14
  83. pyedb/grpc/database/nets.py +112 -31
  84. pyedb/grpc/database/padstacks.py +303 -190
  85. pyedb/grpc/database/ports/ports.py +5 -6
  86. pyedb/grpc/database/primitive/bondwire.py +8 -7
  87. pyedb/grpc/database/primitive/circle.py +4 -4
  88. pyedb/grpc/database/primitive/padstack_instance.py +191 -23
  89. pyedb/grpc/database/primitive/path.py +7 -7
  90. pyedb/grpc/database/primitive/polygon.py +3 -3
  91. pyedb/grpc/database/primitive/primitive.py +13 -17
  92. pyedb/grpc/database/primitive/rectangle.py +13 -13
  93. pyedb/grpc/database/simulation_setup/hfss_general_settings.py +1 -1
  94. pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +10 -0
  95. pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +17 -1
  96. pyedb/grpc/database/siwave.py +31 -25
  97. pyedb/grpc/database/source_excitations.py +335 -233
  98. pyedb/grpc/database/stackup.py +165 -148
  99. pyedb/grpc/database/terminal/bundle_terminal.py +18 -8
  100. pyedb/grpc/database/terminal/edge_terminal.py +10 -0
  101. pyedb/grpc/database/terminal/padstack_instance_terminal.py +16 -5
  102. pyedb/grpc/database/terminal/pingroup_terminal.py +12 -11
  103. pyedb/grpc/database/terminal/point_terminal.py +4 -3
  104. pyedb/grpc/database/terminal/terminal.py +9 -9
  105. pyedb/grpc/database/utility/value.py +109 -0
  106. pyedb/grpc/database/utility/xml_control_file.py +5 -5
  107. pyedb/grpc/edb.py +130 -63
  108. pyedb/grpc/edb_init.py +3 -10
  109. pyedb/grpc/rpc_session.py +10 -10
  110. pyedb/libraries/common.py +366 -0
  111. pyedb/libraries/rf_libraries/base_functions.py +1358 -0
  112. pyedb/libraries/rf_libraries/planar_antennas.py +628 -0
  113. pyedb/misc/decorators.py +61 -0
  114. pyedb/misc/misc.py +0 -13
  115. pyedb/siwave.py +2 -2
  116. {pyedb-0.53.0.dist-info → pyedb-0.55.0.dist-info}/METADATA +2 -3
  117. {pyedb-0.53.0.dist-info → pyedb-0.55.0.dist-info}/RECORD +119 -112
  118. {pyedb-0.53.0.dist-info → pyedb-0.55.0.dist-info}/WHEEL +0 -0
  119. {pyedb-0.53.0.dist-info → pyedb-0.55.0.dist-info}/licenses/LICENSE +0 -0
@@ -49,7 +49,7 @@ class LayerEdbClass(object):
49
49
  layer_type = self._layer_name_mapping[layer_type]
50
50
  layer_type = self._doc_layer_mapping[layer_type]
51
51
 
52
- self._edb_object = self._pedb.edb_api.cell._cell.Layer(
52
+ self._edb_object = self._pedb.core.Cell.Layer(
53
53
  self._name,
54
54
  layer_type,
55
55
  )
@@ -83,30 +83,30 @@ class LayerEdbClass(object):
83
83
  @property
84
84
  def _stackup_layer_mapping(self):
85
85
  return {
86
- "SignalLayer": self._edb.cell.layer_type.SignalLayer,
87
- "DielectricLayer": self._edb.cell.layer_type.DielectricLayer,
86
+ "SignalLayer": self._edb.Cell.LayerType.SignalLayer,
87
+ "DielectricLayer": self._edb.Cell.LayerType.DielectricLayer,
88
88
  }
89
89
 
90
90
  @property
91
91
  def _doc_layer_mapping(self):
92
92
  return {
93
- "ConductingLayer": self._edb.cell.layer_type.ConductingLayer,
94
- "AirlinesLayer": self._edb.cell.layer_type.AirlinesLayer,
95
- "ErrorsLayer": self._edb.cell.layer_type.ErrorsLayer,
96
- "SymbolLayer": self._edb.cell.layer_type.SymbolLayer,
97
- "MeasureLayer": self._edb.cell.layer_type.MeasureLayer,
98
- "AssemblyLayer": self._edb.cell.layer_type.AssemblyLayer,
99
- "SilkscreenLayer": self._edb.cell.layer_type.SilkscreenLayer,
100
- "SolderMaskLayer": self._edb.cell.layer_type.SolderMaskLayer,
101
- "SolderPasteLayer": self._edb.cell.layer_type.SolderPasteLayer,
102
- "GlueLayer": self._edb.cell.layer_type.GlueLayer,
103
- "WirebondLayer": self._edb.cell.layer_type.WirebondLayer,
104
- "UserLayer": self._edb.cell.layer_type.UserLayer,
105
- "SIwaveHFSSSolverRegions": self._edb.cell.layer_type.SIwaveHFSSSolverRegions,
106
- "PostprocessingLayer": self._edb.cell.layer_type.PostprocessingLayer,
107
- "OutlineLayer": self._edb.cell.layer_type.OutlineLayer,
108
- "LayerTypesCount": self._edb.cell.layer_type.LayerTypesCount,
109
- "UndefinedLayerType": self._edb.cell.layer_type.UndefinedLayerType,
93
+ "ConductingLayer": self._edb.Cell.LayerType.ConductingLayer,
94
+ "AirlinesLayer": self._edb.Cell.LayerType.AirlinesLayer,
95
+ "ErrorsLayer": self._edb.Cell.LayerType.ErrorsLayer,
96
+ "SymbolLayer": self._edb.Cell.LayerType.SymbolLayer,
97
+ "MeasureLayer": self._edb.Cell.LayerType.MeasureLayer,
98
+ "AssemblyLayer": self._edb.Cell.LayerType.AssemblyLayer,
99
+ "SilkscreenLayer": self._edb.Cell.LayerType.SilkscreenLayer,
100
+ "SolderMaskLayer": self._edb.Cell.LayerType.SolderMaskLayer,
101
+ "SolderPasteLayer": self._edb.Cell.LayerType.SolderPasteLayer,
102
+ "GlueLayer": self._edb.Cell.LayerType.GlueLayer,
103
+ "WirebondLayer": self._edb.Cell.LayerType.WirebondLayer,
104
+ "UserLayer": self._edb.Cell.LayerType.UserLayer,
105
+ "SIwaveHFSSSolverRegions": self._edb.Cell.LayerType.SIwaveHFSSSolverRegions,
106
+ "PostprocessingLayer": self._edb.Cell.LayerType.PostprocessingLayer,
107
+ "OutlineLayer": self._edb.Cell.LayerType.OutlineLayer,
108
+ "LayerTypesCount": self._edb.Cell.LayerType.LayerTypesCount,
109
+ "UndefinedLayerType": self._edb.Cell.LayerType.UndefinedLayerType,
110
110
  }
111
111
 
112
112
  @property
@@ -146,7 +146,7 @@ class LayerEdbClass(object):
146
146
 
147
147
  @property
148
148
  def _edb(self):
149
- return self._pedb.edb_api
149
+ return self._pedb.core
150
150
 
151
151
  @property
152
152
  def _edb_layer(self):
@@ -289,7 +289,7 @@ class StackupLayerEdbClass(LayerEdbClass):
289
289
  def _create(self, layer_type):
290
290
  layer_type_edb_name = self._layer_name_mapping[layer_type]
291
291
  layer_type = self._layer_type_mapping[layer_type_edb_name]
292
- self._edb_object = self._pedb.edb_api.cell._cell.StackupLayer(
292
+ self._edb_object = self._pedb.core.Cell.StackupLayer(
293
293
  self._name,
294
294
  layer_type,
295
295
  self._pedb.edb_value(0),
@@ -639,11 +639,11 @@ class StackupLayerEdbClass(LayerEdbClass):
639
639
  if not self.is_stackup_layer: # pragma: no cover
640
640
  return
641
641
  if surface == "top":
642
- return self._edb_layer.GetRoughnessModel(self._pedb.edb_api.Cell.RoughnessModel.Region.Top)
642
+ return self._edb_layer.GetRoughnessModel(self._pedb.core.Cell.RoughnessModel.Region.Top)
643
643
  elif surface == "bottom":
644
- return self._edb_layer.GetRoughnessModel(self._pedb.edb_api.Cell.RoughnessModel.Region.Bottom)
644
+ return self._edb_layer.GetRoughnessModel(self._pedb.core.Cell.RoughnessModel.Region.Bottom)
645
645
  elif surface == "side":
646
- return self._edb_layer.GetRoughnessModel(self._pedb.edb_api.Cell.RoughnessModel.Region.Side)
646
+ return self._edb_layer.GetRoughnessModel(self._pedb.core.Cell.RoughnessModel.Region.Side)
647
647
 
648
648
  def assign_roughness_model(
649
649
  self,
@@ -685,27 +685,27 @@ class StackupLayerEdbClass(LayerEdbClass):
685
685
  if apply_on_surface == "all":
686
686
  self._side_roughness = "all"
687
687
  regions = [
688
- self._pedb.edb_api.Cell.RoughnessModel.Region.Top,
689
- self._pedb.edb_api.Cell.RoughnessModel.Region.Side,
690
- self._pedb.edb_api.Cell.RoughnessModel.Region.Bottom,
688
+ self._pedb.core.Cell.RoughnessModel.Region.Top,
689
+ self._pedb.core.Cell.RoughnessModel.Region.Side,
690
+ self._pedb.core.Cell.RoughnessModel.Region.Bottom,
691
691
  ]
692
692
  elif apply_on_surface == "top":
693
693
  self._side_roughness = "top"
694
- regions = [self._pedb.edb_api.Cell.RoughnessModel.Region.Top]
694
+ regions = [self._pedb.core.Cell.RoughnessModel.Region.Top]
695
695
  elif apply_on_surface == "bottom":
696
696
  self._side_roughness = "bottom"
697
- regions = [self._pedb.edb_api.Cell.RoughnessModel.Region.Bottom]
697
+ regions = [self._pedb.core.Cell.RoughnessModel.Region.Bottom]
698
698
  elif apply_on_surface == "side":
699
699
  self._side_roughness = "side"
700
- regions = [self._pedb.edb_api.Cell.RoughnessModel.Region.Side]
700
+ regions = [self._pedb.core.Cell.RoughnessModel.Region.Side]
701
701
 
702
702
  layer_clone = self._edb_layer
703
703
  layer_clone.SetRoughnessEnabled(True)
704
704
  for r in regions:
705
705
  if model_type == "huray":
706
- model = self._pedb.edb_api.Cell.HurrayRoughnessModel(radius, surface_ratio)
706
+ model = self._pedb.core.Cell.HurrayRoughnessModel(radius, surface_ratio)
707
707
  else:
708
- model = self._pedb.edb_api.Cell.GroisseRoughnessModel(groisse_roughness)
708
+ model = self._pedb.core.Cell.GroisseRoughnessModel(groisse_roughness)
709
709
  layer_clone.SetRoughnessModel(r, model)
710
710
  return self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
711
711
 
@@ -800,7 +800,7 @@ class StackupLayerEdbClass(LayerEdbClass):
800
800
  "factor": self._edb_layer.GetEtchFactor().ToString(),
801
801
  "enabled": self._edb_layer.IsEtchFactorEnabled(),
802
802
  }
803
- if self._pedb.edbversion >= "2024.2":
803
+ if self._pedb.version >= "2024.2":
804
804
  etch_power_ground_nets = int(self._edb_layer.GetEtchNetClass())
805
805
  etch_power_ground_nets = False if etch_power_ground_nets else True
806
806
  data["etching"]["etch_power_ground_nets"] = etch_power_ground_nets
@@ -869,7 +869,7 @@ class StackupLayerEdbClass(LayerEdbClass):
869
869
  layer_clone = self._edb_layer
870
870
  layer_clone.SetEtchFactorEnabled(etching["enabled"])
871
871
  layer_clone.SetEtchFactor(self._pedb.stackup._edb_value(float(etching["factor"])))
872
- if self._pedb.edbversion >= "2024.2":
872
+ if self._pedb.version >= "2024.2":
873
873
  if etching["etch_power_ground_nets"]:
874
874
  layer_clone.SetEtchNetClass(self._pedb._edb.Cell.EtchNetClass.NoEtchPowerGroundNets)
875
875
  else:
@@ -25,7 +25,7 @@ import math
25
25
  import warnings
26
26
 
27
27
  from pyedb.dotnet.clr_module import String
28
- from pyedb.dotnet.database.cell.primitive.primitive import Primitive
28
+ from pyedb.dotnet.database.cell.primitive.primitive import Connectable
29
29
  from pyedb.dotnet.database.dotnet.database import PolygonDataDotNet
30
30
  from pyedb.dotnet.database.edb_data.edbvalue import EdbValue
31
31
  from pyedb.dotnet.database.general import (
@@ -167,7 +167,7 @@ class EDBPadProperties(object):
167
167
  self.layer_name, self.int_to_pad_type(self.pad_type)
168
168
  )
169
169
  if flag:
170
- return PolygonData(self._edb._app, edb_object)
170
+ return PolygonData(self._pedbpadstack._ppadstack._pedb, edb_object)
171
171
  else: # pragma no cover
172
172
  raise AttributeError("No polygon data.")
173
173
 
@@ -180,15 +180,12 @@ class EDBPadProperties(object):
180
180
  list
181
181
  List of parameters.
182
182
  """
183
- try:
184
- pad_values = self._edb_padstack.GetData().GetPolygonalPadParameters(
185
- self.layer_name, self.int_to_pad_type(self.pad_type)
186
- )
187
- if pad_values[1]:
188
- return PolygonDataDotNet(self._edb._app, pad_values[1])
189
- else:
190
- return
191
- except:
183
+ pad_values = self._edb_padstack.GetData().GetPolygonalPadParameters(
184
+ self.layer_name, self.int_to_pad_type(self.pad_type)
185
+ )
186
+ if pad_values[1]:
187
+ return PolygonDataDotNet(self._pedbpadstack._ppadstack._pedb, pad_values[1])
188
+ else:
192
189
  return
193
190
 
194
191
  @property
@@ -383,7 +380,7 @@ class EDBPadProperties(object):
383
380
  ``True`` when successful, ``False`` when failed.
384
381
  """
385
382
  originalPadstackDefinitionData = self._edb_padstack.GetData()
386
- newPadstackDefinitionData = self._edb.definition.PadstackDefData(originalPadstackDefinitionData)
383
+ newPadstackDefinitionData = self._edb.Definition.PadstackDefData(originalPadstackDefinitionData)
387
384
  if not pad_type:
388
385
  pad_type = self.pad_type
389
386
  if not geom_type:
@@ -470,7 +467,7 @@ class EDBPadstack(object):
470
467
 
471
468
  """
472
469
  pstack_data = self._edb_object.GetData()
473
- return self._edb.definition.PadstackDefData(pstack_data)
470
+ return self._edb.Definition.PadstackDefData(pstack_data)
474
471
 
475
472
  @_padstack_def_data.setter
476
473
  def _padstack_def_data(self, value):
@@ -591,7 +588,7 @@ class EDBPadstack(object):
591
588
  ``True`` when successful, ``False`` when failed.
592
589
  """
593
590
  originalPadstackDefinitionData = self.edb_padstack.GetData()
594
- newPadstackDefinitionData = self._edb.definition.PadstackDefData(originalPadstackDefinitionData)
591
+ newPadstackDefinitionData = self._edb.Definition.PadstackDefData(originalPadstackDefinitionData)
595
592
  if not hole_type:
596
593
  hole_type = self.hole_type
597
594
  if not params:
@@ -705,12 +702,12 @@ class EDBPadstack(object):
705
702
  float
706
703
  Percentage for the hole plating.
707
704
  """
708
- return self._edb.definition.PadstackDefData(self.edb_padstack.GetData()).GetHolePlatingPercentage()
705
+ return self._edb.Definition.PadstackDefData(self.edb_padstack.GetData()).GetHolePlatingPercentage()
709
706
 
710
707
  @hole_plating_ratio.setter
711
708
  def hole_plating_ratio(self, ratio):
712
709
  originalPadstackDefinitionData = self.edb_padstack.GetData()
713
- newPadstackDefinitionData = self._edb.definition.PadstackDefData(originalPadstackDefinitionData)
710
+ newPadstackDefinitionData = self._edb.Definition.PadstackDefData(originalPadstackDefinitionData)
714
711
  newPadstackDefinitionData.SetHolePlatingPercentage(self._get_edb_value(ratio))
715
712
  self.edb_padstack.SetData(newPadstackDefinitionData)
716
713
 
@@ -797,7 +794,7 @@ class EDBPadstack(object):
797
794
  @hole_range.setter
798
795
  def hole_range(self, value):
799
796
  pdef_data = self._padstack_def_data
800
- pdef_data.SetHoleRange(getattr(self._edb.definition.PadstackHoleRange, snake_to_pascal(value)))
797
+ pdef_data.SetHoleRange(getattr(self._edb.Definition.PadstackHoleRange, snake_to_pascal(value)))
801
798
  self._padstack_def_data = pdef_data
802
799
 
803
800
  def convert_to_3d_microvias(self, convert_only_signal_vias=True, hole_wall_angle=75, delete_padstack_def=True):
@@ -847,7 +844,7 @@ class EDBPadstack(object):
847
844
  net_name=via._edb_padstackinstance.GetNet().GetName(),
848
845
  )
849
846
  else:
850
- self._edb.cell.primitive.circle.create(
847
+ self._edb.Cell.Primitive.Circle.Create(
851
848
  layout,
852
849
  self.via_start_layer,
853
850
  via._edb_padstackinstance.GetNet(),
@@ -862,7 +859,7 @@ class EDBPadstack(object):
862
859
  net_name=via._edb_padstackinstance.GetNet().GetName(),
863
860
  )
864
861
  else:
865
- self._edb.cell.primitive.circle.create(
862
+ self._edb.Cell.Primitive.Circle.Create(
866
863
  layout,
867
864
  self.via_stop_layer,
868
865
  via._edb_padstackinstance.GetNet(),
@@ -890,7 +887,7 @@ class EDBPadstack(object):
890
887
  rad_u = rad_small
891
888
  rad_l = rad_large
892
889
 
893
- cloned_circle = self._edb.cell.primitive.circle.create(
890
+ cloned_circle = self._edb.Cell.Primitive.Circle.Create(
894
891
  layout,
895
892
  start,
896
893
  via._edb_padstackinstance.GetNet(),
@@ -898,7 +895,7 @@ class EDBPadstack(object):
898
895
  self._get_edb_value(pos[1]),
899
896
  self._get_edb_value(rad_u),
900
897
  )
901
- cloned_circle2 = self._edb.cell.primitive.circle.create(
898
+ cloned_circle2 = self._edb.Cell.Primitive.Circle.Create(
902
899
  layout,
903
900
  stop,
904
901
  via._edb_padstackinstance.GetNet(),
@@ -906,13 +903,13 @@ class EDBPadstack(object):
906
903
  self._get_edb_value(pos[1]),
907
904
  self._get_edb_value(rad_l),
908
905
  )
909
- s3d = self._edb.cell.hierarchy._hierarchy.Structure3D.Create(
906
+ s3d = self._edb.Cell.Hierarchy.Structure3D.Create(
910
907
  layout, generate_unique_name("via3d_" + via.aedt_name.replace("via_", ""), n=3)
911
908
  )
912
- s3d.AddMember(cloned_circle.prim_obj)
913
- s3d.AddMember(cloned_circle2.prim_obj)
909
+ s3d.AddMember(cloned_circle)
910
+ s3d.AddMember(cloned_circle2)
914
911
  s3d.SetMaterial(self.material)
915
- s3d.SetMeshClosureProp(self._edb.cell.hierarchy._hierarchy.Structure3D.TClosure.EndsClosed)
912
+ s3d.SetMeshClosureProp(self._edb.Cell.Hierarchy.Structure3D.TClosure.EndsClosed)
916
913
  started = True
917
914
  i += 1
918
915
  if stop == via.stop_layer:
@@ -954,13 +951,13 @@ class EDBPadstack(object):
954
951
  stop = layer_names[layer_names.index(layer_name) + 1]
955
952
  new_padstack_name = "MV_{}_{}_{}".format(self.name, start, stop)
956
953
  included = [start, stop]
957
- new_padstack_definition_data = self._ppadstack._pedb.edb_api.definition.PadstackDefData.Create()
954
+ new_padstack_definition_data = self._ppadstack._pedb.core.Definition.PadstackDefData.Create()
958
955
  new_padstack_definition_data.AddLayers(convert_py_list_to_net_list(included))
959
956
  for layer in included:
960
957
  pl = self.pad_by_layer[layer]
961
958
  new_padstack_definition_data.SetPadParameters(
962
959
  layer,
963
- self._ppadstack._pedb.edb_api.definition.PadType.RegularPad,
960
+ self._ppadstack._pedb.core.Definition.PadType.RegularPad,
964
961
  pl.int_to_geometry_type(pl.geometry_type),
965
962
  list(
966
963
  pl._edb_padstack.GetData().GetPadParametersValue(
@@ -980,7 +977,7 @@ class EDBPadstack(object):
980
977
  pl = self.antipad_by_layer[layer]
981
978
  new_padstack_definition_data.SetPadParameters(
982
979
  layer,
983
- self._ppadstack._pedb.edb_api.definition.PadType.AntiPad,
980
+ self._ppadstack._pedb.core.Definition.PadType.AntiPad,
984
981
  pl.int_to_geometry_type(pl.geometry_type),
985
982
  list(
986
983
  pl._edb_padstack.GetData().GetPadParametersValue(
@@ -1000,7 +997,7 @@ class EDBPadstack(object):
1000
997
  pl = self.thermalpad_by_layer[layer]
1001
998
  new_padstack_definition_data.SetPadParameters(
1002
999
  layer,
1003
- self._ppadstack._pedb.edb_api.definition.PadType.ThermalPad,
1000
+ self._ppadstack._pedb.core.Definition.PadType.ThermalPad,
1004
1001
  pl.int_to_geometry_type(pl.geometry_type),
1005
1002
  list(
1006
1003
  pl._edb_padstack.GetData().GetPadParametersValue(
@@ -1026,7 +1023,7 @@ class EDBPadstack(object):
1026
1023
  )
1027
1024
  new_padstack_definition_data.SetMaterial(self.material)
1028
1025
  new_padstack_definition_data.SetHolePlatingPercentage(self._get_edb_value(self.hole_plating_ratio))
1029
- padstack_definition = self._edb.definition.PadstackDef.Create(
1026
+ padstack_definition = self._edb.Definition.PadstackDef.Create(
1030
1027
  self._ppadstack._pedb.active_db, new_padstack_name
1031
1028
  )
1032
1029
  padstack_definition.SetData(new_padstack_definition_data)
@@ -1048,7 +1045,7 @@ class EDBPadstack(object):
1048
1045
  for l in self._ppadstack._pedb.stackup._edb_layer_list
1049
1046
  if l.GetName() == list(instance.GetData().GetLayerNames())[-1]
1050
1047
  ][0]
1051
- padstack_instance = self._edb.cell.primitive.padstack_instance.create(
1048
+ padstack_instance = self._edb.Cell.Primitive.PadstackInstance.Create(
1052
1049
  layout,
1053
1050
  via._edb_padstackinstance.GetNet(),
1054
1051
  generate_unique_name(instance.GetName()),
@@ -1060,7 +1057,7 @@ class EDBPadstack(object):
1060
1057
  None,
1061
1058
  None,
1062
1059
  )
1063
- padstack_instance._edb_object.SetIsLayoutPin(via.is_pin)
1060
+ padstack_instance.SetIsLayoutPin(via.is_pin)
1064
1061
  i += 1
1065
1062
  via.delete()
1066
1063
  self._ppadstack._pedb.logger.info("Created {} new microvias.".format(i))
@@ -1079,8 +1076,8 @@ class EDBPadstack(object):
1079
1076
  bool
1080
1077
  ``True`` when succeed ``False`` when failed.
1081
1078
  """
1082
- cloned_padstack_data = self._edb.definition.PadstackDefData(self.edb_padstack.GetData())
1083
- new_padstack_data = self._edb.definition.PadstackDefData.Create()
1079
+ cloned_padstack_data = self._edb.Definition.PadstackDefData(self.edb_padstack.GetData())
1080
+ new_padstack_data = self._edb.Definition.PadstackDefData.Create()
1084
1081
  layers_name = cloned_padstack_data.GetLayerNames()
1085
1082
  layers_to_add = []
1086
1083
  for layer in layers_name:
@@ -1092,7 +1089,7 @@ class EDBPadstack(object):
1092
1089
  for layer in layers_name:
1093
1090
  updated_pad = self.pad_by_layer[layer]
1094
1091
  if not updated_pad.geometry_type == 0: # pragma no cover
1095
- pad_type = self._edb.definition.PadType.RegularPad
1092
+ pad_type = self._edb.Definition.PadType.RegularPad
1096
1093
  geom_type = self.pad_by_layer[layer]._pad_parameter_value[1]
1097
1094
  parameters = self.pad_by_layer[layer]._pad_parameter_value[2]
1098
1095
  offset_x = self.pad_by_layer[layer]._pad_parameter_value[3]
@@ -1107,7 +1104,7 @@ class EDBPadstack(object):
1107
1104
 
1108
1105
  updated_anti_pad = self.antipad_by_layer[layer]
1109
1106
  if not updated_anti_pad.geometry_type == 0: # pragma no cover
1110
- pad_type = self._edb.definition.PadType.AntiPad
1107
+ pad_type = self._edb.Definition.PadType.AntiPad
1111
1108
  geom_type = self.pad_by_layer[layer]._pad_parameter_value[1]
1112
1109
  parameters = self.pad_by_layer[layer]._pad_parameter_value[2]
1113
1110
  offset_x = self.pad_by_layer[layer]._pad_parameter_value[3]
@@ -1124,7 +1121,7 @@ class EDBPadstack(object):
1124
1121
 
1125
1122
  updated_thermal_pad = self.thermalpad_by_layer[layer]
1126
1123
  if not updated_thermal_pad.geometry_type == 0: # pragma no cover
1127
- pad_type = self._edb.definition.PadType.ThermalPad
1124
+ pad_type = self._edb.Definition.PadType.ThermalPad
1128
1125
  geom_type = self.pad_by_layer[layer]._pad_parameter_value[1]
1129
1126
  parameters = self.pad_by_layer[layer]._pad_parameter_value[2]
1130
1127
  offset_x = self.pad_by_layer[layer]._pad_parameter_value[3]
@@ -1164,7 +1161,7 @@ class EDBPadstack(object):
1164
1161
  return True
1165
1162
 
1166
1163
 
1167
- class EDBPadstackInstance(Primitive):
1164
+ class EDBPadstackInstance(Connectable):
1168
1165
  """Manages EDB functionalities for a padstack.
1169
1166
 
1170
1167
  Parameters
@@ -1422,7 +1419,7 @@ class EDBPadstackInstance(Primitive):
1422
1419
  tuple
1423
1420
  Tuple of the layer name, drill diameter, and offset if it exists.
1424
1421
  """
1425
- layer = self._pedb.edb_api.cell.layer("", self._pedb.edb_api.cell.layer_type.SignalLayer)
1422
+ layer = self._pedb.core.Cell.Layer("", self._pedb.core.Cell.LayerType.SignalLayer)
1426
1423
  val = self._pedb.edb_value(0)
1427
1424
  offset = self._pedb.edb_value(0.0)
1428
1425
  (
@@ -1488,7 +1485,7 @@ class EDBPadstackInstance(Primitive):
1488
1485
  tuple
1489
1486
  Tuple of the layer name, drill diameter, and drill offset if it exists.
1490
1487
  """
1491
- layer = self._pedb.edb_api.cell.layer("", self._pedb.edb_api.cell.layer_type.SignalLayer)
1488
+ layer = self._pedb.core.Cell.Layer("", self._pedb.core.Cell.LayerType.SignalLayer)
1492
1489
  val = self._pedb.edb_value(0)
1493
1490
  offset = self._pedb.edb_value(0.0)
1494
1491
  (
@@ -1509,7 +1506,7 @@ class EDBPadstackInstance(Primitive):
1509
1506
  def backdrill_parameters(self):
1510
1507
  data = {}
1511
1508
  flag, drill_to_layer, offset, diameter = self._edb_object.GetBackDrillParametersLayerValue(
1512
- self._pedb.edb_api.cell.layer("", self._pedb.edb_api.cell.layer_type.SignalLayer),
1509
+ self._pedb.core.Cell.Layer("", self._pedb.core.Cell.LayerType.SignalLayer),
1513
1510
  self._pedb.edb_value(0),
1514
1511
  self._pedb.edb_value(0.0),
1515
1512
  True,
@@ -1522,7 +1519,7 @@ class EDBPadstackInstance(Primitive):
1522
1519
  "stub_length": offset.ToString(),
1523
1520
  }
1524
1521
  flag, drill_to_layer, offset, diameter = self._edb_object.GetBackDrillParametersLayerValue(
1525
- self._pedb.edb_api.cell.layer("", self._pedb.edb_api.cell.layer_type.SignalLayer),
1522
+ self._pedb.core.Cell.Layer("", self._pedb.core.Cell.LayerType.SignalLayer),
1526
1523
  self._pedb.edb_value(0),
1527
1524
  self._pedb.edb_value(0.0),
1528
1525
  False,
@@ -1676,14 +1673,6 @@ class EDBPadstackInstance(Primitive):
1676
1673
  """
1677
1674
  self._edb_padstackinstance.SetIsLayoutPin(pin)
1678
1675
 
1679
- @property
1680
- def component(self):
1681
- """Component."""
1682
- from pyedb.dotnet.database.cell.hierarchy.component import EDBComponent
1683
-
1684
- comp = EDBComponent(self._pedb, self._edb_object.GetComponent())
1685
- return comp if not comp.is_null else False
1686
-
1687
1676
  @property
1688
1677
  def position(self):
1689
1678
  """Padstack instance position.
@@ -1710,8 +1699,10 @@ class EDBPadstackInstance(Primitive):
1710
1699
  pos.append(self._pedb.edb_value(v))
1711
1700
  else:
1712
1701
  pos.append(v)
1713
- point_data = self._pedb.edb_api.geometry.point_data(pos[0], pos[1])
1714
- self._edb_padstackinstance.SetPositionAndRotation(point_data, self._pedb.edb_value(self.rotation))
1702
+ point_data = self._pedb.pedb_class.database.geometry.point_data.PointData.create_from_xy(
1703
+ self._pedb, pos[0], pos[1]
1704
+ )
1705
+ self._edb_padstackinstance.SetPositionAndRotation(point_data._edb_object, self._pedb.edb_value(self.rotation))
1715
1706
 
1716
1707
  @property
1717
1708
  def rotation(self):
@@ -1727,19 +1718,6 @@ class EDBPadstackInstance(Primitive):
1727
1718
  if out[0]:
1728
1719
  return round(out[2].ToDouble(), 6)
1729
1720
 
1730
- @property
1731
- def name(self):
1732
- """Padstack Instance Name. If it is a pin, the syntax will be like in AEDT ComponentName-PinName."""
1733
- if self.is_pin:
1734
- return self.aedt_name
1735
- else:
1736
- return self.component_pin
1737
-
1738
- @name.setter
1739
- def name(self, value):
1740
- self._edb_padstackinstance.SetName(value)
1741
- self._edb_padstackinstance.SetProductProperty(self._pedb.edb_api.ProductId.Designer, 11, value)
1742
-
1743
1721
  @property
1744
1722
  def metal_volume(self):
1745
1723
  """Metal volume of the via hole instance in cubic units (m3). Metal plating ratio is accounted.
@@ -1776,13 +1754,14 @@ class EDBPadstackInstance(Primitive):
1776
1754
  @property
1777
1755
  def pin_number(self):
1778
1756
  """Get pin number."""
1779
- warnings.warn("`pin_number` is deprecated. Use `component_pin` method instead.", DeprecationWarning)
1780
- return self.component_pin
1757
+ warnings.warn("`pin_number` is deprecated. Use `name` method instead.", DeprecationWarning)
1758
+ return self.name
1781
1759
 
1782
1760
  @property
1783
1761
  def component_pin(self):
1784
1762
  """Get component pin."""
1785
- return self._edb_padstackinstance.GetName()
1763
+ warnings.warn("`pin_number` is deprecated. Use `name` method instead.", DeprecationWarning)
1764
+ return self.name
1786
1765
 
1787
1766
  @property
1788
1767
  def aedt_name(self):
@@ -1806,19 +1785,19 @@ class EDBPadstackInstance(Primitive):
1806
1785
  """
1807
1786
 
1808
1787
  val = String("")
1809
- _, name = self._edb_padstackinstance.GetProductProperty(self._pedb.edb_api.ProductId.Designer, 11, val)
1788
+ _, name = self._edb_padstackinstance.GetProductProperty(self._pedb.core.ProductId.Designer, 11, val)
1810
1789
  aedt_name = str(name).strip("'")
1811
1790
  if aedt_name == "":
1812
- if self.is_pin and self.component:
1813
- aedt_name = f"{self.component.name}-{self.component_pin}"
1814
- elif self.component_pin:
1815
- aedt_name = self.component_pin
1791
+ if self.component_name:
1792
+ aedt_name = f"{self.component_name}-{self.name}"
1793
+ else:
1794
+ aedt_name = "Via_{}".format(self.id)
1816
1795
  self.aedt_name = aedt_name
1817
1796
  return aedt_name
1818
1797
 
1819
1798
  @aedt_name.setter
1820
1799
  def aedt_name(self, value):
1821
- self._edb_object.SetProductProperty(self._pedb.edb_api.ProductId.Designer, 11, value)
1800
+ self._edb_object.SetProductProperty(self._pedb.core.ProductId.Designer, 11, value)
1822
1801
 
1823
1802
  def parametrize_position(self, prefix=None):
1824
1803
  """Parametrize the instance position.
@@ -1983,17 +1962,13 @@ class EDBPadstackInstance(Primitive):
1983
1962
  padstack_center = self.position
1984
1963
  rotation = self.rotation # in radians
1985
1964
  padstack_name = self.padstack_definition
1986
- try:
1987
- padstack = self._pedb.padstacks.definitions[padstack_name]
1988
- except KeyError: # pragma: no cover
1989
- return False
1990
- try:
1991
- padstack_pad = padstack.pad_by_layer[layer_name]
1992
- except KeyError: # pragma: no cover
1993
- try:
1994
- padstack_pad = padstack.pad_by_layer[padstack.via_start_layer]
1995
- except KeyError: # pragma: no cover
1996
- return False
1965
+
1966
+ padstack = self._pedb.padstacks.definitions[padstack_name]
1967
+ padstack_pad = (
1968
+ padstack.pad_by_layer[layer_name]
1969
+ if layer_name in padstack.pad_by_layer
1970
+ else padstack.pad_by_layer[padstack.via_start_layer]
1971
+ )
1997
1972
 
1998
1973
  pad_shape = padstack_pad.geometry_type
1999
1974
  params = padstack_pad.parameters_values
@@ -2134,7 +2109,7 @@ class EDBPadstackInstance(Primitive):
2134
2109
  rect[i] = _translate(_rotate(rect[i]))
2135
2110
 
2136
2111
  if rect is None or len(rect) != 4:
2137
- return False
2112
+ raise RuntimeError()
2138
2113
  offset_rect = [_translate(p, _rotate(pad_offset)) for p in rect]
2139
2114
  path = self._pedb.modeler.Shape("polygon", points=offset_rect)
2140
2115
  pdata = self._pedb.modeler.shape_to_polygon_data(path)
@@ -2240,7 +2215,7 @@ class EDBPadstackInstance(Primitive):
2240
2215
  rad_l = rad_large
2241
2216
 
2242
2217
  layout = self._pedb.active_layout
2243
- cloned_circle = self._edb.cell.primitive.circle.create(
2218
+ cloned_circle = self._edb.Cell.Primitive.Circle.Create(
2244
2219
  layout,
2245
2220
  self.start_layer,
2246
2221
  self._edb_padstackinstance.GetNet(),
@@ -2248,7 +2223,7 @@ class EDBPadstackInstance(Primitive):
2248
2223
  self._pedb.edb_value(pos[1]),
2249
2224
  self._pedb.edb_value(rad_u),
2250
2225
  )
2251
- cloned_circle2 = self._edb.cell.primitive.circle.create(
2226
+ cloned_circle2 = self._edb.Cell.Primitive.Circle.Create(
2252
2227
  layout,
2253
2228
  self.stop_layer,
2254
2229
  self._edb_padstackinstance.GetNet(),
@@ -2259,8 +2234,8 @@ class EDBPadstackInstance(Primitive):
2259
2234
  s3d = self._pedb._edb.Cell.Hierarchy.Structure3D.Create(
2260
2235
  layout, generate_unique_name("via3d_" + self.aedt_name.replace("via_", ""), n=3)
2261
2236
  )
2262
- s3d.AddMember(cloned_circle.prim_obj)
2263
- s3d.AddMember(cloned_circle2.prim_obj)
2237
+ s3d.AddMember(cloned_circle)
2238
+ s3d.AddMember(cloned_circle2)
2264
2239
  s3d.SetMaterial(self.definition.material)
2265
2240
  s3d.SetMeshClosureProp(self._pedb._edb.Cell.Hierarchy.Structure3D.TClosure.EndsClosed)
2266
2241
 
@@ -109,7 +109,7 @@ class EdbPolygon(Primitive):
109
109
  new_polygons = list(self.polygon_data._edb_object.RemoveSelfIntersections())
110
110
  self._edb_object.SetPolygonData(new_polygons[0])
111
111
  for p in new_polygons[1:]:
112
- cloned_poly = self._app.edb_api.cell.primitive.polygon.create(
112
+ cloned_poly = self._app.core.Cell.primitive.polygon.create(
113
113
  self._app.active_layout, self.layer_name, self.net, p
114
114
  )
115
115
  new_polys.append(cloned_poly)
@@ -258,10 +258,10 @@ class EdbPolygon(Primitive):
258
258
  ``True`` when successful, ``False`` when failed.
259
259
  """
260
260
  if isinstance(point_data, list):
261
- point_data = self._app.edb_api.geometry.point_data(
262
- self._app.edb_value(point_data[0]), self._app.edb_value(point_data[1])
261
+ point_data = self._app.pedb_class.database.geometry.point_data.PointData.create_from_xy(
262
+ self._app, self._app.edb_value(point_data[0]), self._app.edb_value(point_data[1])
263
263
  )
264
- int_val = int(self.polygon_data._edb_object.PointInPolygon(point_data))
264
+ int_val = int(self.polygon_data._edb_object.PointInPolygon(point_data._edb_object))
265
265
 
266
266
  # Intersection type:
267
267
  # 0 = objects do not intersect
@@ -297,7 +297,7 @@ class EdbPolygon(Primitive):
297
297
  # if _poly is None or _poly.IsNull() or _poly is False:
298
298
  # self._logger.error("Failed to create void polygon data")
299
299
  # return False
300
- # prim = self._app.edb_api.cell.primitive.polygon.create(
300
+ # prim = self._app.core.Cell.primitive.polygon.create(
301
301
  # self._app.active_layout, self.layer_name, self.primitive_object.GetNet(), _poly
302
302
  # )
303
303
  # elif isinstance(point_list, Primitive):
@@ -369,28 +369,28 @@ class PinGroup(object):
369
369
 
370
370
  def create_current_source_terminal(self, magnitude=1, phase=0):
371
371
  terminal = self.create_terminal()._edb_object
372
- terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kCurrentSource)
372
+ terminal.SetBoundaryType(self._pedb.core.Cell.Terminal.BoundaryType.kCurrentSource)
373
373
  terminal.SetSourceAmplitude(self._pedb.edb_value(magnitude))
374
- terminal.SetSourcePhase(self._pedb.edb_api.utility.value(phase))
374
+ terminal.SetSourcePhase(self._pedb.core.Utility.Value(phase))
375
375
  return terminal
376
376
 
377
377
  def create_voltage_source_terminal(self, magnitude=1, phase=0, impedance=0.001):
378
378
  terminal = self.create_terminal()._edb_object
379
- terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageSource)
379
+ terminal.SetBoundaryType(self._pedb.core.Cell.Terminal.BoundaryType.kVoltageSource)
380
380
  terminal.SetSourceAmplitude(self._pedb.edb_value(magnitude))
381
- terminal.SetSourcePhase(self._pedb.edb_api.utility.value(phase))
381
+ terminal.SetSourcePhase(self._pedb.core.Utility.Value(phase))
382
382
  terminal.SetImpedance(self._pedb.edb_value(impedance))
383
383
  return terminal
384
384
 
385
385
  def create_voltage_probe_terminal(self, impedance=1000000):
386
386
  terminal = self.create_terminal()._edb_object
387
- terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe)
387
+ terminal.SetBoundaryType(self._pedb.core.Cell.Terminal.BoundaryType.kVoltageProbe)
388
388
  terminal.SetImpedance(self._pedb.edb_value(impedance))
389
389
  return terminal
390
390
 
391
391
  def create_port_terminal(self, impedance=50):
392
392
  terminal = self.create_terminal()._edb_object
393
- terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.PortBoundary)
393
+ terminal.SetBoundaryType(self._pedb.core.Cell.Terminal.BoundaryType.PortBoundary)
394
394
  terminal.SetImpedance(self._pedb.edb_value(impedance))
395
395
  terminal.SetIsCircuitPort(True)
396
396
  return terminal