pyedb 0.53.0__py3-none-any.whl → 0.54.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyedb might be problematic. Click here for more details.
- pyedb/__init__.py +1 -1
- pyedb/configuration/cfg_ports_sources.py +6 -8
- pyedb/configuration/configuration.py +2 -1
- pyedb/dotnet/database/cell/hierarchy/model.py +1 -1
- pyedb/dotnet/database/cell/layout.py +1 -1
- pyedb/dotnet/database/cell/layout_obj.py +3 -3
- pyedb/dotnet/database/cell/primitive/path.py +1 -1
- pyedb/dotnet/database/cell/primitive/primitive.py +8 -8
- pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +1 -1
- pyedb/dotnet/database/cell/terminal/point_terminal.py +1 -1
- pyedb/dotnet/database/cell/terminal/terminal.py +24 -26
- pyedb/dotnet/database/components.py +24 -24
- pyedb/dotnet/database/definition/component_def.py +3 -3
- pyedb/dotnet/database/definition/component_model.py +1 -1
- pyedb/dotnet/database/definition/package_def.py +1 -1
- pyedb/dotnet/database/dotnet/database.py +43 -38
- pyedb/dotnet/database/dotnet/primitive.py +16 -16
- pyedb/dotnet/database/edb_data/hfss_extent_info.py +6 -6
- pyedb/dotnet/database/edb_data/layer_data.py +14 -14
- pyedb/dotnet/database/edb_data/padstacks_data.py +12 -12
- pyedb/dotnet/database/edb_data/primitives_data.py +3 -3
- pyedb/dotnet/database/edb_data/sources.py +6 -6
- pyedb/dotnet/database/edb_data/variables.py +7 -3
- pyedb/dotnet/database/geometry/point_data.py +1 -1
- pyedb/dotnet/database/geometry/polygon_data.py +2 -4
- pyedb/dotnet/database/hfss.py +7 -7
- pyedb/dotnet/database/materials.py +2 -2
- pyedb/dotnet/database/modeler.py +8 -11
- pyedb/dotnet/database/nets.py +1 -1
- pyedb/dotnet/database/padstack.py +72 -1
- pyedb/dotnet/database/sim_setup_data/data/settings.py +24 -0
- pyedb/dotnet/database/sim_setup_data/io/siwave.py +26 -1
- pyedb/dotnet/database/siwave.py +5 -5
- pyedb/dotnet/database/stackup.py +74 -77
- pyedb/dotnet/database/utilities/heatsink.py +4 -4
- pyedb/dotnet/database/utilities/obj_base.py +1 -1
- pyedb/dotnet/database/utilities/value.py +116 -0
- pyedb/dotnet/edb.py +43 -43
- pyedb/generic/design_types.py +12 -3
- pyedb/grpc/__init__.py +0 -0
- pyedb/grpc/database/components.py +53 -17
- pyedb/grpc/database/definition/materials.py +23 -30
- pyedb/grpc/database/definition/package_def.py +15 -15
- pyedb/grpc/database/definition/padstack_def.py +51 -51
- pyedb/grpc/database/geometry/arc_data.py +7 -5
- pyedb/grpc/database/geometry/point_3d_data.py +8 -7
- pyedb/grpc/database/geometry/polygon_data.py +3 -2
- pyedb/grpc/database/hierarchy/component.py +43 -38
- pyedb/grpc/database/hierarchy/pin_pair_model.py +15 -14
- pyedb/grpc/database/hierarchy/pingroup.py +9 -9
- pyedb/grpc/database/layers/stackup_layer.py +45 -44
- pyedb/grpc/database/layout/layout.py +9 -8
- pyedb/grpc/database/layout/voltage_regulator.py +7 -7
- pyedb/grpc/database/layout_validation.py +13 -12
- pyedb/grpc/database/modeler.py +51 -54
- pyedb/grpc/database/nets.py +42 -31
- pyedb/grpc/database/padstacks.py +270 -175
- pyedb/grpc/database/ports/ports.py +5 -6
- pyedb/grpc/database/primitive/bondwire.py +8 -7
- pyedb/grpc/database/primitive/circle.py +4 -4
- pyedb/grpc/database/primitive/padstack_instance.py +18 -18
- pyedb/grpc/database/primitive/path.py +7 -7
- pyedb/grpc/database/primitive/polygon.py +3 -3
- pyedb/grpc/database/primitive/primitive.py +13 -17
- pyedb/grpc/database/primitive/rectangle.py +13 -13
- pyedb/grpc/database/simulation_setup/hfss_general_settings.py +1 -1
- pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +10 -0
- pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +17 -1
- pyedb/grpc/database/siwave.py +30 -24
- pyedb/grpc/database/source_excitations.py +333 -229
- pyedb/grpc/database/stackup.py +164 -147
- pyedb/grpc/database/terminal/bundle_terminal.py +17 -7
- pyedb/grpc/database/terminal/edge_terminal.py +10 -0
- pyedb/grpc/database/terminal/padstack_instance_terminal.py +15 -4
- pyedb/grpc/database/terminal/pingroup_terminal.py +11 -10
- pyedb/grpc/database/terminal/point_terminal.py +4 -3
- pyedb/grpc/database/terminal/terminal.py +9 -9
- pyedb/grpc/database/utility/value.py +109 -0
- pyedb/grpc/edb.py +59 -38
- pyedb/grpc/edb_init.py +0 -7
- {pyedb-0.53.0.dist-info → pyedb-0.54.0.dist-info}/METADATA +3 -3
- {pyedb-0.53.0.dist-info → pyedb-0.54.0.dist-info}/RECORD +84 -81
- {pyedb-0.53.0.dist-info → pyedb-0.54.0.dist-info}/WHEEL +0 -0
- {pyedb-0.53.0.dist-info → pyedb-0.54.0.dist-info}/licenses/LICENSE +0 -0
pyedb/grpc/edb.py
CHANGED
|
@@ -131,6 +131,7 @@ from pyedb.grpc.database.terminal.padstack_instance_terminal import (
|
|
|
131
131
|
)
|
|
132
132
|
from pyedb.grpc.database.terminal.terminal import Terminal
|
|
133
133
|
from pyedb.grpc.database.utility.constants import get_terminal_supported_boundary_types
|
|
134
|
+
from pyedb.grpc.database.utility.value import Value
|
|
134
135
|
from pyedb.grpc.edb_init import EdbInit
|
|
135
136
|
from pyedb.ipc2581.ipc2581 import Ipc2581
|
|
136
137
|
from pyedb.modeler.geometry_operators import GeometryOperators
|
|
@@ -202,14 +203,13 @@ class Edb(EdbInit):
|
|
|
202
203
|
edbversion: str = None,
|
|
203
204
|
isaedtowned: bool = False,
|
|
204
205
|
oproject=None,
|
|
205
|
-
student_version: bool = False,
|
|
206
206
|
use_ppe: bool = False,
|
|
207
207
|
control_file: str = None,
|
|
208
208
|
map_file: str = None,
|
|
209
209
|
technology_file: str = None,
|
|
210
210
|
layer_filter: str = None,
|
|
211
|
-
remove_existing_aedt: bool = False,
|
|
212
211
|
restart_rpc_server=False,
|
|
212
|
+
**kwargs,
|
|
213
213
|
):
|
|
214
214
|
edbversion = get_string_version(edbversion)
|
|
215
215
|
self._clean_variables()
|
|
@@ -291,13 +291,13 @@ class Edb(EdbInit):
|
|
|
291
291
|
return False
|
|
292
292
|
elif edbpath.endswith("edb.def"):
|
|
293
293
|
self.edbpath = os.path.dirname(edbpath)
|
|
294
|
-
self.
|
|
294
|
+
self.open(restart_rpc_server=restart_rpc_server)
|
|
295
295
|
elif not os.path.exists(os.path.join(self.edbpath, "edb.def")):
|
|
296
|
-
self.
|
|
296
|
+
self.create(restart_rpc_server=restart_rpc_server)
|
|
297
297
|
self.logger.info("EDB %s created correctly.", self.edbpath)
|
|
298
298
|
elif ".aedb" in edbpath:
|
|
299
299
|
self.edbpath = edbpath
|
|
300
|
-
self.
|
|
300
|
+
self.open(restart_rpc_server=restart_rpc_server)
|
|
301
301
|
if self.active_cell:
|
|
302
302
|
self.logger.info("EDB initialized.")
|
|
303
303
|
else:
|
|
@@ -366,6 +366,11 @@ class Edb(EdbInit):
|
|
|
366
366
|
if description: # Add the variable description if a two-item list is passed for variable_value.
|
|
367
367
|
self.__getitem__(variable_name).description = description
|
|
368
368
|
|
|
369
|
+
@property
|
|
370
|
+
def core(self) -> ansys.edb.core:
|
|
371
|
+
"""Ansys Edb Core module."""
|
|
372
|
+
return ansys.edb.core
|
|
373
|
+
|
|
369
374
|
def _check_remove_project_files(self, edbpath: str, remove_existing_aedt: bool) -> None:
|
|
370
375
|
aedt_file = os.path.splitext(edbpath)[0] + ".aedt"
|
|
371
376
|
files = [aedt_file, aedt_file + ".lock"]
|
|
@@ -397,6 +402,14 @@ class Edb(EdbInit):
|
|
|
397
402
|
self._differential_pairs = DifferentialPairs(self)
|
|
398
403
|
self._extended_nets = ExtendedNets(self)
|
|
399
404
|
|
|
405
|
+
def value(self, val):
|
|
406
|
+
"""Convert a value into a pyedb value."""
|
|
407
|
+
if isinstance(val, GrpcValue):
|
|
408
|
+
return Value(val)
|
|
409
|
+
else:
|
|
410
|
+
context = self.active_cell if not str(val).startswith("$") else self.active_db
|
|
411
|
+
return Value(GrpcValue(val, context), context)
|
|
412
|
+
|
|
400
413
|
@property
|
|
401
414
|
def cell_names(self) -> [str]:
|
|
402
415
|
"""List of all cell names in the database.
|
|
@@ -417,7 +430,7 @@ class Edb(EdbInit):
|
|
|
417
430
|
dict[str, float]
|
|
418
431
|
Variable names and values.
|
|
419
432
|
"""
|
|
420
|
-
return {i: self.active_cell.get_variable_value(i)
|
|
433
|
+
return {i: Value(self.active_cell.get_variable_value(i)) for i in self.active_cell.get_all_variable_names()}
|
|
421
434
|
|
|
422
435
|
@property
|
|
423
436
|
def project_variables(self) -> dict[str, float]:
|
|
@@ -428,7 +441,7 @@ class Edb(EdbInit):
|
|
|
428
441
|
dict[str, float]
|
|
429
442
|
Variable names and values.
|
|
430
443
|
"""
|
|
431
|
-
return {i: self.active_db.get_variable_value(i)
|
|
444
|
+
return {i: Value(self.active_db.get_variable_value(i)) for i in self.active_db.get_all_variable_names()}
|
|
432
445
|
|
|
433
446
|
@property
|
|
434
447
|
def layout_validation(self) -> LayoutValidation:
|
|
@@ -539,7 +552,11 @@ class Edb(EdbInit):
|
|
|
539
552
|
dict[str, :class:`Terminal <pyedb.grpc.database.terminal.terminal.Terminal>`]
|
|
540
553
|
Source names and objects.
|
|
541
554
|
"""
|
|
542
|
-
return
|
|
555
|
+
return {
|
|
556
|
+
k: i
|
|
557
|
+
for k, i in self.terminals.items()
|
|
558
|
+
if "source" in i.boundary_type or "terminal" in i.boundary_type or i.is_reference_terminal
|
|
559
|
+
}
|
|
543
560
|
|
|
544
561
|
@property
|
|
545
562
|
def voltage_regulator_modules(self):
|
|
@@ -565,7 +582,7 @@ class Edb(EdbInit):
|
|
|
565
582
|
dict[str, :class:`Terminal <pyedb.grpc.database.terminal.terminal.Terminal>`]
|
|
566
583
|
Probe names and objects.
|
|
567
584
|
"""
|
|
568
|
-
terms = [term for term in self.layout.terminals if term.boundary_type
|
|
585
|
+
terms = [term for term in self.layout.terminals if term.boundary_type == "voltage_probe"]
|
|
569
586
|
return {ter.name: ter for ter in terms}
|
|
570
587
|
|
|
571
588
|
def open(self, restart_rpc_server=False) -> bool:
|
|
@@ -1285,7 +1302,7 @@ class Edb(EdbInit):
|
|
|
1285
1302
|
func : str
|
|
1286
1303
|
Command to execute.
|
|
1287
1304
|
"""
|
|
1288
|
-
# return self.
|
|
1305
|
+
# return self.core.utility.utility.Command.Execute(func)
|
|
1289
1306
|
pass
|
|
1290
1307
|
|
|
1291
1308
|
def import_cadence_file(self, inputBrd, WorkDir=None, anstranslator_full_path="", use_ppe=False) -> bool:
|
|
@@ -1559,7 +1576,7 @@ class Edb(EdbInit):
|
|
|
1559
1576
|
for term in terms:
|
|
1560
1577
|
if term.type == "PointTerminal" and term.net.name in reference_list:
|
|
1561
1578
|
pd = term.get_parameters()[1]
|
|
1562
|
-
locations.append([pd.x
|
|
1579
|
+
locations.append([Value(pd.x), Value(pd.y)])
|
|
1563
1580
|
for point in locations:
|
|
1564
1581
|
pointA = GrpcPointData([point[0] - expansion_size, point[1] - expansion_size])
|
|
1565
1582
|
pointB = GrpcPointData([point[0] + expansion_size, point[1] + expansion_size])
|
|
@@ -1827,7 +1844,7 @@ class Edb(EdbInit):
|
|
|
1827
1844
|
include_pingroups=True,
|
|
1828
1845
|
inlcude_voids_in_extents=False,
|
|
1829
1846
|
):
|
|
1830
|
-
expansion_size =
|
|
1847
|
+
expansion_size = Value(expansion_size)
|
|
1831
1848
|
|
|
1832
1849
|
# validate nets in layout
|
|
1833
1850
|
net_signals = [net for net in self.layout.nets if net.name in signal_list]
|
|
@@ -1910,7 +1927,7 @@ class Edb(EdbInit):
|
|
|
1910
1927
|
self.components.delete_single_pin_rlc()
|
|
1911
1928
|
self.logger.info_timer("Single Pins components deleted")
|
|
1912
1929
|
self.components.refresh_components()
|
|
1913
|
-
return [[pt.x
|
|
1930
|
+
return [[Value(pt.x), Value(pt.y)] for pt in _poly.without_arcs().points]
|
|
1914
1931
|
|
|
1915
1932
|
def _create_cutout_multithread(
|
|
1916
1933
|
self,
|
|
@@ -1939,7 +1956,7 @@ class Edb(EdbInit):
|
|
|
1939
1956
|
if output_aedb_path:
|
|
1940
1957
|
self.save_edb_as(output_aedb_path)
|
|
1941
1958
|
self.logger.info("Cutout Multithread started.")
|
|
1942
|
-
expansion_size =
|
|
1959
|
+
expansion_size = Value(expansion_size)
|
|
1943
1960
|
|
|
1944
1961
|
timer_start = self.logger.reset_timer()
|
|
1945
1962
|
if custom_extent:
|
|
@@ -1983,17 +2000,20 @@ class Edb(EdbInit):
|
|
|
1983
2000
|
reference_pinsts = []
|
|
1984
2001
|
reference_prims = []
|
|
1985
2002
|
reference_paths = []
|
|
2003
|
+
delete_list = []
|
|
1986
2004
|
for i in self.padstacks.instances.values():
|
|
1987
2005
|
net_name = i.net_name
|
|
1988
2006
|
id = i.id
|
|
1989
2007
|
if net_name not in all_list and id not in pins_to_preserve:
|
|
1990
|
-
|
|
2008
|
+
delete_list.append(i)
|
|
2009
|
+
# i.delete()
|
|
1991
2010
|
elif net_name in reference_list and id not in pins_to_preserve:
|
|
1992
2011
|
reference_pinsts.append(i)
|
|
1993
2012
|
for i in self.modeler.primitives:
|
|
1994
2013
|
if not i.is_null and not i.net.is_null:
|
|
1995
2014
|
if i.net.name not in all_list:
|
|
1996
|
-
i.delete()
|
|
2015
|
+
# i.delete()
|
|
2016
|
+
delete_list.append(i)
|
|
1997
2017
|
elif i.net.name in reference_list and not i.is_void:
|
|
1998
2018
|
if keep_lines_as_path and isinstance(i, Path):
|
|
1999
2019
|
reference_paths.append(i)
|
|
@@ -2001,7 +2021,8 @@ class Edb(EdbInit):
|
|
|
2001
2021
|
reference_prims.append(i)
|
|
2002
2022
|
self.logger.info_timer("Net clean up")
|
|
2003
2023
|
self.logger.reset_timer()
|
|
2004
|
-
|
|
2024
|
+
for i in delete_list:
|
|
2025
|
+
i.delete()
|
|
2005
2026
|
if custom_extent and isinstance(custom_extent, list):
|
|
2006
2027
|
if custom_extent[0] != custom_extent[-1]:
|
|
2007
2028
|
custom_extent.append(custom_extent[0])
|
|
@@ -2033,7 +2054,7 @@ class Edb(EdbInit):
|
|
|
2033
2054
|
ExtentType as GrpcExtentType,
|
|
2034
2055
|
)
|
|
2035
2056
|
|
|
2036
|
-
if extent_type in ["Conforming", GrpcExtentType.CONFORMING, 1]:
|
|
2057
|
+
if extent_type in ["Conformal", "Conforming", GrpcExtentType.CONFORMING, 1]:
|
|
2037
2058
|
if extent_defeature > 0:
|
|
2038
2059
|
_poly = _poly.defeature(extent_defeature)
|
|
2039
2060
|
_poly1 = GrpcPolygonData(arcs=_poly.arc_data, closed=True)
|
|
@@ -2156,7 +2177,7 @@ class Edb(EdbInit):
|
|
|
2156
2177
|
self.save_edb()
|
|
2157
2178
|
self.logger.info_timer("Cutout completed.", timer_start)
|
|
2158
2179
|
self.logger.reset_timer()
|
|
2159
|
-
return [[pt.x
|
|
2180
|
+
return [[Value(pt.x), Value(pt.y)] for pt in _poly.without_arcs().points]
|
|
2160
2181
|
|
|
2161
2182
|
def get_conformal_polygon_from_netlist(self, netlist=None) -> Union[bool, Polygon]:
|
|
2162
2183
|
"""Returns conformal polygon data based on a netlist.
|
|
@@ -2282,7 +2303,7 @@ class Edb(EdbInit):
|
|
|
2282
2303
|
for p in p_missing:
|
|
2283
2304
|
position = GrpcPointData(p.position)
|
|
2284
2305
|
net = self.nets.find_or_create_net(p.net_name)
|
|
2285
|
-
rotation =
|
|
2306
|
+
rotation = Value(p.rotation)
|
|
2286
2307
|
sign_layers = list(self.stackup.signal_layers.keys())
|
|
2287
2308
|
if not p.start_layer: # pragma: no cover
|
|
2288
2309
|
fromlayer = self.stackup.signal_layers[sign_layers[0]]
|
|
@@ -2374,7 +2395,7 @@ class Edb(EdbInit):
|
|
|
2374
2395
|
self.logger.warning("aedb def file manually created.")
|
|
2375
2396
|
except:
|
|
2376
2397
|
pass
|
|
2377
|
-
return [[pt.x
|
|
2398
|
+
return [[Value(pt.x), Value(pt.y)] for pt in polygon_data.without_arcs().points]
|
|
2378
2399
|
|
|
2379
2400
|
@staticmethod
|
|
2380
2401
|
def write_export3d_option_config_file(path_to_output, config_dictionaries=None):
|
|
@@ -2657,12 +2678,12 @@ class Edb(EdbInit):
|
|
|
2657
2678
|
Variable value if exists, else False.
|
|
2658
2679
|
"""
|
|
2659
2680
|
if self.variable_exists(variable_name):
|
|
2660
|
-
if "$"
|
|
2661
|
-
|
|
2662
|
-
variable = next(var for var in self.active_db.get_all_variable_names())
|
|
2663
|
-
else:
|
|
2664
|
-
variable = next(var for var in self.active_cell.get_all_variable_names())
|
|
2681
|
+
if variable_name.startswith("$"):
|
|
2682
|
+
variable = next(var for var in self.active_db.get_all_variable_names())
|
|
2665
2683
|
return self.db.get_variable_value(variable)
|
|
2684
|
+
else:
|
|
2685
|
+
variable = next(var for var in self.active_cell.get_all_variable_names())
|
|
2686
|
+
return self.active_cell.get_variable_value(variable)
|
|
2666
2687
|
self.logger.info(f"Variable {variable_name} doesn't exists.")
|
|
2667
2688
|
return False
|
|
2668
2689
|
|
|
@@ -2736,11 +2757,11 @@ class Edb(EdbInit):
|
|
|
2736
2757
|
"""
|
|
2737
2758
|
if self.variable_exists(variable_name):
|
|
2738
2759
|
if variable_name in self.db.get_all_variable_names():
|
|
2739
|
-
self.db.set_variable_value(variable_name,
|
|
2760
|
+
self.db.set_variable_value(variable_name, Value(variable_value))
|
|
2740
2761
|
elif variable_name in self.active_cell.get_all_variable_names():
|
|
2741
|
-
self.active_cell.set_variable_value(variable_name,
|
|
2762
|
+
self.active_cell.set_variable_value(variable_name, Value(variable_value))
|
|
2742
2763
|
|
|
2743
|
-
def get_bounding_box(self) ->
|
|
2764
|
+
def get_bounding_box(self) -> tuple[tuple[float, float], tuple[float, float]]:
|
|
2744
2765
|
"""Get layout bounding box.
|
|
2745
2766
|
|
|
2746
2767
|
Returns
|
|
@@ -2750,7 +2771,7 @@ class Edb(EdbInit):
|
|
|
2750
2771
|
"""
|
|
2751
2772
|
lay_inst_polygon_data = [obj_inst.get_bbox() for obj_inst in self.layout_instance.query_layout_obj_instances()]
|
|
2752
2773
|
layout_bbox = GrpcPolygonData.bbox_of_polygons(lay_inst_polygon_data)
|
|
2753
|
-
return
|
|
2774
|
+
return ((Value(layout_bbox[0].x), Value(layout_bbox[0].y)), (Value(layout_bbox[1].x), Value(layout_bbox[1].y)))
|
|
2754
2775
|
|
|
2755
2776
|
def get_statistics(self, compute_area=False):
|
|
2756
2777
|
"""Get layout statistics.
|
|
@@ -3437,7 +3458,7 @@ class Edb(EdbInit):
|
|
|
3437
3458
|
_layers = {k: v for k, v in self.stackup.layers.items() if k in layer_filter}
|
|
3438
3459
|
for layer_name, layer in _layers.items():
|
|
3439
3460
|
var, val = _apply_variable(f"${layer_name}", layer.thickness)
|
|
3440
|
-
layer.thickness =
|
|
3461
|
+
layer.thickness = Value(var, self.active_db)
|
|
3441
3462
|
parameters.append(val)
|
|
3442
3463
|
if materials:
|
|
3443
3464
|
if not material_filter:
|
|
@@ -3447,14 +3468,14 @@ class Edb(EdbInit):
|
|
|
3447
3468
|
for mat_name, material in _materials.items():
|
|
3448
3469
|
if not material.conductivity or material.conductivity < 1e4:
|
|
3449
3470
|
var, val = _apply_variable(f"$epsr_{mat_name}", material.permittivity)
|
|
3450
|
-
material.permittivity =
|
|
3471
|
+
material.permittivity = Value(var, self.active_db)
|
|
3451
3472
|
parameters.append(val)
|
|
3452
3473
|
var, val = _apply_variable(f"$loss_tangent_{mat_name}", material.dielectric_loss_tangent)
|
|
3453
|
-
material.dielectric_loss_tangent =
|
|
3474
|
+
material.dielectric_loss_tangent = Value(var, self.active_db)
|
|
3454
3475
|
parameters.append(val)
|
|
3455
3476
|
else:
|
|
3456
3477
|
var, val = _apply_variable(f"$sigma_{mat_name}", material.conductivity)
|
|
3457
|
-
material.conductivity =
|
|
3478
|
+
material.conductivity = Value(var, self.active_db)
|
|
3458
3479
|
parameters.append(val)
|
|
3459
3480
|
if traces:
|
|
3460
3481
|
if not trace_net_filter:
|
|
@@ -3470,7 +3491,7 @@ class Edb(EdbInit):
|
|
|
3470
3491
|
else:
|
|
3471
3492
|
trace_width_variable = f"{path.aedt_name}"
|
|
3472
3493
|
var, val = _apply_variable(trace_width_variable, path.width)
|
|
3473
|
-
path.width =
|
|
3494
|
+
path.width = Value(var, self.active_cell)
|
|
3474
3495
|
parameters.append(val)
|
|
3475
3496
|
if not padstack_definition_filter:
|
|
3476
3497
|
if trace_net_filter:
|
|
@@ -3497,7 +3518,7 @@ class Edb(EdbInit):
|
|
|
3497
3518
|
hole_variable = f"${def_name}_hole_diameter"
|
|
3498
3519
|
if padstack_def.hole_diameter:
|
|
3499
3520
|
var, val = _apply_variable(hole_variable, padstack_def.hole_diameter)
|
|
3500
|
-
padstack_def.hole_properties =
|
|
3521
|
+
padstack_def.hole_properties = Value(var, self.active_db)
|
|
3501
3522
|
parameters.append(val)
|
|
3502
3523
|
if pads:
|
|
3503
3524
|
for layer, pad in padstack_def.pad_by_layer.items():
|
|
@@ -3712,7 +3733,7 @@ class Edb(EdbInit):
|
|
|
3712
3733
|
material="pec",
|
|
3713
3734
|
)
|
|
3714
3735
|
if launching_box_thickness:
|
|
3715
|
-
launching_box_thickness = str(
|
|
3736
|
+
launching_box_thickness = str(Value(launching_box_thickness))
|
|
3716
3737
|
cloned_edb.stackup.add_layer(
|
|
3717
3738
|
layer_name="ref",
|
|
3718
3739
|
layer_type="signal",
|
|
@@ -3747,7 +3768,7 @@ class Edb(EdbInit):
|
|
|
3747
3768
|
.parameters_values
|
|
3748
3769
|
)
|
|
3749
3770
|
else:
|
|
3750
|
-
pad_diameter =
|
|
3771
|
+
pad_diameter = Value(terminal_diameter)
|
|
3751
3772
|
_temp_circle = cloned_edb.modeler.create_circle(
|
|
3752
3773
|
layer_name="ports",
|
|
3753
3774
|
x=inst.position[0],
|
pyedb/grpc/edb_init.py
CHANGED
|
@@ -34,7 +34,6 @@ from pyedb import __version__
|
|
|
34
34
|
from pyedb.edb_logger import pyedb_logger
|
|
35
35
|
from pyedb.generic.general_methods import env_path, env_value, is_linux
|
|
36
36
|
from pyedb.grpc.rpc_session import RpcSession
|
|
37
|
-
from pyedb.misc.misc import list_installed_ansysem
|
|
38
37
|
|
|
39
38
|
|
|
40
39
|
class EdbInit(object):
|
|
@@ -43,12 +42,6 @@ class EdbInit(object):
|
|
|
43
42
|
def __init__(self, edbversion):
|
|
44
43
|
self.logger = pyedb_logger
|
|
45
44
|
self._db = None
|
|
46
|
-
if not edbversion: # pragma: no cover
|
|
47
|
-
try:
|
|
48
|
-
edbversion = "20{}.{}".format(list_installed_ansysem()[0][-3:-1], list_installed_ansysem()[0][-1:])
|
|
49
|
-
self.logger.info("Edb version " + edbversion)
|
|
50
|
-
except IndexError:
|
|
51
|
-
raise Exception("No ANSYSEM_ROOTxxx is found.")
|
|
52
45
|
self.edbversion = edbversion
|
|
53
46
|
self.logger.info("Logger is initialized in EDB.")
|
|
54
47
|
self.logger.info("legacy v%s", __version__)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyedb
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.54.0
|
|
4
4
|
Summary: Higher-Level Pythonic Ansys Electronics Data Base
|
|
5
5
|
Author-email: "ANSYS, Inc." <pyansys.core@ansys.com>
|
|
6
6
|
Maintainer-email: PyEDB developers <simon.vandenbrouck@ansys.com>
|
|
@@ -27,8 +27,8 @@ Requires-Dist: Rtree >= 1.2.0
|
|
|
27
27
|
Requires-Dist: toml == 0.10.2
|
|
28
28
|
Requires-Dist: shapely
|
|
29
29
|
Requires-Dist: scikit-rf
|
|
30
|
-
Requires-Dist: ansys-edb-core>=0.2.0
|
|
31
|
-
Requires-Dist: ansys-api-edb>=0.2.0
|
|
30
|
+
Requires-Dist: ansys-edb-core>=0.2.0
|
|
31
|
+
Requires-Dist: ansys-api-edb>=0.2.0
|
|
32
32
|
Requires-Dist: psutil
|
|
33
33
|
Requires-Dist: ansys-sphinx-theme>=1.0.0,<1.5 ; extra == "doc"
|
|
34
34
|
Requires-Dist: imageio>=2.30.0,<2.38 ; extra == "doc"
|