Skip to content

Commit

Permalink
Merge branch 'main' into grpc-transition
Browse files Browse the repository at this point in the history
  • Loading branch information
svandenb-dev committed Jan 16, 2025
2 parents 424e3d0 + f6be6d0 commit b889019
Show file tree
Hide file tree
Showing 24 changed files with 281 additions and 163 deletions.
15 changes: 8 additions & 7 deletions .github/workflows/ci_cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ concurrency:

jobs:

check_title:
pr-title:
if: github.event_name == 'pull_request'
name: Check the title of the pull request
runs-on: ubuntu-latest
steps:
- name: Check commit name
uses: ansys/actions/commit-style@v6
- name: Check the title of the pull request
uses: ansys/actions/check-pr-title@v8
with:
token: ${{ secrets.GITHUB_TOKEN }}
use-upper-case: true
Expand Down Expand Up @@ -139,7 +139,7 @@ jobs:
name: Test dotnet (linux)
runs-on: [ Linux, self-hosted, toolkits ]
env:
ANSYSEM_ROOT242: '/ansys_inc/AnsysEM/v242/Linux64'
ANSYSEM_ROOT242: '/opt/AnsysEM/v242/Linux64'
ANS_NODEPCHECK: '1'
steps:
- name: "Install Git and clone project"
Expand All @@ -153,7 +153,7 @@ jobs:
- name: "Install os packages"
run: |
sudo apt update
sudo apt install libgl1-mesa-glx xvfb
sudo apt install libgl1-mesa-glx xvfb -y
- name: Create Python venv
run: |
Expand All @@ -174,8 +174,9 @@ jobs:
with:
max_attempts: 3
retry_on: error
timeout_minutes: 20
timeout_minutes: 40
command: |
export LD_LIBRARY_PATH=${{ env.ANSYSEM_ROOT242 }}/common/mono/Linux64/lib64:$LD_LIBRARY_PATH
. .venv/bin/activate
xvfb-run pytest -m "legacy" -n auto --dist loadfile -v --cov
Expand Down Expand Up @@ -295,7 +296,7 @@ jobs:
- name: Install OS packages
run: |
sudo apt update
sudo apt-get install tk
sudo apt-get install tk -y
- name: Setup Python
uses: actions/setup-python@v5
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

## What is PyEDB?

