pyedb 0.55.0__tar.gz → 0.56.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.55.0 → pyedb-0.56.0}/PKG-INFO +1 -1
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/__init__.py +1 -1
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_operations.py +2 -2
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_ports_sources.py +1 -1
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/Variables.py +26 -19
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/components.py +41 -36
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/padstack.py +87 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/edb.py +2 -2
- pyedb-0.56.0/src/pyedb/extensions/create_cell_array.py +394 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/data_handlers.py +6 -7
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/design_types.py +16 -3
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/filesystem.py +5 -2
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/general_methods.py +2 -2
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/settings.py +4 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/components.py +24 -4
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layout/layout.py +74 -1
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layout_validation.py +2 -2
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/modeler.py +15 -12
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/padstacks.py +87 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/polygon.py +2 -2
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/siwave_cpa_simulation_setup.py +3 -2
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/source_excitations.py +10 -1
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/value.py +1 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/edb.py +9 -5
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/rpc_session.py +4 -3
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/modeler/geometry_operators.py +6 -6
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/siwave.py +4 -6
- pyedb-0.56.0/src/pyedb/siwave_core/__init__.py +0 -0
- pyedb-0.56.0/src/pyedb/siwave_core/cpa/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/LICENSE +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/README.md +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/pyproject.toml +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/common/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/common/nets.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/component_libraries/ansys_components.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_boundaries.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_common.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_components.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_general.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_modeler.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_nets.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_package_definition.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_padstacks.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_pin_groups.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_s_parameter_models.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_setup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/cfg_stackup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/configuration/configuration.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/clr_module.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/connectable.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/component.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/hierarchy_obj.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/netlist_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/pin_pair_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/s_parameter_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/hierarchy/spice_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/layout.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/layout_obj.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/primitive/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/primitive/bondwire.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/primitive/path.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/primitive/primitive.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/bundle_terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/edge_terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/padstack_instance_terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/point_terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/terminal/terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/cell/voltage_regulator.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/component_def.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/component_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/definition_obj.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/definitions.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/definition/package_def.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/dotnet/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/dotnet/database.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/dotnet/primitive.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/control_file.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/design_options.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/edbvalue.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/hfss_extent_info.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/layer_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/nets_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/padstacks_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/ports.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/primitives_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/raptor_x_simulation_setup_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/simulation_configuration.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/sources.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/utilities.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/edb_data/variables.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/general.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/geometry/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/geometry/point_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/geometry/polygon_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/hfss.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/layout_obj_instance.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/layout_validation.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/materials.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/modeler.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/net_class.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/nets.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/adaptive_frequency_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/mesh_operation.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/sim_setup_info.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/simulation_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/data/sweep_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/io/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/sim_setup_data/io/siwave.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/siwave.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/stackup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/heatsink.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/hfss_simulation_setup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/obj_base.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/simulation_setup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/siwave_cpa_simulation_setup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/siwave_simulation_setup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/dotnet/database/utilities/value.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/edb_logger.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/exceptions.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/extensions/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/extensions/via_design_backend.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/constants.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/grpc_warnings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/plot.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/generic/process.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/control_file.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/component_def.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/component_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/component_pin.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/materials.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/n_port_component_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/package_def.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definition/padstack_def.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/definitions.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/general.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/geometry/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/geometry/arc_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/geometry/point_3d_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/geometry/point_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/geometry/polygon_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hfss.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/component.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/netlist_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/pin_pair_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/pingroup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/s_parameter_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/hierarchy/spice_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layers/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layers/layer.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layers/stackup_layer.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layout/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layout/cell.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/layout/voltage_regulator.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/net/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/net/differential_pair.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/net/extended_net.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/net/net.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/net/net_class.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/nets.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/ports/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/ports/ports.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/bondwire.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/circle.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/padstack_instance.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/path.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/primitive.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/primitive/rectangle.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/adaptive_frequency.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_general_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_settings_options.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/hfss_solver_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/mesh_operation.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/simulation_setup/sweep_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/siwave.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/stackup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/bundle_terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/edge_terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/padstack_instance_terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/pingroup_terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/point_terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/terminal/terminal.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/constants.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/heat_sink.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/hfss_extent_info.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/layout_statistics.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/rlc.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/sources.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/sweep_data_distribution.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/database/utility/xml_control_file.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/grpc/edb_init.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/bom/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/color.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/content.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/fill.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/history_record.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/libraries/common.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/libraries/rf_libraries/base_functions.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/libraries/rf_libraries/planar_antennas.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/decorators.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/downloads.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/misc.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/misc/utilities.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/siwave_core/cpa/simulation_setup_data_model.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/siwave_core/icepak.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/siwave_core/product_properties.py +0 -0
- {pyedb-0.55.0 → pyedb-0.56.0}/src/pyedb/workflow.py +0 -0
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
# SOFTWARE.
|
|
22
22
|
|
|
23
|
-
from typing import Any, Dict, List, Optional
|
|
23
|
+
from typing import Any, Dict, List, Optional, Union
|
|
24
24
|
|
|
25
25
|
from pydantic import BaseModel, Field
|
|
26
26
|
|
|
@@ -37,7 +37,7 @@ class CfgCutout(BaseModel):
|
|
|
37
37
|
signal_list: Optional[List[str]] = None
|
|
38
38
|
reference_list: Optional[List[str]] = None
|
|
39
39
|
extent_type: Optional[str] = "ConvexHull"
|
|
40
|
-
expansion_size: Optional[float] = 0.002
|
|
40
|
+
expansion_size: Optional[Union[float, str]] = 0.002
|
|
41
41
|
number_of_threads: Optional[int] = 1
|
|
42
42
|
custom_extent: Optional[Any] = None
|
|
43
43
|
custom_extent_units: str = Field(default="meter")
|
|
@@ -278,7 +278,7 @@ class CfgCircuitElement(CfgBase):
|
|
|
278
278
|
self._pedb = pedb
|
|
279
279
|
self.name = kwargs["name"]
|
|
280
280
|
self.type = kwargs["type"]
|
|
281
|
-
self.impedance = kwargs.get("impedance",
|
|
281
|
+
self.impedance = kwargs.get("impedance", None)
|
|
282
282
|
self.reference_designator = kwargs.get("reference_designator", None)
|
|
283
283
|
self.distributed = kwargs.get("distributed", False)
|
|
284
284
|
self._elem_num = 1
|
|
@@ -181,13 +181,15 @@ class CSVDataset:
|
|
|
181
181
|
if variable in key_string:
|
|
182
182
|
found_variable = True
|
|
183
183
|
break
|
|
184
|
-
|
|
184
|
+
if not found_variable:
|
|
185
|
+
raise KeyError(f"Input string {variable} is not a key of the data dictionary.")
|
|
185
186
|
data_out._data[variable] = self._data[key_string]
|
|
186
187
|
data_out._header.append(variable)
|
|
187
188
|
return data_out
|
|
188
189
|
|
|
189
190
|
def __add__(self, other): # pragma: no cover
|
|
190
|
-
|
|
191
|
+
if self.number_of_columns != other.number_of_columns:
|
|
192
|
+
raise ValueError("Number of columns is inconsistent.")
|
|
191
193
|
# Create a new object to return, avoiding changing the original inputs
|
|
192
194
|
new_dataset = CSVDataset()
|
|
193
195
|
# Add empty columns to new_dataset
|
|
@@ -222,7 +224,8 @@ class CSVDataset:
|
|
|
222
224
|
for column in other.data:
|
|
223
225
|
self._data[column] = []
|
|
224
226
|
|
|
225
|
-
|
|
227
|
+
if self.number_of_columns != other.number_of_columns:
|
|
228
|
+
raise ValueError("Number of columns is inconsistent.")
|
|
226
229
|
|
|
227
230
|
# Append the data from 'other'
|
|
228
231
|
for column, row_data in other.data.items():
|
|
@@ -1341,9 +1344,10 @@ class Variable(object):
|
|
|
1341
1344
|
self._value = self._calculated_value
|
|
1342
1345
|
# If units have been specified, check for a conflict and otherwise use the specified unit system
|
|
1343
1346
|
if units:
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
+
if self._units and self._units != specified_units:
|
|
1348
|
+
raise RuntimeError(
|
|
1349
|
+
f"The unit specification {specified_units} is inconsistent with the identified units {self._units}."
|
|
1350
|
+
)
|
|
1347
1351
|
self._units = specified_units
|
|
1348
1352
|
|
|
1349
1353
|
if not si_value and is_number(self._value):
|
|
@@ -1730,9 +1734,10 @@ class Variable(object):
|
|
|
1730
1734
|
|
|
1731
1735
|
"""
|
|
1732
1736
|
new_unit_system = unit_system(units)
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1737
|
+
if new_unit_system != self.unit_system:
|
|
1738
|
+
raise ValueError(
|
|
1739
|
+
f"New unit system {new_unit_system} is inconsistent with the current unit system {self.unit_system}."
|
|
1740
|
+
)
|
|
1736
1741
|
self._units = units
|
|
1737
1742
|
return self
|
|
1738
1743
|
|
|
@@ -1803,7 +1808,8 @@ class Variable(object):
|
|
|
1803
1808
|
>>> assert result_3.unit_system == "Power"
|
|
1804
1809
|
|
|
1805
1810
|
"""
|
|
1806
|
-
|
|
1811
|
+
if not is_number(other) and not isinstance(other, Variable):
|
|
1812
|
+
raise ValueError("Multiplier must be a scalar quantity or a variable.")
|
|
1807
1813
|
if is_number(other):
|
|
1808
1814
|
result_value = self.numeric_value * other
|
|
1809
1815
|
result_units = self.units
|
|
@@ -1847,10 +1853,10 @@ class Variable(object):
|
|
|
1847
1853
|
>>> assert result.unit_system == "Current"
|
|
1848
1854
|
|
|
1849
1855
|
"""
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1856
|
+
if not isinstance(other, Variable):
|
|
1857
|
+
raise ValueError("You can only add a variable with another variable.")
|
|
1858
|
+
if self.unit_system != other.unit_system:
|
|
1859
|
+
raise ValueError("Only Variable objects with the same unit system can be added.")
|
|
1854
1860
|
result_value = self.value + other.value
|
|
1855
1861
|
result_units = SI_UNITS[self.unit_system]
|
|
1856
1862
|
# If the units of the two operands are different, return SI-Units
|
|
@@ -1888,10 +1894,10 @@ class Variable(object):
|
|
|
1888
1894
|
>>> assert result_2.unit_system == "Current"
|
|
1889
1895
|
|
|
1890
1896
|
"""
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1897
|
+
if not isinstance(other, Variable):
|
|
1898
|
+
raise ValueError("You can only subtract a variable from another variable.")
|
|
1899
|
+
if self.unit_system != other.unit_system:
|
|
1900
|
+
raise ValueError("Only Variable objects with the same unit system can be subtracted.")
|
|
1895
1901
|
result_value = self.value - other.value
|
|
1896
1902
|
result_units = SI_UNITS[self.unit_system]
|
|
1897
1903
|
# If the units of the two operands are different, return SI-Units
|
|
@@ -1933,7 +1939,8 @@ class Variable(object):
|
|
|
1933
1939
|
>>> assert result_1.unit_system == "Current"
|
|
1934
1940
|
|
|
1935
1941
|
"""
|
|
1936
|
-
|
|
1942
|
+
if not is_number(other) and not isinstance(other, Variable):
|
|
1943
|
+
raise ValueError("Divisor must be a scalar quantity or a variable.")
|
|
1937
1944
|
if is_number(other):
|
|
1938
1945
|
result_value = self.numeric_value / other
|
|
1939
1946
|
result_units = self.units
|
|
@@ -1002,12 +1002,6 @@ class Components(object):
|
|
|
1002
1002
|
]
|
|
1003
1003
|
pin_layers = cmp_pins[0].GetPadstackDef().GetData().GetLayerNames()
|
|
1004
1004
|
if port_type == SourceType.CoaxPort:
|
|
1005
|
-
if not solder_balls_height:
|
|
1006
|
-
solder_balls_height = self.instances[component.GetName()].solder_ball_height
|
|
1007
|
-
if not solder_balls_size:
|
|
1008
|
-
solder_balls_size = self.instances[component.GetName()].solder_ball_diameter[0]
|
|
1009
|
-
if not solder_balls_mid_size:
|
|
1010
|
-
solder_balls_mid_size = self.instances[component.GetName()].solder_ball_diameter[1]
|
|
1011
1005
|
if not ref_pins:
|
|
1012
1006
|
self._logger.error(
|
|
1013
1007
|
"No reference pins found on component. You might consider"
|
|
@@ -1016,40 +1010,51 @@ class Components(object):
|
|
|
1016
1010
|
)
|
|
1017
1011
|
return False
|
|
1018
1012
|
pad_params = self._padstack.get_pad_parameters(pin=cmp_pins[0], layername=pin_layers[0], pad_type=0)
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1013
|
+
|
|
1014
|
+
# If at least one of the solderball arguments is not None, calculate the rest and set solderballs
|
|
1015
|
+
if not (not solder_balls_height and not solder_balls_size and not solder_balls_mid_size):
|
|
1016
|
+
if not solder_balls_height:
|
|
1017
|
+
solder_balls_height = self.instances[component.GetName()].solder_ball_height
|
|
1018
|
+
if not solder_balls_size:
|
|
1019
|
+
solder_balls_size = self.instances[component.GetName()].solder_ball_diameter[0]
|
|
1020
|
+
if not solder_balls_mid_size:
|
|
1021
|
+
solder_balls_mid_size = self.instances[component.GetName()].solder_ball_diameter[1]
|
|
1022
|
+
|
|
1023
|
+
if not pad_params[0] == 7:
|
|
1024
|
+
if not solder_balls_size: # pragma no cover
|
|
1025
|
+
sball_diam = min([self._pedb.edb_value(val).ToDouble() for val in pad_params[1]])
|
|
1026
|
+
sball_mid_diam = sball_diam
|
|
1027
|
+
else: # pragma no cover
|
|
1028
|
+
sball_diam = solder_balls_size
|
|
1029
|
+
if solder_balls_mid_size:
|
|
1030
|
+
sball_mid_diam = solder_balls_mid_size
|
|
1031
|
+
else:
|
|
1032
|
+
sball_mid_diam = solder_balls_size
|
|
1033
|
+
if not solder_balls_height: # pragma no cover
|
|
1034
|
+
solder_balls_height = 2 * sball_diam / 3
|
|
1023
1035
|
else: # pragma no cover
|
|
1024
|
-
|
|
1036
|
+
if not solder_balls_size:
|
|
1037
|
+
bbox = pad_params[1]
|
|
1038
|
+
sball_diam = min([abs(bbox[2] - bbox[0]), abs(bbox[3] - bbox[1])]) * 0.8
|
|
1039
|
+
else:
|
|
1040
|
+
sball_diam = solder_balls_size
|
|
1041
|
+
if not solder_balls_height:
|
|
1042
|
+
solder_balls_height = 2 * sball_diam / 3
|
|
1025
1043
|
if solder_balls_mid_size:
|
|
1026
1044
|
sball_mid_diam = solder_balls_mid_size
|
|
1027
1045
|
else:
|
|
1028
|
-
sball_mid_diam =
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
sball_mid_diam = solder_balls_mid_size
|
|
1041
|
-
else:
|
|
1042
|
-
sball_mid_diam = sball_diam
|
|
1043
|
-
sball_shape = "Cylinder"
|
|
1044
|
-
if not sball_diam == sball_mid_diam:
|
|
1045
|
-
sball_shape = "Spheroid"
|
|
1046
|
-
self.set_solder_ball(
|
|
1047
|
-
component=component,
|
|
1048
|
-
sball_height=solder_balls_height,
|
|
1049
|
-
sball_diam=sball_diam,
|
|
1050
|
-
sball_mid_diam=sball_mid_diam,
|
|
1051
|
-
shape=sball_shape,
|
|
1052
|
-
)
|
|
1046
|
+
sball_mid_diam = sball_diam
|
|
1047
|
+
sball_shape = "Cylinder"
|
|
1048
|
+
if not sball_diam == sball_mid_diam:
|
|
1049
|
+
sball_shape = "Spheroid"
|
|
1050
|
+
self.set_solder_ball(
|
|
1051
|
+
component=component,
|
|
1052
|
+
sball_height=solder_balls_height,
|
|
1053
|
+
sball_diam=sball_diam,
|
|
1054
|
+
sball_mid_diam=sball_mid_diam,
|
|
1055
|
+
shape=sball_shape,
|
|
1056
|
+
)
|
|
1057
|
+
|
|
1053
1058
|
for pin in cmp_pins:
|
|
1054
1059
|
self._padstack.create_coax_port(padstackinstance=pin, name=port_name)
|
|
1055
1060
|
|
|
@@ -1943,3 +1943,90 @@ class EdbPadstacks(object):
|
|
|
1943
1943
|
clusters[int(label)].append(padstack_ids[i])
|
|
1944
1944
|
|
|
1945
1945
|
return dict(clusters)
|
|
1946
|
+
|
|
1947
|
+
def reduce_via_by_density(
|
|
1948
|
+
self, padstacks: List[int], cell_size_x: float = 1e-3, cell_size_y: float = 1e-3, delete: bool = False
|
|
1949
|
+
) -> tuple[List[int], List[List[List[float]]]]:
|
|
1950
|
+
"""
|
|
1951
|
+
Reduce the number of vias by density. Keep only one via which is closest to the center of the cell. The cells
|
|
1952
|
+
are automatically populated based on the input vias.
|
|
1953
|
+
|
|
1954
|
+
Parameters
|
|
1955
|
+
----------
|
|
1956
|
+
padstacks: List[int]
|
|
1957
|
+
List of padstack ids to be reduced.
|
|
1958
|
+
|
|
1959
|
+
cell_size_x : float
|
|
1960
|
+
Width of each grid cell (default is 1e-3).
|
|
1961
|
+
|
|
1962
|
+
cell_size_y : float
|
|
1963
|
+
Height of each grid cell (default is 1e-3).
|
|
1964
|
+
|
|
1965
|
+
delete: bool
|
|
1966
|
+
If True, delete vias that are not kept (default is False).
|
|
1967
|
+
|
|
1968
|
+
Returns
|
|
1969
|
+
-------
|
|
1970
|
+
List[int]
|
|
1971
|
+
IDs of vias kept after reduction.
|
|
1972
|
+
|
|
1973
|
+
List[List[float]]
|
|
1974
|
+
coordinates for grid lines (for plotting).
|
|
1975
|
+
|
|
1976
|
+
"""
|
|
1977
|
+
to_keep = set()
|
|
1978
|
+
|
|
1979
|
+
all_instances = self.instances
|
|
1980
|
+
positions = np.array([all_instances[_id].position for _id in padstacks])
|
|
1981
|
+
|
|
1982
|
+
x_coords, y_coords = positions[:, 0], positions[:, 1]
|
|
1983
|
+
x_min, x_max = np.min(x_coords), np.max(x_coords)
|
|
1984
|
+
y_min, y_max = np.min(y_coords), np.max(y_coords)
|
|
1985
|
+
|
|
1986
|
+
padstacks_array = np.array(padstacks)
|
|
1987
|
+
cell_map = {} # {(cell_x, cell_y): [(id1, [x1, y1]), (id2, [x2, y2), ...]}
|
|
1988
|
+
grid = []
|
|
1989
|
+
|
|
1990
|
+
for idx, pos in enumerate(positions):
|
|
1991
|
+
i = int((pos[0] - x_min) // cell_size_x)
|
|
1992
|
+
j = int((pos[1] - y_min) // cell_size_y)
|
|
1993
|
+
cell_key = (i, j)
|
|
1994
|
+
cell_map.setdefault(cell_key, []).append((padstacks_array[idx], pos))
|
|
1995
|
+
|
|
1996
|
+
for (i, j), items in cell_map.items():
|
|
1997
|
+
# cell center
|
|
1998
|
+
cell_x_min = x_min + i * cell_size_x
|
|
1999
|
+
cell_y_min = y_min + j * cell_size_y
|
|
2000
|
+
cell_x_mid = cell_x_min + 0.5 * cell_size_x
|
|
2001
|
+
cell_y_mid = cell_y_min + 0.5 * cell_size_y
|
|
2002
|
+
|
|
2003
|
+
grid.append(
|
|
2004
|
+
[
|
|
2005
|
+
[
|
|
2006
|
+
cell_x_min,
|
|
2007
|
+
cell_x_min + cell_size_x,
|
|
2008
|
+
cell_x_min + cell_size_x,
|
|
2009
|
+
cell_x_min,
|
|
2010
|
+
cell_x_min,
|
|
2011
|
+
],
|
|
2012
|
+
[
|
|
2013
|
+
cell_y_min,
|
|
2014
|
+
cell_y_min,
|
|
2015
|
+
cell_y_min + cell_size_y,
|
|
2016
|
+
cell_y_min + cell_size_y,
|
|
2017
|
+
cell_y_min,
|
|
2018
|
+
],
|
|
2019
|
+
]
|
|
2020
|
+
)
|
|
2021
|
+
|
|
2022
|
+
# Find closest via to cell center
|
|
2023
|
+
distances = [np.linalg.norm(pos - [cell_x_mid, cell_y_mid]) for _, pos in items]
|
|
2024
|
+
closest_idx = np.argmin(distances)
|
|
2025
|
+
to_keep.add(items[closest_idx][0])
|
|
2026
|
+
|
|
2027
|
+
if delete:
|
|
2028
|
+
to_delete = set(padstacks) - to_keep
|
|
2029
|
+
for _id in to_delete:
|
|
2030
|
+
all_instances[_id].delete()
|
|
2031
|
+
|
|
2032
|
+
return list(to_keep), grid
|
|
@@ -4033,7 +4033,7 @@ class Edb:
|
|
|
4033
4033
|
edb_zones = {}
|
|
4034
4034
|
if not self.setups:
|
|
4035
4035
|
self.siwave.add_siwave_syz_analysis()
|
|
4036
|
-
self.
|
|
4036
|
+
self.save()
|
|
4037
4037
|
for zone_primitive in zone_primitives:
|
|
4038
4038
|
edb_zone_path = os.path.join(
|
|
4039
4039
|
working_directory,
|
|
@@ -4041,7 +4041,7 @@ class Edb:
|
|
|
4041
4041
|
)
|
|
4042
4042
|
shutil.copytree(self.edbpath, edb_zone_path)
|
|
4043
4043
|
poly_data = zone_primitive.GetPolygonData()
|
|
4044
|
-
if self.
|
|
4044
|
+
if self._db.GetVersion()[0] >= 10:
|
|
4045
4045
|
edb_zones[edb_zone_path] = (zone_primitive.GetZoneId(), poly_data)
|
|
4046
4046
|
elif len(zone_primitives) == len(zone_ids):
|
|
4047
4047
|
edb_zones[edb_zone_path] = (zone_ids[0], poly_data)
|