pyedb 0.34.2__tar.gz → 0.35.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyedb might be problematic. Click here for more details.
- {pyedb-0.34.2 → pyedb-0.35.0}/PKG-INFO +6 -6
- {pyedb-0.34.2 → pyedb-0.35.0}/README.md +3 -3
- {pyedb-0.34.2 → pyedb-0.35.0}/pyproject.toml +2 -2
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/__init__.py +1 -1
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_components.py +3 -3
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_modeler.py +1 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_pin_groups.py +7 -8
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_ports_sources.py +6 -3
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_stackup.py +1 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/configuration.py +9 -5
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/clr_module.py +2 -2
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb.py +1 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +3 -3
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +12 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +12 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/terminal.py +6 -15
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/components.py +21 -45
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +22 -2
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/layout_validation.py +1 -1
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/padstack.py +198 -10
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/siwave.py +1 -2
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/generic/process.py +10 -10
- {pyedb-0.34.2 → pyedb-0.35.0}/LICENSE +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/common/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/common/nets.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/component_libraries/ansys_components.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_boundaries.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_common.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_data.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_general.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_nets.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_operations.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_package_definition.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_padstacks.py +9 -9
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_s_parameter_models.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_setup.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/application/Variables.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/application/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/connectable.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/component.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/hierarchy_obj.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/layout.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/layout_obj.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/primitive/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/primitive/bondwire.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/primitive/path.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/primitive/primitive.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/voltage_regulator.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/component_def.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/definition/package_def.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/sources.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/general.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/geometry/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/geometry/point_data.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/hfss.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/layout_obj_instance.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/materials.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/modeler.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/nets.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/settings.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sim_setup_info.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/simulation_settings.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/siwave.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/stackup.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/heatsink.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/hfss_simulation_setup.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/obj_base.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/simulation_setup.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/utilities/siwave_simulation_setup.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/edb_logger.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/exceptions.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/generic/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/generic/constants.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/generic/data_handlers.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/generic/design_types.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/generic/filesystem.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/generic/general_methods.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/generic/plot.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/generic/settings.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/bom/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/content/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/content/color.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/content/content.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/content/fill.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/history_record.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/downloads.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/misc.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/misc/utilities.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/modeler/geometry_operators.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/siwave.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/siwave_core/icepak.py +0 -0
- {pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/workflow.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pyedb
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.35.0
|
|
4
4
|
Summary: Higher-Level Pythonic Ansys Electronics Data Base
|
|
5
5
|
Author-email: "ANSYS, Inc." <pyansys.core@ansys.com>
|
|
6
6
|
Maintainer-email: PyEDB developers <simon.vandenbrouck@ansys.com>
|
|
@@ -21,13 +21,13 @@ Requires-Dist: ansys-pythonnet >= 3.1.0rc4
|
|
|
21
21
|
Requires-Dist: dotnetcore2 ==3.1.23;platform_system=='Linux'
|
|
22
22
|
Requires-Dist: numpy>=1.20.0,<3
|
|
23
23
|
Requires-Dist: pandas>=1.1.0,<2.3
|
|
24
|
-
Requires-Dist: pydantic>=2.6.4,<2.
|
|
24
|
+
Requires-Dist: pydantic>=2.6.4,<2.11
|
|
25
25
|
Requires-Dist: Rtree >= 1.2.0
|
|
26
26
|
Requires-Dist: toml == 0.10.2
|
|
27
27
|
Requires-Dist: scikit-rf
|
|
28
28
|
Requires-Dist: ansys-sphinx-theme>=0.10.0,<1.1 ; extra == "doc"
|
|
29
29
|
Requires-Dist: imageio>=2.30.0,<2.37 ; extra == "doc"
|
|
30
|
-
Requires-Dist: ipython>=8.13.0,<8.
|
|
30
|
+
Requires-Dist: ipython>=8.13.0,<8.32 ; extra == "doc"
|
|
31
31
|
Requires-Dist: jupyterlab>=4.0.0,<4.4 ; extra == "doc"
|
|
32
32
|
Requires-Dist: jupytext>=1.16.0,<1.17 ; extra == "doc"
|
|
33
33
|
Requires-Dist: matplotlib>=3.5.0,<3.10 ; extra == "doc"
|
|
@@ -76,7 +76,7 @@ Provides-Extra: tests
|
|
|
76
76
|
|
|
77
77
|
## What is PyEDB?
|
|
78
78
|
|
|
79
|
-
PyEDB is Python client library for processing complex and large layout designs in the
|
|
79
|
+
PyEDB is a Python client library for processing complex and large layout designs in the
|
|
80
80
|
Ansys Electronics Database (EDB) format, which stores information describing designs for
|
|
81
81
|
[Ansys Electronics Desktop](https://www.ansys.com/products/electronics) (AEDT).
|
|
82
82
|
|
|
@@ -102,7 +102,7 @@ HFSS 3D Layout, Icepak, Maxwell, Q3D, and SIwave.
|
|
|
102
102
|
|
|
103
103
|
EDB provides a proprietary database file format (AEDB) for efficient and fast layout design
|
|
104
104
|
handling and processing for building ready-to-solve projects. EDB addresses signal integrity
|
|
105
|
-
(SI), power integrity (PI-DC), and electro-thermal
|
|
105
|
+
(SI), power integrity (PI-DC), and electro-thermal workflows. You can import an AEDB file
|
|
106
106
|
into AEDT to modify the layout, assign materials, and define ports, simulations, and constraints.
|
|
107
107
|
You can then launch any of the Ansys electromagnetic simulators.
|
|
108
108
|
|
|
@@ -112,7 +112,7 @@ memory, it provides the fastest and most efficient way to handle a large and com
|
|
|
112
112
|
|
|
113
113
|
You can also parse an AEDB file from a command line in batch in an Ansys electromagnetic simulator
|
|
114
114
|
like HFSS or SIwave. Thus, you can deploy completely non-graphical flows, from layout
|
|
115
|
-
translation through
|
|
115
|
+
translation through simulation results.
|
|
116
116
|
|
|
117
117
|
Additionally, you can use PyAEDT to import an AEDB file into AEDT to view a project,
|
|
118
118
|
combine 3D designs, or perform simulation postprocessing. EDB also supports 3D component models.
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
## What is PyEDB?
|
|
15
15
|
|
|
16
|
-
PyEDB is Python client library for processing complex and large layout designs in the
|
|
16
|
+
PyEDB is a Python client library for processing complex and large layout designs in the
|
|
17
17
|
Ansys Electronics Database (EDB) format, which stores information describing designs for
|
|
18
18
|
[Ansys Electronics Desktop](https://www.ansys.com/products/electronics) (AEDT).
|
|
19
19
|
|
|
@@ -39,7 +39,7 @@ HFSS 3D Layout, Icepak, Maxwell, Q3D, and SIwave.
|
|
|
39
39
|
|
|
40
40
|
EDB provides a proprietary database file format (AEDB) for efficient and fast layout design
|
|
41
41
|
handling and processing for building ready-to-solve projects. EDB addresses signal integrity
|
|
42
|
-
(SI), power integrity (PI-DC), and electro-thermal
|
|
42
|
+
(SI), power integrity (PI-DC), and electro-thermal workflows. You can import an AEDB file
|
|
43
43
|
into AEDT to modify the layout, assign materials, and define ports, simulations, and constraints.
|
|
44
44
|
You can then launch any of the Ansys electromagnetic simulators.
|
|
45
45
|
|
|
@@ -49,7 +49,7 @@ memory, it provides the fastest and most efficient way to handle a large and com
|
|
|
49
49
|
|
|
50
50
|
You can also parse an AEDB file from a command line in batch in an Ansys electromagnetic simulator
|
|
51
51
|
like HFSS or SIwave. Thus, you can deploy completely non-graphical flows, from layout
|
|
52
|
-
translation through
|
|
52
|
+
translation through simulation results.
|
|
53
53
|
|
|
54
54
|
Additionally, you can use PyAEDT to import an AEDB file into AEDT to view a project,
|
|
55
55
|
combine 3D designs, or perform simulation postprocessing. EDB also supports 3D component models.
|
|
@@ -31,7 +31,7 @@ dependencies = [
|
|
|
31
31
|
"dotnetcore2 ==3.1.23;platform_system=='Linux'",
|
|
32
32
|
"numpy>=1.20.0,<3",
|
|
33
33
|
"pandas>=1.1.0,<2.3",
|
|
34
|
-
"pydantic>=2.6.4,<2.
|
|
34
|
+
"pydantic>=2.6.4,<2.11",
|
|
35
35
|
"Rtree >= 1.2.0",
|
|
36
36
|
"toml == 0.10.2",
|
|
37
37
|
"scikit-rf"
|
|
@@ -50,7 +50,7 @@ tests = [
|
|
|
50
50
|
doc = [
|
|
51
51
|
"ansys-sphinx-theme>=0.10.0,<1.1",
|
|
52
52
|
"imageio>=2.30.0,<2.37",
|
|
53
|
-
"ipython>=8.13.0,<8.
|
|
53
|
+
"ipython>=8.13.0,<8.32",
|
|
54
54
|
"jupyterlab>=4.0.0,<4.4",
|
|
55
55
|
"jupytext>=1.16.0,<1.17",
|
|
56
56
|
"matplotlib>=3.5.0,<3.10",
|
|
@@ -201,7 +201,7 @@ class CfgComponent(CfgBase):
|
|
|
201
201
|
if height:
|
|
202
202
|
port_prop.SetReferenceHeight(self._pedb.edb_value(height))
|
|
203
203
|
reference_size_auto = self.port_properties.get("reference_size_auto")
|
|
204
|
-
if reference_size_auto:
|
|
204
|
+
if reference_size_auto is not None:
|
|
205
205
|
port_prop.SetReferenceSizeAuto(reference_size_auto)
|
|
206
206
|
reference_size_x = self.port_properties.get("reference_size_x", 0)
|
|
207
207
|
reference_size_y = self.port_properties.get("reference_size_y", 0)
|
|
@@ -210,10 +210,10 @@ class CfgComponent(CfgBase):
|
|
|
210
210
|
self._pyedb_obj.component_property = cp
|
|
211
211
|
|
|
212
212
|
def set_parameters_to_edb(self):
|
|
213
|
-
if self.enabled:
|
|
214
|
-
self._pyedb_obj.enabled = self.enabled
|
|
215
213
|
if self.type:
|
|
216
214
|
self._pyedb_obj.type = self.type
|
|
215
|
+
if self.enabled:
|
|
216
|
+
self._pyedb_obj.enabled = self.enabled
|
|
217
217
|
|
|
218
218
|
self._set_model_properties_to_edb()
|
|
219
219
|
if self._pyedb_obj.type.lower() == "ic":
|
|
@@ -67,17 +67,16 @@ class CfgPinGroup(CfgBase):
|
|
|
67
67
|
def create(self):
|
|
68
68
|
"""Apply pin group on layout."""
|
|
69
69
|
if self.pins:
|
|
70
|
-
self.
|
|
70
|
+
pins = self.pins if isinstance(self.pins, list) else [self.pins]
|
|
71
|
+
self._pedb.siwave.create_pin_group(self.reference_designator, pins, self.name)
|
|
71
72
|
elif self.net:
|
|
72
|
-
if self.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
raise f"Component not found for creating pin group {self.name}."
|
|
76
|
-
pins = [p for p, obj in comp.pins.items() if obj.net_name in self.net]
|
|
73
|
+
nets = self.net if isinstance(self.net, list) else [self.net]
|
|
74
|
+
comp = self._pedb.components.instances[self.reference_designator]
|
|
75
|
+
pins = [p for p, obj in comp.pins.items() if obj.net_name in nets]
|
|
77
76
|
if not self._pedb.siwave.create_pin_group(self.reference_designator, pins, self.name):
|
|
78
|
-
|
|
77
|
+
raise RuntimeError(f"Failed to create pin group {self.name}")
|
|
79
78
|
else:
|
|
80
|
-
|
|
79
|
+
raise RuntimeError(f"No net and pins defined for defining pin group {self.name}")
|
|
81
80
|
|
|
82
81
|
def export_properties(self):
|
|
83
82
|
if self.pins:
|
|
@@ -265,7 +265,7 @@ class CfgCircuitElement(CfgBase):
|
|
|
265
265
|
pins = {pos_value: self._pedb.components.instances[self.reference_designator].pins[pos_value]}
|
|
266
266
|
pos_objs.update(pins)
|
|
267
267
|
else:
|
|
268
|
-
raise f"Wrong positive terminal type {pos_type}"
|
|
268
|
+
raise Exception(f"Wrong positive terminal type {pos_type}.")
|
|
269
269
|
|
|
270
270
|
self.pos_terminals = {i: j.create_terminal(i) for i, j in pos_objs.items()}
|
|
271
271
|
self.pos_terminals.update(pos_coor_terminal)
|
|
@@ -297,9 +297,12 @@ class CfgCircuitElement(CfgBase):
|
|
|
297
297
|
# create pin group
|
|
298
298
|
neg_obj = self._create_pin_group(pins, True)
|
|
299
299
|
elif neg_type == "pin":
|
|
300
|
-
|
|
300
|
+
terminal_name = f"{self.reference_designator}_{neg_value}"
|
|
301
|
+
neg_obj = {
|
|
302
|
+
terminal_name: self._pedb.components.instances[self.reference_designator].pins[neg_value]
|
|
303
|
+
}
|
|
301
304
|
else:
|
|
302
|
-
raise f"Wrong negative terminal type {neg_type}"
|
|
305
|
+
raise Exception(f"Wrong negative terminal type {neg_type}.")
|
|
303
306
|
self.neg_terminal = [
|
|
304
307
|
j.create_terminal(i) if not j.terminal else j.terminal for i, j in neg_obj.items()
|
|
305
308
|
][0]
|
|
@@ -134,13 +134,17 @@ class Configuration:
|
|
|
134
134
|
|
|
135
135
|
# Configure stackup
|
|
136
136
|
if kwargs.get("fix_padstack_def"):
|
|
137
|
+
from pyedb.configuration.cfg_padstacks import CfgPadstackDefinition
|
|
138
|
+
|
|
137
139
|
pedb_defs = self._pedb.padstacks.definitions
|
|
138
|
-
temp =
|
|
139
|
-
for
|
|
140
|
-
|
|
140
|
+
temp = []
|
|
141
|
+
for _, pdef in pedb_defs.items():
|
|
142
|
+
cfg_def = CfgPadstackDefinition(self._pedb, pdef)
|
|
143
|
+
cfg_def.retrieve_parameters_from_edb()
|
|
144
|
+
temp.append(cfg_def)
|
|
141
145
|
self.cfg_data.stackup.apply()
|
|
142
|
-
for
|
|
143
|
-
|
|
146
|
+
for cfg_pdef in temp:
|
|
147
|
+
cfg_pdef.set_parameters_to_edb()
|
|
144
148
|
else:
|
|
145
149
|
self.cfg_data.stackup.apply()
|
|
146
150
|
|
|
@@ -45,7 +45,7 @@ if is_linux: # pragma: no cover
|
|
|
45
45
|
|
|
46
46
|
runtime = get_coreclr()
|
|
47
47
|
load(runtime)
|
|
48
|
-
os.environ["DOTNET_ROOT"] =
|
|
48
|
+
os.environ["DOTNET_ROOT"] = runtime.dotnet_root.as_posix()
|
|
49
49
|
is_clr = True
|
|
50
50
|
# TODO: Fall backing to dotnetcore2 should be removed in a near future.
|
|
51
51
|
except Exception:
|
|
@@ -83,7 +83,7 @@ if is_linux: # pragma: no cover
|
|
|
83
83
|
if dotnet_root is not None and runtime_config is not None:
|
|
84
84
|
try:
|
|
85
85
|
load("coreclr", runtime_config=str(runtime_config), dotnet_root=str(dotnet_root))
|
|
86
|
-
os.environ["DOTNET_ROOT"] = dotnet_root
|
|
86
|
+
os.environ["DOTNET_ROOT"] = dotnet_root.as_posix()
|
|
87
87
|
if "mono" not in os.getenv("LD_LIBRARY_PATH", ""):
|
|
88
88
|
warnings.warn("LD_LIBRARY_PATH needs to be setup to use pyedb.")
|
|
89
89
|
warnings.warn("export ANSYSEM_ROOT242=/path/to/AnsysEM/v242/Linux64")
|
|
@@ -4564,6 +4564,7 @@ class Edb(Database):
|
|
|
4564
4564
|
port_poly = cloned_edb.modeler.create_polygon(
|
|
4565
4565
|
main_shape=void_info[0].polygon_data._edb_object, layer_name="ref", net_name="GND"
|
|
4566
4566
|
)
|
|
4567
|
+
port_poly.scale(1.1)
|
|
4567
4568
|
pec_poly = cloned_edb.modeler.create_polygon(
|
|
4568
4569
|
main_shape=port_poly.polygon_data._edb_object, layer_name="port_pec", net_name="GND"
|
|
4569
4570
|
)
|
|
@@ -66,7 +66,7 @@ class PinPair(object): # pragma: no cover
|
|
|
66
66
|
@resistance.setter
|
|
67
67
|
def resistance(self, value):
|
|
68
68
|
self._pin_pair_rlc.R = value
|
|
69
|
-
self._set_comp_prop(
|
|
69
|
+
self._set_comp_prop() # pragma: no cover
|
|
70
70
|
|
|
71
71
|
@property
|
|
72
72
|
def inductance(self):
|
|
@@ -75,7 +75,7 @@ class PinPair(object): # pragma: no cover
|
|
|
75
75
|
@inductance.setter
|
|
76
76
|
def inductance(self, value):
|
|
77
77
|
self._pin_pair_rlc.L = value
|
|
78
|
-
self._set_comp_prop(
|
|
78
|
+
self._set_comp_prop() # pragma: no cover
|
|
79
79
|
|
|
80
80
|
@property
|
|
81
81
|
def capacitance(self):
|
|
@@ -84,7 +84,7 @@ class PinPair(object): # pragma: no cover
|
|
|
84
84
|
@capacitance.setter
|
|
85
85
|
def capacitance(self, value):
|
|
86
86
|
self._pin_pair_rlc.C = value
|
|
87
|
-
self._set_comp_prop(
|
|
87
|
+
self._set_comp_prop() # pragma: no cover
|
|
88
88
|
|
|
89
89
|
@property
|
|
90
90
|
def rlc_values(self): # pragma: no cover
|
{pyedb-0.34.2 → pyedb-0.35.0}/src/pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py
RENAMED
|
@@ -101,3 +101,15 @@ class PadstackInstanceTerminal(Terminal):
|
|
|
101
101
|
def padstack_instance(self):
|
|
102
102
|
p_inst, _ = self._get_parameters()
|
|
103
103
|
return self._pedb.layout.find_object_by_id(p_inst.GetId())
|
|
104
|
+
|
|
105
|
+
@property
|
|
106
|
+
def layer(self):
|
|
107
|
+
"""Get layer of the terminal."""
|
|
108
|
+
_, _, layer = self._edb_object.GetParameters()
|
|
109
|
+
return self._pedb.stackup.all_layers[layer.GetName()]
|
|
110
|
+
|
|
111
|
+
@layer.setter
|
|
112
|
+
def layer(self, value):
|
|
113
|
+
layer = self._pedb.stackup.layers[value]._edb_layer
|
|
114
|
+
point_data = self._pedb.point_data(*self.location)
|
|
115
|
+
self._edb_object.SetParameters(point_data, layer)
|
|
@@ -66,3 +66,15 @@ class PointTerminal(Terminal):
|
|
|
66
66
|
raise Exception(msg)
|
|
67
67
|
else:
|
|
68
68
|
return terminal
|
|
69
|
+
|
|
70
|
+
@property
|
|
71
|
+
def layer(self):
|
|
72
|
+
"""Get layer of the terminal."""
|
|
73
|
+
_, _, layer = self._edb_object.GetParameters()
|
|
74
|
+
return self._pedb.stackup.all_layers[layer.GetName()]
|
|
75
|
+
|
|
76
|
+
@layer.setter
|
|
77
|
+
def layer(self, value):
|
|
78
|
+
layer = self._pedb.stackup.layers[value]._edb_layer
|
|
79
|
+
point_data = self._pedb.point_data(*self.location)
|
|
80
|
+
self._edb_object.SetParameters(point_data, layer)
|
|
@@ -105,25 +105,16 @@ class Terminal(Connectable):
|
|
|
105
105
|
@property
|
|
106
106
|
def layer(self):
|
|
107
107
|
"""Get layer of the terminal."""
|
|
108
|
-
|
|
109
|
-
layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
|
|
110
|
-
if self._edb_object.GetParameters(point_data, layer):
|
|
111
|
-
return self._pedb.stackup.all_layers[layer.GetName()]
|
|
112
|
-
else:
|
|
113
|
-
self._pedb.logger.warning(f"No pad parameters found for terminal {self.name}")
|
|
114
|
-
|
|
115
|
-
@layer.setter
|
|
116
|
-
def layer(self, value):
|
|
117
|
-
layer = self._pedb.stackup.layers[value]._edb_layer
|
|
118
|
-
point_data = self._pedb.point_data(*self.location)
|
|
119
|
-
self._edb_object.SetParameters(point_data, layer)
|
|
108
|
+
return self._pedb.logger.error("Cannot determine terminal layer")
|
|
120
109
|
|
|
121
110
|
@property
|
|
122
111
|
def location(self):
|
|
123
112
|
"""Location of the terminal."""
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
113
|
+
try:
|
|
114
|
+
_, point_data, _ = self._edb_object.GetParameters()
|
|
115
|
+
return [point_data.X.ToDouble(), point_data.Y.ToDouble()]
|
|
116
|
+
except:
|
|
117
|
+
self._pedb.logger.error("Cannot determine terminal location")
|
|
127
118
|
|
|
128
119
|
@location.setter
|
|
129
120
|
def location(self, value):
|
|
@@ -111,16 +111,9 @@ class Components(object):
|
|
|
111
111
|
|
|
112
112
|
def __init__(self, p_edb):
|
|
113
113
|
self._pedb = p_edb
|
|
114
|
-
self.
|
|
115
|
-
self._res = {}
|
|
116
|
-
self._cap = {}
|
|
117
|
-
self._ind = {}
|
|
118
|
-
self._ios = {}
|
|
119
|
-
self._ics = {}
|
|
120
|
-
self._others = {}
|
|
114
|
+
self.refresh_components()
|
|
121
115
|
self._pins = {}
|
|
122
116
|
self._comps_by_part = {}
|
|
123
|
-
self._init_parts()
|
|
124
117
|
self._padstack = EdbPadstacks(self._pedb)
|
|
125
118
|
|
|
126
119
|
@property
|
|
@@ -132,16 +125,6 @@ class Components(object):
|
|
|
132
125
|
def _edb(self):
|
|
133
126
|
return self._pedb.edb_api
|
|
134
127
|
|
|
135
|
-
def _init_parts(self):
|
|
136
|
-
a = self.instances
|
|
137
|
-
a = self.resistors
|
|
138
|
-
a = self.ICs
|
|
139
|
-
a = self.Others
|
|
140
|
-
a = self.inductors
|
|
141
|
-
a = self.IOs
|
|
142
|
-
a = self.components_by_partname
|
|
143
|
-
return True
|
|
144
|
-
|
|
145
128
|
def _get_edb_value(self, value):
|
|
146
129
|
return self._pedb.edb_value(value)
|
|
147
130
|
|
|
@@ -205,8 +188,6 @@ class Components(object):
|
|
|
205
188
|
>>> edbapp.components.instances
|
|
206
189
|
|
|
207
190
|
"""
|
|
208
|
-
if not self._cmp:
|
|
209
|
-
self.refresh_components()
|
|
210
191
|
return self._cmp
|
|
211
192
|
|
|
212
193
|
@property
|
|
@@ -310,10 +291,29 @@ class Components(object):
|
|
|
310
291
|
|
|
311
292
|
def refresh_components(self):
|
|
312
293
|
"""Refresh the component dictionary."""
|
|
313
|
-
# self._logger.info("Refreshing the Components dictionary.")
|
|
314
294
|
self._cmp = {}
|
|
295
|
+
self._res = {}
|
|
296
|
+
self._ind = {}
|
|
297
|
+
self._cap = {}
|
|
298
|
+
self._ics = {}
|
|
299
|
+
self._ios = {}
|
|
300
|
+
self._others = {}
|
|
315
301
|
for i in self._pedb.layout.groups:
|
|
316
302
|
self._cmp[i.name] = i
|
|
303
|
+
if i.type == "Resistor":
|
|
304
|
+
self._res[i.name] = i
|
|
305
|
+
elif i.type == "Capacitor":
|
|
306
|
+
self._cap[i.name] = i
|
|
307
|
+
elif i.type == "Inductor":
|
|
308
|
+
self._ind[i.name] = i
|
|
309
|
+
elif i.type == "IC":
|
|
310
|
+
self._ics[i.name] = i
|
|
311
|
+
elif i.type == "IO":
|
|
312
|
+
self._ios[i.name] = i
|
|
313
|
+
elif i.type == "Other":
|
|
314
|
+
self._others[i.name] = i
|
|
315
|
+
else:
|
|
316
|
+
self._logger.warning(f"Unknown component type {i.name} found while refreshing components, will ignore")
|
|
317
317
|
return True
|
|
318
318
|
|
|
319
319
|
@property
|
|
@@ -332,10 +332,6 @@ class Components(object):
|
|
|
332
332
|
>>> edbapp = Edb("myaedbfolder")
|
|
333
333
|
>>> edbapp.components.resistors
|
|
334
334
|
"""
|
|
335
|
-
self._res = {}
|
|
336
|
-
for el, val in self.instances.items():
|
|
337
|
-
if val.type == "Resistor":
|
|
338
|
-
self._res[el] = val
|
|
339
335
|
return self._res
|
|
340
336
|
|
|
341
337
|
@property
|
|
@@ -354,10 +350,6 @@ class Components(object):
|
|
|
354
350
|
>>> edbapp = Edb("myaedbfolder")
|
|
355
351
|
>>> edbapp.components.capacitors
|
|
356
352
|
"""
|
|
357
|
-
self._cap = {}
|
|
358
|
-
for el, val in self.instances.items():
|
|
359
|
-
if val.type == "Capacitor":
|
|
360
|
-
self._cap[el] = val
|
|
361
353
|
return self._cap
|
|
362
354
|
|
|
363
355
|
@property
|
|
@@ -377,10 +369,6 @@ class Components(object):
|
|
|
377
369
|
>>> edbapp.components.inductors
|
|
378
370
|
|
|
379
371
|
"""
|
|
380
|
-
self._ind = {}
|
|
381
|
-
for el, val in self.instances.items():
|
|
382
|
-
if val.type == "Inductor":
|
|
383
|
-
self._ind[el] = val
|
|
384
372
|
return self._ind
|
|
385
373
|
|
|
386
374
|
@property
|
|
@@ -400,10 +388,6 @@ class Components(object):
|
|
|
400
388
|
>>> edbapp.components.ICs
|
|
401
389
|
|
|
402
390
|
"""
|
|
403
|
-
self._ics = {}
|
|
404
|
-
for el, val in self.instances.items():
|
|
405
|
-
if val.type == "IC":
|
|
406
|
-
self._ics[el] = val
|
|
407
391
|
return self._ics
|
|
408
392
|
|
|
409
393
|
@property
|
|
@@ -423,10 +407,6 @@ class Components(object):
|
|
|
423
407
|
>>> edbapp.components.IOs
|
|
424
408
|
|
|
425
409
|
"""
|
|
426
|
-
self._ios = {}
|
|
427
|
-
for el, val in self.instances.items():
|
|
428
|
-
if val.type == "IO":
|
|
429
|
-
self._ios[el] = val
|
|
430
410
|
return self._ios
|
|
431
411
|
|
|
432
412
|
@property
|
|
@@ -446,10 +426,6 @@ class Components(object):
|
|
|
446
426
|
>>> edbapp.components.others
|
|
447
427
|
|
|
448
428
|
"""
|
|
449
|
-
self._others = {}
|
|
450
|
-
for el, val in self.instances.items():
|
|
451
|
-
if val.type == "Other":
|
|
452
|
-
self._others[el] = val
|
|
453
429
|
return self._others
|
|
454
430
|
|
|
455
431
|
@property
|
|
@@ -60,6 +60,8 @@ class LayerEdbClass(object):
|
|
|
60
60
|
self.__setattr__(k, v)
|
|
61
61
|
elif k == "roughness":
|
|
62
62
|
self.properties = {"roughness": v}
|
|
63
|
+
elif k == "etching":
|
|
64
|
+
self.properties = {"etching": v}
|
|
63
65
|
else:
|
|
64
66
|
self._pedb.logger.error(f"{k} is not a valid layer attribute")
|
|
65
67
|
|
|
@@ -792,6 +794,15 @@ class StackupLayerEdbClass(LayerEdbClass):
|
|
|
792
794
|
data["thickness"] = self._edb_object.GetThicknessValue().ToString()
|
|
793
795
|
data["color"] = self.color
|
|
794
796
|
|
|
797
|
+
data["etching"] = {
|
|
798
|
+
"factor": self._edb_layer.GetEtchFactor().ToString(),
|
|
799
|
+
"enabled": self._edb_layer.IsEtchFactorEnabled(),
|
|
800
|
+
}
|
|
801
|
+
if self._pedb.edbversion >= "2024.2":
|
|
802
|
+
etch_power_ground_nets = int(self._edb_layer.GetEtchNetClass())
|
|
803
|
+
etch_power_ground_nets = False if etch_power_ground_nets else True
|
|
804
|
+
data["etching"]["etch_power_ground_nets"] = etch_power_ground_nets
|
|
805
|
+
|
|
795
806
|
roughness = {}
|
|
796
807
|
for region in ["top", "bottom", "side"]:
|
|
797
808
|
temp = {}
|
|
@@ -851,5 +862,14 @@ class StackupLayerEdbClass(LayerEdbClass):
|
|
|
851
862
|
getattr(self._pedb._edb.Cell.RoughnessModel.Region, region.capitalize()), r_model
|
|
852
863
|
)
|
|
853
864
|
self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
|
|
854
|
-
|
|
855
|
-
|
|
865
|
+
etching = params.get("etching")
|
|
866
|
+
if etching:
|
|
867
|
+
layer_clone = self._edb_layer
|
|
868
|
+
layer_clone.SetEtchFactorEnabled(etching["enabled"])
|
|
869
|
+
layer_clone.SetEtchFactor(self._pedb.stackup._edb_value(float(etching["factor"])))
|
|
870
|
+
if self._pedb.edbversion >= "2024.2":
|
|
871
|
+
if etching["etch_power_ground_nets"]:
|
|
872
|
+
layer_clone.SetEtchNetClass(self._pedb._edb.Cell.EtchNetClass.NoEtchPowerGroundNets)
|
|
873
|
+
else:
|
|
874
|
+
layer_clone.SetEtchNetClass(self._pedb._edb.Cell.EtchNetClass.EtchAllNets)
|
|
875
|
+
self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
|