pyedb 0.29.0__tar.gz → 0.31.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 (191) hide show
  1. {pyedb-0.29.0 → pyedb-0.31.0}/PKG-INFO +5 -5
  2. {pyedb-0.29.0 → pyedb-0.31.0}/pyproject.toml +6 -6
  3. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/__init__.py +29 -3
  4. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_components.py +3 -3
  5. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_data.py +1 -1
  6. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_general.py +19 -8
  7. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_padstacks.py +23 -10
  8. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_setup.py +5 -0
  9. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_stackup.py +2 -6
  10. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/configuration.py +10 -1
  11. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb.py +109 -58
  12. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/component.py +5 -2
  13. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/layout.py +2 -13
  14. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/primitive/primitive.py +8 -2
  15. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/components.py +1 -2
  16. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +95 -1
  17. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +34 -5
  18. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/layout_validation.py +24 -1
  19. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/nets.py +6 -1
  20. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/padstack.py +0 -1
  21. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/siwave.py +5 -1
  22. {pyedb-0.29.0 → pyedb-0.31.0}/LICENSE +0 -0
  23. {pyedb-0.29.0 → pyedb-0.31.0}/README.md +0 -0
  24. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/component_libraries/ansys_components.py +0 -0
  25. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/__init__.py +0 -0
  26. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_boundaries.py +0 -0
  27. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_common.py +0 -0
  28. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_nets.py +0 -0
  29. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_operations.py +0 -0
  30. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_package_definition.py +0 -0
  31. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_pin_groups.py +0 -0
  32. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_ports_sources.py +0 -0
  33. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_s_parameter_models.py +0 -0
  34. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
  35. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/__init__.py +0 -0
  36. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/application/Variables.py +0 -0
  37. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/application/__init__.py +0 -0
  38. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/clr_module.py +0 -0
  39. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
  40. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
  41. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/connectable.py +0 -0
  42. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
  43. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/hierarchy_obj.py +0 -0
  44. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
  45. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +0 -0
  46. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +0 -0
  47. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +0 -0
  48. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +0 -0
  49. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/layout_obj.py +0 -0
  50. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/primitive/__init__.py +0 -0
  51. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/primitive/bondwire.py +0 -0
  52. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/primitive/path.py +0 -0
  53. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/terminal/__init__.py +0 -0
  54. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +0 -0
  55. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +0 -0
  56. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +0 -0
  57. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +0 -0
  58. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +0 -0
  59. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/terminal/terminal.py +0 -0
  60. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/cell/voltage_regulator.py +0 -0
  61. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
  62. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/definition/component_def.py +0 -0
  63. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -0
  64. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
  65. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
  66. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/definition/package_def.py +0 -0
  67. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
  68. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
  69. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
  70. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
  71. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
  72. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
  73. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
  74. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -0
  75. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +0 -0
  76. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
  77. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +0 -0
  78. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +0 -0
  79. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
  80. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/sources.py +0 -0
  81. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
  82. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
  83. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/general.py +0 -0
  84. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/geometry/__init__.py +0 -0
  85. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/geometry/point_data.py +0 -0
  86. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -0
  87. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/hfss.py +0 -0
  88. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/layout_obj_instance.py +0 -0
  89. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/materials.py +0 -0
  90. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/modeler.py +0 -0
  91. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
  92. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/sim_setup_data/__init__.py +0 -0
  93. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/__init__.py +0 -0
  94. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +0 -0
  95. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +0 -0
  96. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/settings.py +0 -0
  97. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sim_setup_info.py +0 -0
  98. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/simulation_settings.py +0 -0
  99. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
  100. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +0 -0
  101. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
  102. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/siwave.py +0 -0
  103. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/siwave.py +0 -0
  104. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/stackup.py +0 -0
  105. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/utilities/__init__.py +0 -0
  106. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/utilities/heatsink.py +0 -0
  107. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/utilities/hfss_simulation_setup.py +0 -0
  108. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/utilities/obj_base.py +0 -0
  109. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/utilities/simulation_setup.py +0 -0
  110. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/dotnet/edb_core/utilities/siwave_simulation_setup.py +0 -0
  111. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/edb_logger.py +0 -0
  112. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/exceptions.py +0 -0
  113. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/generic/__init__.py +0 -0
  114. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/generic/constants.py +0 -0
  115. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/generic/data_handlers.py +0 -0
  116. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/generic/design_types.py +0 -0
  117. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/generic/filesystem.py +0 -0
  118. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/generic/general_methods.py +0 -0
  119. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/generic/plot.py +0 -0
  120. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/generic/process.py +0 -0
  121. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/generic/settings.py +0 -0
  122. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/__init__.py +0 -0
  123. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/bom/__init__.py +0 -0
  124. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
  125. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
  126. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
  127. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
  128. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/content/__init__.py +0 -0
  129. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/content/color.py +0 -0
  130. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/content/content.py +0 -0
  131. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
  132. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
  133. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
  134. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
  135. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
  136. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/content/fill.py +0 -0
  137. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
  138. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
  139. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
  140. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
  141. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
  142. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
  143. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
  144. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
  145. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
  146. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
  147. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
  148. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
  149. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
  150. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
  151. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
  152. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
  153. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
  154. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
  155. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
  156. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
  157. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
  158. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
  159. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
  160. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
  161. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
  162. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
  163. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
  164. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
  165. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
  166. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
  167. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/history_record.py +0 -0
  168. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
  169. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
  170. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/__init__.py +0 -0
  171. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
  172. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/downloads.py +0 -0
  173. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/misc.py +0 -0
  174. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
  175. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
  176. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  177. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
  178. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
  179. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
  180. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
  181. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
  182. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +0 -0
  183. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +0 -0
  184. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +0 -0
  185. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +0 -0
  186. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +0 -0
  187. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +0 -0
  188. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/misc/utilities.py +0 -0
  189. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/modeler/geometry_operators.py +0 -0
  190. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/siwave_core/icepak.py +0 -0
  191. {pyedb-0.29.0 → pyedb-0.31.0}/src/pyedb/workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyedb
3
- Version: 0.29.0
3
+ Version: 0.31.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>
@@ -26,19 +26,19 @@ Requires-Dist: Rtree >= 1.2.0
26
26
  Requires-Dist: toml == 0.10.2
27
27
  Requires-Dist: scikit-rf
28
28
  Requires-Dist: ansys-sphinx-theme>=0.10.0,<1.1 ; extra == "doc"
29
- Requires-Dist: imageio>=2.30.0,<2.36 ; extra == "doc"
30
- Requires-Dist: ipython>=8.13.0,<8.28 ; extra == "doc"
29
+ Requires-Dist: imageio>=2.30.0,<2.37 ; extra == "doc"
30
+ Requires-Dist: ipython>=8.13.0,<8.29 ; extra == "doc"
31
31
  Requires-Dist: jupyterlab>=4.0.0,<4.3 ; extra == "doc"
32
32
  Requires-Dist: jupytext>=1.16.0,<1.17 ; extra == "doc"
33
33
  Requires-Dist: matplotlib>=3.5.0,<3.10 ; extra == "doc"
34
34
  Requires-Dist: nbsphinx>=0.9.0,<0.10 ; extra == "doc"
35
35
  Requires-Dist: nbconvert < 7.17 ; extra == "doc"
36
36
  Requires-Dist: numpydoc>=1.5.0,<1.9 ; extra == "doc"
37
- Requires-Dist: pypandoc>=1.10.0,<1.14 ; extra == "doc"
37
+ Requires-Dist: pypandoc>=1.10.0,<1.15 ; extra == "doc"
38
38
  Requires-Dist: recommonmark ; extra == "doc"
39
39
  Requires-Dist: Sphinx>=7.1.0,<8.1 ; extra == "doc"
40
40
  Requires-Dist: sphinx-autobuild==2021.3.14 ; extra == "doc" and ( python_version == '3.8')
41
- Requires-Dist: sphinx-autobuild==2024.9.19 ; extra == "doc" and ( python_version > '3.8')
41
+ Requires-Dist: sphinx-autobuild==2024.10.3 ; extra == "doc" and ( python_version > '3.8')
42
42
  Requires-Dist: sphinx-copybutton>=0.5.0,<0.6 ; extra == "doc"
43
43
  Requires-Dist: sphinx-gallery>=0.14.0,<0.18 ; extra == "doc"
44
44
  Requires-Dist: sphinx_design>=0.4.0,<0.7 ; extra == "doc"
@@ -48,20 +48,20 @@ tests = [
48
48
  ]
