pyedb 0.7.0__tar.gz → 0.7.1__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 (134) hide show
  1. {pyedb-0.7.0 → pyedb-0.7.1}/PKG-INFO +31 -53
  2. {pyedb-0.7.0 → pyedb-0.7.1}/README.md +1 -1
  3. {pyedb-0.7.0 → pyedb-0.7.1}/pyproject.toml +30 -51
  4. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/__init__.py +1 -1
  5. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/clr_module.py +1 -1
  6. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb.py +6 -7
  7. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/components.py +11 -11
  8. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/configuration.py +199 -24
  9. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/component_def.py +9 -0
  10. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/package_def.py +27 -0
  11. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/components_data.py +2 -1
  12. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +14 -13
  13. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py +2 -2
  14. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +8 -3
  15. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +6 -5
  16. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +12 -11
  17. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/siwave_simulation_setup_data.py +1 -1
  18. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/sources.py +10 -0
  19. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/layout.py +59 -0
  20. pyedb-0.7.1/src/pyedb/dotnet/edb_core/materials.py +1056 -0
  21. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/padstack.py +57 -6
  22. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/siwave.py +9 -2
  23. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/stackup.py +108 -94
  24. pyedb-0.7.1/src/pyedb/dotnet/edb_core/utilities/__init__.py +3 -0
  25. pyedb-0.7.1/src/pyedb/dotnet/edb_core/utilities/heatsink.py +69 -0
  26. pyedb-0.7.1/src/pyedb/exceptions.py +6 -0
  27. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/filesystem.py +7 -3
  28. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/general_methods.py +4 -0
  29. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/process.py +4 -1
  30. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/settings.py +10 -0
  31. pyedb-0.7.0/src/pyedb/dotnet/edb_core/materials.py +0 -960
  32. {pyedb-0.7.0 → pyedb-0.7.1}/LICENSE +0 -0
  33. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/__init__.py +0 -0
  34. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/application/Variables.py +0 -0
  35. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/application/__init__.py +0 -0
  36. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
  37. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
  38. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
  39. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
  40. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
  41. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -0
  42. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
  43. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
  44. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
  45. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
  46. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/dotnet/layout.py +0 -0
  47. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
  48. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
  49. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/connectable.py +0 -0
  50. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
  51. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
  52. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
  53. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +0 -0
  54. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/obj_base.py +0 -0
  55. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
  56. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
  57. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/terminals.py +0 -0
  58. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
  59. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
  60. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/general.py +0 -0
  61. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/hfss.py +0 -0
  62. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/layout_validation.py +0 -0
  63. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
  64. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/nets.py +0 -0
  65. {pyedb-0.7.0/src/pyedb/dotnet/edb_core/edb_data → pyedb-0.7.1/src/pyedb/dotnet/edb_core/utilities}/simulation_setup.py +0 -0
  66. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/edb_logger.py +0 -0
  67. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/__init__.py +0 -0
  68. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/constants.py +0 -0
  69. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/data_handlers.py +0 -0
  70. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/design_types.py +0 -0
  71. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/plot.py +0 -0
  72. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/__init__.py +0 -0
  73. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/bom/__init__.py +0 -0
  74. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/bom/bom.py +0 -0
  75. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
  76. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
  77. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/bom/refdes.py +0 -0
  78. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/__init__.py +0 -0
  79. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/color.py +0 -0
  80. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/content.py +0 -0
  81. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
  82. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
  83. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
  84. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/entry_color.py +0 -0
  85. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/entry_line.py +0 -0
  86. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/fill.py +0 -0
  87. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
  88. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
  89. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
  90. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
  91. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
  92. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
  93. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
  94. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
  95. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
  96. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
  97. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
  98. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
  99. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
  100. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
  101. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
  102. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
  103. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
  104. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
  105. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
  106. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
  107. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
  108. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
  109. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
  110. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
  111. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
  112. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
  113. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
  114. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
  115. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
  116. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/spec.py +0 -0
  117. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/history_record.py +0 -0
  118. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ipc2581.py +0 -0
  119. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/logistic_header.py +0 -0
  120. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/__init__.py +0 -0
  121. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
  122. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/downloads.py +0 -0
  123. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/misc.py +0 -0
  124. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
  125. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
  126. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  127. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
  128. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
  129. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
  130. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
  131. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
  132. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/utilities.py +0 -0
  133. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/modeler/geometry_operators.py +0 -0
  134. {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/siwave.py +0 -0
@@ -1,73 +1,51 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyedb
3
- Version: 0.7.0
3
+ Version: 0.7.1
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>
7
- Requires-Python: >=3.7,<4
7
+ Requires-Python: >=3.8,<4
8
8
  Description-Content-Type: text/markdown
9
9
  Classifier: Development Status :: 4 - Beta
10
10
  Classifier: Intended Audience :: Science/Research
11
11
  Classifier: Topic :: Scientific/Engineering :: Information Analysis
12
12
  Classifier: License :: OSI Approved :: MIT License
13
13
  Classifier: Operating System :: OS Independent
14
- Classifier: Programming Language :: Python :: 3.7
15
14
  Classifier: Programming Language :: Python :: 3.8
16
15
  Classifier: Programming Language :: Python :: 3.9
17
16
  Classifier: Programming Language :: Python :: 3.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
- Requires-Dist: cffi == 1.15.1;platform_system=='Linux' and python_version == '3.7'
20
- Requires-Dist: cffi == 1.16.0;platform_system=='Linux' and python_version > '3.7'
18
+ Requires-Dist: cffi>=1.16.0,<1.17; platform_system=='Linux'
21
19
  Requires-Dist: pywin32 >= 303;platform_system=='Windows'
22
20
  Requires-Dist: ansys-pythonnet >= 3.1.0rc3
23
21
  Requires-Dist: dotnetcore2 ==3.1.23;platform_system=='Linux'
24
- Requires-Dist: ansys-sphinx-theme==0.13.1 ; extra == "doc"
25
- Requires-Dist: imageio==2.34.0 ; extra == "doc"
26
- Requires-Dist: imageio-ffmpeg==0.4.9 ; extra == "doc"
27
- Requires-Dist: ipython==8.13.0 ; extra == "doc" and ( python_version < '3.9')
28
- Requires-Dist: ipython==8.22.2 ; extra == "doc" and ( python_version >= '3.9')
29
- Requires-Dist: ipywidgets==8.1.1 ; extra == "doc"
30
- Requires-Dist: jupyterlab==4.1.3 ; extra == "doc"
31
- Requires-Dist: matplotlib==3.5.3 ; extra == "doc" and ( python_version == '3.7')
32
- Requires-Dist: matplotlib==3.7.3 ; extra == "doc" and ( python_version == '3.8')
33
- Requires-Dist: matplotlib==3.8.2 ; extra == "doc" and ( python_version > '3.8')
34
- Requires-Dist: nbsphinx==0.9.3 ; extra == "doc"
35
- Requires-Dist: numpydoc==1.5.0 ; extra == "doc" and ( python_version == '3.7')
36
- Requires-Dist: numpydoc==1.6.0 ; extra == "doc" and ( python_version > '3.7')
37
- Requires-Dist: pypandoc==1.13 ; extra == "doc"
38
- Requires-Dist: pytest-sphinx==0.5.0 ; extra == "doc"
39
- Requires-Dist: recommonmark==0.7.1 ; extra == "doc"
40
- Requires-Dist: Sphinx==7.1.2 ; extra == "doc" and ( python_version <= '3.9')
41
- Requires-Dist: Sphinx==7.2.6 ; extra == "doc" and ( python_version >= '3.9')
42
- Requires-Dist: sphinx-autobuild==2021.3.14 ; extra == "doc"
43
- Requires-Dist: sphinx-autodoc-typehints==1.24.0 ; extra == "doc"
44
- Requires-Dist: sphinx-copybutton==0.5.2 ; extra == "doc"
45
- Requires-Dist: sphinx-gallery==0.14.0 ; extra == "doc"
46
- Requires-Dist: sphinx-notfound-page==1.0.0 ; extra == "doc"
47
- Requires-Dist: sphinxcontrib-websupport==1.2.4 ; extra == "doc" and ( python_version <= '3.9')
48
- Requires-Dist: sphinxcontrib-websupport==1.2.5 ; extra == "doc" and ( python_version <= '3.7')
49
- Requires-Dist: sphinx_design ; extra == "doc"
50
- Requires-Dist: sphinx_jinja ; extra == "doc"
51
- Requires-Dist: matplotlib==3.5.3 ; extra == "full" and ( python_version == '3.7')
52
- Requires-Dist: matplotlib==3.7.3 ; extra == "full" and ( python_version == '3.8')
53
- Requires-Dist: matplotlib==3.8.2 ; extra == "full" and ( python_version > '3.8')
54
- Requires-Dist: numpy==1.21.6 ; extra == "full" and ( python_version <= '3.9')
55
- Requires-Dist: numpy==1.26.0 ; extra == "full" and ( python_version > '3.9')
56
- Requires-Dist: pandas==1.3.5 ; extra == "full" and ( python_version == '3.7')
57
- Requires-Dist: pandas==2.0.3 ; extra == "full" and ( python_version == '3.9')
58
- Requires-Dist: pandas==2.1.1 ; extra == "full" and ( python_version > '3.9')
59
- Requires-Dist: matplotlib==3.5.3 ; extra == "tests" and ( python_version == '3.7')
60
- Requires-Dist: matplotlib==3.7.3 ; extra == "tests" and ( python_version == '3.8')
61
- Requires-Dist: matplotlib==3.8.2 ; extra == "tests" and ( python_version > '3.8')
62
- Requires-Dist: numpy==1.21.6 ; extra == "tests" and ( python_version <= '3.9')
63
- Requires-Dist: numpy==1.26.0 ; extra == "tests" and ( python_version > '3.9')
64
- Requires-Dist: mock ; extra == "tests"
65
- Requires-Dist: pandas==1.3.5 ; extra == "tests" and ( python_version == '3.7')
66
- Requires-Dist: pandas==2.0.3 ; extra == "tests" and ( python_version == '3.8')
67
- Requires-Dist: pandas==2.1.1 ; extra == "tests" and ( python_version > '3.9')
68
- Requires-Dist: pytest==7.4.3 ; extra == "tests"
69
- Requires-Dist: pytest-cov==4.1.0 ; extra == "tests"
70
- Requires-Dist: pytest-xdist==3.3.1 ; extra == "tests"
22
+ Requires-Dist: pydantic>=2.6.4,<2.7
23
+ Requires-Dist: toml == 0.10.2
24
+ Requires-Dist: ansys-sphinx-theme>=0.10.0,<0.15 ; extra == "doc"
25
+ Requires-Dist: imageio>=2.30.0,<2.35 ; extra == "doc"
26
+ Requires-Dist: ipython>=8.13.0,<8.24 ; extra == "doc"
27
+ Requires-Dist: jupyterlab>=4.0.0,<4.3 ; extra == "doc"
28
+ Requires-Dist: matplotlib>=3.5.0,<3.9 ; extra == "doc"
29
+ Requires-Dist: nbsphinx>=0.9.0,<0.10 ; extra == "doc"
30
+ Requires-Dist: numpydoc>=1.5.0,<1.8 ; extra == "doc"
31
+ Requires-Dist: pypandoc>=1.10.0,<1.14 ; extra == "doc"
32
+ Requires-Dist: recommonmark ; extra == "doc"
33
+ Requires-Dist: Sphinx>=7.1.0,<7.3 ; extra == "doc"
34
+ Requires-Dist: sphinx-autobuild==2021.3.14 ; extra == "doc" and ( python_version == '3.8')
35
+ Requires-Dist: sphinx-autobuild==2024.2.4 ; extra == "doc" and ( python_version > '3.8')
36
+ Requires-Dist: sphinx-copybutton>=0.5.0,<0.6 ; extra == "doc"
37
+ Requires-Dist: sphinx-gallery>=0.14.0,<0.16 ; extra == "doc"
38
+ Requires-Dist: sphinx_design>=0.4.0,<0.6 ; extra == "doc"
39
+ Requires-Dist: matplotlib>=3.5.0,<3.9 ; extra == "full"
40
+ Requires-Dist: numpy>=1.20.0,<2 ; extra == "full"
41
+ Requires-Dist: pandas>=1.1.0,<2.3 ; extra == "full"
42
+ Requires-Dist: matplotlib>=3.5.0,<3.9 ; extra == "tests"
43
+ Requires-Dist: numpy>=1.20.0,<2 ; extra == "tests"
44
+ Requires-Dist: mock>=5.1.0,<5.2 ; extra == "tests"
45
+ Requires-Dist: pandas>=1.1.0,<2.3 ; extra == "tests"
46
+ Requires-Dist: pytest>=7.4.0,<8.2 ; extra == "tests"
47
+ Requires-Dist: pytest-cov>=4.0.0,<5.1 ; extra == "tests"
48
+ Requires-Dist: pytest-xdist>=3.5.0,<3.6 ; extra == "tests"
71
49
  Project-URL: Bugs, https://github.com/ansys/pyedb/issues
72
50
  Project-URL: Discussions, https://github.com/ansys/pyedb/discussions
73
51
  Project-URL: Documentation, https://edb.docs.pyansys.com
@@ -87,7 +65,7 @@ Provides-Extra: tests
87
65
  # PyEDB
88
66
 
89
67
  [![PyAnsys](https://img.shields.io/badge/Py-Ansys-ffc107.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABDklEQVQ4jWNgoDfg5mD8vE7q/3bpVyskbW0sMRUwofHD7Dh5OBkZGBgW7/3W2tZpa2tLQEOyOzeEsfumlK2tbVpaGj4N6jIs1lpsDAwMJ278sveMY2BgCA0NFRISwqkhyQ1q/Nyd3zg4OBgYGNjZ2ePi4rB5loGBhZnhxTLJ/9ulv26Q4uVk1NXV/f///////69du4Zdg78lx//t0v+3S88rFISInD59GqIH2esIJ8G9O2/XVwhjzpw5EAam1xkkBJn/bJX+v1365hxxuCAfH9+3b9/+////48cPuNehNsS7cDEzMTAwMMzb+Q2u4dOnT2vWrMHu9ZtzxP9vl/69RVpCkBlZ3N7enoDXBwEAAA+YYitOilMVAAAAAElFTkSuQmCC)](https://docs.pyansys.com/)
90
- [![PythonVersion](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)
68
+ [![PythonVersion](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
91
69
  [![MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
92
70
 
93
71
  ## What is PyEDB?
@@ -8,7 +8,7 @@
8
8
  # PyEDB
9
9
 
10
10
  [![PyAnsys](https://img.shields.io/badge/Py-Ansys-ffc107.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABDklEQVQ4jWNgoDfg5mD8vE7q/3bpVyskbW0sMRUwofHD7Dh5OBkZGBgW7/3W2tZpa2tLQEOyOzeEsfumlK2tbVpaGj4N6jIs1lpsDAwMJ278sveMY2BgCA0NFRISwqkhyQ1q/Nyd3zg4OBgYGNjZ2ePi4rB5loGBhZnhxTLJ/9ulv26Q4uVk1NXV/f///////69du4Zdg78lx//t0v+3S88rFISInD59GqIH2esIJ8G9O2/XVwhjzpw5EAam1xkkBJn/bJX+v1365hxxuCAfH9+3b9/+////48cPuNehNsS7cDEzMTAwMMzb+Q2u4dOnT2vWrMHu9ZtzxP9vl/69RVpCkBlZ3N7enoDXBwEAAA+YYitOilMVAAAAAElFTkSuQmCC)](https://docs.pyansys.com/)
11
- [![PythonVersion](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)
11
+ [![PythonVersion](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
12
12
  [![MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
13
13
 
14
14
  ## What is PyEDB?
@@ -8,7 +8,7 @@ name = "pyedb"
8
8
  dynamic = ["version"]
9
9
  description = "Higher-Level Pythonic Ansys Electronics Data Base"
10
10
  readme = "README.md"
11
- requires-python = ">=3.7,<4"
11
+ requires-python = ">=3.8,<4"
12
12
  license = {file = "LICENSE"}
13
13
  authors = [{name = "ANSYS, Inc.", email = "pyansys.core@ansys.com"}]
14
14
  maintainers = [{name = "PyEDB developers", email = "simon.vandenbrouck@ansys.com"}]
@@ -18,7 +18,6 @@ classifiers = [
18
18
  "Topic :: Scientific/Engineering :: Information Analysis",
19
19
  "License :: OSI Approved :: MIT License",
20
20
  "Operating System :: OS Independent",
21
- "Programming Language :: Python :: 3.7",
22
21
  "Programming Language :: Python :: 3.8",
23
22
  "Programming Language :: Python :: 3.9",
24
23
  "Programming Language :: Python :: 3.10",
@@ -26,66 +25,46 @@ classifiers = [
26
25
  ]
27
26
 
28
27
  dependencies = [
29
- "cffi == 1.15.1;platform_system=='Linux' and python_version == '3.7'",
30
- "cffi == 1.16.0;platform_system=='Linux' and python_version > '3.7'",
28
+ "cffi>=1.16.0,<1.17; platform_system=='Linux'",
31
29
  "pywin32 >= 303;platform_system=='Windows'",
32
30
  "ansys-pythonnet >= 3.1.0rc3",
33
31
  "dotnetcore2 ==3.1.23;platform_system=='Linux'",
32
+ "pydantic>=2.6.4,<2.7",
33
+ "toml == 0.10.2",
34
34
  ]
35
35
 
36
36
  [project.optional-dependencies]
37
37
  tests = [
38
- "matplotlib==3.5.3; python_version == '3.7'",
39
- "matplotlib==3.7.3; python_version == '3.8'",
40
- "matplotlib==3.8.2; python_version > '3.8'",
41
- "numpy==1.21.6; python_version <= '3.9'",
42
- "numpy==1.26.0; python_version > '3.9'",
43
- "mock",
44
- "pandas==1.3.5; python_version == '3.7'",
45
- "pandas==2.0.3; python_version == '3.8'",
46
- "pandas==2.1.1; python_version > '3.9'",
47
- "pytest==7.4.3",
48
- "pytest-cov==4.1.0",
49
- "pytest-xdist==3.3.1",
38
+ "matplotlib>=3.5.0,<3.9",
39
+ "numpy>=1.20.0,<2",
40
+ "mock>=5.1.0,<5.2",
41
+ "pandas>=1.1.0,<2.3",
42
+ "pytest>=7.4.0,<8.2",
43
+ "pytest-cov>=4.0.0,<5.1",
44
+ "pytest-xdist>=3.5.0,<3.6",
50
45
  ]
51
46
  doc = [
52
- "ansys-sphinx-theme==0.13.1",
53
- "imageio==2.34.0",
54
- "imageio-ffmpeg==0.4.9",
55
- "ipython==8.13.0; python_version < '3.9'",
56
- "ipython==8.22.2; python_version >= '3.9'",
57
- "ipywidgets==8.1.1",
58
- "jupyterlab==4.1.3",
59
- "matplotlib==3.5.3; python_version == '3.7'",
60
- "matplotlib==3.7.3; python_version == '3.8'",
61
- "matplotlib==3.8.2; python_version > '3.8'",
62
- "nbsphinx==0.9.3",
63
- "numpydoc==1.5.0; python_version == '3.7'",
64
- "numpydoc==1.6.0; python_version > '3.7'",
65
- "pypandoc==1.13",
66
- "pytest-sphinx==0.5.0",
67
- "recommonmark==0.7.1",
68
- "Sphinx==7.1.2; python_version <= '3.9'",
69
- "Sphinx==7.2.6; python_version >= '3.9'",
70
- "sphinx-autobuild==2021.3.14",
71
- "sphinx-autodoc-typehints==1.24.0",
72
- "sphinx-copybutton==0.5.2",
73
- "sphinx-gallery==0.14.0",
74
- "sphinx-notfound-page==1.0.0",
75
- "sphinxcontrib-websupport==1.2.4; python_version <= '3.9'",
76
- "sphinxcontrib-websupport==1.2.5; python_version <= '3.7'",
77
- "sphinx_design",
78
- "sphinx_jinja",
47
+ "ansys-sphinx-theme>=0.10.0,<0.15",
48
+ "imageio>=2.30.0,<2.35",
49
+ "ipython>=8.13.0,<8.24",
50
+ "jupyterlab>=4.0.0,<4.3",
51
+ "matplotlib>=3.5.0,<3.9",
52
+ "nbsphinx>=0.9.0,<0.10",
53
+ "numpydoc>=1.5.0,<1.8",
54
+ "pypandoc>=1.10.0,<1.14",
55
+ # NOTE: Remove recommonmark once examples are reworked.
56
+ "recommonmark",
57
+ "Sphinx>=7.1.0,<7.3",
58
+ "sphinx-autobuild==2021.3.14; python_version == '3.8'",
59
+ "sphinx-autobuild==2024.2.4; python_version > '3.8'",
60
+ "sphinx-copybutton>=0.5.0,<0.6",
61
+ "sphinx-gallery>=0.14.0,<0.16",
62
+ "sphinx_design>=0.4.0,<0.6",
79
63
  ]
80
64
  full = [
81
- "matplotlib==3.5.3; python_version == '3.7'",
82
- "matplotlib==3.7.3; python_version == '3.8'",
83
- "matplotlib==3.8.2; python_version > '3.8'",
84
- "numpy==1.21.6; python_version <= '3.9'",
85
- "numpy==1.26.0; python_version > '3.9'",
86
- "pandas==1.3.5; python_version == '3.7'",
87
- "pandas==2.0.3; python_version == '3.9'",
88
- "pandas==2.1.1; python_version > '3.9'",
65
+ "matplotlib>=3.5.0,<3.9",
66
+ "numpy>=1.20.0,<2",
67
+ "pandas>=1.1.0,<2.3",
89
68
  ]
90
69
 
91
70
 
@@ -44,7 +44,7 @@ deprecation_warning()
44
44
  #
45
45
 
46
46
  pyedb_path = os.path.dirname(__file__)
47
- __version__ = "0.7.0"
47
+ __version__ = "0.7.1"
48
48
  version = __version__
49
49
 
50
50
  #
@@ -83,7 +83,7 @@ except ImportError: # pragma: no cover
83
83
  )
84
84
  edb_initialized = False
85
85
  elif sys.version[0] == 3 and sys.version[1] < 7:
86
- warnings.warn("EDB requires Linux Python 3.7 or later.")
86
+ warnings.warn("EDB requires Linux Python 3.8 or later.")
87
87
  _clr = None
88
88
  String = None
89
89
  Double = None
@@ -848,12 +848,11 @@ class Edb(Database):
848
848
  Examples
849
849
  --------
850
850
  >>> from pyedb.dotnet.edb import Edb
851
- >>> edbapp = Edb("myproject.aedb")
852
- >>> edbapp.materials["FR4_epoxy"].conductivity = 1
853
- >>> edbapp.materials.add_debye_material("My_Debye2", 5, 3, 0.02, 0.05, 1e5, 1e9)
854
- >>> edbapp.materials.add_djordjevicsarkar_material("MyDjord2", 3.3, 0.02, 3.3)
851
+ >>> edbapp = Edb()
852
+ >>> edbapp.materials.add_material("air", permittivity=1.0)
853
+ >>> edbapp.materials.add_debye_material("debye_mat", 5, 3, 0.02, 0.05, 1e5, 1e9)
854
+ >>> edbapp.materials.add_djordjevicsarkar_material("djord_mat", 3.3, 0.02, 3.3)
855
855
  """
856
-
857
856
  if not self._materials and self.active_db:
858
857
  self._materials = Materials(self)
859
858
  return self._materials
@@ -4142,8 +4141,8 @@ class Edb(Database):
4142
4141
  loss_tg_variable = "$loss_tangent_{}".format(mat_name)
4143
4142
  loss_tg_variable = self._clean_string_for_variable_name(loss_tg_variable)
4144
4143
  if not loss_tg_variable in self.variables:
4145
- self.add_design_variable(loss_tg_variable, material.loss_tangent)
4146
- material.loss_tangent = loss_tg_variable
4144
+ self.add_design_variable(loss_tg_variable, material.dielectric_loss_tangent)
4145
+ material.dielectric_loss_tangent = loss_tg_variable
4147
4146
  parameters.append(loss_tg_variable)
4148
4147
  else:
4149
4148
  sigma_variable = "$sigma_{}".format(mat_name)
@@ -1408,7 +1408,7 @@ class Components(object):
1408
1408
 
1409
1409
  @pyedb_function_handler()
1410
1410
  def create_rlc_component(
1411
- self, pins, component_name="", r_value=1.0, c_value=1e-9, l_value=1e-9, is_parallel=False
1411
+ self, pins, component_name="", r_value=None, c_value=None, l_value=None, is_parallel=False
1412
1412
  ): # pragma: no cover
1413
1413
  """Create physical Rlc component.
1414
1414
 
@@ -1454,9 +1454,9 @@ class Components(object):
1454
1454
  placement_layer=None,
1455
1455
  component_part_name=None,
1456
1456
  is_rlc=False,
1457
- r_value=0,
1458
- c_value=0,
1459
- l_value=0,
1457
+ r_value=None,
1458
+ c_value=None,
1459
+ l_value=None,
1460
1460
  is_parallel=False,
1461
1461
  ):
1462
1462
  """Create a component from pins.
@@ -1523,21 +1523,21 @@ class Components(object):
1523
1523
  if is_rlc and len(pins) == 2:
1524
1524
  rlc = self._edb.utility.utility.Rlc()
1525
1525
  rlc.IsParallel = is_parallel
1526
- if r_value:
1526
+ if r_value is None:
1527
+ rlc.REnabled = False
1528
+ else:
1527
1529
  rlc.REnabled = True
1528
1530
  rlc.R = self._get_edb_value(r_value)
1531
+ if l_value is None:
1532
+ rlc.LEnabled = False
1529
1533
  else:
1530
- rlc.REnabled = False
1531
- if l_value:
1532
1534
  rlc.LEnabled = True
1533
1535
  rlc.L = self._get_edb_value(l_value)
1536
+ if c_value is None:
1537
+ rlc.CEnabled = False
1534
1538
  else:
1535
- rlc.LEnabled = False
1536
- if c_value:
1537
1539
  rlc.CEnabled = True
1538
1540
  rlc.C = self._get_edb_value(c_value)
1539
- else:
1540
- rlc.CEnabled = False
1541
1541
  if rlc.REnabled and not rlc.CEnabled and not rlc.CEnabled:
1542
1542
  new_cmp.SetComponentType(self._edb.definition.ComponentType.Resistor)
1543
1543
  elif rlc.CEnabled and not rlc.REnabled and not rlc.LEnabled:
@@ -21,17 +21,13 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  import json
24
+ import os
24
25
  from pathlib import Path
25
26
 
26
- from pyedb.generic.general_methods import pyedb_function_handler
27
-
27
+ import toml
28
28
 
29
- def load_json(config_file):
30
- if isinstance(config_file, (str, Path)):
31
- with open(config_file, "r") as f:
32
- return json.load(f)
33
- elif isinstance(config_file, dict):
34
- return config_file
29
+ from pyedb.dotnet.edb_core.definition.package_def import PackageDef
30
+ from pyedb.generic.general_methods import pyedb_function_handler
35
31
 
36
32
 
37
33
  class Configuration:
@@ -46,12 +42,12 @@ class Configuration:
46
42
 
47
43
  @pyedb_function_handler
48
44
  def load(self, config_file, append=True, apply_file=False, output_file=None, open_at_the_end=True):
49
- """Import configuration settings from a JSON file.
45
+ """Import configuration settings from a configure file.
50
46
 
51
47
  Parameters
52
48
  ----------
53
- config_file : str
54
- Full path to json file.
49
+ config_file : str, dict
50
+ Full path to configure file in JSON or TOML format. Dictionary is also supported.
55
51
  append : bool, optional
56
52
  Whether if the new file will append to existing properties or the properties will be cleared before import.
57
53
  Default is ``True`` to keep stored properties
@@ -67,12 +63,29 @@ class Configuration:
67
63
  dict
68
64
  Config dictionary.
69
65
  """
66
+ if isinstance(config_file, dict):
67
+ data = config_file
68
+ elif os.path.isfile(config_file):
69
+ with open(config_file, "r") as f:
70
+ if config_file.endswith(".json"):
71
+ data = json.load(f)
72
+ elif config_file.endswith(".toml"):
73
+ data = toml.load(f)
74
+ else: # pragma: no cover
75
+ return False
70
76
 
71
- data = load_json(config_file)
72
- if not append:
77
+ if not append: # pragma: no cover
73
78
  self.data = {}
74
79
  for k, v in data.items():
75
- self.data[k] = v
80
+ if k in self.data:
81
+ if isinstance(v, list):
82
+ self.data[k].extend(v)
83
+ elif isinstance(v, dict): # pragma: no cover
84
+ self.data[k].update(v)
85
+ else: # pragma: no cover
86
+ self.data[k] = v
87
+ else:
88
+ self.data[k] = v
76
89
  if apply_file:
77
90
  original_file = self._pedb.edbpath
78
91
  if output_file:
@@ -98,6 +111,10 @@ class Configuration:
98
111
  if "general" in self.data:
99
112
  self._load_general()
100
113
 
114
+ # Configure boundary settings
115
+ if "boundaries" in self.data:
116
+ self._load_boundaries()
117
+
101
118
  # Configure nets
102
119
  if "nets" in self.data:
103
120
  self._load_nets()
@@ -106,6 +123,10 @@ class Configuration:
106
123
  if "components" in self.data:
107
124
  self._load_components()
108
125
 
126
+ # Configure padstacks
127
+ if "padstacks" in self.data:
128
+ self._load_padstacks()
129
+
109
130
  # Configure pin groups
110
131
  if "pin_groups" in self.data:
111
132
  self._load_pin_groups()
@@ -134,6 +155,14 @@ class Configuration:
134
155
  if "spice_models" in self.data:
135
156
  self._load_spice_models()
136
157
 
158
+ # Configure package definitions
159
+ if "package_definitions" in self.data:
160
+ self._load_package_def()
161
+
162
+ # Configure operations
163
+ if "operations" in self.data:
164
+ self._load_operations()
165
+
137
166
  return True
138
167
 
139
168
  @pyedb_function_handler
@@ -253,18 +282,20 @@ class Configuration:
253
282
  pos_terminal = ""
254
283
  if "pin_group" in positive_terminal_json:
255
284
  pin_group = self._pedb.siwave.pin_groups[positive_terminal_json["pin_group"]]
256
- pos_terminal = pin_group.get_terminal(pin_group.name, True)
285
+ port_name = pin_group.name if "name" not in port else port["name"]
286
+ pos_terminal = pin_group.get_terminal(port_name, True)
287
+
257
288
  else:
258
289
  ref_designator = port["reference_designator"]
259
290
  comp_layout = self._components[ref_designator]
260
291
 
261
292
  if "pin" in positive_terminal_json:
262
293
  pin_name = positive_terminal_json["pin"]
263
- port_name = "{}_{}".format(ref_designator, pin_name)
294
+ port_name = "{}_{}".format(ref_designator, pin_name) if "name" not in port else port["name"]
264
295
  pos_terminal = comp_layout.pins[pin_name].get_terminal(port_name, True)
265
296
  else: # Net
266
297
  net_name = positive_terminal_json["net"]
267
- port_name = "{}_{}".format(ref_designator, net_name)
298
+ port_name = "{}_{}".format(ref_designator, net_name) if "name" not in port else port["name"]
268
299
  if port_type == "circuit":
269
300
  pg_name = "pg_{}".format(port_name)
270
301
  _, pg = self._pedb.siwave.create_pin_group_on_net(ref_designator, net_name, pg_name)
@@ -389,7 +420,10 @@ class Configuration:
389
420
  else:
390
421
  self._pedb.logger.warning("Setup {} already existing. Editing it.".format(name))
391
422
  edb_setup = self._pedb.setups[name]
392
- edb_setup.si_slider_position = setup["si_slider_position"]
423
+ if "si_slider_position" in setup:
424
+ edb_setup.si_slider_position = setup["si_slider_position"]
425
+ if "pi_slider_position" in setup:
426
+ edb_setup.pi_slider_position = setup["pi_slider_position"]
393
427
 
394
428
  if "freq_sweep" in setup:
395
429
  for fsweep in setup["freq_sweep"]:
@@ -476,14 +510,23 @@ class Configuration:
476
510
  comp_def_name = sp["component_definition"]
477
511
  comp_def = self._pedb.definitions.component[comp_def_name]
478
512
  comp_def.add_n_port_model(fpath, sp_name)
513
+ comp_list = dict()
479
514
  if sp["apply_to_all"]:
480
- for refdes, comp in comp_def.components.items():
481
- if refdes not in sp["components"]:
482
- comp.use_s_parameter_model(sp_name)
515
+ comp_list.update(
516
+ {refdes: comp for refdes, comp in comp_def.components.items() if refdes not in sp["components"]}
517
+ )
483
518
  else:
484
- for refdes, comp in comp_def.components.items():
485
- if refdes in sp["components"]:
486
- comp.use_s_parameter_model(sp_name)
519
+ comp_list.update(
520
+ {refdes: comp for refdes, comp in comp_def.components.items() if refdes in sp["components"]}
521
+ )
522
+
523
+ for refdes, comp in comp_list.items():
524
+ if "reference_net_per_component" in sp:
525
+ ref_net_per_comp = sp["reference_net_per_component"]
526
+ ref_net = ref_net_per_comp[refdes] if refdes in ref_net_per_comp else sp["reference_net"]
527
+ else:
528
+ ref_net = sp["reference_net"]
529
+ comp.use_s_parameter_model(sp_name, reference_net=ref_net)
487
530
 
488
531
  @pyedb_function_handler
489
532
  def _load_spice_models(self):
@@ -536,3 +579,135 @@ class Configuration:
536
579
  self._s_parameter_library = general["s_parameter_library"]
537
580
  if "spice_model_library" in general:
538
581
  self._spice_model_library = general["spice_model_library"]
582
+
583
+ @pyedb_function_handler
584
+ def _load_boundaries(self):
585
+ """Imports boundary information from JSON."""
586
+ boundaries = self.data["boundaries"]
587
+
588
+ open_region = boundaries.get("open_region", None)
589
+ if open_region:
590
+ self._pedb.hfss.hfss_extent_info.use_open_region = open_region
591
+
592
+ open_region_type = boundaries.get("open_region_type", None)
593
+ if open_region_type:
594
+ self._pedb.hfss.hfss_extent_info.open_region_type = open_region_type
595
+
596
+ pml_visible = boundaries.get("pml_visible", None)
597
+ if pml_visible:
598
+ self._pedb.hfss.hfss_extent_info.is_pml_visible = pml_visible
599
+
600
+ pml_operation_frequency = boundaries.get("pml_operation_frequency", None)
601
+ if pml_operation_frequency:
602
+ self._pedb.hfss.hfss_extent_info.operating_freq = pml_operation_frequency
603
+
604
+ pml_radiation_factor = boundaries.get("pml_radiation_factor", None)
605
+ if pml_radiation_factor:
606
+ self._pedb.hfss.hfss_extent_info.radiation_level = pml_radiation_factor
607
+
608
+ dielectric_extents_type = boundaries.get("dielectric_extents_type", None)
609
+ if dielectric_extents_type:
610
+ self._pedb.hfss.hfss_extent_info.extent_type = dielectric_extents_type
611
+
612
+ dielectric_base_polygon = boundaries.get("dielectric_base_polygon", None)
613
+ if dielectric_base_polygon:
614
+ self._pedb.hfss.hfss_extent_info.dielectric_base_polygon = dielectric_base_polygon
615
+
616
+ horizontal_padding = boundaries.get("horizontal_padding", None)
617
+ if horizontal_padding:
618
+ self._pedb.hfss.hfss_extent_info.dielectric_extent_size = horizontal_padding
619
+
620
+ honor_primitives_on_dielectric_layers = boundaries.get("honor_primitives_on_dielectric_layers", None)
621
+ if honor_primitives_on_dielectric_layers:
622
+ self._pedb.hfss.hfss_extent_info.honor_user_dielectric = honor_primitives_on_dielectric_layers
623
+
624
+ air_box_extents_type = boundaries.get("air_box_extents_type", None)
625
+ if air_box_extents_type:
626
+ self._pedb.hfss.hfss_extent_info.extent_type = air_box_extents_type
627
+
628
+ air_box_truncate_model_ground_layers = boundaries.get("air_box_truncate_model_ground_layers", None)
629
+ if air_box_truncate_model_ground_layers:
630
+ self._pedb.hfss.hfss_extent_info.truncate_air_box_at_ground = air_box_truncate_model_ground_layers
631
+
632
+ air_box_horizontal_padding = boundaries.get("air_box_horizontal_padding", None)
633
+ if air_box_horizontal_padding:
634
+ self._pedb.hfss.hfss_extent_info.air_box_horizontal_extent = air_box_horizontal_padding
635
+
636
+ air_box_positive_vertical_padding = boundaries.get("air_box_positive_vertical_padding", None)
637
+ if air_box_positive_vertical_padding:
638
+ self._pedb.hfss.hfss_extent_info.air_box_positive_vertical_extent = air_box_positive_vertical_padding
639
+
640
+ air_box_negative_vertical_padding = boundaries.get("air_box_negative_vertical_padding", None)
641
+ if air_box_positive_vertical_padding:
642
+ self._pedb.hfss.hfss_extent_info.air_box_negative_vertical_extent = air_box_negative_vertical_padding
643
+
644
+ @pyedb_function_handler
645
+ def _load_operations(self):
646
+ """Imports operation information from JSON."""
647
+ operations = self.data["operations"]
648
+ cutout = operations.get("cutout", None)
649
+ if cutout:
650
+ self._pedb.cutout(**cutout)
651
+
652
+ @pyedb_function_handler
653
+ def _load_padstacks(self):
654
+ """Imports padstack information from JSON."""
655
+ padstacks = self.data["padstacks"]
656
+ definitions = padstacks.get("definitions", None)
657
+ if definitions:
658
+ padstack_defs = self._pedb.padstacks.definitions
659
+ for value in definitions:
660
+ pdef = padstack_defs[value["name"]]
661
+ if "hole_diameter" in value:
662
+ pdef.hole_diameter = value["hole_diameter"]
663
+ if "hole_plating_thickness" in value:
664
+ pdef.hole_plating_thickness = value["hole_plating_thickness"]
665
+ if "hole_material" in value:
666
+ pdef.material = value["hole_material"]
667
+ if "hole_range" in value:
668
+ pdef.hole_range = value["hole_range"]
669
+ instances = padstacks.get("instances", None)
670
+ if instances:
671
+ padstack_instances = self._pedb.padstacks.instances_by_name
672
+ for value in instances:
673
+ inst = padstack_instances[value["name"]]
674
+ backdrill_top = value.get("backdrill_top", None)
675
+ if backdrill_top:
676
+ inst.set_backdrill_top(
677
+ backdrill_top["drill_to_layer"], backdrill_top["drill_diameter"], backdrill_top["stub_length"]
678
+ )
679
+ backdrill_bottom = value.get("backdrill_bottom", None)
680
+ if backdrill_top:
681
+ inst.set_backdrill_bottom(
682
+ backdrill_bottom["drill_to_layer"],
683
+ backdrill_bottom["drill_diameter"],
684
+ backdrill_bottom["stub_length"],
685
+ )
686
+
687
+ @pyedb_function_handler
688
+ def _load_package_def(self):
689
+ """Imports package definition information from JSON."""
690
+ comps = self._pedb.components.components
691
+ for pkgd in self.data["package_definitions"]:
692
+ name = pkgd["name"]
693
+ if name in self._pedb.definitions.package:
694
+ self._pedb.definitions.package[name].delete()
695
+ package_def = PackageDef(self._pedb, name=name)
696
+ package_def.maximum_power = pkgd["maximum_power"]
697
+ package_def.therm_cond = pkgd["therm_cond"]
698
+ package_def.theta_jb = pkgd["theta_jb"]
699
+ package_def.theta_jc = pkgd["theta_jc"]
700
+ package_def.height = pkgd["height"]
701
+
702
+ heatsink = pkgd.get("heatsink", None)
703
+ if heatsink:
704
+ package_def.set_heatsink(
705
+ heatsink["fin_base_height"],
706
+ heatsink["fin_height"],
707
+ heatsink["fin_orientation"],
708
+ heatsink["fin_spacing"],
709
+ heatsink["fin_thickness"],
710
+ )
711
+ json_comps = pkgd["components"] if isinstance(pkgd["components"], list) else [pkgd["components"]]
712
+ for i in json_comps:
713
+ comps[i].package_def = name