pyedb 0.11.2__tar.gz → 0.12.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.11.2 → pyedb-0.12.1}/PKG-INFO +1 -1
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/__init__.py +1 -1
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/cfg_boundaries.py +35 -25
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/cfg_data.py +14 -2
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/cfg_padstacks.py +13 -9
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/cfg_pin_groups.py +1 -1
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/cfg_ports_sources.py +33 -17
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/configuration.py +23 -36
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb.py +3 -7
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py +5 -6
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +2 -2
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +9 -1
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/siwave.py +1 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/stackup.py +40 -61
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/utilities/simulation_setup.py +2 -1
- {pyedb-0.11.2 → pyedb-0.12.1}/LICENSE +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/README.md +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/pyproject.toml +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/cfg_components.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/cfg_general.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/cfg_nets.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/cfg_s_parameter_models.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/cfg_setup.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/configuration/cfg_spice_models.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/application/Variables.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/application/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/clr_module.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/components.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/definition/component_def.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/definition/package_def.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/dotnet/layout.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/components_data.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/connectable.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/siwave_simulation_setup_data.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/sources.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/terminals.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/general.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/geometry/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/geometry/point_data.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/hfss.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/layout.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/layout_validation.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/materials.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/nets.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/obj_base.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/padstack.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/sim_setup_data/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/sim_setup_data/data/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/utilities/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/utilities/heatsink.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/edb_logger.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/exceptions.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/generic/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/generic/constants.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/generic/data_handlers.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/generic/design_types.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/generic/filesystem.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/generic/general_methods.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/generic/plot.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/generic/process.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/generic/settings.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/bom/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/bom/bom.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/bom/refdes.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/content/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/content/color.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/content/content.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/content/entry_color.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/content/entry_line.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/content/fill.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ecad/spec.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/history_record.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/ipc2581.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/ipc2581/logistic_header.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/downloads.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/misc.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/misc/utilities.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/modeler/geometry_operators.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/siwave.py +0 -0
- {pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/siwave_core/icepak.py +0 -0
|
@@ -27,25 +27,25 @@ class CfgBoundaries:
|
|
|
27
27
|
def __init__(self, pdata, boundaries_dict):
|
|
28
28
|
self._pedb = pdata.pedb
|
|
29
29
|
self._boundaries_dict = boundaries_dict
|
|
30
|
-
self.open_region = self._boundaries_dict.get("open_region",
|
|
30
|
+
self.open_region = self._boundaries_dict.get("open_region", None)
|
|
31
31
|
self._map_open_region_type()
|
|
32
|
-
self.pml_visible = self._boundaries_dict.get("pml_visible",
|
|
33
|
-
self.pml_operation_frequency = self._boundaries_dict.get("pml_operation_frequency",
|
|
34
|
-
self.pml_radiation_factor = self._boundaries_dict.get("pml_radiation_factor",
|
|
32
|
+
self.pml_visible = self._boundaries_dict.get("pml_visible", None)
|
|
33
|
+
self.pml_operation_frequency = self._boundaries_dict.get("pml_operation_frequency", None)
|
|
34
|
+
self.pml_radiation_factor = self._boundaries_dict.get("pml_radiation_factor", None)
|
|
35
35
|
self._map_dielectric_extend_type()
|
|
36
|
-
self.dielectric_base_polygon = self._boundaries_dict.get("dielectric_base_polygon",
|
|
37
|
-
self.horizontal_padding = self._boundaries_dict.get("horizontal_padding",
|
|
36
|
+
self.dielectric_base_polygon = self._boundaries_dict.get("dielectric_base_polygon", None)
|
|
37
|
+
self.horizontal_padding = self._boundaries_dict.get("horizontal_padding", None)
|
|
38
38
|
self.honor_primitives_on_dielectric_layers = self._boundaries_dict.get(
|
|
39
39
|
"honor_primitives_on_dielectric_layers", False
|
|
40
40
|
)
|
|
41
41
|
self._map_air_box_extend_type()
|
|
42
|
-
self.air_box_base_polygon = self._boundaries_dict.get("air_box_base_polygon",
|
|
42
|
+
self.air_box_base_polygon = self._boundaries_dict.get("air_box_base_polygon", None)
|
|
43
43
|
self.air_box_truncate_model_ground_layers = self._boundaries_dict.get(
|
|
44
|
-
"air_box_truncate_model_ground_layers",
|
|
44
|
+
"air_box_truncate_model_ground_layers", None
|
|
45
45
|
)
|
|
46
|
-
self.air_box_horizontal_padding = self._boundaries_dict.get("air_box_horizontal_padding",
|
|
47
|
-
self.air_box_positive_vertical_padding = self._boundaries_dict.get("air_box_positive_vertical_padding",
|
|
48
|
-
self.air_box_negative_vertical_padding = self._boundaries_dict.get("air_box_negative_vertical_padding",
|
|
46
|
+
self.air_box_horizontal_padding = self._boundaries_dict.get("air_box_horizontal_padding", None)
|
|
47
|
+
self.air_box_positive_vertical_padding = self._boundaries_dict.get("air_box_positive_vertical_padding", None)
|
|
48
|
+
self.air_box_negative_vertical_padding = self._boundaries_dict.get("air_box_negative_vertical_padding", None)
|
|
49
49
|
|
|
50
50
|
def _map_air_box_extend_type(self):
|
|
51
51
|
air_box_type = self._boundaries_dict.get("air_box_extents_type", None)
|
|
@@ -94,22 +94,32 @@ class CfgBoundaries:
|
|
|
94
94
|
|
|
95
95
|
def apply(self):
|
|
96
96
|
"""Imports boundary information from JSON."""
|
|
97
|
-
self.
|
|
97
|
+
if self.open_region is not None:
|
|
98
|
+
self._pedb.hfss.hfss_extent_info.use_open_region = self.open_region
|
|
98
99
|
self._pedb.hfss.hfss_extent_info.open_region_type = self.open_region_type.name.lower()
|
|
99
|
-
self.
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
if self.pml_visible is not None:
|
|
101
|
+
self._pedb.hfss.hfss_extent_info.is_pml_visible = self.pml_visible
|
|
102
|
+
if self.pml_operation_frequency:
|
|
103
|
+
self._pedb.hfss.hfss_extent_info.operating_freq = self.pml_operation_frequency
|
|
104
|
+
if self.pml_radiation_factor:
|
|
105
|
+
self._pedb.hfss.hfss_extent_info.radiation_level = self.pml_radiation_factor
|
|
102
106
|
self._pedb.hfss.hfss_extent_info.extent_type = self.dielectric_extents_type.name.lower()
|
|
103
107
|
if self.dielectric_base_polygon:
|
|
104
108
|
self._pedb.hfss.hfss_extent_info.dielectric_base_polygon = self.dielectric_base_polygon
|
|
105
|
-
|
|
106
|
-
|
|
109
|
+
if self.horizontal_padding:
|
|
110
|
+
self._pedb.hfss.hfss_extent_info.dielectric_extent_size = float(self.horizontal_padding)
|
|
111
|
+
if self.honor_primitives_on_dielectric_layers is not None:
|
|
112
|
+
self._pedb.hfss.hfss_extent_info.honor_user_dielectric = self.honor_primitives_on_dielectric_layers
|
|
107
113
|
self._pedb.hfss.hfss_extent_info.extent_type = self.air_box_extents_type.name.lower()
|
|
108
|
-
self.
|
|
109
|
-
|
|
110
|
-
self.
|
|
111
|
-
self.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
if self.air_box_truncate_model_ground_layers is not None:
|
|
115
|
+
self._pedb.hfss.hfss_extent_info.truncate_air_box_at_ground = self.air_box_truncate_model_ground_layers
|
|
116
|
+
if self.air_box_horizontal_padding:
|
|
117
|
+
self._pedb.hfss.hfss_extent_info.air_box_horizontal_extent = float(self.air_box_horizontal_padding)
|
|
118
|
+
if self.air_box_positive_vertical_padding:
|
|
119
|
+
self._pedb.hfss.hfss_extent_info.air_box_positive_vertical_extent = float(
|
|
120
|
+
self.air_box_positive_vertical_padding
|
|
121
|
+
)
|
|
122
|
+
if self.air_box_negative_vertical_padding:
|
|
123
|
+
self._pedb.hfss.hfss_extent_info.air_box_negative_vertical_extent = float(
|
|
124
|
+
self.air_box_negative_vertical_padding
|
|
125
|
+
)
|
|
@@ -39,30 +39,42 @@ class CfgData(object):
|
|
|
39
39
|
self.pedb = pedb
|
|
40
40
|
self.edb_comps = self.pedb.components.components
|
|
41
41
|
self.general = CfgGeneral(self, kwargs.get("general", None))
|
|
42
|
+
|
|
42
43
|
self.boundaries = {}
|
|
43
44
|
if kwargs.get("boundaries", None):
|
|
44
45
|
self.boundaries = CfgBoundaries(self, kwargs.get("boundaries", None))
|
|
45
|
-
|
|
46
|
+
|
|
47
|
+
self.nets = None
|
|
46
48
|
if kwargs.get("nets"):
|
|
47
49
|
self.nets = CfgNets(
|
|
48
50
|
self, kwargs.get("nets", {}).get("signal_nets", []), kwargs.get("nets", {}).get("power_ground_nets", [])
|
|
49
51
|
)
|
|
52
|
+
|
|
50
53
|
self.components = [CfgComponent(self, **component) for component in kwargs.get("components", [])]
|
|
54
|
+
|
|
51
55
|
self.padstacks = CfgPadstacks(self, kwargs.get("padstacks", None))
|
|
56
|
+
|
|
52
57
|
self.pin_groups = [CfgPinGroup(self, pin_group) for pin_group in kwargs.get("pin_groups", [])]
|
|
58
|
+
|
|
53
59
|
self.ports = [CfgPort(self, **port) for port in kwargs.get("ports", [])]
|
|
60
|
+
|
|
54
61
|
self.sources = [CfgSources(self, **source) for source in kwargs.get("sources", [])]
|
|
55
|
-
|
|
62
|
+
|
|
63
|
+
self.setups = []
|
|
56
64
|
if kwargs.get("setups", None):
|
|
57
65
|
self.setups = [CfgSetup(self, setup) for setup in kwargs.get("setups", [])]
|
|
66
|
+
|
|
58
67
|
self.stackup = None
|
|
68
|
+
|
|
59
69
|
self.s_parameters = [
|
|
60
70
|
CfgSParameterModel(self, self.general.s_parameter_library, sparam_model)
|
|
61
71
|
for sparam_model in kwargs.get("s_parameters", [])
|
|
62
72
|
]
|
|
73
|
+
|
|
63
74
|
self.spice_models = [
|
|
64
75
|
CfgSpiceModel(self, self.general.spice_model_library, spice_model)
|
|
65
76
|
for spice_model in kwargs.get("spice_models", [])
|
|
66
77
|
]
|
|
78
|
+
|
|
67
79
|
self.package_definition = None
|
|
68
80
|
self.operations = None
|
|
@@ -54,20 +54,24 @@ class Definition:
|
|
|
54
54
|
def __init__(self, pdata, definition_dict):
|
|
55
55
|
self._pedb = pdata.pedb
|
|
56
56
|
self._definition_dict = definition_dict
|
|
57
|
-
self.name = self._definition_dict.get("name",
|
|
58
|
-
self.hole_diameter = self._definition_dict.get("hole_diameter",
|
|
59
|
-
self.hole_plating_thickness = self._definition_dict.get("hole_plating_thickness",
|
|
60
|
-
self.hole_material = self._definition_dict.get("hole_material",
|
|
61
|
-
self.hole_range = self._definition_dict.get("hole_range",
|
|
57
|
+
self.name = self._definition_dict.get("name", None)
|
|
58
|
+
self.hole_diameter = self._definition_dict.get("hole_diameter", None)
|
|
59
|
+
self.hole_plating_thickness = self._definition_dict.get("hole_plating_thickness", None)
|
|
60
|
+
self.hole_material = self._definition_dict.get("hole_material", None)
|
|
61
|
+
self.hole_range = self._definition_dict.get("hole_range", None)
|
|
62
62
|
|
|
63
63
|
def apply(self):
|
|
64
64
|
"""Apply padstack definition on layout."""
|
|
65
65
|
padstack_defs = self._pedb.padstacks.definitions
|
|
66
66
|
pdef = padstack_defs[self.name]
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
if self.hole_diameter:
|
|
68
|
+
pdef.hole_diameter = self.hole_diameter
|
|
69
|
+
if self.hole_plating_thickness:
|
|
70
|
+
pdef.hole_plating_thickness = self.hole_plating_thickness
|
|
71
|
+
if self.hole_material:
|
|
72
|
+
pdef.material = self.hole_material
|
|
73
|
+
if self.hole_range:
|
|
74
|
+
pdef.hole_range = self.hole_range
|
|
71
75
|
|
|
72
76
|
|
|
73
77
|
class Instance:
|
|
@@ -36,7 +36,7 @@ class CfgPinGroup:
|
|
|
36
36
|
"""Apply pin group on layout."""
|
|
37
37
|
if self.pins:
|
|
38
38
|
if not self._pedb.siwave.create_pin_group(self.reference_designator, list(self.pins), self.name):
|
|
39
|
-
self._pedb.
|
|
39
|
+
self._pedb.logger.error(f"Failed to create pin group on pins {self.pins}")
|
|
40
40
|
return False
|
|
41
41
|
self._pedb.logger.info(f"Pin group {self.name} created.")
|
|
42
42
|
return True
|
|
@@ -41,8 +41,8 @@ class CfgCircuitElement:
|
|
|
41
41
|
self.neg_term_info = kwargs.get("negative_terminal", None)
|
|
42
42
|
|
|
43
43
|
@pyedb_function_handler
|
|
44
|
-
def
|
|
45
|
-
"""Create step 1."""
|
|
44
|
+
def _create_terminals(self):
|
|
45
|
+
"""Create step 1. Collect positive and negative terminals."""
|
|
46
46
|
pos_term_info = self.pos_term_info
|
|
47
47
|
if pos_term_info:
|
|
48
48
|
pos_type, pos_value = [[i, j] for i, j in pos_term_info.items()][0]
|
|
@@ -71,16 +71,26 @@ class CfgCircuitElement:
|
|
|
71
71
|
self.neg_terminal = None
|
|
72
72
|
if neg_term_info:
|
|
73
73
|
neg_type, neg_value = [[i, j] for i, j in neg_term_info.items()][0]
|
|
74
|
-
if neg_type == "
|
|
75
|
-
|
|
74
|
+
if neg_type == "nearest_pin":
|
|
75
|
+
ref_net = neg_value.get("reference_net", "GND")
|
|
76
|
+
search_radius = neg_value.get("search_radius", "5e-3")
|
|
77
|
+
temp = dict()
|
|
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]
|
|
80
|
+
self.neg_terminal = {
|
|
81
|
+
i: j.create_terminal(i + "_ref") if not j.terminal else j.terminal for i, j in temp.items()
|
|
82
|
+
}
|
|
76
83
|
else:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
if neg_type == "pin_group":
|
|
85
|
+
pin_group = {neg_value: self.pedb.siwave.pin_groups[neg_value]}
|
|
86
|
+
else:
|
|
87
|
+
# Get pins
|
|
88
|
+
pins = self._get_pins(neg_type, neg_value) # terminal type pin or net
|
|
89
|
+
# create pin group
|
|
90
|
+
pin_group = self._create_pin_group(pins, True)
|
|
91
|
+
self.neg_terminal = [
|
|
92
|
+
j.create_terminal(i) if not j.terminal else j.terminal for i, j in pin_group.items()
|
|
93
|
+
][0]
|
|
84
94
|
|
|
85
95
|
@pyedb_function_handler
|
|
86
96
|
def _get_pins(self, terminal_type, terminal_value):
|
|
@@ -125,11 +135,14 @@ class CfgPort(CfgCircuitElement):
|
|
|
125
135
|
@pyedb_function_handler
|
|
126
136
|
def create(self):
|
|
127
137
|
"""Create port."""
|
|
128
|
-
self.
|
|
138
|
+
self._create_terminals()
|
|
129
139
|
is_circuit_port = True if self.type == "circuit" else False
|
|
130
140
|
circuit_elements = []
|
|
131
|
-
for
|
|
132
|
-
|
|
141
|
+
for name, j in self.pos_terminals.items():
|
|
142
|
+
if isinstance(self.neg_terminal, dict):
|
|
143
|
+
elem = self.pedb.create_port(j, self.neg_terminal[name], is_circuit_port)
|
|
144
|
+
else:
|
|
145
|
+
elem = self.pedb.create_port(j, self.neg_terminal, is_circuit_port)
|
|
133
146
|
if not self.distributed:
|
|
134
147
|
elem.name = self.name
|
|
135
148
|
circuit_elements.append(elem)
|
|
@@ -148,12 +161,15 @@ class CfgSources(CfgCircuitElement):
|
|
|
148
161
|
@pyedb_function_handler
|
|
149
162
|
def create(self):
|
|
150
163
|
"""Create sources."""
|
|
151
|
-
self.
|
|
164
|
+
self._create_terminals()
|
|
152
165
|
is_circuit_port = True if self.type == "circuit" else False
|
|
153
166
|
circuit_elements = []
|
|
154
167
|
method = self.pedb.create_current_source if self.type == "current" else self.pedb.create_voltage_source
|
|
155
|
-
for
|
|
156
|
-
|
|
168
|
+
for name, j in self.pos_terminals.items():
|
|
169
|
+
if isinstance(self.neg_terminal, dict):
|
|
170
|
+
elem = method(j, self.neg_terminal[name])
|
|
171
|
+
else:
|
|
172
|
+
elem = method(j, self.neg_terminal)
|
|
157
173
|
if not self.distributed:
|
|
158
174
|
elem.name = self.name
|
|
159
175
|
elem.magnitude = self.magnitude
|
|
@@ -27,7 +27,6 @@ import toml
|
|
|
27
27
|
|
|
28
28
|
from pyedb.configuration.cfg_data import CfgData
|
|
29
29
|
from pyedb.dotnet.edb_core.definition.package_def import PackageDef
|
|
30
|
-
from pyedb.dotnet.edb_core.stackup import LayerCollection
|
|
31
30
|
from pyedb.generic.general_methods import pyedb_function_handler
|
|
32
31
|
|
|
33
32
|
|
|
@@ -182,56 +181,44 @@ class Configuration:
|
|
|
182
181
|
layers = data.get("layers")
|
|
183
182
|
|
|
184
183
|
if layers:
|
|
185
|
-
lc = self._pedb.stackup
|
|
186
184
|
input_signal_layers = [i for i in layers if i["type"].lower() == "signal"]
|
|
187
|
-
if not len(input_signal_layers) == len(
|
|
185
|
+
if not len(input_signal_layers) == len(self._pedb.stackup.signal_layers):
|
|
188
186
|
self._pedb.logger.error("Input signal layer count do not match.")
|
|
189
187
|
return False
|
|
190
188
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
for name, obj in
|
|
194
|
-
if obj.
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
# add all signal layers
|
|
189
|
+
removal_list = []
|
|
190
|
+
lc_signal_layers = []
|
|
191
|
+
for name, obj in self._pedb.stackup.all_layers.items():
|
|
192
|
+
if obj.type == "dielectric":
|
|
193
|
+
removal_list.append(name)
|
|
194
|
+
elif obj.type == "signal":
|
|
195
|
+
lc_signal_layers.append(obj.id)
|
|
196
|
+
for l in removal_list:
|
|
197
|
+
self._pedb.stackup.remove_layer(l)
|
|
198
|
+
|
|
199
|
+
# update all signal layers
|
|
200
|
+
id_name = {i[0]: i[1] for i in self._pedb.stackup.layers_by_id}
|
|
201
|
+
signal_idx = 0
|
|
206
202
|
for l in layers:
|
|
207
203
|
if l["type"] == "signal":
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
# add all document layers at bottom
|
|
214
|
-
for l in doc_layer_clones:
|
|
215
|
-
doc_layer = lc_new.add_document_layer(name=l.name, layer_clone=l)
|
|
216
|
-
first_doc_layer_name = doc_layer.name
|
|
204
|
+
layer_id = lc_signal_layers[signal_idx]
|
|
205
|
+
layer_name = id_name[layer_id]
|
|
206
|
+
self._pedb.stackup.layers[layer_name].update(**l)
|
|
207
|
+
signal_idx = signal_idx + 1
|
|
217
208
|
|
|
218
209
|
# add all dielectric layers. Dielectric layers must be added last. Otherwise,
|
|
219
210
|
# dielectric layer will occupy signal and document layer id.
|
|
220
211
|
prev_layer_clone = None
|
|
221
212
|
l = layers.pop(0)
|
|
222
213
|
if l["type"] == "signal":
|
|
223
|
-
prev_layer_clone =
|
|
214
|
+
prev_layer_clone = self._pedb.stackup.layers[l["name"]]
|
|
224
215
|
else:
|
|
225
|
-
prev_layer_clone =
|
|
216
|
+
prev_layer_clone = self._pedb.stackup.add_layer_top(**l)
|
|
226
217
|
for idx, l in enumerate(layers):
|
|
227
218
|
if l["type"] == "dielectric":
|
|
228
|
-
prev_layer_clone =
|
|
229
|
-
|
|
230
|
-
prev_layer_clone =
|
|
231
|
-
|
|
232
|
-
lc._edb_object = lc_new._edb_object
|
|
233
|
-
lc_new.auto_refresh = True
|
|
234
|
-
lc.update_layout()
|
|
219
|
+
prev_layer_clone = self._pedb.stackup.add_layer_below(base_layer_name=prev_layer_clone.name, **l)
|
|
220
|
+
elif l["type"] == "signal":
|
|
221
|
+
prev_layer_clone = self._pedb.stackup.layers[l["name"]]
|
|
235
222
|
|
|
236
223
|
@pyedb_function_handler
|
|
237
224
|
def _load_operations(self):
|
|
@@ -846,9 +846,7 @@ class Edb(Database):
|
|
|
846
846
|
>>> edbapp.stackup.layers["TOP"].thickness == 4e-05
|
|
847
847
|
>>> edbapp.stackup.add_layer("Diel", "GND", layer_type="dielectric", thickness="0.1mm", material="FR4_epoxy")
|
|
848
848
|
"""
|
|
849
|
-
|
|
850
|
-
self._stackup2 = Stackup(self, self.layout.layer_collection)
|
|
851
|
-
return self._stackup2
|
|
849
|
+
return Stackup(self, self.layout.layer_collection)
|
|
852
850
|
|
|
853
851
|
@property
|
|
854
852
|
def materials(self):
|
|
@@ -3702,12 +3700,10 @@ class Edb(Database):
|
|
|
3702
3700
|
self.logger.error("Setup name already used in the layout")
|
|
3703
3701
|
return False
|
|
3704
3702
|
version = self.edbversion.split(".")
|
|
3705
|
-
if
|
|
3706
|
-
setup = HFSSPISimulationSetup(self).create(name)
|
|
3707
|
-
return setup
|
|
3708
|
-
else:
|
|
3703
|
+
if float(self.edbversion) < 2024.2:
|
|
3709
3704
|
self.logger.error("HFSSPI simulation only supported with Ansys release 2024R2 and higher")
|
|
3710
3705
|
return False
|
|
3706
|
+
return HFSSPISimulationSetup(self).create(name)
|
|
3711
3707
|
|
|
3712
3708
|
@pyedb_function_handler()
|
|
3713
3709
|
def create_siwave_syz_setup(self, name=None):
|
{pyedb-0.11.2 → pyedb-0.12.1}/src/pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py
RENAMED
|
@@ -977,19 +977,18 @@ class ViaSettings(object):
|
|
|
977
977
|
-------
|
|
978
978
|
bool
|
|
979
979
|
"""
|
|
980
|
-
if self._parent._pedb.
|
|
981
|
-
return self._via_settings.ViaMeshPlating
|
|
982
|
-
else:
|
|
980
|
+
if float(self._parent._pedb.edbversion) < 2024.1:
|
|
983
981
|
self._parent._pedb.logger.error("Property only supported on Ansys release 2024R1 and later")
|
|
984
982
|
return False
|
|
983
|
+
return self._via_settings.ViaMeshPlating
|
|
985
984
|
|
|
986
985
|
@via_mesh_plating.setter
|
|
987
986
|
def via_mesh_plating(self, value):
|
|
988
|
-
if self._parent._pedb.
|
|
987
|
+
if float(self._parent._pedb.edbversion) < 2024.1:
|
|
988
|
+
self._parent._pedb.logger.error("Property only supported on Ansys release 2024R1 and later")
|
|
989
|
+
else:
|
|
989
990
|
self._via_settings.ViaMeshPlating = value
|
|
990
991
|
self._parent._update_setup()
|
|
991
|
-
else:
|
|
992
|
-
self._parent._pedb.logger.error("Property only supported on Ansys release 2024R1 and later")
|
|
993
992
|
|
|
994
993
|
@property
|
|
995
994
|
def via_material(self):
|
|
@@ -257,8 +257,8 @@ class StackupLayerEdbClass(LayerEdbClass):
|
|
|
257
257
|
self._lower_elevation = 0.0
|
|
258
258
|
|
|
259
259
|
def _create(self, layer_type):
|
|
260
|
-
|
|
261
|
-
layer_type = self._layer_type_mapping[
|
|
260
|
+
layer_type_edb_name = self._layer_name_mapping[layer_type]
|
|
261
|
+
layer_type = self._layer_type_mapping[layer_type_edb_name]
|
|
262
262
|
self._edb_object = self._pedb.edb_api.cell._cell.StackupLayer(
|
|
263
263
|
self._name,
|
|
264
264
|
layer_type,
|
|
@@ -1183,7 +1183,7 @@ class EDBPadstackInstance(EDBPrimitivesMain):
|
|
|
1183
1183
|
-------
|
|
1184
1184
|
:class:`pyedb.dotnet.edb_core.edb_data.terminals`
|
|
1185
1185
|
"""
|
|
1186
|
-
|
|
1186
|
+
warnings.warn("Use new property :func:`terminal` instead.", DeprecationWarning)
|
|
1187
1187
|
if create_new_terminal:
|
|
1188
1188
|
term = self._create_terminal(name)
|
|
1189
1189
|
else:
|
|
@@ -1195,6 +1195,14 @@ class EDBPadstackInstance(EDBPrimitivesMain):
|
|
|
1195
1195
|
if not term.is_null:
|
|
1196
1196
|
return term
|
|
1197
1197
|
|
|
1198
|
+
@property
|
|
1199
|
+
def terminal(self):
|
|
1200
|
+
"""Terminal."""
|
|
1201
|
+
from pyedb.dotnet.edb_core.edb_data.terminals import PadstackInstanceTerminal
|
|
1202
|
+
|
|
1203
|
+
term = PadstackInstanceTerminal(self._pedb, self._edb_object.GetPadstackInstanceTerminal())
|
|
1204
|
+
return term if not term.is_null else None
|
|
1205
|
+
|
|
1198
1206
|
@pyedb_function_handler()
|
|
1199
1207
|
def _create_terminal(self, name=None):
|
|
1200
1208
|
"""Create a padstack instance terminal"""
|