pyedb 0.12.1__tar.gz → 0.12.2__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 (155) hide show
  1. {pyedb-0.12.1 → pyedb-0.12.2}/PKG-INFO +2 -2
  2. {pyedb-0.12.1 → pyedb-0.12.2}/pyproject.toml +1 -1
  3. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/__init__.py +1 -1
  4. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/cfg_boundaries.py +1 -1
  5. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/cfg_components.py +1 -1
  6. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/cfg_data.py +10 -3
  7. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/cfg_general.py +1 -1
  8. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/cfg_nets.py +1 -1
  9. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/cfg_padstacks.py +3 -3
  10. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/cfg_pin_groups.py +1 -1
  11. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/cfg_ports_sources.py +4 -4
  12. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/cfg_s_parameter_models.py +1 -1
  13. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/cfg_setup.py +1 -1
  14. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/cfg_spice_models.py +1 -1
  15. pyedb-0.12.2/src/pyedb/configuration/cfg_stackup.py +135 -0
  16. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/configuration.py +1 -4
  17. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/siwave.py +23 -2
  18. {pyedb-0.12.1 → pyedb-0.12.2}/LICENSE +0 -0
  19. {pyedb-0.12.1 → pyedb-0.12.2}/README.md +0 -0
  20. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/configuration/__init__.py +0 -0
  21. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/__init__.py +0 -0
  22. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/application/Variables.py +0 -0
  23. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/application/__init__.py +0 -0
  24. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/clr_module.py +0 -0
  25. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb.py +0 -0
  26. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
  27. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
  28. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
  29. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
  30. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/components.py +0 -0
  31. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
  32. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/definition/component_def.py +0 -0
  33. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -0
  34. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
  35. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
  36. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/definition/package_def.py +0 -0
  37. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
  38. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
  39. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/dotnet/layout.py +0 -0
  40. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
  41. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
  42. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/components_data.py +0 -0
  43. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/connectable.py +0 -0
  44. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
  45. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
  46. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
  47. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -0
  48. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +0 -0
  49. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py +0 -0
  50. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +0 -0
  51. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +0 -0
  52. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +0 -0
  53. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
  54. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +0 -0
  55. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +0 -0
  56. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
  57. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/siwave_simulation_setup_data.py +0 -0
  58. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/sources.py +0 -0
  59. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/terminals.py +0 -0
  60. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
  61. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
  62. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/general.py +0 -0
  63. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/geometry/__init__.py +0 -0
  64. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/geometry/point_data.py +0 -0
  65. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -0
  66. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/hfss.py +0 -0
  67. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/layout.py +0 -0
  68. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/layout_validation.py +0 -0
  69. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/materials.py +0 -0
  70. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
  71. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/nets.py +0 -0
  72. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/obj_base.py +0 -0
  73. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/padstack.py +0 -0
  74. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/sim_setup_data/__init__.py +0 -0
  75. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/sim_setup_data/data/__init__.py +0 -0
  76. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
  77. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/siwave.py +0 -0
  78. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/stackup.py +0 -0
  79. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/utilities/__init__.py +0 -0
  80. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/utilities/heatsink.py +0 -0
  81. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/dotnet/edb_core/utilities/simulation_setup.py +0 -0
  82. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/edb_logger.py +0 -0
  83. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/exceptions.py +0 -0
  84. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/generic/__init__.py +0 -0
  85. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/generic/constants.py +0 -0
  86. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/generic/data_handlers.py +0 -0
  87. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/generic/design_types.py +0 -0
  88. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/generic/filesystem.py +0 -0
  89. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/generic/general_methods.py +0 -0
  90. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/generic/plot.py +0 -0
  91. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/generic/process.py +0 -0
  92. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/generic/settings.py +0 -0
  93. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/__init__.py +0 -0
  94. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/bom/__init__.py +0 -0
  95. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/bom/bom.py +0 -0
  96. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
  97. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
  98. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/bom/refdes.py +0 -0
  99. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/content/__init__.py +0 -0
  100. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/content/color.py +0 -0
  101. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/content/content.py +0 -0
  102. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
  103. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
  104. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
  105. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/content/entry_color.py +0 -0
  106. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/content/entry_line.py +0 -0
  107. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/content/fill.py +0 -0
  108. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
  109. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
  110. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
  111. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
  112. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
  113. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
  114. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
  115. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
  116. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
  117. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
  118. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
  119. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
  120. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
  121. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
  122. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
  123. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
  124. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
  125. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
  126. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
  127. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
  128. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
  129. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
  130. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
  131. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
  132. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
  133. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
  134. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
  135. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
  136. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
  137. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ecad/spec.py +0 -0
  138. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/history_record.py +0 -0
  139. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/ipc2581.py +0 -0
  140. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/ipc2581/logistic_header.py +0 -0
  141. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/__init__.py +0 -0
  142. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
  143. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/downloads.py +0 -0
  144. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/misc.py +0 -0
  145. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
  146. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
  147. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  148. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
  149. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
  150. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
  151. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
  152. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
  153. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/misc/utilities.py +0 -0
  154. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/modeler/geometry_operators.py +0 -0
  155. {pyedb-0.12.1 → pyedb-0.12.2}/src/pyedb/siwave_core/icepak.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyedb
