Skip to content

FEAT: modeler grpc compatibility #1256

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 72 commits into from
May 26, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
00250e4
grpc transition PR#1005 tracker
svandenb-dev Mar 25, 2025
534a4fb
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 1, 2025
08ee4f6
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 1, 2025
80e56ea
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 2, 2025
ed9a6d8
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 2, 2025
10bda00
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 2, 2025
647b426
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 2, 2025
3d75f93
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 2, 2025
89e41a2
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 3, 2025
3bdbbb1
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 4, 2025
6d9b264
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 9, 2025
580f542
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 10, 2025
cd224b0
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 10, 2025
b5d4dbb
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 10, 2025
a1eb46d
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 10, 2025
00f5cae
grpc test_01a_setups_frequency_sweeps
svandenb-dev Apr 11, 2025
b8b8171
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 11, 2025
49deb6c
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 14, 2025
daa31dd
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 15, 2025
ae76f6e
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 16, 2025
8f70584
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 16, 2025
1c1be82
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 17, 2025
afaac7b
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 17, 2025
9335773
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 18, 2025
11989f8
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 22, 2025
a6f2472
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 22, 2025
c5719ac
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 22, 2025
873f21d
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 22, 2025
b430d3d
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 23, 2025
a9b7abf
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 23, 2025
f3fb121
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 25, 2025
8fcdfc6
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 25, 2025
0d3635f
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 25, 2025
37ca625
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 28, 2025
c009c60
Merge remote-tracking branch 'origin/main'
svandenb-dev Apr 30, 2025
8bcfb88
Merge remote-tracking branch 'origin/main'
svandenb-dev May 2, 2025
557f752
Merge remote-tracking branch 'origin/main'
svandenb-dev May 2, 2025
3c692e4
Merge remote-tracking branch 'origin/main'
svandenb-dev May 5, 2025
c75e276
Merge remote-tracking branch 'origin/main'
svandenb-dev May 5, 2025
28d6680
grpc test fix
svandenb-dev May 5, 2025
5577313
Merge remote-tracking branch 'origin/main'
svandenb-dev May 5, 2025
659b038
Merge remote-tracking branch 'origin/main'
svandenb-dev May 5, 2025
94407a2
Merge remote-tracking branch 'origin/main'
svandenb-dev May 6, 2025
c4a17bb
Merge remote-tracking branch 'origin/main'
svandenb-dev May 6, 2025
32bbe52
Merge remote-tracking branch 'origin/main'
svandenb-dev May 6, 2025
0f250a0
Merge remote-tracking branch 'origin/main'
svandenb-dev May 6, 2025
ae2043e
Merge remote-tracking branch 'origin/main'
svandenb-dev May 7, 2025
4021a4a
Merge remote-tracking branch 'origin/main'
svandenb-dev May 7, 2025
40f583c
Merge remote-tracking branch 'origin/main'
svandenb-dev May 9, 2025
c0ebe6a
Merge remote-tracking branch 'origin/main'
svandenb-dev May 9, 2025
4c2a0f0
Merge remote-tracking branch 'origin/main'
svandenb-dev May 19, 2025
c57005d
Merge remote-tracking branch 'origin/main'
svandenb-dev May 19, 2025
d1303aa
Merge remote-tracking branch 'origin/main'
svandenb-dev May 19, 2025
bfa109d
Merge remote-tracking branch 'origin/main'
svandenb-dev May 21, 2025
0d47568
Merge remote-tracking branch 'origin/main'
svandenb-dev May 21, 2025
4ddf579
Merge remote-tracking branch 'origin/main'
svandenb-dev May 21, 2025
3ff21cc
Merge remote-tracking branch 'origin/main'
svandenb-dev May 21, 2025
f53930f
Merge remote-tracking branch 'origin/main'
svandenb-dev May 22, 2025
948c17f
test dotnet grpc compatibility test_modeler_polygons
svandenb-dev May 22, 2025
ccd6a0c
test dotnet grpc compatibility test_modeler_create_polygon
svandenb-dev May 22, 2025
d02798c
test dotnet grpc compatibility test_modeler_create_polygon
svandenb-dev May 22, 2025
6731f1d
test dotnet grpc compatibility test_modeler_create_polygon
svandenb-dev May 22, 2025
75cd236
test dotnet grpc compatibility test_modeler_add_void
svandenb-dev May 22, 2025
6627b9b
test dotnet grpc compatibility test_156_check_path_length
svandenb-dev May 22, 2025
595e197
test dotnet grpc compatibility test_duplicate
svandenb-dev May 22, 2025
ccbdfb8
test dotnet grpc compatibility test_arbitrary_wave_ports
svandenb-dev May 22, 2025
2358ca3
test dotnet grpc compatibility test_arbitrary_wave_ports
svandenb-dev May 22, 2025
996d80b
test dotnet grpc compatibility test_arbitrary_wave_ports
svandenb-dev May 23, 2025
d02a496
Merge remote-tracking branch 'origin/main'
svandenb-dev May 23, 2025
61f1972
Merge branch 'main' into modeler-grpc-compatibility
svandenb-dev May 23, 2025
ef13994
test dotnet grpc compatibility modeler
svandenb-dev May 25, 2025
925e9ea
test dotnet grpc unit test edb
svandenb-dev May 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/pyedb/dotnet/database/edb_data/primitives_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -522,9 +522,9 @@ def points(self, arc_segments=6):
xt, yt = self._app._active_cell.primitive._get_points_for_plot(my_net_points, arc_segments)
if not xt:
return []
x, y = GeometryOperators.orient_polygon(xt, yt, clockwise=True)
return x, y
x, y = list(GeometryOperators.orient_polygon(xt, yt, clockwise=True))
return [x, y]
except:
x = []
y = []
return x, y
return [x, y]
6 changes: 3 additions & 3 deletions src/pyedb/dotnet/database/edb_data/variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def value_string(self):
str

