pyedb 0.57.0__tar.gz → 0.58.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 (305) hide show
  1. {pyedb-0.57.0 → pyedb-0.58.0}/PKG-INFO +4 -5
  2. {pyedb-0.57.0 → pyedb-0.58.0}/pyproject.toml +3 -6
  3. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/__init__.py +1 -1
  4. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_pin_groups.py +2 -0
  5. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/hierarchy/component.py +2 -8
  6. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/layout.py +1 -1
  7. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/components.py +1 -3
  8. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/control_file.py +13 -5
  9. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/padstacks_data.py +34 -12
  10. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/sources.py +21 -2
  11. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/general.py +1 -6
  12. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/layout_validation.py +8 -0
  13. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/sim_setup_data/io/siwave.py +53 -0
  14. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/stackup.py +5 -32
  15. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/utilities/hfss_simulation_setup.py +81 -0
  16. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/utilities/siwave_simulation_setup.py +259 -11
  17. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/edb.py +26 -13
  18. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/extensions/create_cell_array.py +48 -44
  19. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/generic/general_methods.py +24 -36
  20. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/generic/plot.py +8 -23
  21. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/generic/process.py +78 -10
  22. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/components.py +7 -5
  23. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/control_file.py +13 -5
  24. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/definition/padstack_def.py +10 -5
  25. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/hierarchy/component.py +2 -9
  26. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/modeler.py +28 -8
  27. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/padstacks.py +62 -103
  28. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/primitive/padstack_instance.py +41 -12
  29. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/primitive/path.py +13 -13
  30. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +79 -0
  31. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/source_excitations.py +7 -7
  32. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/stackup.py +5 -33
  33. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/terminal/padstack_instance_terminal.py +9 -11
  34. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/terminal/point_terminal.py +30 -0
  35. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/terminal/terminal.py +16 -2
  36. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/utility/xml_control_file.py +13 -5
  37. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/edb.py +39 -13
  38. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/aedtlib_personalib_install.py +2 -2
  39. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/downloads.py +18 -3
  40. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +2 -1
  41. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +0 -1
  42. {pyedb-0.57.0 → pyedb-0.58.0}/LICENSE +0 -0
  43. {pyedb-0.57.0 → pyedb-0.58.0}/README.md +0 -0
  44. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/common/__init__.py +0 -0
  45. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/common/nets.py +0 -0
  46. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/component_libraries/ansys_components.py +0 -0
  47. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/__init__.py +0 -0
  48. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_boundaries.py +0 -0
  49. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_common.py +0 -0
  50. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_components.py +0 -0
  51. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_data.py +0 -0
  52. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_general.py +0 -0
  53. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_modeler.py +0 -0
  54. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_nets.py +0 -0
  55. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_operations.py +0 -0
  56. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_package_definition.py +0 -0
  57. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_padstacks.py +0 -0
  58. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_ports_sources.py +0 -0
  59. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_s_parameter_models.py +0 -0
  60. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_setup.py +0 -0
  61. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
  62. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_stackup.py +0 -0
  63. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/cfg_terminals.py +0 -0
  64. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/configuration/configuration.py +0 -0
  65. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/__init__.py +0 -0
  66. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/clr_module.py +0 -0
  67. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/Variables.py +0 -0
  68. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/__init__.py +0 -0
  69. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/__init__.py +0 -0
  70. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/connectable.py +0 -0
  71. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/hierarchy/__init__.py +0 -0
  72. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/hierarchy/hierarchy_obj.py +0 -0
  73. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/hierarchy/model.py +0 -0
  74. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/hierarchy/netlist_model.py +0 -0
  75. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/hierarchy/pin_pair_model.py +0 -0
  76. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/hierarchy/s_parameter_model.py +0 -0
  77. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/hierarchy/spice_model.py +0 -0
  78. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/layout_obj.py +0 -0
  79. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/primitive/__init__.py +0 -0
  80. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/primitive/bondwire.py +0 -0
  81. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/primitive/path.py +0 -0
  82. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/primitive/primitive.py +0 -0
  83. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/terminal/__init__.py +0 -0
  84. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/terminal/bundle_terminal.py +0 -0
  85. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/terminal/edge_terminal.py +0 -0
  86. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/terminal/padstack_instance_terminal.py +0 -0
  87. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +0 -0
  88. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/terminal/point_terminal.py +0 -0
  89. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/terminal/terminal.py +0 -0
  90. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/cell/voltage_regulator.py +0 -0
  91. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/definition/__init__.py +0 -0
  92. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/definition/component_def.py +0 -0
  93. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/definition/component_model.py +0 -0
  94. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/definition/definition_obj.py +0 -0
  95. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/definition/definitions.py +0 -0
  96. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/definition/package_def.py +0 -0
  97. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/dotnet/__init__.py +0 -0
  98. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/dotnet/database.py +0 -0
  99. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/dotnet/primitive.py +0 -0
  100. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/__init__.py +0 -0
  101. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/design_options.py +0 -0
  102. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/edbvalue.py +0 -0
  103. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/hfss_extent_info.py +0 -0
  104. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/layer_data.py +0 -0
  105. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/nets_data.py +0 -0
  106. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/ports.py +0 -0
  107. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/primitives_data.py +0 -0
  108. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/raptor_x_simulation_setup_data.py +0 -0
  109. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/simulation_configuration.py +0 -0
  110. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/utilities.py +0 -0
  111. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/edb_data/variables.py +0 -0
  112. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/geometry/__init__.py +0 -0
  113. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/geometry/point_data.py +0 -0
  114. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/geometry/polygon_data.py +0 -0
  115. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/hfss.py +0 -0
  116. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/layout_obj_instance.py +0 -0
  117. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/materials.py +0 -0
  118. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/modeler.py +0 -0
  119. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/net_class.py +0 -0
  120. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/nets.py +0 -0
  121. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/padstack.py +0 -0
  122. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/sim_setup_data/__init__.py +0 -0
  123. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/sim_setup_data/data/__init__.py +0 -0
  124. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/sim_setup_data/data/adaptive_frequency_data.py +0 -0
  125. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/sim_setup_data/data/mesh_operation.py +0 -0
  126. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/sim_setup_data/data/settings.py +0 -0
  127. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/sim_setup_data/data/sim_setup_info.py +0 -0
  128. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/sim_setup_data/data/simulation_settings.py +0 -0
  129. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
  130. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/sim_setup_data/data/sweep_data.py +0 -0
  131. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/sim_setup_data/io/__init__.py +0 -0
  132. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/siwave.py +0 -0
  133. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/utilities/__init__.py +0 -0
  134. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/utilities/heatsink.py +0 -0
  135. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/utilities/obj_base.py +0 -0
  136. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/utilities/simulation_setup.py +0 -0
  137. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/utilities/siwave_cpa_simulation_setup.py +0 -0
  138. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/dotnet/database/utilities/value.py +0 -0
  139. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/edb_logger.py +0 -0
  140. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/exceptions.py +0 -0
  141. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/extensions/__init__.py +0 -0
  142. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/extensions/via_design_backend.py +0 -0
  143. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/generic/__init__.py +0 -0
  144. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/generic/constants.py +0 -0
  145. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/generic/data_handlers.py +0 -0
  146. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/generic/design_types.py +0 -0
  147. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/generic/filesystem.py +0 -0
  148. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/generic/grpc_warnings.py +0 -0
  149. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/generic/settings.py +0 -0
  150. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/__init__.py +0 -0
  151. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/__init__.py +0 -0
  152. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/_typing.py +0 -0
  153. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/definition/__init__.py +0 -0
  154. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/definition/component_def.py +0 -0
  155. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/definition/component_model.py +0 -0
  156. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/definition/component_pin.py +0 -0
  157. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/definition/materials.py +0 -0
  158. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/definition/n_port_component_model.py +0 -0
  159. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/definition/package_def.py +0 -0
  160. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/definitions.py +0 -0
  161. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/general.py +0 -0
  162. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/geometry/__init__.py +0 -0
  163. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/geometry/arc_data.py +0 -0
  164. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/geometry/point_3d_data.py +0 -0
  165. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/geometry/point_data.py +0 -0
  166. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/geometry/polygon_data.py +0 -0
  167. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/hfss.py +0 -0
  168. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/hierarchy/__init__.py +0 -0
  169. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/hierarchy/model.py +0 -0
  170. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/hierarchy/netlist_model.py +0 -0
  171. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/hierarchy/pin_pair_model.py +0 -0
  172. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/hierarchy/pingroup.py +0 -0
  173. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/hierarchy/s_parameter_model.py +0 -0
  174. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/hierarchy/spice_model.py +0 -0
  175. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/layers/__init__.py +0 -0
  176. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/layers/layer.py +0 -0
  177. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/layers/stackup_layer.py +0 -0
  178. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/layout/__init__.py +0 -0
  179. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/layout/cell.py +0 -0
  180. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/layout/layout.py +0 -0
  181. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/layout/voltage_regulator.py +0 -0
  182. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/layout_validation.py +0 -0
  183. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/net/__init__.py +0 -0
  184. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/net/differential_pair.py +0 -0
  185. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/net/extended_net.py +0 -0
  186. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/net/net.py +0 -0
  187. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/net/net_class.py +0 -0
  188. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/nets.py +0 -0
  189. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/ports/__init__.py +0 -0
  190. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/ports/ports.py +0 -0
  191. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/primitive/__init__.py +0 -0
  192. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/primitive/bondwire.py +0 -0
  193. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/primitive/circle.py +0 -0
  194. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/primitive/polygon.py +0 -0
  195. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/primitive/primitive.py +0 -0
  196. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/primitive/rectangle.py +0 -0
  197. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/__init__.py +0 -0
  198. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/adaptive_frequency.py +0 -0
  199. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py +0 -0
  200. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +0 -0
  201. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py +0 -0
  202. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/hfss_general_settings.py +0 -0
  203. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/hfss_settings_options.py +0 -0
  204. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +0 -0
  205. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/hfss_solver_settings.py +0 -0
  206. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/mesh_operation.py +0 -0
  207. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py +0 -0
  208. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py +0 -0
  209. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +0 -0
  210. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +0 -0
  211. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/siwave_cpa_simulation_setup.py +0 -0
  212. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py +0 -0
  213. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +0 -0
  214. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/simulation_setup/sweep_data.py +0 -0
  215. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/siwave.py +0 -0
  216. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/terminal/__init__.py +0 -0
  217. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/terminal/bundle_terminal.py +0 -0
  218. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/terminal/edge_terminal.py +0 -0
  219. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/terminal/pingroup_terminal.py +0 -0
  220. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/utility/__init__.py +0 -0
  221. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/utility/constants.py +0 -0
  222. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/utility/heat_sink.py +0 -0
  223. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/utility/hfss_extent_info.py +0 -0
  224. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/utility/layout_statistics.py +0 -0
  225. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/utility/rlc.py +0 -0
  226. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/utility/sources.py +0 -0
  227. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/utility/sweep_data_distribution.py +0 -0
  228. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/database/utility/value.py +0 -0
  229. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/edb_init.py +0 -0
  230. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/grpc/rpc_session.py +0 -0
  231. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/__init__.py +0 -0
  232. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/bom/__init__.py +0 -0
  233. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
  234. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
  235. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
  236. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
  237. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/content/__init__.py +0 -0
  238. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/content/color.py +0 -0
  239. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/content/content.py +0 -0
  240. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
  241. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
  242. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
  243. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
  244. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
  245. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/content/fill.py +0 -0
  246. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
  247. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
  248. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
  249. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
  250. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
  251. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
  252. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
  253. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
  254. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
  255. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
  256. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
  257. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
  258. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
  259. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
  260. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
  261. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
  262. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
  263. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
  264. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
  265. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
  266. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
  267. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
  268. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
  269. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
  270. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
  271. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
  272. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
  273. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
  274. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
  275. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
  276. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/history_record.py +0 -0
  277. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
  278. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
  279. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/libraries/common.py +0 -0
  280. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/libraries/rf_libraries/base_functions.py +0 -0
  281. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/libraries/rf_libraries/planar_antennas.py +0 -0
  282. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/__init__.py +0 -0
  283. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/decorators.py +0 -0
  284. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/misc.py +0 -0
  285. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
  286. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
  287. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  288. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
  289. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
  290. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
  291. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
  292. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +0 -0
  293. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +0 -0
  294. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +0 -0
  295. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +0 -0
  296. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +0 -0
  297. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/misc/utilities.py +0 -0
  298. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/modeler/geometry_operators.py +0 -0
  299. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/siwave.py +0 -0
  300. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/siwave_core/__init__.py +0 -0
  301. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/siwave_core/cpa/__init__.py +0 -0
  302. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/siwave_core/cpa/simulation_setup_data_model.py +0 -0
  303. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/siwave_core/icepak.py +0 -0
  304. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/siwave_core/product_properties.py +0 -0
  305. {pyedb-0.57.0 → pyedb-0.58.0}/src/pyedb/workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyedb
3
- Version: 0.57.0
3
+ Version: 0.58.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>
@@ -29,6 +29,8 @@ Requires-Dist: shapely
29
29
  Requires-Dist: scikit-rf
30
30
  Requires-Dist: ansys-edb-core>=0.2.0
31
31
  Requires-Dist: psutil
32
+ Requires-Dist: defusedxml>=0.7,<8.0
33
+ Requires-Dist: matplotlib>=3.5.0,<3.11
32
34
  Requires-Dist: ansys-sphinx-theme>=1.0.0,<1.5 ; extra == "doc"
33
35
  Requires-Dist: imageio>=2.30.0,<2.38 ; extra == "doc"
34
36
  Requires-Dist: ipython>=8.13.0,<8.32 ; extra == "doc"
@@ -41,14 +43,12 @@ Requires-Dist: numpydoc>=1.5.0,<1.9 ; extra == "doc"
41
43
  Requires-Dist: pypandoc>=1.10.0,<1.16 ; extra == "doc"
42
44
  Requires-Dist: recommonmark ; extra == "doc"
43
45
  Requires-Dist: Sphinx>=7.1.0,<8.2 ; extra == "doc"
44
- Requires-Dist: sphinx-autobuild==2021.3.14 ; extra == "doc" and ( python_version == '3.8')
46
+ Requires-Dist: sphinx-autobuild==2024.10.3 ; extra == "doc" and ( python_version == '3.8')
45
47
  Requires-Dist: sphinx-autobuild==2024.10.3 ; extra == "doc" and ( python_version > '3.8')
46
48
  Requires-Dist: sphinx-copybutton>=0.5.0,<0.6 ; extra == "doc"
47
49
  Requires-Dist: sphinx-gallery>=0.14.0,<0.20 ; extra == "doc"
48
50
  Requires-Dist: sphinx_design>=0.4.0,<0.7 ; extra == "doc"
49
51
  Requires-Dist: shapely ; extra == "doc"
50
- Requires-Dist: matplotlib>=3.5.0,<3.11 ; extra == "full"
51
- Requires-Dist: shapely ; extra == "full"
52
52
  Requires-Dist: matplotlib>=3.5.0,<3.11 ; extra == "tests"
53
53
  Requires-Dist: mock>=5.1.0,<5.3 ; extra == "tests"
54
54
  Requires-Dist: pytest>=7.4.0,<8.5 ; extra == "tests"
@@ -62,7 +62,6 @@ Project-URL: Documentation, https://edb.docs.pyansys.com
62
62
  Project-URL: Releases, https://github.com/ansys/pyedb/releases
63
63
  Project-URL: Source, https://github.com/ansys/pyedb
64
64
  Provides-Extra: doc
65
- Provides-Extra: full
66
65
  Provides-Extra: tests
67
66
 
68
67
  <!-- -->
@@ -38,6 +38,8 @@ dependencies = [
38
38
  "scikit-rf",
39
39
  "ansys-edb-core>=0.2.0",
40
40
  "psutil",
41
+ "defusedxml>=0.7,<8.0",
42
+ "matplotlib>=3.5.0,<3.11",
41
43
  ]
42
44
 
43
45
  [project.optional-dependencies]
@@ -64,17 +66,12 @@ doc = [
64
66
  # NOTE: Remove recommonmark once examples are reworked.
65
67
  "recommonmark",
66
68
  "Sphinx>=7.1.0,<8.2",
67
- "sphinx-autobuild==2021.3.14; python_version == '3.8'",
69
+ "sphinx-autobuild==2024.10.3; python_version == '3.8'",
68
70
  "sphinx-autobuild==2024.10.3; python_version > '3.8'",
69
71
  "sphinx-copybutton>=0.5.0,<0.6",
70
72
  "sphinx-gallery>=0.14.0,<0.20",
71
73
  "sphinx_design>=0.4.0,<0.7",
72
74
  "shapely",
73
-
74
- ]
75
- full = [
76
- "matplotlib>=3.5.0,<3.11",
77
- "shapely",
78
75
  ]
79
76
 
80
77
 
@@ -37,7 +37,7 @@ deprecation_warning()
37
37
  #
38
38
 
39
39
  pyedb_path = os.path.dirname(__file__)
40
- __version__ = "0.57.0"
40
+ __version__ = "0.58.0"
41
41
  version = __version__
42
42
 
43
43
  #
@@ -35,6 +35,8 @@ class CfgPinGroups:
35
35
  layout_pin_groups = self._pedb.siwave.pin_groups
36
36
  for pg_name, pg_obj in layout_pin_groups.items():
37
37
  pins = list(pg_obj.pins.keys())
38
+ if len(pins) == 0: # pragma: no cover
39
+ continue
38
40
  refdes = list(pg_obj.pins.values())[0].component.name
39
41
  cfg_pg = CfgPinGroup(
40
42
  self._pedb,
@@ -25,6 +25,8 @@ import re
25
25
  from typing import Optional
26
26
  import warnings
27
27
 
28
+ import numpy as np
29
+
28
30
  from pyedb.dotnet.database.cell.hierarchy.hierarchy_obj import Group
29
31
  from pyedb.dotnet.database.cell.hierarchy.model import PinPairModel, SPICEModel
30
32
  from pyedb.dotnet.database.cell.hierarchy.netlist_model import NetlistModel
@@ -33,14 +35,6 @@ from pyedb.dotnet.database.cell.hierarchy.s_parameter_model import SparamModel
33
35
  from pyedb.dotnet.database.cell.hierarchy.spice_model import SpiceModel
34
36
  from pyedb.dotnet.database.definition.package_def import PackageDef
35
37
  from pyedb.dotnet.database.edb_data.padstacks_data import EDBPadstackInstance
36
-
37
- try:
38
- import numpy as np
39
- except ImportError:
40
- warnings.warn(
41
- "The NumPy module is required to run some functionalities of EDB.\n"
42
- "Install with \n\npip install numpy\n\nRequires CPython."
43
- )
44
38
  from pyedb.generic.general_methods import get_filename_without_extension
45
39
 
46
40
 
@@ -409,8 +409,8 @@ class Layout(ObjBase):
409
409
  """
410
410
  candidates = self.padstack_instances
411
411
  if instance_id is not None:
412
- instance_id = int(instance_id)
413
412
  value = instance_id if isinstance(instance_id, list) else [instance_id]
413
+ value = [int(i) for i in value]
414
414
  candidates = [i for i in candidates if i.id in value]
415
415
 
416
416
  if aedt_name is not None:
@@ -961,7 +961,7 @@ class Components(object):
961
961
  if not isinstance(port_type, int):
962
962
  if port_type == "circuit_port":
963
963
  port_type = SourceType.CircPort
964
- elif port_type == "coaxial_port":
964
+ elif port_type in ["coaxial_port", "coax_port"]:
965
965
  port_type = SourceType.CoaxPort
966
966
  elif port_type == "lumped_port":
967
967
  port_type = SourceType.LumpedPort
@@ -1518,8 +1518,6 @@ class Components(object):
1518
1518
  if componentDefinitionPin.IsNull():
1519
1519
  self._logger.error("Failed to create component definition pin {}-{}".format(name, pin.GetName()))
1520
1520
  return None
1521
- else:
1522
- self._logger.warning("Found existing component definition for footprint {}".format(name))
1523
1521
  return componentDefinition
1524
1522
 
1525
1523
  def create_rlc_component(
@@ -23,10 +23,12 @@
23
23
  import copy
24
24
  import os
25
25
  import re
26
- import subprocess
26
+ import subprocess # nosec B404
27
27
  import sys
28
28
  import xml
29
29
 
30
+ from defusedxml.ElementTree import parse as defused_parse
31
+
30
32
  from pyedb.generic.general_methods import ET, env_path, env_value, is_linux
31
33
  from pyedb.generic.settings import settings
32
34
  from pyedb.misc.aedtlib_personalib_install import write_pretty_xml
@@ -36,6 +38,11 @@ from pyedb.misc.misc import list_installed_ansysem
36
38
  def convert_technology_file(tech_file, edbversion=None, control_file=None):
37
39
  """Convert a technology file to edb control file (xml).
38
40
 
41
+ .. warning::
42
+ Do not execute this function with untrusted function argument, environment
43
+ variables or pyedb global settings.
44
+ See the :ref:`security guide<ref_security_consideration>` for details.
45
+
39
46
  Parameters
40
47
  ----------
41
48
  tech_file : str
@@ -99,10 +106,11 @@ def convert_technology_file(tech_file, edbversion=None, control_file=None):
99
106
  ]
100
107
  commands.append(command)
101
108
  commands.append(["rm", "-r", vlc_file_name + ".aedb"])
102
- my_env = os.environ.copy()
103
109
  for command in commands:
104
- p = subprocess.Popen(command, env=my_env)
105
- p.wait()
110
+ try:
111
+ subprocess.run(command, check=True) # nosec
112
+ except subprocess.CalledProcessError as e: # nosec
113
+ raise RuntimeError("An error occurred while converting a technology file to edb control file") from e
106
114
  if os.path.exists(control_file):
107
115
  settings.logger.info("Xml file created.")
108
116
  return control_file
@@ -1213,7 +1221,7 @@ class ControlFile:
1213
1221
  -------
1214
1222
  bool
1215
1223
  """
1216
- tree = ET.parse(xml_input)
1224
+ tree = defused_parse(xml_input)
1217
1225
  root = tree.getroot()
1218
1226
  for el in root:
1219
1227
  if el.tag == "Stackup":
@@ -22,6 +22,7 @@
22
22
 
23
23
  from collections import OrderedDict
24
24
  import math
25
+ import re
25
26
  import warnings
26
27
 
27
28
  from pyedb.dotnet.clr_module import String
@@ -1213,6 +1214,39 @@ class EDBPadstackInstance(Connectable):
1213
1214
  if not term.is_null:
1214
1215
  return term
1215
1216
 
1217
+ @property
1218
+ def side_number(self):
1219
+ """Return the number of sides meshed of the padstack instance.
1220
+ Returns
1221
+ -------
1222
+ int
1223
+ Number of sides meshed of the padstack instance.
1224
+ """
1225
+ side_value = self._edb_object.GetProductProperty(self._pedb._edb.ProductId.Hfss3DLayout, 21)
1226
+ if side_value[0]:
1227
+ return int(re.search(r"(?m)^\s*sid=(\d+)", side_value[1]).group(1))
1228
+ return 0
1229
+
1230
+ @side_number.setter
1231
+ def side_number(self, value):
1232
+ """Set the number of sides meshed of the padstack instance.
1233
+
1234
+ Parameters
1235
+ ----------
1236
+ value : int
1237
+ Number of sides to mesh the padstack instance.
1238
+
1239
+ Returns
1240
+ -------
1241
+ bool
1242
+ True if successful, False otherwise.
1243
+ """
1244
+ if isinstance(value, int) and 3 <= value <= 64:
1245
+ prop_string = f"$begin ''\n\tsid={value}\n\tmat='copper'\n\tvs='Wirebond'\n$end ''\n"
1246
+ self._edb_object.SetProductProperty(self._pedb._edb.ProductId.Hfss3DLayout, 21, prop_string)
1247
+ else:
1248
+ raise ValueError("Number of sides must be an integer between 3 and 64")
1249
+
1216
1250
  @property
1217
1251
  def terminal(self):
1218
1252
  """Terminal."""
@@ -1918,18 +1952,6 @@ class EDBPadstackInstance(Connectable):
1918
1952
  """
