pyedb 0.16.0__tar.gz → 0.18.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 (188) hide show
  1. {pyedb-0.16.0 → pyedb-0.18.0}/PKG-INFO +1 -1
  2. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/__init__.py +1 -1
  3. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_components.py +47 -1
  4. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/configuration.py +2 -0
  5. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb.py +133 -64
  6. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/component.py +12 -17
  7. pyedb-0.18.0/src/pyedb/dotnet/edb_core/cell/hierarchy/hierarchy_obj.py +50 -0
  8. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/layout.py +0 -6
  9. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/voltage_regulator.py +0 -5
  10. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/components.py +2 -2
  11. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +129 -3
  12. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +38 -38
  13. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +1 -1
  14. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/layout.py +21 -0
  15. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/layout_validation.py +26 -0
  16. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/nets.py +1 -1
  17. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sim_setup_info.py +1 -1
  18. pyedb-0.16.0/src/pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py → pyedb-0.18.0/src/pyedb/dotnet/edb_core/sim_setup_data/data/simulation_settings.py +36 -72
  19. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/siwave.py +14 -0
  20. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/utilities/hfss_simulation_setup.py +83 -0
  21. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/utilities/simulation_setup.py +7 -4
  22. pyedb-0.18.0/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  23. pyedb-0.18.0/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +91 -0
  24. pyedb-0.18.0/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +70 -0
  25. pyedb-0.18.0/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +69 -0
  26. pyedb-0.18.0/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +60 -0
  27. pyedb-0.18.0/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +88 -0
  28. pyedb-0.18.0/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +104 -0
  29. pyedb-0.18.0/src/pyedb/workflow.py +32 -0
  30. pyedb-0.16.0/src/pyedb/dotnet/edb_core/sim_setup_data/data/simulation_settings.py +0 -67
  31. {pyedb-0.16.0 → pyedb-0.18.0}/LICENSE +0 -0
  32. {pyedb-0.16.0 → pyedb-0.18.0}/README.md +0 -0
  33. {pyedb-0.16.0 → pyedb-0.18.0}/pyproject.toml +0 -0
  34. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/__init__.py +0 -0
  35. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_boundaries.py +0 -0
  36. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_common.py +0 -0
  37. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_data.py +0 -0
  38. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_general.py +0 -0
  39. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_nets.py +0 -0
  40. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_operations.py +0 -0
  41. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_package_definition.py +0 -0
  42. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_padstacks.py +0 -0
  43. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_pin_groups.py +0 -0
  44. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_ports_sources.py +0 -0
  45. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_s_parameter_models.py +0 -0
  46. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_setup.py +0 -0
  47. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
  48. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/configuration/cfg_stackup.py +0 -0
  49. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/__init__.py +0 -0
  50. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/application/Variables.py +0 -0
  51. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/application/__init__.py +0 -0
  52. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/clr_module.py +0 -0
  53. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
  54. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
  55. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
  56. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
  57. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +0 -0
  58. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +0 -0
  59. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +0 -0
  60. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +0 -0
  61. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/layout_obj.py +0 -0
  62. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/primitive.py +0 -0
  63. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/terminal/__init__.py +0 -0
  64. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +0 -0
  65. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +0 -0
  66. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +0 -0
  67. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +0 -0
  68. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +0 -0
  69. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/cell/terminal/terminal.py +0 -0
  70. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
  71. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/definition/component_def.py +0 -0
  72. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -0
  73. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
  74. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
  75. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/definition/package_def.py +0 -0
  76. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
  77. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
  78. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/dotnet/layout.py +0 -0
  79. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
  80. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
  81. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
  82. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
  83. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -0
  84. /pyedb-0.16.0/src/pyedb/dotnet/edb_core/geometry/__init__.py → /pyedb-0.18.0/src/pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +0 -0
  85. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +0 -0
  86. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +0 -0
  87. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +0 -0
  88. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
  89. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
  90. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/sources.py +0 -0
  91. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
  92. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
  93. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/general.py +0 -0
  94. {pyedb-0.16.0/src/pyedb/dotnet/edb_core/sim_setup_data/io → pyedb-0.18.0/src/pyedb/dotnet/edb_core/geometry}/__init__.py +0 -0
  95. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/geometry/point_data.py +0 -0
  96. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -0
  97. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/hfss.py +0 -0
  98. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/materials.py +0 -0
  99. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
  100. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/padstack.py +0 -0
  101. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/sim_setup_data/__init__.py +0 -0
  102. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/__init__.py +0 -0
  103. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +0 -0
  104. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +0 -0
  105. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/settings.py +0 -0
  106. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
  107. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +0 -0
  108. {pyedb-0.16.0/src/pyedb/generic → pyedb-0.18.0/src/pyedb/dotnet/edb_core/sim_setup_data/io}/__init__.py +0 -0
  109. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/siwave.py +0 -0
  110. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/stackup.py +0 -0
  111. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/utilities/__init__.py +0 -0
  112. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/utilities/heatsink.py +0 -0
  113. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/utilities/obj_base.py +0 -0
  114. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/dotnet/edb_core/utilities/siwave_simulation_setup.py +0 -0
  115. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/edb_logger.py +0 -0
  116. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/exceptions.py +0 -0
  117. {pyedb-0.16.0/src/pyedb/ipc2581 → pyedb-0.18.0/src/pyedb/generic}/__init__.py +0 -0
  118. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/generic/constants.py +0 -0
  119. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/generic/data_handlers.py +0 -0
  120. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/generic/design_types.py +0 -0
  121. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/generic/filesystem.py +0 -0
  122. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/generic/general_methods.py +0 -0
  123. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/generic/plot.py +0 -0
  124. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/generic/process.py +0 -0
  125. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/generic/settings.py +0 -0
  126. {pyedb-0.16.0/src/pyedb/ipc2581/bom → pyedb-0.18.0/src/pyedb/ipc2581}/__init__.py +0 -0
  127. {pyedb-0.16.0/src/pyedb/ipc2581/content → pyedb-0.18.0/src/pyedb/ipc2581/bom}/__init__.py +0 -0
  128. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
  129. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
  130. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
  131. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
  132. {pyedb-0.16.0/src/pyedb/ipc2581/ecad → pyedb-0.18.0/src/pyedb/ipc2581/content}/__init__.py +0 -0
  133. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/content/color.py +0 -0
  134. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/content/content.py +0 -0
  135. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
  136. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
  137. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
  138. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
  139. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
  140. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/content/fill.py +0 -0
  141. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
  142. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
  143. {pyedb-0.16.0/src/pyedb/ipc2581/ecad/cad_data → pyedb-0.18.0/src/pyedb/ipc2581/ecad}/__init__.py +0 -0
  144. {pyedb-0.16.0/src/pyedb/misc → pyedb-0.18.0/src/pyedb/ipc2581/ecad/cad_data}/__init__.py +0 -0
  145. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
  146. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
  147. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
  148. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
  149. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
  150. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
  151. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
  152. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
  153. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
  154. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
  155. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
  156. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
  157. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
  158. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
  159. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
  160. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
  161. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
  162. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
  163. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
  164. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
  165. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
  166. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
  167. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
  168. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
  169. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
  170. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
  171. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/history_record.py +0 -0
  172. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
  173. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
  174. {pyedb-0.16.0/src/pyedb/misc/siw_feature_config → pyedb-0.18.0/src/pyedb/misc}/__init__.py +0 -0
  175. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
  176. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/misc/downloads.py +0 -0
  177. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/misc/misc.py +0 -0
  178. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
  179. {pyedb-0.16.0/src/pyedb/misc/siw_feature_config/emc → pyedb-0.18.0/src/pyedb/misc/siw_feature_config}/__init__.py +0 -0
  180. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
  181. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
  182. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
  183. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
  184. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
  185. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/misc/utilities.py +0 -0
  186. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/modeler/geometry_operators.py +0 -0
  187. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/siwave.py +0 -0
  188. {pyedb-0.16.0 → pyedb-0.18.0}/src/pyedb/siwave_core/icepak.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyedb
