pyedb 0.8.1__tar.gz → 0.10.0__tar.gz

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 (141) hide show
  1. {pyedb-0.8.1 → pyedb-0.10.0}/PKG-INFO +6 -5
  2. {pyedb-0.8.1 → pyedb-0.10.0}/pyproject.toml +6 -5
  3. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/__init__.py +1 -1
  4. pyedb-0.10.0/src/pyedb/configuration/cfg_data.py +45 -0
  5. pyedb-0.10.0/src/pyedb/configuration/cfg_ports.py +149 -0
  6. {pyedb-0.8.1/src/pyedb/dotnet/edb_core → pyedb-0.10.0/src/pyedb/configuration}/configuration.py +68 -32
  7. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb.py +62 -22
  8. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/components.py +19 -8
  9. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py +4 -0
  10. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +164 -62
  11. pyedb-0.10.0/src/pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +520 -0
  12. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +49 -0
  13. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/hfss.py +29 -11
  14. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/materials.py +73 -81
  15. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/padstack.py +53 -0
  16. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/stackup.py +289 -84
  17. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/utilities/simulation_setup.py +22 -13
  18. pyedb-0.10.0/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  19. {pyedb-0.8.1 → pyedb-0.10.0}/LICENSE +0 -0
  20. {pyedb-0.8.1 → pyedb-0.10.0}/README.md +0 -0
  21. {pyedb-0.8.1/src/pyedb/dotnet → pyedb-0.10.0/src/pyedb/configuration}/__init__.py +0 -0
  22. {pyedb-0.8.1/src/pyedb/dotnet/application → pyedb-0.10.0/src/pyedb/dotnet}/__init__.py +0 -0
  23. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/application/Variables.py +0 -0
  24. {pyedb-0.8.1/src/pyedb/dotnet/edb_core/cell → pyedb-0.10.0/src/pyedb/dotnet/application}/__init__.py +0 -0
  25. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/clr_module.py +0 -0
  26. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
  27. {pyedb-0.8.1/src/pyedb/dotnet/edb_core/cell/hierarchy → pyedb-0.10.0/src/pyedb/dotnet/edb_core/cell}/__init__.py +0 -0
  28. {pyedb-0.8.1/src/pyedb/dotnet/edb_core/definition → pyedb-0.10.0/src/pyedb/dotnet/edb_core/cell/hierarchy}/__init__.py +0 -0
  29. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
  30. {pyedb-0.8.1/src/pyedb/dotnet/edb_core/dotnet → pyedb-0.10.0/src/pyedb/dotnet/edb_core/definition}/__init__.py +0 -0
  31. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/definition/component_def.py +0 -0
  32. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -0
  33. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
  34. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
  35. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/definition/package_def.py +0 -0
  36. {pyedb-0.8.1/src/pyedb/dotnet/edb_core/edb_data → pyedb-0.10.0/src/pyedb/dotnet/edb_core/dotnet}/__init__.py +0 -0
  37. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
  38. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/dotnet/layout.py +0 -0
  39. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
  40. {pyedb-0.8.1/src/pyedb/dotnet/edb_core/geometry → pyedb-0.10.0/src/pyedb/dotnet/edb_core/edb_data}/__init__.py +0 -0
  41. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/components_data.py +0 -0
  42. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/connectable.py +0 -0
  43. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
  44. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
  45. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
  46. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -0
  47. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +0 -0
  48. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +0 -0
  49. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
  50. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +0 -0
  51. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/siwave_simulation_setup_data.py +0 -0
  52. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/sources.py +0 -0
  53. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/terminals.py +0 -0
  54. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
  55. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
  56. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/general.py +0 -0
  57. {pyedb-0.8.1/src/pyedb/generic → pyedb-0.10.0/src/pyedb/dotnet/edb_core/geometry}/__init__.py +0 -0
  58. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/geometry/point_data.py +0 -0
  59. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -0
  60. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/layout.py +0 -0
  61. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/layout_validation.py +0 -0
  62. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
  63. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/nets.py +0 -0
  64. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/obj_base.py +0 -0
  65. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/siwave.py +0 -0
  66. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/utilities/__init__.py +0 -0
  67. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/edb_core/utilities/heatsink.py +0 -0
  68. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/dotnet/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
  69. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/edb_logger.py +0 -0
  70. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/exceptions.py +0 -0
  71. {pyedb-0.8.1/src/pyedb/ipc2581 → pyedb-0.10.0/src/pyedb/generic}/__init__.py +0 -0
  72. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/generic/constants.py +0 -0
  73. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/generic/data_handlers.py +0 -0
  74. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/generic/design_types.py +0 -0
  75. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/generic/filesystem.py +0 -0
  76. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/generic/general_methods.py +0 -0
  77. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/generic/plot.py +0 -0
  78. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/generic/process.py +0 -0
  79. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/generic/settings.py +0 -0
  80. {pyedb-0.8.1/src/pyedb/ipc2581/bom → pyedb-0.10.0/src/pyedb/ipc2581}/__init__.py +0 -0
  81. {pyedb-0.8.1/src/pyedb/ipc2581/content → pyedb-0.10.0/src/pyedb/ipc2581/bom}/__init__.py +0 -0
  82. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
  83. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
  84. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
  85. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
  86. {pyedb-0.8.1/src/pyedb/ipc2581/ecad → pyedb-0.10.0/src/pyedb/ipc2581/content}/__init__.py +0 -0
  87. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/content/color.py +0 -0
  88. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/content/content.py +0 -0
  89. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
  90. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
  91. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
  92. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
  93. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
  94. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/content/fill.py +0 -0
  95. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
  96. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
  97. {pyedb-0.8.1/src/pyedb/ipc2581/ecad/cad_data → pyedb-0.10.0/src/pyedb/ipc2581/ecad}/__init__.py +0 -0
  98. {pyedb-0.8.1/src/pyedb/misc → pyedb-0.10.0/src/pyedb/ipc2581/ecad/cad_data}/__init__.py +0 -0
  99. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
  100. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
  101. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
  102. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
  103. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
  104. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
  105. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
  106. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
  107. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
  108. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
  109. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
  110. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
  111. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
  112. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
  113. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
  114. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
  115. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
  116. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
  117. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
  118. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
  119. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
  120. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
  121. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
  122. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
  123. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
  124. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
  125. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/history_record.py +0 -0
  126. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
  127. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
  128. {pyedb-0.8.1/src/pyedb/misc/siw_feature_config → pyedb-0.10.0/src/pyedb/misc}/__init__.py +0 -0
  129. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
  130. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/misc/downloads.py +0 -0
  131. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/misc/misc.py +0 -0
  132. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
  133. {pyedb-0.8.1/src/pyedb/misc/siw_feature_config/emc → pyedb-0.10.0/src/pyedb/misc/siw_feature_config}/__init__.py +0 -0
  134. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
  135. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
  136. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
  137. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
  138. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
  139. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/misc/utilities.py +0 -0
  140. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/modeler/geometry_operators.py +0 -0
  141. {pyedb-0.8.1 → pyedb-0.10.0}/src/pyedb/siwave.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyedb
3
- Version: 0.8.1
3
+ Version: 0.10.0
4
4
  Summary: Higher-Level Pythonic Ansys Electronics Data Base
5
5
  Author-email: "ANSYS, Inc." <pyansys.core@ansys.com>
6
6
  Maintainer-email: PyEDB developers <simon.vandenbrouck@ansys.com>
@@ -21,9 +21,10 @@ Requires-Dist: ansys-pythonnet >= 3.1.0rc3
21
21
  Requires-Dist: dotnetcore2 ==3.1.23;platform_system=='Linux'
22
22
  Requires-Dist: pydantic>=2.6.4,<2.8
23
23
  Requires-Dist: toml == 0.10.2
24
+ Requires-Dist: Rtree >= 1.2.0
24
25
  Requires-Dist: ansys-sphinx-theme>=0.10.0,<0.16 ; extra == "doc"
25
26
  Requires-Dist: imageio>=2.30.0,<2.35 ; extra == "doc"
26
- Requires-Dist: ipython>=8.13.0,<8.24 ; extra == "doc"
27
+ Requires-Dist: ipython>=8.13.0,<8.25 ; extra == "doc"
27
28
  Requires-Dist: jupyterlab>=4.0.0,<4.3 ; extra == "doc"
28
29
  Requires-Dist: matplotlib>=3.5.0,<3.9 ; extra == "doc"
29
30
  Requires-Dist: nbsphinx>=0.9.0,<0.10 ; extra == "doc"
@@ -34,7 +35,7 @@ Requires-Dist: Sphinx>=7.1.0,<7.4 ; extra == "doc"
34
35
  Requires-Dist: sphinx-autobuild==2024.2.4 ; extra == "doc" and ( python_version == '3.8')
35
36
  Requires-Dist: sphinx-autobuild==2024.2.4 ; extra == "doc" and ( python_version > '3.8')
