pyedb 0.34.3__tar.gz → 0.35.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 (194) hide show
  1. {pyedb-0.34.3 → pyedb-0.35.0}/PKG-INFO +6 -6
  2. {pyedb-0.34.3 → pyedb-0.35.0}/README.md +3 -3
  3. {pyedb-0.34.3 → pyedb-0.35.0}/pyproject.toml +2 -2
  4. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/__init__.py +1 -1
  5. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_modeler.py +1 -0
  6. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_pin_groups.py +7 -8
  7. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_ports_sources.py +6 -3
  8. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_stackup.py +1 -0
  9. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/configuration.py +9 -5
  10. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb.py +1 -0
  11. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +3 -3
  12. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +12 -0
  13. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +12 -0
  14. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/terminal.py +6 -15
  15. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/components.py +21 -45
  16. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +22 -2
  17. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/padstack.py +198 -10
  18. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/siwave.py +1 -2
  19. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/generic/process.py +10 -10
  20. {pyedb-0.34.3 → pyedb-0.35.0}/LICENSE +0 -0
  21. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/common/__init__.py +0 -0
  22. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/common/nets.py +0 -0
  23. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/component_libraries/ansys_components.py +0 -0
  24. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/__init__.py +0 -0
  25. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_boundaries.py +0 -0
  26. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_common.py +0 -0
  27. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_components.py +2 -2
  28. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_data.py +0 -0
  29. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_general.py +0 -0
  30. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_nets.py +0 -0
  31. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_operations.py +0 -0
  32. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_package_definition.py +0 -0
  33. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_padstacks.py +9 -9
  34. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_s_parameter_models.py +0 -0
  35. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_setup.py +0 -0
  36. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
  37. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/__init__.py +0 -0
  38. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/application/Variables.py +0 -0
  39. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/application/__init__.py +0 -0
  40. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/clr_module.py +0 -0
  41. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
  42. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
  43. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/connectable.py +0 -0
  44. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
  45. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/component.py +0 -0
  46. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/hierarchy_obj.py +0 -0
  47. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
  48. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +0 -0
  49. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +0 -0
  50. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +0 -0
  51. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/layout.py +0 -0
  52. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/layout_obj.py +0 -0
  53. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/primitive/__init__.py +0 -0
  54. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/primitive/bondwire.py +0 -0
  55. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/primitive/path.py +0 -0
  56. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/primitive/primitive.py +0 -0
  57. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/__init__.py +0 -0
  58. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +0 -0
  59. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +0 -0
  60. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +0 -0
  61. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/voltage_regulator.py +0 -0
  62. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
  63. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/component_def.py +0 -0
  64. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -0
  65. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
  66. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
  67. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/package_def.py +0 -0
  68. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
  69. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
  70. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
  71. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
  72. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
  73. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
  74. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
  75. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -0
  76. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +0 -0
  77. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +0 -0
  78. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
  79. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +0 -0
  80. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +0 -0
  81. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
  82. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/sources.py +0 -0
  83. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
  84. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
  85. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/general.py +0 -0
  86. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/geometry/__init__.py +0 -0
  87. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/geometry/point_data.py +0 -0
  88. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -0
  89. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/hfss.py +0 -0
  90. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/layout_obj_instance.py +0 -0
  91. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/layout_validation.py +0 -0
  92. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/materials.py +0 -0
  93. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/modeler.py +0 -0
  94. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
  95. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/nets.py +0 -0
  96. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/__init__.py +0 -0
  97. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/__init__.py +0 -0
  98. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +0 -0
  99. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +0 -0
  100. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/settings.py +0 -0
  101. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sim_setup_info.py +0 -0
  102. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/simulation_settings.py +0 -0
  103. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
  104. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +0 -0
  105. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
  106. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/siwave.py +0 -0
  107. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/stackup.py +0 -0
  108. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/__init__.py +0 -0
  109. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/heatsink.py +0 -0
  110. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/hfss_simulation_setup.py +0 -0
  111. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/obj_base.py +0 -0
  112. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/simulation_setup.py +0 -0
  113. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/siwave_simulation_setup.py +0 -0
  114. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/edb_logger.py +0 -0
  115. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/exceptions.py +0 -0
  116. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/generic/__init__.py +0 -0
  117. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/generic/constants.py +0 -0
  118. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/generic/data_handlers.py +0 -0
  119. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/generic/design_types.py +0 -0
  120. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/generic/filesystem.py +0 -0
  121. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/generic/general_methods.py +0 -0
  122. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/generic/plot.py +0 -0
  123. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/generic/settings.py +0 -0
  124. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/__init__.py +0 -0
  125. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/bom/__init__.py +0 -0
  126. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
  127. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
  128. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
  129. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
  130. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/content/__init__.py +0 -0
  131. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/content/color.py +0 -0
  132. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/content/content.py +0 -0
  133. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
  134. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
  135. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
  136. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
  137. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
  138. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/content/fill.py +0 -0
  139. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
  140. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
  141. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
  142. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
  143. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
  144. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
  145. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
  146. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
  147. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
  148. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
  149. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
  150. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
  151. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
  152. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
  153. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
  154. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
  155. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
  156. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
  157. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
  158. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
  159. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
  160. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
  161. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
  162. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
  163. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
  164. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
  165. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
  166. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
  167. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
  168. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
  169. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/history_record.py +0 -0
  170. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
  171. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
  172. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/__init__.py +0 -0
  173. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
  174. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/downloads.py +0 -0
  175. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/misc.py +0 -0
  176. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
  177. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
  178. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  179. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
  180. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
  181. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
  182. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
  183. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
  184. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +0 -0
  185. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +0 -0
  186. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +0 -0
  187. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +0 -0
  188. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +0 -0
  189. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +0 -0
  190. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/misc/utilities.py +0 -0
  191. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/modeler/geometry_operators.py +0 -0
  192. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/siwave.py +0 -0
  193. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/siwave_core/icepak.py +0 -0
  194. {pyedb-0.34.3 → pyedb-0.35.0}/src/pyedb/workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyedb
3
- Version: 0.34.3
3
+ Version: 0.35.0
4
4
  Summary: Higher-Level Pythonic Ansys Electronics Data Base
5
5
  Author-email: "ANSYS, Inc." <pyansys.core@ansys.com>
6
6
  Maintainer-email: PyEDB developers <simon.vandenbrouck@ansys.com>
@@ -21,13 +21,13 @@ Requires-Dist: ansys-pythonnet >= 3.1.0rc4
21
21
  Requires-Dist: dotnetcore2 ==3.1.23;platform_system=='Linux'
22
22
  Requires-Dist: numpy>=1.20.0,<3
23
23
  Requires-Dist: pandas>=1.1.0,<2.3
24
- Requires-Dist: pydantic>=2.6.4,<2.10
24
+ Requires-Dist: pydantic>=2.6.4,<2.11
25
25
  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
29
  Requires-Dist: imageio>=2.30.0,<2.37 ; extra == "doc"
30
- Requires-Dist: ipython>=8.13.0,<8.31 ; extra == "doc"
30
+ Requires-Dist: ipython>=8.13.0,<8.32 ; extra == "doc"
31
31
  Requires-Dist: jupyterlab>=4.0.0,<4.4 ; 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"
@@ -76,7 +76,7 @@ Provides-Extra: tests
76
76
 
77
77
  ## What is PyEDB?
78
78
 
79
- PyEDB is Python client library for processing complex and large layout designs in the
79
+ PyEDB is a Python client library for processing complex and large layout designs in the
80
80
  Ansys Electronics Database (EDB) format, which stores information describing designs for