3
- Version: 0.16.0
3
+ Version: 0.18.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>
@@ -44,7 +44,7 @@ deprecation_warning()
44
44
  #
45
45
 
46
46
  pyedb_path = os.path.dirname(__file__)
47
- __version__ = "0.16.0"
47
+ __version__ = "0.18.0"
48
48
  version = __version__
49
49
 
50
50
  #
@@ -51,12 +51,13 @@ class CfgRlcModel(CfgBase):
51
51
 
52
52
 
53
53
  class CfgComponent(CfgBase):
54
- protected_attributes = ["reference_designator"]
54
+ protected_attributes = ["reference_designator", "definition", "location", "angle", "placement_layer"]
55
55
 
56
56
  def __init__(self, **kwargs):
57
57
  self.enabled = kwargs.get("enabled", None)
58
58
 
59
59
  self.reference_designator = kwargs.get("reference_designator", None)
60
+ self.definition = kwargs.get("definition", None)
60
61
  self.type = kwargs.get("part_type", None)
61
62
  self.value = kwargs.get("value", None)
62
63
  self.port_properties = CfgPortProperties(**kwargs["port_properties"]) if "port_properties" in kwargs else None
@@ -67,6 +68,29 @@ class CfgComponent(CfgBase):
67
68
 
68
69
  self.rlc_model = [CfgRlcModel(**rlc_m) for rlc_m in rlc_models]
69
70
 
71
+ self.x_location, self.y_location = kwargs.get("location", [None, None])
72
+ self.angle = kwargs.get("angle", None)
73
+ self.placement_layer = kwargs.get("placement_layer", None)
74
+
75
+ def export_properties(self):
76
+ """Export component properties.
77
+
78
+ Returns
79
+ -------
80
+ Dict
81
+ """
82
+ data_comp = {}
83
+ data_comp["enabled"] = self.enabled
84
+ data_comp["reference_designator"] = self.reference_designator
85
+ data_comp["definition"] = self.definition
86
+ data_comp["type"] = self.type
87
+ data_comp["value"] = self.value
88
+ data_comp["x_location"] = self.x_location
89
+ data_comp["y_location"] = self.y_location
90
+ # data_comp["angle"] = self.angle
91
+ data_comp["placement_layer"] = self.placement_layer
92
+ return data_comp
93
+
70
94
 
