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.
- {pyedb-0.7.0 → pyedb-0.7.1}/PKG-INFO +31 -53
- {pyedb-0.7.0 → pyedb-0.7.1}/README.md +1 -1
- {pyedb-0.7.0 → pyedb-0.7.1}/pyproject.toml +30 -51
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/__init__.py +1 -1
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/clr_module.py +1 -1
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb.py +6 -7
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/components.py +11 -11
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/configuration.py +199 -24
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/component_def.py +9 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/package_def.py +27 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/components_data.py +2 -1
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +14 -13
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py +2 -2
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +8 -3
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +6 -5
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +12 -11
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/siwave_simulation_setup_data.py +1 -1
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/sources.py +10 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/layout.py +59 -0
- pyedb-0.7.1/src/pyedb/dotnet/edb_core/materials.py +1056 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/padstack.py +57 -6
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/siwave.py +9 -2
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/stackup.py +108 -94
- pyedb-0.7.1/src/pyedb/dotnet/edb_core/utilities/__init__.py +3 -0
- pyedb-0.7.1/src/pyedb/dotnet/edb_core/utilities/heatsink.py +69 -0
- pyedb-0.7.1/src/pyedb/exceptions.py +6 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/filesystem.py +7 -3
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/general_methods.py +4 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/process.py +4 -1
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/settings.py +10 -0
- pyedb-0.7.0/src/pyedb/dotnet/edb_core/materials.py +0 -960
- {pyedb-0.7.0 → pyedb-0.7.1}/LICENSE +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/application/Variables.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/application/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/dotnet/layout.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/connectable.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/obj_base.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/terminals.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/general.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/hfss.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/layout_validation.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/dotnet/edb_core/nets.py +0 -0
- {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
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/edb_logger.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/constants.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/data_handlers.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/design_types.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/generic/plot.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/bom/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/bom/bom.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/bom/refdes.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/color.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/content.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/entry_color.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/entry_line.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/fill.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ecad/spec.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/history_record.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/ipc2581.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/ipc2581/logistic_header.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/downloads.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/misc.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/misc/utilities.py +0 -0
- {pyedb-0.7.0 → pyedb-0.7.1}/src/pyedb/modeler/geometry_operators.py +0 -0
- {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.
|
|
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
|
+
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
|
|
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:
|
|
25
|
-
Requires-Dist:
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist: ipython
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist:
|
|
33
|
-
Requires-Dist:
|
|
34
|
-
Requires-Dist:
|
|
35
|
-
Requires-Dist:
|
|
36
|
-
Requires-Dist:
|
|
37
|
-
Requires-Dist:
|
|
38
|
-
Requires-Dist:
|
|
39
|
-
Requires-Dist:
|
|
40
|
-
Requires-Dist:
|
|
41
|
-
Requires-Dist:
|
|
42
|
-
Requires-Dist:
|
|
43
|
-
Requires-Dist:
|
|
44
|
-
Requires-Dist:
|
|
45
|
-
Requires-Dist:
|
|
46
|
-
Requires-Dist:
|
|
47
|
-
Requires-Dist:
|
|
48
|
-
Requires-Dist:
|
|
49
|
-
Requires-Dist:
|
|
50
|
-
Requires-Dist:
|
|
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
|
[](https://docs.pyansys.com/)
|
|
90
|
-
[](https://www.python.org/downloads/)
|
|
91
69
|
[](https://opensource.org/licenses/MIT)
|
|
92
70
|
|
|
93
71
|
## What is PyEDB?
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# PyEDB
|
|
9
9
|
|
|
10
10
|
[](https://docs.pyansys.com/)
|
|
11
|
-
[](https://www.python.org/downloads/)
|
|
12
12
|
[](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.
|
|
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
|
|
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
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
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
|
|
53
|
-
"imageio
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
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
|
|
82
|
-
"
|
|
83
|
-
"
|
|
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
|
|
|
@@ -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.
|
|
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(
|
|
852
|
-
>>> edbapp.materials
|
|
853
|
-
>>> edbapp.materials.add_debye_material("
|
|
854
|
-
>>> edbapp.materials.add_djordjevicsarkar_material("
|
|
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.
|
|
4146
|
-
material.
|
|
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=
|
|
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=
|
|
1458
|
-
c_value=
|
|
1459
|
-
l_value=
|
|
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
|
-
|
|
27
|
-
|
|
27
|
+
import toml
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
45
|
+
"""Import configuration settings from a configure file.
|
|
50
46
|
|
|
51
47
|
Parameters
|
|
52
48
|
----------
|
|
53
|
-
config_file : str
|
|
54
|
-
Full path to
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
481
|
-
if refdes not in sp["components"]
|
|
482
|
-
|
|
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
|
-
|
|
485
|
-
if refdes in sp["components"]
|
|
486
|
-
|
|
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
|