49
49
  doc = [
50
50
  "ansys-sphinx-theme>=0.10.0,<1.1",
51
- "imageio>=2.30.0,<2.36",
52
- "ipython>=8.13.0,<8.28",
51
+ "imageio>=2.30.0,<2.37",
52
+ "ipython>=8.13.0,<8.29",
53
53
  "jupyterlab>=4.0.0,<4.3",
54
54
  "jupytext>=1.16.0,<1.17",
55
55
  "matplotlib>=3.5.0,<3.10",
56
56
  "nbsphinx>=0.9.0,<0.10",
57
57
  "nbconvert < 7.17",
58
58
  "numpydoc>=1.5.0,<1.9",
59
- "pypandoc>=1.10.0,<1.14",
59
+ "pypandoc>=1.10.0,<1.15",
60
60
  # NOTE: Remove recommonmark once examples are reworked.
61
61
  "recommonmark",
62
62
  "Sphinx>=7.1.0,<8.1",
63
63
  "sphinx-autobuild==2021.3.14; python_version == '3.8'",
64
- "sphinx-autobuild==2024.9.19; python_version > '3.8'",
64
+ "sphinx-autobuild==2024.10.3; python_version > '3.8'",
65
65
  "sphinx-copybutton>=0.5.0,<0.6",
66
66
  "sphinx-gallery>=0.14.0,<0.18",
67
67
  "sphinx_design>=0.4.0,<0.7",
@@ -91,8 +91,8 @@ default_section = "THIRDPARTY"
91
91
  src_paths = ["doc", "src", "tests"]
92
92
 
93
93
  [tool.codespell]
94
- skip = '*.pyc,*.txt,*.gif,*.png,*.jpg,*.js,*.html,*.doctree,*.ttf,*.woff,*.woff2,*.eot,*.mp4,*.inv,*.pickle,*.ipynb,*.a3dcomp,flycheck*,./.git/*,./.hypothesis/*,*.yml,./doc/build/*,./doc/images/*,./dist/*,*~,.hypothesis*,./doc/source/examples/*,*cover,*.dat,*.mac,*.cdb,*.CDB,build,./factory/*,PKG-INFO,*.mypy_cache/*,./_unused/*'
95
- ignore-words = "doc/styles/Vocab/ANSYS/accept.txt"
94
+ skip = '*.pyc,*.txt,*.gif,*.png,*.jpg,*.js,*.html,*.doctree,*.ttf,*.woff,*.woff2,*.eot,*.mp4,*.inv,*.pickle,*.ipynb,*.a3dcomp,flycheck*,./.git/*,./.hypothesis/*,*.yml,./doc/build/*,./doc/images/*,./dist/*,*~,.hypothesis*,./doc/source/examples/*,*cover,*.dat,*.mac,*.cdb,*.CDB,build,./factory/*,PKG-INFO,*.mypy_cache/*,./_unused/*,pyproject.toml'
95
+ ignore-words = "doc/styles/config/vocabularies/ANSYS/accept.txt"
96
96
  ignore-words-list = "renabled, sie, mot"
97
97
  enable-colors = true
98
98
 
@@ -3,14 +3,21 @@ import os
3
3
  import sys
4
4
  import warnings
5
5
 
6
- if os.name == "nt":
7
- os.environ["PYTHONMALLOC"] = "malloc"
6
+ # if os.name == "nt":
7
+ # os.environ["PYTHONMALLOC"] = "malloc"
8
8
 
9
9
  # By default we use pyedb legacy implementation
10
10
  if "PYEDB_USE_DOTNET" not in os.environ:
11
11
  os.environ["PYEDB_USE_DOTNET"] = "0"
12
12
 
13
13
  LATEST_DEPRECATED_PYTHON_VERSION = (3, 7)
14
+ LINUX_WARNING = (
15
+ "Due to compatibility issues between .NET Core and libssl on some Linux versions, "
16
+ "for example Ubuntu 22.04, we are going to stop depending on `dotnetcore2`."
17
+ "Instead of using this package which embeds .NET Core 3, users will be required to "
18
+ "install .NET themselves. For more information, see "
19
+ "https://edb.docs.pyansys.com/version/stable/build_breaking_change.html"
20
+ )
14
21
 
15
22
 
16
23
  def deprecation_warning():
@@ -39,12 +46,31 @@ def deprecation_warning():
39
46
  warnings.showwarning = existing_showwarning
40
47
 
41
48
 
49
+ def linux_warning():
50
+ """Warning message informing Linux users a future breaking change is coming."""
51
+ # Store warnings showwarning
52
+ existing_showwarning = warnings.showwarning
53
+
54
+ # Define and use custom showwarning
55
+ def custom_show_warning(message, category, filename, lineno, file=None, line=None):
56
+ """Custom warning used to remove <stdin>:loc: pattern."""
57
+ print("{}: {}".format(category.__name__, message))
58
+
59
+ warnings.showwarning = custom_show_warning
60
+
61
+ if os.name == "posix":
62
+ warnings.warn(LINUX_WARNING, FutureWarning)
63
+
64
+ # Restore warnings showwarning
65
+ warnings.showwarning = existing_showwarning
66
+
67
+
42
68
  deprecation_warning()
43
69
 
44
70
  #
45
71
 
46
72
  pyedb_path = os.path.dirname(__file__)
47
- __version__ = "0.29.0"
73
+ __version__ = "0.31.0"
48
74
  version = __version__
49
75
 
50
76
  #
@@ -53,9 +53,9 @@ class CfgComponents:
53
53
  self.components = [CfgComponent(**comp) for comp in components_data]
54
54
 
55
55
  def apply(self):
56
- comps_in_db = self._pedb.components.components
56
+ comps_in_db = self._pedb.components
57
57
  for comp in self.components:
58
- c_db = comps_in_db[comp.reference_designator]
58
+ c_db = comps_in_db.instances[comp.reference_designator]
59
59
  if comp.definition:
60
60
  c_db.definition = comp.definition
61
61
  if comp.type:
@@ -65,7 +65,7 @@ class CfgComponents:
65
65
  if comp.port_properties:
66
66
  c_db.port_properties = comp.port_properties
67
67
  if comp.ic_die_properties:
68
- c_db.set_ic_die_properties = comp.ic_die_properties
68
+ c_db.ic_die_properties = comp.ic_die_properties
69
69
  if comp.pin_pair_model:
70
70
  c_db.model_properties = {"pin_pair_model": comp.pin_pair_model}
71
71
  if comp.spice_model:
@@ -41,7 +41,7 @@ class CfgData(object):
41
41
 
42
42
  def __init__(self, pedb, **kwargs):
43
43
  self._pedb = pedb
44
- self.general = CfgGeneral(self, kwargs.get("general", None))
44
+ self.general = CfgGeneral(self._pedb, kwargs.get("general", {}))
45
45
 
46
46
  self.boundaries = CfgBoundaries(self._pedb, kwargs.get("boundaries", {}))
47
47
 
@@ -24,11 +24,22 @@
24
24
  class CfgGeneral:
25
25
  """Manage configuration general settings."""
26
26
 
27
- def __init__(self, pdata, general_dict):
28
- self._pedb = pdata._pedb
29
- self.spice_model_library = ""
30
- self.s_parameter_library = ""
31
- if general_dict:
32
- self._general_dict = general_dict
33
- self.spice_model_library = self._general_dict.get("spice_model_library", "")
34
- self.s_parameter_library = self._general_dict.get("s_parameter_library", "")
27
+ def __init__(self, pedb, data):
28
+ self._pedb = pedb
29
+ self.spice_model_library = data.get("spice_model_library", "")
30
+ self.s_parameter_library = data.get("s_parameter_library", "")
31
+ self.anti_pads_always_on = data.get("anti_pads_always_on", False)
32
+ self.suppress_pads = data.get("suppress_pads", True)
33
+
34
+ def apply(self):
35
+ self._pedb.design_options.antipads_always_on = self.anti_pads_always_on
36
+ self._pedb.design_options.suppress_pads = self.suppress_pads
37
+
38
+ def get_data_from_db(self):
39
+ self.anti_pads_always_on = self._pedb.design_options.antipads_always_on
40
+ self.suppress_pads = self._pedb.design_options.suppress_pads
41
+
42
+ data = {}
43
+ data["anti_pads_always_on"] = self.anti_pads_always_on
44
+ data["suppress_pads"] = self.suppress_pads
45
+ return data
@@ -47,12 +47,11 @@ class CfgPadstacks:
47
47
  instances_layout = self._pedb.padstacks.instances_by_name
48
48
  for inst in self.instances:
49
49
  inst_layout = instances_layout[inst.name]
50
- if inst.definition:
51
- # inst_layout.padstack_definition = inst.definition
52
- # Not supported by EDB API
53
- pass
54
- if inst.backdrill_parameters:
55
- inst_layout.backdrill_parameters = inst.backdrill_parameters
50
+ data = dict()
51
+ data["backdrill_parameters"] = inst.backdrill_parameters
52
+ data["hole_override_enabled"] = inst.hole_override_enabled
53
+ data["hole_override_diameter"] = inst.hole_override_diameter
54
+ inst_layout.properties = data
56
55
 
57
56
  def get_data_from_db(self):
58
57
  self.definitions = []
@@ -73,14 +72,23 @@ class CfgPadstacks:
73
72
  definitions.append(i.get_attributes())
74
73
  data["definitions"] = definitions
75
74
 
76
- instances_layout = self._pedb.padstacks.instances_by_name
77
- for name, obj in instances_layout.items():
75
+ for obj in self._pedb.layout.padstack_instances:
76
+ temp = obj.properties
78
77
  self.instances.append(
79
- Instance(name=name, definition=obj.padstack_definition, backdrill_parameters=obj.backdrill_parameters)
78
+ Instance(
79
+ name=temp["name"],
80
+ definition=temp["definition"],
81
+ backdrill_parameters=temp["backdrill_parameters"],
82
+ id=temp["id"],
83
+ position=temp["position"],
84
+ rotation=temp["rotation"],
85
+ hole_override_enabled=temp["hole_override_enabled"],
86
+ hole_override_diameter=temp["hole_override_diameter"],
87
+ )
80
88
  )
81
89
  instances = []
82
90
  for i in self.instances:
83
- instances.append(i.get_attributes())
91
+ instances.append(i.get_attributes("id"))
84
92
  data["instances"] = instances
85
93
  return data
86
94
 
@@ -104,3 +112,8 @@ class Instance(CfgBase):
104
112
  self.name = kwargs["name"]
105
113
  self.definition = kwargs.get("definition", None)
106
114
  self.backdrill_parameters = kwargs.get("backdrill_parameters", None)
115
+ self.id = kwargs.get("id", None)
116
+ self.position = kwargs.get("position", [])
117
+ self.rotation = kwargs.get("rotation", None)
118
+ self.hole_override_enabled = kwargs.get("hole_override_enabled", None)
119
+ self.hole_override_diameter = kwargs.get("hole_override_diameter", None)
@@ -177,6 +177,11 @@ class CfgSetups:
177
177
  def get_data_from_db(self):
178
178
  setups = []
179
179
  for _, s in self._pedb.setups.items():
180
+ if float(self._pedb.edbversion) < 2025.1:
181
+ if not s.type == "hfss":
182
+ self._pedb.logger.warning("Only HFSS setups are exported in 2024 R2 and earlier version.")
183
+ continue
184
+
180
185
  stp = {}
181
186
  if s.type == "hfss":
182
187
  for p_name in CfgHFSSSetup(self._pedb).__dict__:
@@ -44,6 +44,7 @@ class CfgLayer(CfgBase):
44
44
  self.material = kwargs.get("material", None)
45
45
  self.fill_material = kwargs.get("fill_material", None)
46
46
  self.thickness = kwargs.get("thickness", None)
47
+ self.roughness = kwargs.get("roughness", None)
47
48
 
48
49
 
49
50
  class CfgStackup:
@@ -139,12 +140,7 @@ class CfgStackup:
139
140
  def get_layers_from_db(self):
140
141
  layers = []
141
142
  for name, obj in self._pedb.stackup.all_layers.items():
142
- layer = {}
143
- for p_name in CfgLayer().__dict__:
144
- p_value = getattr(obj, p_name, None)
145
- if p_value is not None:
146
- layer[p_name] = getattr(obj, p_name)
147
- layers.append(layer)
143
+ layers.append(obj.properties)
148
144
  return layers
149
145
 
150
146
  def get_data_from_db(self):
@@ -106,6 +106,9 @@ class Configuration:
106
106
  def run(self, **kwargs):
107
107
  """Apply configuration settings to the current design"""
108
108
 
109
+ if self.cfg_data.general:
110
+ self.cfg_data.general.apply()
111
+
109
112
  # Configure boundary settings
110
113
  if self.cfg_data.boundaries:
111
114
  self.cfg_data.boundaries.apply()
@@ -272,6 +275,8 @@ class Configuration:
272
275
  """
273
276
  self._pedb.logger.info("Getting data from layout database.")
274
277
  data = {}
278
+ if kwargs.get("general", False):
279
+ data["general"] = self.cfg_data.general.get_data_from_db()
275
280
  if kwargs.get("stackup", False):
276
281
  data["stackup"] = self.cfg_data.stackup.get_data_from_db()
277
282
  if kwargs.get("package_definitions", False):
@@ -314,6 +319,7 @@ class Configuration:
314
319
  boundaries=True,
315
320
  s_parameters=True,
316
321
  padstacks=True,
322
+ general=True,
317
323
  ):
318
324
  """Export the configuration data from layout to a file.
319
325
 
@@ -345,6 +351,8 @@ class Configuration:
345
351
  Whether to export s_parameters.
346
352
  padstacks : bool
347
353
  Whether to export padstacks.
354
+ general : bool
355
+ Whether to export general information.
348
356
  Returns
349
357
  -------
350
358
  bool
@@ -352,7 +360,7 @@ class Configuration:
352
360
  data = self.get_data_from_db(
353
361
  stackup=stackup,
354
362
  package_definitions=package_definitions,
355
- setups=False,
363
+ setups=setups,
356
364
  sources=sources,
357
365
  ports=ports,
358
366
  nets=nets,
@@ -362,6 +370,7 @@ class Configuration:
362
370
  boundaries=boundaries,
363
371
  s_parameters=s_parameters,
364
372
  padstacks=padstacks,
373
+ general=general,
365
374
  )
366
375
 
367
376
  file_path = file_path if isinstance(file_path, Path) else Path(file_path)
@@ -558,6 +558,10 @@ class Edb(Database):
558
558
  for cell in list(self.top_circuit_cells):
559
559
  if cell.GetName() == self.cellname:
560
560
  self._active_cell = cell
561
+ if self._active_cell is None:
562
+ for cell in list(self.circuit_cells):
563
+ if cell.GetName() == self.cellname:
564
+ self._active_cell = cell
561
565
  # if self._active_cell is still None, set it to default cell
562
566
  if self._active_cell is None:
563
567
  self._active_cell = list(self.top_circuit_cells)[0]
@@ -1455,12 +1459,12 @@ class Edb(Database):
1455
1459
  def import_gds_file(
1456
1460
  self,
1457
1461
  inputGDS,
1458
- WorkDir=None,
1459
1462
  anstranslator_full_path="",
1460
1463
  use_ppe=False,
1461
1464
  control_file=None,
1462
1465
  tech_file=None,
1463
1466
  map_file=None,
1467
+ layer_filter=None,
1464
1468
  ):
1465
1469
  """Import a GDS file and generate an ``edb.def`` file in the working directory.
1466
1470
 
@@ -1471,10 +1475,6 @@ class Edb(Database):
1471
1475
  ----------
1472
1476
  inputGDS : str
1473
1477
  Full path to the GDS file.
1474
- WorkDir : str, optional
1475
- Directory in which to create the ``aedb`` folder. The default value is ``None``,
1476
- in which case the AEDB file is given the same name as the GDS file. Only the extension
1477
- differs.
1478
1478
  anstranslator_full_path : str, optional
1479
1479
  Full path to the Ansys translator.
1480
1480
  use_ppe : bool, optional
@@ -1484,31 +1484,67 @@ class Edb(Database):
1484
1484
  the XML file in the same directory as the GDS file. To succeed, the XML file and GDS file must
1485
1485
  have the same name. Only the extension differs.
1486
1486
  tech_file : str, optional
1487
- Technology file. It uses Helic to convert tech file to xml and then imports the gds. Works on Linux only.
1487
+ Technology file. For versions<2024.1 it uses Helic to convert tech file to xml and then imports
1488
+ the gds. Works on Linux only.
1489
+ For versions>=2024.1 it can directly parse through supported foundry tech files.
1488
1490
  map_file : str, optional
1489
1491
  Layer map file.
1490
-
1491
- Returns
1492
- -------
1493
- bool
1494
- ``True`` when successful, ``False`` when failed.
1492
+ layer_filter:str,optional
1493
+ Layer filter file.
1495
1494
 
1496
1495
  """
1497
- if not is_linux and tech_file:
1498
- self.logger.error("Technology files are supported only in Linux. Use control file instead.")
1499
- return False
1500
1496
  control_file_temp = os.path.join(tempfile.gettempdir(), os.path.split(inputGDS)[-1][:-3] + "xml")
1501
- ControlFile(xml_input=control_file, tecnhology=tech_file, layer_map=map_file).write_xml(control_file_temp)
1502
- if self.import_layout_pcb(
1503
- inputGDS,
1504
- working_dir=WorkDir,
1505
- anstranslator_full_path=anstranslator_full_path,
1506
- use_ppe=use_ppe,
1507
- control_file=control_file_temp,
1508
- ):
1509
- return True
1497
+ if float(self.edbversion) < 2024.1:
1498
+ if not is_linux and tech_file:
1499
+ self.logger.error("Technology files are supported only in Linux. Use control file instead.")
1500
+ return False
1501
+
1502
+ ControlFile(xml_input=control_file, tecnhology=tech_file, layer_map=map_file).write_xml(control_file_temp)
1503
+ if self.import_layout_pcb(
1504
+ inputGDS,
1505
+ anstranslator_full_path=anstranslator_full_path,
1506
+ use_ppe=use_ppe,
1507
+ control_file=control_file_temp,
1508
+ ):
1509
+ return True
1510
+ else:
1511
+ return False
1510
1512
  else:
1511
- return False
1513
+ temp_map_file = os.path.splitext(inputGDS)[0] + ".map"
1514
+ temp_layermap_file = os.path.splitext(inputGDS)[0] + ".layermap"
1515
+
1516
+ if map_file is None:
1517
+ if os.path.isfile(temp_map_file):
1518
+ map_file = temp_map_file
1519
+ elif os.path.isfile(temp_layermap_file):
1520
+ map_file = temp_layermap_file
1521
+ else:
1522
+ self.logger.error("Unable to define map file.")
1523
+
1524
+ if tech_file is None:
1525
+ if control_file is None:
1526
+ temp_control_file = os.path.splitext(inputGDS)[0] + ".xml"
1527
+ if os.path.isfile(temp_control_file):
1528
+ control_file = temp_control_file
1529
+ else:
1530
+ self.logger.error("Unable to define control file.")
1531
+
1532
+ command = [anstranslator_full_path, inputGDS, f'-g="{map_file}"', f'-c="{control_file}"']
1533
+ else:
1534
+ command = [
1535
+ anstranslator_full_path,
1536
+ inputGDS,
1537
+ f'-o="{control_file_temp}"' f'-t="{tech_file}"',
1538
+ f'-g="{map_file}"',
1539
+ f'-f="{layer_filter}"',
1540
+ ]
1541
+
1542
+ result = subprocess.run(command, capture_output=True, text=True, shell=True)
1543
+ print(result.stdout)
1544
+ print(command)
1545
+ temp_inputGDS = inputGDS.split(".gds")[0]
1546
+ self.edbpath = temp_inputGDS + ".aedb"
1547
+ return self.open_edb()
1512
1548
 
1513
1549
  def _create_extent(
1514
1550
  self,
@@ -2208,7 +2244,7 @@ class Edb(Database):
2208
2244
  pins_to_preserve = []
2209
2245
  nets_to_preserve = []
2210
2246
  if preserve_components_with_model:
2211
- for el in self.components.instances.values():
2247
+ for el in self.layout.groups:
2212
2248
  if el.model_type in [
2213
2249
  "SPICEModel",
2214
2250
  "SParameterModel",
@@ -2237,23 +2273,41 @@ class Edb(Database):
2237
2273
  reference_pinsts = []
2238
2274
  reference_prims = []
2239
2275
  reference_paths = []
2240
- for i in self.padstacks.instances.values():
2241
- net_name = i.net_name
2242
- id = i.id
2276
+ pins_to_delete = []
2277
+
2278
+ def check_instances(item):
2279
+ net_name = item.net_name
2280
+ id = item.id
2243
2281
  if net_name not in all_list and id not in pins_to_preserve:
2244
- i.delete()
2282
+ pins_to_delete.append(item)
2245
2283
  elif net_name in reference_list and id not in pins_to_preserve:
2246
- reference_pinsts.append(i)
2247
- for i in self.modeler.primitives:
2248
- if i:
2249
- net_name = i.net_name
2284
+ reference_pinsts.append(item)
2285
+
2286
+ with ThreadPoolExecutor(number_of_threads) as pool:
2287
+ pool.map(lambda item: check_instances(item), self.layout.padstack_instances)
2288
+
2289
+ for i in pins_to_delete:
2290
+ i.delete()
2291
+
2292
+ prim_to_delete = []
2293
+
2294
+ def check_prims(item):
2295
+ if item:
2296
+ net_name = item.net_name
2250
2297
  if net_name not in all_list:
2251
- i.delete()
2252
- elif net_name in reference_list and not i.is_void:
2253
- if keep_lines_as_path and i.type == "Path":
2254
- reference_paths.append(i)
2298
+ prim_to_delete.append(item)
2299
+ elif net_name in reference_list and not item.is_void:
2300
+ if keep_lines_as_path and item.type == "Path":
2301
+ reference_paths.append(item)
2255
2302
  else:
2256
- reference_prims.append(i)
2303
+ reference_prims.append(item)
2304
+
2305
+ with ThreadPoolExecutor(number_of_threads) as pool:
2306
+ pool.map(lambda item: check_prims(item), self.modeler.primitives)
2307
+
2308
+ for i in prim_to_delete:
2309
+ i.delete()
2310
+
2257
2311
  self.logger.info_timer("Net clean up")
2258
2312
  self.logger.reset_timer()
2259
2313
 
@@ -2298,7 +2352,7 @@ class Edb(Database):
2298
2352
  if not _poly or _poly.IsNull():
2299
2353
  self._logger.error("Failed to create Extent.")
2300
2354
  return []
2301
- self.logger.info_timer("Expanded Net Polygon Creation")
2355
+ self.logger.info_timer("Extent Creation")
2302
2356
  self.logger.reset_timer()
2303
2357
  _poly_list = convert_py_list_to_net_list([_poly])
2304
2358
  prims_to_delete = []
@@ -2381,20 +2435,17 @@ class Edb(Database):
2381
2435
  for pin in pins_to_delete:
2382
2436
  pin.delete()
2383
2437
 
2384
- self.logger.info_timer(
2385
- "Padstack Instances removal completed. {} instances removed.".format(len(pins_to_delete))
2386
- )
2438
+ self.logger.info_timer("{} Padstack Instances deleted.".format(len(pins_to_delete)))
2387
2439
  self.logger.reset_timer()
2388
2440
 
2389
- # with ThreadPoolExecutor(number_of_threads) as pool:
2390
- # pool.map(lambda item: clip_path(item), reference_paths)
2391
-
2392
- for item in reference_paths:
2393
- clip_path(item)
2394
- for prim in reference_prims: # removing multithreading as failing with new layer from primitive
2395
- clean_prim(prim)
2396
- # with ThreadPoolExecutor(number_of_threads) as pool:
2397
- # pool.map(lambda item: clean_prim(item), reference_prims)
2441
+ with ThreadPoolExecutor(number_of_threads) as pool:
2442
+ pool.map(lambda item: clip_path(item), reference_paths)
2443
+ with ThreadPoolExecutor(number_of_threads) as pool:
2444
+ pool.map(lambda item: clean_prim(item), reference_prims)
2445
+ # for item in reference_paths:
2446
+ # clip_path(item)
2447
+ # for prim in reference_prims: # removing multithreading as failing with new layer from primitive
2448
+ # clean_prim(prim)
2398
2449
 
2399
2450
  for el in poly_to_create:
2400
2451
  self.modeler.create_polygon(el[0], el[1], net_name=el[2], voids=el[3])
@@ -2402,7 +2453,7 @@ class Edb(Database):
2402
2453
  for prim in prims_to_delete:
2403
2454
  prim.delete()
2404
2455
 
2405
- self.logger.info_timer("Primitives cleanup completed. {} primitives deleted.".format(len(prims_to_delete)))
2456
+ self.logger.info_timer("{} Primitives deleted.".format(len(prims_to_delete)))
2406
2457
  self.logger.reset_timer()
2407
2458
 
2408
2459
  i = 0
@@ -2411,7 +2462,7 @@ class Edb(Database):
2411
2462
  val.edbcomponent.Delete()
2412
2463
  i += 1
2413
2464
  i += 1
2414
- self.logger.info("Deleted {} additional components".format(i))
2465
+ self.logger.info("{} components deleted".format(i))
2415
2466
  if remove_single_pin_components:
2416
2467
  self.components.delete_single_pin_rlc()
2417
2468
  self.logger.info_timer("Single Pins components deleted")
@@ -3560,15 +3611,15 @@ class Edb(Database):
3560
3611
  """
3561
3612
  setups = {}
3562
3613
  for i in list(self.active_cell.SimulationSetups):
3563
- if i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kHFSS:
3614
+ if i.GetType().ToString().endswith("kHFSS"):
3564
3615
  setups[i.GetName()] = HfssSimulationSetup(self, i)
3565
- elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWave:
3616
+ elif i.GetType().ToString().endswith("kSIWave"):
3566
3617
  setups[i.GetName()] = SiwaveSimulationSetup(self, i)
3567
- elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWaveDCIR:
3618
+ elif i.GetType().ToString().endswith("kSIWaveDCIR"):
3568
3619
  setups[i.GetName()] = SiwaveDCSimulationSetup(self, i)
3569
- elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kRaptorX:
3620
+ elif i.GetType().ToString().endswith("kRaptorX"):
3570
3621
  setups[i.GetName()] = RaptorXSimulationSetup(self, i)
3571
- elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kHFSSPI:
3622
+ elif i.GetType().ToString().endswith("kHFSSPI"):
3572
3623
  setups[i.GetName()] = HFSSPISimulationSetup(self, i)
3573
3624
  return setups
3574
3625
 
@@ -1109,7 +1109,7 @@ class EDBComponent(Group):
1109
1109
  die_type = pascal_to_snake(ic_die_prop.GetType().ToString())
1110
1110
  temp["type"] = die_type
1111
1111
  if not die_type == "no_die":
1112
- temp["orientation"] = pascal_to_snake(ic_die_prop.GetOrientation())
1112
+ temp["orientation"] = pascal_to_snake(ic_die_prop.GetOrientation().ToString())
1113
1113
  if die_type == "wire_bond":
1114
1114
  temp["height"] = ic_die_prop.GetHeightValue().ToString()
1115
1115
  return temp
@@ -1123,10 +1123,13 @@ class EDBComponent(Group):
1123
1123
  else:
1124
1124
  ic_die_prop = cp.GetDieProperty().Clone()
1125
1125
  die_type = kwargs.get("type")
1126
+ ic_die_prop.SetType(getattr(self._edb.definition.DieType, snake_to_pascal(die_type)))
1126
1127
  if not die_type == "no_die":
1127
1128
  orientation = kwargs.get("orientation")
1128
1129
  if orientation:
1129
- ic_die_prop.SetOrientation(getattr(self._edb.definition.DieType, snake_to_pascal(die_type)))
1130
+ ic_die_prop.SetOrientation(
1131
+ getattr(self._edb.definition.DieOrientation, snake_to_pascal(orientation))
1132
+ )
1130
1133
  if die_type == "wire_bond":
1131
1134
  height = kwargs.get("height")
1132
1135
  if height:
@@ -230,11 +230,7 @@ class Layout(ObjBase):
230
230
  -------
231
231
  list of :class:`dotnet.edb_core.dotnet.primitive.PrimitiveDotNet` cast objects.
232
232
  """
233
- prims = []
234
- for p in self._edb_object.Primitives:
235
- obj = primitive_cast(self._pedb, p)
236
- prims.append(obj)
237
- return prims
233
+ return [primitive_cast(self._pedb, p) for p in self._edb_object.Primitives]
238
234
 
239
235
  @property
240
236
  def bondwires(self):
@@ -249,14 +245,7 @@ class Layout(ObjBase):
249
245
 
250
246
  @property
251
247
  def groups(self):
252
- temp = []
253
- for i in list(self._edb_object.Groups):
254
- group_type = i.ToString().split(".")[-1].lower()
255
- if group_type == "component":
256
- temp.append(EDBComponent(self._pedb, i))
257
- else:
258
- pass
259
- return temp
248
+ return [EDBComponent(self._pedb, i) for i in self._edb_object.Groups if i.ToString().endswith(".Component")]
260
249
 
261
250
  @property
262
251
  def pin_groups(self):