71
95
  class CfgComponents:
72
96
  def __init__(self, pedb, components_data):
@@ -127,3 +151,25 @@ class CfgComponents:
127
151
  setattr(c_db, attr, value)
128
152
  else:
129
153
  raise AttributeError(f"'{attr}' is not valid component attribute.")
154
+
155
+ def _load_data_from_db(self):
156
+ self.components = []
157
+ comps_in_db = self._pedb.components
158
+ for _, comp in comps_in_db.components.items():
159
+ cfg_comp = CfgComponent(
160
+ enabled=comp.enabled,
161
+ reference_designator=comp.name,
162
+ part_type=comp.type,
163
+ value=comp.value,
164
+ definition=comp.component_def,
165
+ location=comp.location,
166
+ placement_layer=comp.placement_layer,
167
+ )
168
+ self.components.append(cfg_comp)
169
+
170
+ def get_data_from_db(self):
171
+ self._load_data_from_db()
172
+ data = []
173
+ for comp in self.components:
174
+ data.append(comp.export_properties())
175
+ return data
@@ -271,6 +271,8 @@ class Configuration:
271
271
  data["package_definitions"] = self.cfg_data.package_definitions.get_data_from_db()
272
272
  if kwargs.get("setups", False):
273
273
  data["setups"] = self.cfg_data.setups.get_data_from_db()
274
+ if kwargs.get("components", False):
275
+ data["components"] = self.cfg_data.components.get_data_from_db()
274
276
 
275
277
  return data
276
278
 
@@ -58,9 +58,6 @@ from pyedb.dotnet.edb_core.edb_data.control_file import (
58
58
  )
59
59
  from pyedb.dotnet.edb_core.edb_data.design_options import EdbDesignOptions
60
60
  from pyedb.dotnet.edb_core.edb_data.edbvalue import EdbValue