36
37
  Requires-Dist: sphinx-copybutton>=0.5.0,<0.6 ; extra == "doc"
37
- Requires-Dist: sphinx-gallery>=0.14.0,<0.16 ; extra == "doc"
38
+ Requires-Dist: sphinx-gallery>=0.14.0,<0.17 ; extra == "doc"
38
39
  Requires-Dist: sphinx_design>=0.4.0,<0.6 ; extra == "doc"
39
40
  Requires-Dist: matplotlib>=3.5.0,<3.9 ; extra == "full"
40
41
  Requires-Dist: numpy>=1.20.0,<2 ; extra == "full"
@@ -43,9 +44,9 @@ Requires-Dist: matplotlib>=3.5.0,<3.9 ; extra == "tests"
43
44
  Requires-Dist: numpy>=1.20.0,<2 ; extra == "tests"
44
45
  Requires-Dist: mock>=5.1.0,<5.2 ; extra == "tests"
45
46
  Requires-Dist: pandas>=1.1.0,<2.3 ; extra == "tests"
46
- Requires-Dist: pytest>=7.4.0,<8.2 ; extra == "tests"
47
+ Requires-Dist: pytest>=7.4.0,<8.3 ; extra == "tests"
47
48
  Requires-Dist: pytest-cov>=4.0.0,<5.1 ; extra == "tests"
48
- Requires-Dist: pytest-xdist>=3.5.0,<3.6 ; extra == "tests"
49
+ Requires-Dist: pytest-xdist>=3.5.0,<3.7 ; extra == "tests"
49
50
  Project-URL: Bugs, https://github.com/ansys/pyedb/issues
50
51
  Project-URL: Discussions, https://github.com/ansys/pyedb/discussions
51
52
  Project-URL: Documentation, https://edb.docs.pyansys.com
@@ -31,7 +31,8 @@ dependencies = [
31
31
  "dotnetcore2 ==3.1.23;platform_system=='Linux'",
32
32
  "pydantic>=2.6.4,<2.8",
33
33
  "toml == 0.10.2",
34
- ]
34
+ "Rtree >= 1.2.0",
35
+ ]
35
36
 
36
37
  [project.optional-dependencies]
