pyedb 0.38.0__py3-none-any.whl → 0.39.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 (205) hide show
  1. pyedb/__init__.py +1 -1
  2. pyedb/common/nets.py +53 -139
  3. pyedb/configuration/cfg_components.py +1 -1
  4. pyedb/configuration/cfg_general.py +4 -2
  5. pyedb/configuration/cfg_modeler.py +1 -1
  6. pyedb/configuration/cfg_package_definition.py +1 -1
  7. pyedb/configuration/cfg_padstacks.py +1 -1
  8. pyedb/configuration/cfg_ports_sources.py +56 -23
  9. pyedb/configuration/configuration.py +18 -1
  10. pyedb/dotnet/{application → database}/Variables.py +21 -21
  11. pyedb/dotnet/{edb_core → database}/cell/connectable.py +5 -5
  12. pyedb/dotnet/{edb_core → database}/cell/hierarchy/component.py +11 -11
  13. pyedb/dotnet/{edb_core → database}/cell/hierarchy/hierarchy_obj.py +1 -1
  14. pyedb/dotnet/{edb_core → database}/cell/hierarchy/model.py +1 -1
  15. pyedb/dotnet/{edb_core → database}/cell/layout.py +17 -17
  16. pyedb/dotnet/{edb_core → database}/cell/layout_obj.py +3 -3
  17. pyedb/dotnet/{edb_core → database}/cell/primitive/bondwire.py +1 -1
  18. pyedb/dotnet/{edb_core → database}/cell/primitive/path.py +4 -4
  19. pyedb/dotnet/{edb_core → database}/cell/primitive/primitive.py +14 -14
  20. pyedb/dotnet/{edb_core → database}/cell/terminal/bundle_terminal.py +2 -2
  21. pyedb/dotnet/{edb_core → database}/cell/terminal/edge_terminal.py +4 -4
  22. pyedb/dotnet/{edb_core → database}/cell/terminal/padstack_instance_terminal.py +2 -2
  23. pyedb/dotnet/{edb_core → database}/cell/terminal/pingroup_terminal.py +2 -2
  24. pyedb/dotnet/{edb_core → database}/cell/terminal/point_terminal.py +2 -2
  25. pyedb/dotnet/{edb_core → database}/cell/terminal/terminal.py +11 -11
  26. pyedb/dotnet/{edb_core → database}/cell/voltage_regulator.py +2 -2
  27. pyedb/dotnet/{edb_core → database}/components.py +101 -124
  28. pyedb/dotnet/{edb_core → database}/definition/component_def.py +5 -5
  29. pyedb/dotnet/{edb_core → database}/definition/component_model.py +1 -1
  30. pyedb/dotnet/{edb_core → database}/definition/definition_obj.py +1 -1
  31. pyedb/dotnet/{edb_core → database}/definition/definitions.py +2 -2
  32. pyedb/dotnet/{edb_core → database}/definition/package_def.py +4 -4
  33. pyedb/dotnet/{edb_core → database}/dotnet/database.py +8 -8
  34. pyedb/dotnet/{edb_core → database}/dotnet/primitive.py +9 -9
  35. pyedb/dotnet/{edb_core → database}/edb_data/control_file.py +12 -12
  36. pyedb/dotnet/{edb_core → database}/edb_data/hfss_extent_info.py +7 -7
  37. pyedb/dotnet/{edb_core → database}/edb_data/nets_data.py +10 -13
  38. pyedb/dotnet/{edb_core → database}/edb_data/padstacks_data.py +16 -16
  39. pyedb/dotnet/{edb_core → database}/edb_data/ports.py +4 -4
  40. pyedb/dotnet/{edb_core → database}/edb_data/primitives_data.py +5 -5
  41. pyedb/dotnet/{edb_core → database}/edb_data/raptor_x_simulation_setup_data.py +4 -4
  42. pyedb/dotnet/{edb_core → database}/edb_data/simulation_configuration.py +10 -10
  43. pyedb/dotnet/{edb_core → database}/edb_data/sources.py +4 -4
  44. pyedb/dotnet/{edb_core → database}/edb_data/variables.py +1 -1
  45. pyedb/dotnet/{edb_core → database}/geometry/polygon_data.py +4 -4
  46. pyedb/dotnet/{edb_core → database}/hfss.py +8 -8
  47. pyedb/dotnet/{edb_core → database}/layout_obj_instance.py +1 -1
  48. pyedb/dotnet/{edb_core → database}/layout_validation.py +2 -2
  49. pyedb/dotnet/{edb_core → database}/materials.py +23 -8
  50. pyedb/dotnet/{edb_core → database}/modeler.py +27 -27
  51. pyedb/dotnet/{edb_core → database}/net_class.py +8 -8
  52. pyedb/dotnet/{edb_core → database}/nets.py +12 -12
  53. pyedb/dotnet/{edb_core → database}/padstack.py +15 -15
  54. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/mesh_operation.py +1 -1
  55. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/settings.py +3 -3
  56. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/sim_setup_info.py +2 -2
  57. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/simulation_settings.py +1 -1
  58. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/siw_dc_ir_settings.py +1 -1
  59. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/sweep_data.py +1 -1
  60. pyedb/dotnet/{edb_core → database}/siwave.py +10 -10
  61. pyedb/dotnet/{edb_core → database}/stackup.py +12 -12
  62. pyedb/dotnet/{edb_core → database}/utilities/hfss_simulation_setup.py +15 -15
  63. pyedb/dotnet/{edb_core → database}/utilities/obj_base.py +1 -1
  64. pyedb/dotnet/{edb_core → database}/utilities/simulation_setup.py +3 -3
  65. pyedb/dotnet/{edb_core → database}/utilities/siwave_simulation_setup.py +6 -6
  66. pyedb/dotnet/edb.py +117 -112
  67. pyedb/generic/design_types.py +26 -19
  68. pyedb/generic/general_methods.py +1 -1
  69. pyedb/generic/plot.py +0 -2
  70. pyedb/grpc/database/__init__.py +1 -0
  71. pyedb/grpc/database/components.py +2354 -0
  72. pyedb/grpc/database/control_file.py +1277 -0
  73. pyedb/grpc/database/definition/component_def.py +218 -0
  74. pyedb/grpc/database/definition/component_model.py +39 -0
  75. pyedb/grpc/database/definition/component_pin.py +32 -0
  76. pyedb/grpc/database/definition/materials.py +1207 -0
  77. pyedb/grpc/database/definition/n_port_component_model.py +34 -0
  78. pyedb/grpc/database/definition/package_def.py +227 -0
  79. pyedb/grpc/database/definition/padstack_def.py +842 -0
  80. pyedb/grpc/database/definitions.py +70 -0
  81. pyedb/grpc/database/general.py +43 -0
  82. pyedb/grpc/database/geometry/__init__.py +0 -0
  83. pyedb/grpc/database/geometry/arc_data.py +93 -0
  84. pyedb/grpc/database/geometry/point_3d_data.py +79 -0
  85. pyedb/grpc/database/geometry/point_data.py +30 -0
  86. pyedb/grpc/database/geometry/polygon_data.py +133 -0
  87. pyedb/grpc/database/hfss.py +1279 -0
  88. pyedb/grpc/database/hierarchy/__init__.py +0 -0
  89. pyedb/grpc/database/hierarchy/component.py +1301 -0
  90. pyedb/grpc/database/hierarchy/model.py +31 -0
  91. pyedb/grpc/database/hierarchy/netlist_model.py +30 -0
  92. pyedb/grpc/database/hierarchy/pin_pair_model.py +128 -0
  93. pyedb/grpc/database/hierarchy/pingroup.py +245 -0
  94. pyedb/grpc/database/hierarchy/s_parameter_model.py +33 -0
  95. pyedb/grpc/database/hierarchy/spice_model.py +48 -0
  96. pyedb/grpc/database/layers/__init__.py +0 -0
  97. pyedb/grpc/database/layers/layer.py +57 -0
  98. pyedb/grpc/database/layers/stackup_layer.py +410 -0
  99. pyedb/grpc/database/layout/__init__.py +0 -0
  100. pyedb/grpc/database/layout/cell.py +30 -0
  101. pyedb/grpc/database/layout/layout.py +196 -0
  102. pyedb/grpc/database/layout/voltage_regulator.py +149 -0
  103. pyedb/grpc/database/layout_validation.py +319 -0
  104. pyedb/grpc/database/modeler.py +1468 -0
  105. pyedb/grpc/database/net/__init__.py +0 -0
  106. pyedb/grpc/database/net/differential_pair.py +138 -0
  107. pyedb/grpc/database/net/extended_net.py +340 -0
  108. pyedb/grpc/database/net/net.py +198 -0
  109. pyedb/grpc/database/net/net_class.py +93 -0
  110. pyedb/grpc/database/nets.py +633 -0
  111. pyedb/grpc/database/padstacks.py +1500 -0
  112. pyedb/grpc/database/ports/__init__.py +0 -0
  113. pyedb/grpc/database/ports/ports.py +396 -0
  114. pyedb/grpc/database/primitive/__init__.py +3 -0
  115. pyedb/grpc/database/primitive/bondwire.py +181 -0
  116. pyedb/grpc/database/primitive/circle.py +75 -0
  117. pyedb/grpc/database/primitive/padstack_instance.py +1116 -0
  118. pyedb/grpc/database/primitive/path.py +346 -0
  119. pyedb/grpc/database/primitive/polygon.py +276 -0
  120. pyedb/grpc/database/primitive/primitive.py +739 -0
  121. pyedb/grpc/database/primitive/rectangle.py +146 -0
  122. pyedb/grpc/database/simulation_setup/__init__.py +0 -0
  123. pyedb/grpc/database/simulation_setup/adaptive_frequency.py +33 -0
  124. pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py +32 -0
  125. pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +59 -0
  126. pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py +35 -0
  127. pyedb/grpc/database/simulation_setup/hfss_general_settings.py +61 -0
  128. pyedb/grpc/database/simulation_setup/hfss_settings_options.py +78 -0
  129. pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +118 -0
  130. pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +355 -0
  131. pyedb/grpc/database/simulation_setup/hfss_solver_settings.py +34 -0
  132. pyedb/grpc/database/simulation_setup/mesh_operation.py +34 -0
  133. pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py +34 -0
  134. pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py +33 -0
  135. pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +64 -0
  136. pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +125 -0
  137. pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py +34 -0
  138. pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +119 -0
  139. pyedb/grpc/database/simulation_setup/sweep_data.py +32 -0
  140. pyedb/grpc/database/siwave.py +1023 -0
  141. pyedb/grpc/database/source_excitations.py +2572 -0
  142. pyedb/grpc/database/stackup.py +2574 -0
  143. pyedb/grpc/database/terminal/__init__.py +0 -0
  144. pyedb/grpc/database/terminal/bundle_terminal.py +218 -0
  145. pyedb/grpc/database/terminal/edge_terminal.py +51 -0
  146. pyedb/grpc/database/terminal/padstack_instance_terminal.py +171 -0
  147. pyedb/grpc/database/terminal/pingroup_terminal.py +162 -0
  148. pyedb/grpc/database/terminal/point_terminal.py +99 -0
  149. pyedb/grpc/database/terminal/terminal.py +470 -0
  150. pyedb/grpc/database/utility/__init__.py +3 -0
  151. pyedb/grpc/database/utility/constants.py +25 -0
  152. pyedb/grpc/database/utility/heat_sink.py +124 -0
  153. pyedb/grpc/database/utility/hfss_extent_info.py +448 -0
  154. pyedb/grpc/database/utility/layout_statistics.py +277 -0
  155. pyedb/grpc/database/utility/rlc.py +80 -0
  156. pyedb/grpc/database/utility/simulation_configuration.py +3305 -0
  157. pyedb/grpc/database/utility/sources.py +388 -0
  158. pyedb/grpc/database/utility/sweep_data_distribution.py +83 -0
  159. pyedb/grpc/database/utility/xml_control_file.py +1277 -0
  160. pyedb/grpc/edb.py +4151 -0
  161. pyedb/grpc/edb_init.py +481 -0
  162. pyedb/grpc/rpc_session.py +177 -0
  163. pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +3 -2
  164. pyedb/ipc2581/ecad/cad_data/feature.py +4 -3
  165. pyedb/ipc2581/ecad/cad_data/layer_feature.py +32 -20
  166. pyedb/ipc2581/ecad/cad_data/outline.py +3 -2
  167. pyedb/ipc2581/ecad/cad_data/package.py +4 -3
  168. pyedb/ipc2581/ecad/cad_data/path.py +82 -31
  169. pyedb/ipc2581/ecad/cad_data/polygon.py +122 -60
  170. pyedb/ipc2581/ecad/cad_data/profile.py +13 -12
  171. pyedb/ipc2581/ecad/cad_data/step.py +53 -21
  172. pyedb/ipc2581/ipc2581.py +47 -49
  173. pyedb/modeler/geometry_operators.py +1 -1
  174. {pyedb-0.38.0.dist-info → pyedb-0.39.0.dist-info}/METADATA +5 -2
  175. pyedb-0.39.0.dist-info/RECORD +288 -0
  176. pyedb-0.38.0.dist-info/RECORD +0 -195
  177. /pyedb/dotnet/{edb_core → database}/__init__.py +0 -0
  178. /pyedb/dotnet/{application → database/cell}/__init__.py +0 -0
  179. /pyedb/dotnet/{edb_core/cell → database/cell/hierarchy}/__init__.py +0 -0
  180. /pyedb/dotnet/{edb_core → database}/cell/hierarchy/netlist_model.py +0 -0
  181. /pyedb/dotnet/{edb_core → database}/cell/hierarchy/pin_pair_model.py +0 -0
  182. /pyedb/dotnet/{edb_core → database}/cell/hierarchy/s_parameter_model.py +0 -0
  183. /pyedb/dotnet/{edb_core → database}/cell/hierarchy/spice_model.py +0 -0
  184. /pyedb/dotnet/{edb_core → database}/cell/primitive/__init__.py +0 -0
  185. /pyedb/dotnet/{edb_core/cell/hierarchy → database/cell/terminal}/__init__.py +0 -0
  186. /pyedb/dotnet/{edb_core/cell/terminal → database/definition}/__init__.py +0 -0
  187. /pyedb/dotnet/{edb_core/definition → database/dotnet}/__init__.py +0 -0
  188. /pyedb/dotnet/{edb_core/dotnet → database/edb_data}/__init__.py +0 -0
  189. /pyedb/dotnet/{edb_core → database}/edb_data/design_options.py +0 -0
  190. /pyedb/dotnet/{edb_core → database}/edb_data/edbvalue.py +0 -0
  191. /pyedb/dotnet/{edb_core → database}/edb_data/layer_data.py +0 -0
  192. /pyedb/dotnet/{edb_core → database}/edb_data/utilities.py +0 -0
  193. /pyedb/dotnet/{edb_core → database}/general.py +0 -0
  194. /pyedb/dotnet/{edb_core/edb_data → database/geometry}/__init__.py +0 -0
  195. /pyedb/dotnet/{edb_core → database}/geometry/point_data.py +0 -0
  196. /pyedb/dotnet/{edb_core → database}/sim_setup_data/__init__.py +0 -0
  197. /pyedb/dotnet/{edb_core → database}/sim_setup_data/data/__init__.py +0 -0
  198. /pyedb/dotnet/{edb_core → database}/sim_setup_data/data/adaptive_frequency_data.py +0 -0
  199. /pyedb/dotnet/{edb_core/geometry → database/sim_setup_data/io}/__init__.py +0 -0
  200. /pyedb/dotnet/{edb_core → database}/sim_setup_data/io/siwave.py +0 -0
  201. /pyedb/dotnet/{edb_core → database}/utilities/__init__.py +0 -0
  202. /pyedb/dotnet/{edb_core → database}/utilities/heatsink.py +0 -0
  203. /pyedb/{dotnet/edb_core/sim_setup_data/io → grpc/database/definition}/__init__.py +0 -0
  204. {pyedb-0.38.0.dist-info → pyedb-0.39.0.dist-info}/LICENSE +0 -0
  205. {pyedb-0.38.0.dist-info → pyedb-0.39.0.dist-info}/WHEEL +0 -0