61
- from pyedb.dotnet.edb_core.edb_data.hfss_pi_simulation_setup_data import (
62
- HFSSPISimulationSetup,
63
- )
64
61
  from pyedb.dotnet.edb_core.edb_data.ports import (
65
62
  BundleWavePort,
66
63
  CircuitPort,
@@ -94,7 +91,10 @@ from pyedb.dotnet.edb_core.nets import EdbNets
94
91
  from pyedb.dotnet.edb_core.padstack import EdbPadstacks
95
92
  from pyedb.dotnet.edb_core.siwave import EdbSiwave
96
93
  from pyedb.dotnet.edb_core.stackup import Stackup
97
- from pyedb.dotnet.edb_core.utilities.hfss_simulation_setup import HfssSimulationSetup
94
+ from pyedb.dotnet.edb_core.utilities.hfss_simulation_setup import (
95
+ HFSSPISimulationSetup,
96
+ HfssSimulationSetup,
97
+ )
98
98
  from pyedb.dotnet.edb_core.utilities.siwave_simulation_setup import (
99
99
  SiwaveDCSimulationSetup,
100
100
  SiwaveSimulationSetup,
@@ -112,6 +112,7 @@ from pyedb.generic.process import SiwaveSolve
112
112
  from pyedb.generic.settings import settings
113
113
  from pyedb.ipc2581.ipc2581 import Ipc2581
114
114
  from pyedb.modeler.geometry_operators import GeometryOperators
115
+ from pyedb.workflow import Workflow
115
116
 
116
117
  if is_linux and is_ironpython:
117
118
  import subprocessdotnet as subprocess
@@ -157,7 +158,7 @@ class Edb(Database):
157
158
  --------
158
159
  Create an ``Edb`` object and a new EDB cell.
159
160
 
160
- >>> from pyedb.dotnet.edb import Edb
161
+ >>> from pyedb import Edb
161
162
  >>> app = Edb()
162
163
 
163
164
  Add a new variable named "s1" to the ``Edb`` instance.
@@ -517,7 +518,7 @@ class Edb(Database):
517
518
  vrms = [VoltageRegulator(self, edb_object) for edb_object in list(self.active_layout.VoltageRegulators)]
518
519
  _vrms = {}
519
520
  for vrm in vrms:
520
- _vrms[vrm.GetName()] = vrm
521
+ _vrms[vrm.name] = vrm
521
522
  return _vrms
522
523
 
523
524
  @property
@@ -801,7 +802,7 @@ class Edb(Database):
801
802
 
802
803
  Examples
803
804
  --------
804
- >>> from pyedb.dotnet.edb import Edb
805
+ >>> from pyedb import Edb
805
806
  >>> edbapp = Edb("myproject.aedb")
806
807
  >>> comp = edbapp.components.get_component_by_name("J1")
807
808
  """
@@ -818,7 +819,7 @@ class Edb(Database):
818
819
 
819
820
  Examples
820
821
  --------
821
- >>> from pyedb.dotnet.edb import Edb
822
+ >>> from pyedb import Edb
822
823
  >>> edbapp = Edb("myproject.aedb")
823
824
  >>> comp = edbapp.components.get_component_by_name("J1")
824
825
  """
@@ -861,7 +862,7 @@ class Edb(Database):
861
862
 
862
863
  Examples
863
864
  --------
864
- >>> from pyedb.dotnet.edb import Edb
865
+ >>> from pyedb import Edb
865
866
  >>> edbapp = Edb("myproject.aedb")
866
867
  >>> edbapp.stackup.layers["TOP"].thickness = 4e-5
867
868
  >>> edbapp.stackup.layers["TOP"].thickness == 4e-05
@@ -879,7 +880,7 @@ class Edb(Database):
879
880
 
880
881
  Examples
881
882
  --------
882
- >>> from pyedb.dotnet.edb import Edb
883
+ >>> from pyedb import Edb
883
884
  >>> edbapp = Edb()
884
885
  >>> edbapp.materials.add_material("air", permittivity=1.0)
885
886
  >>> edbapp.materials.add_debye_material("debye_mat", 5, 3, 0.02, 0.05, 1e5, 1e9)
@@ -903,7 +904,7 @@ class Edb(Database):
903
904
 
904
905
  Examples
905
906
  --------
906
- >>> from pyedb.dotnet.edb import Edb
907
+ >>> from pyedb import Edb
907
908
  >>> edbapp = Edb("myproject.aedb")
908
909
  >>> p = edbapp.padstacks.create(padstackname="myVia_bullet", antipad_shape="Bullet")
909
910
  >>> edbapp.padstacks.get_pad_parameters(
@@ -925,7 +926,7 @@ class Edb(Database):
925
926
 
926
927
  Examples
927
928
  --------
928
- >>> from pyedb.dotnet.edb import Edb
929
+ >>> from pyedb import Edb
929
930
  >>> edbapp = Edb("myproject.aedb")
930
931
  >>> p = edbapp.padstacks.create(padstackname="myVia_bullet", antipad_shape="Bullet")
931
932
  >>> edbapp.padstacks.get_pad_parameters(
@@ -950,7 +951,7 @@ class Edb(Database):
950
951
 
951
952
  Examples
952
953
  --------
953
- >>> from pyedb.dotnet.edb import Edb
954
+ >>> from pyedb import Edb
954
955
  >>> edbapp = Edb("myproject.aedb")
955
956
  >>> p2 = edbapp.siwave.create_circuit_port_on_net("U2A5", "V3P3_S0", "U2A5", "GND", 50, "test")
956
957
  """
@@ -967,7 +968,7 @@ class Edb(Database):
967
968
 
968
969
  Examples
969
970
  --------
970
- >>> from pyedb.dotnet.edb import Edb
971
+ >>> from pyedb import Edb
971
972
  >>> edbapp = Edb("myproject.aedb")
972
973
  >>> p2 = edbapp.siwave.create_circuit_port_on_net("U2A5", "V3P3_S0", "U2A5", "GND", 50, "test")
973
974
  """
@@ -988,7 +989,7 @@ class Edb(Database):
988
989
 
989
990
  Examples
990
991
  --------
991
- >>> from pyedb.dotnet.edb import Edb
992
+ >>> from pyedb import Edb
992
993
  >>> edbapp = Edb("myproject.aedb")
993
994
  >>> edbapp.hfss.configure_hfss_analysis_setup(sim_config)
994
995
  """
@@ -1009,7 +1010,7 @@ class Edb(Database):
1009
1010
 
1010
1011
  Examples
1011
1012
  --------
1012
- >>> from pyedb.dotnet.edb import Edb
1013
+ >>> from pyedb import Edb
1013
1014
  >>> edbapp = Edb("myproject.aedb")
1014
1015
  >>> sim_config = edbapp.new_simulation_configuration()
1015
1016
  >>> sim_config.mesh_freq = "10Ghz"
@@ -1032,7 +1033,7 @@ class Edb(Database):
1032
1033
 
1033
1034
  Examples
1034
1035
  --------
1035
- >>> from pyedb.dotnet.edb import Edb
1036
+ >>> from pyedb import Edb
1036
1037
  >>> edbapp = Edb("myproject.aedb")
1037
1038
  >>> edbapp.nets.find_or_create_net("GND")
1038
1039
  >>> edbapp.nets.find_and_fix_disjoint_nets("GND", keep_only_main_net=True)
@@ -1050,7 +1051,7 @@ class Edb(Database):
1050
1051
 
1051
1052
  Examples
1052
1053
  --------
1053
- >>> from pyedb.dotnet.edb import Edb
1054
+ >>> from pyedb import Edb
1054
1055
  >>> edbapp = Edb"myproject.aedb")
1055
1056
  >>> edbapp.nets.find_or_create_net("GND")
1056
1057
  >>> edbapp.nets.find_and_fix_disjoint_nets("GND", keep_only_main_net=True)
@@ -1071,7 +1072,7 @@ class Edb(Database):
1071
1072
 
1072
1073
  Examples
1073
1074
  --------
1074
- >>> from pyedb.dotnet.edb import Edb
1075
+ >>> from pyedb import Edb
1075
1076
  >>> edbapp = Edb("myproject.aedb")
1076
1077
  >>> edbapp.net_classes
1077
1078
  """
@@ -1089,7 +1090,7 @@ class Edb(Database):
1089
1090
 
1090
1091
  Examples
1091
1092
  --------
1092
- >>> from pyedb.dotnet.edb import Edb
1093
+ >>> from pyedb import Edb
1093
1094
  >>> edbapp = Edb("myproject.aedb")
1094
1095
  >>> edbapp.extended_nets
1095
1096
  """
@@ -1107,7 +1108,7 @@ class Edb(Database):
1107
1108
 
1108
1109
  Examples
1109
1110
  --------
1110
- >>> from pyedb.dotnet.edb import Edb
1111
+ >>> from pyedb import Edb
1111
1112
  >>> edbapp = Edb("myproject.aedb")
1112
1113
  >>> edbapp.differential_pairs
1113
1114
  """
@@ -1129,7 +1130,7 @@ class Edb(Database):
1129
1130
 
1130
1131
  Examples
1131
1132
  --------
1132
- >>> from pyedb.dotnet.edb import Edb
1133
+ >>> from pyedb import Edb
1133
1134
  >>> edbapp = Edb("myproject.aedb")
1134
1135
  >>> top_prims = edbapp.modeler.primitives_by_layer["TOP"]
1135
1136
  """
@@ -1146,7 +1147,7 @@ class Edb(Database):
1146
1147
 
1147
1148
  Examples
1148
1149
  --------
1149
- >>> from pyedb.dotnet.edb import Edb
1150
+ >>> from pyedb import Edb
1150
1151
  >>> edbapp = Edb("myproject.aedb")
1151
1152
  >>> top_prims = edbapp.modeler.primitives_by_layer["TOP"]
1152
1153
  """
@@ -1243,7 +1244,7 @@ class Edb(Database):
1243
1244
 
1244
1245
  Examples
1245
1246
  --------
1246
- >>> from pyedb.dotnet.edb import Edb
1247
+ >>> from pyedb import Edb
1247
1248
  >>> edbapp = Edb("myproject.aedb")
1248
1249
  >>> pin_net_name = edbapp.pins[424968329].netname
1249
1250
  """
@@ -1557,6 +1558,7 @@ class Edb(Database):
1557
1558
  reference_list=[],
1558
1559
  include_pingroups=True,
1559
1560
  pins_to_preserve=None,
1561
+ inlcude_voids_in_extents=False,
1560
1562
  ):
1561
1563
  if extent_type in [
1562
1564
  "Conforming",
@@ -1573,6 +1575,7 @@ class Edb(Database):
1573
1575
  smart_cut,
1574
1576
  reference_list,
1575
1577
  pins_to_preserve,
1578
+ inlcude_voids_in_extents=inlcude_voids_in_extents,
1576
1579
  )
1577
1580
  else:
1578
1581
  _poly = self.layout.expanded_extent(
@@ -1631,6 +1634,7 @@ class Edb(Database):
1631
1634
  smart_cutout=False,
1632
1635
  reference_list=[],
1633
1636
  pins_to_preserve=None,
1637
+ inlcude_voids_in_extents=False,
1634
1638
  ):
1635
1639
  names = []
1636
1640
  _polys = []
@@ -1648,7 +1652,7 @@ class Edb(Database):
1648
1652
 
1649
1653
  for prim in self.modeler.primitives:
1650
1654
  if prim is not None and prim.net_name in names:
1651
- _polys.append(prim.primitive_object.GetPolygonData())
1655
+ _polys.append(prim)
1652
1656
  if smart_cutout:
1653
1657
  objs_data = self._smart_cut(reference_list, expansion_size)
1654
1658
  _polys.extend(objs_data)
@@ -1657,9 +1661,33 @@ class Edb(Database):
1657
1661
  while k < 10:
1658
1662
  unite_polys = []
1659
1663
  for i in _polys:
1660
- obj_data = i.Expand(expansion_size, tolerance, round_corner, round_extension)
1664
+ if "PolygonData" not in str(i):
1665
+ obj_data = i.primitive_object.GetPolygonData().Expand(
1666
+ expansion_size, tolerance, round_corner, round_extension
1667
+ )
1668
+ else:
1669
+ obj_data = i.Expand(expansion_size, tolerance, round_corner, round_extension)
1661
1670
  if obj_data:
1662
- unite_polys.extend(list(obj_data))
1671
+ if not inlcude_voids_in_extents:
1672
+ unite_polys.extend(list(obj_data))
1673
+ else:
1674
+ voids_poly = []
1675
+ try:
1676
+ if i.HasVoids():
1677
+ area = i.area()
1678
+ for void in i.Voids:
1679
+ void_polydata = void.GetPolygonData()
1680
+ if void_polydata.Area() >= 0.05 * area:
1681
+ voids_poly.append(void_polydata)
1682
+ if voids_poly:
1683
+ obj_data = obj_data[0].Subtract(
1684
+ convert_py_list_to_net_list(list(obj_data)),
1685
+ convert_py_list_to_net_list(voids_poly),
1686
+ )
1687
+ except:
1688
+ pass
1689
+ finally:
1690
+ unite_polys.extend(list(obj_data))
1663
1691
  _poly_unite = self.edb_api.geometry.polygon_data.unite(unite_polys)
1664
1692
  if len(_poly_unite) == 1:
1665
1693
  self.logger.info("Correctly computed Extension at first iteration.")
@@ -1760,6 +1788,7 @@ class Edb(Database):
1760
1788
  preserve_components_with_model=False,
1761
1789
  simple_pad_check=True,
1762
1790
  keep_lines_as_path=False,
1791
+ include_voids_in_extents=False,
1763
1792
  ):
1764
1793
  """Create a cutout using an approach entirely based on PyAEDT.
1765
1794
  This method replaces all legacy cutout methods in PyAEDT.
@@ -1836,6 +1865,11 @@ class Edb(Database):
1836
1865
  This feature works only in Electronics Desktop (3D Layout).
1837
1866
  If the flag is set to ``True`` it can cause issues in SiWave once the Edb is imported.
1838
1867
  Default is ``False`` to generate PolygonData of cut lines.
1868
+ include_voids_in_extents : bool, optional
1869
+ Whether to compute and include voids in pyaedt extent before the cutout. Cutout time can be affected.
1870
+ It works only with Conforming cutout.
1871
+ Default is ``False`` to generate extent without voids.
1872
+
1839
1873
 
1840
1874
  Returns
1841
1875
  -------
@@ -1845,7 +1879,7 @@ class Edb(Database):
1845
1879
 
1846
1880
  Examples
1847
1881
  --------
1848
- >>> from pyedb.dotnet.edb import Edb
1882
+ >>> from pyedb import Edb
1849
1883
  >>> edb = Edb(r'C:\\test.aedb', edbversion="2022.2")
1850
1884
  >>> edb.logger.info_timer("Edb Opening")
1851
1885
  >>> edb.logger.reset_timer()
@@ -1895,6 +1929,7 @@ class Edb(Database):
1895
1929
  use_pyaedt_extent_computing=use_pyaedt_extent_computing,
1896
1930
  check_terminals=check_terminals,
1897
1931
  include_pingroups=include_pingroups,
1932
+ inlcude_voids_in_extents=include_voids_in_extents,
1898
1933
  )
1899
1934
  else:
1900
1935
  legacy_path = self.edbpath
@@ -1928,6 +1963,7 @@ class Edb(Database):
1928
1963
  include_partial=include_partial_instances,
1929
1964
  simple_pad_check=simple_pad_check,
1930
1965
  keep_lines_as_path=keep_lines_as_path,
1966
+ inlcude_voids_in_extents=include_voids_in_extents,
1931
1967
  )
1932
1968
  if self.are_port_reference_terminals_connected():
1933
1969
  if output_aedb_path:
@@ -1968,6 +2004,7 @@ class Edb(Database):
1968
2004
  include_partial=include_partial_instances,
1969
2005
  simple_pad_check=simple_pad_check,
1970
2006
  keep_lines_as_path=keep_lines_as_path,
2007
+ inlcude_voids_in_extents=include_voids_in_extents,
1971
2008
  )
1972
2009
  if result and not open_cutout_at_end and self.edbpath != legacy_path:
1973
2010
  self.save_edb()
@@ -1989,6 +2026,7 @@ class Edb(Database):
1989
2026
  remove_single_pin_components=False,
1990
2027
  check_terminals=False,
1991
2028
  include_pingroups=True,
2029
+ inlcude_voids_in_extents=False,
1992
2030
  ):
