pyedb 0.27.0__tar.gz → 0.29.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 (195) hide show
  1. {pyedb-0.27.0 → pyedb-0.29.0}/PKG-INFO +5 -5
  2. {pyedb-0.27.0 → pyedb-0.29.0}/pyproject.toml +4 -4
  3. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/__init__.py +1 -1
  4. pyedb-0.29.0/src/pyedb/configuration/cfg_boundaries.py +95 -0
  5. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/cfg_common.py +1 -1
  6. pyedb-0.29.0/src/pyedb/configuration/cfg_components.py +101 -0
  7. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/cfg_data.py +4 -9
  8. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/cfg_operations.py +19 -13
  9. pyedb-0.29.0/src/pyedb/configuration/cfg_padstacks.py +106 -0
  10. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/cfg_pin_groups.py +7 -8
  11. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/cfg_ports_sources.py +4 -2
  12. pyedb-0.29.0/src/pyedb/configuration/cfg_s_parameter_models.py +116 -0
  13. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/configuration.py +48 -13
  14. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/application/Variables.py +43 -41
  15. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb.py +12 -4
  16. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/component.py +199 -0
  17. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/layout.py +4 -1
  18. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/primitive/primitive.py +2 -0
  19. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +3 -3
  20. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/terminal/terminal.py +4 -3
  21. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/definition/component_def.py +17 -1
  22. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -4
  23. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +3 -3
  24. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +10 -7
  25. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +301 -45
  26. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +2 -2
  27. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/general.py +11 -0
  28. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/layout_validation.py +3 -3
  29. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/modeler.py +5 -2
  30. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/nets.py +162 -181
  31. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/edb_logger.py +1 -1
  32. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/siwave.py +33 -7
  33. pyedb-0.27.0/src/pyedb/configuration/cfg_boundaries.py +0 -125
  34. pyedb-0.27.0/src/pyedb/configuration/cfg_components.py +0 -175
  35. pyedb-0.27.0/src/pyedb/configuration/cfg_padstacks.py +0 -129
  36. pyedb-0.27.0/src/pyedb/configuration/cfg_s_parameter_models.py +0 -60
  37. {pyedb-0.27.0 → pyedb-0.29.0}/LICENSE +0 -0
  38. {pyedb-0.27.0 → pyedb-0.29.0}/README.md +0 -0
  39. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/component_libraries/ansys_components.py +0 -0
  40. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/__init__.py +0 -0
  41. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/cfg_general.py +0 -0
  42. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/cfg_nets.py +0 -0
  43. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/cfg_package_definition.py +0 -0
  44. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/cfg_setup.py +0 -0
  45. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
  46. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/configuration/cfg_stackup.py +0 -0
  47. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/__init__.py +0 -0
  48. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/application/__init__.py +0 -0
  49. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/clr_module.py +0 -0
  50. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
  51. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
  52. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/connectable.py +0 -0
  53. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
  54. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/hierarchy_obj.py +0 -0
  55. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
  56. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +0 -0
  57. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +0 -0
  58. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +0 -0
  59. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +0 -0
  60. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/layout_obj.py +0 -0
  61. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/primitive/__init__.py +0 -0
  62. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/primitive/bondwire.py +0 -0
  63. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/primitive/path.py +0 -0
  64. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/terminal/__init__.py +0 -0
  65. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +0 -0
  66. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +0 -0
  67. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +0 -0
  68. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +0 -0
  69. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/cell/voltage_regulator.py +0 -0
  70. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/components.py +0 -0
  71. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
  72. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
  73. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
  74. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/definition/package_def.py +0 -0
  75. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
  76. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
  77. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
  78. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
  79. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
  80. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
  81. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
  82. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +0 -0
  83. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
  84. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +0 -0
  85. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
  86. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/sources.py +0 -0
  87. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
  88. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
  89. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/geometry/__init__.py +0 -0
  90. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/geometry/point_data.py +0 -0
  91. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -0
  92. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/hfss.py +0 -0
  93. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/layout_obj_instance.py +0 -0
  94. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/materials.py +0 -0
  95. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
  96. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/padstack.py +0 -0
  97. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/sim_setup_data/__init__.py +0 -0
  98. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/__init__.py +0 -0
  99. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +0 -0
  100. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +0 -0
  101. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/settings.py +0 -0
  102. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sim_setup_info.py +0 -0
  103. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/simulation_settings.py +0 -0
  104. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
  105. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +0 -0
  106. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
  107. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/siwave.py +0 -0
  108. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/siwave.py +0 -0
  109. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/stackup.py +0 -0
  110. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/utilities/__init__.py +0 -0
  111. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/utilities/heatsink.py +0 -0
  112. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/utilities/hfss_simulation_setup.py +0 -0
  113. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/utilities/obj_base.py +0 -0
  114. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/utilities/simulation_setup.py +0 -0
  115. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/dotnet/edb_core/utilities/siwave_simulation_setup.py +0 -0
  116. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/exceptions.py +0 -0
  117. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/generic/__init__.py +0 -0
  118. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/generic/constants.py +0 -0
  119. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/generic/data_handlers.py +0 -0
  120. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/generic/design_types.py +0 -0
  121. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/generic/filesystem.py +0 -0
  122. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/generic/general_methods.py +0 -0
  123. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/generic/plot.py +0 -0
  124. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/generic/process.py +0 -0
  125. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/generic/settings.py +0 -0
  126. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/__init__.py +0 -0
  127. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/bom/__init__.py +0 -0
  128. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
  129. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
  130. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
  131. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
  132. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/content/__init__.py +0 -0
  133. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/content/color.py +0 -0
  134. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/content/content.py +0 -0
  135. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
  136. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
  137. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
  138. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
  139. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
  140. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/content/fill.py +0 -0
  141. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
  142. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
  143. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
  144. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
  145. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
  146. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
  147. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
  148. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
  149. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
  150. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
  151. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
  152. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
  153. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
  154. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
  155. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
  156. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
  157. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
  158. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
  159. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
  160. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
  161. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
  162. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
  163. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
  164. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
  165. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
  166. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
  167. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
  168. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
  169. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
  170. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
  171. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/history_record.py +0 -0
  172. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
  173. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
  174. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/__init__.py +0 -0
  175. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
  176. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/downloads.py +0 -0
  177. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/misc.py +0 -0
  178. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
  179. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
  180. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  181. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
  182. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
  183. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
  184. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
  185. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
  186. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +0 -0
  187. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +0 -0
  188. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +0 -0
  189. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +0 -0
  190. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +0 -0
  191. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +0 -0
  192. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/misc/utilities.py +0 -0
  193. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/modeler/geometry_operators.py +0 -0
  194. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/siwave_core/icepak.py +0 -0
  195. {pyedb-0.27.0 → pyedb-0.29.0}/src/pyedb/workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyedb
3
- Version: 0.27.0
3
+ Version: 0.29.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>
@@ -19,9 +19,9 @@ Requires-Dist: cffi>=1.16.0,<1.18; platform_system=='Linux'
19
19
  Requires-Dist: pywin32 >= 303;platform_system=='Windows'
20
20
  Requires-Dist: ansys-pythonnet >= 3.1.0rc3
21
21
  Requires-Dist: dotnetcore2 ==3.1.23;platform_system=='Linux'
22
- Requires-Dist: numpy>=1.20.0,<2.2
22
+ Requires-Dist: numpy>=1.20.0,<2
23
23
  Requires-Dist: pandas>=1.1.0,<2.3
24
- Requires-Dist: pydantic>=2.6.4,<2.9
24
+ Requires-Dist: pydantic>=2.6.4,<2.10
25
25
  Requires-Dist: Rtree >= 1.2.0
26
26
  Requires-Dist: toml == 0.10.2
27
27
  Requires-Dist: scikit-rf
@@ -37,8 +37,8 @@ Requires-Dist: numpydoc>=1.5.0,<1.9 ; extra == "doc"
37
37
  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
- Requires-Dist: sphinx-autobuild==2024.2.4 ; extra == "doc" and ( python_version == '3.8')
41
- Requires-Dist: sphinx-autobuild==2024.2.4 ; extra == "doc" and ( python_version > '3.8')
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')
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"
@@ -29,9 +29,9 @@ dependencies = [
29
29
  "pywin32 >= 303;platform_system=='Windows'",
30
30
  "ansys-pythonnet >= 3.1.0rc3",
31
31
  "dotnetcore2 ==3.1.23;platform_system=='Linux'",
32
- "numpy>=1.20.0,<2.2",
32
+ "numpy>=1.20.0,<2",
33
33
  "pandas>=1.1.0,<2.3",
34
- "pydantic>=2.6.4,<2.9",
34
+ "pydantic>=2.6.4,<2.10",
35
35
  "Rtree >= 1.2.0",
36
36
  "toml == 0.10.2",
37
37
  "scikit-rf"
@@ -60,8 +60,8 @@ doc = [
60
60
  # NOTE: Remove recommonmark once examples are reworked.
61
61
  "recommonmark",
62
62
  "Sphinx>=7.1.0,<8.1",
63
- "sphinx-autobuild==2024.2.4; python_version == '3.8'",
64
- "sphinx-autobuild==2024.2.4; python_version > '3.8'",
63
+ "sphinx-autobuild==2021.3.14; python_version == '3.8'",
64
+ "sphinx-autobuild==2024.9.19; 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",
@@ -44,7 +44,7 @@ deprecation_warning()
44
44
  #
45
45
 
46
46
  pyedb_path = os.path.dirname(__file__)
47
- __version__ = "0.27.0"
47
+ __version__ = "0.29.0"
48
48
  version = __version__
49
49
 
50
50
  #
@@ -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.components
57
+ for comp in self.components:
58
+ c_db = comps_in_db[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.set_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
@@ -43,9 +43,7 @@ class CfgData(object):
43
43
  self._pedb = pedb
44
44
  self.general = CfgGeneral(self, kwargs.get("general", None))
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", [])
@@ -53,7 +51,7 @@ class CfgData(object):
53
51
 
54
52
  self.components = CfgComponents(self._pedb, components_data=kwargs.get("components", []))
55
53
 
56
- self.padstacks = CfgPadstacks(self, kwargs.get("padstacks", None))
54
+ self.padstacks = CfgPadstacks(self._pedb, kwargs.get("padstacks", None))
57
55
 
58
56
  self.pin_groups = CfgPinGroups(self._pedb, pingroup_data=kwargs.get("pin_groups", []))
59
57
 
@@ -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)
@@ -53,19 +53,21 @@ 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
- return self.export_properties()
68
+ self.reference_list = []
69
+ self.signal_list = net_names
70
+ return self.export_properties()
69
71
 
70
72
  def export_properties(self):
71
73
  return {
@@ -84,7 +86,7 @@ class CfgOperations(CfgBase):
84
86
  """Imports operation information from JSON."""
85
87
  if self.op_cutout:
86
88
  polygon_points = self._pedb.cutout(**self.op_cutout.get_attributes())
87
- if not "pyedb_cutout" in self._pedb.stackup.all_layers:
89
+ if "pyedb_cutout" not in self._pedb.stackup.all_layers:
88
90
  self._pedb.stackup.add_document_layer(name="pyedb_cutout")
89
91
  self._pedb.modeler.create_polygon(polygon_points, layer_name="pyedb_cutout", net_name="pyedb_cutout")
90
92
 
@@ -92,4 +94,8 @@ class CfgOperations(CfgBase):
92
94
 
93
95
  def get_data_from_db(self):
94
96
  self.op_cutout = CfgCutout(self._pedb)
95
- return {"cutout": self.op_cutout.get_data_from_db()}
97
+ data_from_db = self.op_cutout.get_data_from_db()
98
+ if data_from_db:
99
+ return {"cutout": data_from_db}
100
+ else:
101
+ return {}
@@ -0,0 +1,106 @@
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 CfgPadstacks:
27
+ """Padstack data class."""
28
+
29
+ def __init__(self, pedb, padstack_dict=None):
30
+ self._pedb = pedb
31
+ self.definitions = []
32
+ self.instances = []
33
+ if padstack_dict:
34
+ for pdef in padstack_dict.get("definitions", []):
35
+ self.definitions.append(Definition(**pdef))
36
+ for inst in padstack_dict.get("instances", []):
37
+ self.instances.append(Instance(**inst))
38
+
39
+ def apply(self):
40
+ """Apply padstack definition and instances on layout."""
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
56
+
57
+ def get_data_from_db(self):
58
+ self.definitions = []
59
+ for pdef_name, pdef in self._pedb.padstacks.definitions.items():
60
+ self.definitions.append(
61
+ Definition(
62
+ name=pdef_name,
63
+ hole_plating_thickness=pdef.hole_plating_thickness,
64
+ hole_material=pdef.material,
65
+ hole_range=pdef.hole_range,
66
+ pad_parameters=pdef.pad_parameters,
67
+ hole_parameters=pdef.hole_parameters,
68
+ )
69
+ )
70
+ data = {}
71
+ definitions = []
72
+ for i in self.definitions:
73
+ definitions.append(i.get_attributes())
74
+ data["definitions"] = definitions
75
+
76
+ instances_layout = self._pedb.padstacks.instances_by_name
77
+ for name, obj in instances_layout.items():
78
+ self.instances.append(
79
+ Instance(name=name, definition=obj.padstack_definition, backdrill_parameters=obj.backdrill_parameters)
80
+ )
81
+ instances = []
82
+ for i in self.instances:
83
+ instances.append(i.get_attributes())
84
+ data["instances"] = instances
85
+ return data
86
+
87
+
88
+ class Definition(CfgBase):
89
+ """Padstack definition data class."""
90
+
91
+ def __init__(self, **kwargs):
92
+ self.name = kwargs.get("name", None)
93
+ self.hole_plating_thickness = kwargs.get("hole_plating_thickness", None)
94
+ self.material = kwargs.get("hole_material", None)
95
+ self.hole_range = kwargs.get("hole_range", None)
96
+ self.pad_parameters = kwargs.get("pad_parameters", None)
97
+ self.hole_parameters = kwargs.get("hole_parameters", None)
98
+
99
+
100
+ class Instance(CfgBase):
101
+ """Instance data class."""
102
+
103
+ def __init__(self, **kwargs):
104
+ self.name = kwargs["name"]
105
+ self.definition = kwargs.get("definition", None)
106
+ self.backdrill_parameters = kwargs.get("backdrill_parameters", None)
@@ -36,12 +36,14 @@ class CfgPinGroups:
36
36
 
37
37
  def get_data_from_db(self):
38
38
  self.pin_groups = []
39
- for name, pg in self._pedb.siwave.pin_groups.items():
40
- pins = [p.aedt_name for p in pg.pins.values()]
39
+ layout_pin_groups = self._pedb.siwave.pin_groups
40
+ for pg_name, pg_obj in layout_pin_groups.items():
41
+ pins = list(pg_obj.pins.keys())
42
+ refdes = list(pg_obj.pins.values())[0].component.name
41
43
  cfg_pg = CfgPinGroup(
42
44
  self._pedb,
43
- name=name,
44
- reference_designator=None,
45
+ name=pg_name,
46
+ reference_designator=refdes,
45
47
  pins=pins,
46
48
  )
47
49
  self.pin_groups.append(cfg_pg)
@@ -65,10 +67,7 @@ class CfgPinGroup(CfgBase):
65
67
  def create(self):
66
68
  """Apply pin group on layout."""
67
69
  if self.pins:
68
- if self.reference_designator is None:
69
- self._pedb.modeler.create_pin_group(self.name, pins_by_aedt_name=self.pins)
70
- else:
71
- self._pedb.siwave.create_pin_group(self.reference_designator, list(self.pins), self.name)
70
+ self._pedb.siwave.create_pin_group(self.reference_designator, list(self.pins), self.name)
72
71
  elif self.net:
73
72
  if self.reference_designator in self._pedb.components.instances:
74
73
  comp = self._pedb.components.instances[self.reference_designator]
@@ -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):
@@ -0,0 +1,116 @@
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 pathlib import Path
24
+
25
+
26
+ class CfgSParameterModel:
27
+ def __init__(self, **kwargs):
28
+ self.name = kwargs.get("name", "")
29
+ self.component_definition = kwargs.get("component_definition", "")
30
+ self.file_path = kwargs.get("file_path", "")
31
+ self.apply_to_all = kwargs.get("apply_to_all", False)
32
+ self.components = kwargs.get("components", [])
33
+ self.reference_net = kwargs.get("reference_net", "")
34
+ self.reference_net_per_component = kwargs.get("reference_net_per_component", {})
35
+ self.pin_order = kwargs.get("pin_order", None)
36
+
37
+
38
+ class CfgSParameters:
39
+ def __init__(self, pedb, data, path_lib=None):
40
+ self._pedb = pedb
41
+ self.path_libraries = path_lib
42
+ self.s_parameters_models = [CfgSParameterModel(**i) for i in data]
43
+
44
+ def apply(self):
45
+ for s_param in self.s_parameters_models:
46
+ fpath = s_param.file_path
47
+ if not Path(fpath).anchor:
48
+ fpath = str(Path(self.path_libraries) / fpath)
49
+ comp_def = self._pedb.definitions.component[s_param.component_definition]
50
+ if s_param.pin_order:
51
+ comp_def.set_properties(pin_order=s_param.pin_order)
52
+ comp_def.add_n_port_model(fpath, s_param.name)
53
+ comp_list = dict()
54
+ if s_param.apply_to_all:
55
+ comp_list.update(
56
+ {refdes: comp for refdes, comp in comp_def.components.items() if refdes not in s_param.components}
57
+ )
58
+ else:
59
+ comp_list.update(
60
+ {refdes: comp for refdes, comp in comp_def.components.items() if refdes in s_param.components}
61
+ )
62
+
63
+ for refdes, comp in comp_list.items():
64
+ if refdes in s_param.reference_net_per_component:
65
+ ref_net = s_param.reference_net_per_component[refdes]
66
+ else:
67
+ ref_net = s_param.reference_net
68
+ comp.use_s_parameter_model(s_param.name, reference_net=ref_net)
69
+
70
+ def get_data_from_db(self):
71
+ db_comp_def = self._pedb.definitions.component
72
+ for name, compdef_obj in db_comp_def.items():
73
+ nport_models = compdef_obj.component_models
74
+ if not nport_models:
75
+ continue
76
+ else:
77
+ pin_order = compdef_obj.get_properties()["pin_order"]
78
+ temp_comps = compdef_obj.components
79
+ for model_name, model_obj in nport_models.items():
80
+ temp_comp_list = []
81
+ reference_net_per_component = {}
82
+ for i in temp_comps.values():
83
+ s_param_model = i.model_properties.get("s_parameter_model")
84
+ if s_param_model:
85
+ if s_param_model["model_name"] == model_name:
86
+ temp_comp_list.append(i.refdes)
87
+ reference_net_per_component[i.refdes] = s_param_model["reference_net"]
88
+ else:
89
+ continue
90
+
91
+ self.s_parameters_models.append(
92
+ CfgSParameterModel(
93
+ name=model_name,
94
+ component_definition=name,
95
+ file_path=model_obj.reference_file,
96
+ apply_to_all=False,
97
+ components=temp_comp_list,
98
+ reference_net_per_component=reference_net_per_component,
99
+ pin_order=pin_order,
100
+ )
101
+ )
102
+
103
+ data = []
104
+ for i in self.s_parameters_models:
105
+ data.append(
106
+ {
107
+ "name": i.name,
108
+ "component_definition": i.component_definition,
109
+ "file_path": i.file_path,
110
+ "apply_to_all": i.apply_to_all,
111
+ "components": i.components,
112
+ "reference_net_per_component": i.reference_net_per_component,
113
+ "pin_order": i.pin_order,
114
+ }
115
+ )
116
+ return data