pyedb 0.53.0__tar.gz → 0.55.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.53.0 → pyedb-0.55.0}/PKG-INFO +2 -3
- {pyedb-0.53.0 → pyedb-0.55.0}/pyproject.toml +2 -3
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/__init__.py +1 -8
- pyedb-0.55.0/src/pyedb/configuration/cfg_boundaries.py +105 -0
- pyedb-0.55.0/src/pyedb/configuration/cfg_components.py +269 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/configuration/cfg_data.py +4 -2
- pyedb-0.55.0/src/pyedb/configuration/cfg_general.py +50 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/configuration/cfg_modeler.py +2 -1
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/configuration/cfg_nets.py +21 -35
- pyedb-0.55.0/src/pyedb/configuration/cfg_operations.py +51 -0
- pyedb-0.55.0/src/pyedb/configuration/cfg_package_definition.py +129 -0
- pyedb-0.55.0/src/pyedb/configuration/cfg_padstacks.py +398 -0
- pyedb-0.55.0/src/pyedb/configuration/cfg_pin_groups.py +98 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/configuration/cfg_ports_sources.py +20 -9
- pyedb-0.55.0/src/pyedb/configuration/cfg_s_parameter_models.py +116 -0
- pyedb-0.55.0/src/pyedb/configuration/cfg_setup.py +230 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/configuration/configuration.py +66 -6
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/connectable.py +38 -9
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/hierarchy/component.py +28 -28
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/hierarchy/model.py +1 -1
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/layout.py +64 -3
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/layout_obj.py +3 -3
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/primitive/path.py +6 -8
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/primitive/primitive.py +10 -31
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/terminal/edge_terminal.py +2 -2
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/terminal/padstack_instance_terminal.py +1 -1
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +1 -1
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/terminal/point_terminal.py +1 -1
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/terminal/terminal.py +26 -28
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/voltage_regulator.py +0 -21
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/components.py +99 -91
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/definition/component_def.py +4 -4
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/definition/component_model.py +1 -1
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/definition/package_def.py +2 -3
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/dotnet/database.py +27 -218
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/dotnet/primitive.py +16 -16
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/control_file.py +5 -5
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/hfss_extent_info.py +6 -6
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/layer_data.py +35 -35
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/padstacks_data.py +65 -90
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/primitives_data.py +5 -5
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/sources.py +6 -6
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/variables.py +8 -4
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/geometry/point_data.py +14 -10
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/geometry/polygon_data.py +3 -5
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/hfss.py +50 -52
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/layout_validation.py +14 -11
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/materials.py +10 -11
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/modeler.py +104 -101
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/nets.py +20 -23
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/padstack.py +156 -84
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/sim_setup_data/data/settings.py +24 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/sim_setup_data/io/siwave.py +26 -1
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/siwave.py +47 -47
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/stackup.py +152 -87
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/utilities/heatsink.py +4 -4
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/utilities/obj_base.py +3 -3
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/utilities/simulation_setup.py +2 -2
- pyedb-0.55.0/src/pyedb/dotnet/database/utilities/value.py +116 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/edb.py +248 -170
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/edb_logger.py +12 -27
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/extensions/via_design_backend.py +6 -3
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/generic/design_types.py +68 -21
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/generic/general_methods.py +0 -120
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/generic/process.py +44 -108
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/generic/settings.py +75 -19
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/components.py +55 -17
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/control_file.py +5 -5
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/definition/materials.py +24 -31
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/definition/package_def.py +18 -18
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/definition/padstack_def.py +104 -51
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/geometry/arc_data.py +7 -5
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/geometry/point_3d_data.py +8 -7
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/geometry/polygon_data.py +4 -3
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/hierarchy/component.py +43 -38
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/hierarchy/pin_pair_model.py +15 -14
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/hierarchy/pingroup.py +9 -9
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/layers/stackup_layer.py +45 -44
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/layout/layout.py +17 -13
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/layout/voltage_regulator.py +7 -7
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/layout_validation.py +16 -15
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/modeler.py +60 -58
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/net/net.py +15 -14
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/nets.py +112 -31
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/padstacks.py +303 -190
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/ports/ports.py +5 -6
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/primitive/bondwire.py +8 -7
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/primitive/circle.py +4 -4
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/primitive/padstack_instance.py +191 -23
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/primitive/path.py +7 -7
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/primitive/polygon.py +3 -3
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/primitive/primitive.py +13 -17
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/primitive/rectangle.py +13 -13
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/hfss_general_settings.py +1 -1
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +10 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +17 -1
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/siwave.py +31 -25
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/source_excitations.py +335 -233
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/stackup.py +165 -148
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/terminal/bundle_terminal.py +18 -8
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/terminal/edge_terminal.py +10 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/terminal/padstack_instance_terminal.py +16 -5
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/terminal/pingroup_terminal.py +12 -11
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/terminal/point_terminal.py +4 -3
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/terminal/terminal.py +9 -9
- pyedb-0.55.0/src/pyedb/grpc/database/utility/value.py +109 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/utility/xml_control_file.py +5 -5
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/edb.py +130 -63
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/edb_init.py +3 -10
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/rpc_session.py +10 -10
- pyedb-0.55.0/src/pyedb/libraries/common.py +366 -0
- pyedb-0.55.0/src/pyedb/libraries/rf_libraries/base_functions.py +1358 -0
- pyedb-0.55.0/src/pyedb/libraries/rf_libraries/planar_antennas.py +628 -0
- pyedb-0.55.0/src/pyedb/misc/decorators.py +61 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/misc.py +0 -13
- pyedb-0.55.0/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/siwave.py +2 -2
- pyedb-0.53.0/src/pyedb/configuration/cfg_boundaries.py +0 -187
- pyedb-0.53.0/src/pyedb/configuration/cfg_components.py +0 -528
- pyedb-0.53.0/src/pyedb/configuration/cfg_general.py +0 -73
- pyedb-0.53.0/src/pyedb/configuration/cfg_operations.py +0 -180
- pyedb-0.53.0/src/pyedb/configuration/cfg_package_definition.py +0 -185
- pyedb-0.53.0/src/pyedb/configuration/cfg_padstacks.py +0 -794
- pyedb-0.53.0/src/pyedb/configuration/cfg_pin_groups.py +0 -145
- pyedb-0.53.0/src/pyedb/configuration/cfg_s_parameter_models.py +0 -221
- pyedb-0.53.0/src/pyedb/configuration/cfg_setup.py +0 -423
- {pyedb-0.53.0 → pyedb-0.55.0}/LICENSE +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/README.md +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/common/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/common/nets.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/component_libraries/ansys_components.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/configuration/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/configuration/cfg_common.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/configuration/cfg_stackup.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/clr_module.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/Variables.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/hierarchy/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/hierarchy/hierarchy_obj.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/hierarchy/netlist_model.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/hierarchy/pin_pair_model.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/hierarchy/s_parameter_model.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/hierarchy/spice_model.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/primitive/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/primitive/bondwire.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/terminal/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/cell/terminal/bundle_terminal.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/definition/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/definition/definition_obj.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/definition/definitions.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/dotnet/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/design_options.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/edbvalue.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/nets_data.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/ports.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/raptor_x_simulation_setup_data.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/simulation_configuration.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/edb_data/utilities.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/general.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/geometry/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/layout_obj_instance.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/net_class.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/sim_setup_data/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/sim_setup_data/data/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/sim_setup_data/data/adaptive_frequency_data.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/sim_setup_data/data/mesh_operation.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/sim_setup_data/data/sim_setup_info.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/sim_setup_data/data/simulation_settings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/sim_setup_data/data/sweep_data.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/sim_setup_data/io/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/utilities/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/utilities/hfss_simulation_setup.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/utilities/siwave_cpa_simulation_setup.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/dotnet/database/utilities/siwave_simulation_setup.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/exceptions.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/extensions/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/generic/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/generic/constants.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/generic/data_handlers.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/generic/filesystem.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/generic/grpc_warnings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/generic/plot.py +0 -0
- {pyedb-0.53.0/src/pyedb/grpc/database → pyedb-0.55.0/src/pyedb/grpc}/__init__.py +0 -0
- {pyedb-0.53.0/src/pyedb/grpc/database/definition → pyedb-0.55.0/src/pyedb/grpc/database}/__init__.py +0 -0
- {pyedb-0.53.0/src/pyedb/grpc/database/geometry → pyedb-0.55.0/src/pyedb/grpc/database/definition}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/definition/component_def.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/definition/component_model.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/definition/component_pin.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/definition/n_port_component_model.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/definitions.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/general.py +0 -0
- {pyedb-0.53.0/src/pyedb/grpc/database/hierarchy → pyedb-0.55.0/src/pyedb/grpc/database/geometry}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/geometry/point_data.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/hfss.py +0 -0
- {pyedb-0.53.0/src/pyedb/grpc/database/layers → pyedb-0.55.0/src/pyedb/grpc/database/hierarchy}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/hierarchy/model.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/hierarchy/netlist_model.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/hierarchy/s_parameter_model.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/hierarchy/spice_model.py +0 -0
- {pyedb-0.53.0/src/pyedb/grpc/database/layout → pyedb-0.55.0/src/pyedb/grpc/database/layers}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/layers/layer.py +0 -0
- {pyedb-0.53.0/src/pyedb/grpc/database/net → pyedb-0.55.0/src/pyedb/grpc/database/layout}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/layout/cell.py +0 -0
- {pyedb-0.53.0/src/pyedb/grpc/database/ports → pyedb-0.55.0/src/pyedb/grpc/database/net}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/net/differential_pair.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/net/extended_net.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/net/net_class.py +0 -0
- {pyedb-0.53.0/src/pyedb/grpc/database/simulation_setup → pyedb-0.55.0/src/pyedb/grpc/database/ports}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/primitive/__init__.py +0 -0
- {pyedb-0.53.0/src/pyedb/grpc/database/terminal → pyedb-0.55.0/src/pyedb/grpc/database/simulation_setup}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/adaptive_frequency.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/hfss_settings_options.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/hfss_solver_settings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/mesh_operation.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/siwave_cpa_simulation_setup.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/simulation_setup/sweep_data.py +0 -0
- {pyedb-0.53.0/src/pyedb/ipc2581 → pyedb-0.55.0/src/pyedb/grpc/database/terminal}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/utility/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/utility/constants.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/utility/heat_sink.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/utility/hfss_extent_info.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/utility/layout_statistics.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/utility/rlc.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/utility/sources.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/grpc/database/utility/sweep_data_distribution.py +0 -0
- {pyedb-0.53.0/src/pyedb/ipc2581/bom → pyedb-0.55.0/src/pyedb/ipc2581}/__init__.py +0 -0
- {pyedb-0.53.0/src/pyedb/ipc2581/content → pyedb-0.55.0/src/pyedb/ipc2581/bom}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
- {pyedb-0.53.0/src/pyedb/ipc2581/ecad → pyedb-0.55.0/src/pyedb/ipc2581/content}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/content/color.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/content/content.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/content/fill.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
- {pyedb-0.53.0/src/pyedb/ipc2581/ecad/cad_data → pyedb-0.55.0/src/pyedb/ipc2581/ecad}/__init__.py +0 -0
- {pyedb-0.53.0/src/pyedb/misc → pyedb-0.55.0/src/pyedb/ipc2581/ecad/cad_data}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/history_record.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
- {pyedb-0.53.0/src/pyedb/misc/siw_feature_config → pyedb-0.55.0/src/pyedb/misc}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/downloads.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
- {pyedb-0.53.0/src/pyedb/misc/siw_feature_config/emc → pyedb-0.55.0/src/pyedb/misc/siw_feature_config}/__init__.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/misc/utilities.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/modeler/geometry_operators.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/siwave_core/cpa/simulation_setup_data_model.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/siwave_core/icepak.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/siwave_core/product_properties.py +0 -0
- {pyedb-0.53.0 → pyedb-0.55.0}/src/pyedb/workflow.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyedb
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.55.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>
|
|
@@ -27,8 +27,7 @@ Requires-Dist: Rtree >= 1.2.0
|
|
|
27
27
|
Requires-Dist: toml == 0.10.2
|
|
28
28
|
Requires-Dist: shapely
|
|
29
29
|
Requires-Dist: scikit-rf
|
|
30
|
-
Requires-Dist: ansys-edb-core>=0.2.0
|
|
31
|
-
Requires-Dist: ansys-api-edb>=0.2.0.dev0
|
|
30
|
+
Requires-Dist: ansys-edb-core>=0.2.0
|
|
32
31
|
Requires-Dist: psutil
|
|
33
32
|
Requires-Dist: ansys-sphinx-theme>=1.0.0,<1.5 ; extra == "doc"
|
|
34
33
|
Requires-Dist: imageio>=2.30.0,<2.38 ; extra == "doc"
|
|
@@ -3,13 +3,6 @@ import os
|
|
|
3
3
|
import sys
|
|
4
4
|
import warnings
|
|
5
5
|
|
|
6
|
-
# if os.name == "nt":
|
|
7
|
-
# os.environ["PYTHONMALLOC"] = "malloc"
|
|
8
|
-
|
|
9
|
-
# By default we use pyedb legacy implementation
|
|
10
|
-
if "PYEDB_USE_DOTNET" not in os.environ:
|
|
11
|
-
os.environ["PYEDB_USE_DOTNET"] = "0"
|
|
12
|
-
|
|
13
6
|
LATEST_DEPRECATED_PYTHON_VERSION = (3, 7)
|
|
14
7
|
|
|
15
8
|
|
|
@@ -44,7 +37,7 @@ deprecation_warning()
|
|
|
44
37
|
#
|
|
45
38
|
|
|
46
39
|
pyedb_path = os.path.dirname(__file__)
|
|
47
|
-
__version__ = "0.
|
|
40
|
+
__version__ = "0.55.0"
|
|
48
41
|
version = __version__
|
|
49
42
|
|
|
50
43
|
#
|
|
@@ -0,0 +1,105 @@
|
|
|
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 CfgBoundaries(CfgBase):
|
|
27
|
+
def __init__(self, pedb, boundary_data):
|
|
28
|
+
self._pedb = pedb
|
|
29
|
+
self.boundary_data = boundary_data
|
|
30
|
+
|
|
31
|
+
self.open_region = self.boundary_data.get("open_region", None)
|
|
32
|
+
self.open_region_type = self.boundary_data.get("map_open_region_type", None)
|
|
33
|
+
self.pml_visible = self.boundary_data.get("pml_visible", None)
|
|
34
|
+
self.pml_operation_frequency = self.boundary_data.get("pml_operation_frequency", None)
|
|
35
|
+
self.pml_radiation_factor = self.boundary_data.get("pml_radiation_factor", None)
|
|
36
|
+
self.dielectric_extent_type = self.boundary_data.get("dielectric_extent_type", None)
|
|
37
|
+
self.horizontal_padding = self.boundary_data.get("horizontal_padding", None)
|
|
38
|
+
self.honor_primitives_on_dielectric_layers = self.boundary_data.get(
|
|
39
|
+
"honor_primitives_on_dielectric_layers", False
|
|
40
|
+
)
|
|
41
|
+
self.air_box_extent_type = self.boundary_data.get("air_box_extent_type", None)
|
|
42
|
+
self.air_box_base_polygon = self.boundary_data.get("air_box_base_polygon", None)
|
|
43
|
+
self.air_box_truncate_model_ground_layers = self.boundary_data.get("air_box_truncate_model_ground_layers", None)
|
|
44
|
+
self.air_box_horizontal_padding = self.boundary_data.get("air_box_horizontal_padding", None)
|
|
45
|
+
self.air_box_positive_vertical_padding = self.boundary_data.get("air_box_positive_vertical_padding", None)
|
|
46
|
+
self.air_box_negative_vertical_padding = self.boundary_data.get("air_box_negative_vertical_padding", None)
|
|
47
|
+
|
|
48
|
+
def get_parameters_from_edb(self):
|
|
49
|
+
self.open_region = self._pedb.hfss.hfss_extent_info.use_open_region
|
|
50
|
+
self.open_region_type = self._pedb.hfss.hfss_extent_info.open_region_type
|
|
51
|
+
self.pml_visible = self._pedb.hfss.hfss_extent_info.is_pml_visible
|
|
52
|
+
self.pml_operation_frequency = self._pedb.hfss.hfss_extent_info.operating_freq.tostring
|
|
53
|
+
self.pml_radiation_factor = self._pedb.hfss.hfss_extent_info.radiation_level.tostring
|
|
54
|
+
self.dielectric_extent_type = self._pedb.hfss.hfss_extent_info.extent_type
|
|
55
|
+
self.horizontal_padding = self._pedb.hfss.hfss_extent_info.dielectric_extent_size
|
|
56
|
+
self.honor_primitives_on_dielectric_layers = self._pedb.hfss.hfss_extent_info.honor_user_dielectric
|
|
57
|
+
self.air_box_extent_type = self._pedb.hfss.hfss_extent_info.extent_type
|
|
58
|
+
self.air_box_truncate_model_ground_layers = self._pedb.hfss.hfss_extent_info.truncate_air_box_at_ground
|
|
59
|
+
self.air_box_horizontal_padding = self._pedb.hfss.hfss_extent_info.air_box_horizontal_extent
|
|
60
|
+
self.air_box_positive_vertical_padding = self._pedb.hfss.hfss_extent_info.air_box_positive_vertical_extent
|
|
61
|
+
self.air_box_negative_vertical_padding = self._pedb.hfss.hfss_extent_info.air_box_negative_vertical_extent
|
|
62
|
+
return self.get_attributes(exclude="boundary_data")
|
|
63
|
+
|
|
64
|
+
def set_parameters_to_edb(self):
|
|
65
|
+
"""Imports boundary information from JSON."""
|
|
66
|
+
if self.open_region is not None:
|
|
67
|
+
self._pedb.hfss.hfss_extent_info.use_open_region = self.open_region
|
|
68
|
+
if self.open_region_type:
|
|
69
|
+
self._pedb.hfss.hfss_extent_info.open_region_type = self.open_region_type.lower()
|
|
70
|
+
if self.pml_visible is not None:
|
|
71
|
+
self._pedb.hfss.hfss_extent_info.is_pml_visible = self.pml_visible
|
|
72
|
+
if self.pml_operation_frequency:
|
|
73
|
+
self._pedb.hfss.hfss_extent_info.operating_freq = self.pml_operation_frequency
|
|
74
|
+
if self.pml_radiation_factor:
|
|
75
|
+
if self._pedb.grpc:
|
|
76
|
+
self._pedb.hfss.hfss_extent_info.pml_radiation_factor = self.pml_radiation_factor
|
|
77
|
+
else:
|
|
78
|
+
self._pedb.hfss.hfss_extent_info.radiation_level = self.pml_radiation_factor
|
|
79
|
+
if self.dielectric_extent_type:
|
|
80
|
+
self._pedb.hfss.hfss_extent_info.extent_type = self.dielectric_extent_type.lower()
|
|
81
|
+
if self.horizontal_padding:
|
|
82
|
+
self._pedb.hfss.hfss_extent_info.dielectric_extent_size = float(self.horizontal_padding)
|
|
83
|
+
if self.honor_primitives_on_dielectric_layers is not None:
|
|
84
|
+
self._pedb.hfss.hfss_extent_info.honor_user_dielectric = self.honor_primitives_on_dielectric_layers
|
|
85
|
+
if self.air_box_extent_type:
|
|
86
|
+
self._pedb.hfss.hfss_extent_info.extent_type = self.air_box_extent_type.lower()
|
|
87
|
+
if self.air_box_truncate_model_ground_layers is not None:
|
|
88
|
+
self._pedb.hfss.hfss_extent_info.truncate_air_box_at_ground = self.air_box_truncate_model_ground_layers
|
|
89
|
+
if self.air_box_horizontal_padding:
|
|
90
|
+
self._pedb.hfss.hfss_extent_info.air_box_horizontal_extent = float(self.air_box_horizontal_padding)
|
|
91
|
+
if self.air_box_positive_vertical_padding:
|
|
92
|
+
self._pedb.hfss.hfss_extent_info.air_box_positive_vertical_extent = float(
|
|
93
|
+
self.air_box_positive_vertical_padding
|
|
94
|
+
)
|
|
95
|
+
if self.air_box_negative_vertical_padding:
|
|
96
|
+
self._pedb.hfss.hfss_extent_info.air_box_negative_vertical_extent = float(
|
|
97
|
+
self.air_box_negative_vertical_padding
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
def apply(self):
|
|
101
|
+
"""Imports boundary information from JSON."""
|
|
102
|
+
self.set_parameters_to_edb()
|
|
103
|
+
|
|
104
|
+
def get_data_from_db(self):
|
|
105
|
+
return self.get_parameters_from_edb()
|
|
@@ -0,0 +1,269 @@
|
|
|
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
|
+
from pyedb.dotnet.database.general import pascal_to_snake, snake_to_pascal
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class CfgComponent(CfgBase):
|
|
28
|
+
def retrieve_model_properties_from_edb(self):
|
|
29
|
+
c_p = self.pyedb_obj.component_property
|
|
30
|
+
model = c_p.GetModel().Clone()
|
|
31
|
+
|
|
32
|
+
if model.GetModelType().ToString() == "NetlistModel":
|
|
33
|
+
self.netlist_model["netlist"] = model.GetNetlist()
|
|
34
|
+
elif model.GetModelType().ToString() == "PinPairModel":
|
|
35
|
+
temp = {}
|
|
36
|
+
for i in model.PinPairs:
|
|
37
|
+
temp["first_pin"] = i.FirstPin
|
|
38
|
+
temp["second_pin"] = i.SecondPin
|
|
39
|
+
rlc = model.GetPinPairRlc(i)
|
|
40
|
+
temp["is_parallel"] = rlc.IsParallel
|
|
41
|
+
temp["resistance"] = rlc.R.ToString()
|
|
42
|
+
temp["resistance_enabled"] = rlc.REnabled
|
|
43
|
+
temp["inductance"] = rlc.L.ToString()
|
|
44
|
+
temp["inductance_enabled"] = rlc.LEnabled
|
|
45
|
+
temp["capacitance"] = rlc.C.ToString()
|
|
46
|
+
temp["capacitance_enabled"] = rlc.CEnabled
|
|
47
|
+
self.pin_pair_model.append(temp)
|
|
48
|
+
elif model.GetModelType().ToString() == "SParameterModel":
|
|
49
|
+
self.s_parameter_model["reference_net"] = model.GetReferenceNet()
|
|
50
|
+
self.s_parameter_model["model_name"] = model.GetComponentModelName()
|
|
51
|
+
elif model.GetModelType().ToString() == "SPICEModel":
|
|
52
|
+
self.spice_model["model_name"] = model.GetModelName()
|
|
53
|
+
self.spice_model["model_path"] = model.GetModelPath()
|
|
54
|
+
self.spice_model["sub_circuit"] = model.GetSubCkt()
|
|
55
|
+
self.spice_model["terminal_pairs"] = [[i, j] for i, j in dict(model.GetTerminalPinPairs()).items()]
|
|
56
|
+
|
|
57
|
+
def _set_ic_die_properties_to_edb(self):
|
|
58
|
+
cp = self.pyedb_obj.component_property
|
|
59
|
+
ic_die_prop = cp.GetDieProperty().Clone()
|
|
60
|
+
die_type = self.ic_die_properties.get("type")
|
|
61
|
+
ic_die_prop.SetType(getattr(self._pedb._edb.Definition.DieType, snake_to_pascal(die_type)))
|
|
62
|
+
if not die_type == "no_die":
|
|
63
|
+
orientation = self.ic_die_properties.get("orientation")
|
|
64
|
+
if orientation:
|
|
65
|
+
ic_die_prop.SetOrientation(
|
|
66
|
+
getattr(self._pedb._edb.Definition.DieOrientation, snake_to_pascal(orientation))
|
|
67
|
+
)
|
|
68
|
+
if die_type == "wire_bond":
|
|
69
|
+
height = self.ic_die_properties.get("height")
|
|
70
|
+
if height:
|
|
71
|
+
ic_die_prop.SetHeight(self._pedb.edb_value(height))
|
|
72
|
+
cp.SetDieProperty(ic_die_prop)
|
|
73
|
+
self.pyedb_obj.component_property = cp
|
|
74
|
+
|
|
75
|
+
def _set_port_properties_to_edb(self):
|
|
76
|
+
cp = self.pyedb_obj.component_property
|
|
77
|
+
port_prop = cp.GetPortProperty().Clone()
|
|
78
|
+
height = self.port_properties.get("reference_height")
|
|
79
|
+
if height:
|
|
80
|
+
port_prop.SetReferenceHeight(self._pedb.edb_value(height))
|
|
81
|
+
reference_size_auto = self.port_properties.get("reference_size_auto")
|
|
82
|
+
if reference_size_auto is not None:
|
|
83
|
+
port_prop.SetReferenceSizeAuto(reference_size_auto)
|
|
84
|
+
reference_size_x = self.port_properties.get("reference_size_x", 0)
|
|
85
|
+
reference_size_y = self.port_properties.get("reference_size_y", 0)
|
|
86
|
+
port_prop.SetReferenceSize(self._pedb.edb_value(reference_size_x), self._pedb.edb_value(reference_size_y))
|
|
87
|
+
cp.SetPortProperty(port_prop)
|
|
88
|
+
self.pyedb_obj.component_property = cp
|
|
89
|
+
|
|
90
|
+
def _set_model_properties_to_edb(self):
|
|
91
|
+
c_p = self.pyedb_obj.component_property
|
|
92
|
+
if self.netlist_model:
|
|
93
|
+
m = self._pedb._edb.Cell.Hierarchy.SParameterModel()
|
|
94
|
+
m.SetNetlist(self.netlist_model["netlist"])
|
|
95
|
+
c_p.SetModel(m)
|
|
96
|
+
self.component_property = c_p
|
|
97
|
+
elif self.pin_pair_model:
|
|
98
|
+
m = self._pedb._edb.Cell.Hierarchy.PinPairModel()
|
|
99
|
+
for i in self.pin_pair_model:
|
|
100
|
+
p = self._pedb._edb.Utility.PinPair(str(i["first_pin"]), str(i["second_pin"]))
|
|
101
|
+
rlc = self._pedb._edb.Utility.Rlc(
|
|
102
|
+
self._pedb.edb_value(i["resistance"]),
|
|
103
|
+
i["resistance_enabled"],
|
|
104
|
+
self._pedb.edb_value(i["inductance"]),
|
|
105
|
+
i["inductance_enabled"],
|
|
106
|
+
self._pedb.edb_value(i["capacitance"]),
|
|
107
|
+
i["capacitance_enabled"],
|
|
108
|
+
i["is_parallel"],
|
|
109
|
+
)
|
|
110
|
+
m.SetPinPairRlc(p, rlc)
|
|
111
|
+
c_p.SetModel(m)
|
|
112
|
+
self.pyedb_obj.component_property = c_p
|
|
113
|
+
elif self.s_parameter_model:
|
|
114
|
+
m = self._pedb._edb.Cell.Hierarchy.SParameterModel()
|
|
115
|
+
m.SetComponentModelName(self.s_parameter_model["model_name"])
|
|
116
|
+
m.SetReferenceNet(self.s_parameter_model["reference_net"])
|
|
117
|
+
c_p.SetModel(m)
|
|
118
|
+
self.component_property = c_p
|
|
119
|
+
elif self.spice_model:
|
|
120
|
+
self.pyedb_obj.assign_spice_model(
|
|
121
|
+
self.spice_model["model_path"],
|
|
122
|
+
self.spice_model["model_name"],
|
|
123
|
+
self.spice_model["sub_circuit"],
|
|
124
|
+
self.spice_model["terminal_pairs"],
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
def _set_solder_ball_properties_to_edb(self):
|
|
128
|
+
cp = self.pyedb_obj.component_property
|
|
129
|
+
solder_ball_prop = cp.GetSolderBallProperty().Clone()
|
|
130
|
+
shape = self.solder_ball_properties.get("shape")
|
|
131
|
+
if shape:
|
|
132
|
+
solder_ball_prop.SetShape(getattr(self._pedb._edb.Definition.SolderballShape, snake_to_pascal(shape)))
|
|
133
|
+
else:
|
|
134
|
+
return
|
|
135
|
+
|
|
136
|
+
if shape == "cylinder":
|
|
137
|
+
diameter = self.solder_ball_properties["diameter"]
|
|
138
|
+
solder_ball_prop.SetDiameter(self._pedb.edb_value(diameter), self._pedb.edb_value(diameter))
|
|
139
|
+
elif shape == "spheroid":
|
|
140
|
+
diameter = self.solder_ball_properties["diameter"]
|
|
141
|
+
mid_diameter = self.solder_ball_properties["mid_diameter"]
|
|
142
|
+
solder_ball_prop.SetDiameter(self._pedb.edb_value(diameter), self._pedb.edb_value(mid_diameter))
|
|
143
|
+
else:
|
|
144
|
+
raise ValueError("Solderball shape must be either cylinder or spheroid")
|
|
145
|
+
solder_ball_prop.SetHeight(self._pedb.edb_value(self.solder_ball_properties["height"]))
|
|
146
|
+
solder_ball_prop.SetMaterialName(self.solder_ball_properties.get("material", "solder"))
|
|
147
|
+
cp.SetSolderBallProperty(solder_ball_prop)
|
|
148
|
+
self.pyedb_obj.component_property = cp
|
|
149
|
+
|
|
150
|
+
def _retrieve_ic_die_properties_from_edb(self):
|
|
151
|
+
temp = dict()
|
|
152
|
+
cp = self.pyedb_obj.component_property
|
|
153
|
+
|
|
154
|
+
ic_die_prop = cp.GetDieProperty().Clone()
|
|
155
|
+
die_type = pascal_to_snake(ic_die_prop.GetType().ToString())
|
|
156
|
+
temp["type"] = die_type
|
|
157
|
+
if not die_type == "no_die":
|
|
158
|
+
temp["orientation"] = pascal_to_snake(ic_die_prop.GetOrientation().ToString())
|
|
159
|
+
if die_type == "wire_bond":
|
|
160
|
+
temp["height"] = ic_die_prop.GetHeightValue().ToString()
|
|
161
|
+
self.ic_die_properties = temp
|
|
162
|
+
|
|
163
|
+
def _retrieve_solder_ball_properties_from_edb(self):
|
|
164
|
+
temp = dict()
|
|
165
|
+
cp = self.pyedb_obj.component_property
|
|
166
|
+
solder_ball_prop = cp.GetSolderBallProperty().Clone()
|
|
167
|
+
_, diam, mid_diam = solder_ball_prop.GetDiameterValue()
|
|
168
|
+
height = solder_ball_prop.GetHeightValue().ToString()
|
|
169
|
+
shape = solder_ball_prop.GetShape().ToString()
|
|
170
|
+
material = solder_ball_prop.GetMaterialName()
|
|
171
|
+
uses_solder_ball = solder_ball_prop.UsesSolderball()
|
|
172
|
+
|
|
173
|
+
temp["uses_solder_ball"] = uses_solder_ball
|
|
174
|
+
temp["shape"] = pascal_to_snake(shape)
|
|
175
|
+
temp["diameter"] = diam.ToString()
|
|
176
|
+
temp["mid_diameter"] = mid_diam.ToString()
|
|
177
|
+
temp["height"] = height
|
|
178
|
+
temp["material"] = material
|
|
179
|
+
self.solder_ball_properties = temp
|
|
180
|
+
|
|
181
|
+
def _retrieve_port_properties_from_edb(self):
|
|
182
|
+
temp = dict()
|
|
183
|
+
cp = self.pyedb_obj.component_property
|
|
184
|
+
c_type = self.type.lower()
|
|
185
|
+
if c_type not in ["ic", "io", "other"]:
|
|
186
|
+
return
|
|
187
|
+
else:
|
|
188
|
+
port_prop = cp.GetPortProperty().Clone()
|
|
189
|
+
reference_height = port_prop.GetReferenceHeightValue().ToString()
|
|
190
|
+
reference_size_auto = port_prop.GetReferenceSizeAuto()
|
|
191
|
+
_, reference_size_x, reference_size_y = port_prop.GetReferenceSize()
|
|
192
|
+
temp["reference_height"] = reference_height
|
|
193
|
+
temp["reference_size_auto"] = reference_size_auto
|
|
194
|
+
temp["reference_size_x"] = str(reference_size_x)
|
|
195
|
+
temp["reference_size_y"] = str(reference_size_y)
|
|
196
|
+
self.port_properties = temp
|
|
197
|
+
|
|
198
|
+
def set_parameters_to_edb(self):
|
|
199
|
+
if self.type:
|
|
200
|
+
self.pyedb_obj.type = self.type
|
|
201
|
+
if self.enabled is not None:
|
|
202
|
+
self.pyedb_obj.enabled = self.enabled
|
|
203
|
+
|
|
204
|
+
self._set_model_properties_to_edb()
|
|
205
|
+
if self.pyedb_obj.type.lower() == "ic":
|
|
206
|
+
self._set_ic_die_properties_to_edb()
|
|
207
|
+
self._set_port_properties_to_edb()
|
|
208
|
+
self._set_solder_ball_properties_to_edb()
|
|
209
|
+
elif self.pyedb_obj.type.lower() in ["io", "other"]:
|
|
210
|
+
self._set_solder_ball_properties_to_edb()
|
|
211
|
+
self._set_port_properties_to_edb()
|
|
212
|
+
|
|
213
|
+
def retrieve_parameters_from_edb(self):
|
|
214
|
+
self.type = self.pyedb_obj.type
|
|
215
|
+
self.definition = self.pyedb_obj.part_name
|
|
216
|
+
self.reference_designator = self.pyedb_obj.name
|
|
217
|
+
self.retrieve_model_properties_from_edb()
|
|
218
|
+
if self.pyedb_obj.type.lower() == "ic":
|
|
219
|
+
self._retrieve_ic_die_properties_from_edb()
|
|
220
|
+
self._retrieve_port_properties_from_edb()
|
|
221
|
+
self._retrieve_solder_ball_properties_from_edb()
|
|
222
|
+
elif self.pyedb_obj.type.lower() in ["io", "other"]:
|
|
223
|
+
self._retrieve_solder_ball_properties_from_edb()
|
|
224
|
+
self._retrieve_port_properties_from_edb()
|
|
225
|
+
|
|
226
|
+
def __init__(self, _pedb, pedb_object, **kwargs):
|
|
227
|
+
self._pedb = _pedb
|
|
228
|
+
self.pyedb_obj = pedb_object
|
|
229
|
+
|
|
230
|
+
self.enabled = kwargs.get("enabled", None)
|
|
231
|
+
self.reference_designator = kwargs.get("reference_designator", None)
|
|
232
|
+
self.definition = kwargs.get("definition", None)
|
|
233
|
+
self.type = kwargs["part_type"].lower() if kwargs.get("part_type") else None
|
|
234
|
+
self.placement_layer = kwargs.get("placement_layer", None)
|
|
235
|
+
self.pins = kwargs.get("pins", [])
|
|
236
|
+
|
|
237
|
+
self.port_properties = kwargs.get("port_properties", {})
|
|
238
|
+
self.solder_ball_properties = kwargs.get("solder_ball_properties", {})
|
|
239
|
+
self.ic_die_properties = kwargs.get("ic_die_properties", {"type": "no_die"})
|
|
240
|
+
self.pin_pair_model = kwargs.get("pin_pair_model", [])
|
|
241
|
+
self.spice_model = kwargs.get("spice_model", {})
|
|
242
|
+
self.s_parameter_model = kwargs.get("s_parameter_model", {})
|
|
243
|
+
self.netlist_model = kwargs.get("netlist_model", {})
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
class CfgComponents:
|
|
247
|
+
def __init__(self, pedb, components_data):
|
|
248
|
+
self._pedb = pedb
|
|
249
|
+
self.components = []
|
|
250
|
+
|
|
251
|
+
if components_data:
|
|
252
|
+
for comp in components_data:
|
|
253
|
+
obj = self._pedb.components.instances[comp["reference_designator"]]
|
|
254
|
+
self.components.append(CfgComponent(self._pedb, obj, **comp))
|
|
255
|
+
|
|
256
|
+
def clean(self):
|
|
257
|
+
self.components = []
|
|
258
|
+
|
|
259
|
+
def apply(self):
|
|
260
|
+
for comp in self.components:
|
|
261
|
+
comp.set_parameters_to_edb()
|
|
262
|
+
|
|
263
|
+
def retrieve_parameters_from_edb(self):
|
|
264
|
+
self.clean()
|
|
265
|
+
comps_in_db = self._pedb.components
|
|
266
|
+
for _, comp in comps_in_db.instances.items():
|
|
267
|
+
cfg_comp = CfgComponent(self._pedb, comp)
|
|
268
|
+
cfg_comp.retrieve_parameters_from_edb()
|
|
269
|
+
self.components.append(cfg_comp)
|
|
@@ -48,7 +48,9 @@ class CfgData(object):
|
|
|
48
48
|
self.boundaries = CfgBoundaries(self._pedb, kwargs.get("boundaries", {}))
|
|
49
49
|
|
|
50
50
|
self.nets = CfgNets(
|
|
51
|
-
self
|
|
51
|
+
self._pedb,
|
|
52
|
+
kwargs.get("nets", {}).get("signal_nets", []),
|
|
53
|
+
kwargs.get("nets", {}).get("power_ground_nets", []),
|
|
52
54
|
)
|
|
53
55
|
|
|
54
56
|
self.components = CfgComponents(self._pedb, components_data=kwargs.get("components", []))
|
|
@@ -73,7 +75,7 @@ class CfgData(object):
|
|
|
73
75
|
]
|
|
74
76
|
|
|
75
77
|
self.package_definitions = CfgPackageDefinitions(self._pedb, data=kwargs.get("package_definitions", []))
|
|
76
|
-
self.operations = CfgOperations(
|
|
78
|
+
self.operations = CfgOperations(**kwargs.get("operations", {}))
|
|
77
79
|
|
|
78
80
|
self.modeler = CfgModeler(self._pedb, data=kwargs.get("modeler", {}))
|
|
79
81
|
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
|
|
24
|
+
class CfgGeneral:
|
|
25
|
+
"""Manage configuration general settings."""
|
|
26
|
+
|
|
27
|
+
def set_parameters_to_edb(self):
|
|
28
|
+
if self.anti_pads_always_on is not None:
|
|
29
|
+
self.pedb.design_options.anti_pads_always_on = self.anti_pads_always_on
|
|
30
|
+
if self.suppress_pads is not None:
|
|
31
|
+
self.pedb.design_options.suppress_pads = self.suppress_pads
|
|
32
|
+
|
|
33
|
+
def get_parameters_from_edb(self):
|
|
34
|
+
anti_pads_always_on = self.pedb.design_options.antipads_always_on
|
|
35
|
+
suppress_pads = self.pedb.design_options.suppress_pads
|
|
36
|
+
data = {"anti_pads_always_on": anti_pads_always_on, "suppress_pads": suppress_pads}
|
|
37
|
+
return data
|
|
38
|
+
|
|
39
|
+
def __init__(self, pedb, data):
|
|
40
|
+
self.pedb = pedb
|
|
41
|
+
self.spice_model_library = data.get("spice_model_library", "")
|
|
42
|
+
self.s_parameter_library = data.get("s_parameter_library", "")
|
|
43
|
+
self.anti_pads_always_on = data.get("anti_pads_always_on", None)
|
|
44
|
+
self.suppress_pads = data.get("suppress_pads", None)
|
|
45
|
+
|
|
46
|
+
def apply(self):
|
|
47
|
+
self.set_parameters_to_edb()
|
|
48
|
+
|
|
49
|
+
def get_data_from_db(self):
|
|
50
|
+
return self.get_parameters_from_edb()
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
# SOFTWARE.
|
|
22
|
-
|
|
22
|
+
from copy import deepcopy as copy
|
|
23
23
|
from dataclasses import dataclass, field
|
|
24
24
|
from typing import Any, Dict, List, Optional, TypedDict, Union
|
|
25
25
|
|
|
@@ -92,6 +92,7 @@ class CfgModeler:
|
|
|
92
92
|
self.add_trace(**trace_data)
|
|
93
93
|
|
|
94
94
|
for plane_data in data.get("planes", []):
|
|
95
|
+
plane_data = copy(plane_data)
|
|
95
96
|
shape = plane_data.pop("type")
|
|
96
97
|
if shape == "rectangle":
|
|
97
98
|
self.add_rectangular_plane(**plane_data)
|
|
@@ -24,39 +24,25 @@
|
|
|
24
24
|
class CfgNets:
|
|
25
25
|
"""Manage configuration net class."""
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
self.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
data = {"signal_nets": self.parent.signal_nets, "power_ground_nets": self.parent.power_nets}
|
|
47
|
-
return data
|
|
48
|
-
|
|
49
|
-
class DotNet(Grpc):
|
|
50
|
-
def __init__(self, parent):
|
|
51
|
-
self.parent = parent
|
|
52
|
-
super().__init__(parent)
|
|
53
|
-
|
|
54
|
-
def __init__(self, pdata, signal_nets=None, power_nets=None):
|
|
55
|
-
self._pedb = pdata._pedb
|
|
56
|
-
if self._pedb.grpc:
|
|
57
|
-
self.api = self.Grpc(self)
|
|
58
|
-
else:
|
|
59
|
-
self.api = self.DotNet(self)
|
|
27
|
+
def set_parameter_to_edb(self):
|
|
28
|
+
for signal_net in self.signal_nets:
|
|
29
|
+
if signal_net in self._pedb.nets:
|
|
30
|
+
self._pedb.nets.nets[signal_net].is_power_ground = False
|
|
31
|
+
for power_net in self.power_nets:
|
|
32
|
+
if power_net in self._pedb.nets:
|
|
33
|
+
self._pedb.nets.nets[power_net].is_power_ground = True
|
|
34
|
+
|
|
35
|
+
def get_parameter_from_edb(self):
|
|
36
|
+
"""Get net information."""
|
|
37
|
+
for net in self._pedb.nets.signal:
|
|
38
|
+
self.signal_nets.append(net)
|
|
39
|
+
for net in self._pedb.nets.power:
|
|
40
|
+
self.power_nets.append(net)
|
|
41
|
+
data = {"signal_nets": self.signal_nets, "power_ground_nets": self.power_nets}
|
|
42
|
+
return data
|
|
43
|
+
|
|
44
|
+
def __init__(self, pedb, signal_nets=None, power_nets=None):
|
|
45
|
+
self._pedb = pedb
|
|
60
46
|
self.signal_nets = []
|
|
61
47
|
self.power_nets = []
|
|
62
48
|
if signal_nets:
|
|
@@ -66,8 +52,8 @@ class CfgNets:
|
|
|
66
52
|
|
|
67
53
|
def apply(self):
|
|
68
54
|
"""Apply net on layout."""
|
|
69
|
-
self.
|
|
55
|
+
self.set_parameter_to_edb()
|
|
70
56
|
|
|
71
57
|
def get_data_from_db(self):
|
|
72
58
|
"""Get net information."""
|
|
73
|
-
return self.
|
|
59
|
+
return self.get_parameter_from_edb()
|
|
@@ -0,0 +1,51 @@
|
|
|
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 typing import Any, Dict, List, Optional
|
|
24
|
+
|
|
25
|
+
from pydantic import BaseModel, Field
|
|
26
|
+
|
|
27
|
+
# from pyedb.configuration.cfg_common import CfgBase
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class CfgCutout(BaseModel):
|
|
31
|
+
auto_identify_nets: Optional[Dict] = {
|
|
32
|
+
"enabled": False,
|
|
33
|
+
"resistor_below": 100,
|
|
34
|
+
"inductor_below": 1,
|
|
35
|
+
"capacitor_above": 1,
|
|
36
|
+
}
|
|
37
|
+
signal_list: Optional[List[str]] = None
|
|
38
|
+
reference_list: Optional[List[str]] = None
|
|
39
|
+
extent_type: Optional[str] = "ConvexHull"
|
|
40
|
+
expansion_size: Optional[float] = 0.002
|
|
41
|
+
number_of_threads: Optional[int] = 1
|
|
42
|
+
custom_extent: Optional[Any] = None
|
|
43
|
+
custom_extent_units: str = Field(default="meter")
|
|
44
|
+
expansion_factor: Optional[float] = 0
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class CfgOperations(BaseModel):
|
|
48
|
+
cutout: Optional[CfgCutout] = None
|
|
49
|
+
|
|
50
|
+
def add_cutout(self, **kwargs):
|
|
51
|
+
self.cutout = CfgCutout(**kwargs)
|