pyedb 0.55.0__tar.gz → 0.56.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 (303) hide show
  1. {pyedb-0.55.0 → pyedb-0.56.0}/PKG-INFO +1 -1
  2. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/__init__.py +1 -1
  3. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_operations.py +2 -2
  4. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_ports_sources.py +1 -1
  5. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/Variables.py +26 -19
  6. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/components.py +41 -36
  7. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/padstack.py +87 -0
  8. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/edb.py +2 -2
  9. pyedb-0.56.0/src/pyedb/extensions/create_cell_array.py +394 -0
  10. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/data_handlers.py +6 -7
  11. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/design_types.py +16 -3
  12. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/filesystem.py +5 -2
  13. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/general_methods.py +2 -2
  14. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/settings.py +4 -0
  15. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/components.py +24 -4
  16. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layout/layout.py +74 -1
  17. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layout_validation.py +2 -2
  18. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/modeler.py +15 -12
  19. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/padstacks.py +87 -0
  20. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/polygon.py +2 -2
  21. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/siwave_cpa_simulation_setup.py +3 -2
  22. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/source_excitations.py +10 -1
  23. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/value.py +1 -0
  24. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/edb.py +9 -5
  25. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/rpc_session.py +4 -3
  26. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/modeler/geometry_operators.py +6 -6
  27. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/siwave.py +4 -6
  28. pyedb-0.56.0/src/pyedb/siwave_core/__init__.py +0 -0
  29. pyedb-0.56.0/src/pyedb/siwave_core/cpa/__init__.py +0 -0
  30. {pyedb-0.55.0 → pyedb-0.56.0}/LICENSE +0 -0
  31. {pyedb-0.55.0 → pyedb-0.56.0}/README.md +0 -0
  32. {pyedb-0.55.0 → pyedb-0.56.0}/pyproject.toml +0 -0
  33. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/common/__init__.py +0 -0
  34. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/common/nets.py +0 -0
  35. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/component_libraries/ansys_components.py +0 -0
  36. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/__init__.py +0 -0
  37. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_boundaries.py +0 -0
  38. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_common.py +0 -0
  39. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_components.py +0 -0
  40. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_data.py +0 -0
  41. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_general.py +0 -0
  42. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_modeler.py +0 -0
  43. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_nets.py +0 -0
  44. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_package_definition.py +0 -0
  45. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_padstacks.py +0 -0
  46. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_pin_groups.py +0 -0
  47. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_s_parameter_models.py +0 -0
  48. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_setup.py +0 -0
  49. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
  50. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_stackup.py +0 -0
  51. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/configuration.py +0 -0
  52. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/__init__.py +0 -0
  53. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/clr_module.py +0 -0
  54. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/__init__.py +0 -0
  55. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/__init__.py +0 -0
  56. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/connectable.py +0 -0
  57. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/__init__.py +0 -0
  58. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/component.py +0 -0
  59. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/hierarchy_obj.py +0 -0
  60. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/model.py +0 -0
  61. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/netlist_model.py +0 -0
  62. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/pin_pair_model.py +0 -0
  63. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/s_parameter_model.py +0 -0
  64. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/spice_model.py +0 -0
  65. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/layout.py +0 -0
  66. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/layout_obj.py +0 -0
  67. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/primitive/__init__.py +0 -0
  68. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/primitive/bondwire.py +0 -0
  69. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/primitive/path.py +0 -0
  70. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/primitive/primitive.py +0 -0
  71. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/__init__.py +0 -0
  72. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/bundle_terminal.py +0 -0
  73. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/edge_terminal.py +0 -0
  74. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/padstack_instance_terminal.py +0 -0
  75. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +0 -0
  76. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/point_terminal.py +0 -0
  77. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/terminal.py +0 -0
  78. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/voltage_regulator.py +0 -0
  79. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/__init__.py +0 -0
  80. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/component_def.py +0 -0
  81. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/component_model.py +0 -0
  82. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/definition_obj.py +0 -0
  83. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/definitions.py +0 -0
  84. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/package_def.py +0 -0
  85. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/dotnet/__init__.py +0 -0
  86. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/dotnet/database.py +0 -0
  87. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/dotnet/primitive.py +0 -0
  88. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/__init__.py +0 -0
  89. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/control_file.py +0 -0
  90. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/design_options.py +0 -0
  91. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/edbvalue.py +0 -0
  92. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/hfss_extent_info.py +0 -0
  93. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/layer_data.py +0 -0
  94. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/nets_data.py +0 -0
  95. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/padstacks_data.py +0 -0
  96. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/ports.py +0 -0
  97. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/primitives_data.py +0 -0
  98. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/raptor_x_simulation_setup_data.py +0 -0
  99. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/simulation_configuration.py +0 -0
  100. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/sources.py +0 -0
  101. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/utilities.py +0 -0
  102. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/variables.py +0 -0
  103. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/general.py +0 -0
  104. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/geometry/__init__.py +0 -0
  105. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/geometry/point_data.py +0 -0
  106. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/geometry/polygon_data.py +0 -0
  107. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/hfss.py +0 -0
  108. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/layout_obj_instance.py +0 -0
  109. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/layout_validation.py +0 -0
  110. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/materials.py +0 -0
  111. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/modeler.py +0 -0
  112. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/net_class.py +0 -0
  113. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/nets.py +0 -0
  114. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/__init__.py +0 -0
  115. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/__init__.py +0 -0
  116. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/adaptive_frequency_data.py +0 -0
  117. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/mesh_operation.py +0 -0
  118. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/settings.py +0 -0
  119. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/sim_setup_info.py +0 -0
  120. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/simulation_settings.py +0 -0
  121. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
  122. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/sweep_data.py +0 -0
  123. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/io/__init__.py +0 -0
  124. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/io/siwave.py +0 -0
  125. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/siwave.py +0 -0
  126. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/stackup.py +0 -0
  127. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/__init__.py +0 -0
  128. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/heatsink.py +0 -0
  129. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/hfss_simulation_setup.py +0 -0
  130. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/obj_base.py +0 -0
  131. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/simulation_setup.py +0 -0
  132. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/siwave_cpa_simulation_setup.py +0 -0
  133. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/siwave_simulation_setup.py +0 -0
  134. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/value.py +0 -0
  135. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/edb_logger.py +0 -0
  136. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/exceptions.py +0 -0
  137. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/extensions/__init__.py +0 -0
  138. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/extensions/via_design_backend.py +0 -0
  139. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/__init__.py +0 -0
  140. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/constants.py +0 -0
  141. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/grpc_warnings.py +0 -0
  142. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/plot.py +0 -0
  143. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/process.py +0 -0
  144. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/__init__.py +0 -0
  145. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/__init__.py +0 -0
  146. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/control_file.py +0 -0
  147. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/__init__.py +0 -0
  148. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/component_def.py +0 -0
  149. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/component_model.py +0 -0
  150. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/component_pin.py +0 -0
  151. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/materials.py +0 -0
  152. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/n_port_component_model.py +0 -0
  153. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/package_def.py +0 -0
  154. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/padstack_def.py +0 -0
  155. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definitions.py +0 -0
  156. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/general.py +0 -0
  157. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/geometry/__init__.py +0 -0
  158. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/geometry/arc_data.py +0 -0
  159. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/geometry/point_3d_data.py +0 -0
  160. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/geometry/point_data.py +0 -0
  161. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/geometry/polygon_data.py +0 -0
  162. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hfss.py +0 -0
  163. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/__init__.py +0 -0
  164. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/component.py +0 -0
  165. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/model.py +0 -0
  166. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/netlist_model.py +0 -0
  167. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/pin_pair_model.py +0 -0
  168. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/pingroup.py +0 -0
  169. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/s_parameter_model.py +0 -0
  170. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/spice_model.py +0 -0
  171. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layers/__init__.py +0 -0
  172. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layers/layer.py +0 -0
  173. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layers/stackup_layer.py +0 -0
  174. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layout/__init__.py +0 -0
  175. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layout/cell.py +0 -0
  176. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layout/voltage_regulator.py +0 -0
  177. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/net/__init__.py +0 -0
  178. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/net/differential_pair.py +0 -0
  179. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/net/extended_net.py +0 -0
  180. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/net/net.py +0 -0
  181. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/net/net_class.py +0 -0
  182. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/nets.py +0 -0
  183. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/ports/__init__.py +0 -0
  184. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/ports/ports.py +0 -0
  185. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/__init__.py +0 -0
  186. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/bondwire.py +0 -0
  187. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/circle.py +0 -0
  188. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/padstack_instance.py +0 -0
  189. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/path.py +0 -0
  190. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/primitive.py +0 -0
  191. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/rectangle.py +0 -0
  192. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/__init__.py +0 -0
  193. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/adaptive_frequency.py +0 -0
  194. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py +0 -0
  195. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +0 -0
  196. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py +0 -0
  197. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_general_settings.py +0 -0
  198. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_settings_options.py +0 -0
  199. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +0 -0
  200. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +0 -0
  201. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_solver_settings.py +0 -0
  202. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/mesh_operation.py +0 -0
  203. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py +0 -0
  204. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py +0 -0
  205. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +0 -0
  206. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +0 -0
  207. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py +0 -0
  208. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +0 -0
  209. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/sweep_data.py +0 -0
  210. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/siwave.py +0 -0
  211. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/stackup.py +0 -0
  212. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/__init__.py +0 -0
  213. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/bundle_terminal.py +0 -0
  214. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/edge_terminal.py +0 -0
  215. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/padstack_instance_terminal.py +0 -0
  216. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/pingroup_terminal.py +0 -0
  217. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/point_terminal.py +0 -0
  218. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/terminal.py +0 -0
  219. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/__init__.py +0 -0
  220. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/constants.py +0 -0
  221. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/heat_sink.py +0 -0
  222. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/hfss_extent_info.py +0 -0
  223. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/layout_statistics.py +0 -0
  224. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/rlc.py +0 -0
  225. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/sources.py +0 -0
  226. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/sweep_data_distribution.py +0 -0
  227. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/xml_control_file.py +0 -0
  228. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/edb_init.py +0 -0
  229. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/__init__.py +0 -0
  230. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/bom/__init__.py +0 -0
  231. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
  232. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
  233. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
  234. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
  235. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/__init__.py +0 -0
  236. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/color.py +0 -0
  237. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/content.py +0 -0
  238. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
  239. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
  240. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
  241. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
  242. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
  243. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/fill.py +0 -0
  244. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
  245. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
  246. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
  247. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
  248. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
  249. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
  250. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
  251. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
  252. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
  253. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
  254. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
  255. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
  256. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
  257. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
  258. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
  259. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
  260. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
  261. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
  262. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
  263. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
  264. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
  265. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
  266. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
  267. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
  268. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
  269. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
  270. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
  271. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
  272. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
  273. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
  274. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/history_record.py +0 -0
  275. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
  276. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
  277. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/libraries/common.py +0 -0
  278. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/libraries/rf_libraries/base_functions.py +0 -0
  279. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/libraries/rf_libraries/planar_antennas.py +0 -0
  280. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/__init__.py +0 -0
  281. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
  282. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/decorators.py +0 -0
  283. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/downloads.py +0 -0
  284. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/misc.py +0 -0
  285. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
  286. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
  287. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  288. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
  289. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
  290. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
  291. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
  292. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
  293. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +0 -0
  294. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +0 -0
  295. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +0 -0
  296. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +0 -0
  297. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +0 -0
  298. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +0 -0
  299. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/utilities.py +0 -0
  300. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/siwave_core/cpa/simulation_setup_data_model.py +0 -0
  301. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/siwave_core/icepak.py +0 -0
  302. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/siwave_core/product_properties.py +0 -0
  303. {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyedb
3
- Version: 0.55.0
3
+ Version: 0.56.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>
@@ -37,7 +37,7 @@ deprecation_warning()
37
37
  #
38
38
 
39
39
  pyedb_path = os.path.dirname(__file__)
40
- __version__ = "0.55.0"
40
+ __version__ = "0.56.0"
41
41
  version = __version__
42
42
 
43
43
  #
@@ -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 typing import Any, Dict, List, Optional
23
+ from typing import Any, Dict, List, Optional, Union
24
24
 
25
25
  from pydantic import BaseModel, Field
26
26
 
@@ -37,7 +37,7 @@ class CfgCutout(BaseModel):
37
37
  signal_list: Optional[List[str]] = None
38
38
  reference_list: Optional[List[str]] = None
39
39
  extent_type: Optional[str] = "ConvexHull"
40
- expansion_size: Optional[float] = 0.002
40
+ expansion_size: Optional[Union[float, str]] = 0.002
41
41
  number_of_threads: Optional[int] = 1
42
42
  custom_extent: Optional[Any] = None
43
43
  custom_extent_units: str = Field(default="meter")
@@ -278,7 +278,7 @@ class CfgCircuitElement(CfgBase):
278
278
  self._pedb = pedb
279
279
  self.name = kwargs["name"]
280
280
  self.type = kwargs["type"]
281
- self.impedance = kwargs.get("impedance", 50)
281
+ self.impedance = kwargs.get("impedance", None)
282
282
  self.reference_designator = kwargs.get("reference_designator", None)
283
283
  self.distributed = kwargs.get("distributed", False)
284
284
  self._elem_num = 1
@@ -181,13 +181,15 @@ class CSVDataset:
181
181
  if variable in key_string:
182
182
  found_variable = True
183
183
  break
184
- assert found_variable, "Input string {} is not a key of the data dictionary.".format(variable)
184
+ if not found_variable:
185
+ raise KeyError(f"Input string {variable} is not a key of the data dictionary.")
185
186
  data_out._data[variable] = self._data[key_string]
186
187
  data_out._header.append(variable)
187
188
  return data_out
188
189
 
189
190
  def __add__(self, other): # pragma: no cover
190
- assert self.number_of_columns == other.number_of_columns, "Inconsistent number of columns"
191
+ if self.number_of_columns != other.number_of_columns:
192
+ raise ValueError("Number of columns is inconsistent.")
191
193
  # Create a new object to return, avoiding changing the original inputs
192
194
  new_dataset = CSVDataset()
193
195
  # Add empty columns to new_dataset
@@ -222,7 +224,8 @@ class CSVDataset:
222
224
  for column in other.data:
223
225
  self._data[column] = []
224
226
 
225
- assert self.number_of_columns == other.number_of_columns, "Inconsistent number of columns"
227
+ if self.number_of_columns != other.number_of_columns:
228
+ raise ValueError("Number of columns is inconsistent.")
226
229
 
227
230
  # Append the data from 'other'
228
231
  for column, row_data in other.data.items():
@@ -1341,9 +1344,10 @@ class Variable(object):
1341
1344
  self._value = self._calculated_value
1342
1345
  # If units have been specified, check for a conflict and otherwise use the specified unit system
1343
1346
  if units:
1344
- assert not self._units, "The unit specification {} is inconsistent with the identified units {}.".format(
1345
- specified_units, self._units
1346
- )
1347
+ if self._units and self._units != specified_units:
1348
+ raise RuntimeError(
1349
+ f"The unit specification {specified_units} is inconsistent with the identified units {self._units}."
1350
+ )
1347
1351
  self._units = specified_units
1348
1352
 
1349
1353
  if not si_value and is_number(self._value):
@@ -1730,9 +1734,10 @@ class Variable(object):
1730
1734
 
1731
1735
  """
1732
1736
  new_unit_system = unit_system(units)
1733
- assert (
1734
- new_unit_system == self.unit_system
1735
- ), "New unit system {0} is inconsistent with the current unit system {1}."
1737
+ if new_unit_system != self.unit_system:
1738
+ raise ValueError(
1739
+ f"New unit system {new_unit_system} is inconsistent with the current unit system {self.unit_system}."
1740
+ )
1736
1741
  self._units = units
1737
1742
  return self
1738
1743
 
@@ -1803,7 +1808,8 @@ class Variable(object):
1803
1808
  >>> assert result_3.unit_system == "Power"
1804
1809
 
1805
1810
  """
1806
- assert is_number(other) or isinstance(other, Variable), "Multiplier must be a scalar quantity or a variable."
1811
+ if not is_number(other) and not isinstance(other, Variable):
1812
+ raise ValueError("Multiplier must be a scalar quantity or a variable.")
1807
1813
  if is_number(other):
1808
1814
  result_value = self.numeric_value * other
1809
1815
  result_units = self.units
@@ -1847,10 +1853,10 @@ class Variable(object):
1847
1853
  >>> assert result.unit_system == "Current"
1848
1854
 
1849
1855
  """
1850
- assert isinstance(other, Variable), "You can only add a variable with another variable."
1851
- assert (
1852
- self.unit_system == other.unit_system
1853
- ), "Only ``Variable`` objects with the same unit system can be added."
1856
+ if not isinstance(other, Variable):
1857
+ raise ValueError("You can only add a variable with another variable.")
1858
+ if self.unit_system != other.unit_system:
1859
+ raise ValueError("Only Variable objects with the same unit system can be added.")
1854
1860
  result_value = self.value + other.value
1855
1861
  result_units = SI_UNITS[self.unit_system]
1856
1862
  # If the units of the two operands are different, return SI-Units
@@ -1888,10 +1894,10 @@ class Variable(object):
1888
1894
  >>> assert result_2.unit_system == "Current"
1889
1895
 
1890
1896
  """
1891
- assert isinstance(other, Variable), "You can only subtract a variable from another variable."
1892
- assert (
1893
- self.unit_system == other.unit_system
1894
- ), "Only ``Variable`` objects with the same unit system can be subtracted."
1897
+ if not isinstance(other, Variable):
1898
+ raise ValueError("You can only subtract a variable from another variable.")
1899
+ if self.unit_system != other.unit_system:
1900
+ raise ValueError("Only Variable objects with the same unit system can be subtracted.")
1895
1901
  result_value = self.value - other.value
1896
1902
  result_units = SI_UNITS[self.unit_system]
1897
1903
  # If the units of the two operands are different, return SI-Units
@@ -1933,7 +1939,8 @@ class Variable(object):
1933
1939
  >>> assert result_1.unit_system == "Current"
1934
1940
 
1935
1941
  """
1936
- assert is_number(other) or isinstance(other, Variable), "Divisor must be a scalar quantity or a variable."
1942
+ if not is_number(other) and not isinstance(other, Variable):
1943
+ raise ValueError("Divisor must be a scalar quantity or a variable.")
1937
1944
  if is_number(other):
1938
1945
  result_value = self.numeric_value / other
1939
1946
  result_units = self.units
@@ -1002,12 +1002,6 @@ class Components(object):
1002
1002
  ]
1003
1003
  pin_layers = cmp_pins[0].GetPadstackDef().GetData().GetLayerNames()
1004
1004
  if port_type == SourceType.CoaxPort:
1005
- if not solder_balls_height:
1006
- solder_balls_height = self.instances[component.GetName()].solder_ball_height
1007
- if not solder_balls_size:
1008
- solder_balls_size = self.instances[component.GetName()].solder_ball_diameter[0]
1009
- if not solder_balls_mid_size:
1010
- solder_balls_mid_size = self.instances[component.GetName()].solder_ball_diameter[1]
1011
1005
  if not ref_pins:
1012
1006
  self._logger.error(
1013
1007
  "No reference pins found on component. You might consider"
@@ -1016,40 +1010,51 @@ class Components(object):
1016
1010
  )
1017
1011
  return False
1018
1012
  pad_params = self._padstack.get_pad_parameters(pin=cmp_pins[0], layername=pin_layers[0], pad_type=0)
1019
- if not pad_params[0] == 7:
1020
- if not solder_balls_size: # pragma no cover
1021
- sball_diam = min([self._pedb.edb_value(val).ToDouble() for val in pad_params[1]])
1022
- sball_mid_diam = sball_diam
1013
+
1014
+ # If at least one of the solderball arguments is not None, calculate the rest and set solderballs
1015
+ if not (not solder_balls_height and not solder_balls_size and not solder_balls_mid_size):
1016
+ if not solder_balls_height:
1017
+ solder_balls_height = self.instances[component.GetName()].solder_ball_height
1018
+ if not solder_balls_size:
1019
+ solder_balls_size = self.instances[component.GetName()].solder_ball_diameter[0]
1020
+ if not solder_balls_mid_size:
1021
+ solder_balls_mid_size = self.instances[component.GetName()].solder_ball_diameter[1]
1022
+
1023
+ if not pad_params[0] == 7:
1024
+ if not solder_balls_size: # pragma no cover
1025
+ sball_diam = min([self._pedb.edb_value(val).ToDouble() for val in pad_params[1]])
1026
+ sball_mid_diam = sball_diam
1027
+ else: # pragma no cover
1028
+ sball_diam = solder_balls_size
1029
+ if solder_balls_mid_size:
1030
+ sball_mid_diam = solder_balls_mid_size
1031
+ else:
1032
+ sball_mid_diam = solder_balls_size
1033
+ if not solder_balls_height: # pragma no cover
1034
+ solder_balls_height = 2 * sball_diam / 3
1023
1035
  else: # pragma no cover
1024
- sball_diam = solder_balls_size
1036
+ if not solder_balls_size:
1037
+ bbox = pad_params[1]
1038
+ sball_diam = min([abs(bbox[2] - bbox[0]), abs(bbox[3] - bbox[1])]) * 0.8
1039
+ else:
1040
+ sball_diam = solder_balls_size
1041
+ if not solder_balls_height:
1042
+ solder_balls_height = 2 * sball_diam / 3
1025
1043
  if solder_balls_mid_size:
1026
1044
  sball_mid_diam = solder_balls_mid_size
1027
1045
  else:
1028
- sball_mid_diam = solder_balls_size
1029
- if not solder_balls_height: # pragma no cover
1030
- solder_balls_height = 2 * sball_diam / 3
1031
- else: # pragma no cover
1032
- if not solder_balls_size:
1033
- bbox = pad_params[1]
1034
- sball_diam = min([abs(bbox[2] - bbox[0]), abs(bbox[3] - bbox[1])]) * 0.8
1035
- else:
1036
- sball_diam = solder_balls_size
1037
- if not solder_balls_height:
1038
- solder_balls_height = 2 * sball_diam / 3
1039
- if solder_balls_mid_size:
1040
- sball_mid_diam = solder_balls_mid_size
1041
- else:
1042
- sball_mid_diam = sball_diam
1043
- sball_shape = "Cylinder"
1044
- if not sball_diam == sball_mid_diam:
1045
- sball_shape = "Spheroid"
1046
- self.set_solder_ball(
1047
- component=component,
1048
- sball_height=solder_balls_height,
1049
- sball_diam=sball_diam,
1050
- sball_mid_diam=sball_mid_diam,
1051
- shape=sball_shape,
1052
- )
1046
+ sball_mid_diam = sball_diam
1047
+ sball_shape = "Cylinder"
1048
+ if not sball_diam == sball_mid_diam:
1049
+ sball_shape = "Spheroid"
1050
+ self.set_solder_ball(
1051
+ component=component,
1052
+ sball_height=solder_balls_height,
1053
+ sball_diam=sball_diam,
1054
+ sball_mid_diam=sball_mid_diam,
1055
+ shape=sball_shape,
1056
+ )
1057
+
1053
1058
  for pin in cmp_pins:
1054
1059
  self._padstack.create_coax_port(padstackinstance=pin, name=port_name)
1055
1060
 
@@ -1943,3 +1943,90 @@ class EdbPadstacks(object):
1943
1943
  clusters[int(label)].append(padstack_ids[i])
1944
1944
 
1945
1945
  return dict(clusters)
1946
+
1947
+ def reduce_via_by_density(
1948
+ self, padstacks: List[int], cell_size_x: float = 1e-3, cell_size_y: float = 1e-3, delete: bool = False
1949
+ ) -> tuple[List[int], List[List[List[float]]]]:
1950
+ """
1951
+ Reduce the number of vias by density. Keep only one via which is closest to the center of the cell. The cells
1952
+ are automatically populated based on the input vias.
1953
+
1954
+ Parameters
1955
+ ----------
1956
+ padstacks: List[int]
1957
+ List of padstack ids to be reduced.
1958
+
1959
+ cell_size_x : float
1960
+ Width of each grid cell (default is 1e-3).
1961
+
1962
+ cell_size_y : float
1963
+ Height of each grid cell (default is 1e-3).
1964
+
1965
+ delete: bool
1966
+ If True, delete vias that are not kept (default is False).
1967
+
1968
+ Returns
1969
+ -------
1970
+ List[int]
1971
+ IDs of vias kept after reduction.
1972
+
1973
+ List[List[float]]
1974
+ coordinates for grid lines (for plotting).
1975
+
1976
+ """
1977
+ to_keep = set()
1978
+
1979
+ all_instances = self.instances
1980
+ positions = np.array([all_instances[_id].position for _id in padstacks])
1981
+
1982
+ x_coords, y_coords = positions[:, 0], positions[:, 1]
1983
+ x_min, x_max = np.min(x_coords), np.max(x_coords)
1984
+ y_min, y_max = np.min(y_coords), np.max(y_coords)
1985
+
1986
+ padstacks_array = np.array(padstacks)
1987
+ cell_map = {} # {(cell_x, cell_y): [(id1, [x1, y1]), (id2, [x2, y2), ...]}
1988
+ grid = []
1989
+
1990
+ for idx, pos in enumerate(positions):
1991
+ i = int((pos[0] - x_min) // cell_size_x)
1992
+ j = int((pos[1] - y_min) // cell_size_y)
1993
+ cell_key = (i, j)
1994
+ cell_map.setdefault(cell_key, []).append((padstacks_array[idx], pos))
1995
+
1996
+ for (i, j), items in cell_map.items():
1997
+ # cell center
1998
+ cell_x_min = x_min + i * cell_size_x
1999
+ cell_y_min = y_min + j * cell_size_y
2000
+ cell_x_mid = cell_x_min + 0.5 * cell_size_x
2001
+ cell_y_mid = cell_y_min + 0.5 * cell_size_y
2002
+
2003
+ grid.append(
2004
+ [
2005
+ [
2006
+ cell_x_min,
2007
+ cell_x_min + cell_size_x,
2008
+ cell_x_min + cell_size_x,
2009
+ cell_x_min,
2010
+ cell_x_min,
2011
+ ],
2012
+ [
2013
+ cell_y_min,
2014
+ cell_y_min,
2015
+ cell_y_min + cell_size_y,
2016
+ cell_y_min + cell_size_y,
2017
+ cell_y_min,
2018
+ ],
2019
+ ]
2020
+ )
2021
+
2022
+ # Find closest via to cell center
2023
+ distances = [np.linalg.norm(pos - [cell_x_mid, cell_y_mid]) for _, pos in items]
2024
+ closest_idx = np.argmin(distances)
2025
+ to_keep.add(items[closest_idx][0])
2026
+
2027
+ if delete:
2028
+ to_delete = set(padstacks) - to_keep
2029
+ for _id in to_delete:
2030
+ all_instances[_id].delete()
2031
+
2032
+ return list(to_keep), grid
@@ -4033,7 +4033,7 @@ class Edb:
4033
4033
  edb_zones = {}
4034
4034
  if not self.setups:
4035
4035
  self.siwave.add_siwave_syz_analysis()
4036
- self.save_edb()
4036
+ self.save()
4037
4037
  for zone_primitive in zone_primitives:
4038
4038
  edb_zone_path = os.path.join(
4039
4039
  working_directory,
@@ -4041,7 +4041,7 @@ class Edb:
4041
4041
  )
4042
4042
  shutil.copytree(self.edbpath, edb_zone_path)
4043
4043
  poly_data = zone_primitive.GetPolygonData()
4044
- if self.version[0] >= 10:
4044
+ if self._db.GetVersion()[0] >= 10:
4045
4045
  edb_zones[edb_zone_path] = (zone_primitive.GetZoneId(), poly_data)
4046
4046
  elif len(zone_primitives) == len(zone_ids):
4047
4047
  edb_zones[edb_zone_path] = (zone_ids[0], poly_data)