1919
1953
  return int(self._edb_padstackinstance.GetGroup().GetPlacementLayer().GetTopBottomAssociation())
1920
1954
 
1921
- @property
1922
- def side_number(self) -> float:
1923
- if not self._side_number:
1924
- prop_string = "$begin ''\n\tsid=3\n\tmat='copper'\n\tvs='Wirebond'\n$end ''\n"
1925
- self._edb_padstackinstance.SetProductProperty(self._pedb._edb.ProductId.Designer, 21, prop_string)
1926
- self._side_number = self._edb_padstackinstance.GetProductProperty(self._pedb._edb.ProductId.Designer, 21)
1927
- return self._side_number
1928
-
1929
- @side_number.setter
1930
- def side_number(self, value):
1931
- self._side_number = self._edb_padstackinstance.GetProductProperty(self._pedb._edb.ProductId.Designer, 21, value)
1932
-
1933
1955
  def create_rectangle_in_pad(self, layer_name, return_points=False, partition_max_order=16):
1934
1956
  """Create a rectangle inscribed inside a padstack instance pad.
1935
1957
 
@@ -20,6 +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 typing import List, Tuple, Union
23
24
  import warnings
24
25
 
25
26
  from pyedb.generic.constants import NodeType, SourceType
@@ -279,9 +280,27 @@ class PinGroup(object):
279
280
  @property
280
281
  def pins(self):
281
282
  """Gets the pins belong to this pin group."""
282
- from pyedb.dotnet.database.edb_data.padstacks_data import EDBPadstackInstance
283
+ edb_pin_ids = [edb_pin.GetId() for edb_pin in list(self._edb_object.GetPins())]
284
+ if len(edb_pin_ids) == 0:
285
+ return {}
286
+ else:
287
+ pins = self._pedb.layout.find_padstack_instances(instance_id=edb_pin_ids)
288
+ return {i.name: i for i in pins}
289
+
290
+ def remove_pins(self, pins: Union[str, List[str]]):
291
+ """Remove pins from the pin group.
292
+
293
+ Parameters
294
+ ----------
295
+ pins : str, list
296
+ List of padstack instance names.
297
+
298
+ """
299
+ _pins = pins if isinstance(pins, Union[list, Tuple]) else [pins]
283
300
 
284
- return {i.GetName(): EDBPadstackInstance(i, self._pedb) for i in list(self._edb_object.GetPins())}
301
+ pin_objs = [j for i, j in self.pins.items() if i in _pins]
302
+ for p in pin_objs:
303
+ self._edb_object.RemovePin(p._edb_object)
285
304
 
286
305
  @property
287
306
  def node_pins(self):
@@ -27,17 +27,12 @@ This module contains EDB general methods and related methods.
27
27
 
28
28
  from __future__ import absolute_import # noreorder
29
29
 
30
+ from enum import Enum
30
31
  import logging
31
32
  import re
32
33
 
33
34
  from pyedb.dotnet.clr_module import Dictionary, List, Tuple
34
35
 
35
- try:
36
- from enum import Enum
37
- except ImportError:
38
- Enum = None
39
-
40
-
41
36
  logger = logging.getLogger(__name__)
42
37
 
43
38
 
@@ -339,3 +339,11 @@ class LayoutValidation:
339
339
  if fix:
340
340
  obj.aedt_name = f"via_{obj.id}"
341
341
  self._pedb.logger.info(f"Found {counts}/{len(pds)} padstacks have no name.")
342
+
343
+ @execution_timer("empty_pin_group")
344
+ def delete_empty_pin_groups(self):
345
+ for name, pg in self._pedb.siwave.pin_groups.items():
346
+ pins = pg.pins
347
+ if len(pins) == 0:
348
+ pg.delete()
349
+ self._pedb.logger.info(f"Pin group {name} deleted because it has no pins.")
@@ -713,6 +713,19 @@ class DCAdvancedSettings(SettingsBase):
713
713
  def max_num_pass(self):
714
714
  """Maximum number of passes.
