pyedb 0.15.0__tar.gz → 0.16.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.15.0 → pyedb-0.16.0}/PKG-INFO +3 -3
- {pyedb-0.15.0 → pyedb-0.16.0}/pyproject.toml +2 -2
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/__init__.py +1 -1
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_common.py +1 -3
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_components.py +4 -6
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_data.py +3 -6
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_package_definition.py +3 -5
- pyedb-0.16.0/src/pyedb/configuration/cfg_setup.py +239 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_stackup.py +4 -4
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/configuration.py +7 -5
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb.py +6 -2
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/layout.py +4 -1
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +63 -49
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +39 -20
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/utilities/hfss_simulation_setup.py +18 -18
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/utilities/simulation_setup.py +33 -2
- pyedb-0.15.0/src/pyedb/configuration/cfg_setup.py +0 -201
- {pyedb-0.15.0 → pyedb-0.16.0}/LICENSE +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/README.md +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_boundaries.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_general.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_nets.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_operations.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_padstacks.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_pin_groups.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_ports_sources.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_s_parameter_models.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/application/Variables.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/application/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/clr_module.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/component.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/layout.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/layout_obj.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/primitive.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/terminal/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/terminal/terminal.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/cell/voltage_regulator.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/components.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/definition/component_def.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/definition/package_def.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/dotnet/layout.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/sources.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/general.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/geometry/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/geometry/point_data.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/hfss.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/layout_validation.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/materials.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/nets.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/padstack.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/sim_setup_data/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/settings.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/sim_setup_info.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/simulation_settings.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/sim_setup_data/io/siwave.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/siwave.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/stackup.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/utilities/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/utilities/heatsink.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/utilities/obj_base.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/dotnet/edb_core/utilities/siwave_simulation_setup.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/edb_logger.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/exceptions.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/generic/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/generic/constants.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/generic/data_handlers.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/generic/design_types.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/generic/filesystem.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/generic/general_methods.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/generic/plot.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/generic/process.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/generic/settings.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/bom/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/content/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/content/color.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/content/content.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/content/fill.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/history_record.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/downloads.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/misc.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/misc/utilities.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/modeler/geometry_operators.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/siwave.py +0 -0
- {pyedb-0.15.0 → pyedb-0.16.0}/src/pyedb/siwave_core/icepak.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pyedb
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.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>
|
|
@@ -22,7 +22,7 @@ Requires-Dist: dotnetcore2 ==3.1.23;platform_system=='Linux'
|
|
|
22
22
|
Requires-Dist: pydantic>=2.6.4,<2.8
|
|
23
23
|
Requires-Dist: toml == 0.10.2
|
|
24
24
|
Requires-Dist: Rtree >= 1.2.0
|
|
25
|
-
Requires-Dist: numpy>=1.20.0,<
|
|
25
|
+
Requires-Dist: numpy>=1.20.0,<2
|
|
26
26
|
Requires-Dist: ansys-sphinx-theme>=0.10.0,<0.17 ; extra == "doc"
|
|
27
27
|
Requires-Dist: imageio>=2.30.0,<2.35 ; extra == "doc"
|
|
28
28
|
Requires-Dist: ipython>=8.13.0,<8.26 ; extra == "doc"
|
|
@@ -41,7 +41,7 @@ Requires-Dist: sphinx_design>=0.4.0,<0.7 ; extra == "doc"
|
|
|
41
41
|
Requires-Dist: matplotlib>=3.5.0,<3.10 ; extra == "full"
|
|
42
42
|
Requires-Dist: pandas>=1.1.0,<2.3 ; extra == "full"
|
|
43
43
|
Requires-Dist: matplotlib>=3.5.0,<3.10 ; extra == "tests"
|
|
44
|
-
Requires-Dist: numpy>=1.20.0,<
|
|
44
|
+
Requires-Dist: numpy>=1.20.0,<2 ; extra == "tests"
|
|
45
45
|
Requires-Dist: mock>=5.1.0,<5.2 ; extra == "tests"
|
|
46
46
|
Requires-Dist: pandas>=1.1.0,<2.3 ; extra == "tests"
|
|
47
47
|
Requires-Dist: pytest>=7.4.0,<8.3 ; extra == "tests"
|
|
@@ -32,13 +32,13 @@ dependencies = [
|
|
|
32
32
|
"pydantic>=2.6.4,<2.8",
|
|
33
33
|
"toml == 0.10.2",
|
|
34
34
|
"Rtree >= 1.2.0",
|
|
35
|
-
"numpy>=1.20.0,<
|
|
35
|
+
"numpy>=1.20.0,<2",
|
|
36
36
|
]
|
|
37
37
|
|
|
38
38
|
[project.optional-dependencies]
|
|
39
39
|
tests = [
|
|
40
40
|
"matplotlib>=3.5.0,<3.10",
|
|
41
|
-
"numpy>=1.20.0,<
|
|
41
|
+
"numpy>=1.20.0,<2",
|
|
42
42
|
"mock>=5.1.0,<5.2",
|
|
43
43
|
"pandas>=1.1.0,<2.3",
|
|
44
44
|
"pytest>=7.4.0,<8.3",
|
|
@@ -51,6 +51,8 @@ class CfgRlcModel(CfgBase):
|
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
class CfgComponent(CfgBase):
|
|
54
|
+
protected_attributes = ["reference_designator"]
|
|
55
|
+
|
|
54
56
|
def __init__(self, **kwargs):
|
|
55
57
|
self.enabled = kwargs.get("enabled", None)
|
|
56
58
|
|
|
@@ -65,15 +67,11 @@ class CfgComponent(CfgBase):
|
|
|
65
67
|
|
|
66
68
|
self.rlc_model = [CfgRlcModel(**rlc_m) for rlc_m in rlc_models]
|
|
67
69
|
|
|
68
|
-
@property
|
|
69
|
-
def protected_attributes(self):
|
|
70
|
-
return ["reference_designator"]
|
|
71
|
-
|
|
72
70
|
|
|
73
71
|
class CfgComponents:
|
|
74
|
-
def __init__(self, pedb,
|
|
72
|
+
def __init__(self, pedb, components_data):
|
|
75
73
|
self._pedb = pedb
|
|
76
|
-
self.components = [CfgComponent(**comp) for comp in
|
|
74
|
+
self.components = [CfgComponent(**comp) for comp in components_data]
|
|
77
75
|
|
|
78
76
|
def apply(self):
|
|
79
77
|
comps_in_db = self._pedb.components
|
|
@@ -31,7 +31,7 @@ from pyedb.configuration.cfg_padstacks import CfgPadstacks
|
|
|
31
31
|
from pyedb.configuration.cfg_pin_groups import CfgPinGroup
|
|
32
32
|
from pyedb.configuration.cfg_ports_sources import CfgPort, CfgSources
|
|
33
33
|
from pyedb.configuration.cfg_s_parameter_models import CfgSParameterModel
|
|
34
|
-
from pyedb.configuration.cfg_setup import
|
|
34
|
+
from pyedb.configuration.cfg_setup import CfgSetups
|
|
35
35
|
from pyedb.configuration.cfg_spice_models import CfgSpiceModel
|
|
36
36
|
from pyedb.configuration.cfg_stackup import CfgStackup
|
|
37
37
|
|
|
@@ -54,8 +54,7 @@ class CfgData(object):
|
|
|
54
54
|
self, kwargs.get("nets", {}).get("signal_nets", []), kwargs.get("nets", {}).get("power_ground_nets", [])
|
|
55
55
|
)
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
self.components = CfgComponents(self._pedb, data=kwargs.get("components", []))
|
|
57
|
+
self.components = CfgComponents(self._pedb, components_data=kwargs.get("components", []))
|
|
59
58
|
|
|
60
59
|
self.padstacks = CfgPadstacks(self, kwargs.get("padstacks", None))
|
|
61
60
|
|
|
@@ -65,9 +64,7 @@ class CfgData(object):
|
|
|
65
64
|
|
|
66
65
|
self.sources = [CfgSources(self, **source) for source in kwargs.get("sources", [])]
|
|
67
66
|
|
|
68
|
-
self.setups = []
|
|
69
|
-
if kwargs.get("setups", None):
|
|
70
|
-
self.setups = [CfgSetup(self, setup) for setup in kwargs.get("setups", [])]
|
|
67
|
+
self.setups = CfgSetups(self._pedb, setups_data=kwargs.get("setups", []))
|
|
71
68
|
|
|
72
69
|
self.stackup = CfgStackup(self._pedb, data=kwargs.get("stackup", {}))
|
|
73
70
|
|
|
@@ -27,6 +27,9 @@ from pyedb.dotnet.edb_core.definition.package_def import PackageDef
|
|
|
27
27
|
class CfgPackage(CfgBase):
|
|
28
28
|
"""Configuration package class."""
|
|
29
29
|
|
|
30
|
+
# Attributes cannot be set to package definition class or don't exist in package definition class.
|
|
31
|
+
protected_attributes = ["apply_to_all", "components", "extent_bounding_box", "component_definition"]
|
|
32
|
+
|
|
30
33
|
def __init__(self, **kwargs):
|
|
31
34
|
self.name = kwargs.get("name", None)
|
|
32
35
|
self.component_definition = kwargs.get("component_definition", None)
|
|
@@ -48,11 +51,6 @@ class CfgPackage(CfgBase):
|
|
|
48
51
|
def heatsink(self, value):
|
|
49
52
|
self._heatsink = value
|
|
50
53
|
|
|
51
|
-
@property
|
|
52
|
-
def protected_attributes(self):
|
|
53
|
-
"""Attributes cannot be set to package definition class or don't exist in package definition class."""
|
|
54
|
-
return ["apply_to_all", "components", "extent_bounding_box", "component_definition"]
|
|
55
|
-
|
|
56
54
|
|
|
57
55
|
class CfgHeatSink(CfgBase):
|
|
58
56
|
"""Configuration heat sink class."""
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
#
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
# furnished to do so, subject to the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
# copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
# SOFTWARE.
|
|
22
|
+
|
|
23
|
+
from pyedb.configuration.cfg_common import CfgBase
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class CfgFrequencies(CfgBase):
|
|
27
|
+
def __init__(self, **kwargs):
|
|
28
|
+
self.distribution = kwargs.get("distribution").replace(" ", "_") if kwargs.get("distribution") else None
|
|
29
|
+
self.start = kwargs.get("start")
|
|
30
|
+
self.stop = kwargs.get("stop")
|
|
31
|
+
self.increment = kwargs.get("increment", kwargs.get("points", kwargs.get("samples", kwargs.get("step"))))
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class CfgSweepData(CfgBase):
|
|
35
|
+
def __init__(self, **kwargs):
|
|
36
|
+
self.name = kwargs.get("name")
|
|
37
|
+
self.type = kwargs.get("type").lower() if kwargs.get("type") else None
|
|
38
|
+
self.frequencies = []
|
|
39
|
+
for kw in kwargs.get("frequencies", []):
|
|
40
|
+
self.frequencies.append(CfgFrequencies(**kw))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class CfgSetup(CfgBase):
|
|
44
|
+
def __init__(self, pedb, **kwargs):
|
|
45
|
+
self._pedb = pedb
|
|
46
|
+
self.name = kwargs.get("name")
|
|
47
|
+
self.type = kwargs.get("type").lower() if kwargs.get("type") else None
|
|
48
|
+
|
|
49
|
+
self.freq_sweep = []
|
|
50
|
+
for i in kwargs.get("freq_sweep", []):
|
|
51
|
+
self.freq_sweep.append(CfgSweepData(**i))
|
|
52
|
+
|
|
53
|
+
def _apply_freq_sweep(self, edb_setup):
|
|
54
|
+
for i in self.freq_sweep:
|
|
55
|
+
f_set = []
|
|
56
|
+
kw = {}
|
|
57
|
+
for attr in i.get_attributes(exclude="name"):
|
|
58
|
+
if attr == "frequencies":
|
|
59
|
+
for f in i.frequencies:
|
|
60
|
+
f_set.append([f.distribution, f.start, f.stop, f.increment])
|
|
61
|
+
else:
|
|
62
|
+
kw[attr] = getattr(i, attr)
|
|
63
|
+
edb_setup.add_sweep(i.name, frequency_set=f_set, **kw)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class CfgSIwaveACSetup(CfgSetup):
|
|
67
|
+
def __init__(self, pedb, **kwargs):
|
|
68
|
+
super().__init__(pedb, **kwargs)
|
|
69
|
+
self.si_slider_position = kwargs.get("si_slider_position")
|
|
70
|
+
self.pi_slider_position = kwargs.get("pi_slider_position")
|
|
71
|
+
|
|
72
|
+
def apply(self):
|
|
73
|
+
if self.name in self._pedb.setups:
|
|
74
|
+
raise "Setup {} already existing. Editing it.".format(self.name)
|
|
75
|
+
|
|
76
|
+
kwargs = (
|
|
77
|
+
{"si_slider_position": self.si_slider_position}
|
|
78
|
+
if self.si_slider_position is not None
|
|
79
|
+
else {"pi_slider_position": self.pi_slider_position}
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
edb_setup = self._pedb.create_siwave_syz_setup(name=self.name, **kwargs)
|
|
83
|
+
self._apply_freq_sweep(edb_setup)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class CfgSIwaveDCSetup(CfgSetup):
|
|
87
|
+
def __init__(self, pedb, **kwargs):
|
|
88
|
+
super().__init__(pedb, **kwargs)
|
|
89
|
+
self.dc_slider_position = kwargs.get("dc_slider_position")
|
|
90
|
+
self.dc_ir_settings = CfgDcIrSettings(**kwargs.get("dc_ir_settings", {}))
|
|
91
|
+
self.freq_sweep = None
|
|
92
|
+
|
|
93
|
+
def apply(self):
|
|
94
|
+
edb_setup = self._pedb.create_siwave_dc_setup(name=self.name, dc_slider_position=self.dc_slider_position)
|
|
95
|
+
for k, v in self.dc_ir_settings.get_attributes().items():
|
|
96
|
+
if k == "dc_slider_postion":
|
|
97
|
+
edb_setup.dc_settings.dc_slider_position = v
|
|
98
|
+
else:
|
|
99
|
+
setattr(edb_setup.dc_ir_settings, k, v)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class CfgHFSSSetup(CfgSetup):
|
|
103
|
+
def __init__(self, pedb, **kwargs):
|
|
104
|
+
super().__init__(pedb, **kwargs)
|
|
105
|
+
|
|
106
|
+
self.f_adapt = kwargs.get("f_adapt")
|
|
107
|
+
self.max_num_passes = kwargs.get("max_num_passes")
|
|
108
|
+
self.max_mag_delta_s = kwargs.get("max_mag_delta_s")
|
|
109
|
+
|
|
110
|
+
self.mesh_operations = []
|
|
111
|
+
for i in kwargs.get("mesh_operations", []):
|
|
112
|
+
self.mesh_operations.append(CfgLengthMeshOperation(**i))
|
|
113
|
+
|
|
114
|
+
def apply(self):
|
|
115
|
+
if self.name in self._pedb.setups:
|
|
116
|
+
raise "Setup {} already existing. Editing it.".format(self.name)
|
|
117
|
+
|
|
118
|
+
edb_setup = self._pedb.create_hfss_setup(self.name)
|
|
119
|
+
edb_setup.set_solution_single_frequency(self.f_adapt, self.max_num_passes, self.max_mag_delta_s)
|
|
120
|
+
|
|
121
|
+
self._apply_freq_sweep(edb_setup)
|
|
122
|
+
|
|
123
|
+
for i in self.mesh_operations:
|
|
124
|
+
edb_setup.add_length_mesh_operation(
|
|
125
|
+
net_layer_list=i.nets_layers_list,
|
|
126
|
+
name=i.name,
|
|
127
|
+
# max_elements=i.max_elements,
|
|
128
|
+
max_length=i.max_length,
|
|
129
|
+
# restrict_elements=i.restrict_max_elements,
|
|
130
|
+
restrict_length=i.restrict_length,
|
|
131
|
+
refine_inside=i.refine_inside,
|
|
132
|
+
# mesh_region=i.mesh_region
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
class CfgDcIrSettings(CfgBase):
|
|
137
|
+
def __init__(self, **kwargs):
|
|
138
|
+
self.export_dc_thermal_data = kwargs.get("export_dc_thermal_data")
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
class CfgMeshOperation(CfgBase):
|
|
142
|
+
def __init__(self, **kwargs):
|
|
143
|
+
self.name = kwargs.get("name")
|
|
144
|
+
self.type = kwargs.get("type")
|
|
145
|
+
# self.mesh_region = kwargs.get("mesh_region")
|
|
146
|
+
self.nets_layers_list = kwargs.get("nets_layers_list", {})
|
|
147
|
+
self.refine_inside = kwargs.get("refine_inside", False)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
class CfgLengthMeshOperation(CfgMeshOperation):
|
|
151
|
+
def __init__(self, **kwargs):
|
|
152
|
+
super().__init__(**kwargs)
|
|
153
|
+
|
|
154
|
+
# waiting bug review
|
|
155
|
+
# self.restrict_max_elements = kwargs.get("restrict_max_elements", True)
|
|
156
|
+
# self.max_elements = kwargs.get("max_elements", 1000)
|
|
157
|
+
self.restrict_length = kwargs.get("restrict_length", True)
|
|
158
|
+
self.max_length = kwargs.get("max_length", "1mm")
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class CfgSetups:
|
|
162
|
+
def __init__(self, pedb, setups_data):
|
|
163
|
+
self._pedb = pedb
|
|
164
|
+
self.setups = []
|
|
165
|
+
for stp in setups_data:
|
|
166
|
+
if stp.get("type").lower() == "hfss":
|
|
167
|
+
self.setups.append(CfgHFSSSetup(self._pedb, **stp))
|
|
168
|
+
elif stp.get("type").lower() in ["siwave_ac", "siwave_syz"]:
|
|
169
|
+
self.setups.append(CfgSIwaveACSetup(self._pedb, **stp))
|
|
170
|
+
elif stp.get("type").lower() == "siwave_dc":
|
|
171
|
+
self.setups.append(CfgSIwaveDCSetup(self._pedb, **stp))
|
|
172
|
+
|
|
173
|
+
def apply(self):
|
|
174
|
+
for s in self.setups:
|
|
175
|
+
s.apply()
|
|
176
|
+
|
|
177
|
+
def get_data_from_db(self):
|
|
178
|
+
setups = []
|
|
179
|
+
for _, s in self._pedb.setups.items():
|
|
180
|
+
stp = {}
|
|
181
|
+
if s.type == "hfss":
|
|
182
|
+
for p_name in CfgHFSSSetup(self._pedb).__dict__:
|
|
183
|
+
if p_name.startswith("_"):
|
|
184
|
+
continue
|
|
185
|
+
elif p_name == "type":
|
|
186
|
+
stp[p_name] = s.type
|
|
187
|
+
elif p_name == "f_adapt":
|
|
188
|
+
stp[p_name] = list(s.adaptive_settings.adaptive_frequency_data_list)[0].adaptive_frequency
|
|
189
|
+
elif p_name == "max_num_passes":
|
|
190
|
+
stp[p_name] = list(s.adaptive_settings.adaptive_frequency_data_list)[0].max_passes
|
|
191
|
+
elif p_name == "max_mag_delta_s":
|
|
192
|
+
stp[p_name] = list(s.adaptive_settings.adaptive_frequency_data_list)[0].max_delta
|
|
193
|
+
elif p_name == "freq_sweep":
|
|
194
|
+
f_sweep = []
|
|
195
|
+
for _, sw in s.sweeps.items():
|
|
196
|
+
sweep_data = {}
|
|
197
|
+
for sw_p_name in CfgSweepData().__dict__:
|
|
198
|
+
if sw_p_name == "frequencies":
|
|
199
|
+
pass # Frequencies cannot be read from EDB
|
|
200
|
+
else:
|
|
201
|
+
sweep_data[sw_p_name] = getattr(sw, sw_p_name)
|
|
202
|
+
f_sweep.append(sweep_data)
|
|
203
|
+
stp["freq_sweep"] = f_sweep
|
|
204
|
+
elif p_name == "mesh_operations":
|
|
205
|
+
mops = []
|
|
206
|
+
for _, i in s.mesh_operations.items():
|
|
207
|
+
mop = {}
|
|
208
|
+
for mop_p_name in CfgLengthMeshOperation().__dict__:
|
|
209
|
+
mop[mop_p_name] = getattr(i, mop_p_name)
|
|
210
|
+
mops.append(mop)
|
|
211
|
+
stp["mesh_operations"] = mops
|
|
212
|
+
else:
|
|
213
|
+
stp[p_name] = getattr(s, p_name)
|
|
214
|
+
|
|
215
|
+
elif s.type == "siwave_ac":
|
|
216
|
+
for p_name in CfgSIwaveACSetup(self._pedb).__dict__:
|
|
217
|
+
if p_name.startswith("_"):
|
|
218
|
+
continue
|
|
219
|
+
elif p_name == "freq_sweep":
|
|
220
|
+
pass # Bug in EDB API
|
|
221
|
+
else:
|
|
222
|
+
stp[p_name] = getattr(s, p_name)
|
|
223
|
+
elif s.type == "siwave_dc":
|
|
224
|
+
for p_name in CfgSIwaveDCSetup(self._pedb).__dict__:
|
|
225
|
+
if p_name.startswith("_"):
|
|
226
|
+
continue
|
|
227
|
+
elif p_name == "freq_sweep":
|
|
228
|
+
pass
|
|
229
|
+
elif p_name == "dc_ir_settings":
|
|
230
|
+
dc_ir_s = {}
|
|
231
|
+
for dcir_p_name in CfgDcIrSettings().__dict__:
|
|
232
|
+
dc_ir_s[dcir_p_name] = getattr(s.dc_ir_settings, dcir_p_name)
|
|
233
|
+
stp["dc_ir_settings"] = dc_ir_s
|
|
234
|
+
elif p_name == "dc_slider_position":
|
|
235
|
+
stp[p_name] = getattr(s.dc_settings, p_name)
|
|
236
|
+
else:
|
|
237
|
+
stp[p_name] = getattr(s, p_name)
|
|
238
|
+
setups.append(stp)
|
|
239
|
+
return setups
|
|
@@ -127,7 +127,7 @@ class CfgStackup:
|
|
|
127
127
|
attrs = mat_in_cfg.get_attributes()
|
|
128
128
|
mat = self._pedb.materials.add_material(**attrs)
|
|
129
129
|
|
|
130
|
-
def
|
|
130
|
+
def get_materials_from_db(self):
|
|
131
131
|
materials = []
|
|
132
132
|
for name, p in self._pedb.materials.materials.items():
|
|
133
133
|
mat = {}
|
|
@@ -136,7 +136,7 @@ class CfgStackup:
|
|
|
136
136
|
materials.append(mat)
|
|
137
137
|
return materials
|
|
138
138
|
|
|
139
|
-
def
|
|
139
|
+
def get_layers_from_db(self):
|
|
140
140
|
layers = []
|
|
141
141
|
for name, obj in self._pedb.stackup.all_layers.items():
|
|
142
142
|
layer = {}
|
|
@@ -155,8 +155,8 @@ class CfgStackup:
|
|
|
155
155
|
dict
|
|
156
156
|
"""
|
|
157
157
|
stackup = {}
|
|
158
|
-
materials = self.
|
|
158
|
+
materials = self.get_materials_from_db()
|
|
159
159
|
stackup["materials"] = materials
|
|
160
|
-
layers = self.
|
|
160
|
+
layers = self.get_layers_from_db()
|
|
161
161
|
stackup["layers"] = layers
|
|
162
162
|
return stackup
|
|
@@ -131,9 +131,8 @@ class Configuration:
|
|
|
131
131
|
for source in self.cfg_data.sources:
|
|
132
132
|
source.create()
|
|
133
133
|
|
|
134
|
-
# Configure
|
|
135
|
-
|
|
136
|
-
setup.apply()
|
|
134
|
+
# Configure setup
|
|
135
|
+
self.cfg_data.setups.apply()
|
|
137
136
|
|
|
138
137
|
# Configure stackup
|
|
139
138
|
self.cfg_data.stackup.apply()
|
|
@@ -264,15 +263,18 @@ class Configuration:
|
|
|
264
263
|
-------
|
|
265
264
|
|
|
266
265
|
"""
|
|
266
|
+
self._pedb.logger.info("Getting data from layout database.")
|
|
267
267
|
data = {}
|
|
268
268
|
if kwargs.get("stackup", False):
|
|
269
269
|
data["stackup"] = self.cfg_data.stackup.get_data_from_db()
|
|
270
270
|
if kwargs.get("package_definitions", False):
|
|
271
271
|
data["package_definitions"] = self.cfg_data.package_definitions.get_data_from_db()
|
|
272
|
+
if kwargs.get("setups", False):
|
|
273
|
+
data["setups"] = self.cfg_data.setups.get_data_from_db()
|
|
272
274
|
|
|
273
275
|
return data
|
|
274
276
|
|
|
275
|
-
def export(self, file_path, stackup=True, package_definitions=True):
|
|
277
|
+
def export(self, file_path, stackup=True, package_definitions=True, setups=True):
|
|
276
278
|
"""Export the configuration data from layout to a file.
|
|
277
279
|
|
|
278
280
|
Parameters
|
|
@@ -288,7 +290,7 @@ class Configuration:
|
|
|
288
290
|
"""
|
|
289
291
|
file_path = file_path if isinstance(file_path, Path) else Path(file_path)
|
|
290
292
|
file_path = file_path if file_path.suffix == ".json" else file_path.with_suffix(".json")
|
|
291
|
-
data = self.get_data_from_db(stackup=stackup, package_definitions=package_definitions)
|
|
293
|
+
data = self.get_data_from_db(stackup=stackup, package_definitions=package_definitions, setups=setups)
|
|
292
294
|
with open(file_path, "w") as f:
|
|
293
295
|
json.dump(data, f, ensure_ascii=False, indent=4)
|
|
294
296
|
return True if os.path.isfile(file_path) else False
|
|
@@ -3681,7 +3681,7 @@ class Edb(Database):
|
|
|
3681
3681
|
return False
|
|
3682
3682
|
return HFSSPISimulationSetup(self).create(name)
|
|
3683
3683
|
|
|
3684
|
-
def create_siwave_syz_setup(self, name=None):
|
|
3684
|
+
def create_siwave_syz_setup(self, name=None, **kwargs):
|
|
3685
3685
|
"""Create a setup from a template.
|
|
3686
3686
|
|
|
3687
3687
|
Parameters
|
|
@@ -3709,9 +3709,11 @@ class Edb(Database):
|
|
|
3709
3709
|
if name in self.setups:
|
|
3710
3710
|
return False
|
|
3711
3711
|
setup = SiwaveSimulationSetup(self, name=name)
|
|
3712
|
+
for k, v in kwargs.items():
|
|
3713
|
+
setattr(setup, k, v)
|
|
3712
3714
|
return self.setups[name]
|
|
3713
3715
|
|
|
3714
|
-
def create_siwave_dc_setup(self, name=None):
|
|
3716
|
+
def create_siwave_dc_setup(self, name=None, **kwargs):
|
|
3715
3717
|
"""Create a setup from a template.
|
|
3716
3718
|
|
|
3717
3719
|
Parameters
|
|
@@ -3736,6 +3738,8 @@ class Edb(Database):
|
|
|
3736
3738
|
if name in self.setups:
|
|
3737
3739
|
return False
|
|
3738
3740
|
setup = SiwaveDCSimulationSetup(self, name=name)
|
|
3741
|
+
for k, v in kwargs.items():
|
|
3742
|
+
setattr(setup, k, v)
|
|
3739
3743
|
return setup
|
|
3740
3744
|
|
|
3741
3745
|
def calculate_initial_extent(self, expansion_factor):
|
|
@@ -149,10 +149,13 @@ class EdbLayout(object):
|
|
|
149
149
|
_primitives_by_layer = {}
|
|
150
150
|
for lay in self.layers:
|
|
151
151
|
_primitives_by_layer[lay] = []
|
|
152
|
+
for lay in self._pedb.stackup.non_stackup_layers:
|
|
153
|
+
_primitives_by_layer[lay] = []
|
|
152
154
|
for i in self._layout.primitives:
|
|
153
155
|
try:
|
|
154
156
|
lay = i.GetLayer().GetName()
|
|
155
|
-
|
|
157
|
+
if lay in _primitives_by_layer:
|
|
158
|
+
_primitives_by_layer[lay].append(cast(i, self._pedb))
|
|
156
159
|
except:
|
|
157
160
|
self._logger.warning(f"Failed to get layer on primitive {i}, skipping.")
|
|
158
161
|
continue
|