1993
2031
  expansion_size = self.edb_value(expansion_size).ToDouble()
1994
2032
 
@@ -2009,8 +2047,14 @@ class Edb(Database):
2009
2047
  smart_cut=check_terminals,
2010
2048
  reference_list=reference_list,
2011
2049
  include_pingroups=include_pingroups,
2050
+ inlcude_voids_in_extents=inlcude_voids_in_extents,
2012
2051
  )
2013
-
2052
+ _poly1 = _poly.CreateFromArcs(_poly.GetArcData(), True)
2053
+ if inlcude_voids_in_extents:
2054
+ for hole in list(_poly.Holes):
2055
+ if hole.Area() >= 0.05 * _poly1.Area():
2056
+ _poly1.AddHole(hole)
2057
+ _poly = _poly1
2014
2058
  # Create new cutout cell/design
2015
2059
  included_nets_list = signal_list + reference_list
2016
2060
  included_nets = convert_py_list_to_net_list(
@@ -2171,6 +2215,7 @@ class Edb(Database):
2171
2215
  include_partial=False,
2172
2216
  simple_pad_check=True,
2173
2217
  keep_lines_as_path=False,
2218
+ inlcude_voids_in_extents=False,
2174
2219
  ):
2175
2220
  if is_ironpython: # pragma: no cover
