EDB simple example#

This example shows how to use the EDBCommon class to open an existing EDB project.

Perform required imports#

Perform the required imports.

[1]:
import os
import shutil
[2]:
from ansys.aedt.core import generate_unique_folder_name
[3]:
from ansys.aedt.toolkits.common.utils import download_file
from ansys.aedt.toolkits.common.backend.api import EDBCommon

Initialize temporary folder and project settings#

Initialize a temporary folder to copy the input file into and specify project settings.

[4]:
URL_BASE = "https://raw.githubusercontent.com/ansys/example-data/master/toolkits/common/"
EDB_PROJECT = "edb_edge_ports.aedb/edb.def"
URL = os.path.join(URL_BASE, EDB_PROJECT)

temp_folder = os.path.join(generate_unique_folder_name())

edb_path = os.path.join(temp_folder, "edb_example.aedb")
os.makedirs(edb_path, exist_ok=True)
local_project = os.path.join(edb_path, "edb.def")

download_file(URL, local_project)
[4]:
'C:\\Users\\ansys\\AppData\\Local\\Temp\\pyaedt_prj_MNU\\edb_example.aedb\\edb.def'

Initialize toolkit#

Initialize the toolkit.

[5]:
toolkit = EDBCommon()

Initialize EDB project#

Open the EDB project.

[6]:
load_edb_msg = toolkit.load_edb(edb_path)
C:\actions-runner\_work\pyaedt-toolkits-common\pyaedt-toolkits-common\.venv\Lib\site-packages\pyedb\generic\design_types.py:291: UserWarning: You are using PyEDB with grpc, which is currently in beta. Some feature might be missing or not working as expected. Please report any issue you find to the PyEDB team.
  warnings.warn(GRPC_BETA_WARNING, UserWarning)
C:\actions-runner\_work\pyaedt-toolkits-common\pyaedt-toolkits-common\.venv\Lib\site-packages\pyedb\grpc\edb.py:2542: SyntaxWarning: invalid escape sequence '\T'
  >>> edb_zones = edb.copy_zones(r"C:\Temp\test")
C:\actions-runner\_work\pyaedt-toolkits-common\pyaedt-toolkits-common\.venv\Lib\site-packages\pyedb\generic\constants.py:212: SyntaxWarning: invalid escape sequence '\d'
  loc = re.search("[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?", variable_value)
C:\actions-runner\_work\pyaedt-toolkits-common\pyaedt-toolkits-common\.venv\Lib\site-packages\pyedb\grpc\database\components.py:2088: SyntaxWarning: invalid escape sequence '\m'
  >>> edb_file = r"C:\my_edb_file.aedb"
PyEDB INFO: Logger is initialized in EDB.
PyEDB INFO: legacy v0.71.0
PyEDB INFO: Python version 3.12.10 (tags/v3.12.10:0cc8128, Apr  8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
PyEDB INFO: Using PyEDB with gRPC as Beta until ANSYS 2025R2 official release.
PyEDB INFO: Logger is initialized in EDB.
PyEDB INFO: legacy v0.71.0
PyEDB INFO: Python version 3.12.10 (tags/v3.12.10:0cc8128, Apr  8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
PyAEDT INFO: Grpc session started
PyEDB INFO: Grpc session started: pid=168
PyEDB INFO: Database edb_example.aedb Opened in 2026.1
PyEDB INFO: Cell EMDesign1 Opened
PyEDB INFO: Refreshing the Components dictionary.
PyEDB INFO: Builder was initialized.
PyEDB INFO: EDB initialized.

Get toolkit properties#

Get toolkit properties, which contain the project information.

[7]:
new_properties = toolkit.get_properties()
edb_project = new_properties["active_project"]

Save project#

Copy the current project in a new file.

[8]:
directory, old_file_name = os.path.split(edb_project)
new_path = os.path.join(directory, "new_edb.aedb")
toolkit.save_edb(new_path)
INFO - Project C:\Users\ansys\AppData\Local\Temp\pyaedt_prj_MNU\new_edb.aedb saved
[8]:
True

Get cell names#

Get cell names using PyEDB.

[9]:
toolkit.logger.info("Play with EDB")
cell_names = toolkit.edb.cell_names
toolkit.edb.nets.plot()
INFO - Play with EDB
---------------------------------------------------------------------------
_MultiThreadedRendezvous                  Traceback (most recent call last)
Cell In[9], line 3
      1 toolkit.logger.info("Play with EDB")
      2 cell_names = toolkit.edb.cell_names
----> 3 toolkit.edb.nets.plot()

File C:\actions-runner\_work\pyaedt-toolkits-common\pyaedt-toolkits-common\.venv\Lib\site-packages\pyedb\common\nets.py:158, in CommonNets.plot(self, nets, layers, color_by_net, show_legend, save_plot, outline, size, plot_components, top_view, show, annotate_component_names, plot_vias, title, **kwargs)
    156     plot_line(poly.boundary, add_points=False, color=(0.7, 0, 0), linewidth=4)
    157 else:
--> 158     bbox = self._pedb.hfss.get_layout_bounding_box()
    159     x1 = bbox[0]
    160     x2 = bbox[2]

File C:\actions-runner\_work\pyaedt-toolkits-common\pyaedt-toolkits-common\.venv\Lib\site-packages\pyedb\grpc\database\hfss.py:258, in Hfss.get_layout_bounding_box(self, layout, digit_resolution)
    256 if not layout:
    257     layout = self._active_layout
--> 258 layout_obj_instances = layout.layout_instance.query_layout_obj_instances()
    259 tuple_list = []
    260 for lobj in layout_obj_instances:

File C:\actions-runner\_work\pyaedt-toolkits-common\pyaedt-toolkits-common\.venv\Lib\site-packages\ansys\edb\core\layout_instance\layout_instance.py:73, in LayoutInstance.query_layout_obj_instances(self, layer_filter, net_filter, spatial_filter)
     71 all_hits = []
     72 if (cache := get_cache()) is not None:
---> 73     for hits_chunk in self.__stub.StreamLayoutObjInstancesQuery(request):
     74         all_hits.append(hits_chunk)
     75 else:

File C:\actions-runner\_work\pyaedt-toolkits-common\pyaedt-toolkits-common\.venv\Lib\site-packages\grpc\_channel.py:538, in _Rendezvous.__next__(self)
    537 def __next__(self):
--> 538     return self._next()

File C:\actions-runner\_work\pyaedt-toolkits-common\pyaedt-toolkits-common\.venv\Lib\site-packages\grpc\_channel.py:956, in _MultiThreadedRendezvous._next(self)
    954     raise StopIteration()
    955 if self._state.code is not None:
--> 956     raise self

_MultiThreadedRendezvous: <_MultiThreadedRendezvous of RPC that terminated with:
        status = StatusCode.INVALID_ARGUMENT
        details = "Illegal operation on a null LayoutInstance object"
        debug_error_string = "UNKNOWN:Error received from peer  {grpc_message:"Illegal operation on a null LayoutInstance object", grpc_status:3}"
>
../../_images/examples_edb_common_api_edb_16_2.png

Save and release EDB#

Save and release EDB.

[10]:
toolkit.close_edb()
INFO - EDB is closed.
[10]:
True

Remove temporary folder#

Remove the temporary folder.

[11]:
shutil.rmtree(temp_folder, ignore_errors=True)