PyEDB is Python client library for processing complex and large layout designs in the
PyEDB is a Python client library for processing complex and large layout designs in the
Ansys Electronics Database (EDB) format, which stores information describing designs for
[Ansys Electronics Desktop](https://www.ansys.com/products/electronics) (AEDT).

Expand All @@ -39,7 +39,7 @@ HFSS 3D Layout, Icepak, Maxwell, Q3D, and SIwave.

EDB provides a proprietary database file format (AEDB) for efficient and fast layout design
handling and processing for building ready-to-solve projects. EDB addresses signal integrity
(SI), power integrity (PI-DC), and electro-thermal work flows. You can import an AEDB file
(SI), power integrity (PI-DC), and electro-thermal workflows. You can import an AEDB file
into AEDT to modify the layout, assign materials, and define ports, simulations, and constraints.
You can then launch any of the Ansys electromagnetic simulators.

Expand All @@ -49,7 +49,7 @@ memory, it provides the fastest and most efficient way to handle a large and com

You can also parse an AEDB file from a command line in batch in an Ansys electromagnetic simulator
like HFSS or SIwave. Thus, you can deploy completely non-graphical flows, from layout
translation through simulatiom results.
translation through simulation results.

Additionally, you can use PyAEDT to import an AEDB file into AEDT to view a project,
combine 3D designs, or perform simulation postprocessing. EDB also supports 3D component models.
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ tests = [
doc = [
"ansys-sphinx-theme>=0.10.0,<1.1",
"imageio>=2.30.0,<2.37",
"ipython>=8.13.0,<8.31",
"ipython>=8.13.0,<8.32",
"jupyterlab>=4.0.0,<4.4",
"jupytext>=1.16.0,<1.17",
"matplotlib>=3.5.0,<3.10",
Expand Down
4 changes: 2 additions & 2 deletions src/pyedb/configuration/cfg_components.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,10 +210,10 @@ def _set_port_properties_to_edb(self):
self._pyedb_obj.component_property = cp

def set_parameters_to_edb(self):
if self.enabled:
self._pyedb_obj.enabled = self.enabled
if self.type:
self._pyedb_obj.type = self.type
if self.enabled:
self._pyedb_obj.enabled = self.enabled

self._set_model_properties_to_edb()
if self._pyedb_obj.type.lower() == "ic":
Expand Down
18 changes: 9 additions & 9 deletions src/pyedb/configuration/cfg_padstacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,15 @@ def set_parameters_to_edb(self):
if self.solder_ball_parameters:
self._set_solder_parameters_to_edb(self.solder_ball_parameters)

def retrieve_parameters_from_edb(self):
self.name = self._pyedb_obj.name
self.hole_plating_thickness = self._pyedb_obj.hole_plating_thickness
self.material = self._pyedb_obj.material
self.hole_range = self._pyedb_obj.hole_range
self.pad_parameters = self._get_pad_parameters_from_edb()
self.hole_parameters = self._get_hole_parameters_from_edb()
self.solder_ball_parameters = self._get_solder_parameters_from_edb()

def _set_solder_parameters_to_edb(self, parameters):
pdef_data = self._pyedb_obj._padstack_def_data

Expand Down Expand Up @@ -158,15 +167,6 @@ def _get_solder_parameters_from_edb(self):
}
return parameters

def retrieve_parameters_from_edb(self):
self.name = self._pyedb_obj.name
self.hole_plating_thickness = self._pyedb_obj.hole_plating_thickness
self.material = self._pyedb_obj.material
self.hole_range = self._pyedb_obj.hole_range
self.pad_parameters = self._get_pad_parameters_from_edb()
self.hole_parameters = self._get_hole_parameters_from_edb()
self.solder_ball_parameters = self._get_solder_parameters_from_edb()

def _get_pad_parameters_from_edb(self):
"""Pad parameters.
Expand Down
15 changes: 7 additions & 8 deletions src/pyedb/configuration/cfg_pin_groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,17 +67,16 @@ def __init__(self, pedb, **kwargs):
def create(self):
"""Apply pin group on layout."""
if self.pins:
self._pedb.siwave.create_pin_group(self.reference_designator, list(self.pins), self.name)
pins = self.pins if isinstance(self.pins, list) else [self.pins]
self._pedb.siwave.create_pin_group(self.reference_designator, pins, self.name)
elif self.net:
if self.reference_designator in self._pedb.components.instances:
comp = self._pedb.components.instances[self.reference_designator]
else:
raise f"Component not found for creating pin group {self.name}."
pins = [p for p, obj in comp.pins.items() if obj.net_name in self.net]
nets = self.net if isinstance(self.net, list) else [self.net]
comp = self._pedb.components.instances[self.reference_designator]
pins = [p for p, obj in comp.pins.items() if obj.net_name in nets]
if not self._pedb.siwave.create_pin_group(self.reference_designator, pins, self.name):
self._pedb.logger.error(f"Failed to create pin group {self.name}")
raise RuntimeError(f"Failed to create pin group {self.name}")
else:
self._pedb.logger.error(f"No net and pins defined for defining pin group {self.name}")
raise RuntimeError(f"No net and pins defined for defining pin group {self.name}")

def export_properties(self):
if self.pins:
Expand Down
4 changes: 2 additions & 2 deletions src/pyedb/configuration/cfg_ports_sources.py
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ def _create_terminals(self):
pins = {pos_value: self._pedb.components.instances[self.reference_designator].pins[pos_value]}
pos_objs.update(pins)
else:
raise f"Wrong positive terminal type {pos_type}"
raise Exception(f"Wrong positive terminal type {pos_type}.")

self.pos_terminals = {i: j.create_terminal(i) for i, j in pos_objs.items()}
self.pos_terminals.update(pos_coor_terminal)
Expand Down Expand Up @@ -302,7 +302,7 @@ def _create_terminals(self):
terminal_name: self._pedb.components.instances[self.reference_designator].pins[neg_value]
}
else:
raise f"Wrong negative terminal type {neg_type}"
raise Exception(f"Wrong negative terminal type {neg_type}.")
self.neg_terminal = [
j.create_terminal(i) if not j.terminal else j.terminal for i, j in neg_obj.items()
][0]
Expand Down
14 changes: 9 additions & 5 deletions src/pyedb/configuration/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,13 +134,17 @@ def run(self, **kwargs):

# Configure stackup
if kwargs.get("fix_padstack_def"):
from pyedb.configuration.cfg_padstacks import CfgPadstackDefinition

pedb_defs = self._pedb.padstacks.definitions
temp = {}
for name, pdef in pedb_defs.items():
temp[name] = pdef.get_properties()
temp = []
for _, pdef in pedb_defs.items():
cfg_def = CfgPadstackDefinition(self._pedb, pdef)
cfg_def.retrieve_parameters_from_edb()
temp.append(cfg_def)
self.cfg_data.stackup.apply()
for name, pdef_p in temp.items():
pedb_defs[name].set_properties(**pdef_p)
for cfg_pdef in temp:
cfg_pdef.set_parameters_to_edb()
else:
self.cfg_data.stackup.apply()

Expand Down
6 changes: 3 additions & 3 deletions src/pyedb/dotnet/database/cell/hierarchy/pin_pair_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def resistance(self):
@resistance.setter
def resistance(self, value):
self._pin_pair_rlc.R = value
self._set_comp_prop(self._pin_pair_rlc) # pragma: no cover
self._set_comp_prop() # pragma: no cover

@property
def inductance(self):
Expand All @@ -75,7 +75,7 @@ def inductance(self):
@inductance.setter
def inductance(self, value):
self._pin_pair_rlc.L = value
self._set_comp_prop(self._pin_pair_rlc) # pragma: no cover
self._set_comp_prop() # pragma: no cover

@property
def capacitance(self):
Expand All @@ -84,7 +84,7 @@ def capacitance(self):
@capacitance.setter
def capacitance(self, value):
self._pin_pair_rlc.C = value
self._set_comp_prop(self._pin_pair_rlc) # pragma: no cover
self._set_comp_prop() # pragma: no cover

@property
def rlc_values(self): # pragma: no cover
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,15 @@ def _get_parameters(self):
def padstack_instance(self):
p_inst, _ = self._get_parameters()
return self._pedb.layout.find_object_by_id(p_inst.GetId())

@property
def layer(self):
"""Get layer of the terminal."""
_, _, layer = self._edb_object.GetParameters()
return self._pedb.stackup.all_layers[layer.GetName()]

@layer.setter
def layer(self, value):
layer = self._pedb.stackup.layers[value]._edb_layer
point_data = self._pedb.point_data(*self.location)
self._edb_object.SetParameters(point_data, layer)
12 changes: 12 additions & 0 deletions src/pyedb/dotnet/database/cell/terminal/point_terminal.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,15 @@ def create(self, name, net, location, layer, is_ref=False):
raise Exception(msg)
else:
return terminal

@property
def layer(self):
"""Get layer of the terminal."""
_, _, layer = self._edb_object.GetParameters()
return self._pedb.stackup.all_layers[layer.GetName()]

@layer.setter
def layer(self, value):
layer = self._pedb.stackup.layers[value]._edb_layer
point_data = self._pedb.point_data(*self.location)
self._edb_object.SetParameters(point_data, layer)
21 changes: 6 additions & 15 deletions src/pyedb/dotnet/database/cell/terminal/terminal.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,25 +105,16 @@ def hfss_type(self, value):
@property
def layer(self):
"""Get layer of the terminal."""
point_data = self._pedb.point_data(0, 0)
layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
if self._edb_object.GetParameters(point_data, layer):
return self._pedb.stackup.all_layers[layer.GetName()]
else:
self._pedb.logger.warning(f"No pad parameters found for terminal {self.name}")

@layer.setter
def layer(self, value):
layer = self._pedb.stackup.layers[value]._edb_layer
point_data = self._pedb.point_data(*self.location)
self._edb_object.SetParameters(point_data, layer)
return self._pedb.logger.error("Cannot determine terminal layer")

@property
def location(self):
"""Location of the terminal."""
layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
_, point_data, _ = self._edb_object.GetParameters(None, layer)
return [point_data.X.ToDouble(), point_data.Y.ToDouble()]
try:
_, point_data, _ = self._edb_object.GetParameters()
return [point_data.X.ToDouble(), point_data.Y.ToDouble()]
except:
self._pedb.logger.error("Cannot determine terminal location")

@location.setter
def location(self, value):
Expand Down
Loading

0 comments on commit b889019

Please sign in to comment.