2176
2221
  self.logger.error("Method working only in Cpython")
@@ -2268,11 +2313,18 @@ class Edb(Database):
2268
2313
  reference_list=reference_list,
2269
2314
  include_pingroups=include_pingroups,
2270
2315
  pins_to_preserve=pins_to_preserve,
2316
+ inlcude_voids_in_extents=inlcude_voids_in_extents,
2271
2317
  )
2272
2318
  if extent_type in ["Conforming", self.edb_api.geometry.extent_type.Conforming, 1]:
2273
2319
  if extent_defeature > 0:
2274
2320
  _poly = _poly.Defeature(extent_defeature)
2275
- _poly = _poly.CreateFromArcs(_poly.GetArcData(), True)
2321
+
2322
+ _poly1 = _poly.CreateFromArcs(_poly.GetArcData(), True)
2323
+ if inlcude_voids_in_extents:
2324
+ for hole in list(_poly.Holes):
2325
+ if hole.Area() >= 0.05 * _poly1.Area():
2326
+ _poly1.AddHole(hole)
2327
+ _poly = _poly1
2276
2328
  if not _poly or _poly.IsNull():
2277
2329
  self._logger.error("Failed to create Extent.")
2278
2330
  return []
@@ -2311,29 +2363,39 @@ class Edb(Database):
2311
2363
  pdata = prim_1.polygon_data.edb_api
