├── .flake8 ├── .gitattributes ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── bug.yml │ ├── feature.yml │ └── syntax.yml ├── dependabot.yml ├── labeler.yml ├── labels.yml └── workflows │ ├── ci_cd.yml │ └── label.yml ├── .gitignore ├── .pre-commit-config.yaml ├── AUTHORS ├── CONTRIBUTING.md ├── CONTRIBUTORS.md ├── LICENSE ├── Makefile ├── README.md ├── codecov.yml ├── doc ├── .vale.ini ├── Makefile ├── clean_gallery.bat ├── make.bat ├── print_errors.py ├── source │ ├── _static │ │ ├── README.md │ │ ├── assets │ │ │ ├── download │ │ │ │ ├── .gitignore │ │ │ │ └── README.md │ │ │ ├── index_api.png │ │ │ ├── index_api.svg │ │ │ ├── index_contribute.png │ │ │ ├── index_contribute.svg │ │ │ ├── index_examples.png │ │ │ ├── index_examples.svg │ │ │ ├── index_getting_started.png │ │ │ ├── index_getting_started.svg │ │ │ ├── index_user_guide.png │ │ │ └── index_user_guide.svg │ │ ├── connector_example.png │ │ ├── custom.css │ │ ├── diff_via.png │ │ ├── edb_example_12_sma_connector_on_board.png │ │ ├── parametrized_design.png │ │ └── thumbnails │ │ │ └── 101_getting_started.png │ ├── api │ │ ├── CoreEdb.rst │ │ ├── SiWave.rst │ │ ├── SimulationConfigurationEdb.rst │ │ ├── SimulationConfigurationV2.rst │ │ ├── XmlControlFile.rst │ │ ├── edb_data │ │ │ ├── EdbValue.rst │ │ │ ├── HfssExtentInfo.rst │ │ │ ├── LayerData.rst │ │ │ ├── NetData.rst │ │ │ ├── PadstackData.rst │ │ │ ├── PortsData.rst │ │ │ ├── PrimitivesData.rst │ │ │ ├── RaptorXSimulationSetup.rst │ │ │ ├── SourceData.rst │ │ │ ├── Utilities.rst │ │ │ ├── Variables.rst │ │ │ └── index.rst │ │ ├── index.rst │ │ ├── sim_setup_data │ │ │ ├── data │ │ │ │ ├── adaptive_frequency_data.rst │ │ │ │ ├── index.rst │ │ │ │ ├── mesh_operation.rst │ │ │ │ ├── settings.rst │ │ │ │ ├── sim_setup_info.rst │ │ │ │ ├── simulation_settings.rst │ │ │ │ ├── siw_dc_ir_settings.rst │ │ │ │ └── sweep_data.rst │ │ │ └── io │ │ │ │ ├── index.rst │ │ │ │ └── siwave.rst │ │ └── utilities │ │ │ ├── heatsink.rst │ │ │ ├── hfss_simulation_setup.rst │ │ │ ├── index.rst │ │ │ ├── simulation_setup.rst │ │ │ └── siwave_simulation_setup.rst │ ├── build_breaking_change.rst │ ├── conf.py │ ├── contributing.rst │ ├── create_documentation.bat │ ├── getting_started │ │ ├── about.rst │ │ ├── contributing.rst │ │ ├── index.rst │ │ ├── installation.rst │ │ ├── quickcode.rst │ │ ├── troubleshooting.rst │ │ └── versioning.rst │ ├── index.rst │ ├── resources │ │ ├── 3dlayout.png │ │ ├── 3dlayout_1.png │ │ ├── 5gantenna.png │ │ ├── BlankDiagram3DLayout.png │ │ ├── add_siwave_setup.png │ │ ├── advanced_circuit_port_creation.PNG │ │ ├── aedt_3.png │ │ ├── build_signal_integrity_user_guide.png │ │ ├── clipped_layout.png │ │ ├── create_circuit_ports_on_component.PNG │ │ ├── create_coaxial_port_on_component.png │ │ ├── create_edge_port_on_polygon_and_trace.png │ │ ├── create_hfss_setup.png │ │ ├── create_padstack_instances.png │ │ ├── create_port_between_pin_and_layer.png │ │ ├── create_port_on_component_simple.png │ │ ├── create_resistor_boundary_user_guide.png │ │ ├── create_rlc_boundary_on_pin.png │ │ ├── create_sources_and_probes.png │ │ ├── define_hfss_extent.png │ │ ├── define_layer_stackup.png │ │ ├── edb.png │ │ ├── edb2.png │ │ ├── edb_intro.png │ │ ├── icepak.png │ │ ├── ipc2581.png │ │ ├── layout_bbox.png │ │ ├── layout_nets_after_cutout.png │ │ ├── layout_plot_all_nets.png │ │ ├── layout_plot_gnd_nets.png │ │ ├── layout_stats.png │ │ ├── merge_utility.png │ │ ├── parametrized_edb.png │ │ ├── pyansys-logo-black-cropped.png │ │ ├── siwave.png │ │ ├── stackup.png │ │ ├── starting_load_edb.png │ │ ├── template_ribbon.png │ │ ├── toolkits.png │ │ ├── toolkits_ribbon.png │ │ └── viawizard.png │ └── user_guide │ │ ├── build_simulation_project │ │ ├── build_signal_integrity_project.rst │ │ ├── cutout.rst │ │ └── index.rst │ │ ├── components │ │ ├── create_resistor_on_pin.rst │ │ ├── create_rlc_boundary_on_pins.rst │ │ ├── create_rlc_component.rst │ │ └── index.rst │ │ ├── edb_information_queries │ │ ├── edb_queries.rst │ │ ├── get_layout_bounding_box.rst │ │ └── index.rst │ │ ├── excitations │ │ ├── create_circuit_ports_on_component.rst │ │ ├── create_coax_port_on_component.rst │ │ ├── create_current_source.rst │ │ ├── create_edge_port_on_polygon.rst │ │ ├── create_port_between_pin_and_layer.rst │ │ └── index.rst │ │ ├── index.rst │ │ ├── layer_stackup │ │ ├── define_layer_stackup.rst │ │ ├── index.rst │ │ └── layer_stackup.rst │ │ ├── load_export_edb │ │ ├── index.rst │ │ └── loading_layout.rst │ │ ├── padstacks │ │ ├── create_padsatck_instance.rst │ │ ├── index.rst │ │ └── set_all_antipads_value.rst │ │ ├── simulation_setup │ │ ├── add_siwave_analysis.rst │ │ ├── define_hfss_extent.rst │ │ ├── define_hfss_simulation_setup.rst │ │ └── index.rst │ │ └── use_design_variables.rst └── styles │ ├── .gitignore │ └── config │ └── vocabularies │ └── ANSYS │ ├── accept.txt │ └── reject.txt ├── ignore_words.txt ├── pyproject.toml ├── src ├── __init__.py └── pyedb │ ├── __init__.py │ ├── common │ ├── __init__.py │ └── nets.py │ ├── component_libraries │ └── ansys_components.py │ ├── configuration │ ├── __init__.py │ ├── cfg_boundaries.py │ ├── cfg_common.py │ ├── cfg_components.py │ ├── cfg_data.py │ ├── cfg_general.py │ ├── cfg_modeler.py │ ├── cfg_nets.py │ ├── cfg_operations.py │ ├── cfg_package_definition.py │ ├── cfg_padstacks.py │ ├── cfg_pin_groups.py │ ├── cfg_ports_sources.py │ ├── cfg_s_parameter_models.py │ ├── cfg_setup.py │ ├── cfg_spice_models.py │ ├── cfg_stackup.py │ └── configuration.py │ ├── dotnet │ ├── __init__.py │ ├── clr_module.py │ ├── database │ │ ├── Variables.py │ │ ├── __init__.py │ │ ├── cell │ │ │ ├── __init__.py │ │ │ ├── connectable.py │ │ │ ├── hierarchy │ │ │ │ ├── __init__.py │ │ │ │ ├── component.py │ │ │ │ ├── hierarchy_obj.py │ │ │ │ ├── model.py │ │ │ │ ├── netlist_model.py │ │ │ │ ├── pin_pair_model.py │ │ │ │ ├── s_parameter_model.py │ │ │ │ └── spice_model.py │ │ │ ├── layout.py │ │ │ ├── layout_obj.py │ │ │ ├── primitive │ │ │ │ ├── __init__.py │ │ │ │ ├── bondwire.py │ │ │ │ ├── path.py │ │ │ │ └── primitive.py │ │ │ ├── terminal │ │ │ │ ├── __init__.py │ │ │ │ ├── bundle_terminal.py │ │ │ │ ├── edge_terminal.py │ │ │ │ ├── padstack_instance_terminal.py │ │ │ │ ├── pingroup_terminal.py │ │ │ │ ├── point_terminal.py │ │ │ │ └── terminal.py │ │ │ └── voltage_regulator.py │ │ ├── components.py │ │ ├── definition │ │ │ ├── __init__.py │ │ │ ├── component_def.py │ │ │ ├── component_model.py │ │ │ ├── definition_obj.py │ │ │ ├── definitions.py │ │ │ └── package_def.py │ │ ├── dotnet │ │ │ ├── __init__.py │ │ │ ├── database.py │ │ │ └── primitive.py │ │ ├── edb_data │ │ │ ├── __init__.py │ │ │ ├── control_file.py │ │ │ ├── design_options.py │ │ │ ├── edbvalue.py │ │ │ ├── hfss_extent_info.py │ │ │ ├── layer_data.py │ │ │ ├── nets_data.py │ │ │ ├── padstacks_data.py │ │ │ ├── ports.py │ │ │ ├── primitives_data.py │ │ │ ├── raptor_x_simulation_setup_data.py │ │ │ ├── simulation_configuration.py │ │ │ ├── sources.py │ │ │ ├── utilities.py │ │ │ └── variables.py │ │ ├── general.py │ │ ├── geometry │ │ │ ├── __init__.py │ │ │ ├── point_data.py │ │ │ └── polygon_data.py │ │ ├── hfss.py │ │ ├── layout_obj_instance.py │ │ ├── layout_validation.py │ │ ├── materials.py │ │ ├── modeler.py │ │ ├── net_class.py │ │ ├── nets.py │ │ ├── padstack.py │ │ ├── sim_setup_data │ │ │ ├── __init__.py │ │ │ ├── data │ │ │ │ ├── __init__.py │ │ │ │ ├── adaptive_frequency_data.py │ │ │ │ ├── mesh_operation.py │ │ │ │ ├── settings.py │ │ │ │ ├── sim_setup_info.py │ │ │ │ ├── simulation_settings.py │ │ │ │ ├── siw_dc_ir_settings.py │ │ │ │ └── sweep_data.py │ │ │ └── io │ │ │ │ ├── __init__.py │ │ │ │ └── siwave.py │ │ ├── siwave.py │ │ ├── stackup.py │ │ └── utilities │ │ │ ├── __init__.py │ │ │ ├── heatsink.py │ │ │ ├── hfss_simulation_setup.py │ │ │ ├── obj_base.py │ │ │ ├── simulation_setup.py │ │ │ └── siwave_simulation_setup.py │ └── edb.py │ ├── edb_logger.py │ ├── exceptions.py │ ├── extensions │ ├── __init__.py │ └── via_design_backend.py │ ├── generic │ ├── __init__.py │ ├── constants.py │ ├── data_handlers.py │ ├── design_types.py │ ├── filesystem.py │ ├── general_methods.py │ ├── plot.py │ ├── process.py │ └── settings.py │ ├── grpc │ ├── database │ │ ├── __init__.py │ │ ├── components.py │ │ ├── control_file.py │ │ ├── definition │ │ │ ├── __init__.py │ │ │ ├── component_def.py │ │ │ ├── component_model.py │ │ │ ├── component_pin.py │ │ │ ├── materials.py │ │ │ ├── n_port_component_model.py │ │ │ ├── package_def.py │ │ │ └── padstack_def.py │ │ ├── definitions.py │ │ ├── general.py │ │ ├── geometry │ │ │ ├── __init__.py │ │ │ ├── arc_data.py │ │ │ ├── point_3d_data.py │ │ │ ├── point_data.py │ │ │ └── polygon_data.py │ │ ├── hfss.py │ │ ├── hierarchy │ │ │ ├── __init__.py │ │ │ ├── component.py │ │ │ ├── model.py │ │ │ ├── netlist_model.py │ │ │ ├── pin_pair_model.py │ │ │ ├── pingroup.py │ │ │ ├── s_parameter_model.py │ │ │ └── spice_model.py │ │ ├── layers │ │ │ ├── __init__.py │ │ │ ├── layer.py │ │ │ └── stackup_layer.py │ │ ├── layout │ │ │ ├── __init__.py │ │ │ ├── cell.py │ │ │ ├── layout.py │ │ │ └── voltage_regulator.py │ │ ├── layout_validation.py │ │ ├── modeler.py │ │ ├── net │ │ │ ├── __init__.py │ │ │ ├── differential_pair.py │ │ │ ├── extended_net.py │ │ │ ├── net.py │ │ │ └── net_class.py │ │ ├── nets.py │ │ ├── padstacks.py │ │ ├── ports │ │ │ ├── __init__.py │ │ │ └── ports.py │ │ ├── primitive │ │ │ ├── __init__.py │ │ │ ├── bondwire.py │ │ │ ├── circle.py │ │ │ ├── padstack_instance.py │ │ │ ├── path.py │ │ │ ├── polygon.py │ │ │ ├── primitive.py │ │ │ └── rectangle.py │ │ ├── simulation_setup │ │ │ ├── __init__.py │ │ │ ├── adaptive_frequency.py │ │ │ ├── hfss_advanced_meshing_settings.py │ │ │ ├── hfss_advanced_settings.py │ │ │ ├── hfss_dcr_settings.py │ │ │ ├── hfss_general_settings.py │ │ │ ├── hfss_settings_options.py │ │ │ ├── hfss_simulation_settings.py │ │ │ ├── hfss_simulation_setup.py │ │ │ ├── hfss_solver_settings.py │ │ │ ├── mesh_operation.py │ │ │ ├── raptor_x_advanced_settings.py │ │ │ ├── raptor_x_general_settings.py │ │ │ ├── raptor_x_simulation_settings.py │ │ │ ├── raptor_x_simulation_setup.py │ │ │ ├── siwave_dcir_simulation_setup.py │ │ │ ├── siwave_simulation_setup.py │ │ │ └── sweep_data.py │ │ ├── siwave.py │ │ ├── source_excitations.py │ │ ├── stackup.py │ │ ├── terminal │ │ │ ├── __init__.py │ │ │ ├── bundle_terminal.py │ │ │ ├── edge_terminal.py │ │ │ ├── padstack_instance_terminal.py │ │ │ ├── pingroup_terminal.py │ │ │ ├── point_terminal.py │ │ │ └── terminal.py │ │ └── utility │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── heat_sink.py │ │ │ ├── hfss_extent_info.py │ │ │ ├── layout_statistics.py │ │ │ ├── rlc.py │ │ │ ├── simulation_configuration.py │ │ │ ├── sources.py │ │ │ ├── sweep_data_distribution.py │ │ │ └── xml_control_file.py │ ├── edb.py │ ├── edb_init.py │ └── rpc_session.py │ ├── ipc2581 │ ├── __init__.py │ ├── bom │ │ ├── __init__.py │ │ ├── bom.py │ │ ├── bom_item.py │ │ ├── characteristics.py │ │ └── refdes.py │ ├── content │ │ ├── __init__.py │ │ ├── color.py │ │ ├── content.py │ │ ├── dictionary_color.py │ │ ├── dictionary_fill.py │ │ ├── dictionary_line.py │ │ ├── entry_color.py │ │ ├── entry_line.py │ │ ├── fill.py │ │ ├── layer_ref.py │ │ └── standard_geometries_dictionary.py │ ├── ecad │ │ ├── __init__.py │ │ ├── cad_data │ │ │ ├── __init__.py │ │ │ ├── assembly_drawing.py │ │ │ ├── cad_data.py │ │ │ ├── component.py │ │ │ ├── drill.py │ │ │ ├── feature.py │ │ │ ├── layer.py │ │ │ ├── layer_feature.py │ │ │ ├── logical_net.py │ │ │ ├── outline.py │ │ │ ├── package.py │ │ │ ├── padstack_def.py │ │ │ ├── padstack_hole_def.py │ │ │ ├── padstack_instance.py │ │ │ ├── padstack_pad_def.py │ │ │ ├── path.py │ │ │ ├── phy_net.py │ │ │ ├── pin.py │ │ │ ├── polygon.py │ │ │ ├── profile.py │ │ │ ├── stackup.py │ │ │ ├── stackup_group.py │ │ │ ├── stackup_layer.py │ │ │ └── step.py │ │ ├── cad_header.py │ │ ├── ecad.py │ │ └── spec.py │ ├── history_record.py │ ├── ipc2581.py │ └── logistic_header.py │ ├── misc │ ├── __init__.py │ ├── aedtlib_personalib_install.py │ ├── downloads.py │ ├── misc.py │ ├── pyedb.runtimeconfig.json │ ├── siw_feature_config │ │ ├── __init__.py │ │ ├── emc │ │ │ ├── __init__.py │ │ │ ├── component_tags.py │ │ │ ├── net_tags.py │ │ │ ├── tag_library.py │ │ │ └── xml_generic.py │ │ ├── emc_rule_checker_settings.py │ │ └── xtalk_scan │ │ │ ├── fd_xtalk_scan_config.py │ │ │ ├── impedance_scan_config.py │ │ │ ├── net.py │ │ │ ├── pins.py │ │ │ ├── scan_config.py │ │ │ └── td_xtalk_config.py │ └── utilities.py │ ├── modeler │ └── geometry_operators.py │ ├── siwave.py │ ├── siwave_core │ └── icepak.py │ └── workflow.py └── tests ├── __init__.py ├── conftest.py ├── example_models ├── T40 │ └── ANSYS-HSD_V1_dcir.aedb │ │ └── edb.def ├── TEDB │ ├── ANSYS-HSD_V1.aedb │ │ ├── config_adaptive_broadband.json │ │ ├── edb.def │ │ ├── simsetup.json │ │ └── simsetup_custom_sballs.json │ ├── ANSYS-HSD_V1_0.zip │ ├── ANSYS-HSD_V1_0_ODB.tgz │ ├── ANSYS-HSD_V1_cut.aedb │ │ └── edb.def │ ├── GRM32ER72A225KA35_25C_0V.sp │ ├── GRM32_DC0V_25degC.mod │ ├── GRM32_DC0V_25degC_series.s2p │ ├── MicrostripSpliGnd.aedb │ │ ├── edb.def │ │ └── stride │ │ │ └── model.index │ ├── MicrostripSplitGND.aedb │ │ ├── edb.def │ │ └── stride │ │ │ └── model.index │ ├── Multizone_GroundVoids.aedb │ │ ├── edb.def │ │ └── stride │ │ │ └── model.index │ ├── Package.aedb │ │ └── edb.def │ ├── ansys_pcb_stackup.csv │ ├── ansys_pcb_stackup.xml │ ├── bom_example.csv │ ├── bom_example_2.csv │ ├── chip.a3dcomp │ ├── chip.aedb │ │ └── edb.def │ ├── chip_flipped_stackup.aedb │ │ └── edb.def │ ├── chip_offset.aedb │ │ └── edb.def │ ├── chip_solder.aedb │ │ └── edb.def │ ├── chip_zoffset.aedb │ │ └── edb.def │ ├── chip_zoffset_solder.aedb │ │ └── edb.def │ ├── component_no_ref_pins.aedb │ │ └── edb.def │ ├── dc_flow.aedb │ │ └── edb.def │ ├── edb_config_json │ │ ├── boundaries.json │ │ ├── components.json │ │ ├── general.json │ │ ├── general.toml │ │ ├── nets.json │ │ ├── operations_cutout.json │ │ ├── package_def.json │ │ ├── padstacks.json │ │ ├── pin_groups.json │ │ ├── ports_circuit.json │ │ ├── ports_coax.json │ │ ├── s_parameter.json │ │ ├── setups_hfss.json │ │ ├── setups_siwave_dc.json │ │ ├── setups_siwave_syz.json │ │ ├── sources.json │ │ ├── spice.json │ │ └── stackup.json │ ├── edb_test_82.dxf │ ├── edge_ports.aedb │ │ ├── edb.def │ │ └── stride │ │ │ └── model.index │ ├── emi_scanner.tgs │ ├── example_arbitrary_wave_ports.aedb │ │ └── edb.def │ ├── example_package.aedb │ │ ├── edb.def │ │ └── stride │ │ │ └── model.index │ ├── galileo_stackup.csv │ ├── lam_for_bottom_place.aedb │ │ └── edb.def │ ├── lam_for_top_place.aedb │ │ └── edb.def │ ├── lam_for_top_place_no_setups.aedb │ │ ├── edb.def │ │ └── stride │ │ │ └── model.index │ ├── lam_with_mold.aedb │ │ └── edb.def │ ├── merge_via_4layers.aedb │ │ └── edb.def │ ├── multi_cells.aedb │ │ └── edb.def │ ├── padstacks.aedb │ │ └── edb.def │ ├── simple.aedb │ │ └── edb.def │ ├── stackup.json │ ├── stackup_laminate.xml │ ├── stackup_renamed.json │ ├── test_107.aedb │ │ └── edb.def │ ├── test_mat.json │ ├── test_mat2.json │ ├── test_merge_polygon.aedb │ │ └── edb.def │ ├── test_path_length.aedb │ │ └── edb.def │ ├── test_pin_group.aedb │ │ └── edb.def │ ├── test_sources.aedb │ │ └── edb.def │ ├── via_fence_generic_project.aedb │ │ └── edb.def │ └── vias_300.aedb │ │ └── edb.def ├── cad │ └── GDS │ │ ├── dummy_layermap.map │ │ ├── sky130_fictitious_dtc_example.gds │ │ └── sky130_fictitious_dtc_example_control_no_map.xml ├── convert_and_merge_path.aedb │ └── edb.def ├── edb_edge_ports.aedb │ └── edb.def ├── misc │ ├── points_for_line_detection.csv │ └── points_for_line_detection_135.csv ├── multi_zone_project.aedb │ └── edb.def ├── siwave │ ├── icepak_component.pwrd │ └── siw_dc.siw └── syslib │ └── Materials.amat ├── grpc ├── __init__.py ├── integration │ └── __init__.py ├── system │ ├── __init__.py │ ├── conftest.py │ ├── stackup_renamed.json │ ├── test_edb.py │ ├── test_edb_components.py │ ├── test_edb_configuration_2p0.py │ ├── test_edb_definition.py │ ├── test_edb_differential_pairs.py │ ├── test_edb_extended_nets.py │ ├── test_edb_future_features_242.py │ ├── test_edb_ipc.py │ ├── test_edb_layout.py │ ├── test_edb_materials.py │ ├── test_edb_modeler.py │ ├── test_edb_net_classes.py │ ├── test_edb_nets.py │ ├── test_edb_padstacks.py │ ├── test_edb_stackup.py │ ├── test_emi_scanner.py │ ├── test_siwave.py │ ├── test_siwave_features.py │ └── wave_ports.aedb │ │ ├── edb.def │ │ └── stride │ │ └── model.index └── unit │ ├── __init__.py │ ├── conftest.py │ ├── test_edb.py │ ├── test_edbsiwave.py │ ├── test_geometry_oprators.py │ ├── test_materials.py │ ├── test_padstack.py │ ├── test_simulation_configuration.py │ ├── test_source.py │ └── test_stackup.py ├── legacy ├── __init__.py ├── integration │ └── __init__.py ├── system │ ├── __init__.py │ ├── conftest.py │ ├── test_edb.py │ ├── test_edb_components.py │ ├── test_edb_configuration_1p0.py │ ├── test_edb_configuration_2p0.py │ ├── test_edb_definition.py │ ├── test_edb_differential_pairs.py │ ├── test_edb_extended_nets.py │ ├── test_edb_future_features_242.py │ ├── test_edb_geometry.py │ ├── test_edb_ipc.py │ ├── test_edb_layout.py │ ├── test_edb_materials.py │ ├── test_edb_modeler.py │ ├── test_edb_net_classes.py │ ├── test_edb_nets.py │ ├── test_edb_padstacks.py │ ├── test_edb_stackup.py │ ├── test_emi_scanner.py │ ├── test_extensions.py │ ├── test_siwave.py │ └── test_siwave_features.py └── unit │ ├── __init__.py │ ├── conftest.py │ ├── test_clr_module.py │ ├── test_edb.py │ ├── test_edbsiwave.py │ ├── test_geometry_oprators.py │ ├── test_materials.py │ ├── test_padstack.py │ ├── test_simulation_configuration.py │ ├── test_source.py │ └── test_stackup.py ├── test_warnings.py └── utils └── test_utils.py /.flake8: -------------------------------------------------------------------------------- 1 | [flake8] 2 | exclude = venv, __init__.py, doc/_build, doc/source/examples 3 | select = W191, W291, W293, W391, E115, E117, E122, E124, E125, E225, E231, E301, E303, E501, F401, F403 4 | count = True 5 | max-complexity = 10 6 | max-line-length = 120 7 | statistics = True -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | .github/* @svandenb-dev @ring630 @SMoraisAnsys 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.yml: -------------------------------------------------------------------------------- 1 | name: 💡 New feature 2 | description: Enhancements to the code 3 | title: "Add ..." 4 | labels: ["enhancement"] 5 | assignees: [""] 6 | 7 | body: 8 | 9 | - type: markdown 10 | attributes: 11 | value: '# 📝 **New Feature**' 12 | 13 | - type: textarea 14 | id: feature-description 15 | attributes: 16 | label: Description of the feature 17 | placeholder: Describe what feature you devised and why it is useful for the project 18 | validations: 19 | required: true 20 | 21 | - type: markdown 22 | attributes: 23 | value: '# 💡 **Implementation**' 24 | 25 | - type: textarea 26 | id: implementation-description 27 | attributes: 28 | label: Steps for implementing the feature 29 | placeholder: Describe how this new feature can be implemented 30 | validations: 31 | required: false 32 | 33 | - type: markdown 34 | attributes: 35 | value: '# 🔗 **References**' 36 | 37 | - type: textarea 38 | id: references 39 | attributes: 40 | label: Useful links and references 41 | placeholder: A list of links and references to help when implementing the feature 42 | validations: 43 | required: false -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/syntax.yml: -------------------------------------------------------------------------------- 1 | name: 💡 Improve API and code syntax 2 | description: Enhance the API design 3 | title: "Improve ..." 4 | labels: ["enhancement"] 5 | assignees: [""] 6 | 7 | body: 8 | 9 | - type: markdown 10 | attributes: 11 | value: '# 📝 **API enhancements**' 12 | 13 | - type: textarea 14 | id: modification-description 15 | attributes: 16 | label: Description of the current limitations 17 | placeholder: Explain what are the limitations of the current API or why its usage is not intuitive. 18 | validations: 19 | required: true 20 | 21 | - type: markdown 22 | attributes: 23 | value: '# 💡 **Implementation**' 24 | 25 | - type: textarea 26 | id: implementation-description 27 | attributes: 28 | label: Code sample expected 29 | placeholder: Provide a code example that fills the gap and meets the expectations. 30 | validations: 31 | required: false 32 | 33 | - type: markdown 34 | attributes: 35 | value: '# 🔗 **References**' 36 | 37 | - type: textarea 38 | id: references 39 | attributes: 40 | label: Useful links and references 41 | placeholder: A list of links and references to help when implementing the feature 42 | validations: 43 | required: false -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "pip" # See documentation for possible values 4 | directory: "/" # Location of package manifests 5 | schedule: 6 | interval: "daily" 7 | reviewers: 8 | - "SMoraisAnsys" 9 | assignees: 10 | - "pyansys-ci-bot" 11 | labels: 12 | - "maintenance" 13 | - "dependencies" 14 | commit-message: 15 | prefix: "BUILD" 16 | 17 | - package-ecosystem: "github-actions" 18 | directory: "/" 19 | schedule: 20 | interval: "daily" 21 | reviewers: 22 | - "SMoraisAnsys" 23 | assignees: 24 | - "pyansys-ci-bot" 25 | labels: 26 | - "maintenance" 27 | - "dependencies" 28 | commit-message: 29 | prefix: "BUILD" 30 | -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | documentation: 2 | - changed-files: 3 | - any-glob-to-any-file: ['doc/source/**/*', 'examples/**/*', 'README.md'] 4 | 5 | maintenance: 6 | - changed-files: 7 | - any-glob-to-any-file: ['.github/**/*', 'codecov.yml', '.flake8', 'pyproject.toml'] 8 | 9 | dependencies: 10 | - changed-files: 11 | - any-glob-to-any-file: ['pyproject.toml'] 12 | 13 | ci/cd: 14 | - changed-files: 15 | - any-glob-to-any-file: ['docker/**/*', '.github/**/*', '.ci/**/*'] 16 | 17 | testing: 18 | - changed-files: 19 | - any-glob-to-any-file: ['tests/**/*',] 20 | 21 | grpc-transition: 22 | - changed-files: 23 | - any-glob-to-any-file: ['src/pyedb/dotnet/database/*',] 24 | -------------------------------------------------------------------------------- /.github/labels.yml: -------------------------------------------------------------------------------- 1 | - name: bug 2 | description: Something isn't working 3 | color: d42a34 4 | 5 | - name: dependencies 6 | description: Related with project dependencies 7 | color: ffc0cb 8 | 9 | - name: documentation 10 | description: Improvements or additions to documentation 11 | color: 0677ba 12 | 13 | - name: enhancement 14 | description: New features or code improvements 15 | color: FFD827 16 | 17 | - name: good first issue 18 | description: Easy to solve for newcomers 19 | color: 62ca50 20 | 21 | - name: maintenance 22 | description: Package and maintenance related 23 | color: f78c37 24 | 25 | - name: release 26 | description: Anything related to an incoming release 27 | color: ffffff 28 | 29 | - name: testing 30 | description: Anything related to testing 31 | color: 5802B8 32 | 33 | - name: ci/cd 34 | description: "" 35 | color: b5f226 36 | 37 | - name: grpc-transition 38 | description: Changes that need to be included in gRPC transition 39 | color: A79962 -------------------------------------------------------------------------------- /.github/workflows/label.yml: -------------------------------------------------------------------------------- 1 | name: Labeler 2 | on: 3 | pull_request: 4 | push: 5 | branches: [ main ] 6 | paths: 7 | - '../labels.yml' 8 | 9 | concurrency: 10 | group: ${{ github.workflow }}-${{ github.ref }} 11 | cancel-in-progress: true 12 | 13 | jobs: 14 | 15 | label-syncer: 16 | name: Syncer 17 | runs-on: ubuntu-latest 18 | steps: 19 | - uses: actions/checkout@v4 20 | - uses: micnncim/action-label-syncer@v1 21 | env: 22 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 23 | 24 | labeler: 25 | name: Set labels 26 | needs: [label-syncer] 27 | permissions: 28 | contents: read 29 | pull-requests: write 30 | runs-on: ubuntu-latest 31 | steps: 32 | 33 | # Label based on modified files 34 | - name: Label based on changed files 35 | uses: actions/labeler@v5 36 | with: 37 | repo-token: "${{ secrets.GITHUB_TOKEN }}" 38 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | # This is the list of {project-name}'s significant contributors. 2 | # 3 | # This file does not necessarily list everyone who has contributed code. 4 | # 5 | # For contributions made under a Corporate CLA, the organization is 6 | # added to this file. 7 | # 8 | # If you have contributed to the repository and want to be added to this file, 9 | # submit a request. 10 | # 11 | # 12 | ANSYS, Inc. 13 | -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | # Contributors 2 | 3 | ## Project Lead 4 | 5 | * [Simon Vandenbrouck](https://github.com/svandenb-dev) 6 | 7 | ## Individual Contributors 8 | 9 | * [Alberto Di Maria](https://github.com/Alberto-DM) 10 | * [amichel0205](https://github.com/amichel0205) 11 | * [boyang2022](https://github.com/boyang2022) 12 | * [Dipin](https://github.com/dipinknair) 13 | * [drewm102](https://github.com/drewm102) 14 | * [Felipe Castro](https://github.com/felipeescastro) 15 | * [geofetsis](https://github.com/geofetsis) 16 | * [gfetsis](https://github.com/gfetsis) 17 | * [gkorompi](https://github.com/gkorompi) 18 | * [Hui Zhou](https://github.com/hui-zhou-a) 19 | * [Isaac Waldron](https://github.com/isaacwaldron) 20 | * [JDufrenneAnsys](https://github.com/JDufrenneAnsys) 21 | * [Kathy Pippert](https://github.com/PipKat) 22 | * [Massimo Capodiferro](https://github.com/maxcapodi78) 23 | * [Maxime Rey](https://github.com/MaxJPRey) 24 | * [Roberto Pastor Muela](https://github.com/RobPasMue) 25 | * [Samuel Lopez](https://github.com/Samuelopez-ansys) 26 | * [Skanda Kotethota](https://github.com/skandak-ansys) 27 | * [Sébastien Morais](https://github.com/SMoraisAnsys) 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 ANSYS, Inc. All rights reserved. 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 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Simple makefile to simplify repetitive build env management tasks under posix 2 | 3 | CODESPELL_DIRS ?= ./src 4 | CODESPELL_SKIP ?= "*.pyc,*.aedt,*.xml,*.txt,*.gif,*.png,*.jpg,*.js,*.html,*.doctree,*.ttf,*.woff,*.woff2,*.eot,*.mp4,*.inv,*.pickle,*.ipynb,flycheck*,./.git/*,./.hypothesis/*,*.yml,./docs/build/*,./docs/images/*,./dist/*,*~,.hypothesis*,./docs/source/examples/*,*cover,*.dat,*.mac,\#*,PKG-INFO,*.mypy_cache/*,*.xml,*.aedt,*.svg" 5 | CODESPELL_IGNORE ?= "doc/styles/config/vocabularies/ANSYS/accept.txt" 6 | 7 | all: doctest flake8 8 | 9 | doctest: codespell 10 | 11 | codespell: 12 | @echo "Running codespell" 13 | @codespell $(CODESPELL_DIRS) -S $(CODESPELL_SKIP) -I $(CODESPELL_IGNORE) 14 | 15 | flake8: 16 | @echo "Running flake8" 17 | @flake8 . -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | comment: 2 | layout: "diff" 3 | behavior: default 4 | 5 | coverage: 6 | status: 7 | project: false 8 | patch: 9 | default: 10 | # basic 11 | target: 85% 12 | if_not_found: success 13 | if_ci_failed: error 14 | if_no_uploads: error 15 | ignore: 16 | - "examples" # ignore folders and all its contents 17 | - "tests" # ignore folders and all its contents 18 | - "src/pyedb/legacy/database/siwave.py" # ignore folders and all its contents 19 | - "src/pyedb/misc/*.py" # ignore folders and all its contents 20 | -------------------------------------------------------------------------------- /doc/.vale.ini: -------------------------------------------------------------------------------- 1 | # Core settings 2 | # ============= 3 | 4 | # Location of our `styles` 5 | StylesPath = "styles" 6 | 7 | # The options are `suggestion`, `warning`, or `error` (defaults to “warning”). 8 | MinAlertLevel = warning 9 | 10 | # By default, `code` and `tt` are ignored. 11 | IgnoredScopes = code, tt 12 | 13 | # By default, `script`, `style`, `pre`, and `figure` are ignored. 14 | SkippedScopes = script, style, pre, figure 15 | 16 | # WordTemplate specifies what Vale will consider to be an individual word. 17 | WordTemplate = \b(?:%s)\b 18 | 19 | # List of Packages to be used for our guidelines 20 | Packages = Google 21 | 22 | # Define the Ansys vocabulary 23 | Vocab = ANSYS 24 | 25 | [*.{md,rst}] 26 | 27 | # Apply the following styles 28 | BasedOnStyles = Vale, Google 29 | 30 | # Removing Google-specific rule - Not applicable under some circumstances 31 | Google.WordList = NO 32 | Google.Colons = NO 33 | 34 | # Removing Google-specific rule - Update severity level to error on rules with default warnings 35 | # This should prevent external users and dependabot to be the only one having code-style action failing 36 | Google.Ellipses = error 37 | Google.FirstPerson = error 38 | Google.Headings = error 39 | Google.HeadingPunctuation = error 40 | Google.OxfordComma = error 41 | Google.Spelling = error 42 | Google.We = error 43 | Google.Will = error 44 | Google.WordList = error 45 | -------------------------------------------------------------------------------- /doc/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= -j auto --color 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = source 9 | BUILDDIR = _build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | .install-deps: 18 | @pip freeze | grep -q "pypandoc_binary" && is_pypandoc_binary_installed="yes" || is_pypandoc_binary_installed="no" 19 | @if [ "${ON_CI}" = "True" ] && [ "$$is_pypandoc_binary_installed" != "yes" ]; then \ 20 | @echo "Removing pypandoc to avoid conflicts with pypandoc-binary needed for CI/CD"; \ 21 | pip uninstall --yes pypandoc; \ 22 | @echo "Installing pypandoc-binary"; \ 23 | pip install pypandoc-binary==1.13; \ 24 | fi 25 | 26 | clean: 27 | rm -rf $(BUILDDIR)/* 28 | rm -rf examples/ 29 | find . -type d -name "_autosummary" -exec rm -rf {} + 30 | 31 | # Catch-all target: route all unknown targets to Sphinx using the new 32 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 33 | %: .install-deps Makefile 34 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 35 | 36 | # build html docs in parallel using all available CPUs 37 | # WARNING: this is a resource hog 38 | html: .install-deps 39 | $(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 40 | 41 | # Build pdf docs. 42 | pdf: .install-deps 43 | @$(SPHINXBUILD) -M latex "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 44 | cd $(BUILDDIR)/latex && latexmk -r latexmkrc -pdf *.tex -interaction=nonstopmode || true 45 | (test -f $(BUILDDIR)/latex/pyedb.pdf && echo pdf exists) || exit 1 46 | -------------------------------------------------------------------------------- /doc/clean_gallery.bat: -------------------------------------------------------------------------------- 1 | rem This batch script removes remove gallery examples generated from 2 | rem the sphinx gallery 3 | rmdir /s /q %~dp0\source\examples\ 4 | -------------------------------------------------------------------------------- /doc/print_errors.py: -------------------------------------------------------------------------------- 1 | """Read errors output from a Sphinx build and remove duplicate groups.""" 2 | import os 3 | import pathlib 4 | import sys 5 | 6 | sys.tracebacklimit = 0 7 | my_path = pathlib.Path(__file__).parent.resolve() 8 | 9 | errors = set() 10 | error_file = os.path.join(my_path, "build_errors.txt") 11 | if os.path.isfile(error_file): 12 | with open(error_file) as fid: 13 | group = [] 14 | for line in fid.readlines(): 15 | line = line.strip() 16 | if line: 17 | group.append(line) 18 | else: 19 | errors.add("\n".join(group)) 20 | group = [] 21 | 22 | for error in list(errors): 23 | print(error) 24 | print() 25 | 26 | # There should be no errors here since sphinx will have exited 27 | print() 28 | if errors: 29 | raise Exception(f"Sphinx reported {len(errors)} warnings\n\n") 30 | 31 | print(f"Sphinx Reported no warnings\n\n") 32 | -------------------------------------------------------------------------------- /doc/source/_static/README.md: -------------------------------------------------------------------------------- 1 | ### _static 2 | 3 | Place custom CSS files in this folder. 4 | 5 | Emphasis should be on improving the ``ansys-sphinx-theme`` and 6 | having a unified "feel" across the PyAnsys packages. 7 | -------------------------------------------------------------------------------- /doc/source/_static/assets/download/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | !README.md -------------------------------------------------------------------------------- /doc/source/_static/assets/download/README.md: -------------------------------------------------------------------------------- 1 | Downloadable assets are stored here. 2 | -------------------------------------------------------------------------------- /doc/source/_static/assets/index_api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/_static/assets/index_api.png -------------------------------------------------------------------------------- /doc/source/_static/assets/index_api.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 12 | 14 | 16 | 19 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /doc/source/_static/assets/index_contribute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/_static/assets/index_contribute.png -------------------------------------------------------------------------------- /doc/source/_static/assets/index_contribute.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 15 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /doc/source/_static/assets/index_examples.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/_static/assets/index_examples.png -------------------------------------------------------------------------------- /doc/source/_static/assets/index_examples.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /doc/source/_static/assets/index_getting_started.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/_static/assets/index_getting_started.png -------------------------------------------------------------------------------- /doc/source/_static/assets/index_getting_started.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 13 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /doc/source/_static/assets/index_user_guide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/_static/assets/index_user_guide.png -------------------------------------------------------------------------------- /doc/source/_static/connector_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/_static/connector_example.png -------------------------------------------------------------------------------- /doc/source/_static/custom.css: -------------------------------------------------------------------------------- 1 | @import "../ansys-sphinx-theme.css"; 2 | 3 | .col-md-3 { 4 | flex: 0 0 30%; 5 | max-width: 30%; 6 | } 7 | .col-xl-7 { 8 | flex: 0 0 53.33333%; 9 | max-width: 53.33333%; 10 | } 11 | 12 | .bd-toc { 13 | padding-top: 5em; 14 | } 15 | 16 | /* Remove once implemented in ansys-sphinx-theme*/ 17 | 18 | .sd-card .sd-card-img-top { 19 | height: 100px; 20 | width: 100px; 21 | margin-left: auto; 22 | margin-right: auto; 23 | } 24 | 25 | .sd-card .sd-card-header { 26 | border: none; 27 | background-color:white; 28 | color: #150458 !important; 29 | font-size: var(--pst-font-size-h5); 30 | font-weight: bold; 31 | padding: .1rem 0rem 0.5rem 0rem; 32 | } 33 | 34 | .sd-card .sd-card-footer .sd-card-text { 35 | max-width: 220px; 36 | margin-left: auto; 37 | margin-right: auto; 38 | } 39 | 40 | nav.bd-links ul li.toctree-l1 > a { 41 | font-size: .90rem; 42 | } 43 | 44 | nav.bd-links ul li.toctree-l2 > a { 45 | font-size: .85rem; 46 | text-indent: 1px; 47 | } 48 | nav.bd-links ul li.toctree-l3 > a { 49 | font-size: .85rem; 50 | text-indent: 2px; 51 | } 52 | 53 | nav.bd-links ul li.toctree-l4 > a { 54 | font-size: .8rem; 55 | text-indent: 3px; 56 | } 57 | -------------------------------------------------------------------------------- /doc/source/_static/diff_via.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/_static/diff_via.png -------------------------------------------------------------------------------- /doc/source/_static/edb_example_12_sma_connector_on_board.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/_static/edb_example_12_sma_connector_on_board.png -------------------------------------------------------------------------------- /doc/source/_static/parametrized_design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/_static/parametrized_design.png -------------------------------------------------------------------------------- /doc/source/_static/thumbnails/101_getting_started.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/_static/thumbnails/101_getting_started.png -------------------------------------------------------------------------------- /doc/source/api/CoreEdb.rst: -------------------------------------------------------------------------------- 1 | EDB manager 2 | =========== 3 | An AEDB database is a folder that contains the database representing any part of a PCB. 4 | It can be opened and edited using the ``Edb`` class. 5 | 6 | .. image:: ../resources/3dlayout_1.png 7 | :width: 800 8 | :alt: HFSS 3D Layout is the tool used to visualize EDB content. 9 | 10 | 11 | .. currentmodule:: pyedb.dotnet 12 | .. autosummary:: 13 | :toctree: _autosummary 14 | 15 | edb.Edb 16 | 17 | 18 | .. code:: python 19 | 20 | from pyedb import Edb 21 | 22 | # this call returns the Edb class initialized on 2024R2 23 | edb = Edb(myedb, edbversion="2024.2") 24 | 25 | ... 26 | 27 | 28 | EDB modules 29 | ~~~~~~~~~~~ 30 | This section lists the core EDB modules for reading and writing information 31 | to AEDB files. 32 | 33 | 34 | .. currentmodule:: pyedb.dotnet.database 35 | 36 | .. autosummary:: 37 | :toctree: _autosummary 38 | :nosignatures: 39 | 40 | components.Components 41 | hfss.EdbHfss 42 | layout_validation.LayoutValidation 43 | materials.Materials 44 | modeler.Modeler 45 | nets.EdbNets 46 | edb_data.padstacks_data.EDBPadstack 47 | siwave.EdbSiwave 48 | stackup.Stackup 49 | 50 | 51 | 52 | .. code:: python 53 | 54 | from pyedb import Edb 55 | 56 | edb = Edb(myedb, edbversion="2023.1") 57 | 58 | # this call returns the EdbHfss Class 59 | comp = edb.hfss 60 | 61 | # this call returns the Components Class 62 | comp = edb.components 63 | 64 | # this call returns the EdbSiwave Class 65 | comp = edb.siwave 66 | 67 | # this call returns the EdbPadstacks Class 68 | comp = edb.padstacks 69 | 70 | # this call returns the Stackup Class 71 | comp = edb.stackup 72 | 73 | # this call returns the Materials Class 74 | comp = edb.materials 75 | 76 | # this call returns the EdbNets Class 77 | comp = edb.nets 78 | 79 | ... 80 | -------------------------------------------------------------------------------- /doc/source/api/SiWave.rst: -------------------------------------------------------------------------------- 1 | SIwave manager 2 | ============== 3 | `SIwave `_ is a specialized tool 4 | for power integrity, signal integrity, and EMI analysis of IC packages and PCB. This tool 5 | solves power delivery systems and high-speed channels in electronic devices. It can be 6 | accessed from PyEDB in Windows only. All setups can be implemented through EDB API. 7 | 8 | .. image:: ../resources/siwave.png 9 | :width: 800 10 | :alt: EdbSiwave 11 | :target: https://www.ansys.com/products/electronics/ansys-siwave 12 | 13 | 14 | .. currentmodule:: pyedb.siwave 15 | 16 | .. autosummary:: 17 | :toctree: _autosummary 18 | 19 | Siwave 20 | 21 | 22 | .. code:: python 23 | 24 | from pyedb.siwave import Siwave 25 | 26 | # this call returns the Edb class initialized on 2024 R2 27 | siwave = Siwave("2024.2") 28 | siwave.open_project("pyproject.siw") 29 | siwave.export_element_data("mydata.txt") 30 | siwave.close_project() 31 | ... 32 | 33 | .. currentmodule:: pyedb.siwave_core.icepak 34 | Icepak 35 | 36 | -------------------------------------------------------------------------------- /doc/source/api/SimulationConfigurationEdb.rst: -------------------------------------------------------------------------------- 1 | Simulation configuration 2 | ======================== 3 | These classes are the containers of simulation configuration constructors for the EDB. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.edb_data.simulation_configuration 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | SimulationConfiguration 13 | SimulationConfigurationDc 14 | SimulationConfigurationAc 15 | SimulationConfigurationBatch 16 | 17 | 18 | 19 | .. code:: python 20 | 21 | from pyedb import Edb 22 | 23 | edbapp = Edb(myedb, edbversion="2023.1") 24 | 25 | sim_setup = edbapp.new_simulation_configuration() 26 | sim_setup.solver_type = sim_setup.SOLVER_TYPE.SiwaveSYZ 27 | sim_setup.batch_solve_settings.cutout_subdesign_expansion = 0.01 28 | sim_setup.batch_solve_settings.do_cutout_subdesign = True 29 | sim_setup.use_default_cutout = False 30 | sim_setup.batch_solve_settings.signal_nets = [ 31 | "PCIE0_RX0_P", 32 | "PCIE0_RX0_N", 33 | "PCIE0_TX0_P_C", 34 | "PCIE0_TX0_N_C", 35 | "PCIE0_TX0_P", 36 | "PCIE0_TX0_N", 37 | ] 38 | sim_setup.batch_solve_settings.components = ["U2A5", "J2L1"] 39 | sim_setup.batch_solve_settings.power_nets = ["GND"] 40 | sim_setup.ac_settings.start_freq = "100Hz" 41 | sim_setup.ac_settings.stop_freq = "6GHz" 42 | sim_setup.ac_settings.step_freq = "10MHz" 43 | 44 | sim_setup.export_json(os.path.join(project_path, "configuration.json")) 45 | edbapp.build_simulation_project(sim_setup) 46 | 47 | ... 48 | -------------------------------------------------------------------------------- /doc/source/api/XmlControlFile.rst: -------------------------------------------------------------------------------- 1 | XML control file 2 | ================ 3 | Convert a technology file to EDB control file. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.edb_data.control_file 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | ControlProperty 13 | ControlFileMaterial 14 | ControlFileDielectric 15 | ControlFileLayer 16 | ControlFileVia 17 | ControlFileStackup 18 | ControlFileImportOptions 19 | ControlExtent 20 | ControlCircuitPt 21 | ControlFileComponent 22 | ControlFileComponents 23 | 24 | 25 | -------------------------------------------------------------------------------- /doc/source/api/edb_data/EdbValue.rst: -------------------------------------------------------------------------------- 1 | EDB value 2 | ========= 3 | Class managing EDB Value. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.edb_data.edbvalue 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | EdbValue 13 | -------------------------------------------------------------------------------- /doc/source/api/edb_data/HfssExtentInfo.rst: -------------------------------------------------------------------------------- 1 | HFSS extent info 2 | ================ 3 | These class is the containers of HFSS Extent. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.edb_data.hfss_extent_info 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | HfssExtentInfo 13 | -------------------------------------------------------------------------------- /doc/source/api/edb_data/LayerData.rst: -------------------------------------------------------------------------------- 1 | Stackup & layers 2 | ================ 3 | These classes are the containers of the layer and stackup manager of the EDB API. 4 | 5 | 6 | .. code:: python 7 | 8 | from pyedb import Edb 9 | 10 | edb = Edb(myedb, edbversion="2023.1") 11 | 12 | # this call returns the EDBLayers class 13 | layer = edb.stackup.stackup_layers 14 | 15 | # this call returns the EDBLayer class 16 | layer = edb.stackup["TOP"] 17 | ... 18 | 19 | 20 | .. currentmodule:: pyedb.dotnet.database.edb_data.layer_data 21 | 22 | .. autosummary:: 23 | :toctree: _autosummary 24 | :nosignatures: 25 | 26 | 27 | LayerEdbClass 28 | 29 | 30 | -------------------------------------------------------------------------------- /doc/source/api/edb_data/NetData.rst: -------------------------------------------------------------------------------- 1 | Nets 2 | ==== 3 | 4 | Net properties 5 | -------------- 6 | The following class is the container of data management for nets, extended nets and differential pairs. 7 | 8 | 9 | .. currentmodule:: pyedb.dotnet.database.edb_data.nets_data 10 | 11 | .. autosummary:: 12 | :toctree: _autosummary 13 | :nosignatures: 14 | 15 | EDBNetsData 16 | EDBNetClassData 17 | EDBExtendedNetData 18 | EDBDifferentialPairData 19 | 20 | .. code:: python 21 | 22 | from pyedb import Edb 23 | 24 | edb = Edb(myedb, edbversion="2024.2") 25 | 26 | edb.nets["M_MA<6>"].delete() 27 | edb.net_classes 28 | edb.differential_pairs 29 | edb.extended_nets 30 | 31 | 32 | ... -------------------------------------------------------------------------------- /doc/source/api/edb_data/PadstackData.rst: -------------------------------------------------------------------------------- 1 | vias and padstacks 2 | ================== 3 | 4 | Instances and definitions 5 | ------------------------- 6 | These classes are the containers of data management for padstacks instances and padstack definitions. 7 | 8 | 9 | .. currentmodule:: pyedb.dotnet.database.edb_data.padstacks_data 10 | 11 | .. autosummary:: 12 | :toctree: _autosummary 13 | :nosignatures: 14 | 15 | EDBPadProperties 16 | EDBPadstack 17 | EDBPadstackInstance 18 | -------------------------------------------------------------------------------- /doc/source/api/edb_data/PortsData.rst: -------------------------------------------------------------------------------- 1 | Ports 2 | ===== 3 | These classes are the containers of ports methods of the EDB for both HFSS and SIwave. 4 | 5 | .. autosummary:: 6 | :toctree: _autosummary 7 | 8 | .. code:: python 9 | 10 | from pyedb import Edb 11 | 12 | edb = Edb(myedb, edbversion="2023.1") 13 | 14 | # this call returns the EDB excitations dictionary 15 | edb.ports 16 | ... 17 | 18 | 19 | .. currentmodule:: pyedb.dotnet.database.edb_data.ports 20 | 21 | .. autosummary:: 22 | :toctree: _autosummary 23 | :nosignatures: 24 | 25 | GapPort 26 | WavePort 27 | -------------------------------------------------------------------------------- /doc/source/api/edb_data/PrimitivesData.rst: -------------------------------------------------------------------------------- 1 | Modeler & primitives 2 | ==================== 3 | These classes are the containers of primitives and all relative methods. 4 | Primitives are planes, lines, rectangles, and circles. 5 | 6 | 7 | Primitives properties 8 | --------------------- 9 | These classes are the containers of data management for primitives and arcs. 10 | 11 | .. currentmodule:: pyedb.dotnet.database.edb_data.primitives_data 12 | 13 | .. autosummary:: 14 | :toctree: _autosummary 15 | :nosignatures: 16 | 17 | 18 | EDBArcs 19 | EdbPolygon 20 | 21 | 22 | .. code:: python 23 | 24 | from pyedb import Edb 25 | 26 | edb = Edb(myedb, edbversion="2023.1") 27 | 28 | polygon = edbapp.modeler.polygons[0] 29 | polygon.is_void 30 | poly2 = polygon.clone() 31 | 32 | ... 33 | -------------------------------------------------------------------------------- /doc/source/api/edb_data/RaptorXSimulationSetup.rst: -------------------------------------------------------------------------------- 1 | RaptorX simulation setup 2 | ======================== 3 | These classes are the containers of RaptorX simulation setup. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.edb_data.raptor_x_simulation_setup_data 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | RaptorXSimulationSetup 13 | RaptorXSimulationSettings 14 | RaptorXGeneralSettings 15 | RaptorXSimulationAdvancedSettings -------------------------------------------------------------------------------- /doc/source/api/edb_data/SourceData.rst: -------------------------------------------------------------------------------- 1 | Sources and excitations 2 | ======================= 3 | These classes are the containers of sources methods of the EDB for both HFSS and SIwave. 4 | 5 | 6 | .. code:: python 7 | 8 | from pyedb import Edb 9 | 10 | edb = Edb(myedb, edbversion="2024.2") 11 | 12 | # this call returns the EDB excitations dictionary 13 | edb.excitations 14 | ... 15 | 16 | 17 | .. currentmodule:: pyedb.dotnet.database.edb_data.sources 18 | 19 | .. autosummary:: 20 | :toctree: _autosummary 21 | :nosignatures: 22 | -------------------------------------------------------------------------------- /doc/source/api/edb_data/Utilities.rst: -------------------------------------------------------------------------------- 1 | EDB utilities 2 | ============= 3 | Class managing EDB utilities. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.edb_data.utilities 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | EDBStatistics 13 | -------------------------------------------------------------------------------- /doc/source/api/edb_data/Variables.rst: -------------------------------------------------------------------------------- 1 | Variables 2 | ========= 3 | Class managing EDB Variables. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.edb_data.variables 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | Variable 13 | -------------------------------------------------------------------------------- /doc/source/api/edb_data/index.rst: -------------------------------------------------------------------------------- 1 | ================ 2 | EDB data classes 3 | ================ 4 | 5 | This section describes EDB data classes. 6 | 7 | 8 | .. toctree:: 9 | :maxdepth: 2 10 | 11 | EdbValue 12 | HfssExtentInfo 13 | LayerData 14 | NetData 15 | PadstackData 16 | PortsData 17 | PrimitivesData 18 | RaptorXSimulationSetup 19 | SourceData 20 | Utilities 21 | Variables 22 | 23 | -------------------------------------------------------------------------------- /doc/source/api/index.rst: -------------------------------------------------------------------------------- 1 | ============= 2 | API reference 3 | ============= 4 | 5 | This section describes EDB functions, classes, and methods 6 | for EDB apps and modules. Use the search feature or click links 7 | to view API documentation. 8 | 9 | The PyEDB API includes classes for apps and modules. You must initialize the 10 | ``Edb`` class to get access to all modules and methods. All other classes and 11 | methods are inherited into the ``Edb`` class. 12 | 13 | If EDB is launched within the ``HfssdLayout`` class, EDB is accessible in read-only mode. 14 | 15 | 16 | .. image:: ../resources/edb_intro.png 17 | :width: 800 18 | :alt: EDB apps 19 | :target: https://www.ansys.com/applications/pcbs-ics-ic-packages 20 | 21 | 22 | **Example** 23 | 24 | .. code:: python 25 | 26 | from pyedb import Edb 27 | 28 | edb = Edb("my_project.aedb", edbversion="2023.1") 29 | edb.core_components.components["R1"].r_value = 40 30 | edb.close_edb() 31 | 32 | 33 | .. toctree:: 34 | :maxdepth: 2 35 | 36 | CoreEdb 37 | edb_data/index 38 | sim_setup_data/data/index 39 | sim_setup_data/io/index 40 | utilities/index 41 | SiWave 42 | SimulationConfigurationv2 43 | 44 | 45 | -------------------------------------------------------------------------------- /doc/source/api/sim_setup_data/data/adaptive_frequency_data.rst: -------------------------------------------------------------------------------- 1 | Adaptive frequency data 2 | ======================= 3 | This class is the container of HFSS adaptive frequency data. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.sim_setup_data.data.adaptive_frequency_data 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | AdaptiveFrequencyData 14 | 15 | 16 | -------------------------------------------------------------------------------- /doc/source/api/sim_setup_data/data/index.rst: -------------------------------------------------------------------------------- 1 | ===================== 2 | Simulation setup data 3 | ===================== 4 | 5 | This section describes Simulation setup data. 6 | 7 | 8 | .. toctree:: 9 | :maxdepth: 2 10 | 11 | adaptive_frequency_data 12 | mesh_operation 13 | settings 14 | sim_setup_info 15 | simulation_settings 16 | siw_dc_ir_settings 17 | sweep_data -------------------------------------------------------------------------------- /doc/source/api/sim_setup_data/data/mesh_operation.rst: -------------------------------------------------------------------------------- 1 | Mesh operation 2 | ============== 3 | This class is the container of HFSS mesh operation. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.sim_setup_data.data.mesh_operation 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | MeshOpType 14 | MeshOperation 15 | LengthMeshOperation 16 | SkinDepthMeshOperation 17 | 18 | 19 | -------------------------------------------------------------------------------- /doc/source/api/sim_setup_data/data/settings.rst: -------------------------------------------------------------------------------- 1 | HFSS simulation setup settings 2 | ============================== 3 | These classes are the containers of HFSS simulation setup settings. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.sim_setup_data.data.settings 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | AdaptiveSettings 14 | DefeatureSettings 15 | AdvancedMeshSettings 16 | ViaSettings 17 | CurveApproxSettings 18 | DcrSettings 19 | HfssPortSettings 20 | HfssSolverSettings 21 | 22 | 23 | -------------------------------------------------------------------------------- /doc/source/api/sim_setup_data/data/sim_setup_info.rst: -------------------------------------------------------------------------------- 1 | Simulation setup info 2 | ====================== 3 | This class is the container of simulation setup info. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.sim_setup_data.data.sim_setup_info 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | SimSetupInfo 14 | 15 | 16 | -------------------------------------------------------------------------------- /doc/source/api/sim_setup_data/data/simulation_settings.rst: -------------------------------------------------------------------------------- 1 | Simulation settings 2 | =================== 3 | These classes are the containers of simulation settings. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.sim_setup_data.data.simulation_settings 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | BaseSimulationSettings 14 | SimulationSettings 15 | HFSSSimulationSettings 16 | HFSSPISimulationSettings 17 | 18 | 19 | -------------------------------------------------------------------------------- /doc/source/api/sim_setup_data/data/siw_dc_ir_settings.rst: -------------------------------------------------------------------------------- 1 | SIwave DC-IR settings 2 | ===================== 3 | This class is the container of SIwave DC-IR settings. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.sim_setup_data.data.siw_dc_ir_settings 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | SiwaveDCIRSettings 14 | 15 | 16 | -------------------------------------------------------------------------------- /doc/source/api/sim_setup_data/data/sweep_data.rst: -------------------------------------------------------------------------------- 1 | Sweep data 2 | ========== 3 | This class is the container of sweep data. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.sim_setup_data.data.sweep_data 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | SweepData 14 | 15 | 16 | -------------------------------------------------------------------------------- /doc/source/api/sim_setup_data/io/index.rst: -------------------------------------------------------------------------------- 1 | =================== 2 | Simulation setup IO 3 | =================== 4 | 5 | This section describes Simulation setup IO. 6 | 7 | 8 | .. toctree:: 9 | :maxdepth: 2 10 | 11 | -------------------------------------------------------------------------------- /doc/source/api/sim_setup_data/io/siwave.rst: -------------------------------------------------------------------------------- 1 | SIwave IO 2 | ========= 3 | This class is the container of SIwave IO. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.sim_setup_data.io.siwave 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | SettingsBase 14 | AdvancedSettings 15 | DCSettings 16 | DCAdvancedSettings 17 | 18 | 19 | -------------------------------------------------------------------------------- /doc/source/api/utilities/heatsink.rst: -------------------------------------------------------------------------------- 1 | Icepak heat sink 2 | ================ 3 | This class is the container of Icepak heat sink. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.utilities.heatsink 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | HeatSink 14 | 15 | 16 | -------------------------------------------------------------------------------- /doc/source/api/utilities/hfss_simulation_setup.rst: -------------------------------------------------------------------------------- 1 | HFSS simulation setup 2 | ===================== 3 | These classes are the containers of HFSS simulation setup. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.utilities.hfss_simulation_setup 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | HfssSimulationSetup 14 | HFSSPISimulationSetup 15 | 16 | 17 | -------------------------------------------------------------------------------- /doc/source/api/utilities/index.rst: -------------------------------------------------------------------------------- 1 | ========= 2 | Utilities 3 | ========= 4 | 5 | This section describes utilities. 6 | 7 | 8 | .. toctree:: 9 | :maxdepth: 2 10 | 11 | heatsink 12 | hfss_simulation_setup 13 | simulation_setup 14 | siwave_simulation_setup -------------------------------------------------------------------------------- /doc/source/api/utilities/simulation_setup.rst: -------------------------------------------------------------------------------- 1 | Simulation setup 2 | ================ 3 | This class is the container of simulation setup. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.utilities.simulation_setup 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | SimulationSetupType 14 | AdaptiveType 15 | SimulationSetup 16 | 17 | 18 | -------------------------------------------------------------------------------- /doc/source/api/utilities/siwave_simulation_setup.rst: -------------------------------------------------------------------------------- 1 | SIwave simulation setup 2 | ======================= 3 | These classes are the containers of siwave simulation setup. 4 | 5 | 6 | .. currentmodule:: pyedb.dotnet.database.utilities.siwave_simulation_setup 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | :nosignatures: 11 | 12 | 13 | SiwaveSimulationSetup 14 | SiwaveDCSimulationSetup 15 | 16 | 17 | -------------------------------------------------------------------------------- /doc/source/create_documentation.bat: -------------------------------------------------------------------------------- 1 | sphinx-build -b html -a . ../../../PyEDB-docs_dev -j 4 2 | -------------------------------------------------------------------------------- /doc/source/getting_started/index.rst: -------------------------------------------------------------------------------- 1 | Getting started 2 | =============== 3 | 4 | .. grid:: 2 5 | :gutter: 3 3 4 4 6 | 7 | .. grid-item-card:: About PyEDB 8 | :link: about 9 | :link-type: doc 10 | 11 | Understand what PyEDB is and why you would use it. 12 | 13 | .. grid-item-card:: Installation 14 | :link: installation 15 | :link-type: doc 16 | 17 | Learn how to install PyEDB from PyPI or Conda. 18 | 19 | .. grid-item-card:: Quick code 20 | :link: quickcode 21 | :link-type: doc 22 | 23 | See some brief code examples of how to use PyEDB. 24 | 25 | 26 | .. grid-item-card:: Versions and interfaces 27 | :link: versioning 28 | :link-type: doc 29 | 30 | Discover the compatibility between PyEDB and AEDT versions. 31 | 32 | .. grid-item-card:: Troubleshooting 33 | :link: troubleshooting 34 | :link-type: doc 35 | :margin: 2 2 0 0 36 | 37 | Any questions or issues? See the information on this page before creating an issue. 38 | 39 | .. toctree:: 40 | :maxdepth: 1 41 | :hidden: 42 | 43 | about 44 | installation 45 | quickcode 46 | versioning 47 | troubleshooting 48 | -------------------------------------------------------------------------------- /doc/source/getting_started/quickcode.rst: -------------------------------------------------------------------------------- 1 | .. _quick_code: 2 | 3 | Quick code 4 | ========== 5 | 6 | To help you begin using PyEDB, you can view or download the PyEDB API cheat sheet. This one-page reference 7 | provides syntax rules and commands for using the PyEDB API: 8 | 9 | - `View `_ the PyEDB API cheat sheet. 10 | - `Download `_ the PyEDB API cheat sheet. 11 | 12 | Load an AEDB file into memory 13 | ----------------------------- 14 | 15 | This code shows how to use PyEDB to load an existing AEDB file into memory: 16 | 17 | .. code:: python 18 | 19 | from pyedb import Edb 20 | from pyedb.generic.general_methods import generate_unique_folder_name 21 | import pyedb.misc.downloads as downloads 22 | 23 | temp_folder = generate_unique_folder_name() 24 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 25 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 26 | 27 | Connect to EDB from a Python IDE 28 | -------------------------------- 29 | 30 | PyEDB works both inside AEDT and as a standalone app. PyEDB also provides 31 | advanced error management. The following code examples provide a brief 32 | example of how PyEDB works. 33 | 34 | Explicit PyEDB declaration and error management 35 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36 | 37 | .. code:: python 38 | 39 | # Start EDB 40 | 41 | from pyedb import Edb 42 | 43 | edb_file = pyedb.layout_examples.ANSYS - HSD_V1.aedb 44 | edb = Edb(edbversion="2024.2", edbpath=edb_file) 45 | 46 | 47 | Variables 48 | ~~~~~~~~~ 49 | 50 | .. code:: python 51 | 52 | from pyedb import Edb 53 | 54 | edb_file = pyedb.layout_examples.ANSYS - HSD_V1.aedb 55 | edb = Edb(edbversion="2024.2", edbpath=edb_file) 56 | edb["dim"] = "1mm" # design variable 57 | edb["$dim"] = "1mm" # project variable 58 | -------------------------------------------------------------------------------- /doc/source/getting_started/versioning.rst: -------------------------------------------------------------------------------- 1 | .. _versions_and_interfaces: 2 | 3 | ======================= 4 | Versions and interfaces 5 | ======================= 6 | 7 | PyEDB attempts to maintain compatibility with legacy versions of EDB 8 | while allowing for support of faster and better interfaces with the 9 | latest versions of EDB. 10 | 11 | Currently, there is only one interface PyEDB can use to connect to EDB. 12 | 13 | gRPC interface 14 | ============== 15 | 16 | The gRPC interface is under development and should be available soon. 17 | 18 | Legacy interface 19 | ================ 20 | 21 | PyEDB currently connects to EDB using the native C# interface for the EDB API. 22 | You do not need to set the ``PYEDB_USE_DOTNET`` environment variable to ``0`` to 23 | use the legacy interface because it is the default value. Once the gRPC interface is 24 | available, to use it, simply set the ``PYEDB_USE_DOTNET`` environment variable to ``1``. 25 | 26 | .. code:: python 27 | 28 | 29 | # Set gRPC interface (future implementation) 30 | import os 31 | 32 | os.environ["PYEDB_USE_DOTNET"] = "1" 33 | 34 | # Set DotNet interface (actual implementation) 35 | import os 36 | 37 | os.environ["PYEDB_USE_DOTNET"] = "0" 38 | -------------------------------------------------------------------------------- /doc/source/resources/3dlayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/3dlayout.png -------------------------------------------------------------------------------- /doc/source/resources/3dlayout_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/3dlayout_1.png -------------------------------------------------------------------------------- /doc/source/resources/5gantenna.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/5gantenna.png -------------------------------------------------------------------------------- /doc/source/resources/BlankDiagram3DLayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/BlankDiagram3DLayout.png -------------------------------------------------------------------------------- /doc/source/resources/add_siwave_setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/add_siwave_setup.png -------------------------------------------------------------------------------- /doc/source/resources/advanced_circuit_port_creation.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/advanced_circuit_port_creation.PNG -------------------------------------------------------------------------------- /doc/source/resources/aedt_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/aedt_3.png -------------------------------------------------------------------------------- /doc/source/resources/build_signal_integrity_user_guide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/build_signal_integrity_user_guide.png -------------------------------------------------------------------------------- /doc/source/resources/clipped_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/clipped_layout.png -------------------------------------------------------------------------------- /doc/source/resources/create_circuit_ports_on_component.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/create_circuit_ports_on_component.PNG -------------------------------------------------------------------------------- /doc/source/resources/create_coaxial_port_on_component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/create_coaxial_port_on_component.png -------------------------------------------------------------------------------- /doc/source/resources/create_edge_port_on_polygon_and_trace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/create_edge_port_on_polygon_and_trace.png -------------------------------------------------------------------------------- /doc/source/resources/create_hfss_setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/create_hfss_setup.png -------------------------------------------------------------------------------- /doc/source/resources/create_padstack_instances.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/create_padstack_instances.png -------------------------------------------------------------------------------- /doc/source/resources/create_port_between_pin_and_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/create_port_between_pin_and_layer.png -------------------------------------------------------------------------------- /doc/source/resources/create_port_on_component_simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/create_port_on_component_simple.png -------------------------------------------------------------------------------- /doc/source/resources/create_resistor_boundary_user_guide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/create_resistor_boundary_user_guide.png -------------------------------------------------------------------------------- /doc/source/resources/create_rlc_boundary_on_pin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/create_rlc_boundary_on_pin.png -------------------------------------------------------------------------------- /doc/source/resources/create_sources_and_probes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/create_sources_and_probes.png -------------------------------------------------------------------------------- /doc/source/resources/define_hfss_extent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/define_hfss_extent.png -------------------------------------------------------------------------------- /doc/source/resources/define_layer_stackup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/define_layer_stackup.png -------------------------------------------------------------------------------- /doc/source/resources/edb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/edb.png -------------------------------------------------------------------------------- /doc/source/resources/edb2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/edb2.png -------------------------------------------------------------------------------- /doc/source/resources/edb_intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/edb_intro.png -------------------------------------------------------------------------------- /doc/source/resources/icepak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/icepak.png -------------------------------------------------------------------------------- /doc/source/resources/ipc2581.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/ipc2581.png -------------------------------------------------------------------------------- /doc/source/resources/layout_bbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/layout_bbox.png -------------------------------------------------------------------------------- /doc/source/resources/layout_nets_after_cutout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/layout_nets_after_cutout.png -------------------------------------------------------------------------------- /doc/source/resources/layout_plot_all_nets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/layout_plot_all_nets.png -------------------------------------------------------------------------------- /doc/source/resources/layout_plot_gnd_nets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/layout_plot_gnd_nets.png -------------------------------------------------------------------------------- /doc/source/resources/layout_stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/layout_stats.png -------------------------------------------------------------------------------- /doc/source/resources/merge_utility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/merge_utility.png -------------------------------------------------------------------------------- /doc/source/resources/parametrized_edb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/parametrized_edb.png -------------------------------------------------------------------------------- /doc/source/resources/pyansys-logo-black-cropped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/pyansys-logo-black-cropped.png -------------------------------------------------------------------------------- /doc/source/resources/siwave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/siwave.png -------------------------------------------------------------------------------- /doc/source/resources/stackup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/stackup.png -------------------------------------------------------------------------------- /doc/source/resources/starting_load_edb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/starting_load_edb.png -------------------------------------------------------------------------------- /doc/source/resources/template_ribbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/template_ribbon.png -------------------------------------------------------------------------------- /doc/source/resources/toolkits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/toolkits.png -------------------------------------------------------------------------------- /doc/source/resources/toolkits_ribbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/toolkits_ribbon.png -------------------------------------------------------------------------------- /doc/source/resources/viawizard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/source/resources/viawizard.png -------------------------------------------------------------------------------- /doc/source/user_guide/build_simulation_project/build_signal_integrity_project.rst: -------------------------------------------------------------------------------- 1 | .. _build_si_project_example: 2 | 3 | Build a signal integrity project 4 | ================================ 5 | 6 | This page shows how to build an signal integrity project. 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | 14 | from pyedb import Edb 15 | from pyedb.generic.general_methods import generate_unique_folder_name 16 | import pyedb.misc.downloads as downloads 17 | 18 | # Ansys release version 19 | ansys_version = "2024.2" 20 | 21 | # download and copy the layout file from examples 22 | temp_folder = generate_unique_folder_name() 23 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 24 | 25 | # load EDB 26 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 27 | 28 | sim_setup = edbapp.new_simulation_configuration() 29 | sim_setup.signal_nets = [ 30 | "DDR4_A0", 31 | "DDR4_A1", 32 | "DDR4_A2", 33 | "DDR4_A3", 34 | "DDR4_A4", 35 | "DDR4_A5", 36 | ] 37 | sim_setup.power_nets = ["GND"] 38 | sim_setup.do_cutout_subdesign = True 39 | sim_setup.components = ["U1", "U15"] 40 | sim_setup.use_default_coax_port_radial_extension = False 41 | sim_setup.cutout_subdesign_expansion = 0.001 42 | sim_setup.start_freq = 0 43 | sim_setup.stop_freq = 20e9 44 | sim_setup.step_freq = 10e6 45 | edbapp.build_simulation_project(sim_setup) 46 | edbapp.close() 47 | 48 | .. image:: ../../resources/build_signal_integrity_user_guide.png 49 | :width: 800 50 | :alt: Built signal integrity project 51 | -------------------------------------------------------------------------------- /doc/source/user_guide/build_simulation_project/cutout.rst: -------------------------------------------------------------------------------- 1 | .. _cutout_example: 2 | 3 | Clip a design 4 | ============= 5 | Most of the time, only a specific part of a layout needs to be simulated. Thus, you want to 6 | clip the design to reduce computer resources and speed up the simulation. 7 | 8 | This page shows how to clip a design based on net selection. 9 | 10 | .. autosummary:: 11 | :toctree: _autosummary 12 | 13 | .. code:: python 14 | 15 | from pyedb import Edb 16 | from pyedb.generic.general_methods import generate_unique_folder_name 17 | import pyedb.misc.downloads as downloads 18 | 19 | 20 | # Ansys release version 21 | ansys_version = "2024.2" 22 | 23 | # download and copy the layout file from examples 24 | temp_folder = generate_unique_folder_name() 25 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 26 | 27 | # load EDB 28 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 29 | 30 | # select signal nets to evaluate the extent for clipping the layout 31 | signal_nets = [ 32 | "DDR4_DQ0", 33 | "DDR4_DQ1", 34 | "DDR4_DQ2", 35 | "DDR4_DQ3", 36 | "DDR4_DQ4", 37 | "DDR4_DQ5", 38 | "DDR4_DQ6", 39 | "DDR4_DQ7", 40 | ] 41 | # At least one reference net must be included. Reference nets are included in the design but clipped. 42 | reference_nets = ["GND"] 43 | # Define the expansion factor, which gives the distance for evaluating the cutout extent. This code defines a cutout. 44 | expansion = 0.01 # 1cm in this case 45 | # process cutout 46 | edbapp.cutout( 47 | signal_list=signal_nets, reference_list=reference_nets, expansion_size=expansion 48 | ) 49 | # save and close project 50 | edbapp.save_edb() 51 | edbapp.close_edb() 52 | 53 | .. image:: ../../resources/clipped_layout.png 54 | :width: 800 55 | :alt: Clipped design -------------------------------------------------------------------------------- /doc/source/user_guide/build_simulation_project/index.rst: -------------------------------------------------------------------------------- 1 | ========================= 2 | Build simulation projects 3 | ========================= 4 | 5 | .. grid:: 2 6 | 7 | .. grid-item-card:: Clip a design 8 | :link: cutout 9 | :link-type: doc 10 | 11 | Learn how to clip a design based on net selection to reduce computer resources and speed up the simulation. 12 | 13 | 14 | .. grid-item-card:: Build a signal integrity project 15 | :link: build_signal_integrity_project 16 | :link-type: doc 17 | :margin: 2 2 0 0 18 | 19 | Learn build an signal integrity project. 20 | 21 | .. toctree:: 22 | :hidden: 23 | :maxdepth: 2 24 | 25 | cutout 26 | build_signal_integrity_project 27 | -------------------------------------------------------------------------------- /doc/source/user_guide/components/create_resistor_on_pin.rst: -------------------------------------------------------------------------------- 1 | .. _create_resistor_on_pin_example: 2 | 3 | Create a resistor boundary on pins 4 | ================================== 5 | 6 | This page shows how to create a resistor boundary on pins: 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | from pyedb import Edb 14 | from pyedb.generic.general_methods import generate_unique_folder_name 15 | import pyedb.misc.downloads as downloads 16 | 17 | temp_folder = generate_unique_folder_name() 18 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 19 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 20 | 21 | pins = edbapp.components.get_pin_from_component("U1") 22 | resistor = edbapp.siwave.create_resistor_on_pin(pins[302], pins[10], 40, "RST4000") 23 | edbapp.save_edb() 24 | edbapp.close_edb() 25 | 26 | 27 | .. image:: ../../resources/create_resistor_boundary_user_guide.png 28 | :width: 800 29 | :alt: Created resistor boundary 30 | -------------------------------------------------------------------------------- /doc/source/user_guide/components/create_rlc_boundary_on_pins.rst: -------------------------------------------------------------------------------- 1 | .. _create_rlc_boundary_on_pin_example: 2 | 3 | Create an RLC boundary on pins 4 | ============================== 5 | 6 | This page shows how to create an RLC boundary on pins. 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | from pyedb import Edb 14 | from pyedb.generic.general_methods import generate_unique_folder_name 15 | import pyedb.misc.downloads as downloads 16 | 17 | # download and open EDB project 18 | temp_folder = generate_unique_folder_name() 19 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 20 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 21 | 22 | # retrieve pins from ``U1`` component and ``1V0`` net 23 | pins = edbapp.components.get_pin_from_component("U1", "1V0") 24 | 25 | # reference pins 26 | ref_pins = edbapp.components.get_pin_from_component("U1", "GND") 27 | 28 | # create rlc boundary 29 | edbapp.hfss.create_rlc_boundary_on_pins( 30 | pins[0], ref_pins[0], rvalue=1.05, lvalue=1.05e-12, cvalue=1.78e-13 31 | ) 32 | 33 | # close EDB 34 | edbapp.save_edb() 35 | edbapp.close_edb() 36 | 37 | 38 | .. image:: ../../resources/create_rlc_boundary_on_pin.png 39 | :width: 800 40 | :alt: RLC boundary created on pins -------------------------------------------------------------------------------- /doc/source/user_guide/components/create_rlc_component.rst: -------------------------------------------------------------------------------- 1 | .. _create_rlc_component_example: 2 | 3 | Create an RLC component between pins 4 | ==================================== 5 | 6 | This page shows how to create an RLC component between pins: 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | 14 | 15 | from pyedb import Edb 16 | from pyedb.generic.general_methods import generate_unique_folder_name 17 | import pyedb.misc.downloads as downloads 18 | 19 | # download and open EDB project 20 | temp_folder = generate_unique_folder_name() 21 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 22 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 23 | 24 | # retrieving pins from component U1 and net 1V0 25 | pins = edbapp.components.get_pin_from_component("U1", "1V0") 26 | 27 | # retrieving reference pins from component U1 and net GND 28 | ref_pins = edbapp.components.get_pin_from_component("U1", "GND") 29 | 30 | # create RLC network between 2 pins 31 | edbapp.components.create( 32 | [pins[0], ref_pins[0]], "test_0rlc", r_value=1.67, l_value=1e-13, c_value=1e-11 33 | ) 34 | edbapp.save_edb() 35 | edbapp.close_edb() 36 | 37 | 38 | .. image:: ../../resources/create_rlc_boundary_on_pin.png 39 | :width: 800 40 | :alt: Create RLC boundary -------------------------------------------------------------------------------- /doc/source/user_guide/components/index.rst: -------------------------------------------------------------------------------- 1 | ======================== 2 | Working with a component 3 | ======================== 4 | 5 | 6 | .. grid:: 2 7 | 8 | .. grid-item-card:: Create a resistor boundary on pins 9 | :link: create_resistor_on_pin 10 | :link-type: doc 11 | 12 | Learn how to create a resistor boundary on pins. 13 | 14 | .. grid-item-card:: Create an RLC component between pins 15 | :link: create_rlc_component 16 | :link-type: doc 17 | :margin: 2 2 0 0 18 | 19 | Learn how to create an RLC component between pins. 20 | 21 | .. grid-item-card:: Create an RLC boundary on pins 22 | :link: create_rlc_boundary_on_pins 23 | :link-type: doc 24 | 25 | Learn how to create an RLC boundary on pins. 26 | 27 | .. toctree:: 28 | :hidden: 29 | :maxdepth: 2 30 | 31 | create_resistor_on_pin 32 | create_rlc_component 33 | create_rlc_boundary_on_pins -------------------------------------------------------------------------------- /doc/source/user_guide/edb_information_queries/edb_queries.rst: -------------------------------------------------------------------------------- 1 | .. _edb_queries_example: 2 | 3 | Get layout statistics 4 | ===================== 5 | 6 | PyEDB allows you to query a layout for statistics. This page shows how to perform 7 | these tasks: 8 | 9 | - Load a layout. 10 | - Get statistics. 11 | - Get nets and plot them in matplotlib. 12 | - Get all components and then get pins from components connected to a given net. 13 | 14 | .. autosummary:: 15 | :toctree: _autosummary 16 | 17 | Load a layout 18 | ~~~~~~~~~~~~~ 19 | 20 | .. code:: python 21 | 22 | 23 | # import EDB and load a layout 24 | from pyedb import Edb 25 | from pyedb.generic.general_methods import generate_unique_folder_name 26 | import pyedb.misc.downloads as downloads 27 | 28 | temp_folder = generate_unique_folder_name() 29 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 30 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 31 | 32 | Get statistics 33 | ~~~~~~~~~~~~~~ 34 | 35 | .. code:: python 36 | 37 | stats = edbapp.get_statistics() 38 | 39 | .. image:: ../../resources/layout_stats.png 40 | :width: 400 41 | :alt: Layout stats 42 | 43 | Get nets and plot them in matplotlib 44 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 45 | 46 | .. code:: python 47 | 48 | # net list 49 | edbapp.nets.netlist 50 | # power nets 51 | nets.power 52 | # Plot nets in matplotlib 53 | edbapp.nets.plot(None) 54 | 55 | .. image:: ../../resources/layout_plot_all_nets.png 56 | :width: 800 57 | :alt: Plot all nets in matplotlib 58 | 59 | Get all components and then pins from components connected to a net 60 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 61 | 62 | .. code:: python 63 | 64 | # Get all components 65 | nets = edbapp.components.instances 66 | # Get pins from components connected to a given net 67 | u9_gnd_pins = [ 68 | pin for pin in list(edbapp.components["U9"].pins.values()) if pin.net_name == "GND" 69 | ] 70 | -------------------------------------------------------------------------------- /doc/source/user_guide/edb_information_queries/get_layout_bounding_box.rst: -------------------------------------------------------------------------------- 1 | .. _edb_queries_layout_bbox_example: 2 | 3 | Get layout size 4 | =============== 5 | 6 | This tutorial shows how to retrieve the layout size by getting the bounding box. 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | from pyedb import Edb 14 | from pyedb.generic.general_methods import generate_unique_folder_name 15 | import pyedb.misc.downloads as downloads 16 | 17 | temp_folder = generate_unique_folder_name() 18 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 19 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 20 | 21 | edbapp.get_bounding_box() 22 | 23 | .. image:: ../../resources/layout_bbox.png 24 | :width: 800 25 | :alt: Layout bounding box 26 | -------------------------------------------------------------------------------- /doc/source/user_guide/edb_information_queries/index.rst: -------------------------------------------------------------------------------- 1 | ================== 2 | Run layout queries 3 | ================== 4 | 5 | .. grid:: 2 6 | 7 | .. grid-item-card:: Get layout statistics 8 | :link: edb_queries 9 | :link-type: doc 10 | 11 | Learn how to run a query for getting layout statistics. 12 | 13 | .. grid-item-card:: Get layout size 14 | :link: get_layout_bounding_box 15 | :link-type: doc 16 | :margin: 2 2 0 0 17 | 18 | Learn how to run a query for getting the layout size. 19 | 20 | .. toctree:: 21 | :hidden: 22 | :maxdepth: 2 23 | 24 | edb_queries 25 | get_layout_bounding_box 26 | -------------------------------------------------------------------------------- /doc/source/user_guide/excitations/create_circuit_ports_on_component.rst: -------------------------------------------------------------------------------- 1 | .. _create_circuit_port_on_component_example: 2 | 3 | Create a circuit port 4 | ===================== 5 | 6 | This page shows how to retrieve pins and create a circuit port on a component. 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | 14 | 15 | from pyedb import Edb 16 | from pyedb.generic.general_methods import generate_unique_folder_name 17 | import pyedb.misc.downloads as downloads 18 | 19 | temp_folder = generate_unique_folder_name() 20 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 21 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 22 | 23 | edbapp.siwave.create_circuit_port_on_net("U1", "1V0", "U1", "GND", 50, "test") 24 | edbapp.components.get_pin_from_component("U1") 25 | 26 | # create pin groups 27 | edbapp.siwave.create_pin_group_on_net("U1", "1V0", "PG_V1P0_S0") 28 | # create port on pin group 29 | edbapp.siwave.create_circuit_port_on_pin_group( 30 | "PG_V1P0_S0", "PinGroup_2", impedance=50, name="test_port" 31 | ) 32 | # rename port with property setter 33 | edbapp.excitations["test_port"].name = "test_rename" 34 | # retrieve port 35 | created_port = (port for port in list(edbapp.excitations) if port == "test_rename") 36 | edbapp.save_edb() 37 | edbapp.close_edb() 38 | 39 | 40 | .. image:: ../../resources/create_circuit_ports_on_component.png 41 | :width: 800 42 | :alt: Circuit port created on a component -------------------------------------------------------------------------------- /doc/source/user_guide/excitations/create_coax_port_on_component.rst: -------------------------------------------------------------------------------- 1 | .. _create_coaxial_port_on_component_example: 2 | 3 | Create a coaxial port 4 | ===================== 5 | 6 | This page shows how to create an HFSS coaxial port on a component. 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | 14 | from pyedb import Edb 15 | from pyedb.generic.general_methods import generate_unique_folder_name 16 | import pyedb.misc.downloads as downloads 17 | 18 | # Ansys release version 19 | ansys_version = "2024.2" 20 | 21 | # download and copy the layout file from examples 22 | temp_folder = generate_unique_folder_name() 23 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 24 | 25 | # load EDB 26 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 27 | 28 | edbapp.hfss.create_coax_port_on_component("U1", ["DDR4_DQS0_P", "DDR4_DQS0_N"]) 29 | edbapp.save_edb() 30 | edbapp.close_edb() 31 | 32 | The preceding code creates a coaxial port on nets ``DDR4_DSQ0_P`` and ``DDR4_DSQ0_N`` from component ``U1``: 33 | 34 | .. image:: ../../resources/create_port_on_component_simple.png 35 | :width: 800 36 | :alt: HFSS coaxial port created on a component -------------------------------------------------------------------------------- /doc/source/user_guide/excitations/create_port_between_pin_and_layer.rst: -------------------------------------------------------------------------------- 1 | .. _create_port_between_pin_and_layer_example: 2 | 3 | Create port between a pin and layer 4 | =================================== 5 | 6 | This page shows how to create a port between a pin and a layer. 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | from pyedb import Edb 14 | from pyedb.generic.general_methods import generate_unique_folder_name 15 | import pyedb.misc.downloads as downloads 16 | 17 | # Ansys release version 18 | ansys_version = "2024.2" 19 | 20 | # download and copy the layout file from examples 21 | temp_folder = generate_unique_folder_name() 22 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 23 | 24 | # load EDB 25 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 26 | 27 | edbapp.siwave.create_port_between_pin_and_layer( 28 | component_name="U1", pins_name="A27", layer_name="16_Bottom", reference_net="GND" 29 | ) 30 | U7 = edbapp.components["U7"] 31 | _, pin_group = edbapp.siwave.create_pin_group_on_net( 32 | reference_designator="U7", net_name="GND", group_name="U7_GND" 33 | ) 34 | U7.pins["F7"].create_port(reference=pin_group) 35 | edbapp.save_edb() 36 | edbapp.close_edb() 37 | 38 | .. image:: ../../resources/create_port_between_pin_and_layer.png 39 | :width: 800 40 | :alt: Port created between a pin and layer 41 | -------------------------------------------------------------------------------- /doc/source/user_guide/excitations/index.rst: -------------------------------------------------------------------------------- 1 | ============== 2 | Create sources 3 | ============== 4 | 5 | .. grid:: 2 6 | 7 | .. grid-item-card:: Create a circuit port 8 | :link: create_circuit_ports_on_component 9 | :link-type: doc 10 | 11 | Learn how to retrieve pins and create a circuit port on a component. 12 | 13 | .. grid-item-card:: Create a coaxial port 14 | :link: create_coax_port_on_component 15 | :link-type: doc 16 | :margin: 2 2 0 0 17 | 18 | Learn how to create an HFSS coaxial port on a component. 19 | 20 | .. grid-item-card:: Create current and voltage sources 21 | :link: create_current_source 22 | :link-type: doc 23 | 24 | Learn how to create current and voltage sources on a component. 25 | 26 | .. grid-item-card:: Create an edge port 27 | :link: create_edge_port_on_polygon 28 | :link-type: doc 29 | :margin: 2 2 0 0 30 | 31 | Learn how to create an edge port on a polygon and trace. 32 | 33 | .. grid-item-card:: Create a port between a pin and layer 34 | :link: create_port_between_pin_and_layer 35 | :link-type: doc 36 | :margin: 2 2 0 0 37 | 38 | Learn how to create a port between a pin and a layer. 39 | 40 | .. toctree:: 41 | :hidden: 42 | :maxdepth: 2 43 | 44 | create_circuit_ports_on_component 45 | create_coax_port_on_component 46 | create_current_source 47 | create_edge_port_on_polygon 48 | create_port_between_pin_and_layer 49 | -------------------------------------------------------------------------------- /doc/source/user_guide/layer_stackup/define_layer_stackup.rst: -------------------------------------------------------------------------------- 1 | .. _define_layer_stackup_example: 2 | 3 | Add a layer in a layout stackup 4 | =============================== 5 | 6 | This page shows how to add a layer in the current layer stackup. 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | from pyedb import Edb 14 | 15 | edb = Edb(edbversion=desktop_version) 16 | edb.stackup.add_layer(layer_name="gnd", fillMaterial="AIR", thickness="10um") 17 | edb.stackup.add_layer( 18 | layer_name="diel1", fillMaterial="AIR", thickness="200um", base_layer="gnd" 19 | ) 20 | edb.stackup.add_layer( 21 | layer_name="sig1", fillMaterial="AIR", thickness="10um", base_layer="diel1" 22 | ) 23 | edb.stackup.add_layer( 24 | layer_name="diel2", fillMaterial="AIR", thickness="200um", base_layer="sig1" 25 | ) 26 | edb.stackup.add_layer( 27 | layer_name="sig3", fillMaterial="AIR", thickness="10um", base_layer="diel2" 28 | ) 29 | edb.close() 30 | 31 | .. image:: ../../resources/define_layer_stackup.png 32 | :width: 800 33 | :alt: Layer added to the layer stackup 34 | -------------------------------------------------------------------------------- /doc/source/user_guide/layer_stackup/index.rst: -------------------------------------------------------------------------------- 1 | ========================= 2 | Work with a layer stackup 3 | ========================= 4 | 5 | 6 | .. grid:: 2 7 | 8 | .. grid-item-card:: Edit a layer in a layer stackup 9 | :link: layer_stackup 10 | :link-type: doc 11 | 12 | Learn how to edit a layer in the current layer stackup. 13 | 14 | .. grid-item-card:: Add a layer in a layout stackup 15 | :link: define_layer_stackup 16 | :link-type: doc 17 | :margin: 2 2 0 0 18 | 19 | Learn how to add a layer in the current layout stackup. 20 | 21 | 22 | .. toctree:: 23 | :hidden: 24 | :maxdepth: 2 25 | 26 | 27 | layer_stackup 28 | define_layer_stackup -------------------------------------------------------------------------------- /doc/source/user_guide/load_export_edb/index.rst: -------------------------------------------------------------------------------- 1 | =================== 2 | Load a layout file 3 | =================== 4 | 5 | .. grid:: 2 6 | 7 | .. grid-item-card:: Load a layout file 8 | :link: loading_layout 9 | :link-type: doc 10 | 11 | Learn how to load an AEDB layout file in EDB. 12 | 13 | 14 | 15 | .. toctree:: 16 | :hidden: 17 | :maxdepth: 2 18 | 19 | loading_layout -------------------------------------------------------------------------------- /doc/source/user_guide/load_export_edb/loading_layout.rst: -------------------------------------------------------------------------------- 1 | .. _load_edb_example: 2 | 3 | Load a layout 4 | ============= 5 | 6 | Although you can use PyEDB to build an entire layout from scratch, most of the time you 7 | load an layout in an existing AEDB file. This page shows how to load a layout in EDB and 8 | start manipulating objects. 9 | 10 | .. autosummary:: 11 | :toctree: _autosummary 12 | 13 | .. code:: python 14 | 15 | 16 | from pyedb import Edb 17 | from pyedb.generic.general_methods import generate_unique_folder_name 18 | import pyedb.misc.downloads as downloads 19 | 20 | temp_folder = generate_unique_folder_name() 21 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 22 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 23 | 24 | .. image:: ../../resources/starting_load_edb.png 25 | :width: 600 26 | :alt: Load layout in EDB 27 | 28 | -------------------------------------------------------------------------------- /doc/source/user_guide/padstacks/index.rst: -------------------------------------------------------------------------------- 1 | ==================== 2 | Work with a padstack 3 | ==================== 4 | 5 | 6 | .. grid:: 2 7 | 8 | .. grid-item-card:: Edit a padstack definition 9 | :link: set_all_antipads_value 10 | :link-type: doc 11 | 12 | Learn how to edit a padstack definition, setting all anti-pad values to a fixed value. 13 | 14 | .. grid-item-card:: Create a padstack instance 15 | :link: create_padsatck_instance 16 | :link-type: doc 17 | :margin: 2 2 0 0 18 | 19 | Learn how to create a padstack instance. 20 | 21 | .. toctree:: 22 | :hidden: 23 | :maxdepth: 2 24 | 25 | set_all_antipads_value 26 | create_padsatck_instance -------------------------------------------------------------------------------- /doc/source/user_guide/padstacks/set_all_antipads_value.rst: -------------------------------------------------------------------------------- 1 | .. _set_all_antipads_value_example: 2 | 3 | Edit a padstack definition 4 | ========================== 5 | 6 | This page shows how to edit a padstack definition, setting all anti-pad values to a fixed value. 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | from pyedb import Edb 14 | from pyedb.generic.general_methods import generate_unique_folder_name 15 | import pyedb.misc.downloads as downloads 16 | 17 | # Ansys release version 18 | ansys_version = "2024.2" 19 | 20 | # download and copy the layout file from examples 21 | temp_folder = generate_unique_folder_name() 22 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 23 | 24 | # load EDB 25 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 26 | 27 | # sets all anti-pads value to zero 28 | edbapp.padstacks.set_all_antipad_value(0.0) 29 | edbapp.close() -------------------------------------------------------------------------------- /doc/source/user_guide/simulation_setup/add_siwave_analysis.rst: -------------------------------------------------------------------------------- 1 | .. _add_siwave_setup_example: 2 | 3 | Set up a SIwave analysis 4 | ======================== 5 | 6 | This page shows how to create and set up a SIwave SYZ analysis. 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | from pyedb import Edb 14 | from pyedb.generic.general_methods import generate_unique_folder_name 15 | import pyedb.misc.downloads as downloads 16 | 17 | temp_folder = generate_unique_folder_name() 18 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 19 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 20 | 21 | # Add SIwave SYZ analysis 22 | edbapp.siwave.add_siwave_syz_analysis( 23 | start_freq="=GHz", stop_freq="10GHz", step_freq="10MHz" 24 | ) 25 | 26 | # Add DC analysis 27 | edbapp.siwave.add_siwave_dc_analysis(name="Test_dc") 28 | edbapp.save() 29 | edbapp.close() 30 | 31 | 32 | .. image:: ../../resources/add_siwave_setup.png 33 | :width: 400 34 | :alt: Add SIwave setup 35 | -------------------------------------------------------------------------------- /doc/source/user_guide/simulation_setup/index.rst: -------------------------------------------------------------------------------- 1 | ================== 2 | Set up simulations 3 | ================== 4 | 5 | .. grid:: 2 6 | 7 | .. grid-item-card:: Set up a SIwave analysis 8 | :link: add_siwave_analysis 9 | :link-type: doc 10 | 11 | Learn how to create and set up a SIwave SWZ analysis. 12 | 13 | 14 | .. grid-item-card:: Set up an HFSS simulation 15 | :link: define_hfss_simulation_setup 16 | :link-type: doc 17 | :margin: 2 2 0 0 18 | 19 | Learn how to create and set up an HFSS simulation. 20 | 21 | .. grid-item-card:: Define an HFSS extent 22 | :link: define_hfss_extent 23 | :link-type: doc 24 | :margin: 2 2 0 0 25 | 26 | Learn how to define an HFSS extent. 27 | 28 | .. toctree:: 29 | :hidden: 30 | :maxdepth: 2 31 | 32 | add_siwave_analysis 33 | define_hfss_simulation_setup 34 | define_hfss_extent -------------------------------------------------------------------------------- /doc/source/user_guide/use_design_variables.rst: -------------------------------------------------------------------------------- 1 | .. _use_design_variables_example: 2 | 3 | Define design variables 4 | ======================= 5 | 6 | This page shows how to define design variables for use by EDB. 7 | 8 | .. autosummary:: 9 | :toctree: _autosummary 10 | 11 | .. code:: python 12 | 13 | from pyedb import Edb 14 | from pyedb.generic.general_methods import generate_unique_folder_name 15 | import pyedb.misc.downloads as downloads 16 | 17 | temp_folder = generate_unique_folder_name() 18 | targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder) 19 | edbapp = Edb(edbpath=targetfile, edbversion="2024.2") 20 | 21 | # adding design variable 22 | edbapp.add_design_variable("my_variable", "1mm") 23 | 24 | # parametrize trace width 25 | edbapp.modeler.parametrize_trace_width("A0_N") 26 | edbapp.modeler.parametrize_trace_width("A0_N_R") 27 | 28 | # adding project variable 29 | edbapp.add_project_variable("$my_project_variable", "3mm") 30 | 31 | -------------------------------------------------------------------------------- /doc/styles/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !config 3 | !config/vocabularies 4 | !config/vocabularies/ANSYS 5 | !config/vocabularies/ANSYS/** 6 | !.gitignore -------------------------------------------------------------------------------- /doc/styles/config/vocabularies/ANSYS/accept.txt: -------------------------------------------------------------------------------- 1 | .NET 2 | _static 3 | AC 4 | AEDB 5 | AEDT 6 | airbox 7 | (?i)Ansys 8 | API 9 | [Cc]ircuit 10 | codecov 11 | [Cc]om 12 | [Cc]omponents 13 | Conda 14 | CPython 15 | DC 16 | docstring 17 | [Dd]ocstrings 18 | EDB 19 | EDT 20 | GDS 21 | [Gg]gRPC 22 | HFSS 23 | Icepak 24 | IO 25 | IR 26 | IronPython 27 | libssl 28 | [Ll]ayout 29 | matplotlib 30 | Maxwell(?:\s(?:2D|3D|Circuit))? 31 | netlist 32 | openssl 33 | padstack(?:s)? 34 | postprocessing 35 | (?i)Pyedb 36 | (?i)Pyaedt 37 | (?i)PyAnsys 38 | [Pp]y[Pp][Ii] 39 | Python 40 | Python.NET 41 | Q3D 42 | RaptorX 43 | RLC 44 | SimulationConfiguration 45 | S[Ii]wave 46 | SYZ 47 | (?i)stackup(?:\s3D|s)? 48 | vias 49 | XML -------------------------------------------------------------------------------- /doc/styles/config/vocabularies/ANSYS/reject.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/doc/styles/config/vocabularies/ANSYS/reject.txt -------------------------------------------------------------------------------- /ignore_words.txt: -------------------------------------------------------------------------------- 1 | REnabled 2 | renabled 3 | delet 4 | appen 5 | parm 6 | pres 7 | WAN 8 | filname 9 | ans 10 | tread 11 | wan 12 | levl 13 | mater 14 | aadd 15 | extrem 16 | imagin 17 | ist 18 | nin 19 | sord 20 | struc 21 | emiss 22 | vise 23 | datas 24 | fo 25 | te 26 | sie 27 | mot 28 | nam 29 | ue 30 | ro 31 | aline 32 | COM 33 | gRPC 34 | Toolkits 35 | -------------------------------------------------------------------------------- /src/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/__init__.py -------------------------------------------------------------------------------- /src/pyedb/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | import sys 4 | import warnings 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 | LATEST_DEPRECATED_PYTHON_VERSION = (3, 7) 14 | 15 | 16 | def deprecation_warning(): 17 | """Warning message informing users that some Python versions are deprecated in PyEDB.""" 18 | # Store warnings showwarning 19 | existing_showwarning = warnings.showwarning 20 | 21 | # Define and use custom showwarning 22 | def custom_show_warning(message, category, filename, lineno, file=None, line=None): 23 | """Custom warning used to remove :loc: pattern.""" 24 | print(f"{category.__name__}: {message}") 25 | 26 | warnings.showwarning = custom_show_warning 27 | 28 | current_version = sys.version_info[:2] 29 | if current_version <= LATEST_DEPRECATED_PYTHON_VERSION: 30 | str_current_version = "{}.{}".format(*sys.version_info[:2]) 31 | warnings.warn( 32 | "Current python version ({}) is deprecated in PyEDB. We encourage you " 33 | "to upgrade to the latest version to benefit from the latest features " 34 | "and security updates.".format(str_current_version), 35 | PendingDeprecationWarning, 36 | ) 37 | 38 | # Restore warnings showwarning 39 | warnings.showwarning = existing_showwarning 40 | 41 | 42 | deprecation_warning() 43 | 44 | # 45 | 46 | pyedb_path = os.path.dirname(__file__) 47 | __version__ = "0.50.dev0" 48 | version = __version__ 49 | 50 | # 51 | 52 | from pyedb.generic.design_types import Edb, Siwave 53 | -------------------------------------------------------------------------------- /src/pyedb/common/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/common/__init__.py -------------------------------------------------------------------------------- /src/pyedb/configuration/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/configuration/__init__.py -------------------------------------------------------------------------------- /src/pyedb/dotnet/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/dotnet/__init__.py -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import # noreorder 2 | -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/cell/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/dotnet/database/cell/__init__.py -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/cell/hierarchy/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/dotnet/database/cell/hierarchy/__init__.py -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/cell/hierarchy/netlist_model.py: -------------------------------------------------------------------------------- 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 NetlistModel(object): # pragma: no cover 25 | def __init__(self, edb_model): 26 | self._edb_model = edb_model 27 | 28 | @property 29 | def netlist(self): 30 | return self._edb_model.GetNetlist() 31 | -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/cell/hierarchy/s_parameter_model.py: -------------------------------------------------------------------------------- 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 SparamModel(object): # pragma: no cover 25 | def __init__(self, edb_model): 26 | self._edb_model = edb_model 27 | 28 | @property 29 | def name(self): 30 | return self._edb_model.GetComponentModelName() 31 | 32 | @property 33 | def reference_net(self): 34 | return self._edb_model.GetReferenceNet() 35 | 36 | @property 37 | def is_null(self): 38 | """Adding this property to be compatible with grpc.""" 39 | if self.name: 40 | return False 41 | return True 42 | -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/cell/hierarchy/spice_model.py: -------------------------------------------------------------------------------- 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 SpiceModel(object): # pragma: no cover 25 | def __init__(self, edb_model): 26 | self._edb_model = edb_model 27 | 28 | @property 29 | def file_path(self): 30 | return self._edb_model.GetSPICEFilePath() 31 | 32 | @property 33 | def name(self): 34 | return self._edb_model.GetSPICEName() 35 | -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/cell/primitive/__init__.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | workdir = Path(__file__).parent 4 | -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/cell/terminal/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/dotnet/database/cell/terminal/__init__.py -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/definition/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/dotnet/database/definition/__init__.py -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/definition/definition_obj.py: -------------------------------------------------------------------------------- 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.dotnet.database.utilities.obj_base import ObjBase 24 | 25 | 26 | class DefinitionObj(ObjBase): 27 | """Base class for definition objects.""" 28 | 29 | def __init__(self, pedb, edb_object): 30 | super().__init__(pedb, edb_object) 31 | 32 | @property 33 | def definition_obj_type(self): 34 | return self._edb_object.GetDefinitionObjType() 35 | 36 | @property 37 | def name(self): 38 | return self._edb_object.GetName() 39 | -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/dotnet/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/dotnet/database/dotnet/__init__.py -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/edb_data/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/dotnet/database/edb_data/__init__.py -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/geometry/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/dotnet/database/geometry/__init__.py -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/layout_obj_instance.py: -------------------------------------------------------------------------------- 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.dotnet.database.utilities.obj_base import ObjBase 24 | 25 | 26 | class LayoutObjInstance(ObjBase): 27 | """Manages EDB functionalities for the layout object instance.""" 28 | 29 | def __init__(self, pedb, edb_object): 30 | super().__init__(pedb, edb_object) 31 | -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/sim_setup_data/__init__.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | workdir = Path(__file__).parent 4 | -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/sim_setup_data/data/__init__.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | workdir = Path(__file__).parent 4 | -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/sim_setup_data/io/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/dotnet/database/sim_setup_data/io/__init__.py -------------------------------------------------------------------------------- /src/pyedb/dotnet/database/utilities/__init__.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | workdir = Path(__file__).parent 4 | -------------------------------------------------------------------------------- /src/pyedb/exceptions.py: -------------------------------------------------------------------------------- 1 | """ 2 | """ 3 | 4 | 5 | class MaterialModelException(Exception): 6 | """Exception triggered when handling material model.""" 7 | -------------------------------------------------------------------------------- /src/pyedb/extensions/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/extensions/__init__.py -------------------------------------------------------------------------------- /src/pyedb/generic/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/generic/__init__.py -------------------------------------------------------------------------------- /src/pyedb/grpc/database/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import # noreorder 2 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/definition/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/grpc/database/definition/__init__.py -------------------------------------------------------------------------------- /src/pyedb/grpc/database/definition/component_model.py: -------------------------------------------------------------------------------- 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 ansys.edb.core.definition.component_model import ( 24 | ComponentModel as GrpcComponentModel, 25 | ) 26 | 27 | 28 | class ComponentModel(GrpcComponentModel): 29 | """Class managing :class:`ComponentModel `.""" 30 | 31 | def __init__(self): 32 | super().__init__(self.msg) 33 | 34 | 35 | class NPortComponentModel(GrpcComponentModel): 36 | """Class managing :class:`NPortComponentModel `""" 37 | 38 | def __init__(self): 39 | super().__init__(self.msg) 40 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/definition/component_pin.py: -------------------------------------------------------------------------------- 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 | from ansys.edb.core.definition.component_pin import ComponentPin as GrpcComponentPin 25 | 26 | 27 | class ComponentPin(GrpcComponentPin): 28 | """Class managing :class:`ComponentPin `.""" 29 | 30 | def __init__(self, pedb, edb_object): 31 | super().__init__(edb_object.msg) 32 | self._pedb = pedb 33 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/definition/n_port_component_model.py: -------------------------------------------------------------------------------- 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 | from ansys.edb.core.definition.component_model import ( 25 | NPortComponentModel as GrpcNPortComponentModel, 26 | ) 27 | 28 | 29 | class NPortComponentModel(GrpcNPortComponentModel): 30 | """Class managing :class:`NPortComponentModel `""" 31 | 32 | def __init__(self, pedb, edb_object): 33 | super().__init__(edb_object) 34 | self._pedb = pedb 35 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/general.py: -------------------------------------------------------------------------------- 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 | This module contains EDB general methods and related methods. 25 | 26 | """ 27 | 28 | from __future__ import absolute_import # noreorder 29 | 30 | import logging 31 | import re 32 | 33 | logger = logging.getLogger(__name__) 34 | 35 | 36 | def pascal_to_snake(s): 37 | # Convert PascalCase to snake_case 38 | return re.sub(r"(?`""" 28 | 29 | def __init__(self, edb_object=None): 30 | super().__init__(edb_object) 31 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/hierarchy/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/grpc/database/hierarchy/__init__.py -------------------------------------------------------------------------------- /src/pyedb/grpc/database/hierarchy/model.py: -------------------------------------------------------------------------------- 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 ansys.edb.core.hierarchy.model import Model as GrpcModel 24 | 25 | 26 | class Model(GrpcModel): 27 | """Manages model :class:`Model `.""" 28 | 29 | def __init__(self, pedb): 30 | super().__init__(self.msg) 31 | self._pedb = pedb 32 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/hierarchy/netlist_model.py: -------------------------------------------------------------------------------- 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 ansys.edb.core.hierarchy.netlist_model import NetlistModel as GrpcNetlistModel 24 | 25 | 26 | class NetlistModel(GrpcNetlistModel): 27 | """Manage :class:`NetlistModel `.""" 28 | 29 | def __init__(self): 30 | super().__init__(self.msg) 31 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/hierarchy/s_parameter_model.py: -------------------------------------------------------------------------------- 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 ansys.edb.core.hierarchy.sparameter_model import ( 24 | SParameterModel as GrpcSParameterModel, 25 | ) 26 | 27 | 28 | class SparamModel(GrpcSParameterModel): # pragma: no cover 29 | """Manage :class:`SParameterModel `""" 30 | 31 | def __init__(self, edb_object): 32 | super().__init__(self.msg) 33 | self._edb_model = edb_object 34 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/layers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/grpc/database/layers/__init__.py -------------------------------------------------------------------------------- /src/pyedb/grpc/database/layout/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/grpc/database/layout/__init__.py -------------------------------------------------------------------------------- /src/pyedb/grpc/database/layout/cell.py: -------------------------------------------------------------------------------- 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 ansys.edb.core.layout.cell import Cell as GrpcCell 24 | 25 | 26 | class Cell(GrpcCell): 27 | """Manage :class:`Cell `""" 28 | 29 | def __init__(self, pedb, edb_object): 30 | super().__init__(edb_object) 31 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/net/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/grpc/database/net/__init__.py -------------------------------------------------------------------------------- /src/pyedb/grpc/database/ports/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/grpc/database/ports/__init__.py -------------------------------------------------------------------------------- /src/pyedb/grpc/database/primitive/__init__.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | workdir = Path(__file__).parent 4 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/simulation_setup/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/grpc/database/simulation_setup/__init__.py -------------------------------------------------------------------------------- /src/pyedb/grpc/database/simulation_setup/adaptive_frequency.py: -------------------------------------------------------------------------------- 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 | from ansys.edb.core.simulation_setup.adaptive_solutions import ( 25 | AdaptiveFrequency as GrpcAdaptiveFrequency, 26 | ) 27 | 28 | 29 | class AdaptiveFrequency(GrpcAdaptiveFrequency): 30 | """EDB-core Adaptive Frequency class.""" 31 | 32 | def __init__(self, adaptive_frequency): 33 | super().__init__(adaptive_frequency) 34 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py: -------------------------------------------------------------------------------- 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 ansys.edb.core.simulation_setup.hfss_simulation_settings import ( 24 | HFSSAdvancedMeshingSettings as GrpcHFSSAdvancedMeshingSettings, 25 | ) 26 | 27 | 28 | class HFSSAdvancedMeshingSettings(GrpcHFSSAdvancedMeshingSettings): 29 | def __init__(self, pedb, edb_object): 30 | """EDB-core HFSS advanced meshing settings class.""" 31 | super().__init__(edb_object) 32 | self._pedb = pedb 33 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py: -------------------------------------------------------------------------------- 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 | from ansys.edb.core.simulation_setup.hfss_simulation_settings import ( 25 | HFSSDCRSettings as GrpcHFSSDCRSettings, 26 | ) 27 | 28 | 29 | class HFSSDCRSettings(GrpcHFSSDCRSettings): 30 | """PyEDB-core HFSS DC settings class.""" 31 | 32 | def __init__(self, pedb, edb_object): 33 | super().__init__(edb_object) 34 | self._edb_object = edb_object 35 | self._pedb = pedb 36 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/simulation_setup/hfss_solver_settings.py: -------------------------------------------------------------------------------- 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 | from ansys.edb.core.simulation_setup.hfss_simulation_settings import ( 25 | HFSSSolverSettings as GrpcHFSSSolverSettings, 26 | ) 27 | 28 | 29 | class HFSSSolverSettings(GrpcHFSSSolverSettings): 30 | """HFSS solver settings class.""" 31 | 32 | def __init__(self, pedb, edb_object): 33 | super().__init__(edb_object) 34 | self._pedb = pedb 35 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/simulation_setup/mesh_operation.py: -------------------------------------------------------------------------------- 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 | # FITNE SS 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 | from ansys.edb.core.simulation_setup.mesh_operation import ( 25 | MeshOperation as GrpcMeshOperation, 26 | ) 27 | 28 | 29 | class MeshOperation(GrpcMeshOperation): 30 | """Mesh operation class.""" 31 | 32 | def __init__(self, pedb, edb_object): 33 | super().__init__(edb_object) 34 | self._pedb = pedb 35 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py: -------------------------------------------------------------------------------- 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 | # FITNE SS 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 | from ansys.edb.core.simulation_setup.raptor_x_simulation_settings import ( 25 | RaptorXAdvancedSettings as GrpcRaptorXAdvancedSettings, 26 | ) 27 | 28 | 29 | class RaptorXAdvancedSettings(GrpcRaptorXAdvancedSettings): 30 | """Raptor X advanced settings class.""" 31 | 32 | def __init__(self, pedb, edb_object): 33 | super().__init__(edb_object) 34 | self._pedb = pedb 35 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py: -------------------------------------------------------------------------------- 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 | # FITNE SS 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 ansys.edb.core.simulation_setup.raptor_x_simulation_settings import ( 24 | RaptorXGeneralSettings as GrpcRaptorXGeneralSettings, 25 | ) 26 | 27 | 28 | class RaptorXGeneralSettings(GrpcRaptorXGeneralSettings): 29 | """Raptor X general settings class.""" 30 | 31 | def __init__(self, pedb, edb_object): 32 | super().__init__(edb_object) 33 | self._pedb = pedb 34 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py: -------------------------------------------------------------------------------- 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 | from ansys.edb.core.simulation_setup.siwave_dcir_simulation_setup import ( 25 | SIWaveDCIRSimulationSetup as Grpcsiwave_dcir_simulation_setup, 26 | ) 27 | 28 | 29 | class SIWaveDCIRSimulationSetup(Grpcsiwave_dcir_simulation_setup): 30 | """Siwave Dcir simulation setup class.""" 31 | 32 | def __init__(self, pedb, edb_object): 33 | super().__init__(edb_object.msg) 34 | self._pedb = pedb 35 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/terminal/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/grpc/database/terminal/__init__.py -------------------------------------------------------------------------------- /src/pyedb/grpc/database/utility/__init__.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | workdir = Path(__file__).parent 4 | -------------------------------------------------------------------------------- /src/pyedb/grpc/database/utility/constants.py: -------------------------------------------------------------------------------- 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 | def get_terminal_supported_boundary_types(): 25 | return ["voltage_source", "current_source", "port", "dc_terminal", "voltage_probe"] 26 | -------------------------------------------------------------------------------- /src/pyedb/ipc2581/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/ipc2581/__init__.py -------------------------------------------------------------------------------- /src/pyedb/ipc2581/bom/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/ipc2581/bom/__init__.py -------------------------------------------------------------------------------- /src/pyedb/ipc2581/bom/bom.py: -------------------------------------------------------------------------------- 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.generic.general_methods import ET 24 | 25 | 26 | class Bom(object): 27 | def __init__(self, edb): 28 | self._edb = edb 29 | self.name = self._edb.cell_names[0] 30 | self.revision = "1.0" 31 | self.step_ref = "1.0" 32 | self.bom_items = [] 33 | 34 | def write_xml(self, root): # pragma no cover 35 | bom = ET.SubElement(root, "Bom") 36 | bom.set("name", self.name) 37 | bom_header = ET.SubElement(bom, "BomHeader") 38 | bom_header.set("assembly", self.name) 39 | bom_header.set("revision", self.revision) 40 | step_ref = ET.SubElement(bom_header, "StepRef") 41 | step_ref.set("name", self.name) 42 | for bom_item in self.bom_items: 43 | bom_item.write_xml(bom) 44 | -------------------------------------------------------------------------------- /src/pyedb/ipc2581/bom/refdes.py: -------------------------------------------------------------------------------- 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.generic.general_methods import ET 24 | 25 | 26 | class RefDes(object): 27 | def __init__(self): 28 | self.name = "" 29 | self.packaged_def = "" 30 | self.populate = "True" 31 | self.placement_layer = "" 32 | 33 | def write_xml(self, bom_item): # pragma no cover 34 | refdes = ET.SubElement(bom_item, "RefDes") 35 | refdes.set("name", self.name) 36 | refdes.set("packageRef", self.packaged_def) 37 | refdes.set("populate", self.populate) 38 | refdes.set("layerRef", self.placement_layer) 39 | -------------------------------------------------------------------------------- /src/pyedb/ipc2581/content/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/ipc2581/content/__init__.py -------------------------------------------------------------------------------- /src/pyedb/ipc2581/content/entry_color.py: -------------------------------------------------------------------------------- 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.generic.general_methods import ET 24 | from pyedb.ipc2581.content.color import Color 25 | 26 | 27 | class EntryColor(object): 28 | def __init__(self): 29 | self.name = "" 30 | self.color = Color() 31 | 32 | def write_xml(self, color=None): # pragma no cover 33 | entry_color = ET.SubElement(color, "EntryColor") 34 | entry_color.set("id", self.name) 35 | self.color.write_xml(entry_color) 36 | -------------------------------------------------------------------------------- /src/pyedb/ipc2581/content/entry_line.py: -------------------------------------------------------------------------------- 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.generic.general_methods import ET 24 | 25 | 26 | class EntryLine(object): 27 | def __init__(self): 28 | self._line_end = "ROUND" 29 | self.line_width = "" 30 | 31 | def write_xml(self, dictionnary_line): # pragma no cover 32 | entry_line = ET.SubElement(dictionnary_line, "EntryLineDesc") 33 | entry_line.set("id", "{}_{}".format(self._line_end, self.line_width)) 34 | line_desc = ET.SubElement(entry_line, "LineDesc") 35 | line_desc.set("lineEnd", self._line_end) 36 | line_desc.set("lineWidth", str(self.line_width)) 37 | -------------------------------------------------------------------------------- /src/pyedb/ipc2581/content/fill.py: -------------------------------------------------------------------------------- 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.generic.general_methods import ET 24 | from pyedb.ipc2581.content.content import Content 25 | 26 | 27 | class FillDesc(Content): 28 | def __init__(self): 29 | self.id = "" 30 | self.fill_property = "" 31 | 32 | def write_xml(self, dict_fill=None): # pragma no cover 33 | if dict_fill: 34 | fill = ET.SubElement(dict_fill, "EntryFillDesc") 35 | fill.set("id", self.id) 36 | fill_desc = ET.SubElement(fill, "FillDesc") 37 | fill_desc.set("fillProperty", self.fill_property) 38 | -------------------------------------------------------------------------------- /src/pyedb/ipc2581/content/layer_ref.py: -------------------------------------------------------------------------------- 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.generic.general_methods import ET 24 | 25 | 26 | class LayerRef(object): 27 | def __init__(self): 28 | self.name = "" 29 | 30 | def write_xml(self, content=None): # pragma no cover 31 | layer_ref = ET.SubElement(content, "LayerRef") 32 | layer_ref.set("name", self.name) 33 | -------------------------------------------------------------------------------- /src/pyedb/ipc2581/ecad/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/ipc2581/ecad/__init__.py -------------------------------------------------------------------------------- /src/pyedb/ipc2581/ecad/cad_data/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/ipc2581/ecad/cad_data/__init__.py -------------------------------------------------------------------------------- /src/pyedb/ipc2581/ecad/ecad.py: -------------------------------------------------------------------------------- 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.generic.general_methods import ET 24 | from pyedb.ipc2581.ecad.cad_data.cad_data import CadData 25 | from pyedb.ipc2581.ecad.cad_header import CadHeader 26 | 27 | 28 | class Ecad(object): 29 | def __init__(self, ipc, edb, units): 30 | self.design_name = "Design" 31 | self.units = units 32 | self.cad_header = CadHeader() 33 | self._ipc = ipc 34 | self.cad_data = CadData(self, edb, units, self._ipc) 35 | self._pedb = edb 36 | 37 | def write_xml(self, root): # pragma no cover 38 | ecad = ET.SubElement(root, "Ecad") 39 | ecad.set("name", self.design_name) 40 | self.cad_header.write_xml(ecad) 41 | self.cad_data.write_xml(ecad) 42 | -------------------------------------------------------------------------------- /src/pyedb/misc/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/misc/__init__.py -------------------------------------------------------------------------------- /src/pyedb/misc/aedtlib_personalib_install.py: -------------------------------------------------------------------------------- 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 xml.dom.minidom import parseString 24 | import xml.etree.ElementTree as ET 25 | 26 | 27 | def write_pretty_xml(root, file_path): 28 | """Write the XML in a pretty format.""" 29 | # If we use the commented code below, then the previously existing lines will have double lines added. We need to 30 | # split and ignore the double lines. 31 | # xml_str = parseString(ET.tostring(root)).toprettyxml(indent=" " * 4) 32 | lines = [line for line in parseString(ET.tostring(root)).toprettyxml(indent=" " * 4).split("\n") if line.strip()] 33 | xml_str = "\n".join(lines) 34 | 35 | with open(file_path, "w") as f: 36 | f.write(xml_str) 37 | -------------------------------------------------------------------------------- /src/pyedb/misc/pyedb.runtimeconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "runtimeOptions": { 3 | "tfm": "net3.1", 4 | "framework": { 5 | "name": "Microsoft.NETCore.App", 6 | "version": "3.1.23" 7 | }, 8 | "rollForward": "LatestPatch", 9 | "configProperties": { 10 | "System.Reflection.Metadata.MetadataUpdater.IsSupported": false 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/pyedb/misc/siw_feature_config/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/misc/siw_feature_config/__init__.py -------------------------------------------------------------------------------- /src/pyedb/misc/siw_feature_config/emc/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/src/pyedb/misc/siw_feature_config/emc/__init__.py -------------------------------------------------------------------------------- /src/pyedb/misc/siw_feature_config/emc/component_tags.py: -------------------------------------------------------------------------------- 1 | from pyedb.misc.siw_feature_config.emc.xml_generic import XmlGeneric 2 | 3 | 4 | class Comp(XmlGeneric): 5 | """Manages component tags.""" 6 | 7 | def __init__(self, element): 8 | super().__init__(element) 9 | if element is not None: 10 | self.CompName = self._element.attrib["CompName"] 11 | self.CompValue = self._element.attrib["CompValue"] 12 | self.DeviceName = self._element.attrib["DeviceName"] 13 | self.capType = self._element.attrib["capType"] if "capType" in self._element.attrib else None 14 | self.isClockDriver = self._element.attrib["isClockDriver"] 15 | self.isHighSpeed = self._element.attrib["isHighSpeed"] 16 | self.isIC = self._element.attrib["isIC"] 17 | self.isOscillator = self._element.attrib["isOscillator"] 18 | self.xLoc = self._element.attrib["xLoc"] 19 | self.yLoc = self._element.attrib["yLoc"] 20 | else: 21 | self.CompName = None 22 | self.CompValue = None 23 | self.DeviceName = None 24 | self.capType = None 25 | self.isClockDriver = None 26 | self.isHighSpeed = None 27 | self.isIC = None 28 | self.isOscillator = None 29 | self.xLoc = None 30 | self.yLoc = None 31 | 32 | 33 | class ComponentTags(XmlGeneric): 34 | """Manages component tags.""" 35 | 36 | CLS_MAPPING = {"Comp": Comp} 37 | 38 | def __init__(self, element): 39 | super().__init__(element) 40 | 41 | if element: 42 | for el in self._element.findall("Comp"): 43 | comp = Comp(el) 44 | self.sub_elements.append(comp) 45 | -------------------------------------------------------------------------------- /src/pyedb/misc/siw_feature_config/emc/net_tags.py: -------------------------------------------------------------------------------- 1 | from pyedb.misc.siw_feature_config.emc.xml_generic import XmlGeneric 2 | 3 | 4 | class Net(XmlGeneric): 5 | """Manages net.""" 6 | 7 | def __init__(self, element=None): 8 | super().__init__(element) 9 | 10 | if element is not None: 11 | self.isBus = self._element.attrib["isBus"] 12 | self.isClock = self._element.attrib["isClock"] 13 | self.isCritical = self._element.attrib["isCritical"] 14 | self.name = self._element.attrib["name"] 15 | self.type = self._element.attrib["type"] if "type" in self._element.attrib else None 16 | self.Diffmatename = self._element.attrib["Diffmatename"] if "Diffmatename" in self._element.attrib else None 17 | else: 18 | self.isBus = None 19 | self.isClock = None 20 | self.isCritical = None 21 | self.name = None 22 | self.type = None 23 | self.Diffmatename = None 24 | 25 | 26 | class NetTags(XmlGeneric): 27 | """Manages net tag.""" 28 | 29 | CLS_MAPPING = {"Net": Net} 30 | 31 | def __init__(self, element): 32 | super().__init__(element) 33 | 34 | if element: 35 | for el in self._element.findall("Net"): 36 | net = Net(el) 37 | self.sub_elements.append(net) 38 | -------------------------------------------------------------------------------- /src/pyedb/misc/siw_feature_config/emc/tag_library.py: -------------------------------------------------------------------------------- 1 | from pyedb.misc.siw_feature_config.emc.xml_generic import XmlGeneric 2 | 3 | 4 | class TagType(XmlGeneric): 5 | """Manages tag type.""" 6 | 7 | def __init__(self, element): 8 | super().__init__(element) 9 | 10 | if element is not None: 11 | self.name = self._element.attrib["name"] 12 | else: 13 | self.name = None 14 | 15 | 16 | class TagConfig(XmlGeneric): 17 | """Manages tag config.""" 18 | 19 | def __init__(self, element): 20 | super().__init__(element) 21 | 22 | 23 | class Tag(XmlGeneric): 24 | """Manages tag.""" 25 | 26 | CLS_MAPPING = {"TagType": TagType, "TagConfig": TagConfig} 27 | 28 | def __init__(self, element): 29 | super().__init__(element) 30 | 31 | if element is not None: 32 | self.label = self._element.attrib["label"] 33 | self.name = self._element.attrib["name"] 34 | self.sub_elements = [] 35 | 36 | for el in self._element.findall("TagType"): 37 | temp = TagType(el) 38 | self.sub_elements.append(temp) 39 | 40 | for el in self._element.findall("TagConfig"): 41 | temp = TagConfig(el) 42 | self.sub_elements.append(temp) 43 | else: 44 | self.label = None 45 | self.name = None 46 | self.sub_elements = [] 47 | 48 | 49 | class TagLibrary(XmlGeneric): 50 | """Manages tag library.""" 51 | 52 | CLS_MAPPING = { 53 | "Tag": Tag, 54 | } 55 | 56 | def __init__(self, element): 57 | super().__init__(element) 58 | self._element = element 59 | 60 | if element: 61 | for el in self._element.findall("Tag"): 62 | tag = Tag(el) 63 | self.sub_elements.append(tag) 64 | -------------------------------------------------------------------------------- /src/pyedb/workflow.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | from typing import Union 3 | 4 | import pandas as pd 5 | 6 | 7 | class Workflow: 8 | def __init__(self, pedb): 9 | self._pedb = pedb 10 | 11 | def export_bill_of_materials(self, file_path: Union[str, Path]): 12 | """Export bill of materials to a csv file. 13 | 14 | Parameters 15 | ---------- 16 | file_path : Union[str, Path] 17 | Path to the csv file. 18 | 19 | Returns 20 | ------- 21 | 22 | """ 23 | file_path = str(file_path) 24 | data = self._pedb.configuration.get_data_from_db(components=True) 25 | comps = data["components"] 26 | temp = [] 27 | for comp in comps: 28 | comp_attrs = {k: v for k, v in comp.items() if isinstance(v, Union[str, float, int])} 29 | temp.append(comp_attrs) 30 | 31 | df = pd.DataFrame(temp) 32 | return df.to_csv(file_path) 33 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | Unit Test Configuration Module 3 | ------------------------------- 4 | 5 | Description 6 | =========== 7 | 8 | This module contains the configuration and fixture for the pytest-based tests for pyedb. 9 | 10 | The default configuration can be changed by placing a file called local_config.json in the same 11 | directory as this module. An example of the contents of local_config.json 12 | { 13 | "desktopVersion": "2022.2", 14 | "NonGraphical": false, 15 | "NewThread": false, 16 | } 17 | 18 | """ 19 | -------------------------------------------------------------------------------- /tests/example_models/T40/ANSYS-HSD_V1_dcir.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/T40/ANSYS-HSD_V1_dcir.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/ANSYS-HSD_V1.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/ANSYS-HSD_V1.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/ANSYS-HSD_V1_0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/ANSYS-HSD_V1_0.zip -------------------------------------------------------------------------------- /tests/example_models/TEDB/ANSYS-HSD_V1_0_ODB.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/ANSYS-HSD_V1_0_ODB.tgz -------------------------------------------------------------------------------- /tests/example_models/TEDB/ANSYS-HSD_V1_cut.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/ANSYS-HSD_V1_cut.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/GRM32ER72A225KA35_25C_0V.sp: -------------------------------------------------------------------------------- 1 | *---------------------------------------------------------------------- 2 | * SPICE Model generated by Murata Manufacturing Co., Ltd. 3 | * Copyright(C) Murata Manufacturing Co., Ltd. 4 | * Description :3225M(1210)/X7R/2.2uF/100V 5 | * Murata P/N :GRM32ER72A225KA35 6 | * Property : C = 2.2[uF] 7 | * Data Generated on Mar 14, 2018 8 | *---------------------------------------------------------------------- 9 | * Applicable Conditions: 10 | * Frequency Range = 100Hz-6GHz 11 | * Temperature = 25 degC 12 | * DC Bias Voltage = 0V 13 | * Small Signal Operation 14 | *---------------------------------------------------------------------- 15 | .SUBCKT GRM32ER72A225KA35_25C_0V port1 port2 16 | C1 port1 11 2.18e-6 17 | L2 11 12 1.28e-10 18 | R3 12 13 2.50e-3 19 | C4 13 14 8.43e-5 20 | R4 13 14 91.0 21 | C5 14 15 3.62e-4 22 | R5 14 15 1.44 23 | C6 15 16 2.76e-4 24 | R6 15 16 1.91e-1 25 | C7 16 17 2.39e-4 26 | R7 16 17 2.22e-2 27 | C8 17 18 1.82e-4 28 | R8 17 18 2.69e-3 29 | L9 18 19 3.18e-10 30 | R9 18 19 3.02e-2 31 | L10 19 20 1.76e-11 32 | R10 19 20 2.18e-2 33 | C11 20 21 4.33e-6 34 | L11 20 21 1.35e-10 35 | R11 20 21 3.50e-2 36 | C12 21 22 2.64e-6 37 | L12 21 22 7.74e-11 38 | R12 21 22 1.86e-2 39 | C13 22 port2 1.81e-12 40 | L13 22 port2 2.74e-10 41 | R13 22 port2 46.5 42 | R100 port1 11 2.27e+8 43 | .ENDS GRM32ER72A225KA35_25C_0V 44 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/GRM32_DC0V_25degC.mod: -------------------------------------------------------------------------------- 1 | *---------------------------------------------------------------------- 2 | * SPICE Model generated by Murata Manufacturing Co., Ltd. 3 | * Copyright(C) Murata Manufacturing Co., Ltd. 4 | * Description :3225M(1210)/X5R/220uF/6.3V 5 | * Murata P/N :GRM32ER60J227ME05 6 | * Property : C = 220[uF] 7 | * Data Generated on Dec 1, 2020 8 | *---------------------------------------------------------------------- 9 | * Applicable Conditions: 10 | * Frequency Range = 100Hz-6GHz 11 | * Temperature = 25 degC 12 | * DC Bias Voltage = 0V 13 | * Small Signal Operation 14 | *---------------------------------------------------------------------- 15 | .SUBCKT GRM32ER60J227ME05_DC0V_25degC port1 port2 16 | C1 port1 11 1.77e-4 17 | L2 11 12 1.13e-10 18 | R3 12 13 8.72e-4 19 | C4 13 14 8.49e-3 20 | R4 13 14 6.25e-1 21 | C5 14 15 9.22e-3 22 | R5 14 15 6.58e-2 23 | C6 15 16 7.68e-3 24 | R6 15 16 1.12e-2 25 | L7 16 17 1.23e-11 26 | R7 16 17 5.47e-2 27 | L8 17 18 3.67e-11 28 | R8 17 18 1.96e-2 29 | L9 18 19 7.95e-11 30 | R9 18 19 8.28e-3 31 | L10 19 20 5.91e-10 32 | R10 19 20 4.91e-3 33 | C11 20 21 3.47e-4 34 | L11 20 21 2.44e-10 35 | R11 20 21 1.53e-3 36 | C12 21 22 4.26e-4 37 | L12 21 22 9.29e-11 38 | R12 21 22 1.20e-3 39 | C13 22 23 6.52e-11 40 | L13 22 23 5.86e-11 41 | R13 22 23 4.17 42 | C14 23 port2 3.21e-12 43 | L14 23 port2 2.02e-10 44 | R14 23 port2 81.7 45 | R100 port1 11 2.27e+5 46 | .ENDS GRM32ER60J227ME05_DC0V_25degC -------------------------------------------------------------------------------- /tests/example_models/TEDB/MicrostripSpliGnd.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/MicrostripSpliGnd.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/MicrostripSpliGnd.aedb/stride/model.index: -------------------------------------------------------------------------------- 1 | $begin 'Models' 2 | $end 'Models' 3 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/MicrostripSplitGND.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/MicrostripSplitGND.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/MicrostripSplitGND.aedb/stride/model.index: -------------------------------------------------------------------------------- 1 | $begin 'Models' 2 | $end 'Models' 3 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/Multizone_GroundVoids.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/Multizone_GroundVoids.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/Multizone_GroundVoids.aedb/stride/model.index: -------------------------------------------------------------------------------- 1 | $begin 'Models' 2 | $end 'Models' 3 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/Package.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/Package.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/ansys_pcb_stackup.csv: -------------------------------------------------------------------------------- 1 | ,Type,Material,Dielectric_Fill,Thickness 2 | 1_Top,signal,copper,Solder Resist,3.5000000000000004e-05 3 | DE1,dielectric,Megtron4,,0.0001 4 | Inner1(GND1),signal,copper,Megtron4_2,1.7000000000000003e-05 5 | DE2,dielectric,Megtron4_2,,8.8e-05 6 | Inner2(PWR1),signal,copper,Megtron4_2,1.7000000000000003e-05 7 | DE3,dielectric,Megtron4,,0.0001 8 | Inner3(Sig1),signal,copper,Megtron4_3,1.7000000000000003e-05 9 | Megtron4-1mm,dielectric,Megtron4_3,,0.001 10 | Inner4(Sig2),signal,copper,Megtron4_3,1.7000000000000003e-05 11 | DE5,dielectric,Megtron4,,0.0001 12 | Inner5(PWR2),signal,copper,Megtron4_2,1.7000000000000003e-05 13 | DE6,dielectric,Megtron4_2,,8.8e-05 14 | Inner6(GND2),signal,copper,Megtron4_2,1.7000000000000003e-05 15 | DE7,dielectric,Megtron4,,0.0001 16 | 16_Bottom,signal,copper,Solder Resist,3.5000000000000004e-05 17 | 17_Bottom,signal,copper,Solder Resist,3.5000000000000004e-05 18 | 18_Bottom,signal,copper,Solder Resist,3.5000000000000004e-05 19 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/bom_example.csv: -------------------------------------------------------------------------------- 1 | Prod name,RefDes,Value 2 | Capacitor,C10,1nF 3 | Inductor,L10,2nH 4 | Resistor,R1,50ohm 5 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/bom_example_2.csv: -------------------------------------------------------------------------------- 1 | RefDes,Part name, Type, Value 2 | C380,CAPC1005X55X25LL05T10,Capacitor,1nF 3 | L10,WE-Coil-PD4-S,Inductor,2nH 4 | U13,SLAB-QFN-24-2550x2550TP_V,IC, 5 | B1,MOLX-74754-0101_V,IO 6 | J7,'SAMTEC_ADF6-40-X-X-4-X-A-X,Other 7 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/chip.a3dcomp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/chip.a3dcomp -------------------------------------------------------------------------------- /tests/example_models/TEDB/chip.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/chip.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/chip_flipped_stackup.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/chip_flipped_stackup.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/chip_offset.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/chip_offset.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/chip_solder.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/chip_solder.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/chip_zoffset.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/chip_zoffset.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/chip_zoffset_solder.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/chip_zoffset_solder.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/component_no_ref_pins.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/component_no_ref_pins.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/dc_flow.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/dc_flow.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/boundaries.json: -------------------------------------------------------------------------------- 1 | { 2 | "boundaries": { 3 | "open_region": true, 4 | "open_region_type": "radiation", 5 | "pml_visible": false, 6 | "pml_operation_frequency": "5ghz", 7 | "pml_radiation_factor": 10, 8 | "dielectric_extents_type": "bounding_box", 9 | "dielectric_base_polygon": "", 10 | "horizontal_padding": 0, 11 | "honor_primitives_on_dielectric_layers": true, 12 | "air_box_extents_type": "bounding_box", 13 | "air_box_base_polygon": "", 14 | "air_box_truncate_model_ground_layers": false, 15 | "air_box_horizontal_padding": 0.15, 16 | "air_box_positive_vertical_padding": 1, 17 | "air_box_negative_vertical_padding": 1 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "components": [ 3 | { 4 | "reference_designator": "C375", 5 | "part_type": "capacitor", 6 | "enabled": false, 7 | "rlc_model": { 8 | "pin_pairs": [ 9 | { 10 | "type": "series", 11 | "p1": "1", 12 | "p2": "2" 13 | } 14 | ] 15 | } 16 | }, 17 | { 18 | "reference_designator": "R100", 19 | "part_type": "resistor", 20 | "enabled": false 21 | }, 22 | { 23 | "reference_designator": "L2", 24 | "part_type": "inductor", 25 | "enabled": false, 26 | "rlc_model": { 27 | "pin_pairs": [ 28 | { 29 | "type": "series", 30 | "capacitance": "100nf", 31 | "inductance": "1nh", 32 | "resistance": "0.001", 33 | "p1": "1", 34 | "p2": "2" 35 | } 36 | ] 37 | } 38 | }, 39 | { 40 | "reference_designator": "C375", 41 | "part_type": "capacitor", 42 | "enabled": false, 43 | "rlc_model": { 44 | "pin_pairs": [ 45 | { 46 | "type": "series", 47 | "p1": "1", 48 | "p2": "2" 49 | } 50 | ] 51 | } 52 | }, 53 | { 54 | "reference_designator": "U1", 55 | "part_type": "io", 56 | "solder_ball_properties": { 57 | "shape": "cylinder", 58 | "diameter": "244um", 59 | "height": "406um" 60 | }, 61 | "port_properties": { 62 | "reference_offset": 0, 63 | "reference_size_auto": true, 64 | "reference_size_x": 0, 65 | "reference_size_y": 0 66 | } 67 | }, 68 | { 69 | "reference_designator": "U14", 70 | "part_type": "ic" 71 | }, 72 | { 73 | "reference_designator": "U3", 74 | "part_type": "other" 75 | } 76 | ] 77 | } -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/general.json: -------------------------------------------------------------------------------- 1 | { 2 | "general": { 3 | "spice_model_library": "", 4 | "s_parameter_library": "" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/general.toml: -------------------------------------------------------------------------------- 1 | [general] 2 | s_parameter_library = "" -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/nets.json: -------------------------------------------------------------------------------- 1 | { 2 | "nets": { 3 | "power_ground_nets": ["1.2V_DVDDL"], 4 | "signal_nets": ["SFPA_VCCR"] 5 | } 6 | } -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/operations_cutout.json: -------------------------------------------------------------------------------- 1 | { 2 | "operations": { 3 | "cutout": { 4 | "signal_list": ["SFPA_RX_P", "SFPA_RX_N"], 5 | "reference_list": ["GND"], 6 | "extent_type": "ConvexHull", 7 | "expansion_size": 0.002, 8 | "use_round_corner": false, 9 | "output_aedb_path": "", 10 | "open_cutout_at_end": true, 11 | "use_pyaedt_cutout": true, 12 | "number_of_threads": 4, 13 | "use_pyaedt_extent_computing": true, 14 | "extent_defeature": 0, 15 | "remove_single_pin_components": false, 16 | "custom_extent": "", 17 | "custom_extent_units": "mm", 18 | "include_partial_instances": false, 19 | "keep_voids": true, 20 | "check_terminals": false, 21 | "include_pingroups": false, 22 | "expansion_factor": 0, 23 | "maximum_iterations": 10, 24 | "preserve_components_with_model": false, 25 | "simple_pad_check": true, 26 | "keep_lines_as_path": false 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/package_def.json: -------------------------------------------------------------------------------- 1 | { 2 | "package_definitions": [ 3 | { 4 | "name": "package_1", 5 | "component_definition": "SMTC-MECT-110-01-M-D-RA1_V", 6 | "maximum_power": 1, 7 | "therm_cond": 1, 8 | "theta_jb": 1, 9 | "theta_jc": 1, 10 | "height": 1, 11 | "heatsink": { 12 | "fin_base_height": "1mm", 13 | "fin_height": "1mm", 14 | "fin_orientation": "x_oriented", 15 | "fin_spacing": "1mm", 16 | "fin_thickness": "4mm" 17 | }, 18 | "apply_to_all": false, 19 | "components": [ 20 | "J5" 21 | ] 22 | }, 23 | { 24 | "name": "package_2", 25 | "component_definition": "COIL-1008CS_V", 26 | "extent_bounding_box": [["-1mm", "-1mm"], ["1mm", "1mm"]], 27 | "maximum_power": 1, 28 | "therm_cond": 1, 29 | "theta_jb": 1, 30 | "theta_jc": 1, 31 | "height": 1, 32 | "apply_to_all": true, 33 | "components": [ 34 | "L8" 35 | ] 36 | } 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/padstacks.json: -------------------------------------------------------------------------------- 1 | { 2 | "padstacks": { 3 | "definitions": [ 4 | { 5 | "name": "v40h20", 6 | "hole_diameter": "0.18mm", 7 | "hole_plating_thickness": "25um", 8 | "hole_material": "copper", 9 | "hole_range": "through" 10 | } 11 | ], 12 | "instances": [ 13 | { 14 | "name": "Via998", 15 | "backdrill_top": { 16 | "drill_to_layer": "Inner3(Sig1)", 17 | "drill_diameter": "0.5mm", 18 | "stub_length": "0.2mm" 19 | }, 20 | "backdrill_bottom": { 21 | "drill_to_layer": "Inner4(Sig2)", 22 | "drill_diameter": "0.5mm", 23 | "stub_length": "0.2mm" 24 | } 25 | } 26 | ] 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/pin_groups.json: -------------------------------------------------------------------------------- 1 | { 2 | "pin_groups": [ 3 | { 4 | "name": "U9_5V_1", 5 | "reference_designator": "U9", 6 | "pins": [ 7 | "32", 8 | "33" 9 | ] 10 | }, 11 | { 12 | "name": "U9_GND", 13 | "reference_designator": "U9", 14 | "net": "GND" 15 | }, 16 | { 17 | "name": "U9_AVDD_PLL", 18 | "reference_designator": "U9", 19 | "pins": ["44"] 20 | }, 21 | { 22 | "name": "U6_ALL_PINS", 23 | "reference_designator": "U6" 24 | }, 25 | { 26 | "name": "J5_TWO_NETS", 27 | "reference_designator": "J5", 28 | "net": ["SFPA_VCCR", "SFPA_VCCT"] 29 | } 30 | ], 31 | "ports": [ 32 | { 33 | "name": "U9_pin_group_port", 34 | "type": "circuit", 35 | "positive_terminal": { 36 | "pin_group": "U9_5V_1" 37 | }, 38 | "negative_terminal": { 39 | "pin_group": "U9_GND" 40 | } 41 | } 42 | ], 43 | "sources": [ 44 | { 45 | "name": "U9_pin_group_source", 46 | "type": "voltage", 47 | "magnitude": 1.2, 48 | "positive_terminal": { 49 | "pin_group": "U9_AVDD_PLL" 50 | }, 51 | "negative_terminal": { 52 | "pin_group": "U9_GND" 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/ports_circuit.json: -------------------------------------------------------------------------------- 1 | { 2 | "ports": [ 3 | { 4 | "name": "CIRCUIT_C375_1_2", 5 | "reference_designator": "C375", 6 | "type": "circuit", 7 | "positive_terminal": { 8 | "pin": "1" 9 | }, 10 | "negative_terminal": { 11 | "pin": "2" 12 | } 13 | }, 14 | { 15 | "name": "CIRCUIT_X1_B8_GND", 16 | "reference_designator": "X1", 17 | "type": "circuit", 18 | "positive_terminal": { 19 | "pin": "B8" 20 | }, 21 | "negative_terminal": { 22 | "net": "GND" 23 | } 24 | }, 25 | { 26 | "name": "CIRCUIT_X1_B9_GND", 27 | "reference_designator": "X1", 28 | "type": "circuit", 29 | "positive_terminal": { 30 | "net": "PCIe_Gen4_TX2_N" 31 | }, 32 | "negative_terminal": { 33 | "net": "GND" 34 | } 35 | }, 36 | { 37 | "name": "CIRCUIT_U7_VDD_DDR_GND", 38 | "reference_designator": "U7", 39 | "type": "circuit", 40 | "positive_terminal": { 41 | "net": "VDD_DDR" 42 | }, 43 | "negative_terminal": { 44 | "net": "GND" 45 | } 46 | } 47 | ] 48 | } -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/ports_coax.json: -------------------------------------------------------------------------------- 1 | { 2 | "ports": [ 3 | { 4 | "name": "COAX_U1_AM17", 5 | "reference_designator": "U1", 6 | "type": "coax", 7 | "positive_terminal": { 8 | "pin": "AM17" 9 | } 10 | }, 11 | { 12 | "name": "COAX_U1_PCIe_Gen4_TX2_CAP_N", 13 | "reference_designator": "U1", 14 | "type": "coax", 15 | "positive_terminal": { 16 | "net": "PCIe_Gen4_TX2_CAP_N" 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/s_parameter.json: -------------------------------------------------------------------------------- 1 | { 2 | "general": { 3 | "s_parameter_library": "" 4 | }, 5 | "s_parameters": [ 6 | { 7 | "name": "GRM32_DC0V_25degC_series", 8 | "component_definition": "CAPC3216X180X55ML20T25", 9 | "file_path": "GRM32_DC0V_25degC_series.s2p", 10 | "apply_to_all": true, 11 | "components": [], 12 | "reference_net": "GND" 13 | }, 14 | { 15 | "name": "GRM32_DC0V_25degC_series", 16 | "component_definition": "CAPC3216X190X55ML30T25", 17 | "file_path": "GRM32_DC0V_25degC_series.s2p", 18 | "apply_to_all": false, 19 | "components": ["C59"], 20 | "reference_net": "GND", 21 | "reference_net_per_component": { 22 | "C59": "GND" 23 | } 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/setups_hfss.json: -------------------------------------------------------------------------------- 1 | { 2 | "setups": [ 3 | { 4 | "name": "hfss_setup_1", 5 | "type": "HFSS", 6 | "f_adapt": "5GHz", 7 | "max_num_passes": 10, 8 | "max_mag_delta_s": 0.02, 9 | "freq_sweep": [ 10 | { 11 | "name": "Sweep1", 12 | "type": "Interpolation", 13 | "frequencies": [ 14 | { 15 | "distribution": "linear step", 16 | "start": 0, 17 | "stop": 5e9, 18 | "step": 10e7 19 | } 20 | ] 21 | } 22 | ] 23 | }, 24 | { 25 | "name": "hfss_setup_2", 26 | "type": "HFSS", 27 | "f_adapt": "5GHz", 28 | "max_num_passes": 10, 29 | "max_mag_delta_s": 0.02, 30 | "freq_sweep": [ 31 | { 32 | "name": "Sweep1", 33 | "type": "Interpolation", 34 | "frequencies": [ 35 | { 36 | "distribution": "linear count", 37 | "start": 0, 38 | "stop": 5e9, 39 | "points": 10 40 | } 41 | ] 42 | } 43 | ] 44 | }, 45 | { 46 | "name": "hfss_setup_3", 47 | "type": "HFSS", 48 | "f_adapt": "5GHz", 49 | "max_num_passes": 10, 50 | "max_mag_delta_s": 0.02, 51 | "freq_sweep": [ 52 | { 53 | "name": "Sweep1", 54 | "type": "Interpolation", 55 | "frequencies": [ 56 | { 57 | "distribution": "log scale", 58 | "start": 1e6, 59 | "stop": 1e9, 60 | "samples": 10 61 | } 62 | ] 63 | } 64 | ] 65 | } 66 | ] 67 | } -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/setups_siwave_dc.json: -------------------------------------------------------------------------------- 1 | { 2 | "setups": [ 3 | { 4 | "name": "siwave_dc", 5 | "type": "siwave_dc", 6 | "dc_slider_position": 1, 7 | "dc_ir_settings": { 8 | "export_dc_thermal_data": true 9 | } 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/setups_siwave_syz.json: -------------------------------------------------------------------------------- 1 | { 2 | "setups": [ 3 | { 4 | "name": "siwave_syz", 5 | "type": "siwave_syz", 6 | "si_slider_position": 1, 7 | "freq_sweep": [ 8 | { 9 | "name": "Sweep1", 10 | "type": "Interpolation", 11 | "frequencies": [ 12 | { 13 | "distribution": "linear count", 14 | "start": 0, 15 | "stop": 10e9, 16 | "points": 11 17 | }, 18 | { 19 | "distribution": "log scale", 20 | "start": 1e6, 21 | "stop": 1e9, 22 | "samples": 10 23 | } 24 | ] 25 | } 26 | ] 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/sources.json: -------------------------------------------------------------------------------- 1 | { 2 | "sources": [ 3 | { 4 | "name": "VSOURCE_U2_1V0_GND", 5 | "reference_designator": "U2", 6 | "type": "voltage", 7 | "magnitude": 1, 8 | "positive_terminal": { 9 | "net": "1V0" 10 | }, 11 | "negative_terminal": { 12 | "net": "GND" 13 | } 14 | }, 15 | { 16 | "name": "ISOURCE_U2_1V0_GND", 17 | "reference_designator": "U1", 18 | "type": "current", 19 | "magnitude": 1, 20 | "positive_terminal": { 21 | "net": "1V0" 22 | }, 23 | "negative_terminal": { 24 | "net": "GND" 25 | } 26 | }, 27 | { 28 | "name": "VSOURCE_U4_2V5_GND", 29 | "reference_designator": "U4", 30 | "type": "voltage", 31 | "magnitude": 2.5, 32 | "positive_terminal": { 33 | "net": "2V5" 34 | }, 35 | "negative_terminal": { 36 | "net": "GND" 37 | } 38 | }, 39 | { 40 | "name": "ISOURCE_U1_2V5_GND", 41 | "reference_designator": "U1", 42 | "type": "current", 43 | "magnitude": 1, 44 | "positive_terminal": { 45 | "net": "2V5" 46 | }, 47 | "negative_terminal": { 48 | "net": "GND" 49 | } 50 | }, 51 | { 52 | "name": "ISOURCE_U11_1_11", 53 | "reference_designator": "U11", 54 | "type": "current", 55 | "magnitude": 1, 56 | "positive_terminal": { 57 | "pin": "1" 58 | }, 59 | "negative_terminal": { 60 | "pin": "11" 61 | } 62 | } 63 | ] 64 | } -------------------------------------------------------------------------------- /tests/example_models/TEDB/edb_config_json/spice.json: -------------------------------------------------------------------------------- 1 | { 2 | "general": { 3 | "spice_model_library": "" 4 | }, 5 | "spice_models": [ 6 | { 7 | "name": "GRM32ER72A225KA35_25C_0V", 8 | "component_definition": "RESC1005X40X25LL05T05", 9 | "file_path": "GRM32ER72A225KA35_25C_0V.sp", 10 | "sub_circuit_name": "GRM32ER72A225KA35_25C_0V", 11 | "apply_to_all": true, 12 | "components": [] 13 | }, 14 | { 15 | "name": "GRM32ER72A225KA35_25C_0V", 16 | "component_definition": "RESC1005X40X25NL05T05", 17 | "file_path": "GRM32ER72A225KA35_25C_0V.sp", 18 | "sub_circuit_name": "GRM32ER72A225KA35_25C_0V", 19 | "apply_to_all": false, 20 | "components": ["R106"] 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/edge_ports.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/edge_ports.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/edge_ports.aedb/stride/model.index: -------------------------------------------------------------------------------- 1 | $begin 'Models' 2 | $end 'Models' 3 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/example_arbitrary_wave_ports.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/example_arbitrary_wave_ports.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/example_package.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/example_package.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/example_package.aedb/stride/model.index: -------------------------------------------------------------------------------- 1 | $begin 'Models' 2 | $end 'Models' 3 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/galileo_stackup.csv: -------------------------------------------------------------------------------- 1 | ,Type,Material,Dielectric_Fill,Thickness 2 | UNNAMED_000,dielectric,AIR,,0.0 3 | TOP,signal,COPPER,TOP_FILL,6e-05 4 | UNNAMED_002,dielectric,FR-4_3,,6.731e-05 5 | PWR,signal,COPPER_1,PWR_FILL,3.302e-05 6 | Signal3,signal,copper,FR4_epoxy,3.5000000000000004e-05 7 | UNNAMED_004,dielectric,FR-4_2,,0.00127 8 | LYR_1,signal,COPPER_1,FR-4_1,3.048e-05 9 | UNNAMED_006,dielectric,FR-4_1,,0.0002032 10 | LYR_2,signal,COPPER_1,FR-4_1,3.048e-05 11 | UNNAMED_008,dielectric,FR-4_1,,0.0002032 12 | GND,signal,COPPER_1,FR-4_1,3.302e-05 13 | UNNAMED_010,dielectric,FR-4,,6.731e-05 14 | Diel1,dielectric,myMaterial,,0.001 15 | BOTTOM,signal,COPPER,BOTTOM_FILL,4.826e-05 16 | Signal1,signal,copper,FR4_epoxy,3.5000000000000004e-05 17 | UNNAMED_012,dielectric,AIR,,0.0 18 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/lam_for_bottom_place.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/lam_for_bottom_place.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/lam_for_top_place.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/lam_for_top_place.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/lam_for_top_place_no_setups.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/lam_for_top_place_no_setups.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/lam_for_top_place_no_setups.aedb/stride/model.index: -------------------------------------------------------------------------------- 1 | $begin 'Models' 2 | $end 'Models' 3 | -------------------------------------------------------------------------------- /tests/example_models/TEDB/lam_with_mold.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/lam_with_mold.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/merge_via_4layers.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/merge_via_4layers.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/multi_cells.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/multi_cells.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/padstacks.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/padstacks.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/simple.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/simple.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/test_107.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/test_107.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/test_merge_polygon.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/test_merge_polygon.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/test_path_length.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/test_path_length.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/test_pin_group.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/test_pin_group.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/test_sources.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/test_sources.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/via_fence_generic_project.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/via_fence_generic_project.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/TEDB/vias_300.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/TEDB/vias_300.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/cad/GDS/dummy_layermap.map: -------------------------------------------------------------------------------- 1 | #Layer Name Layer Purpose Layer Stream Number Datatype Stream Number 2 | 3 | met5 drawing 72 20 4 | met4 drawing 71 20 5 | met3 drawing 70 20 6 | met2 drawing 69 20 7 | met1 drawing 68 20 8 | via4 drawing 71 44 9 | via3 drawing 70 44 10 | via2 drawing 69 44 11 | via drawing 68 44 -------------------------------------------------------------------------------- /tests/example_models/cad/GDS/sky130_fictitious_dtc_example.gds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/cad/GDS/sky130_fictitious_dtc_example.gds -------------------------------------------------------------------------------- /tests/example_models/convert_and_merge_path.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/convert_and_merge_path.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/edb_edge_ports.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/edb_edge_ports.aedb/edb.def -------------------------------------------------------------------------------- /tests/example_models/multi_zone_project.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/example_models/multi_zone_project.aedb/edb.def -------------------------------------------------------------------------------- /tests/grpc/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/grpc/__init__.py -------------------------------------------------------------------------------- /tests/grpc/integration/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests related to the interaction of multiple classes 2 | from PyEDB, e.g. Edb and Ipc2581, ... 3 | """ 4 | -------------------------------------------------------------------------------- /tests/grpc/system/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests related to testing the system as a whole, e.g. exporting 2 | the data of an aedb file to ipc2581, ... 3 | """ 4 | -------------------------------------------------------------------------------- /tests/grpc/system/wave_ports.aedb/edb.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/grpc/system/wave_ports.aedb/edb.def -------------------------------------------------------------------------------- /tests/grpc/system/wave_ports.aedb/stride/model.index: -------------------------------------------------------------------------------- 1 | $begin 'Models' 2 | $end 'Models' 3 | -------------------------------------------------------------------------------- /tests/grpc/unit/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/grpc/unit/__init__.py -------------------------------------------------------------------------------- /tests/grpc/unit/test_edbsiwave.py: -------------------------------------------------------------------------------- 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 | import os 24 | 25 | from mock import Mock 26 | import pytest 27 | 28 | from pyedb.dotnet.database.siwave import EdbSiwave 29 | 30 | pytestmark = [pytest.mark.unit, pytest.mark.no_licence, pytest.mark.grpc] 31 | 32 | 33 | class TestClass: 34 | @pytest.fixture(autouse=True) 35 | def init(self): 36 | self.edb = Mock() 37 | self.edb.edbpath = os.path.join(os.path.expanduser("~"), "fake_edb.aedb") 38 | self.siwave = EdbSiwave(self.edb) 39 | 40 | def test_siwave_add_syz_analsyis(self): 41 | """Add a sywave AC analysis.""" 42 | assert self.siwave.add_siwave_syz_analysis() 43 | -------------------------------------------------------------------------------- /tests/grpc/unit/test_source.py: -------------------------------------------------------------------------------- 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 | import pytest 24 | 25 | from pyedb.dotnet.database.edb_data.sources import Source 26 | 27 | pytestmark = [pytest.mark.unit, pytest.mark.no_licence, pytest.mark.grpc] 28 | 29 | 30 | class TestClass: 31 | # @pytest.fixture(autouse=True) 32 | # def init(self,local_scratch,): 33 | # self.local_scratch = local_scratch 34 | 35 | def test_source_change_values(self): 36 | """Create source and change its values""" 37 | source = Source() 38 | source.l_value = 1e-9 39 | assert source.l_value == 1e-9 40 | source.r_value = 1.3 41 | assert source.r_value == 1.3 42 | source.c_value = 1e-13 43 | assert source.c_value == 1e-13 44 | source.create_physical_resistor = True 45 | assert source.create_physical_resistor 46 | -------------------------------------------------------------------------------- /tests/legacy/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/legacy/__init__.py -------------------------------------------------------------------------------- /tests/legacy/integration/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests related to the interaction of multiple classes 2 | from PyEDB, e.g. Edb and Ipc2581, ... 3 | """ 4 | -------------------------------------------------------------------------------- /tests/legacy/system/__init__.py: -------------------------------------------------------------------------------- 1 | """Tests related to testing the system as a whole, e.g. exporting 2 | the data of an aedb file to ipc2581, ... 3 | """ 4 | -------------------------------------------------------------------------------- /tests/legacy/system/test_edb_geometry.py: -------------------------------------------------------------------------------- 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 | import pytest 25 | 26 | pytestmark = [pytest.mark.unit, pytest.mark.legacy] 27 | 28 | 29 | class TestClass: 30 | @pytest.fixture(autouse=True) 31 | def init(self, local_scratch, edb_examples): 32 | edbapp = edb_examples.get_si_verse() 33 | path = edbapp.layout.find_primitive(name="line_272")[0] 34 | self.path_center_line_polygon_data = path.get_center_line_polygon_data() 35 | self.point_data = self.path_center_line_polygon_data.get_point(1) 36 | pass 37 | 38 | def test_point_data(self): 39 | assert isinstance(self.point_data.x_evaluated, float) 40 | assert isinstance(self.point_data.y_evaluated, float) 41 | self.point_data.x = "1mm" 42 | assert self.point_data.x == "1mm" 43 | -------------------------------------------------------------------------------- /tests/legacy/unit/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansys/pyedb/70a76bce7e8f88e0b72b30700c683511486dbdcc/tests/legacy/unit/__init__.py -------------------------------------------------------------------------------- /tests/legacy/unit/test_edbsiwave.py: -------------------------------------------------------------------------------- 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 | import os 24 | 25 | from mock import Mock 26 | import pytest 27 | 28 | from pyedb.dotnet.database.siwave import EdbSiwave 29 | 30 | pytestmark = [pytest.mark.unit, pytest.mark.no_licence, pytest.mark.legacy] 31 | 32 | 33 | class TestClass: 34 | @pytest.fixture(autouse=True) 35 | def init(self, tmpdir): 36 | self.edb = Mock() 37 | self.edb.edbpath = os.path.join(tmpdir, "fake_edb.aedb") 38 | self.siwave = EdbSiwave(self.edb) 39 | 40 | def test_siwave_add_syz_analsyis(self): 41 | """Add a sywave AC analysis.""" 42 | assert self.siwave.add_siwave_syz_analysis() 43 | -------------------------------------------------------------------------------- /tests/legacy/unit/test_source.py: -------------------------------------------------------------------------------- 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 | import pytest 24 | 25 | from pyedb.dotnet.database.edb_data.sources import Source 26 | 27 | pytestmark = [pytest.mark.unit, pytest.mark.no_licence, pytest.mark.legacy] 28 | 29 | 30 | class TestClass: 31 | # @pytest.fixture(autouse=True) 32 | # def init(self,local_scratch,): 33 | # self.local_scratch = local_scratch 34 | 35 | def test_source_change_values(self): 36 | """Create source and change its values""" 37 | source = Source() 38 | source.l_value = 1e-9 39 | assert source.l_value == 1e-9 40 | source.r_value = 1.3 41 | assert source.r_value == 1.3 42 | source.c_value = 1e-13 43 | assert source.c_value == 1e-13 44 | source.create_physical_resistor = True 45 | assert source.create_physical_resistor 46 | -------------------------------------------------------------------------------- /tests/utils/test_utils.py: -------------------------------------------------------------------------------- 1 | import warnings 2 | 3 | from pyedb.generic.general_methods import deprecate_argument_name 4 | 5 | VALUE = "Dummy value" 6 | NEW_VALUE = "Other dummy value" 7 | WARNING_MSG = "Argument `old_arg` is deprecated for method `dummy_function`; use `new_arg` instead." 8 | 9 | 10 | @deprecate_argument_name({"old_arg": "new_arg"}) 11 | def dummy_function(new_arg=None): 12 | """Dummy function used for testing.""" 13 | return new_arg 14 | 15 | 16 | def test_warning_on_deprecated_argument(): 17 | """Test deprecation warning on deprecated argument.""" 18 | with warnings.catch_warnings(record=True) as log: 19 | warnings.simplefilter("always") 20 | res = dummy_function(old_arg=VALUE) 21 | warning = log[-1] 22 | 23 | assert VALUE == res 24 | assert 1 == len(log) 25 | assert WARNING_MSG in str(warning.message) 26 | 27 | 28 | def test_warning_on_new_argument(): 29 | """Test deprecation warning on new argument.""" 30 | with warnings.catch_warnings(record=True) as log: 31 | warnings.simplefilter("always") 32 | res = dummy_function(new_arg=VALUE) 33 | 34 | assert VALUE == res 35 | assert 0 == len(log) 36 | 37 | 38 | def test_warning_on_both_deprecated_and_new_arguments(): 39 | """Test deprecation warning on both new and old arguments.""" 40 | with warnings.catch_warnings(record=True) as log: 41 | warnings.simplefilter("always") 42 | res = dummy_function(new_arg=NEW_VALUE, old_arg=VALUE) 43 | warning = log[-1] 44 | 45 | assert NEW_VALUE == res 46 | assert 1 == len(log) 47 | assert WARNING_MSG in str(warning.message) 48 | --------------------------------------------------------------------------------