715
715
 
716
+ deprecated: Use `max_num_passes` instead.
717
+
718
+ Returns
719
+ -------
720
+ int
721
+ """
722
+ warnings.warn("`max_num_pass` is deprecated. Use `max_num_passes` instead.", DeprecationWarning)
723
+ return self.max_num_passes
724
+
725
+ @property
726
+ def max_num_passes(self):
727
+ """Maximum number of passes.
728
+
716
729
  Returns
717
730
  -------
718
731
  int
@@ -723,6 +736,19 @@ class DCAdvancedSettings(SettingsBase):
723
736
  def min_num_pass(self):
724
737
  """Minimum number of passes.
725
738
 
739
+ deprecated: Use `min_num_passes` instead.
740
+
741
+ Returns
742
+ -------
743
+ int
744
+ """
745
+ warnings.warn("`min_num_pass` is deprecated. Use `min_num_passes` instead.", DeprecationWarning)
746
+ return self.sim_setup_info
747
+
748
+ @property
749
+ def min_num_passes(self):
750
+ """Minimum number of passes.
751
+
726
752
  Returns
727
753
  -------
728
754
  int
@@ -753,6 +779,19 @@ class DCAdvancedSettings(SettingsBase):
753
779
  def num_bondwire_sides(self):
754
780
  """Number of bondwire sides.
755
781
 
782
+ deprecated: Use `num_bw_sides` instead.
783
+
784
+ Returns
785
+ -------
786
+ int
787
+ """
788
+ warnings.warn("`num_bondwire_sides` is deprecated. Use `num_bw_sides` instead.", DeprecationWarning)
789
+ return self.num_bw_sides
790
+
791
+ @property
792
+ def num_bw_sides(self):
793
+ """Number of bondwire sides.
794
+
756
795
  Returns
757
796
  -------
758
797
  int
@@ -794,6 +833,20 @@ class DCAdvancedSettings(SettingsBase):
794
833
  def refine_bondwires(self):
795
834
  """Whether to refine mesh along bondwires.
796
835
 
836
+ deprecated: Use `refine_bws` instead.
837
+
838
+ Returns
839
+ -------
840
+ bool
841
+ ``True`` if refine bondwires is used, ``False`` otherwise.
842
+ """
843
+ warnings.warn("`refine_bondwires` is deprecated. Use `refine_bws` instead.", DeprecationWarning)
844
+ return self.refine_bws
845
+
846
+ @property
847
+ def refine_bws(self):
848
+ """Whether to refine mesh along bondwires.
849
+
797
850
  Returns
798
851
  -------
799
852
  bool
@@ -33,6 +33,11 @@ import logging
33
33
  import math
34
34
  import warnings
35
35
 
36
+ from defusedxml.ElementTree import parse as defused_parse
37
+ import matplotlib.colors as colors
38
+ import numpy as np
39
+ import pandas as pd
40
+
36
41
  from pyedb.dotnet.database.edb_data.layer_data import (
37
42
  LayerEdbClass,
38
43
  StackupLayerEdbClass,
@@ -42,24 +47,6 @@ from pyedb.dotnet.database.general import convert_py_list_to_net_list
42
47
  from pyedb.generic.general_methods import ET, generate_unique_name
43
48
  from pyedb.misc.aedtlib_personalib_install import write_pretty_xml
44
49
 
45
- colors = None
46
- pd = None
47
- np = None
48
- try:
49
- import matplotlib.colors as colors
50
- except ImportError:
51
- colors = None
52
-
53
- try:
54
- import numpy as np
55
- except ImportError:
56
- np = None
57
-
58
- try:
59
- import pandas as pd
60
- except ImportError:
61
- pd = None
62
-
63
50
  logger = logging.getLogger(__name__)
64
51
 
65
52
 
@@ -473,9 +460,6 @@ class Stackup(LayerCollection):
473
460
  -------
474
461
  bool
475
462
  """
476
- if not np:
477
- self._pedb.logger.error("Numpy is needed. Please, install it first.")
478
- return False
479
463
  if not layer_count % 2 == 0:
480
464
  return False
481
465
 
@@ -973,10 +957,6 @@ class Stackup(LayerCollection):
973
957
  return self.export(fpath, file_format=file_format, include_material_with_layer=include_material_with_layer)
974
958
 
975
959
  def _export_layer_stackup_to_csv_xlsx(self, fpath=None, file_format=None):
976
- if not pd:
977
- self._pedb.logger.error("Pandas is needed. Please, install it first.")
978
- return False
979
-
980
960
  data = {
981
961
  "Type": [],
982
962
  "Material": [],
@@ -1996,10 +1976,6 @@ class Stackup(LayerCollection):
1996
1976
  file_path : str
1997
1977
  File path to the CSV file.
1998
1978
  """
1999
- if not pd:
2000
- self._pedb.logger.error("Pandas is needed. You must install it first.")
2001
- return False
2002
-
2003
1979
  df = pd.read_csv(file_path, index_col=0)
2004
1980
 
2005
1981
  for name in self.layers.keys(): # pragma: no cover
@@ -2266,9 +2242,6 @@ class Stackup(LayerCollection):
2266
2242
  ``True`` when successful, ``False`` when failed.
2267
2243
  """
2268
2244
 
2269
- if not colors:
2270
- self._pedb.logger.error("Matplotlib is needed. Please, install it first.")
2271
- return False
2272
2245
  tree = ET.parse(file_path)
2273
2246
  root = tree.getroot()
2274
2247
  stackup = root.find("Stackup")
@@ -382,6 +382,87 @@ class HfssSimulationSetup(SimulationSetup):
382
382
  return False
383
383
  return True
384
384
 
385
+ def auto_mesh_operation(
386
+ self,
387
+ trace_ratio_seeding: float = 3,
388
+ signal_via_side_number: int = 12,
389
+ power_ground_via_side_number: int = 6,
390
+ ) -> bool:
391
+ """
392
+ Automatically create and apply a length-based mesh operation for all nets in the design.
393
+
394
+ The method inspects every signal net, determines the smallest trace width, and
395
+ seeds a :class:`LengthMeshOperation` whose maximum element length is
396
+ ``smallest_width * trace_ratio_seeding``. Signal vias (padstack instances) are
397
+ configured with the requested number of polygon sides, while power/ground vias
398
+ are updated through the global ``num_via_sides`` advanced setting.
399
+
400
+ Parameters
401
+ ----------
402
+ trace_ratio_seeding : float, optional
403
+ Ratio used to compute the maximum allowed element length from the
404
+ smallest trace width found in the design. The resulting length is
405
+ ``min_width * trace_ratio_seeding``. Defaults to ``3``.
406
+ signal_via_side_number : int, optional
407
+ Number of sides (i.e. faceting resolution) assigned to **signal**
408
+ padstack instances that belong to the nets being meshed.
409
+ Defaults to ``12``.
410
+ power_ground_via_side_number : int, optional
411
+ Number of sides assigned to **power/ground** vias via the global
412
+ ``advanced.num_via_sides`` setting. Defaults to ``6``.
413
+
414
+ Returns
415
+ -------
416
+ bool
417
+
418
+ Raises
419
+ ------
420
+ ValueError
421
+ If the design contains no terminals, making mesh seeding impossible.
422
+
423
+ Notes
424
+ -----
425
+ * Only primitives of type ``"path"`` are considered when determining the
426
+ smallest trace width.
427
+ * Every ``(net, layer, sheet)`` tuple required by the mesher is
428
+ automatically populated; sheet are explicitly marked as ``False``.
429
+ * Existing contents of :attr:`mesh_operations` are **replaced** by the
430
+ single new operation.
431
+
432
+ Examples
433
+ --------
434
+ >>> setup = edbapp.setups["my_setup"]
435
+ >>> setup.auto_mesh_operation(trace_ratio_seeding=4, signal_vias_side_number=16)
436
+ >>> setup.mesh_operations[0].max_length
437
+ '2.5um'
438
+ """
439
+ net_for_mesh_seeding = list(set([term.net.name for term in list(self._pedb.terminals.values())]))
440
+ if not net_for_mesh_seeding:
441
+ raise ValueError("No terminals found to seed the mesh operation.")
442
+ net_layer_dict = {}
443
+ smallest_width = 1e3
444
+ for net in net_for_mesh_seeding:
445
+ net_layer_dict[net] = []
446
+ traces = [prim for prim in self._pedb.modeler.primitives_by_net[net] if prim.type.lower() == "path"]
447
+ _width = min([trace.width for trace in traces], default=1e3)
448
+ if _width < smallest_width:
449
+ smallest_width = _width
450
+ layers = list(set([trace.layer.name for trace in traces]))
451
+ for layer in layers:
452
+ net_layer_dict[net].append(layer)
453
+ for inst in [
454
+ inst for inst in list(self._pedb.padstacks.padstack_instances.values()) if inst.net_name == net
455
+ ]:
456
+ inst.side_number = signal_via_side_number
457
+ self.add_length_mesh_operation(
458
+ net_layer_list=net_layer_dict,
459
+ name=f"{self.name}_AutoMeshOp",
460
+ max_length=f"{round(float((smallest_width * trace_ratio_seeding)), 9) * 1e6}um",
461
+ )
462
+ if f"{self.name}_AutoMeshOp" in self.mesh_operations:
463
+ return True
464
+ return False
465
+
385
466
 
386
467
  class HFSSPISimulationSetup(SimulationSetup):
387
468
  """Manages EDB methods for HFSSPI simulation setup."""