2312
2364
  int_data = _poly.GetIntersectionType(pdata)
2313
2365
  if int_data == 2:
2314
- return
2366
+ if not inlcude_voids_in_extents:
2367
+ return
2368
+ skip = False
2369
+ for hole in list(_poly.Holes):
2370
+ if hole.GetIntersectionType(pdata) == 0:
2371
+ prims_to_delete.append(prim_1)
2372
+ return
2373
+ elif hole.GetIntersectionType(pdata) == 1:
2374
+ skip = True
2375
+ if skip:
2376
+ return
2315
2377
  elif int_data == 0:
2316
2378
  prims_to_delete.append(prim_1)
2317
- else:
2318
- list_poly = intersect(_poly, pdata)
2319
- if list_poly:
2320
- net = prim_1.net_name
2321
- voids = prim_1.voids
2322
- for p in list_poly:
2323
- if p.IsNull():
2324
- continue
2325
- # points = list(p.Points)
2326
- list_void = []
2327
- if voids:
2328
- voids_data = [void.polygon_data.edb_api for void in voids]
2329
- list_prims = subtract(p, voids_data)
2330
- for prim in list_prims:
2331
- if not prim.IsNull():
2332
- poly_to_create.append([prim, prim_1.layer.name, net, list_void])
2333
- else:
2334
- poly_to_create.append([p, prim_1.layer.name, net, list_void])
2379
+ return
2380
+ list_poly = intersect(_poly, pdata)
2381
+ if list_poly:
2382
+ net = prim_1.net_name
2383
+ voids = prim_1.voids
2384
+ for p in list_poly:
2385
+ if p.IsNull():
2386
+ continue
2387
+ # points = list(p.Points)
2388
+ list_void = []
2389
+ if voids:
2390
+ voids_data = [void.polygon_data.edb_api for void in voids]
2391
+ list_prims = subtract(p, voids_data)
2392
+ for prim in list_prims:
2393
+ if not prim.IsNull():
2394
+ poly_to_create.append([prim, prim_1.layer.name, net, list_void])
2395
+ else:
2396
+ poly_to_create.append([p, prim_1.layer.name, net, list_void])
2335
2397
 
2336
- prims_to_delete.append(prim_1)
2398
+ prims_to_delete.append(prim_1)
2337
2399
 
2338
2400
  def pins_clean(pinst):
2339
2401
  if not pinst.in_polygon(_poly, include_partial=include_partial, simple_check=simple_pad_check):
@@ -2349,7 +2411,9 @@ class Edb(Database):
2349
2411
  for pin in pins_to_delete:
2350
2412
  pin.delete()
2351
2413
 
2352
- self.logger.info_timer("Padstack Instances removal completed")
2414
+ self.logger.info_timer(
2415
+ "Padstack Instances removal completed. {} instances removed.".format(len(pins_to_delete))
2416
+ )
2353
2417
  self.logger.reset_timer()
2354
2418
 
2355
2419
  # with ThreadPoolExecutor(number_of_threads) as pool:
@@ -2368,7 +2432,7 @@ class Edb(Database):
2368
2432
  for prim in prims_to_delete:
2369
2433
  prim.delete()
2370
2434
 
2371
- self.logger.info_timer("Primitives cleanup completed")
2435
+ self.logger.info_timer("Primitives cleanup completed. {} primitives deleted.".format(len(prims_to_delete)))
2372
2436
  self.logger.reset_timer()
2373
2437
 
2374
2438
  i = 0
@@ -2461,7 +2525,7 @@ class Edb(Database):
2461
2525
 
2462
2526
  Examples
2463
2527
  --------
2464
- >>> from pyedb.dotnet.edb import Edb
2528
+ >>> from pyedb import Edb
2465
2529
  >>> edb = Edb(r'C:\\test.aedb', edbversion="2022.2")
2466
2530
  >>> edb.logger.info_timer("Edb Opening")
2467
2531
  >>> edb.logger.reset_timer()
@@ -2894,7 +2958,7 @@ class Edb(Database):
2894
2958
  Examples
2895
2959
  --------
2896
2960
 
2897
- >>> from pyedb.dotnet.edb import Edb
2961
+ >>> from pyedb import Edb
2898
2962
  >>> edb = Edb(edbpath=r"C:\temp\myproject.aedb", edbversion="2023.2")
2899
2963
 
2900
2964
  >>> options_config = {'UNITE_NETS' : 1, 'LAUNCH_Q3D' : 0}
@@ -2937,7 +3001,7 @@ class Edb(Database):
2937
3001
  Examples