3
- Version: 0.12.1
3
+ Version: 0.12.2
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>
@@ -24,7 +24,7 @@ Requires-Dist: toml == 0.10.2
24
24
  Requires-Dist: Rtree >= 1.2.0
25
25
  Requires-Dist: ansys-sphinx-theme>=0.10.0,<0.17 ; extra == "doc"
26
26
  Requires-Dist: imageio>=2.30.0,<2.35 ; extra == "doc"
27
- Requires-Dist: ipython>=8.13.0,<8.25 ; extra == "doc"
27
+ Requires-Dist: ipython>=8.13.0,<8.26 ; extra == "doc"
28
28
  Requires-Dist: jupyterlab>=4.0.0,<4.3 ; extra == "doc"
29
29
  Requires-Dist: matplotlib>=3.5.0,<3.10 ; extra == "doc"
30
30
  Requires-Dist: nbsphinx>=0.9.0,<0.10 ; extra == "doc"
@@ -47,7 +47,7 @@ tests = [
47
47
  doc = [
48
48
  "ansys-sphinx-theme>=0.10.0,<0.17",
49
49
  "imageio>=2.30.0,<2.35",
50
- "ipython>=8.13.0,<8.25",
50
+ "ipython>=8.13.0,<8.26",
51
51
  "jupyterlab>=4.0.0,<4.3",
52
52
  "matplotlib>=3.5.0,<3.10",
53
53
  "nbsphinx>=0.9.0,<0.10",
@@ -44,7 +44,7 @@ deprecation_warning()
44
44
  #
45
45
 
46
46
  pyedb_path = os.path.dirname(__file__)
47
- __version__ = "0.12.1"
47
+ __version__ = "0.12.2"
48
48
  version = __version__
49
49
 
50
50
  #
@@ -25,7 +25,7 @@ from enum import Enum
25
25
 
26
26
  class CfgBoundaries:
27
27
  def __init__(self, pdata, boundaries_dict):
28
- self._pedb = pdata.pedb
28
+ self._pedb = pdata._pedb
29
29
  self._boundaries_dict = boundaries_dict
30
30
  self.open_region = self._boundaries_dict.get("open_region", None)
31
31
  self._map_open_region_type()
@@ -60,7 +60,7 @@ class CfgSolderBallsProperties:
60
60
 
61
61
  class CfgComponent:
62
62
  def __init__(self, pdata, **kwargs):
63
- self._pedb = pdata.pedb
63
+ self._pedb = pdata._pedb
64
64
  self._comp_dict = kwargs
65
65
  self.reference_designator = ""
66
66
  self.part_type = self.ComponentType.RESISTOR
@@ -30,14 +30,16 @@ from pyedb.configuration.cfg_ports_sources import CfgPort, CfgSources
30
30
  from pyedb.configuration.cfg_s_parameter_models import CfgSParameterModel
31
31
  from pyedb.configuration.cfg_setup import CfgSetup
32
32
  from pyedb.configuration.cfg_spice_models import CfgSpiceModel
33
+ from pyedb.configuration.cfg_stackup import CfgStackup
34
+ from pyedb.generic.general_methods import pyedb_function_handler
33
35
 
34
36
 
35
37
  class CfgData(object):
36
38
  """Manages configure data."""
37
39
 
38
40
  def __init__(self, pedb, **kwargs):
39
- self.pedb = pedb
40
- self.edb_comps = self.pedb.components.components
41
+ self._pedb = pedb
42
+ self.edb_comps = self._pedb.components.components
41
43
  self.general = CfgGeneral(self, kwargs.get("general", None))
42
44
 
43
45
  self.boundaries = {}
@@ -64,7 +66,7 @@ class CfgData(object):
64
66
  if kwargs.get("setups", None):
65
67
  self.setups = [CfgSetup(self, setup) for setup in kwargs.get("setups", [])]
66
68
 
67
- self.stackup = None
69
+ self.stackup = CfgStackup(self._pedb, data=kwargs.get("stackup", {}))
68
70
 
69
71
  self.s_parameters = [
70
72
  CfgSParameterModel(self, self.general.s_parameter_library, sparam_model)
@@ -78,3 +80,8 @@ class CfgData(object):
78
80
 
79
81
  self.package_definition = None
80
82
  self.operations = None
83
+
84
+ @pyedb_function_handler
85
+ def apply(self):
86
+ """Apply configuration settings to the current design"""
87
+ self.stackup.apply()
@@ -25,7 +25,7 @@ class CfgGeneral:
25
25
  """Manage configuration general settings."""
26
26
 
27
27
  def __init__(self, pdata, general_dict):
28
- self._pedb = pdata.pedb
28
+ self._pedb = pdata._pedb
29
29
  self.spice_model_library = ""
30
30
  self.s_parameter_library = ""
31
31
  if general_dict:
@@ -25,7 +25,7 @@ class CfgNets:
25
25
  """Manage configuration net class."""
26
26
 
27
27
  def __init__(self, pdata, signal_nets=None, power_nets=None):
28
- self._pedb = pdata.pedb
28
+ self._pedb = pdata._pedb
29
29
  self.signal_nets = []
30
30
  self.power_nets = []
31
31
  if signal_nets:
@@ -28,7 +28,7 @@ class CfgPadstacks:
28
28
  """Padstack data class."""
29
29
 
30
30
  def __init__(self, pdata, padstack_dict=None):
31
- self._pedb = pdata.pedb
31
+ self._pedb = pdata._pedb
32
32
  self.definitions = []
33
33
  self.instances = []
34
34
  self._padstack_dict = padstack_dict
@@ -52,7 +52,7 @@ class Definition:
52
52
  """Padstack definition data class."""
53
53
 
54
54
  def __init__(self, pdata, definition_dict):
55
- self._pedb = pdata.pedb
55
+ self._pedb = pdata._pedb
56
56
  self._definition_dict = definition_dict
57
57
  self.name = self._definition_dict.get("name", None)
58
58
  self.hole_diameter = self._definition_dict.get("hole_diameter", None)
@@ -78,7 +78,7 @@ class Instance:
78
78
  """Instance data class."""
79
79
 
80
80
  def __init__(self, pdata, instances_dict):
81
- self._pedb = pdata.pedb
81
+ self._pedb = pdata._pedb
82
82
  self._instances_dict = instances_dict
83
83
  self.name = self._instances_dict.get("name", "")
84
84
  self.backdrill_top = None
@@ -25,7 +25,7 @@ class CfgPinGroup:
25
25
  """Manage configuration pin group class."""
26
26
 
27
27
  def __init__(self, pdata, pingroup_dict):
28
- self._pedb = pdata.pedb
28
+ self._pedb = pdata._pedb
29
29
  self._pingroup_dict = pingroup_dict
30
30
  self.name = self._pingroup_dict.get("name", "")
31
31
  self.reference_designator = self._pingroup_dict.get("reference_designator", "")
@@ -27,7 +27,7 @@ class CfgCircuitElement:
27
27
  @property
28
28
  def pedb(self):
29
29
  """Edb."""
30
- return self._pdata.pedb
30
+ return self._pdata._pedb
31
31
 
32
32
  @pyedb_function_handler
33
33
  def __init__(self, pdata, **kwargs):
@@ -76,7 +76,7 @@ class CfgCircuitElement:
76
76
  search_radius = neg_value.get("search_radius", "5e-3")
77
77
  temp = dict()
78
78
  for i, j in pos_objs.items():
79
- temp[i] = self._pdata.pedb.padstacks.get_reference_pins(j, ref_net, search_radius, max_limit=1)[0]
79
+ temp[i] = self._pdata._pedb.padstacks.get_reference_pins(j, ref_net, search_radius, max_limit=1)[0]
80
80
  self.neg_terminal = {
81
81
  i: j.create_terminal(i + "_ref") if not j.terminal else j.terminal for i, j in temp.items()
82
82
  }
@@ -105,7 +105,7 @@ class CfgCircuitElement:
105
105
  pins.update(get_pin_obj(i))
106
106
  else:
107
107
  if terminal_type == "net":
108
- temp = self._pdata.pedb.components.get_pins(self.reference_designator, terminal_value[0])
108
+ temp = self._pdata._pedb.components.get_pins(self.reference_designator, terminal_value[0])
109
109
  elif terminal_type == "pin_group":
110
110
  pin_group = self.pedb.siwave.pin_groups[terminal_value[0]]
111
111
  temp = pin_group.pins
@@ -119,7 +119,7 @@ class CfgCircuitElement:
119
119
  else:
120
120
  pg_name = f"pg_{self.name}_{self.reference_designator}"
121
121
  pin_names = [i.pin_number for i in pins.values()]
122
- name, temp = self._pdata.pedb.siwave.create_pin_group(self.reference_designator, pin_names, pg_name)
122
+ name, temp = self._pdata._pedb.siwave.create_pin_group(self.reference_designator, pin_names, pg_name)
123
123
  return {name: temp}
124
124
 
125
125
 
@@ -25,7 +25,7 @@ from pathlib import Path
25
25
 
26
26
  class CfgSParameterModel:
27
27
  def __init__(self, pdata, path_lib, sparam_dict):
28
- self._pedb = pdata.pedb
28
+ self._pedb = pdata._pedb
29
29
  self.path_libraries = path_lib
30
30
  self._sparam_dict = sparam_dict
31
31
  self.name = self._sparam_dict.get("name", "")
@@ -89,7 +89,7 @@ class DcIrSettings:
89
89
 
90
90
  class CfgSetup:
91
91
  def __init__(self, pdata, setup_dict=None):
92
- self._pedb = pdata.pedb
92
+ self._pedb = pdata._pedb
93
93
  self._setup_dict = None
94
94
  self.name = "PyEDB_setup"
95
95
  self.type = self.SetupType.HFSS
@@ -25,7 +25,7 @@ from pathlib import Path
25
25
 
26
26
  class CfgSpiceModel:
27
27
  def __init__(self, pdata, path_lib, spice_dict):
28
- self._pedb = pdata.pedb
28
+ self._pedb = pdata._pedb
29
29
  self.path_libraries = path_lib
30
30
  self._spice_dict = spice_dict
31
31
  self.name = self._spice_dict.get("name", "")
@@ -0,0 +1,135 @@
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
+
24
+ from pyedb.generic.general_methods import pyedb_function_handler
25
+
26
+
27
+ class CfgStackup:
28
+ def __init__(self, pedb, data):
29
+ self._pedb = pedb
30
+
31
+ self.materials = [CfgMaterial(self._pedb, **mat) for mat in data.get("materials", [])]
32
+ self.layers = [CfgLayer(self._pedb, **lay) for lay in data.get("layers", [])]
33
+
34
+ @pyedb_function_handler
35
+ def apply(self):
36
+ """Apply configuration settings to the current design"""
37
+ if len(self.materials):
38
+ self.__apply_materials()
39
+ if len(self.layers):
40
+ self.__apply_layers()
41
+
42
+ @pyedb_function_handler
43
+ def __apply_layers(self):
44
+ """Apply layer settings to the current design"""
45
+ layers = list()
46
+ layers.extend(self.layers)
47
+ input_signal_layers = [i for i in layers if i.type.lower() == "signal"]
48
+ if not len(input_signal_layers) == len(self._pedb.stackup.signal_layers):
49
+ self._pedb.logger.error("Input signal layer count do not match.")
50
+ return False
51
+
52
+ removal_list = []
53
+ lc_signal_layers = []
54
+ for name, obj in self._pedb.stackup.all_layers.items():
55
+ if obj.type == "dielectric":
56
+ removal_list.append(name)
57
+ elif obj.type == "signal":
58
+ lc_signal_layers.append(obj.id)
59
+ for l in removal_list:
60
+ self._pedb.stackup.remove_layer(l)
61
+
62
+ # update all signal layers
63
+ id_name = {i[0]: i[1] for i in self._pedb.stackup.layers_by_id}
64
+ signal_idx = 0
65
+ for l in layers:
66
+ if l.type == "signal":
67
+ layer_id = lc_signal_layers[signal_idx]
68
+ layer_name = id_name[layer_id]
69
+ attrs = {
70
+ i: j for i, j in l.__dict__.items() if not i.startswith("_") and isinstance(j, (int, float, str))
71
+ }
72
+ self._pedb.stackup.layers[layer_name].update(**attrs)
73
+ signal_idx = signal_idx + 1
74
+
75
+ # add all dielectric layers. Dielectric layers must be added last. Otherwise,
76
+ # dielectric layer will occupy signal and document layer id.
77
+ prev_layer_clone = None
78
+ l = layers.pop(0)
79
+ if l.type == "signal":
80
+ prev_layer_clone = self._pedb.stackup.layers[l.name]
81
+ else:
82
+ attrs = {i: j for i, j in l.__dict__.items() if not i.startswith("_") and isinstance(j, (int, float, str))}
83
+ prev_layer_clone = self._pedb.stackup.add_layer_top(**attrs)
84
+ for idx, l in enumerate(layers):
85
+ if l.type == "dielectric":
86
+ attrs = {
87
+ i: j for i, j in l.__dict__.items() if not i.startswith("_") and isinstance(j, (int, float, str))
88
+ }
89
+ prev_layer_clone = self._pedb.stackup.add_layer_below(base_layer_name=prev_layer_clone.name, **attrs)
90
+ elif l.type == "signal":
91
+ prev_layer_clone = self._pedb.stackup.layers[l.name]
92
+
93
+ @pyedb_function_handler
94
+ def __apply_materials(self):
95
+ """Apply material settings to the current design"""
96
+ materials_in_db = {i.lower(): i for i, _ in self._pedb.materials.materials.items()}
97
+ for mat_in_cfg in self.materials:
98
+ if mat_in_cfg.name.lower() in materials_in_db:
99
+ self._pedb.materials.delete_material(materials_in_db[mat_in_cfg.name.lower()])
100
+
101
+ attrs = {
102
+ i: j
103
+ for i, j in mat_in_cfg.__dict__.items()
104
+ if not i.startswith("_") and isinstance(j, (int, float, str))
105
+ }
106
+ mat = self._pedb.materials.add_material(**attrs)
107
+
108
+
109
+ class CfgMaterial:
110
+ def __init__(self, pedb, **kwargs):
111
+ self._pedb = pedb
112
+ self.name = kwargs.get("name")
113
+ self.permittivity = kwargs.get("permittivity", None)
114
+ self.conductivity = kwargs.get("conductivity", None)
115
+ self.dielectric_loss_tangent = kwargs.get("dielectric_loss_tangent", None)
116
+ self.magnetic_loss_tangent = kwargs.get("magnetic_loss_tangent", None)
117
+ self.mass_density = kwargs.get("mass_density", None)
118
+ self.permeability = kwargs.get("permeability", None)
119
+ self.poisson_ratio = kwargs.get("poisson_ratio", None)
120
+ self.specific_heat = kwargs.get("specific_heat", None)
121
+ self.thermal_conductivity = kwargs.get("thermal_conductivity", None)
122
+ self.youngs_modulus = kwargs.get("youngs_modulus", None)
123
+ self.thermal_expansion_coefficient = kwargs.get("thermal_expansion_coefficient", None)
124
+
125
+
126
+ class CfgLayer:
127
+ def __init__(self, pedb, **kwargs):
128
+ self._pedb = pedb
129
+ self.name = kwargs.get("name", None)
130
+ self.type = kwargs.get("type", None)
131
+ self.material = kwargs.get("material", None)
132
+ self.fill_material = kwargs.get("fill_material", None)
133
+ self.thickness = kwargs.get("thickness", None)
134
+ self.etch_factor = kwargs.get("etch_factor", None)
135
+ self.lower_elevation = kwargs.get("lower_elevation", None)
@@ -132,8 +132,6 @@ class Configuration:
132
132
  port.create()
133
133
 
134
134
  # Configure sources
135
- """if "sources" in self.data:
136
- self._load_sources()"""
137
135
  for source in self.cfg_data.sources:
138
136
  source.create()
139
137
 
@@ -142,8 +140,7 @@ class Configuration:
142
140
  setup.apply()
143
141
 
144
142
  # Configure stackup
145
- if "stackup" in self.data:
146
- self._load_stackup()
143
+ self.cfg_data.stackup.apply()
147
144
 
148
145
  # Configure S-parameter
149
146
  for s_parameter_model in self.cfg_data.s_parameters:
@@ -11,6 +11,7 @@ from __future__ import absolute_import # noreorder
11
11
  import os
12
12
  import pkgutil
13
13
  import sys
14
+ import time
14
15
  import warnings
15
16
 
16
17
  from pyedb.dotnet.clr_module import _clr
@@ -362,9 +363,29 @@ class Siwave(object): # pragma no cover
362
363
  ``True`` when successful, ``False`` when failed.
363
364
 
364
365
  """
366
+ if not os.path.splitext(file_path)[-1] == ".htm":
367
+ fpath = file_path + ".htm"
368
+ else:
369
+ fpath = file_path
365
370
  self.oproject.ScrExportDcSimReportScaling("All", "All", -1, -1, False)
366
- flag = self.oproject.ScrExportDcSimReport(simulation_name, background_color, file_path)
367
- return True if flag == 0 else False
371
+ flag = self.oproject.ScrExportDcSimReport(simulation_name, background_color, fpath)
372
+ if flag == 0:
373
+ while True:
374
+ self._logger.info(f"Exporting Siwave DC simulation report to {fpath}.")
375
+ if os.path.isfile(fpath):
376
+ break
377
+ else:
378
+ time.sleep(1)
379
+ os.path.getsize(fpath)
380
+ while True:
381
+ file_size = os.path.getsize(fpath)
382
+ if file_size > 0:
383
+ break
384
+ else:
385
+ time.sleep(1)
386
+ return True
387
+ else:
388
+ return False
368
389
 
369
390
  @pyedb_function_handler
370
391
  def run_dc_simulation(self, export_dc_power_data_to_icepak=False):
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes