pyedb 0.51.2__tar.gz → 0.52.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.51.2 → pyedb-0.52.0}/PKG-INFO +4 -4
- {pyedb-0.51.2 → pyedb-0.52.0}/pyproject.toml +3 -3
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/__init__.py +1 -1
- pyedb-0.52.0/src/pyedb/configuration/configuration.py +461 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/padstacks_data.py +8 -2
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/layout_validation.py +3 -13
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/stackup.py +4 -3
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/edb.py +35 -1
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/materials.py +7 -7
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/pin_pair_model.py +1 -1
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/net/differential_pair.py +2 -1
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/source_excitations.py +10 -10
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/edb.py +86 -173
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/edb_init.py +4 -2
- pyedb-0.52.0/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
- pyedb-0.51.2/src/pyedb/configuration/configuration.py +0 -615
- pyedb-0.51.2/src/pyedb/grpc/database/__init__.py +0 -1
- {pyedb-0.51.2 → pyedb-0.52.0}/LICENSE +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/README.md +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/common/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/common/nets.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/component_libraries/ansys_components.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_boundaries.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_common.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_components.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_general.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_modeler.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_nets.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_operations.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_package_definition.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_padstacks.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_pin_groups.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_ports_sources.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_s_parameter_models.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_setup.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_stackup.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/clr_module.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/Variables.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/connectable.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/component.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/hierarchy_obj.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/model.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/netlist_model.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/pin_pair_model.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/s_parameter_model.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/spice_model.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/layout.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/layout_obj.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/primitive/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/primitive/bondwire.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/primitive/path.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/primitive/primitive.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/bundle_terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/edge_terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/padstack_instance_terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/point_terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/voltage_regulator.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/components.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/component_def.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/component_model.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/definition_obj.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/definitions.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/package_def.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/dotnet/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/dotnet/database.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/dotnet/primitive.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/control_file.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/design_options.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/edbvalue.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/hfss_extent_info.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/layer_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/nets_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/ports.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/primitives_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/raptor_x_simulation_setup_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/simulation_configuration.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/sources.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/utilities.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/variables.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/general.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/geometry/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/geometry/point_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/geometry/polygon_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/hfss.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/layout_obj_instance.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/materials.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/modeler.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/net_class.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/nets.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/padstack.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/adaptive_frequency_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/mesh_operation.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/sim_setup_info.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/simulation_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/sweep_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/io/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/io/siwave.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/siwave.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/heatsink.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/hfss_simulation_setup.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/obj_base.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/simulation_setup.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/siwave_simulation_setup.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/edb_logger.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/exceptions.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/extensions/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/extensions/via_design_backend.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/constants.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/data_handlers.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/design_types.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/filesystem.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/general_methods.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/plot.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/process.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/settings.py +0 -0
- {pyedb-0.51.2/src/pyedb/grpc/database/definition → pyedb-0.52.0/src/pyedb/grpc/database}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/components.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/control_file.py +0 -0
- {pyedb-0.51.2/src/pyedb/grpc/database/geometry → pyedb-0.52.0/src/pyedb/grpc/database/definition}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/component_def.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/component_model.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/component_pin.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/n_port_component_model.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/package_def.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/padstack_def.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definitions.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/general.py +0 -0
- {pyedb-0.51.2/src/pyedb/grpc/database/hierarchy → pyedb-0.52.0/src/pyedb/grpc/database/geometry}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/geometry/arc_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/geometry/point_3d_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/geometry/point_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/geometry/polygon_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hfss.py +0 -0
- {pyedb-0.51.2/src/pyedb/grpc/database/layers → pyedb-0.52.0/src/pyedb/grpc/database/hierarchy}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/component.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/model.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/netlist_model.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/pingroup.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/s_parameter_model.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/spice_model.py +0 -0
- {pyedb-0.51.2/src/pyedb/grpc/database/layout → pyedb-0.52.0/src/pyedb/grpc/database/layers}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layers/layer.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layers/stackup_layer.py +0 -0
- {pyedb-0.51.2/src/pyedb/grpc/database/net → pyedb-0.52.0/src/pyedb/grpc/database/layout}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layout/cell.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layout/layout.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layout/voltage_regulator.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layout_validation.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/modeler.py +0 -0
- {pyedb-0.51.2/src/pyedb/grpc/database/ports → pyedb-0.52.0/src/pyedb/grpc/database/net}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/net/extended_net.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/net/net.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/net/net_class.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/nets.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/padstacks.py +0 -0
- {pyedb-0.51.2/src/pyedb/grpc/database/simulation_setup → pyedb-0.52.0/src/pyedb/grpc/database/ports}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/ports/ports.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/bondwire.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/circle.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/padstack_instance.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/path.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/polygon.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/primitive.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/rectangle.py +0 -0
- {pyedb-0.51.2/src/pyedb/grpc/database/terminal → pyedb-0.52.0/src/pyedb/grpc/database/simulation_setup}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/adaptive_frequency.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_general_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_settings_options.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_solver_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/mesh_operation.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/sweep_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/siwave.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/stackup.py +0 -0
- {pyedb-0.51.2/src/pyedb/ipc2581 → pyedb-0.52.0/src/pyedb/grpc/database/terminal}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/bundle_terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/edge_terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/padstack_instance_terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/pingroup_terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/point_terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/terminal.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/constants.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/heat_sink.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/hfss_extent_info.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/layout_statistics.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/rlc.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/sources.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/sweep_data_distribution.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/xml_control_file.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/rpc_session.py +0 -0
- {pyedb-0.51.2/src/pyedb/ipc2581/bom → pyedb-0.52.0/src/pyedb/ipc2581}/__init__.py +0 -0
- {pyedb-0.51.2/src/pyedb/ipc2581/content → pyedb-0.52.0/src/pyedb/ipc2581/bom}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
- {pyedb-0.51.2/src/pyedb/ipc2581/ecad → pyedb-0.52.0/src/pyedb/ipc2581/content}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/color.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/content.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/fill.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
- {pyedb-0.51.2/src/pyedb/ipc2581/ecad/cad_data → pyedb-0.52.0/src/pyedb/ipc2581/ecad}/__init__.py +0 -0
- {pyedb-0.51.2/src/pyedb/misc → pyedb-0.52.0/src/pyedb/ipc2581/ecad/cad_data}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/history_record.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
- {pyedb-0.51.2/src/pyedb/misc/siw_feature_config → pyedb-0.52.0/src/pyedb/misc}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/downloads.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/misc.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
- {pyedb-0.51.2/src/pyedb/misc/siw_feature_config/emc → pyedb-0.52.0/src/pyedb/misc/siw_feature_config}/__init__.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/utilities.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/modeler/geometry_operators.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/siwave.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/siwave_core/icepak.py +0 -0
- {pyedb-0.51.2 → pyedb-0.52.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.52.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>
|
|
@@ -26,10 +26,10 @@ Requires-Dist: Rtree >= 1.2.0
|
|
|
26
26
|
Requires-Dist: toml == 0.10.2
|
|
27
27
|
Requires-Dist: shapely
|
|
28
28
|
Requires-Dist: scikit-rf
|
|
29
|
-
Requires-Dist: ansys-edb-core
|
|
30
|
-
Requires-Dist: ansys-api-edb
|
|
29
|
+
Requires-Dist: ansys-edb-core>=0.2.0.dev0
|
|
30
|
+
Requires-Dist: ansys-api-edb>=0.2.0.dev0
|
|
31
31
|
Requires-Dist: psutil
|
|
32
|
-
Requires-Dist: ansys-sphinx-theme>=0.
|
|
32
|
+
Requires-Dist: ansys-sphinx-theme>=1.0.0,<1.5 ; extra == "doc"
|
|
33
33
|
Requires-Dist: imageio>=2.30.0,<2.37 ; extra == "doc"
|
|
34
34
|
Requires-Dist: ipython>=8.13.0,<8.32 ; extra == "doc"
|
|
35
35
|
Requires-Dist: jupyterlab>=4.0.0,<4.4 ; extra == "doc"
|
|
@@ -36,8 +36,8 @@ dependencies = [
|
|
|
36
36
|
"toml == 0.10.2",
|
|
37
37
|
"shapely",
|
|
38
38
|
"scikit-rf",
|
|
39
|
-
"ansys-edb-core",
|
|
40
|
-
"ansys-api-edb",
|
|
39
|
+
"ansys-edb-core>=0.2.0.dev0",
|
|
40
|
+
"ansys-api-edb>=0.2.0.dev0",
|
|
41
41
|
"psutil",
|
|
42
42
|
]
|
|
43
43
|
|
|
@@ -52,7 +52,7 @@ tests = [
|
|
|
52
52
|
"shapely"
|
|
53
53
|
]
|
|
54
54
|
doc = [
|
|
55
|
-
"ansys-sphinx-theme>=0.
|
|
55
|
+
"ansys-sphinx-theme>=1.0.0,<1.5",
|
|
56
56
|
"imageio>=2.30.0,<2.37",
|
|
57
57
|
"ipython>=8.13.0,<8.32",
|
|
58
58
|
"jupyterlab>=4.0.0,<4.4",
|
|
@@ -0,0 +1,461 @@
|
|
|
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
|
+
from datetime import datetime
|
|
23
|
+
import json
|
|
24
|
+
import os
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
import warnings
|
|
27
|
+
|
|
28
|
+
import toml
|
|
29
|
+
|
|
30
|
+
from pyedb.configuration.cfg_data import CfgData
|
|
31
|
+
from pyedb.dotnet.database.definition.package_def import PackageDef
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class Configuration:
|
|
35
|
+
"""Enables export and import of a JSON configuration file that can be applied to a new or existing design."""
|
|
36
|
+
|
|
37
|
+
def __init__(self, pedb):
|
|
38
|
+
self._pedb = pedb
|
|
39
|
+
|
|
40
|
+
self._components = self._pedb.components.instances
|
|
41
|
+
self.data = {}
|
|
42
|
+
self._s_parameter_library = ""
|
|
43
|
+
self._spice_model_library = ""
|
|
44
|
+
self.cfg_data = CfgData(self._pedb)
|
|
45
|
+
|
|
46
|
+
def load(self, config_file, append=True, apply_file=False, output_file=None, open_at_the_end=True):
|
|
47
|
+
"""Import configuration settings from a configure file.
|
|
48
|
+
|
|
49
|
+
Parameters
|
|
50
|
+
----------
|
|
51
|
+
config_file : str, dict
|
|
52
|
+
Full path to configure file in JSON or TOML format. Dictionary is also supported.
|
|
53
|
+
append : bool, optional
|
|
54
|
+
Whether if the new file will append to existing properties or the properties will be cleared before import.
|
|
55
|
+
Default is ``True`` to keep stored properties
|
|
56
|
+
apply_file : bool, optional
|
|
57
|
+
Whether to apply the file after the load or not. Default is ``False``.
|
|
58
|
+
output_file : str, optional
|
|
59
|
+
Full path to the new aedb folder where the configured project will be saved.
|
|
60
|
+
open_at_the_end : bool, optional
|
|
61
|
+
Whether to keep the new generated file opened at the end. Default is ``True``.
|
|
62
|
+
|
|
63
|
+
Returns
|
|
64
|
+
-------
|
|
65
|
+
dict
|
|
66
|
+
Config dictionary.
|
|
67
|
+
"""
|
|
68
|
+
if isinstance(config_file, dict):
|
|
69
|
+
data = config_file
|
|
70
|
+
else:
|
|
71
|
+
config_file = str(config_file)
|
|
72
|
+
if os.path.isfile(config_file):
|
|
73
|
+
with open(config_file, "r") as f:
|
|
74
|
+
if config_file.endswith(".json"):
|
|
75
|
+
data = json.load(f)
|
|
76
|
+
elif config_file.endswith(".toml"):
|
|
77
|
+
data = toml.load(f)
|
|
78
|
+
else: # pragma: no cover
|
|
79
|
+
raise RuntimeError(f"File {config_file} does not exist.")
|
|
80
|
+
|
|
81
|
+
if not append: # pragma: no cover
|
|
82
|
+
self.data = {}
|
|
83
|
+
for k, v in data.items():
|
|
84
|
+
if k in self.data:
|
|
85
|
+
if isinstance(v, list):
|
|
86
|
+
self.data[k].extend(v)
|
|
87
|
+
elif isinstance(v, dict): # pragma: no cover
|
|
88
|
+
self.data[k].update(v)
|
|
89
|
+
else: # pragma: no cover
|
|
90
|
+
self.data[k] = v
|
|
91
|
+
else:
|
|
92
|
+
self.data[k] = v
|
|
93
|
+
|
|
94
|
+
self.cfg_data = CfgData(self._pedb, **self.data)
|
|
95
|
+
|
|
96
|
+
if apply_file:
|
|
97
|
+
original_file = self._pedb.edbpath
|
|
98
|
+
if output_file:
|
|
99
|
+
self._pedb.save_edb_as(output_file)
|
|
100
|
+
self.run()
|
|
101
|
+
if output_file and not open_at_the_end:
|
|
102
|
+
self._pedb.save_edb()
|
|
103
|
+
self._pedb.close_edb()
|
|
104
|
+
self._pedb.edbpath = original_file
|
|
105
|
+
self._pedb.open_edb()
|
|
106
|
+
return self.cfg_data
|
|
107
|
+
|
|
108
|
+
def run(self, **kwargs):
|
|
109
|
+
"""Apply configuration settings to the current design"""
|
|
110
|
+
if kwargs.get("fix_padstack_def"):
|
|
111
|
+
warnings.warn("fix_padstack_def is deprecated.", DeprecationWarning)
|
|
112
|
+
|
|
113
|
+
if self.cfg_data.variables:
|
|
114
|
+
self.cfg_data.variables.apply()
|
|
115
|
+
|
|
116
|
+
if self.cfg_data.general:
|
|
117
|
+
self.cfg_data.general.apply()
|
|
118
|
+
|
|
119
|
+
# Configure boundary settings
|
|
120
|
+
now = datetime.now()
|
|
121
|
+
if self.cfg_data.boundaries:
|
|
122
|
+
self.cfg_data.boundaries.apply()
|
|
123
|
+
self._pedb.logger.info(f"Updating boundaries finished. Time lapse {datetime.now() - now}")
|
|
124
|
+
now = datetime.now()
|
|
125
|
+
|
|
126
|
+
# Configure nets
|
|
127
|
+
if self.cfg_data.nets:
|
|
128
|
+
self.cfg_data.nets.apply()
|
|
129
|
+
self._pedb.logger.info(f"Updating nets finished. Time lapse {datetime.now() - now}")
|
|
130
|
+
now = datetime.now()
|
|
131
|
+
|
|
132
|
+
# Configure components
|
|
133
|
+
self.cfg_data.components.apply()
|
|
134
|
+
self._pedb.logger.info(f"Updating components finished. Time lapse {datetime.now() - now}")
|
|
135
|
+
now = datetime.now()
|
|
136
|
+
|
|
137
|
+
# Configure pin groups
|
|
138
|
+
self.cfg_data.pin_groups.apply()
|
|
139
|
+
self._pedb.logger.info(f"Creating pin groups finished. Time lapse {datetime.now() - now}")
|
|
140
|
+
now = datetime.now()
|
|
141
|
+
|
|
142
|
+
# Configure sources
|
|
143
|
+
self.cfg_data.sources.apply()
|
|
144
|
+
self._pedb.logger.info(f"Placing sources finished. Time lapse {datetime.now() - now}")
|
|
145
|
+
now = datetime.now()
|
|
146
|
+
|
|
147
|
+
# Configure setup
|
|
148
|
+
self.cfg_data.setups.apply()
|
|
149
|
+
self._pedb.logger.info(f"Creating setups finished. Time lapse {datetime.now() - now}")
|
|
150
|
+
now = datetime.now()
|
|
151
|
+
|
|
152
|
+
# Configure stackup
|
|
153
|
+
self.configuration_stackup()
|
|
154
|
+
self._pedb.logger.info(f"Updating stackup finished. Time lapse {datetime.now() - now}")
|
|
155
|
+
now = datetime.now()
|
|
156
|
+
|
|
157
|
+
# Configure padstacks
|
|
158
|
+
if self.cfg_data.padstacks:
|
|
159
|
+
self.cfg_data.padstacks.apply()
|
|
160
|
+
self._pedb.logger.info(f"Applying padstacks finished. Time lapse {datetime.now() - now}")
|
|
161
|
+
now = datetime.now()
|
|
162
|
+
|
|
163
|
+
# Configure S-parameter
|
|
164
|
+
self.cfg_data.s_parameters.apply()
|
|
165
|
+
self._pedb.logger.info(f"Applying S-parameters finished. Time lapse {datetime.now() - now}")
|
|
166
|
+
now = datetime.now()
|
|
167
|
+
|
|
168
|
+
# Configure SPICE models
|
|
169
|
+
for spice_model in self.cfg_data.spice_models:
|
|
170
|
+
spice_model.apply()
|
|
171
|
+
self._pedb.logger.info(f"Assigning Spice models finished. Time lapse {datetime.now() - now}")
|
|
172
|
+
now = datetime.now()
|
|
173
|
+
|
|
174
|
+
# Configure package definitions
|
|
175
|
+
self.cfg_data.package_definitions.apply()
|
|
176
|
+
self._pedb.logger.info(f"Applying package definitions finished. Time lapse {datetime.now() - now}")
|
|
177
|
+
now = datetime.now()
|
|
178
|
+
|
|
179
|
+
# Modeler
|
|
180
|
+
self.cfg_data.modeler.apply()
|
|
181
|
+
|
|
182
|
+
# Configure ports
|
|
183
|
+
self.cfg_data.ports.apply()
|
|
184
|
+
self._pedb.logger.info(f"Placing ports finished. Time lapse {datetime.now() - now}")
|
|
185
|
+
now = datetime.now()
|
|
186
|
+
|
|
187
|
+
# Configure probes
|
|
188
|
+
self.cfg_data.probes.apply()
|
|
189
|
+
self._pedb.logger.info(f"Placing probes finished. Time lapse {datetime.now() - now}")
|
|
190
|
+
|
|
191
|
+
# Configure operations
|
|
192
|
+
self.cfg_data.operations.apply()
|
|
193
|
+
|
|
194
|
+
return True
|
|
195
|
+
|
|
196
|
+
def configuration_stackup(self):
|
|
197
|
+
temp_pdef_data = {}
|
|
198
|
+
for pdef_name, pdef in self._pedb.padstacks.definitions.items():
|
|
199
|
+
pdef_edb_object = pdef._padstack_def_data
|
|
200
|
+
temp_pdef_data[pdef_name] = pdef_edb_object
|
|
201
|
+
|
|
202
|
+
temp_p_inst_layer_map = {}
|
|
203
|
+
for p_inst in self._pedb.layout.padstack_instances:
|
|
204
|
+
temp_p_inst_layer_map[p_inst.id] = p_inst._edb_object.GetLayerMap()
|
|
205
|
+
|
|
206
|
+
self.cfg_data.stackup.apply()
|
|
207
|
+
|
|
208
|
+
for pdef_name, pdef_data in temp_pdef_data.items():
|
|
209
|
+
pdef = self._pedb.padstacks.definitions[pdef_name]
|
|
210
|
+
pdef._padstack_def_data = pdef_data
|
|
211
|
+
|
|
212
|
+
for p_inst in self._pedb.layout.padstack_instances:
|
|
213
|
+
p_inst._edb_object.SetLayerMap(temp_p_inst_layer_map[p_inst.id])
|
|
214
|
+
|
|
215
|
+
def _load_stackup(self):
|
|
216
|
+
"""Imports stackup information from json."""
|
|
217
|
+
data = self.data["stackup"]
|
|
218
|
+
materials = data.get("materials")
|
|
219
|
+
|
|
220
|
+
if materials:
|
|
221
|
+
edb_materials = {i.lower(): i for i, _ in self._pedb.materials.materials.items()}
|
|
222
|
+
for mat in materials:
|
|
223
|
+
name = mat["name"].lower()
|
|
224
|
+
if name in edb_materials:
|
|
225
|
+
self._pedb.materials.delete_material(edb_materials[name])
|
|
226
|
+
for mat in materials:
|
|
227
|
+
self._pedb.materials.add_material(**mat)
|
|
228
|
+
|
|
229
|
+
layers = data.get("layers")
|
|
230
|
+
|
|
231
|
+
if layers:
|
|
232
|
+
input_signal_layers = [i for i in layers if i["type"].lower() == "signal"]
|
|
233
|
+
if not len(input_signal_layers) == len(self._pedb.stackup.signal_layers):
|
|
234
|
+
self._pedb.logger.error("Input signal layer count do not match.")
|
|
235
|
+
return False
|
|
236
|
+
|
|
237
|
+
removal_list = []
|
|
238
|
+
lc_signal_layers = []
|
|
239
|
+
for name, obj in self._pedb.stackup.all_layers.items():
|
|
240
|
+
if obj.type == "dielectric":
|
|
241
|
+
removal_list.append(name)
|
|
242
|
+
elif obj.type == "signal":
|
|
243
|
+
lc_signal_layers.append(obj.id)
|
|
244
|
+
for l in removal_list:
|
|
245
|
+
self._pedb.stackup.remove_layer(l)
|
|
246
|
+
|
|
247
|
+
# update all signal layers
|
|
248
|
+
id_name = {i[0]: i[1] for i in self._pedb.stackup.layers_by_id}
|
|
249
|
+
signal_idx = 0
|
|
250
|
+
for l in layers:
|
|
251
|
+
if l["type"] == "signal":
|
|
252
|
+
layer_id = lc_signal_layers[signal_idx]
|
|
253
|
+
layer_name = id_name[layer_id]
|
|
254
|
+
self._pedb.stackup.layers[layer_name].update(**l)
|
|
255
|
+
signal_idx = signal_idx + 1
|
|
256
|
+
|
|
257
|
+
# add all dielectric layers. Dielectric layers must be added last. Otherwise,
|
|
258
|
+
# dielectric layer will occupy signal and document layer id.
|
|
259
|
+
prev_layer_clone = None
|
|
260
|
+
l = layers.pop(0)
|
|
261
|
+
if l["type"] == "signal":
|
|
262
|
+
prev_layer_clone = self._pedb.stackup.layers[l["name"]]
|
|
263
|
+
else:
|
|
264
|
+
prev_layer_clone = self._pedb.stackup.add_layer_top(**l)
|
|
265
|
+
for idx, l in enumerate(layers):
|
|
266
|
+
if l["type"] == "dielectric":
|
|
267
|
+
prev_layer_clone = self._pedb.stackup.add_layer_below(base_layer_name=prev_layer_clone.name, **l)
|
|
268
|
+
elif l["type"] == "signal":
|
|
269
|
+
prev_layer_clone = self._pedb.stackup.layers[l["name"]]
|
|
270
|
+
|
|
271
|
+
def _load_package_def(self):
|
|
272
|
+
"""Imports package definition information from JSON."""
|
|
273
|
+
comps = self._pedb.components.instances
|
|
274
|
+
for pkgd in self.data["package_definitions"]:
|
|
275
|
+
name = pkgd["name"]
|
|
276
|
+
if name in self._pedb.definitions.package:
|
|
277
|
+
self._pedb.definitions.package[name].delete()
|
|
278
|
+
extent_bounding_box = pkgd.get("extent_bounding_box", None)
|
|
279
|
+
if extent_bounding_box:
|
|
280
|
+
package_def = PackageDef(self._pedb, name=name, extent_bounding_box=extent_bounding_box)
|
|
281
|
+
else:
|
|
282
|
+
package_def = PackageDef(self._pedb, name=name, component_part_name=pkgd["component_definition"])
|
|
283
|
+
package_def.maximum_power = pkgd["maximum_power"]
|
|
284
|
+
package_def.therm_cond = pkgd["therm_cond"]
|
|
285
|
+
package_def.theta_jb = pkgd["theta_jb"]
|
|
286
|
+
package_def.theta_jc = pkgd["theta_jc"]
|
|
287
|
+
package_def.height = pkgd["height"]
|
|
288
|
+
|
|
289
|
+
heatsink = pkgd.get("heatsink", None)
|
|
290
|
+
if heatsink:
|
|
291
|
+
package_def.set_heatsink(
|
|
292
|
+
heatsink["fin_base_height"],
|
|
293
|
+
heatsink["fin_height"],
|
|
294
|
+
heatsink["fin_orientation"],
|
|
295
|
+
heatsink["fin_spacing"],
|
|
296
|
+
heatsink["fin_thickness"],
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
comp_def_name = pkgd["component_definition"]
|
|
300
|
+
comp_def = self._pedb.definitions.component[comp_def_name]
|
|
301
|
+
|
|
302
|
+
comp_list = dict()
|
|
303
|
+
if pkgd["apply_to_all"]:
|
|
304
|
+
comp_list.update(
|
|
305
|
+
{refdes: comp for refdes, comp in comp_def.components.items() if refdes not in pkgd["components"]}
|
|
306
|
+
)
|
|
307
|
+
else:
|
|
308
|
+
comp_list.update(
|
|
309
|
+
{refdes: comp for refdes, comp in comp_def.components.items() if refdes in pkgd["components"]}
|
|
310
|
+
)
|
|
311
|
+
for _, i in comp_list.items():
|
|
312
|
+
i.package_def = name
|
|
313
|
+
|
|
314
|
+
def get_data_from_db(self, **kwargs):
|
|
315
|
+
"""Get configuration data from layout.
|
|
316
|
+
|
|
317
|
+
Parameters
|
|
318
|
+
----------
|
|
319
|
+
stackup
|
|
320
|
+
|
|
321
|
+
Returns
|
|
322
|
+
-------
|
|
323
|
+
|
|
324
|
+
"""
|
|
325
|
+
self._pedb.logger.info("Getting data from layout database.")
|
|
326
|
+
data = {}
|
|
327
|
+
if kwargs.get("general", False):
|
|
328
|
+
data["general"] = self.cfg_data.general.get_data_from_db()
|
|
329
|
+
if kwargs.get("stackup", False):
|
|
330
|
+
data["stackup"] = self.cfg_data.stackup.get_data_from_db()
|
|
331
|
+
if kwargs.get("package_definitions", False):
|
|
332
|
+
data["package_definitions"] = self.cfg_data.package_definitions.get_data_from_db()
|
|
333
|
+
if kwargs.get("setups", False):
|
|
334
|
+
setups = self.cfg_data.setups
|
|
335
|
+
setups.retrieve_parameters_from_edb()
|
|
336
|
+
data["setups"] = setups.to_dict()
|
|
337
|
+
if kwargs.get("sources", False):
|
|
338
|
+
data["sources"] = self.cfg_data.sources.get_data_from_db()
|
|
339
|
+
if kwargs.get("ports", False):
|
|
340
|
+
data["ports"] = self.cfg_data.ports.get_data_from_db()
|
|
341
|
+
if kwargs.get("components", False) or kwargs.get("s_parameters", False):
|
|
342
|
+
self.cfg_data.components.retrieve_parameters_from_edb()
|
|
343
|
+
components = []
|
|
344
|
+
for i in self.cfg_data.components.components:
|
|
345
|
+
if i.type == "io":
|
|
346
|
+
components.append(i.get_attributes())
|
|
347
|
+
components.append(i.get_attributes())
|
|
348
|
+
|
|
349
|
+
if kwargs.get("components", False):
|
|
350
|
+
data["components"] = components
|
|
351
|
+
elif kwargs.get("s_parameters", False):
|
|
352
|
+
data["s_parameters"] = self.cfg_data.s_parameters.get_data_from_db(components)
|
|
353
|
+
if kwargs.get("nets", False):
|
|
354
|
+
data["nets"] = self.cfg_data.nets.get_data_from_db()
|
|
355
|
+
if kwargs.get("pin_groups", False):
|
|
356
|
+
data["pin_groups"] = self.cfg_data.pin_groups.get_data_from_db()
|
|
357
|
+
if kwargs.get("operations", False):
|
|
358
|
+
data["operations"] = self.cfg_data.operations.get_data_from_db()
|
|
359
|
+
if kwargs.get("padstacks", False):
|
|
360
|
+
self.cfg_data.padstacks.retrieve_parameters_from_edb()
|
|
361
|
+
definitions = []
|
|
362
|
+
for i in self.cfg_data.padstacks.definitions:
|
|
363
|
+
definitions.append(i.get_attributes())
|
|
364
|
+
instances = []
|
|
365
|
+
for i in self.cfg_data.padstacks.instances:
|
|
366
|
+
instances.append(i.get_attributes())
|
|
367
|
+
data["padstacks"] = dict()
|
|
368
|
+
data["padstacks"]["definitions"] = definitions
|
|
369
|
+
data["padstacks"]["instances"] = instances
|
|
370
|
+
|
|
371
|
+
if kwargs.get("boundaries", False):
|
|
372
|
+
data["boundaries"] = self.cfg_data.boundaries.get_data_from_db()
|
|
373
|
+
|
|
374
|
+
return data
|
|
375
|
+
|
|
376
|
+
def export(
|
|
377
|
+
self,
|
|
378
|
+
file_path,
|
|
379
|
+
stackup=True,
|
|
380
|
+
package_definitions=False,
|
|
381
|
+
setups=True,
|
|
382
|
+
sources=True,
|
|
383
|
+
ports=True,
|
|
384
|
+
nets=True,
|
|
385
|
+
pin_groups=True,
|
|
386
|
+
operations=True,
|
|
387
|
+
components=True,
|
|
388
|
+
boundaries=True,
|
|
389
|
+
s_parameters=True,
|
|
390
|
+
padstacks=True,
|
|
391
|
+
general=True,
|
|
392
|
+
):
|
|
393
|
+
"""Export the configuration data from layout to a file.
|
|
394
|
+
|
|
395
|
+
Parameters
|
|
396
|
+
----------
|
|
397
|
+
file_path : str, Path
|
|
398
|
+
File path to export the configuration data.
|
|
399
|
+
stackup : bool
|
|
400
|
+
Whether to export stackup or not.
|
|
401
|
+
package_definitions : bool
|
|
402
|
+
Whether to export package definitions or not.
|
|
403
|
+
setups : bool
|
|
404
|
+
Whether to export setups or not.
|
|
405
|
+
sources : bool
|
|
406
|
+
Whether to export sources or not.
|
|
407
|
+
ports : bool
|
|
408
|
+
Whether to export ports or not.
|
|
409
|
+
nets : bool
|
|
410
|
+
Whether to export nets.
|
|
411
|
+
pin_groups : bool
|
|
412
|
+
Whether to export pin groups.
|
|
413
|
+
operations : bool
|
|
414
|
+
Whether to export operations.
|
|
415
|
+
components : bool
|
|
416
|
+
Whether to export component.
|
|
417
|
+
boundaries : bool
|
|
418
|
+
Whether to export boundaries.
|
|
419
|
+
s_parameters : bool
|
|
420
|
+
Whether to export s_parameters.
|
|
421
|
+
padstacks : bool
|
|
422
|
+
Whether to export padstacks.
|
|
423
|
+
general : bool
|
|
424
|
+
Whether to export general information.
|
|
425
|
+
Returns
|
|
426
|
+
-------
|
|
427
|
+
bool
|
|
428
|
+
"""
|
|
429
|
+
data = self.get_data_from_db(
|
|
430
|
+
stackup=stackup,
|
|
431
|
+
package_definitions=package_definitions,
|
|
432
|
+
setups=setups,
|
|
433
|
+
sources=sources,
|
|
434
|
+
ports=ports,
|
|
435
|
+
nets=nets,
|
|
436
|
+
pin_groups=pin_groups,
|
|
437
|
+
operations=operations,
|
|
438
|
+
components=components,
|
|
439
|
+
boundaries=boundaries,
|
|
440
|
+
s_parameters=s_parameters,
|
|
441
|
+
padstacks=padstacks,
|
|
442
|
+
general=general,
|
|
443
|
+
)
|
|
444
|
+
|
|
445
|
+
file_path = file_path if isinstance(file_path, Path) else Path(file_path)
|
|
446
|
+
file_path = file_path.with_suffix(".json") if file_path.suffix == "" else file_path
|
|
447
|
+
|
|
448
|
+
for comp in data["components"]:
|
|
449
|
+
for key, value in comp.items():
|
|
450
|
+
try:
|
|
451
|
+
json.dumps(value)
|
|
452
|
+
print(f"Key '{key}' is serializable.")
|
|
453
|
+
except TypeError as e:
|
|
454
|
+
print(f"Key '{key}' failed: {e}")
|
|
455
|
+
|
|
456
|
+
with open(file_path, "w") as f:
|
|
457
|
+
if file_path.suffix == ".json":
|
|
458
|
+
json.dump(data, f, ensure_ascii=False, indent=4)
|
|
459
|
+
else:
|
|
460
|
+
toml.dump(data, f)
|
|
461
|
+
return True if os.path.isfile(file_path) else False
|
|
@@ -1807,8 +1807,14 @@ class EDBPadstackInstance(Primitive):
|
|
|
1807
1807
|
|
|
1808
1808
|
val = String("")
|
|
1809
1809
|
_, name = self._edb_padstackinstance.GetProductProperty(self._pedb.edb_api.ProductId.Designer, 11, val)
|
|
1810
|
-
|
|
1811
|
-
|
|
1810
|
+
aedt_name = str(name).strip("'")
|
|
1811
|
+
if aedt_name == "":
|
|
1812
|
+
if self.is_pin and self.component:
|
|
1813
|
+
aedt_name = f"{self.component.name}-{self.component_pin}"
|
|
1814
|
+
elif self.component_pin:
|
|
1815
|
+
aedt_name = self.component_pin
|
|
1816
|
+
self.aedt_name = aedt_name
|
|
1817
|
+
return aedt_name
|
|
1812
1818
|
|
|
1813
1819
|
@aedt_name.setter
|
|
1814
1820
|
def aedt_name(self, value):
|
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
|
|
23
23
|
import re
|
|
24
24
|
|
|
25
|
-
from pyedb.dotnet.clr_module import String
|
|
26
25
|
from pyedb.dotnet.database.edb_data.padstacks_data import EDBPadstackInstance
|
|
27
26
|
from pyedb.dotnet.database.edb_data.primitives_data import Primitive
|
|
28
27
|
from pyedb.generic.general_methods import generate_unique_name
|
|
@@ -325,21 +324,12 @@ class LayoutValidation:
|
|
|
325
324
|
return
|
|
326
325
|
|
|
327
326
|
def padstacks_no_name(self, fix=False):
|
|
327
|
+
"""Find and fix padstacks without aedt_name."""
|
|
328
328
|
pds = self._pedb.layout.padstack_instances
|
|
329
329
|
counts = 0
|
|
330
|
-
via_count = 1
|
|
331
330
|
for obj in pds:
|
|
332
|
-
|
|
333
|
-
_, name = obj._edb_object.GetProductProperty(self._pedb.edb_api.ProductId.Designer, 11, val)
|
|
334
|
-
name = str(name).strip("'")
|
|
335
|
-
if name == "":
|
|
331
|
+
if obj.aedt_name == "":
|
|
336
332
|
counts += 1
|
|
337
333
|
if fix:
|
|
338
|
-
|
|
339
|
-
obj._edb_object.SetProductProperty(self._pedb.edb_api.ProductId.Designer, 11, f"Via{via_count}")
|
|
340
|
-
via_count = via_count + 1
|
|
341
|
-
else:
|
|
342
|
-
obj._edb_object.SetProductProperty(
|
|
343
|
-
self._pedb.edb_api.ProductId.Designer, 11, f"{obj.component.name}-{obj.component_pin}"
|
|
344
|
-
)
|
|
334
|
+
obj.aedt_name = f"via_{obj.id}"
|
|
345
335
|
self._pedb._logger.info(f"Found {counts}/{len(pds)} padstacks have no name.")
|
|
@@ -2234,7 +2234,7 @@ class Stackup(LayerCollection):
|
|
|
2234
2234
|
material.loss_tanget = material_properties["DielectricLossTangent"]
|
|
2235
2235
|
return True
|
|
2236
2236
|
|
|
2237
|
-
def _import_xml(self, file_path
|
|
2237
|
+
def _import_xml(self, file_path):
|
|
2238
2238
|
"""Read external xml file and convert into json file.
|
|
2239
2239
|
You can use xml file to import layer stackup but using json file is recommended.
|
|
2240
2240
|
see :class:`pyedb.dotnet.database.edb_data.simulation_configuration.SimulationConfiguration´ class to
|
|
@@ -2304,7 +2304,8 @@ class Stackup(LayerCollection):
|
|
|
2304
2304
|
layers.append(layer)
|
|
2305
2305
|
stackup_dict["layers"] = layers
|
|
2306
2306
|
cfg = {"stackup": stackup_dict}
|
|
2307
|
-
|
|
2307
|
+
self._pedb.configuration.load(cfg)
|
|
2308
|
+
return self._pedb.configuration.run()
|
|
2308
2309
|
|
|
2309
2310
|
def _export_xml(self, file_path):
|
|
2310
2311
|
"""Export stackup information to an external XMLfile.
|
|
@@ -2391,7 +2392,7 @@ class Stackup(LayerCollection):
|
|
|
2391
2392
|
elif file_path.endswith(".json"):
|
|
2392
2393
|
return self._import_json(file_path, rename=rename)
|
|
2393
2394
|
elif file_path.endswith(".xml"):
|
|
2394
|
-
return self._import_xml(file_path
|
|
2395
|
+
return self._import_xml(file_path)
|
|
2395
2396
|
else:
|
|
2396
2397
|
return False
|
|
2397
2398
|
|
|
@@ -1238,7 +1238,7 @@ class Edb(Database):
|
|
|
1238
1238
|
return self._core_primitives
|
|
1239
1239
|
|
|
1240
1240
|
@property
|
|
1241
|
-
def layout(self):
|
|
1241
|
+
def layout(self) -> Layout:
|
|
1242
1242
|
"""Layout object.
|
|
1243
1243
|
|
|
1244
1244
|
Returns
|
|
@@ -4735,3 +4735,37 @@ class Edb(Database):
|
|
|
4735
4735
|
return self.variables[variable_name]
|
|
4736
4736
|
else:
|
|
4737
4737
|
return False
|
|
4738
|
+
|
|
4739
|
+
def compare(self, input_file, results=""):
|
|
4740
|
+
"""Compares current open database with another one.
|
|
4741
|
+
|
|
4742
|
+
Parameters
|
|
4743
|
+
----------
|
|
4744
|
+
input_file : str
|
|
4745
|
+
Path to the edb file.
|
|
4746
|
+
results: str, optional
|
|
4747
|
+
Path to directory in which results will be saved. If no path is given, a new "_compare_results"
|
|
4748
|
+
directory will be created with the same naming and path as the .aedb folder.
|
|
4749
|
+
Returns
|
|
4750
|
+
-------
|
|
4751
|
+
bool
|
|
4752
|
+
``True`` when successful, ``False`` when failed.
|
|
4753
|
+
"""
|
|
4754
|
+
self.save()
|
|
4755
|
+
if not results:
|
|
4756
|
+
results = self.edbpath[:-5] + "_compare_results"
|
|
4757
|
+
os.mkdir(results)
|
|
4758
|
+
command = os.path.join(self.base_path, "EDBDiff.exe")
|
|
4759
|
+
if is_linux:
|
|
4760
|
+
mono_path = os.path.join(self.base_path, "common/mono/Linux64/bin/mono")
|
|
4761
|
+
cmd_input = [mono_path, command, input_file, self.edbpath, results]
|
|
4762
|
+
else:
|
|
4763
|
+
cmd_input = [command, input_file, self.edbpath, results]
|
|
4764
|
+
subprocess.run(cmd_input)
|
|
4765
|
+
|
|
4766
|
+
if not os.path.exists(os.path.join(results, "EDBDiff.csv")):
|
|
4767
|
+
self.logger.error("Comparison execution failed")
|
|
4768
|
+
return False
|
|
4769
|
+
else:
|
|
4770
|
+
self.logger.info("Comparison correctly completed")
|
|
4771
|
+
return True
|