81
81
  [Ansys Electronics Desktop](https://www.ansys.com/products/electronics) (AEDT).
82
82
 
@@ -102,7 +102,7 @@ HFSS 3D Layout, Icepak, Maxwell, Q3D, and SIwave.
102
102
 
103
103
  EDB provides a proprietary database file format (AEDB) for efficient and fast layout design
104
104
  handling and processing for building ready-to-solve projects. EDB addresses signal integrity
105
- (SI), power integrity (PI-DC), and electro-thermal work flows. You can import an AEDB file
105
+ (SI), power integrity (PI-DC), and electro-thermal workflows. You can import an AEDB file
106
106
  into AEDT to modify the layout, assign materials, and define ports, simulations, and constraints.
107
107
  You can then launch any of the Ansys electromagnetic simulators.
108
108
 
@@ -112,7 +112,7 @@ memory, it provides the fastest and most efficient way to handle a large and com
112
112
 
113
113
  You can also parse an AEDB file from a command line in batch in an Ansys electromagnetic simulator
114
114
  like HFSS or SIwave. Thus, you can deploy completely non-graphical flows, from layout
115
- translation through simulatiom results.
115
+ translation through simulation results.
116
116
 
117
117
  Additionally, you can use PyAEDT to import an AEDB file into AEDT to view a project,
118
118
  combine 3D designs, or perform simulation postprocessing. EDB also supports 3D component models.
@@ -13,7 +13,7 @@
13
13
 
14
14
  ## What is PyEDB?
15
15
 
16
- PyEDB is Python client library for processing complex and large layout designs in the
16
+ PyEDB is a Python client library for processing complex and large layout designs in the
17
17
  Ansys Electronics Database (EDB) format, which stores information describing designs for
18
18
  [Ansys Electronics Desktop](https://www.ansys.com/products/electronics) (AEDT).
19
19
 
@@ -39,7 +39,7 @@ HFSS 3D Layout, Icepak, Maxwell, Q3D, and SIwave.
39
39
 
40
40
  EDB provides a proprietary database file format (AEDB) for efficient and fast layout design
41
41
  handling and processing for building ready-to-solve projects. EDB addresses signal integrity
42
- (SI), power integrity (PI-DC), and electro-thermal work flows. You can import an AEDB file
42
+ (SI), power integrity (PI-DC), and electro-thermal workflows. You can import an AEDB file
43
43
  into AEDT to modify the layout, assign materials, and define ports, simulations, and constraints.
44
44
  You can then launch any of the Ansys electromagnetic simulators.
45
45
 
@@ -49,7 +49,7 @@ memory, it provides the fastest and most efficient way to handle a large and com
49
49
 
50
50
  You can also parse an AEDB file from a command line in batch in an Ansys electromagnetic simulator
51
51
  like HFSS or SIwave. Thus, you can deploy completely non-graphical flows, from layout
52
- translation through simulatiom results.
52
+ translation through simulation results.
53
53
 
54
54
  Additionally, you can use PyAEDT to import an AEDB file into AEDT to view a project,
55
55
  combine 3D designs, or perform simulation postprocessing. EDB also supports 3D component models.
@@ -31,7 +31,7 @@ dependencies = [
31
31
  "dotnetcore2 ==3.1.23;platform_system=='Linux'",
32
32
  "numpy>=1.20.0,<3",
33
33
  "pandas>=1.1.0,<2.3",
34
- "pydantic>=2.6.4,<2.10",
34
+ "pydantic>=2.6.4,<2.11",
35
35
  "Rtree >= 1.2.0",
36
36
  "toml == 0.10.2",
37
37
  "scikit-rf"
@@ -50,7 +50,7 @@ tests = [
50
50
  doc = [
51
51
  "ansys-sphinx-theme>=0.10.0,<1.1",
52
52
  "imageio>=2.30.0,<2.37",
53
- "ipython>=8.13.0,<8.31",
53
+ "ipython>=8.13.0,<8.32",
54
54
  "jupyterlab>=4.0.0,<4.4",
55
55
  "jupytext>=1.16.0,<1.17",
56
56
  "matplotlib>=3.5.0,<3.10",
@@ -44,7 +44,7 @@ deprecation_warning()
44
44
  #
45
45
 
46
46
  pyedb_path = os.path.dirname(__file__)
47
- __version__ = "0.34.3"
47
+ __version__ = "0.35.0"
48
48
  version = __version__
49
49
 
50
50
  #
@@ -97,6 +97,7 @@ class CfgModeler:
97
97
  for p in self.padstack_instances:
98
98
  p_inst = self._pedb.padstacks.place(
99
99
  via_name=p.name,
100
+ net_name=p.net_name,
100
101
  position=p.position,
101
102
  definition_name=p.definition,
102
103
  )
@@ -67,17 +67,16 @@ class CfgPinGroup(CfgBase):
67
67
  def create(self):
68
68
  """Apply pin group on layout."""
69
69
  if self.pins:
70
- self._pedb.siwave.create_pin_group(self.reference_designator, list(self.pins), self.name)
70
+ pins = self.pins if isinstance(self.pins, list) else [self.pins]
71
+ self._pedb.siwave.create_pin_group(self.reference_designator, pins, self.name)
71
72
  elif self.net:
72
- if self.reference_designator in self._pedb.components.instances:
73
- comp = self._pedb.components.instances[self.reference_designator]
74
- else:
75
- raise f"Component not found for creating pin group {self.name}."
76
- pins = [p for p, obj in comp.pins.items() if obj.net_name in self.net]
73
+ nets = self.net if isinstance(self.net, list) else [self.net]
74
+ comp = self._pedb.components.instances[self.reference_designator]
75
+ pins = [p for p, obj in comp.pins.items() if obj.net_name in nets]
77
76
  if not self._pedb.siwave.create_pin_group(self.reference_designator, pins, self.name):
78
- self._pedb.logger.error(f"Failed to create pin group {self.name}")
77
+ raise RuntimeError(f"Failed to create pin group {self.name}")
79
78
  else:
80
- self._pedb.logger.error(f"No net and pins defined for defining pin group {self.name}")
79
+ raise RuntimeError(f"No net and pins defined for defining pin group {self.name}")
81
80
 
82
81
  def export_properties(self):
83
82
  if self.pins:
@@ -265,7 +265,7 @@ class CfgCircuitElement(CfgBase):
265
265
  pins = {pos_value: self._pedb.components.instances[self.reference_designator].pins[pos_value]}
266
266
  pos_objs.update(pins)
267
267
  else:
268
- raise f"Wrong positive terminal type {pos_type}"
268
+ raise Exception(f"Wrong positive terminal type {pos_type}.")
269
269
 
270
270
  self.pos_terminals = {i: j.create_terminal(i) for i, j in pos_objs.items()}
271
271
  self.pos_terminals.update(pos_coor_terminal)
@@ -297,9 +297,12 @@ class CfgCircuitElement(CfgBase):
297
297
  # create pin group
298
298
  neg_obj = self._create_pin_group(pins, True)
299
299
  elif neg_type == "pin":
300
- neg_obj = {neg_value: self._pedb.components.instances[self.reference_designator].pins[neg_value]}
300
+ terminal_name = f"{self.reference_designator}_{neg_value}"
301
+ neg_obj = {
302
+ terminal_name: self._pedb.components.instances[self.reference_designator].pins[neg_value]
303
+ }
301
304
  else:
302
- raise f"Wrong negative terminal type {neg_type}"
305
+ raise Exception(f"Wrong negative terminal type {neg_type}.")
303
306
  self.neg_terminal = [
304
307
  j.create_terminal(i) if not j.terminal else j.terminal for i, j in neg_obj.items()
305
308
  ][0]
@@ -45,6 +45,7 @@ class CfgLayer(CfgBase):
45
45
  self.fill_material = kwargs.get("fill_material", None)
46
46
  self.thickness = kwargs.get("thickness", None)
47
47
  self.roughness = kwargs.get("roughness", None)
48
+ self.etching = kwargs.get("etching", None)
48
49
 
49
50
 
50
51
  class CfgStackup:
@@ -134,13 +134,17 @@ class Configuration:
134
134
 
135
135
  # Configure stackup
136
136
  if kwargs.get("fix_padstack_def"):
137
+ from pyedb.configuration.cfg_padstacks import CfgPadstackDefinition
138
+
137
139
  pedb_defs = self._pedb.padstacks.definitions
138
- temp = {}
139
- for name, pdef in pedb_defs.items():
140
- temp[name] = pdef.get_properties()
140
+ temp = []
141
+ for _, pdef in pedb_defs.items():
142
+ cfg_def = CfgPadstackDefinition(self._pedb, pdef)
143
+ cfg_def.retrieve_parameters_from_edb()
144
+ temp.append(cfg_def)
141
145
  self.cfg_data.stackup.apply()
142
- for name, pdef_p in temp.items():
143
- pedb_defs[name].set_properties(**pdef_p)
146
+ for cfg_pdef in temp:
147
+ cfg_pdef.set_parameters_to_edb()
144
148
  else:
145
149
  self.cfg_data.stackup.apply()
146
150
 
@@ -4564,6 +4564,7 @@ class Edb(Database):
4564
4564
  port_poly = cloned_edb.modeler.create_polygon(
4565
4565
  main_shape=void_info[0].polygon_data._edb_object, layer_name="ref", net_name="GND"
4566
4566
  )
4567
+ port_poly.scale(1.1)
4567
4568
  pec_poly = cloned_edb.modeler.create_polygon(
4568
4569
  main_shape=port_poly.polygon_data._edb_object, layer_name="port_pec", net_name="GND"
4569
4570
  )
@@ -66,7 +66,7 @@ class PinPair(object): # pragma: no cover
66
66
  @resistance.setter
67
67
  def resistance(self, value):
68
68
  self._pin_pair_rlc.R = value
69
- self._set_comp_prop(self._pin_pair_rlc) # pragma: no cover
69
+ self._set_comp_prop() # pragma: no cover
70
70
 
71
71
  @property
72
72
  def inductance(self):
@@ -75,7 +75,7 @@ class PinPair(object): # pragma: no cover
75
75
  @inductance.setter
76
76
  def inductance(self, value):
77
77
  self._pin_pair_rlc.L = value
78
- self._set_comp_prop(self._pin_pair_rlc) # pragma: no cover
78
+ self._set_comp_prop() # pragma: no cover
79
79
 
80
80
  @property
81
81
  def capacitance(self):
@@ -84,7 +84,7 @@ class PinPair(object): # pragma: no cover
84
84
  @capacitance.setter
85
85
  def capacitance(self, value):
86
86
  self._pin_pair_rlc.C = value
87
- self._set_comp_prop(self._pin_pair_rlc) # pragma: no cover
87
+ self._set_comp_prop() # pragma: no cover
88
88
 
89
89
  @property
90
90
  def rlc_values(self): # pragma: no cover
@@ -101,3 +101,15 @@ class PadstackInstanceTerminal(Terminal):
101
101
  def padstack_instance(self):
102
102
  p_inst, _ = self._get_parameters()
103
103
  return self._pedb.layout.find_object_by_id(p_inst.GetId())
104
+
105
+ @property
106
+ def layer(self):
107
+ """Get layer of the terminal."""
108
+ _, _, layer = self._edb_object.GetParameters()
109
+ return self._pedb.stackup.all_layers[layer.GetName()]
110
+
111
+ @layer.setter
112
+ def layer(self, value):
113
+ layer = self._pedb.stackup.layers[value]._edb_layer
114
+ point_data = self._pedb.point_data(*self.location)
115
+ self._edb_object.SetParameters(point_data, layer)
@@ -66,3 +66,15 @@ class PointTerminal(Terminal):
66
66
  raise Exception(msg)
67
67
  else:
68
68
  return terminal
69
+
70
+ @property
71
+ def layer(self):
72
+ """Get layer of the terminal."""
73
+ _, _, layer = self._edb_object.GetParameters()
74
+ return self._pedb.stackup.all_layers[layer.GetName()]
75
+
76
+ @layer.setter
77
+ def layer(self, value):
78
+ layer = self._pedb.stackup.layers[value]._edb_layer
79
+ point_data = self._pedb.point_data(*self.location)
80
+ self._edb_object.SetParameters(point_data, layer)
@@ -105,25 +105,16 @@ class Terminal(Connectable):
105
105
  @property
106
106
  def layer(self):
107
107
  """Get layer of the terminal."""
108
- point_data = self._pedb.point_data(0, 0)
109
- layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
110
- if self._edb_object.GetParameters(point_data, layer):
111
- return self._pedb.stackup.all_layers[layer.GetName()]
112
- else:
113
- self._pedb.logger.warning(f"No pad parameters found for terminal {self.name}")
114
-
115
- @layer.setter
116
- def layer(self, value):
117
- layer = self._pedb.stackup.layers[value]._edb_layer
118
- point_data = self._pedb.point_data(*self.location)
119
- self._edb_object.SetParameters(point_data, layer)
108
+ return self._pedb.logger.error("Cannot determine terminal layer")
120
109
 
121
110
  @property
122
111
  def location(self):
123
112
  """Location of the terminal."""
124
- layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
125
- _, point_data, _ = self._edb_object.GetParameters(None, layer)
126
- return [point_data.X.ToDouble(), point_data.Y.ToDouble()]
113
+ try:
114
+ _, point_data, _ = self._edb_object.GetParameters()
115
+ return [point_data.X.ToDouble(), point_data.Y.ToDouble()]
116
+ except:
117
+ self._pedb.logger.error("Cannot determine terminal location")
127
118
 
128
119
  @location.setter
129
120
  def location(self, value):
@@ -111,16 +111,9 @@ class Components(object):
111
111
 
112
112
  def __init__(self, p_edb):
113
113
  self._pedb = p_edb
114
- self._cmp = {}
115
- self._res = {}
116
- self._cap = {}
117
- self._ind = {}
118
- self._ios = {}
119
- self._ics = {}
120
- self._others = {}
114
+ self.refresh_components()
121
115
  self._pins = {}
122
116
  self._comps_by_part = {}
123
- self._init_parts()
124
117
  self._padstack = EdbPadstacks(self._pedb)
125
118
 
126
119
  @property
@@ -132,16 +125,6 @@ class Components(object):
132
125
  def _edb(self):
133
126
  return self._pedb.edb_api
134
127
 
135
- def _init_parts(self):
136
- a = self.instances
137
- a = self.resistors
138
- a = self.ICs
139
- a = self.Others
140
- a = self.inductors
141
- a = self.IOs
142
- a = self.components_by_partname
143
- return True
144
-
145
128
  def _get_edb_value(self, value):
146
129
  return self._pedb.edb_value(value)
147
130
 
@@ -205,8 +188,6 @@ class Components(object):
205
188
  >>> edbapp.components.instances
206
189
 
207
190
  """
208
- if not self._cmp:
209
- self.refresh_components()
210
191
  return self._cmp
211
192
 
212
193
  @property
@@ -310,10 +291,29 @@ class Components(object):
310
291
 
311
292
  def refresh_components(self):
312
293
  """Refresh the component dictionary."""
313
- # self._logger.info("Refreshing the Components dictionary.")
314
294
  self._cmp = {}
295
+ self._res = {}
296
+ self._ind = {}
297
+ self._cap = {}
298
+ self._ics = {}
299
+ self._ios = {}
300
+ self._others = {}
315
301
  for i in self._pedb.layout.groups:
316
302
  self._cmp[i.name] = i
303
+ if i.type == "Resistor":
304
+ self._res[i.name] = i
305
+ elif i.type == "Capacitor":
306
+ self._cap[i.name] = i
307
+ elif i.type == "Inductor":
308
+ self._ind[i.name] = i
309
+ elif i.type == "IC":
310
+ self._ics[i.name] = i
311
+ elif i.type == "IO":
312
+ self._ios[i.name] = i
313
+ elif i.type == "Other":
314
+ self._others[i.name] = i
315
+ else:
316
+ self._logger.warning(f"Unknown component type {i.name} found while refreshing components, will ignore")
317
317
  return True
318
318
 
319
319
  @property
@@ -332,10 +332,6 @@ class Components(object):
332
332
  >>> edbapp = Edb("myaedbfolder")
333
333
  >>> edbapp.components.resistors
334
334
  """
335
- self._res = {}
336
- for el, val in self.instances.items():
337
- if val.type == "Resistor":
338
- self._res[el] = val
339
335
  return self._res
340
336
 
341
337
  @property
@@ -354,10 +350,6 @@ class Components(object):
354
350
  >>> edbapp = Edb("myaedbfolder")
355
351
  >>> edbapp.components.capacitors
356
352
  """
357
- self._cap = {}
358
- for el, val in self.instances.items():
359
- if val.type == "Capacitor":
360
- self._cap[el] = val
361
353
  return self._cap
362
354
 
363
355
  @property
@@ -377,10 +369,6 @@ class Components(object):
377
369
  >>> edbapp.components.inductors
378
370
 
379
371
  """
380
- self._ind = {}
381
- for el, val in self.instances.items():
382
- if val.type == "Inductor":
383
- self._ind[el] = val
384
372
  return self._ind
385
373
 
386
374
  @property
@@ -400,10 +388,6 @@ class Components(object):
400
388
  >>> edbapp.components.ICs
401
389
 
402
390
  """
403
- self._ics = {}
404
- for el, val in self.instances.items():
405
- if val.type == "IC":
406
- self._ics[el] = val
407
391
  return self._ics
408
392
 
409
393
  @property
@@ -423,10 +407,6 @@ class Components(object):
423
407
  >>> edbapp.components.IOs
424
408
 
425
409
  """
426
- self._ios = {}
427
- for el, val in self.instances.items():
428
- if val.type == "IO":
429
- self._ios[el] = val
430
410
  return self._ios
431
411
 
432
412
  @property
@@ -446,10 +426,6 @@ class Components(object):
446
426
  >>> edbapp.components.others
447
427
 
448
428
  """
449
- self._others = {}
450
- for el, val in self.instances.items():
451
- if val.type == "Other":
452
- self._others[el] = val
453
429
  return self._others
454
430
 
455
431
  @property
@@ -60,6 +60,8 @@ class LayerEdbClass(object):
60
60
  self.__setattr__(k, v)
61
61
  elif k == "roughness":
62
62
  self.properties = {"roughness": v}
63
+ elif k == "etching":
64
+ self.properties = {"etching": v}
63
65
  else:
64
66
  self._pedb.logger.error(f"{k} is not a valid layer attribute")
65
67
 
@@ -792,6 +794,15 @@ class StackupLayerEdbClass(LayerEdbClass):
792
794
  data["thickness"] = self._edb_object.GetThicknessValue().ToString()
793
795
  data["color"] = self.color
794
796
 
797
+ data["etching"] = {
798
+ "factor": self._edb_layer.GetEtchFactor().ToString(),
799
+ "enabled": self._edb_layer.IsEtchFactorEnabled(),
800
+ }
801
+ if self._pedb.edbversion >= "2024.2":
802
+ etch_power_ground_nets = int(self._edb_layer.GetEtchNetClass())
803
+ etch_power_ground_nets = False if etch_power_ground_nets else True
804
+ data["etching"]["etch_power_ground_nets"] = etch_power_ground_nets
805
+
795
806
  roughness = {}
796
807
  for region in ["top", "bottom", "side"]:
797
808
  temp = {}
@@ -851,5 +862,14 @@ class StackupLayerEdbClass(LayerEdbClass):
851
862
  getattr(self._pedb._edb.Cell.RoughnessModel.Region, region.capitalize()), r_model
852
863
  )
853
864
  self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
854
-
855
- layer_clone.SetRoughnessEnabled(True)
865
+ etching = params.get("etching")
866
+ if etching:
867
+ layer_clone = self._edb_layer
868
+ layer_clone.SetEtchFactorEnabled(etching["enabled"])
869
+ layer_clone.SetEtchFactor(self._pedb.stackup._edb_value(float(etching["factor"])))
870
+ if self._pedb.edbversion >= "2024.2":
871
+ if etching["etch_power_ground_nets"]:
872
+ layer_clone.SetEtchNetClass(self._pedb._edb.Cell.EtchNetClass.NoEtchPowerGroundNets)
873
+ else:
874
+ layer_clone.SetEtchNetClass(self._pedb._edb.Cell.EtchNetClass.EtchAllNets)
875
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")