2938
3002
  --------
2939
3003
 
2940
- >>> from pyedb.dotnet.edb import Edb
3004
+ >>> from pyedb import Edb
2941
3005
  >>> edb = Edb(edbpath=r"C:\temp\myproject.aedb", edbversion="2021.2")
2942
3006
  >>> options_config = {'UNITE_NETS' : 1, 'LAUNCH_Q3D' : 0}
2943
3007
  >>> edb.write_export3d_option_config_file(r"C:\temp", options_config)
@@ -2987,7 +3051,7 @@ class Edb(Database):
2987
3051
  Examples
2988
3052
  --------
2989
3053
 
2990
- >>> from pyedb.dotnet.edb import Edb
3054
+ >>> from pyedb import Edb
2991
3055
 
2992
3056
  >>> edb = Edb(edbpath=r"C:\temp\myproject.aedb", edbversion="2021.2")
2993
3057
 
@@ -3146,7 +3210,7 @@ class Edb(Database):
3146
3210
  Examples
3147
3211
  --------
3148
3212
 
3149
- >>> from pyedb.dotnet.edb import Edb
3213
+ >>> from pyedb import Edb
3150
3214
  >>> edb_app = Edb()
3151
3215
  >>> boolean_1, ant_length = edb_app.add_project_variable("my_local_variable", "1cm")
3152
3216
  >>> print(edb_app["$my_local_variable"]) #using getitem
@@ -3182,7 +3246,7 @@ class Edb(Database):
3182
3246
  Examples
3183
3247
  --------
3184
3248
 
3185
- >>> from pyedb.dotnet.edb import Edb
3249
+ >>> from pyedb import Edb
3186
3250
  >>> edb_app = Edb()
3187
3251
  >>> boolean_1, ant_length = edb_app.add_design_variable("my_local_variable", "1cm")
3188
3252
  >>> print(edb_app["my_local_variable"]) #using getitem
@@ -3220,7 +3284,7 @@ class Edb(Database):
3220
3284
  Examples
3221
3285
  --------
3222
3286
 
3223
- >>> from pyedb.dotnet.edb import Edb
3287
+ >>> from pyedb import Edb
3224
3288
  >>> edb_app = Edb()
3225
3289
  >>> boolean, ant_length = edb_app.add_design_variable("ant_length", "1cm")
3226
3290
  >>> boolean, ant_length = edb_app.change_design_variable_value("ant_length", "1m")
@@ -3265,7 +3329,7 @@ class Edb(Database):
3265
3329
  Examples
3266
3330
  --------
3267
3331
 
3268
- >>> from pyedb.dotnet.edb import Edb
3332
+ >>> from pyedb import Edb
3269
3333
  >>> from pyedb.dotnet.edb_core.edb_data.simulation_configuration import SimulationConfiguration
3270
3334
  >>> config_file = path_configuration_file
3271
3335
  >>> source_file = path_to_edb_folder
@@ -3465,7 +3529,7 @@ class Edb(Database):
3465
3529
 
3466
3530
  Examples
3467
3531
  --------
3468
- >>> from pyedb.dotnet.edb import Edb
3532
+ >>> from pyedb import Edb
3469
3533
  >>>edb = Edb()
3470
3534
  >>> edb.hfss.create_edge_port_vertical(prim_1_id, ["-66mm", "-4mm"], "port_ver")
3471
3535
  >>> edb.hfss.create_edge_port_horizontal(
@@ -3620,7 +3684,7 @@ class Edb(Database):
3620
3684
 
3621
3685
  Examples
3622
3686
  --------
3623
- >>> from pyedb.dotnet.edb import Edb
3687
+ >>> from pyedb import Edb
3624
3688
  >>> edbapp = Edb()
3625
3689
  >>> setup1 = edbapp.create_hfss_setup("setup1")
3626
3690
  >>> setup1.hfss_port_settings.max_delta_z0 = 0.5
@@ -3695,7 +3759,7 @@ class Edb(Database):
3695
3759
 
3696
3760
  Examples
3697
3761
  --------
3698
- >>> from pyedb.dotnet.edb import Edb
3762
+ >>> from pyedb import Edb
3699
3763
  >>> edbapp = Edb()
3700
3764
  >>> setup1 = edbapp.create_siwave_syz_setup("setup1")
3701
3765
  >>> setup1.add_frequency_sweep(frequency_sweep=[
@@ -3727,7 +3791,7 @@ class Edb(Database):
3727
3791
 
3728
3792
  Examples
3729
3793
  --------
3730
- >>> from pyedb.dotnet.edb import Edb
3794
+ >>> from pyedb import Edb
3731
3795
  >>> edbapp = Edb()
3732
3796
  >>> setup1 = edbapp.create_siwave_dc_setup("setup1")
3733
3797
  >>> setup1.mesh_bondwires = True
@@ -4456,3 +4520,8 @@ class Edb(Database):
4456
4520
  from pyedb.dotnet.edb_core.definition.definitions import Definitions
4457
4521
 
4458
4522
  return Definitions(self)
4523
+
4524
+ @property
4525
+ def workflow(self):
4526
+ """Workflow class."""
4527
+ return Workflow(self)