37
38
  tests = [
@@ -39,14 +40,14 @@ tests = [
39
40
  "numpy>=1.20.0,<2",
40
41
  "mock>=5.1.0,<5.2",
41
42
  "pandas>=1.1.0,<2.3",
42
- "pytest>=7.4.0,<8.2",
43
+ "pytest>=7.4.0,<8.3",
43
44
  "pytest-cov>=4.0.0,<5.1",
44
- "pytest-xdist>=3.5.0,<3.6",
45
+ "pytest-xdist>=3.5.0,<3.7",
45
46
  ]
46
47
  doc = [
47
48
  "ansys-sphinx-theme>=0.10.0,<0.16",
48
49
  "imageio>=2.30.0,<2.35",
49
- "ipython>=8.13.0,<8.24",
50
+ "ipython>=8.13.0,<8.25",
50
51
  "jupyterlab>=4.0.0,<4.3",
51
52
  "matplotlib>=3.5.0,<3.9",
52
53
  "nbsphinx>=0.9.0,<0.10",
@@ -58,7 +59,7 @@ doc = [
58
59
  "sphinx-autobuild==2024.2.4; python_version == '3.8'",
59
60
  "sphinx-autobuild==2024.2.4; python_version > '3.8'",
60
61
  "sphinx-copybutton>=0.5.0,<0.6",
61
- "sphinx-gallery>=0.14.0,<0.16",
62
+ "sphinx-gallery>=0.14.0,<0.17",
62
63
  "sphinx_design>=0.4.0,<0.6",
63
64
  ]
64
65
  full = [
@@ -44,7 +44,7 @@ deprecation_warning()
44
44
  #
45
45
 
46
46
  pyedb_path = os.path.dirname(__file__)
47
- __version__ = "0.8.1"
47
+ __version__ = "0.10.0"
48
48
  version = __version__
49
49
 
50
50
  #
@@ -0,0 +1,45 @@
1
+ # Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
2
+ # SPDX-License-Identifier: MIT
3
+ #
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
23
+ from pyedb.configuration.cfg_ports import CfgPort
24
+
25
+
26
+ class CfgData(object):
27
+ """Manages configure data."""
28
+
29
+ def __init__(self, pedb, **kwargs):
30
+ self.pedb = pedb
31
+ self.edb_comps = self.pedb.components.components
32
+
33
+ self.cfg_general = None
34
+ self.cfg_boundaries = None
35
+ self.cfg_nets = None
36
+ self.cfg_components = None
37
+ self.cfg_padstacks = None
38
+ self.cfg_pin_groups = None
39
+ self.cfg_ports = [CfgPort(self, **port) for port in kwargs.get("ports", [])]
40
+ self.cfg_setups = None
41
+ self.cfg_stackup = None
42
+ self.cfg_s_parameters = None
43
+ self.cfg_spice_models = None
44
+ self.cfg_package_definition = None
45
+ self.cfg_operations = None
@@ -0,0 +1,149 @@
1
+ # Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
2
+ # SPDX-License-Identifier: MIT
3
+ #
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
23
+ from enum import Enum
24
+
25
+ from pyedb.dotnet.edb_core.edb_data.padstacks_data import EDBPadstackInstance
26
+
27
+
28
+ class CfgNegTerm:
29
+ """Manage negative terminal."""
30
+
31
+ class CfgTermType(Enum):
32
+ """Terminal types."""
33
+
34
+ pin = [list, str]
35
+ net = [str]
36
+ pin_group = [str]
37
+
38
+ @property
39
+ def pedb(self):
40
+ """Edb."""
41
+ return self.pport.pedb
42
+
43
+ def __init__(self, pport, **kwargs):
44
+ self.pport = pport
45
+ self.type = kwargs.get("type", None)
46
+ self.value = kwargs.get("value", None)
47
+
48
+ def _get_candidates(self, distributed):
49
+ """Get list of objects."""
50
+
51
+ def get_pin_obj(pin_name):
52
+ port_name = "{}_{}".format(self.pport.reference_designator, pin_name)
53
+ return {port_name: self.pport.pdata.edb_comps[self.pport.reference_designator].pins[pin_name]}
54
+
55
+ def get_pin_group_obj(pin_group_name):
56
+ pin_group_obj = self.pedb.siwave.pin_groups[pin_group_name]
57
+ return {pin_group_obj.name: pin_group_obj}
58
+
59
+ term_objs = dict()
60
+ if self.type in "pin":
61
+ term_objs.update(get_pin_obj(self.value))
62
+ elif self.type == "pin_group":
63
+ term_objs.update(get_pin_group_obj(self.value))
64
+ elif self.type == "net":
65
+ pins = self.pport.pdata.pedb.components.get_pin_from_component(self.pport.reference_designator, self.value)
66
+ pins = [EDBPadstackInstance(p, self.pedb) for p in pins]
67
+
68
+ pin_objs = {f"{self.value}_{p.GetName()}": p for p in pins}
69
+ if distributed:
70
+ term_objs.update(pin_objs)
71
+ else:
72
+ pg_name = f"pg_{self.pport.reference_designator}_{self.value}"
73
+ pin_objs = {p.GetName(): p for p in pin_objs.values()}
74
+ if self.pport.type == "coax":
75
+ term_objs.update(get_pin_obj(pins[0].GetName()))
76
+ else:
77
+ temp = self.pport.pdata.pedb.siwave.create_pin_group(
78
+ self.pport.reference_designator, list(pin_objs.keys()), pg_name
79
+ )
80
+ term_objs.update({temp[0]: temp[1]})
81
+ return term_objs
82
+
83
+ def get_candidates(self):
84
+ """Get list of objects."""
85
+ return self._get_candidates(False)
86
+
87
+
88
+ class CfgPosTerm(CfgNegTerm):
89
+ """Manage positive terminal."""
90
+
91
+ def __init__(self, pport, **kwargs):
92
+ super().__init__(pport, **kwargs)
93
+
94
+ def get_candidates(self):
95
+ """Get list of objects."""
96
+ return self._get_candidates(self.pport.distributed)
97
+
98
+
99
+ class CfgPort:
100
+ """Manage port."""
101
+
102
+ class CfgPortType(Enum):
103
+ """Port type."""
104
+
105
+ circuit = [str]
106
+ coax = [str]
107
+
108
+ @property
109
+ def pedb(self):
110
+ """Edb."""
111
+ return self.pdata.pedb
112
+
113
+ def __init__(self, pdata, **kwargs):
114
+ self.pdata = pdata
115
+ self.name = kwargs.get("name", None)
116
+ self.type = kwargs.get("type", None)
117
+ self.reference_designator = kwargs.get("reference_designator", None)
118
+ pos_term = kwargs.get("positive_terminal", None)
119
+ neg_term = kwargs.get("negative_terminal", None)
120
+ if pos_term:
121
+ self.positive_terminal = CfgPosTerm(
122
+ pport=self, type=list(pos_term.keys())[0], value=list(pos_term.values())[0]
123
+ )
124
+ if neg_term:
125
+ self.negative_terminal = CfgPosTerm(
126
+ pport=self, type=list(neg_term.keys())[0], value=list(neg_term.values())[0]
127
+ )
128
+ self.distributed = kwargs.get("distributed", False)
129
+
130
+ self._port_name = None
131
+
132
+ def create(self):
133
+ """Create port."""
134
+ if self.type == "circuit":
135
+ candidates = [i for i in self.negative_terminal.get_candidates().values()][0]
136
+ neg_term = candidates.get_terminal(create_new_terminal=True)
137
+ else:
138
+ neg_term = None
139
+ ports = []
140
+ for name, p in self.positive_terminal.get_candidates().items():
141
+ if self.distributed:
142
+ port_name = f"{self.name}_{name}" if self.name else name
143
+ else:
144
+ port_name = self.name if self.name else name
145
+ pos_term = p.get_terminal(port_name, create_new_terminal=True)
146
+ is_circuit_port = True if self.type == "circuit" else False
147
+ port = self.pedb.create_port(pos_term, neg_term, is_circuit_port)
148
+ ports.append(port)
149
+ return ports
@@ -26,6 +26,7 @@ from pathlib import Path
26
26
 
27
27
  import toml
28
28
 
29
+ from pyedb.configuration.cfg_data import CfgData
29
30
  from pyedb.dotnet.edb_core.definition.package_def import PackageDef
30
31
  from pyedb.generic.general_methods import pyedb_function_handler
31
32
 
@@ -39,6 +40,7 @@ class Configuration:
39
40
  self.data = {}
40
41
  self._s_parameter_library = ""
41
42
  self._spice_model_library = ""
43
+ self.cfg_data = None
42
44
 
43
45
  @pyedb_function_handler
44
46
  def load(self, config_file, append=True, apply_file=False, output_file=None, open_at_the_end=True):
@@ -86,6 +88,9 @@ class Configuration:
86
88
  self.data[k] = v
87
89
  else:
88
90
  self.data[k] = v
91
+
92
+ self.cfg_data = CfgData(self._pedb, **data)
93
+
89
94
  if apply_file:
90
95
  original_file = self._pedb.edbpath
91
96
  if output_file:
@@ -132,8 +137,8 @@ class Configuration:
132
137
  self._load_pin_groups()
133
138
 
134
139
  # Configure ports
135
- if "ports" in self.data:
136
- self._load_ports()
140
+ for port in self.cfg_data.cfg_ports:
141
+ port.create()
137
142
 
138
143
  # Configure sources
139
144
  if "sources" in self.data:
@@ -275,6 +280,7 @@ class Configuration:
275
280
  @pyedb_function_handler
276
281
  def _load_ports(self):
277
282
  """Imports port information from json."""
283
+
278
284
  for port in self.data["ports"]:
279
285
  port_type = port["type"]
280
286
 
@@ -315,7 +321,7 @@ class Configuration:
315
321
  pin_name = negative_terminal_json["pin"]
316
322
  port_name = "{}_{}_ref".format(ref_designator, pin_name)
317
323
  neg_terminal = comp_layout.pins[pin_name].get_terminal(port_name, True)
318
- else:
324
+ elif "net" in negative_terminal_json:
319
325
  net_name = negative_terminal_json["net"]
320
326
  port_name = "{}_{}_ref".format(ref_designator, net_name)
321
327
  pg_name = "pg_{}".format(port_name)
@@ -476,35 +482,65 @@ class Configuration:
476
482
  def _load_stackup(self):
477
483
  """Imports stackup information from json."""
478
484
  data = self.data["stackup"]
479
- materials = data["materials"] if "materials" in data else []
480
- materials_reformatted = {}
481
- for mat in materials:
482
- new_mat = {}
483
- new_mat["name"] = mat["name"]
484
- if "conductivity" in mat:
485
- new_mat["conductivity"] = mat["conductivity"]
486
- if "permittivity" in mat:
487
- new_mat["permittivity"] = mat["permittivity"]
488
- if "dielectricLoss_tangent" in mat:
489
- new_mat["loss_tangent"] = mat["dielectricLoss_tangent"]
490
-
491
- materials_reformatted[mat["name"]] = new_mat
492
-
493
- layers = data["layers"]
494
- layers_reformatted = {}
495
-
496
- for l in layers:
497
- lyr = {
498
- "name": l["name"],
499
- "type": l["type"],
500
- "material": l["material"],
501
- "thickness": l["thickness"],
502
- }
503
- if "fill_material" in l:
504
- lyr["dielectric_fill"] = l["fill_material"]
505
- layers_reformatted[l["name"]] = lyr
506
- stackup_reformated = {"layers": layers_reformatted, "materials": materials_reformatted}
507
- self._pedb.stackup.load(stackup_reformated)
485
+ materials = data.get("materials")
486
+
487
+ if materials:
488
+ edb_materials = {i.lower(): i for i, _ in self._pedb.materials.materials.items()}
489
+ for mat in materials:
490
+ name = mat["name"].lower()
491
+ if name in edb_materials:
492
+ self._pedb.materials.delete_material(edb_materials[name])
493
+ for mat in materials:
494
+ self._pedb.materials.add_material(**mat)
495
+
496
+ layers = data.get("layers")
497
+
498
+ if layers:
499
+ lc = self._pedb.stackup
500
+ input_signal_layers = [i for i in layers if i["type"].lower() == "signal"]
501
+ if not len(input_signal_layers) == len(lc.signal_layers):
502
+ self._pedb.logger.error("Input signal layer count do not match.")
503
+ return False
504
+
505
+ layer_clones = []
506
+ doc_layer_clones = []
507
+ for name, obj in lc.layers.items():
508
+ if obj.is_stackup_layer:
509
+ if obj.type == "signal": # keep signal layers
510
+ layer_clones.append(obj)
511
+ else:
512
+ doc_layer_clones.append(obj)
513
+ lc.remove_layer(name)
514
+
515
+ signal_layer_ids = {}
516
+ top_layer_clone = None
517
+
518
+ # add all signal layers
519
+ for l in layers:
520
+ if l["type"] == "signal":
521
+ clone = layer_clones.pop(0)
522
+ clone.update(**l)
523
+ lc.add_layer_bottom(name=clone.name, layer_clone=clone)
524
+ signal_layer_ids[clone.name] = clone.id
525
+
526
+ # add all document layers at bottom
527
+ for l in doc_layer_clones:
528
+ doc_layer = lc.add_document_layer(name=l.name, layer_clone=l)
529
+ first_doc_layer_name = doc_layer.name
530
+
531
+ # add all dielectric layers. Dielectric layers must be added last. Otherwise,
532
+ # dielectric layer will occupy signal and document layer id.
533
+ prev_layer_clone = None
534
+ l = layers.pop(0)
535
+ if l["type"] == "signal":
536
+ prev_layer_clone = lc.layers[l["name"]]
537
+ else:
538
+ prev_layer_clone = lc.add_layer_top(**l)
539
+ for idx, l in enumerate(layers):
540
+ if l["type"] == "dielectric":
541
+ prev_layer_clone = lc.add_layer_below(base_layer_name=prev_layer_clone.name, **l)
542
+ else:
543
+ prev_layer_clone = lc.layers[l["name"]]
508
544
 
509
545
  @pyedb_function_handler
510
546
  def _load_s_parameter(self):
@@ -35,9 +35,9 @@ import time
35
35
  import traceback
36
36
  import warnings
37
37
 
38
+ from pyedb.configuration.configuration import Configuration
38
39
  from pyedb.dotnet.application.Variables import decompose_variable_value
39
40
  from pyedb.dotnet.edb_core.components import Components
40
- from pyedb.dotnet.edb_core.configuration import Configuration
41
41
  from pyedb.dotnet.edb_core.dotnet.database import Database
42
42
  from pyedb.dotnet.edb_core.dotnet.layout import LayoutDotNet
43
43
  from pyedb.dotnet.edb_core.edb_data.control_file import (
@@ -57,6 +57,9 @@ from pyedb.dotnet.edb_core.edb_data.ports import (
57
57
  GapPort,
58
58
  WavePort,
59
59
  )
60
+ from pyedb.dotnet.edb_core.edb_data.raptor_x_simulation_setup_data import (
61
+ RaptorXSimulationSetup,
62
+ )
60
63
  from pyedb.dotnet.edb_core.edb_data.simulation_configuration import (
61
64
  SimulationConfiguration,
62
65
  )
@@ -174,15 +177,16 @@ class Edb(Database):
174
177
 
175
178
  def __init__(
176
179
  self,
177
- edbpath=None,
178
- cellname=None,
179
- isreadonly=False,
180
- edbversion=None,
181
- isaedtowned=False,
180
+ edbpath: str = None,
181
+ cellname: str = None,
182
+ isreadonly: bool = False,
183
+ edbversion: str = None,
184
+ isaedtowned: bool = False,
182
185
  oproject=None,
183
- student_version=False,
184
- use_ppe=False,
185
- technology_file=None,
186
+ student_version: bool = False,
187
+ use_ppe: bool = False,
188
+ technology_file: str = None,
189
+ remove_existing_aedt: bool = False,
186
190
  ):
187
191
  edbversion = get_string_version(edbversion)
188
192
  self._clean_variables()
@@ -213,17 +217,8 @@ class Edb(Database):
213
217
  os.path.dirname(edbpath),
214
218
  "pyedb_" + os.path.splitext(os.path.split(edbpath)[-1])[0] + ".log",
215
219
  )
216
- aedt_file = os.path.splitext(edbpath)[0] + ".aedt"
217
- files = [aedt_file, aedt_file + ".lock"]
218
- for file in files:
219
- if os.path.isfile(file):
220
- try:
221
- shutil.rmtree(file)
222
- self.logger.info(f"Removing {file} to allow loading EDB file.")
223
- except:
224
- self.logger.info(
225
- f"Failed to delete {file} which is located at the same location as the EDB file."
226
- )
220
+ if not isreadonly:
221
+ self._check_remove_project_files(edbpath, remove_existing_aedt)
227
222
 
228
223
  if isaedtowned and (inside_desktop or settings.remote_rpc_session):
229
224
  self.open_edb_inside_aedt()
@@ -311,6 +306,22 @@ class Edb(Database):
311
306
  if description: # Add the variable description if a two-item list is passed for variable_value.
312
307
  self.__getitem__(variable_name).description = description
313
308
 
309
+ def _check_remove_project_files(self, edbpath: str, remove_existing_aedt: bool) -> None:
310
+ aedt_file = os.path.splitext(edbpath)[0] + ".aedt"
311
+ files = [aedt_file, aedt_file + ".lock"]
312
+ for file in files:
313
+ if os.path.isfile(file):
314
+ if not remove_existing_aedt:
315
+ self.logger.warning(
316
+ f"AEDT project-related file {file} exists and may need to be deleted before opening the EDB in HFSS 3D Layout." # noqa: E501
317
+ )
318
+ else:
319
+ try:
320
+ os.unlink(file)
321
+ self.logger.info(f"Deleted AEDT project-related file {file}.")
322
+ except:
323
+ self.logger.info(f"Failed to delete AEDT project-related file {file}.")
324
+
314
325
  def _clean_variables(self):
315
326
  """Initialize internal variables and perform garbage collection."""
316
327
  self._materials = None
@@ -331,7 +342,7 @@ class Edb(Database):
331
342
  @pyedb_function_handler()
332
343
  def _init_objects(self):
333
344
  self._components = Components(self)
334
- self._stackup = Stackup(self)
345
+ self._stackup = Stackup(self, self.layout.layer_collection)
335
346
  self._padstack = EdbPadstacks(self)
336
347
  self._siwave = EdbSiwave(self)
337
348
  self._hfss = EdbHfss(self)
@@ -834,7 +845,7 @@ class Edb(Database):
834
845
  >>> edbapp.stackup.add_layer("Diel", "GND", layer_type="dielectric", thickness="0.1mm", material="FR4_epoxy")
835
846
  """
836
847
  if not self._stackup2 and self.active_db:
837
- self._stackup2 = Stackup(self)
848
+ self._stackup2 = Stackup(self, self.layout.layer_collection)
838
849
  return self._stackup2
839
850
 
840
851
  @property
@@ -3584,6 +3595,8 @@ class Edb(Database):
3584
3595
  setups[i.GetName()] = SiwaveSYZSimulationSetup(self, i)
3585
3596
  elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWaveDCIR:
3586
3597
  setups[i.GetName()] = SiwaveDCSimulationSetup(self, i)
3598
+ elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kRaptorX:
3599
+ setups[i.GetName()] = RaptorXSimulationSetup(self, i)
3587
3600
  return setups
3588
3601
 
3589
3602
  @property
@@ -3639,9 +3652,36 @@ class Edb(Database):
3639
3652
  if name in self.setups:
3640
3653
  self.logger.info("setup already exists")
3641
3654
  return False
3655
+ elif not name:
3656
+ name = generate_unique_name("setup")
3642
3657
  setup = HfssSimulationSetup(self).create(name)
3658
+ setup.set_solution_single_frequency("1GΗz")
3643
3659
  return setup
3644
3660
 
3661
+ def create_raptorx_setup(self, name=None):
3662
+ """Create an RaptorX simulation setup from a template.
3663
+
3664
+ Parameters
3665
+ ----------
3666
+ name : str, optional
3667
+ Setup name.
3668
+
3669
+ Returns
3670
+ -------
3671
+ :class:`legacy.edb_core.edb_data.raptor_x_simulation_setup_data.RaptorXSimulationSetup`
3672
+
3673
+ """
3674
+ if name in self.setups:
3675
+ self.logger.error("Setup name already used in the layout")
3676
+ return False
3677
+ version = self.edbversion.split(".")
3678
+ if int(version[0]) >= 2024 and int(version[-1]) >= 2 or int(version[0]) > 2024:
3679
+ setup = RaptorXSimulationSetup(self).create(name)
3680
+ return setup
3681
+ else:
3682
+ self.logger.error("RaptorX simulation only supported with Ansys release 2024R2 and higher")
3683
+ return False
3684
+
3645
3685
  @pyedb_function_handler()
3646
3686
  def create_siwave_syz_setup(self, name=None):
3647
3687
  """Create a setup from a template.
@@ -915,6 +915,12 @@ class Components(object):
915
915
  """
916
916
  if isinstance(component, str):
917
917
  component = self.instances[component].edbcomponent
918
+ if not solder_balls_height:
919
+ solder_balls_height = self.components[component.GetName()].solder_ball_height
920
+ if not solder_balls_size:
921
+ solder_balls_size = self.components[component.GetName()].solder_ball_diameter[0]
922
+ if not solder_balls_mid_size:
923
+ solder_balls_mid_size = self.components[component.GetName()].solder_ball_diameter[1]
918
924
  if not isinstance(net_list, list):
919
925
  net_list = [net_list]
920
926
  for net in net_list:
@@ -2402,20 +2408,20 @@ class Components(object):
2402
2408
  return [pin_xy.X.ToDouble(), pin_xy.Y.ToDouble()]
2403
2409
 
2404
2410
  @pyedb_function_handler()
2405
- def get_pins_name_from_net(self, pin_list, net_name):
2411
+ def get_pins_name_from_net(self, net_name, pin_list=None):
2406
2412
  """Retrieve pins belonging to a net.
2407
2413
 
2408
2414
  Parameters
2409
2415
  ----------
2410
- pin_list : list
2411
- List of pins to check.
2416
+ pin_list : list of EDBPadstackInstance, optional
2417
+ List of pins to check. The default is ``None``, in which case all pins are checked
2412
2418
  net_name : str
2413
2419
  Name of the net.
2414
2420
 
2415
2421
  Returns
2416
2422
  -------
2417
- list
2418
- List of pins belong to the net.
2423
+ list of str names:
2424
+ Pins belonging to the net.
2419
2425
 
2420
2426
  Examples
2421
2427
  --------
@@ -2425,11 +2431,16 @@ class Components(object):
2425
2431
  >>> edbapp.components.get_pins_name_from_net(pin_list, net_name)
2426
2432
 
2427
2433
  """
2428
- pinlist = []
2434
+ pin_names = []
2435
+ if not pin_list:
2436
+ pin_list = []
2437
+ for i in [*self.components.values()]:
2438
+ for j in [*i.pins.values()]:
2439
+ pin_list.append(j)
2429
2440
  for pin in pin_list:
2430
2441
  if pin.GetNet().GetName() == net_name:
2431
- pinlist.append(pin.GetName())
2432
- return pinlist
2442
+ pin_names.append(self.get_aedt_pin_name(pin))
2443
+ return pin_names
2433
2444
 
2434
2445
  @pyedb_function_handler()
2435
2446
  def get_nets_from_pin_list(self, PinList):
@@ -29,6 +29,10 @@ from pyedb.dotnet.edb_core.utilities.simulation_setup import (
29
29
  from pyedb.generic.general_methods import generate_unique_name, pyedb_function_handler
30
30
 
31
31
 
32
+ class AdaptiveType(object):
33
+ (SingleFrequency, MultiFrequency, BroadBand) = range(0, 3)
34
+
35
+
32
36
  class MeshOperation(object):
33
37
  """Mesh Operation Class."""
34
38