pyedb 0.28.0__tar.gz → 0.30.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.28.0 → pyedb-0.30.0}/PKG-INFO +3 -3
  2. {pyedb-0.28.0 → pyedb-0.30.0}/pyproject.toml +2 -2
  3. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/__init__.py +29 -3
  4. pyedb-0.30.0/src/pyedb/configuration/cfg_boundaries.py +95 -0
  5. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_common.py +1 -1
  6. pyedb-0.30.0/src/pyedb/configuration/cfg_components.py +101 -0
  7. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_data.py +4 -9
  8. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_general.py +19 -8
  9. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_operations.py +14 -10
  10. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_padstacks.py +41 -61
  11. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_ports_sources.py +4 -2
  12. pyedb-0.30.0/src/pyedb/configuration/cfg_s_parameter_models.py +116 -0
  13. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_setup.py +5 -0
  14. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_stackup.py +2 -6
  15. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/configuration.py +42 -9
  16. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb.py +116 -57
  17. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/component.py +202 -0
  18. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/layout.py +2 -13
  19. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/primitive/primitive.py +10 -2
  20. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/terminal/terminal.py +4 -3
  21. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/components.py +1 -2
  22. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/definition/component_def.py +17 -1
  23. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -4
  24. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +3 -3
  25. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +95 -1
  26. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +10 -7
  27. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +67 -5
  28. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/layout_validation.py +27 -4
  29. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/nets.py +162 -181
  30. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/padstack.py +0 -1
  31. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/siwave.py +5 -1
  32. pyedb-0.28.0/src/pyedb/configuration/cfg_boundaries.py +0 -125
  33. pyedb-0.28.0/src/pyedb/configuration/cfg_components.py +0 -175
  34. pyedb-0.28.0/src/pyedb/configuration/cfg_s_parameter_models.py +0 -60
  35. {pyedb-0.28.0 → pyedb-0.30.0}/LICENSE +0 -0
  36. {pyedb-0.28.0 → pyedb-0.30.0}/README.md +0 -0
  37. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/component_libraries/ansys_components.py +0 -0
  38. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/__init__.py +0 -0
  39. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_nets.py +0 -0
  40. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_package_definition.py +0 -0
  41. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_pin_groups.py +0 -0
  42. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
  43. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/__init__.py +0 -0
  44. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/application/Variables.py +0 -0
  45. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/application/__init__.py +0 -0
  46. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/clr_module.py +0 -0
  47. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
  48. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
  49. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/connectable.py +0 -0
  50. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
  51. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/hierarchy_obj.py +0 -0
  52. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
  53. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +0 -0
  54. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +0 -0
  55. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +0 -0
  56. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +0 -0
  57. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/layout_obj.py +0 -0
  58. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/primitive/__init__.py +0 -0
  59. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/primitive/bondwire.py +0 -0
  60. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/primitive/path.py +0 -0
  61. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/terminal/__init__.py +0 -0
  62. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +0 -0
  63. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +0 -0
  64. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +0 -0
  65. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +0 -0
  66. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +0 -0
  67. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/cell/voltage_regulator.py +0 -0
  68. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
  69. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
  70. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
  71. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/definition/package_def.py +0 -0
  72. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
  73. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
  74. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
  75. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
  76. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
  77. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
  78. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
  79. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
  80. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +0 -0
  81. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +0 -0
  82. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
  83. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/sources.py +0 -0
  84. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
  85. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
  86. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/general.py +0 -0
  87. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/geometry/__init__.py +0 -0
  88. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/geometry/point_data.py +0 -0
  89. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -0
  90. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/hfss.py +0 -0
  91. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/layout_obj_instance.py +0 -0
  92. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/materials.py +0 -0
  93. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/modeler.py +0 -0
  94. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
  95. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/sim_setup_data/__init__.py +0 -0
  96. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/__init__.py +0 -0
  97. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +0 -0
  98. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +0 -0
  99. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/settings.py +0 -0
  100. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sim_setup_info.py +0 -0
  101. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/simulation_settings.py +0 -0
  102. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
  103. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +0 -0
  104. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
  105. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/siwave.py +0 -0
  106. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/siwave.py +0 -0
  107. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/stackup.py +0 -0
  108. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/utilities/__init__.py +0 -0
  109. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/utilities/heatsink.py +0 -0
  110. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/utilities/hfss_simulation_setup.py +0 -0
  111. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/utilities/obj_base.py +0 -0
  112. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/utilities/simulation_setup.py +0 -0
  113. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/dotnet/edb_core/utilities/siwave_simulation_setup.py +0 -0
  114. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/edb_logger.py +0 -0
  115. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/exceptions.py +0 -0
  116. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/generic/__init__.py +0 -0
  117. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/generic/constants.py +0 -0
  118. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/generic/data_handlers.py +0 -0
  119. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/generic/design_types.py +0 -0
  120. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/generic/filesystem.py +0 -0
  121. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/generic/general_methods.py +0 -0
  122. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/generic/plot.py +0 -0
  123. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/generic/process.py +0 -0
  124. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/generic/settings.py +0 -0
  125. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/__init__.py +0 -0
  126. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/bom/__init__.py +0 -0
  127. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
  128. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
  129. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
  130. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
  131. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/content/__init__.py +0 -0
  132. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/content/color.py +0 -0
  133. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/content/content.py +0 -0
  134. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
  135. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
  136. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
  137. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
  138. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
  139. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/content/fill.py +0 -0
  140. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
  141. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
  142. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
  143. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
  144. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
  145. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
  146. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
  147. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
  148. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
  149. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
  150. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
  151. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
  152. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
  153. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
  154. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
  155. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
  156. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
  157. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
  158. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
  159. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
  160. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
  161. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
  162. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
  163. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
  164. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
  165. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
  166. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
  167. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
  168. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
  169. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
  170. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/history_record.py +0 -0
  171. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
  172. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
  173. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/__init__.py +0 -0
  174. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
  175. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/downloads.py +0 -0
  176. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/misc.py +0 -0
  177. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
  178. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
  179. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  180. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
  181. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
  182. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
  183. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
  184. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
  185. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +0 -0
  186. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +0 -0
  187. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +0 -0
  188. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +0 -0
  189. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +0 -0
  190. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +0 -0
  191. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/misc/utilities.py +0 -0
  192. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/modeler/geometry_operators.py +0 -0
  193. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/siwave_core/icepak.py +0 -0
  194. {pyedb-0.28.0 → pyedb-0.30.0}/src/pyedb/workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyedb
3
- Version: 0.28.0
3
+ Version: 0.30.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>
@@ -27,7 +27,7 @@ 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.36 ; extra == "doc"
30
- Requires-Dist: ipython>=8.13.0,<8.28 ; 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"
@@ -38,7 +38,7 @@ Requires-Dist: pypandoc>=1.10.0,<1.14 ; 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.2.4 ; 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"
@@ -49,7 +49,7 @@ tests = [
49
49
  doc = [
50
50
  "ansys-sphinx-theme>=0.10.0,<1.1",
51
51
  "imageio>=2.30.0,<2.36",
52
- "ipython>=8.13.0,<8.28",
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",
@@ -61,7 +61,7 @@ doc = [
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.2.4; 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",
@@ -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.28.0"
73
+ __version__ = "0.30.0"
48
74
  version = __version__
49
75
 
50
76
  #
@@ -0,0 +1,95 @@
1
+ # Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
2
+ # SPDX-License-Identifier: MIT
3
+ #
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
23
+ from pyedb.configuration.cfg_common import CfgBase
24
+
25
+
26
+ class CfgBoundaries(CfgBase):
27
+ def __init__(self, pedb, boundary_data):
28
+ self._pedb = pedb
29
+ self.open_region = boundary_data.get("open_region", None)
30
+ self.open_region_type = boundary_data.get("map_open_region_type", None)
31
+ self.pml_visible = boundary_data.get("pml_visible", None)
32
+ self.pml_operation_frequency = boundary_data.get("pml_operation_frequency", None)
33
+ self.pml_radiation_factor = boundary_data.get("pml_radiation_factor", None)
34
+ self.dielectric_extent_type = boundary_data.get("dielectric_extent_type", None)
35
+ # self.dielectric_base_polygon = self.**kwargs.get("dielectric_base_polygon", None)
36
+ self.horizontal_padding = boundary_data.get("horizontal_padding", None)
37
+ self.honor_primitives_on_dielectric_layers = boundary_data.get("honor_primitives_on_dielectric_layers", False)
38
+ self.air_box_extent_type = boundary_data.get("air_box_extent_type", None)
39
+ self.air_box_base_polygon = boundary_data.get("air_box_base_polygon", None)
40
+ self.air_box_truncate_model_ground_layers = boundary_data.get("air_box_truncate_model_ground_layers", None)
41
+ self.air_box_horizontal_padding = boundary_data.get("air_box_horizontal_padding", None)
42
+ self.air_box_positive_vertical_padding = boundary_data.get("air_box_positive_vertical_padding", None)
43
+ self.air_box_negative_vertical_padding = boundary_data.get("air_box_negative_vertical_padding", None)
44
+
45
+ def apply(self):
46
+ """Imports boundary information from JSON."""
47
+ if self.open_region is not None:
48
+ self._pedb.hfss.hfss_extent_info.use_open_region = self.open_region
49
+ if self.open_region_type:
50
+ self._pedb.hfss.hfss_extent_info.open_region_type = self.open_region_type.lower()
51
+ if self.pml_visible is not None:
52
+ self._pedb.hfss.hfss_extent_info.is_pml_visible = self.pml_visible
53
+ if self.pml_operation_frequency:
54
+ self._pedb.hfss.hfss_extent_info.operating_freq = self.pml_operation_frequency
55
+ if self.pml_radiation_factor:
56
+ self._pedb.hfss.hfss_extent_info.radiation_level = self.pml_radiation_factor
57
+ if self.dielectric_extent_type:
58
+ self._pedb.hfss.hfss_extent_info.extent_type = self.dielectric_extent_type.lower()
59
+ # if self.dielectric_base_polygon:
60
+ # self._pedb.hfss.hfss_extent_info.dielectric_base_polygon = self.dielectric_base_polygon
61
+ if self.horizontal_padding:
62
+ self._pedb.hfss.hfss_extent_info.dielectric_extent_size = float(self.horizontal_padding)
63
+ if self.honor_primitives_on_dielectric_layers is not None:
64
+ self._pedb.hfss.hfss_extent_info.honor_user_dielectric = self.honor_primitives_on_dielectric_layers
65
+ if self.air_box_extent_type:
66
+ self._pedb.hfss.hfss_extent_info.extent_type = self.air_box_extent_type.lower()
67
+ if self.air_box_truncate_model_ground_layers is not None:
68
+ self._pedb.hfss.hfss_extent_info.truncate_air_box_at_ground = self.air_box_truncate_model_ground_layers
69
+ if self.air_box_horizontal_padding:
70
+ self._pedb.hfss.hfss_extent_info.air_box_horizontal_extent = float(self.air_box_horizontal_padding)
71
+ if self.air_box_positive_vertical_padding:
72
+ self._pedb.hfss.hfss_extent_info.air_box_positive_vertical_extent = float(
73
+ self.air_box_positive_vertical_padding
74
+ )
75
+ if self.air_box_negative_vertical_padding:
76
+ self._pedb.hfss.hfss_extent_info.air_box_negative_vertical_extent = float(
77
+ self.air_box_negative_vertical_padding
78
+ )
79
+
80
+ def get_data_from_db(self):
81
+ self.open_region = self._pedb.hfss.hfss_extent_info.use_open_region
82
+ self.open_region_type = self._pedb.hfss.hfss_extent_info.open_region_type
83
+ self.pml_visible = self._pedb.hfss.hfss_extent_info.is_pml_visible
84
+ self.pml_operation_frequency = self._pedb.hfss.hfss_extent_info.operating_freq.tostring
85
+ self.pml_radiation_factor = self._pedb.hfss.hfss_extent_info.radiation_level.tostring
86
+ self.dielectric_extent_type = self._pedb.hfss.hfss_extent_info.extent_type
87
+ # self.dielectric_base_polygon = self._pedb.hfss.hfss_extent_info.dielectric_base_polygon
88
+ self.horizontal_padding = self._pedb.hfss.hfss_extent_info.dielectric_extent_size
89
+ self.honor_primitives_on_dielectric_layers = self._pedb.hfss.hfss_extent_info.honor_user_dielectric
90
+ self.air_box_extent_type = self._pedb.hfss.hfss_extent_info.extent_type
91
+ self.air_box_truncate_model_ground_layers = self._pedb.hfss.hfss_extent_info.truncate_air_box_at_ground
92
+ self.air_box_horizontal_padding = self._pedb.hfss.hfss_extent_info.air_box_horizontal_extent
93
+ self.air_box_positive_vertical_padding = self._pedb.hfss.hfss_extent_info.air_box_positive_vertical_extent
94
+ self.air_box_negative_vertical_padding = self._pedb.hfss.hfss_extent_info.air_box_negative_vertical_extent
95
+ return self.get_attributes()
@@ -30,7 +30,7 @@ class CfgBase:
30
30
  exclude = exclude if isinstance(exclude, list) else [exclude]
31
31
  attrs = {i: j for i, j in attrs.items() if i not in exclude}
32
32
  attrs = {i: j for i, j in attrs.items() if not i.startswith("_")}
33
- attrs = {i: j for i, j in attrs.items() if j is not None}
33
+ attrs = {i: j for i, j in attrs.items() if j not in [None, [], {}]}
34
34
  return attrs
35
35
 
36
36
  def set_attributes(self, pedb_object):
@@ -0,0 +1,101 @@
1
+ # Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
2
+ # SPDX-License-Identifier: MIT
3
+ #
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
23
+ from pyedb.configuration.cfg_common import CfgBase
24
+
25
+
26
+ class CfgRlcModel(CfgBase):
27
+ def __init__(self, **kwargs):
28
+ self.resistance = kwargs.get("resistance", None)
29
+ self.inductance = kwargs.get("inductance", None)
30
+ self.capacitance = kwargs.get("capacitance", None)
31
+ self.type = kwargs.get("type", None)
32
+ self.p1 = kwargs.get("p1", None)
33
+ self.p2 = kwargs.get("p2", None)
34
+
35
+
36
+ class CfgComponent(CfgBase):
37
+ def __init__(self, **kwargs):
38
+ self.enabled = kwargs.get("enabled", None)
39
+ self.reference_designator = kwargs.get("reference_designator", None)
40
+ self.definition = kwargs.get("definition", None)
41
+ self.type = kwargs["part_type"].lower() if kwargs.get("part_type") else None
42
+ self.port_properties = kwargs.get("port_properties", {})
43
+ self.solder_ball_properties = kwargs.get("solder_ball_properties", {})
44
+ self.ic_die_properties = kwargs.get("ic_die_properties", {})
45
+ self.pin_pair_model = kwargs.get("pin_pair_model", None)
46
+ self.spice_model = kwargs.get("spice_model", None)
47
+ self.s_parameter_model = kwargs.get("s_parameter_model", None)
48
+
49
+
50
+ class CfgComponents:
51
+ def __init__(self, pedb, components_data):
52
+ self._pedb = pedb
53
+ self.components = [CfgComponent(**comp) for comp in components_data]
54
+
55
+ def apply(self):
56
+ comps_in_db = self._pedb.components
57
+ for comp in self.components:
58
+ c_db = comps_in_db.instances[comp.reference_designator]
59
+ if comp.definition:
60
+ c_db.definition = comp.definition
61
+ if comp.type:
62
+ c_db.type = comp.type
63
+ if comp.solder_ball_properties:
64
+ c_db.solder_ball_properties = comp.solder_ball_properties
65
+ if comp.port_properties:
66
+ c_db.port_properties = comp.port_properties
67
+ if comp.ic_die_properties:
68
+ c_db.ic_die_properties = comp.ic_die_properties
69
+ if comp.pin_pair_model:
70
+ c_db.model_properties = {"pin_pair_model": comp.pin_pair_model}
71
+ if comp.spice_model:
72
+ c_db.model_properties = {"spice_model": comp.spice_model}
73
+ if comp.s_parameter_model:
74
+ c_db.model_properties = {"s_parameter_model": comp.s_parameter_model}
75
+
76
+ def _load_data_from_db(self):
77
+ self.components = []
78
+ comps_in_db = self._pedb.components
79
+ for _, comp in comps_in_db.instances.items():
80
+ cfg_comp = CfgComponent(
81
+ enabled=comp.enabled,
82
+ reference_designator=comp.name,
83
+ part_type=comp.type,
84
+ pin_pair_model=comp.model_properties.get("pin_pair_model"),
85
+ spice_model=comp.model_properties.get("spice_model"),
86
+ s_parameter_model=comp.model_properties.get("s_parameter_model"),
87
+ definition=comp.component_def,
88
+ location=comp.location,
89
+ placement_layer=comp.placement_layer,
90
+ solder_ball_properties=comp.solder_ball_properties,
91
+ ic_die_properties=comp.ic_die_properties,
92
+ port_properties=comp.port_properties,
93
+ )
94
+ self.components.append(cfg_comp)
95
+
96
+ def get_data_from_db(self):
97
+ self._load_data_from_db()
98
+ data = []
99
+ for comp in self.components:
100
+ data.append(comp.get_attributes())
101
+ return data
@@ -30,7 +30,7 @@ from pyedb.configuration.cfg_package_definition import CfgPackageDefinitions
30
30
  from pyedb.configuration.cfg_padstacks import CfgPadstacks
31
31
  from pyedb.configuration.cfg_pin_groups import CfgPinGroups
32
32
  from pyedb.configuration.cfg_ports_sources import CfgPorts, CfgSources
33
- from pyedb.configuration.cfg_s_parameter_models import CfgSParameterModel
33
+ from pyedb.configuration.cfg_s_parameter_models import CfgSParameters
34
34
  from pyedb.configuration.cfg_setup import CfgSetups
35
35
  from pyedb.configuration.cfg_spice_models import CfgSpiceModel
36
36
  from pyedb.configuration.cfg_stackup import CfgStackup
@@ -41,11 +41,9 @@ 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
- self.boundaries = {}
47
- if kwargs.get("boundaries", None):
48
- self.boundaries = CfgBoundaries(self, kwargs.get("boundaries", None))
46
+ self.boundaries = CfgBoundaries(self._pedb, kwargs.get("boundaries", {}))
49
47
 
50
48
  self.nets = CfgNets(
51
49
  self, kwargs.get("nets", {}).get("signal_nets", []), kwargs.get("nets", {}).get("power_ground_nets", [])
@@ -65,10 +63,7 @@ class CfgData(object):
65
63
 
66
64
  self.stackup = CfgStackup(self._pedb, data=kwargs.get("stackup", {}))
67
65
 
68
- self.s_parameters = [
69
- CfgSParameterModel(self, self.general.s_parameter_library, sparam_model)
70
- for sparam_model in kwargs.get("s_parameters", [])
71
- ]
66
+ self.s_parameters = CfgSParameters(self._pedb, kwargs.get("s_parameters", []), self.general.s_parameter_library)
72
67
 
73
68
  self.spice_models = [
74
69
  CfgSpiceModel(self, self.general.spice_model_library, spice_model)
@@ -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
@@ -53,18 +53,20 @@ class CfgCutout(CfgBase):
53
53
 
54
54
  def get_data_from_db(self):
55
55
  if "pyedb_cutout" in self._pedb.stackup.all_layers:
56
- poly = self._pedb.layout.find_primitive(layer_name="pyedb_cutout")[0]
57
- self.custom_extent = poly.polygon_data.points
56
+ polygons = self._pedb.layout.find_primitive(layer_name="pyedb_cutout")
57
+ if polygons:
58
+ poly = polygons[0]
59
+ self.custom_extent = poly.polygon_data.points
58
60
 
59
- net_names = []
60
- for name, obj in self._pedb.nets.nets.items():
61
- if obj.primitives[0].layer.name == "pyedb_cutout":
62
- continue
63
- if len(obj.primitives) > 0:
64
- net_names.append(name)
61
+ net_names = []
62
+ for name, obj in self._pedb.nets.nets.items():
63
+ if obj.primitives[0].layer.name == "pyedb_cutout":
64
+ continue
65
+ if len(obj.primitives) > 0:
66
+ net_names.append(name)
65
67
 
66
- self.reference_list = []
67
- self.signal_list = net_names
68
+ self.reference_list = []
69
+ self.signal_list = net_names
68
70
  return self.export_properties()
69
71
 
70
72
  def export_properties(self):
@@ -95,3 +97,5 @@ class CfgOperations(CfgBase):
95
97
  data_from_db = self.op_cutout.get_data_from_db()
96
98
  if data_from_db:
97
99
  return {"cutout": data_from_db}
100
+ else:
101
+ return {}
@@ -20,9 +20,6 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
-
24
- from enum import Enum
25
-
26
23
  from pyedb.configuration.cfg_common import CfgBase
27
24
 
28
25
 
@@ -37,16 +34,25 @@ class CfgPadstacks:
37
34
  for pdef in padstack_dict.get("definitions", []):
38
35
  self.definitions.append(Definition(**pdef))
39
36
  for inst in padstack_dict.get("instances", []):
40
- self.instances.append(Instance(self._pedb, inst))
37
+ self.instances.append(Instance(**inst))
41
38
 
42
39
  def apply(self):
43
40
  """Apply padstack definition and instances on layout."""
44
- padstack_defs_layout = self._pedb.padstacks.definitions
45
- for pdef in self.definitions:
46
- pdef_layout = padstack_defs_layout[pdef.name]
47
- pdef_layout.set_properties(**pdef.get_attributes())
48
- for instance in self.instances:
49
- instance.apply()
41
+ if self.definitions:
42
+ padstack_defs_layout = self._pedb.padstacks.definitions
43
+ for pdef in self.definitions:
44
+ pdef_layout = padstack_defs_layout[pdef.name]
45
+ pdef_layout.set_properties(**pdef.get_attributes())
46
+ if self.instances:
47
+ instances_layout = self._pedb.padstacks.instances_by_name
48
+ for inst in self.instances:
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
56
 
51
57
  def get_data_from_db(self):
52
58
  self.definitions = []
@@ -66,6 +72,23 @@ class CfgPadstacks:
66
72
  for i in self.definitions:
67
73
  definitions.append(i.get_attributes())
68
74
  data["definitions"] = definitions
75
+
76
+ for obj in self._pedb.layout.padstack_instances:
77
+ temp = obj.properties
78
+ self.instances.append(
79
+ Instance(
80
+ name=temp["name"],
81
+ definition=temp["definition"],
82
+ backdrill_parameters=temp["backdrill_parameters"],
83
+ id=temp["id"],
84
+ position=temp["position"],
85
+ rotation=temp["rotation"],
86
+ )
87
+ )
88
+ instances = []
89
+ for i in self.instances:
90
+ instances.append(i.get_attributes("id"))
91
+ data["instances"] = instances
69
92
  return data
70
93
 
71
94
 
@@ -81,56 +104,13 @@ class Definition(CfgBase):
81
104
  self.hole_parameters = kwargs.get("hole_parameters", None)
82
105
 
83
106
 
84
- class Instance:
107
+ class Instance(CfgBase):
85
108
  """Instance data class."""
86
109
 
87
- def __init__(self, pedb, instances_dict):
88
- self._pedb = pedb
89
- self._instances_dict = instances_dict
90
- self.name = self._instances_dict.get("name", "")
91
- self.backdrill_top = None
92
- self.backdrill_bottom = None
93
- self._update_backdrill()
94
-
95
- def _update_backdrill(self):
96
- if "backdrill_top" in self._instances_dict:
97
- self.backdrill_top = self.BackDrill()
98
- self.backdrill_top.type = self.backdrill_top.BackDrillType.TOP
99
- backdrill_top_dict = self._instances_dict["backdrill_top"]
100
- self.backdrill_top.drill_to_layer = backdrill_top_dict.get("drill_to_layer", "")
101
- self.backdrill_top.drill_diameter = backdrill_top_dict.get("drill_diameter", "")
102
- self.backdrill_top.stub_length = backdrill_top_dict.get("stub_length", "")
103
- if "backdrill_bottom" in self._instances_dict:
104
- self.backdrill_bottom = self.BackDrill()
105
- backdrill_bottom_dict = self._instances_dict["backdrill_bottom"]
106
- self.backdrill_bottom.drill_to_layer = backdrill_bottom_dict.get("drill_to_layer", "")
107
- self.backdrill_bottom.drill_diameter = backdrill_bottom_dict.get("drill_diameter", "")
108
- self.backdrill_bottom.stub_length = backdrill_bottom_dict.get("stub_length", "")
109
-
110
- class BackDrill:
111
- """Backdrill data class."""
112
-
113
- def __init__(self):
114
- self.type = self.BackDrillType.BOTTOM
115
- self.drill_to_layer = ""
116
- self.drill_diameter = ""
117
- self.stub_length = ""
118
-
119
- class BackDrillType(Enum):
120
- TOP = 0
121
- BOTTOM = 1
122
-
123
- def apply(self):
124
- """Apply padstack instance on layout."""
125
- padstack_instances = self._pedb.padstacks.instances_by_name
126
- inst = padstack_instances[self.name]
127
- if self.backdrill_top:
128
- inst.set_backdrill_top(
129
- self.backdrill_top.drill_to_layer, self.backdrill_top.drill_diameter, self.backdrill_top.stub_length
130
- )
131
- if self.backdrill_bottom:
132
- inst.set_backdrill_bottom(
133
- self.backdrill_bottom.drill_to_layer,
134
- self.backdrill_bottom.drill_diameter,
135
- self.backdrill_bottom.stub_length,
136
- )
110
+ def __init__(self, **kwargs):
111
+ self.name = kwargs["name"]
112
+ self.definition = kwargs.get("definition", None)
113
+ self.backdrill_parameters = kwargs.get("backdrill_parameters", None)
114
+ self.id = kwargs.get("id", None)
115
+ self.position = kwargs.get("position", [])
116
+ self.rotation = kwargs.get("rotation", None)
@@ -337,13 +337,15 @@ class CfgPort(CfgCircuitElement):
337
337
  return circuit_elements
338
338
 
339
339
  def export_properties(self):
340
- return {
340
+ data = {
341
341
  "name": self.name,
342
342
  "type": self.type,
343
343
  "reference_designator": self.reference_designator,
344
344
  "positive_terminal": self.positive_terminal_info.export_properties(),
345
- "negative_terminal": self.negative_terminal_info.export_properties(),
346
345
  }
346
+ if self.negative_terminal_info:
347
+ data.update({"negative_terminal": self.negative_terminal_info.export_properties()})
348
+ return data
347
349
 
348
350
 
349
351
  class CfgSource(CfgCircuitElement):