"""
return self._pedb.get_variable(self.name).tostring
return self._var_server.GetVariableValue(self.name)[1].ToString()

@property
def value_object(self):
Expand All @@ -77,11 +77,11 @@ def value(self):
-------
float
"""
return self._pedb.get_variable(self.name).tofloat
return self._var_server.GetVariableValue(self.name)[1].ToDouble()

@value.setter
def value(self, value):
self._pedb.change_design_variable_value(self.name, value)
self._var_server.SetVariableValue(self.name, self._pedb.edb_value(value))

@property
def description(self):
Expand Down
42 changes: 38 additions & 4 deletions src/pyedb/dotnet/database/modeler.py
Original file line number Diff line number Diff line change
Expand Up @@ -629,7 +629,7 @@ def create_trace(

return primitive

def create_polygon(self, main_shape, layer_name, voids=[], net_name=""):
def create_polygon(self, main_shape=None, layer_name="", voids=[], net_name="", points=None):
"""Create a polygon based on a list of points and voids.

Parameters
Expand All @@ -646,13 +646,40 @@ def create_polygon(self, main_shape, layer_name, voids=[], net_name=""):
List of shape objects for voids or points that creates the shapes. The default is``[]``.
net_name : str, optional
Name of the net. The default is ``""``.
points : list, optional
Added for compatibility with grpc.

Returns
-------
bool, :class:`dotnet.database.edb_data.primitives.Primitive`
Polygon when successful, ``False`` when failed.
"""
from pyedb.dotnet.database.geometry.polygon_data import PolygonData

if main_shape:
warnings.warn(
"main_shape argument will be deprecated soon with grpc version, use points instead.", DeprecationWarning
)

net = self._pedb.nets.find_or_create_net(net_name)
if points:
arcs = []
if isinstance(points, PolygonData):
points = points.points
for _ in range(len(points)):
arcs.append(
self._edb.Geometry.ArcData(
self._pedb.point_data(0, 0),
self._pedb.point_data(0, 0),
)
)
polygonData = self._edb.Geometry.PolygonData.CreateFromArcs(convert_py_list_to_net_list(arcs), True)

for idx, i in enumerate(points):
pdata_0 = self._pedb.edb_value(i[0])
pdata_1 = self._pedb.edb_value(i[1])
new_points = self._edb.Geometry.PointData(pdata_0, pdata_1)
polygonData.SetPoint(idx, new_points)
if isinstance(main_shape, list):
arcs = []
for _ in range(len(main_shape)):
Expand All @@ -673,9 +700,14 @@ def create_polygon(self, main_shape, layer_name, voids=[], net_name=""):
elif isinstance(main_shape, Modeler.Shape):
polygonData = self.shape_to_polygon_data(main_shape)
else:
polygonData = main_shape
if not polygonData or polygonData.IsNull():
raise RuntimeError("Failed to create main shape polygon data")
if not points:
polygonData = main_shape
if isinstance(polygonData, PolygonData):
if not polygonData.points:
raise RuntimeError("Failed to create main shape polygon data")
else:
if polygonData.IsNull():
raise RuntimeError("Failed to create main shape polygon data")
for void in voids:
if isinstance(void, list):
void = self.Shape("polygon", points=void)
Expand All @@ -689,6 +721,8 @@ def create_polygon(self, main_shape, layer_name, voids=[], net_name=""):
self._logger.error("Failed to create void polygon data")
return False
polygonData.AddHole(voidPolygonData)
if isinstance(polygonData, PolygonData):
polygonData = polygonData._edb_object
polygon = self._pedb._edb.Cell.Primitive.Polygon.Create(
self._active_layout, layer_name, net.net_obj, polygonData
)
Expand Down
18 changes: 10 additions & 8 deletions src/pyedb/dotnet/edb.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
import pyedb.dotnet.database.dotnet.database
from pyedb.dotnet.database.dotnet.database import Database
from pyedb.dotnet.database.edb_data.design_options import EdbDesignOptions
from pyedb.dotnet.database.edb_data.edbvalue import EdbValue
from pyedb.dotnet.database.edb_data.ports import (
BundleWavePort,
CircuitPort,
Expand Down Expand Up @@ -461,9 +460,9 @@ def variables(self):
"""
all_vars = dict()
for i, j in self.project_variables.items():
all_vars[i] = j
all_vars[i] = j.value
for i, j in self.design_variables.items():
all_vars[i] = j
all_vars[i] = j.value
return all_vars

@property
Expand Down Expand Up @@ -3245,10 +3244,13 @@ def get_variable(self, variable_name):
-------
:class:`pyedb.dotnet.database.edb_data.edbvalue.EdbValue`
"""
var_server = self.variable_exists(variable_name)
if var_server[0]:
tuple_value = var_server[1].GetVariableValue(variable_name)
return EdbValue(tuple_value[1])

for i, j in self.project_variables.items():
if i == variable_name:
return j
for i, j in self.design_variables.items():
if i == variable_name:
return j
self.logger.info("Variable %s doesn't exists.", variable_name)
return None

Expand Down Expand Up @@ -4724,6 +4726,6 @@ def export_gds_comp_xml(self, comps_to_export, gds_comps_unit="mm", control_path
def get_variable_value(self, variable_name):
"""Added to get closer architecture as for grpc."""
if variable_name in self.variables:
return self.variables[variable_name].value
return self.variables[variable_name]
else:
return False
2 changes: 1 addition & 1 deletion src/pyedb/grpc/database/primitive/path.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def length(self):
"""
center_line_arcs = self._edb_object.cast().center_line.arc_data
path_length = 0.0
for arc in center_line_arcs[: int(len(center_line_arcs) / 2)]:
for arc in center_line_arcs:
path_length += arc.length
end_cap_style = self.get_end_cap_style()
if end_cap_style:
Expand Down
47 changes: 28 additions & 19 deletions src/pyedb/grpc/edb.py
Original file line number Diff line number Diff line change
Expand Up @@ -2821,39 +2821,43 @@ def get_variable(self, variable_name):
self.logger.info(f"Variable {variable_name} doesn't exists.")
return False

def add_project_variable(self, variable_name, variable_value):
def add_project_variable(self, variable_name, variable_value, description=None):
"""Add a variable to database. The variable will have the prefix `$`.

Parameters
----------
variable_name : str
Name of the variable. Name can be provided without ``$`` prefix.
variable_value : str, float
Value of the variable with units.
----------
variable_name : str
Name of the variable. Name can be provided without ``$`` prefix.
variable_value : str, float
Value of the variable with units.
description : str, optional.
Add variable description.

Returns
-------
bool
Returns
-------
bool

Examples
--------
Examples
--------

>>> from pyedb import Edb
>>> edb_app = Edb()
>>> boolean_1, ant_length = edb_app.add_project_variable("my_local_variable", "1cm")
>>> print(edb_app["$my_local_variable"]) #using getitem
>>> edb_app["$my_local_variable"] = "1cm" #using setitem
>>> from pyedb import Edb
>>> edb_app = Edb()
>>> boolean_1, ant_length = edb_app.add_project_variable("my_local_variable", "1cm")
>>> print(edb_app["$my_local_variable"]) #using getitem
>>> edb_app["$my_local_variable"] = "1cm" #using setitem

"""
if not variable_name.startswith("$"):
variable_name = f"${variable_name}"
if not self.variable_exists(variable_name):
return self.active_db.add_variable(variable_name, variable_value)
var = self.active_db.add_variable(variable_name, variable_value)
if description:
self.active_db.set_variable_desc(name=variable_name, desc=description)
else:
self.logger.error(f"Variable {variable_name} already exists.")
return False

def add_design_variable(self, variable_name, variable_value, is_parameter=False):
def add_design_variable(self, variable_name, variable_value, is_parameter=False, description=None):
"""Add a variable to edb. The variable can be a design one or a project variable (using ``$`` prefix).

Parameters
Expand All @@ -2866,6 +2870,8 @@ def add_design_variable(self, variable_name, variable_value, is_parameter=False)
is_parameter : bool, optional
Whether to add the variable as a local variable. The default is ``False``.
When ``True``, the variable is added as a parameter default.
description : str, optional
Add variable description.

Returns
-------
Expand All @@ -2887,7 +2893,10 @@ def add_design_variable(self, variable_name, variable_value, is_parameter=False)
if variable_name.startswith("$"):
variable_name = variable_name[1:]
if not self.variable_exists(variable_name):
return self.active_cell.add_variable(variable_name, variable_value)
var = self.active_cell.add_variable(variable_name, variable_value)
if description:
self.active_cell.set_variable_desc(name=variable_name, desc=description)
return var
else:
self.logger.error(f"Variable {variable_name} already exists.")
return False
Expand Down
Loading
Loading