@@ -28,6 +28,7 @@ import json
28
28
  import math
29
29
  import os
30
30
  import re
31
+ from typing import List, Set, Union
31
32
  import warnings
32
33
 
33
34
  from pyedb.component_libraries.ansys_components import (
@@ -36,12 +37,13 @@ from pyedb.component_libraries.ansys_components import (
36
37
  Series,
37
38
  )
38
39
  from pyedb.dotnet.clr_module import String
39
- from pyedb.dotnet.edb_core.cell.hierarchy.component import EDBComponent
40
- from pyedb.dotnet.edb_core.definition.component_def import EDBComponentDef
41
- from pyedb.dotnet.edb_core.edb_data.padstacks_data import EDBPadstackInstance
42
- from pyedb.dotnet.edb_core.edb_data.sources import Source, SourceType
43
- from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
44
- from pyedb.dotnet.edb_core.padstack import EdbPadstacks
40
+ from pyedb.dotnet.database.cell.hierarchy.component import EDBComponent
41
+ from pyedb.dotnet.database.definition.component_def import EDBComponentDef
42
+ from pyedb.dotnet.database.edb_data.nets_data import EDBNetsData
43
+ from pyedb.dotnet.database.edb_data.padstacks_data import EDBPadstackInstance
44
+ from pyedb.dotnet.database.edb_data.sources import Source, SourceType
45
+ from pyedb.dotnet.database.general import convert_py_list_to_net_list
46
+ from pyedb.dotnet.database.padstack import EdbPadstacks
45
47
  from pyedb.generic.general_methods import (
46
48
  _retry_ntimes,
47
49
  generate_unique_name,
@@ -99,7 +101,7 @@ class Components(object):
99
101
 
100
102
  Returns
101
103
  -------
102
- :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`
104
+ :class:`pyedb.dotnet.database.cell.hierarchy.component.EDBComponent`
103
105
 
104
106
  """
105
107
  if name in self.instances:
@@ -157,7 +159,7 @@ class Components(object):
157
159
 
158
160
  Returns
159
161
  -------
160
- dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
162
+ dict[str, :class:`pyedb.dotnet.database.cell.hierarchy.component.EDBComponent`]
161
163
  Default dictionary for the EDB component.
162
164
 
163
165
  Examples
@@ -177,7 +179,7 @@ class Components(object):
177
179
 
178
180
  Returns
179
181
  -------
180
- Dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
182
+ Dict[str, :class:`pyedb.dotnet.database.cell.hierarchy.component.EDBComponent`]
181
183
  Default dictionary for the EDB component.
182
184
 
183
185
  Examples
@@ -322,7 +324,7 @@ class Components(object):
322
324
 
323
325
  Returns
324
326
  -------
325
- dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
327
+ dict[str, :class:`pyedb.dotnet.database.cell.hierarchy.component.EDBComponent`]
326
328
  Dictionary of resistors.
327
329
 
328
330
  Examples
@@ -340,7 +342,7 @@ class Components(object):
340
342
 
341
343
  Returns
342
344
  -------
343
- dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
345
+ dict[str, :class:`pyedb.dotnet.database.cell.hierarchy.component.EDBComponent`]
344
346
  Dictionary of capacitors.
345
347
 
346
348
  Examples
@@ -358,7 +360,7 @@ class Components(object):
358
360
 
359
361
  Returns
360
362
  -------
361
- dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
363
+ dict[str, :class:`pyedb.dotnet.database.cell.hierarchy.component.EDBComponent`]
362
364
  Dictionary of inductors.
363
365
 
364
366
  Examples
@@ -377,7 +379,7 @@ class Components(object):
377
379
 
378
380
  Returns
379
381
  -------
380
- dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
382
+ dict[str, :class:`pyedb.dotnet.database.cell.hierarchy.component.EDBComponent`]
381
383
  Dictionary of integrated circuits.
382
384
 
383
385
  Examples
@@ -396,7 +398,7 @@ class Components(object):
396
398
 
397
399
  Returns
398
400
  -------
399
- dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
401
+ dict[str, :class:`pyedb.dotnet.database.cell.hierarchy.component.EDBComponent`]
400
402
  Dictionary of circuit inputs and outputs.
401
403
 
402
404
  Examples
@@ -415,7 +417,7 @@ class Components(object):
415
417
 
416
418
  Returns
417
419
  -------
418
- dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
420
+ dict[str, :class:`pyedb.dotnet.database.cell.hierarchy.component.EDBComponent`]
419
421
  Dictionary of other core components.
420
422
 
421
423
  Examples
@@ -761,16 +763,17 @@ class Components(object):
761
763
  ----------
762
764
  refdes : Component reference designator
763
765
  str or EDBComponent object.
764
- pins : pin name where the terminal has to be created. Single pin or several ones can be provided.If several
765
- pins are provided a pin group will is created. Pin names can be the EDB name or the EDBPadstackInstance one.
766
- For instance the pin called ``Pin1`` located on component ``U1``, ``U1-Pin1`` or ``Pin1`` can be provided and
767
- will be handled.
768
- str, [str], EDBPadstackInstance, [EDBPadstackInstance]
769
- reference_pins : reference pin name used for terminal reference. Single pin or several ones can be provided.
770
- If several pins are provided a pin group will is created. Pin names can be the EDB name or the
771
- EDBPadstackInstance one. For instance the pin called ``Pin1`` located on component ``U1``, ``U1-Pin1``
772
- or ``Pin1`` can be provided and will be handled.
773
- str, [str], EDBPadstackInstance, [EDBPadstackInstance]
766
+ pins : pin specifier(s) or instance(s) where the port terminal is to be created. Single pin name or a list of
767
+ several can be provided. If several pins are provided a pin group will be created. Pin specifiers can be the
768
+ global EDB object ID or padstack instance name or pin name on component with refdes ``refdes``. Pin instances
769
+ can be provided as ``EDBPadstackInstance`` objects.
770
+ For instance for the pin called ``Pin1`` located on component with refdes ``U1``: ``U1-Pin1``, ``Pin1`` with
771
+ ``refdes=U1``, the pin's global EDB object ID, or the ``EDBPadstackInstance`` corresponding to the pin can be
772
+ provided.
773
+ Union[int, str, EDBPadstackInstance], List[Union[int, str, EDBPadstackInstance]]
774
+ reference_pins : reference pin specifier(s) or instance(s) for the port reference terminal. Allowed values are
775
+ the same as for the ``pins`` parameter.
776
+ Union[int, str, EDBPadstackInstance], List[Union[int, str, EDBPadstackInstance]]
774
777
  impedance : Port impedance
775
778
  str, float
776
779
  port_name : str, optional
@@ -800,98 +803,50 @@ class Components(object):
800
803
  >>> edb.close_edb()
801
804
  """
802
805
 
803
- if isinstance(pins, str):
804
- pins = [pins]
805
- elif isinstance(pins, EDBPadstackInstance):
806
- pins = [pins.name]
807
- if not reference_pins:
808
- self._logger.error("No reference pin provided.")
809
- return False
810
- if isinstance(reference_pins, str):
811
- reference_pins = [reference_pins]
812
- if isinstance(reference_pins, list):
813
- _temp = []
814
- for ref_pin in reference_pins:
815
- if isinstance(ref_pin, int):
816
- if ref_pin in self._padstack.instances:
817
- _temp.append(self._padstack.instances[ref_pin])
818
- elif isinstance(ref_pin, str):
819
- if ref_pin in self.instances[refdes].pins:
820
- _temp.append(self.instances[refdes].pins[ref_pin])
821
- else:
822
- p = [pp for pp in list(self._padstack.instances.values()) if pp.name == ref_pin]
823
- if p:
824
- _temp.append(p)
825
- elif isinstance(ref_pin, EDBPadstackInstance):
826
- _temp.append(ref_pin.name)
827
- reference_pins = _temp
828
- elif isinstance(reference_pins, int):
829
- if reference_pins in self._padstack.instances:
830
- reference_pins = self._padstack.instances[reference_pins]
831
806
  if isinstance(refdes, str):
832
807
  refdes = self.instances[refdes]
833
808
  elif isinstance(refdes, self._pedb._edb.Cell.Hierarchy.Component):
834
809
  refdes = EDBComponent(self._pedb, refdes)
835
- refdes_pins = refdes.pins
836
- if any(refdes.rlc_values):
837
- return self.deactivate_rlc_component(component=refdes, create_circuit_port=True)
838
- if len([pin for pin in pins if isinstance(pin, str)]) == len(pins):
839
- cmp_pins = []
840
- for pin_name in pins:
841
- cmp_pins = [pin for pin in list(refdes_pins.values()) if pin_name == pin.name]
842
- if not cmp_pins:
843
- for pin in list(refdes_pins.values()):
844
- if pin.name and "-" in pin.name:
845
- if pin_name == pin.name.split("-")[1]:
846
- cmp_pins.append(pin)
847
- if not cmp_pins:
848
- self._logger.warning("No pin found during port creation. Port is not defined.")
849
- return
850
- pins = cmp_pins
851
- if not len([pin for pin in pins if isinstance(pin, EDBPadstackInstance)]) == len(pins):
852
- self._logger.error("Pin list must contain only pins instances")
810
+ pins = self._get_pins_for_ports(pins, refdes)
811
+ if not pins:
812
+ self._logger.error("No pins found during port creation. Port is not defined.")
853
813
  return False
814
+ reference_pins = self._get_pins_for_ports(reference_pins, refdes)
815
+ if not reference_pins:
816
+ self._logger.error("No reference pins found during port creation. Port is not defined.")
817
+ return False
818
+ if refdes and any(refdes.rlc_values):
819
+ return self.deactivate_rlc_component(component=refdes, create_circuit_port=True)
854
820
  if not port_name:
855
821
  port_name = "Port_{}_{}".format(pins[0].net_name, pins[0].name)
856
- if len([pin for pin in reference_pins if isinstance(pin, str)]) == len(reference_pins):
857
- ref_cmp_pins = []
858
- for ref_pin_name in reference_pins:
859
- if ref_pin_name in refdes_pins:
860
- ref_cmp_pins.append(refdes_pins[ref_pin_name])
861
- elif "-" in ref_pin_name:
862
- if ref_pin_name.split("-")[1] in refdes_pins:
863
- ref_cmp_pins.append(refdes_pins[ref_pin_name.split("-")[1]])
864
- if not ref_cmp_pins:
865
- self._logger.error("No reference pins found.")
866
- return False
867
- reference_pins = ref_cmp_pins
868
- if len(pins) > 1 or pingroup_on_single_pin:
822
+
823
+ if len(pins) > 1 > 1 or pingroup_on_single_pin:
869
824
  pec_boundary = False
870
825
  self._logger.info(
871
826
  "Disabling PEC boundary creation, this feature is supported on single pin "
872
- "ports only, {} pins found".format(len(pins))
827
+ f"ports only, {len(pins)} pins found (pingroup_on_single_pin: {pingroup_on_single_pin})."
873
828
  )
874
829
  group_name = "group_{}".format(port_name)
875
830
  pin_group = self.create_pingroup_from_pins(pins, group_name)
876
831
  term = self._create_pin_group_terminal(pingroup=pin_group, term_name=port_name)
877
-
878
832
  else:
879
833
  term = self._create_terminal(pins[0].primitive_object, term_name=port_name)
880
834
  term.SetIsCircuitPort(True)
835
+
881
836
  if len(reference_pins) > 1 or pingroup_on_single_pin:
882
837
  pec_boundary = False
883
838
  self._logger.info(
884
- "Disabling PEC boundary creation. This feature is supported on single pin"
885
- "ports only {} reference pins found.".format(len(reference_pins))
839
+ "Disabling PEC boundary creation. This feature is supported on single pin "
840
+ f"ports only, {len(reference_pins)} reference pins found "
841
+ f"(pingroup_on_single_pin: {pingroup_on_single_pin})."
886
842
  )
887
843
  ref_group_name = "group_{}_ref".format(port_name)
888
844
  ref_pin_group = self.create_pingroup_from_pins(reference_pins, ref_group_name)
889
- ref_pin_group = self._pedb.siwave.pin_groups[ref_pin_group.GetName()]
890
845
  ref_term = self._create_pin_group_terminal(pingroup=ref_pin_group, term_name=port_name + "_ref")
891
-
892
846
  else:
893
847
  ref_term = self._create_terminal(reference_pins[0].primitive_object, term_name=port_name + "_ref")
894
848
  ref_term.SetIsCircuitPort(True)
849
+
895
850
  term.SetImpedance(self._edb.utility.value(impedance))
896
851
  term.SetReferenceTerminal(ref_term)
897
852
  if pec_boundary:
@@ -902,9 +857,30 @@ class Components(object):
902
857
  self._logger.info(
903
858
  "PEC boundary created between pin {} and reference pin {}".format(pins[0].name, reference_pins[0].name)
904
859
  )
905
- if term:
906
- return term
907
- return False
860
+
861
+ return term or False
862
+
863
+ def _get_pins_for_ports(
864
+ self, pins: Union[int, str, EDBPadstackInstance, List[Union[int, str, EDBPadstackInstance]]], comp: EDBComponent
865
+ ) -> List[EDBPadstackInstance]:
866
+ if not isinstance(pins, List):
867
+ pins = [pins]
868
+ result = []
869
+ for pin in pins:
870
+ if isinstance(pin, int) and pin in self._padstack.instances:
871
+ result.append(self._padstack.instances[pin])
872
+ elif isinstance(pin, str):
873
+ if comp and pin in comp.pins:
874
+ result.append(comp.pins[pin])
875
+ else:
876
+ p = [pp for pp in list(self._padstack.instances.values()) if pp.name == pin]
877
+ if p:
878
+ result.append(p[0])
879
+ elif isinstance(pin, EDBPadstackInstance):
880
+ result.append(pin)
881
+ elif isinstance(pin, self._edb.Cell.Primitive.PadstackInstance):
882
+ result.append(EDBPadstackInstance(pin, self._pedb))
883
+ return result
908
884
 
909
885
  def create_port_on_component(
910
886
  self,
@@ -972,22 +948,17 @@ class Components(object):
972
948
  if isinstance(component, str):
973
949
  component = self.instances[component].edbcomponent
974
950
 
975
- if not isinstance(net_list, list):
976
- net_list = [net_list]
977
- for net in net_list:
978
- if not isinstance(net, str):
979
- try:
980
- net_name = net.name
981
- if net_name != "":
982
- net_list.append(net_name)
983
- except:
984
- pass
985
- if reference_net in net_list:
986
- net_list.remove(reference_net)
987
- cmp_pins = [
988
- p for p in list(component.LayoutObjs) if int(p.GetObjType()) == 1 and p.GetNet().GetName() in net_list
989
- ]
990
- for p in cmp_pins: # pragma no cover
951
+ nets = self._normalize_net_list(net_list)
952
+
953
+ if not isinstance(reference_net, List):
954
+ reference_net = [reference_net]
955
+ ref_nets = self._normalize_net_list(reference_net)
956
+ nets_to_remove = ref_nets.intersection(nets)
957
+ if nets_to_remove:
958
+ self._logger.warning(f"Removing reference nets {sorted(nets_to_remove)} from the positive net list.")
959
+ nets -= nets_to_remove
960
+ cmp_pins = [p for p in list(component.LayoutObjs) if int(p.GetObjType()) == 1 and p.GetNet().GetName() in nets]
961
+ for p in cmp_pins:
991
962
  if not p.IsLayoutPin():
992
963
  p.SetIsLayoutPin(True)
993
964
  if len(cmp_pins) == 0:
@@ -995,6 +966,9 @@ class Components(object):
995
966
  "No pins found on component {}, searching padstack instances instead".format(component.GetName())
996
967
  )
997
968
  return False
969
+ ref_pins = [
970
+ p for p in list(component.LayoutObjs) if int(p.GetObjType()) == 1 and p.GetNet().GetName() in ref_nets
971
+ ]
998
972
  pin_layers = cmp_pins[0].GetPadstackDef().GetData().GetLayerNames()
999
973
  if port_type == SourceType.CoaxPort:
1000
974
  if not solder_balls_height:
@@ -1003,11 +977,6 @@ class Components(object):
1003
977
  solder_balls_size = self.instances[component.GetName()].solder_ball_diameter[0]
1004
978
  if not solder_balls_mid_size:
1005
979
  solder_balls_mid_size = self.instances[component.GetName()].solder_ball_diameter[1]
1006
- ref_pins = [
1007
- p
1008
- for p in list(component.LayoutObjs)
1009
- if int(p.GetObjType()) == 1 and p.GetNet().GetName() in reference_net
1010
- ]
1011
980
  if not ref_pins:
1012
981
  self._logger.error(
1013
982
  "No reference pins found on component. You might consider"
@@ -1053,12 +1022,7 @@ class Components(object):
1053
1022
  for pin in cmp_pins:
1054
1023
  self._padstack.create_coax_port(padstackinstance=pin, name=port_name)
1055
1024
 
1056
- elif port_type == SourceType.CircPort: # pragma no cover
1057
- ref_pins = [
1058
- p
1059
- for p in list(component.LayoutObjs)
1060
- if int(p.GetObjType()) == 1 and p.GetNet().GetName() in reference_net
1061
- ]
1025
+ elif port_type == SourceType.CircPort:
1062
1026
  for p in ref_pins:
1063
1027
  if not p.IsLayoutPin():
1064
1028
  p.SetIsLayoutPin(True)
@@ -1066,7 +1030,7 @@ class Components(object):
1066
1030
  self._logger.warning("No reference pins found on component")
1067
1031
  if not extend_reference_pins_outside_component:
1068
1032
  self._logger.warning(
1069
- "argument extend_reference_pins_outside_component is False. You might want "
1033
+ "Argument extend_reference_pins_outside_component is False. You might want "
1070
1034
  "setting to True to extend the reference pin search outside the component"
1071
1035
  )
1072
1036
  else:
@@ -1089,7 +1053,7 @@ class Components(object):
1089
1053
  f"Failed to create reference pin group terminal on component {component.GetName()}"
1090
1054
  )
1091
1055
  return False
1092
- for net in net_list:
1056
+ for net in nets:
1093
1057
  pins = [pin for pin in cmp_pins if pin.GetNet().GetName() == net]
1094
1058
  if pins:
1095
1059
  if len(pins) == 1:
@@ -1107,7 +1071,7 @@ class Components(object):
1107
1071
  else:
1108
1072
  self._logger.info("No pins found on component {} for the net {}".format(component, net))
1109
1073
  else:
1110
- for net in net_list:
1074
+ for net in nets:
1111
1075
  pins = [pin for pin in cmp_pins if pin.GetNet().GetName() == net]
1112
1076
  for pin in pins:
1113
1077
  if ref_pins:
@@ -1131,6 +1095,19 @@ class Components(object):
1131
1095
  self._logger.error("Skipping port creation no reference pin found.")
1132
1096
  return True
1133
1097
 
1098
+ def _normalize_net_list(self, net_list) -> Set[str]:
1099
+ if not isinstance(net_list, List):
1100
+ net_list = [net_list]
1101
+ nets = set()
1102
+ for net in net_list:
1103
+ if isinstance(net, EDBNetsData):
1104
+ net_name = net.name
1105
+ if net_name != "":
1106
+ nets.add(net_name)
1107
+ elif isinstance(net, str) and net != "":
1108
+ nets.add(net)
1109
+ return nets
1110
+
1134
1111
  def _create_terminal(self, pin, term_name=None):
1135
1112
  """Create terminal on component pin.
1136
1113
 
@@ -1518,7 +1495,7 @@ class Components(object):
1518
1495
  ----------
1519
1496
  pins : list
1520
1497
  List of EDB pins, length must be 2, since only 2 pins component are currently supported.
1521
- It can be an `dotnet.edb_core.edb_data.padstacks_data.EDBPadstackInstance` object or
1498
+ It can be an `dotnet.database.edb_data.padstacks_data.EDBPadstackInstance` object or
1522
1499
  an Edb Padstack Instance object.
1523
1500
  component_name : str
1524
1501
  Component definition name.
@@ -22,9 +22,9 @@
22
22
 
23
23
  import os
24
24
 
25
- from pyedb.dotnet.edb_core.definition.component_model import NPortComponentModel
26
- from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
27
- from pyedb.dotnet.edb_core.utilities.obj_base import ObjBase
25
+ from pyedb.dotnet.database.definition.component_model import NPortComponentModel
26
+ from pyedb.dotnet.database.general import convert_py_list_to_net_list
27
+ from pyedb.dotnet.database.utilities.obj_base import ObjBase
28
28
 
29
29
 
30
30
  class EDBComponentDef(ObjBase):
@@ -84,7 +84,7 @@ class EDBComponentDef(ObjBase):
84
84
  -------
85
85
  dict of :class:`EDBComponent`
86
86
  """
87
- from pyedb.dotnet.edb_core.cell.hierarchy.component import EDBComponent
87
+ from pyedb.dotnet.database.cell.hierarchy.component import EDBComponent
88
88
 
89
89
  comp_list = [
90
90
  EDBComponent(self._pedb, l)
@@ -185,7 +185,7 @@ class EDBComponentDef(ObjBase):
185
185
  if not name:
186
186
  name = os.path.splitext(os.path.basename(fpath)[0])
187
187
 
188
- from pyedb.dotnet.edb_core.definition.component_model import NPortComponentModel
188
+ from pyedb.dotnet.database.definition.component_model import NPortComponentModel
189
189
 
190
190
  edb_object = self._pedb.definition.NPortComponentModel.Create(name)
191
191
  n_port_comp_model = NPortComponentModel(self._pedb, edb_object)
@@ -20,7 +20,7 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
- from pyedb.dotnet.edb_core.utilities.obj_base import ObjBase
23
+ from pyedb.dotnet.database.utilities.obj_base import ObjBase
24
24
 
25
25
 
26
26
  class ComponentModel(ObjBase):
@@ -20,7 +20,7 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
- from pyedb.dotnet.edb_core.utilities.obj_base import ObjBase
23
+ from pyedb.dotnet.database.utilities.obj_base import ObjBase
24
24
 
25
25
 
26
26
  class DefinitionObj(ObjBase):
@@ -20,8 +20,8 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
- from pyedb.dotnet.edb_core.definition.component_def import EDBComponentDef
24
- from pyedb.dotnet.edb_core.definition.package_def import PackageDef
23
+ from pyedb.dotnet.database.definition.component_def import EDBComponentDef
24
+ from pyedb.dotnet.database.definition.package_def import PackageDef
25
25
 
26
26
 
27
27
  class Definitions:
@@ -20,8 +20,8 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
- from pyedb.dotnet.edb_core.geometry.polygon_data import PolygonData
24
- from pyedb.dotnet.edb_core.utilities.obj_base import ObjBase
23
+ from pyedb.dotnet.database.geometry.polygon_data import PolygonData
24
+ from pyedb.dotnet.database.utilities.obj_base import ObjBase
25
25
  from pyedb.edb_logger import pyedb_logger
26
26
 
27
27
 
@@ -145,7 +145,7 @@ class PackageDef(ObjBase):
145
145
  self._edb_object.SetHeight(value)
146
146
 
147
147
  def set_heatsink(self, fin_base_height, fin_height, fin_orientation, fin_spacing, fin_thickness):
148
- from pyedb.dotnet.edb_core.utilities.heatsink import HeatSink
148
+ from pyedb.dotnet.database.utilities.heatsink import HeatSink
149
149
 
150
150
  heatsink = HeatSink(self._pedb)
151
151
  heatsink.fin_base_height = fin_base_height
@@ -158,7 +158,7 @@ class PackageDef(ObjBase):
158
158
  @property
159
159
  def heatsink(self):
160
160
  """Component heatsink."""
161
- from pyedb.dotnet.edb_core.utilities.heatsink import HeatSink
161
+ from pyedb.dotnet.database.utilities.heatsink import HeatSink
162
162
 
163
163
  flag, edb_object = self._edb_object.GetHeatSink()
164
164
  if flag:
@@ -26,7 +26,7 @@ import re
26
26
  import sys
27
27
 
28
28
  from pyedb import __version__
29
- from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
29
+ from pyedb.dotnet.database.general import convert_py_list_to_net_list
30
30
  from pyedb.edb_logger import pyedb_logger
31
31
  from pyedb.generic.general_methods import (
32
32
  env_path,
@@ -443,7 +443,7 @@ class CellClassDotNet:
443
443
 
444
444
  Returns
445
445
  -------
446
- :class:`dotnet.edb_core.dotnet.HierarchyDotNet`
446
+ :class:`dotnet.database.dotnet.HierarchyDotNet`
447
447
  """
448
448
  return HierarchyDotNet(self._app)
449
449
 
@@ -480,7 +480,7 @@ class CellClassDotNet:
480
480
  @property
481
481
  def primitive(self):
482
482
  """Edb Dotnet Api Database `Edb.Cell.Primitive`."""
483
- from pyedb.dotnet.edb_core.dotnet.primitive import PrimitiveDotNet
483
+ from pyedb.dotnet.database.dotnet.primitive import PrimitiveDotNet
484
484
 
485
485
  return PrimitiveDotNet(self._app)
486
486
 
@@ -588,7 +588,7 @@ class GeometryDotNet:
588
588
 
589
589
  Returns
590
590
  -------
591
- :class:`dotnet.edb_core.dotnet.PolygonDataDotNet`
591
+ :class:`dotnet.database.dotnet.PolygonDataDotNet`
592
592
  """
593
593
  return PolygonDataDotNet(self._app)
594
594
 
@@ -659,7 +659,7 @@ class CellDotNet:
659
659
 
660
660
  Returns
661
661
  -------
662
- :class:`pyedb.dotnet.edb_core.dotnet.database.CellClassDotNet`"""
662
+ :class:`pyedb.dotnet.database.dotnet.database.CellClassDotNet`"""
663
663
  return CellClassDotNet(self._app)
664
664
 
665
665
  @property
@@ -668,7 +668,7 @@ class CellDotNet:
668
668
 
669
669
  Returns
670
670
  -------
671
- :class:`pyedb.dotnet.edb_core.dotnet.database.UtilityDotNet`"""
671
+ :class:`pyedb.dotnet.database.dotnet.database.UtilityDotNet`"""
672
672
 
673
673
  return UtilityDotNet(self._app)
674
674
 
@@ -678,7 +678,7 @@ class CellDotNet:
678
678
 
679
679
  Returns
680
680
  -------
681
- :class:`pyedb.dotnet.edb_core.dotnet.database.GeometryDotNet`"""
681
+ :class:`pyedb.dotnet.database.dotnet.database.GeometryDotNet`"""
682
682
  return GeometryDotNet(self._app)
683
683
 
684
684
 
@@ -779,7 +779,7 @@ class EdbDotNet(object):
779
779
 
780
780
  Returns
781
781
  -------
782
- :class:`pyedb.dotnet.edb_core.dotnet.database.CellDotNet`
782
+ :class:`pyedb.dotnet.database.dotnet.database.CellDotNet`
783
783
  """
784
784
  return CellDotNet(self)
785
785
 
@@ -22,8 +22,8 @@
22
22
 
23
23
  """Primitive."""
24
24
 
25
- from pyedb.dotnet.edb_core.dotnet.database import NetDotNet
26
- from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
25
+ from pyedb.dotnet.database.dotnet.database import NetDotNet
26
+ from pyedb.dotnet.database.general import convert_py_list_to_net_list
27
27
  from pyedb.misc.utilities import compute_arc_points
28
28
  from pyedb.modeler.geometry_operators import GeometryOperators
29
29
 
@@ -119,7 +119,7 @@ class PrimitiveDotNet:
119
119
 
120
120
  Parameters
121
121
  ----------
122
- point_list : list or :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives` \
122
+ point_list : list or :class:`pyedb.dotnet.database.edb_data.primitives_data.EDBPrimitives` \
123
123
  or EDB Primitive Object. Point list in the format of `[[x1,y1], [x2,y2],..,[xn,yn]]`.
124
124
 
125
125
  Returns
@@ -414,7 +414,7 @@ class RectangleDotNet(PrimitiveDotNet):
414
414
 
415
415
  Returns
416
416
  -------
417
- :class:`pyedb.dotnet.edb_core.dotnet.primitive.RectangleDotNet`
417
+ :class:`pyedb.dotnet.database.dotnet.primitive.RectangleDotNet`
418
418
 
419
419
  Rectangle that was created.
420
420
  """
@@ -539,7 +539,7 @@ class CircleDotNet(PrimitiveDotNet):
539
539
 
540
540
  Returns
541
541
  -------
542
- :class:`pyedb.dotnet.edb_core.dotnet.primitive.CircleDotNet`
542
+ :class:`pyedb.dotnet.database.dotnet.primitive.CircleDotNet`
543
543
  Circle object created.
544
544
  """
545
545
  if isinstance(net, NetDotNet):
@@ -652,7 +652,7 @@ class TextDotNet(PrimitiveDotNet):
652
652
 
653
653
  Returns
654
654
  -------
655
- :class:`pyedb.dotnet.edb_core.dotnet.primitive.TextDotNet`
655
+ :class:`pyedb.dotnet.database.dotnet.primitive.TextDotNet`
656
656
  The text Object that was created.
657
657
  """
658
658
  return TextDotNet(
@@ -737,7 +737,7 @@ class PathDotNet(PrimitiveDotNet):
737
737
 
738
738
  Returns
739
739
  -------
740
- :class:`pyedb.dotnet.edb_core.dotnet.primitive.PathDotNet`
740
+ :class:`pyedb.dotnet.database.dotnet.primitive.PathDotNet`
741
741
  Path object created.
742
742
  """
743
743
  if isinstance(net, NetDotNet):
@@ -915,7 +915,7 @@ class BondwireDotNet(PrimitiveDotNet):
915
915
 
916
916
  Returns
917
917
  -------
918
- :class:`pyedb.dotnet.edb_core.dotnet.primitive.BondwireDotNet`
918
+ :class:`pyedb.dotnet.database.dotnet.primitive.BondwireDotNet`
919
919
  Bondwire object created.
920
920
  """
921
921
  if isinstance(net, NetDotNet):
@@ -1168,7 +1168,7 @@ class PadstackInstanceDotNet(PrimitiveDotNet):
1168
1168
 
1169
1169
  Returns
1170
1170
  -------
1171
- :class:`pyedb.dotnet.edb_core.dotnet.primitive.PadstackInstanceDotNet`
1171
+ :class:`pyedb.dotnet.database.dotnet.primitive.PadstackInstanceDotNet`
1172
1172
  Padstack instance object created.
1173
1173
  """
1174
1174
  if isinstance(net, NetDotNet):