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/dotnet/database/hfss.py
CHANGED
|
@@ -70,7 +70,7 @@ class EdbHfss(object):
|
|
|
70
70
|
-------
|
|
71
71
|
Ansys.Ansoft.Edb
|
|
72
72
|
"""
|
|
73
|
-
return self._pedb.
|
|
73
|
+
return self._pedb.core
|
|
74
74
|
|
|
75
75
|
@property
|
|
76
76
|
def _active_layout(self):
|
|
@@ -884,7 +884,7 @@ class EdbHfss(object):
|
|
|
884
884
|
]
|
|
885
885
|
)
|
|
886
886
|
pos_edge_term.SetProductSolverOption(
|
|
887
|
-
self._pedb.
|
|
887
|
+
self._pedb.core.ProductId.Designer,
|
|
888
888
|
"HFSS",
|
|
889
889
|
prop,
|
|
890
890
|
)
|
|
@@ -939,7 +939,7 @@ class EdbHfss(object):
|
|
|
939
939
|
if not layer_alignment == "Upper":
|
|
940
940
|
layer_alignment = "Lower"
|
|
941
941
|
pos_edge_term.SetProductSolverOption(
|
|
942
|
-
self._pedb.
|
|
942
|
+
self._pedb.core.ProductId.Designer,
|
|
943
943
|
"HFSS",
|
|
944
944
|
"HFSS('HFSS Type'='Gap(coax)', Orientation='Horizontal', 'Layer Alignment'='{}')".format(layer_alignment),
|
|
945
945
|
)
|
|
@@ -1144,7 +1144,7 @@ class EdbHfss(object):
|
|
|
1144
1144
|
ref_prim = [
|
|
1145
1145
|
prim
|
|
1146
1146
|
for prim in reference_net.primitives
|
|
1147
|
-
if prim.polygon_data.
|
|
1147
|
+
if prim.polygon_data.core.PointInPolygon(mid_pt_data)
|
|
1148
1148
|
]
|
|
1149
1149
|
if ref_prim:
|
|
1150
1150
|
self._logger.info("Reference primitive found")
|
|
@@ -1401,7 +1401,7 @@ class EdbHfss(object):
|
|
|
1401
1401
|
l_inst = layout.GetLayoutInstance()
|
|
1402
1402
|
|
|
1403
1403
|
for inst in simulation_setup.components: # pragma: no cover
|
|
1404
|
-
comp = self._pedb.
|
|
1404
|
+
comp = self._pedb.core.cell.hierarchy.component.FindByName(layout, inst)
|
|
1405
1405
|
if comp.IsNull():
|
|
1406
1406
|
continue
|
|
1407
1407
|
|
|
@@ -1473,7 +1473,7 @@ class EdbHfss(object):
|
|
|
1473
1473
|
cmp_names = []
|
|
1474
1474
|
ii = 0
|
|
1475
1475
|
for cc in cmp_names:
|
|
1476
|
-
cmp = self._pedb.
|
|
1476
|
+
cmp = self._pedb.core.cell.hierarchy.component.FindByName(self._active_layout, cc)
|
|
1477
1477
|
if cmp.IsNull():
|
|
1478
1478
|
self._logger.warning("RenamePorts: could not find component {0}".format(cc))
|
|
1479
1479
|
continue
|
|
@@ -1512,7 +1512,7 @@ class EdbHfss(object):
|
|
|
1512
1512
|
"'PEC Launch Width'='0mm')"
|
|
1513
1513
|
)
|
|
1514
1514
|
for tt in terms:
|
|
1515
|
-
tt.SetProductSolverOption(self._edb.
|
|
1515
|
+
tt.SetProductSolverOption(self._edb.core.ProductId.Designer, "HFSS", option)
|
|
1516
1516
|
return True
|
|
1517
1517
|
|
|
1518
1518
|
def _get_terminals_bbox(self, comp, l_inst, terminals_only):
|
|
@@ -111,7 +111,7 @@ class Material(object):
|
|
|
111
111
|
|
|
112
112
|
def __init__(self, edb: Edb, material_def):
|
|
113
113
|
self.__edb: Edb = edb
|
|
114
|
-
self.__edb_definition = edb.
|
|
114
|
+
self.__edb_definition = edb.core.definition
|
|
115
115
|
self.__name: str = material_def.GetName()
|
|
116
116
|
self.__material_def = material_def
|
|
117
117
|
self.__dc_model = material_def.GetDielectricMaterialModel()
|
|
@@ -553,7 +553,7 @@ class Materials(object):
|
|
|
553
553
|
|
|
554
554
|
def __init__(self, edb: Edb):
|
|
555
555
|
self.__edb = edb
|
|
556
|
-
self.__edb_definition = edb.
|
|
556
|
+
self.__edb_definition = edb.core.definition
|
|
557
557
|
self.__syslib = os.path.join(self.__edb.base_path, "syslib")
|
|
558
558
|
|
|
559
559
|
def __contains__(self, item):
|
pyedb/dotnet/database/modeler.py
CHANGED
|
@@ -70,7 +70,7 @@ class Modeler(object):
|
|
|
70
70
|
|
|
71
71
|
@property
|
|
72
72
|
def _edb(self):
|
|
73
|
-
return self._pedb.
|
|
73
|
+
return self._pedb.core
|
|
74
74
|
|
|
75
75
|
def _get_edb_value(self, value):
|
|
76
76
|
return self._pedb.edb_value(value)
|
|
@@ -289,20 +289,20 @@ class Modeler(object):
|
|
|
289
289
|
if not isinstance(point, list) and len(point) == 2:
|
|
290
290
|
self._logger.error("Provided point must be a list of two values")
|
|
291
291
|
return False
|
|
292
|
-
pt = self._edb.geometry.point_data(point[0], point[1])
|
|
293
|
-
if
|
|
294
|
-
nets
|
|
295
|
-
|
|
292
|
+
pt = self._edb.geometry.point_data(self._pedb.edb_value(point[0]), self._pedb.edb_value(point[1]))
|
|
293
|
+
if nets:
|
|
294
|
+
if isinstance(nets, str):
|
|
295
|
+
nets = [nets]
|
|
296
296
|
_nets = []
|
|
297
297
|
for net in nets:
|
|
298
298
|
if net not in self._pedb.nets:
|
|
299
|
-
self._logger.
|
|
299
|
+
self._logger.warning(
|
|
300
300
|
f"Net {net} used to find primitive from layer point and net not found, skipping it."
|
|
301
301
|
)
|
|
302
302
|
else:
|
|
303
303
|
_nets.append(self._pedb.nets[net].net_obj)
|
|
304
304
|
if _nets:
|
|
305
|
-
nets = _nets
|
|
305
|
+
nets = convert_py_list_to_net_list(_nets)
|
|
306
306
|
_obj_instances = list(self._pedb.layout_instance.FindLayoutObjInstance(pt, None, nets).Items)
|
|
307
307
|
returned_obj = []
|
|
308
308
|
if layer:
|
|
@@ -324,10 +324,7 @@ class Modeler(object):
|
|
|
324
324
|
else:
|
|
325
325
|
for obj in _obj_instances:
|
|
326
326
|
obj_id = obj.GetLayoutObj().GetId()
|
|
327
|
-
[
|
|
328
|
-
returned_obj.append(Primitive(p, self._pedb))
|
|
329
|
-
for p in [obj for obj in self.primitives if obj.id == obj_id]
|
|
330
|
-
]
|
|
327
|
+
[returned_obj.append(p) for p in [obj for obj in self.primitives if obj.id == obj_id]]
|
|
331
328
|
return returned_obj
|
|
332
329
|
|
|
333
330
|
def get_polygon_bounding_box(self, polygon):
|
pyedb/dotnet/database/nets.py
CHANGED
|
@@ -23,7 +23,9 @@
|
|
|
23
23
|
"""
|
|
24
24
|
This module contains the `EdbPadstacks` class.
|
|
25
25
|
"""
|
|
26
|
+
from collections import defaultdict
|
|
26
27
|
import math
|
|
28
|
+
from typing import Dict, List
|
|
27
29
|
import warnings
|
|
28
30
|
|
|
29
31
|
import numpy as np
|
|
@@ -82,7 +84,7 @@ class EdbPadstacks(object):
|
|
|
82
84
|
@property
|
|
83
85
|
def _edb(self):
|
|
84
86
|
""" """
|
|
85
|
-
return self._pedb.
|
|
87
|
+
return self._pedb.core
|
|
86
88
|
|
|
87
89
|
def _get_edb_value(self, value):
|
|
88
90
|
return self._pedb.edb_value(value)
|
|
@@ -1871,3 +1873,72 @@ class EdbPadstacks(object):
|
|
|
1871
1873
|
all_instances[item].delete()
|
|
1872
1874
|
|
|
1873
1875
|
return True
|
|
1876
|
+
|
|
1877
|
+
@staticmethod
|
|
1878
|
+
def dbscan(
|
|
1879
|
+
padstack: Dict[int, List[float]], max_distance: float = 1e-3, min_samples: int = 5
|
|
1880
|
+
) -> Dict[int, List[str]]:
|
|
1881
|
+
"""
|
|
1882
|
+
density based spatial clustering for padstack instances
|
|
1883
|
+
|
|
1884
|
+
Parameters
|
|
1885
|
+
----------
|
|
1886
|
+
padstack : dict.
|
|
1887
|
+
padstack id: [x, y]
|
|
1888
|
+
|
|
1889
|
+
max_distance: float
|
|
1890
|
+
maximum distance between two points to be included in one cluster
|
|
1891
|
+
|
|
1892
|
+
min_samples: int
|
|
1893
|
+
minimum number of points that a cluster must have
|
|
1894
|
+
|
|
1895
|
+
Returns
|
|
1896
|
+
-------
|
|
1897
|
+
dict
|
|
1898
|
+
clusters {cluster label: [padstack ids]} <
|
|
1899
|
+
"""
|
|
1900
|
+
|
|
1901
|
+
padstack_ids = list(padstack.keys())
|
|
1902
|
+
xy_array = np.array([padstack[pid] for pid in padstack_ids])
|
|
1903
|
+
n = len(padstack_ids)
|
|
1904
|
+
|
|
1905
|
+
labels = -1 * np.ones(n, dtype=int)
|
|
1906
|
+
visited = np.zeros(n, dtype=bool)
|
|
1907
|
+
cluster_id = 0
|
|
1908
|
+
|
|
1909
|
+
def region_query(point_idx):
|
|
1910
|
+
distances = np.linalg.norm(xy_array - xy_array[point_idx], axis=1)
|
|
1911
|
+
return np.where(distances <= max_distance)[0]
|
|
1912
|
+
|
|
1913
|
+
def expand_cluster(point_idx, neighbors):
|
|
1914
|
+
nonlocal cluster_id
|
|
1915
|
+
labels[point_idx] = cluster_id
|
|
1916
|
+
i = 0
|
|
1917
|
+
while i < len(neighbors):
|
|
1918
|
+
neighbor_idx = neighbors[i]
|
|
1919
|
+
if not visited[neighbor_idx]:
|
|
1920
|
+
visited[neighbor_idx] = True
|
|
1921
|
+
neighbor_neighbors = region_query(neighbor_idx)
|
|
1922
|
+
if len(neighbor_neighbors) >= min_samples:
|
|
1923
|
+
neighbors = np.concatenate((neighbors, neighbor_neighbors))
|
|
1924
|
+
if labels[neighbor_idx] == -1:
|
|
1925
|
+
labels[neighbor_idx] = cluster_id
|
|
1926
|
+
i += 1
|
|
1927
|
+
|
|
1928
|
+
for point_idx in range(n):
|
|
1929
|
+
if visited[point_idx]:
|
|
1930
|
+
continue
|
|
1931
|
+
visited[point_idx] = True
|
|
1932
|
+
neighbors = region_query(point_idx)
|
|
1933
|
+
if len(neighbors) < min_samples:
|
|
1934
|
+
labels[point_idx] = -1
|
|
1935
|
+
else:
|
|
1936
|
+
expand_cluster(point_idx, neighbors)
|
|
1937
|
+
cluster_id += 1
|
|
1938
|
+
|
|
1939
|
+
# group point IDs by label
|
|
1940
|
+
clusters = defaultdict(list)
|
|
1941
|
+
for i, label in enumerate(labels):
|
|
1942
|
+
clusters[int(label)].append(padstack_ids[i])
|
|
1943
|
+
|
|
1944
|
+
return dict(clusters)
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
# SOFTWARE.
|
|
22
|
+
import warnings
|
|
22
23
|
|
|
23
24
|
from pyedb.dotnet.database.sim_setup_data.data.adaptive_frequency_data import (
|
|
24
25
|
AdaptiveFrequencyData,
|
|
@@ -901,6 +902,24 @@ class HfssSolverSettings(object):
|
|
|
901
902
|
def enhanced_low_freq_accuracy(self):
|
|
902
903
|
"""Whether to enable legacy low-frequency sampling.
|
|
903
904
|
|
|
905
|
+
.. deprecated:: pyedb 0.54.0
|
|
906
|
+
Use :func:`enhanced_low_frequency_accuracy` instead.
|
|
907
|
+
|
|
908
|
+
Returns
|
|
909
|
+
-------
|
|
910
|
+
bool
|
|
911
|
+
``True`` if low frequency accuracy is used, ``False`` otherwise.
|
|
912
|
+
"""
|
|
913
|
+
warnings.warn(
|
|
914
|
+
"`enhanced_low_freq_accuracy` is deprecated, use `enhanced_low_frequency_accuracy` instead.",
|
|
915
|
+
DeprecationWarning,
|
|
916
|
+
)
|
|
917
|
+
return self._hfss_solver_settings.EnhancedLowFreqAccuracy
|
|
918
|
+
|
|
919
|
+
@property
|
|
920
|
+
def enhanced_low_frequency_accuracy(self):
|
|
921
|
+
"""Whether to enable legacy low-frequency sampling.
|
|
922
|
+
|
|
904
923
|
Returns
|
|
905
924
|
-------
|
|
906
925
|
bool
|
|
@@ -913,6 +932,11 @@ class HfssSolverSettings(object):
|
|
|
913
932
|
self._hfss_solver_settings.EnhancedLowFreqAccuracy = value
|
|
914
933
|
self._parent._update_setup()
|
|
915
934
|
|
|
935
|
+
@enhanced_low_frequency_accuracy.setter
|
|
936
|
+
def enhanced_low_frequency_accuracy(self, value):
|
|
937
|
+
self._hfss_solver_settings.EnhancedLowFreqAccuracy = value
|
|
938
|
+
self._parent._update_setup()
|
|
939
|
+
|
|
916
940
|
@property
|
|
917
941
|
def order_basis(self):
|
|
918
942
|
"""Order of the basic functions for HFSS.
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
# SOFTWARE.
|
|
22
|
+
import warnings
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
def _parse_value(v):
|
|
@@ -92,7 +93,7 @@ class AdvancedSettings(SettingsBase):
|
|
|
92
93
|
def __init__(self, parent):
|
|
93
94
|
super().__init__(parent)
|
|
94
95
|
self.defaults = {
|
|
95
|
-
"
|
|
96
|
+
"mesh_automatic": True,
|
|
96
97
|
"ignore_non_functional_pads": True,
|
|
97
98
|
"include_coplane_coupling": True,
|
|
98
99
|
"include_fringe_coupling": True,
|
|
@@ -339,6 +340,26 @@ class AdvancedSettings(SettingsBase):
|
|
|
339
340
|
depending on drawing size, number of modes, and/or maximum sweep
|
|
340
341
|
frequency.
|
|
341
342
|
|
|
343
|
+
.. deprecated:: 0.54.0
|
|
344
|
+
Use :func:`automatic_mesh` instead.
|
|
345
|
+
|
|
346
|
+
Returns
|
|
347
|
+
-------
|
|
348
|
+
bool
|
|
349
|
+
``True`` if automatic mesh is used, ``False`` otherwise.
|
|
350
|
+
"""
|
|
351
|
+
warnings.warn(
|
|
352
|
+
"`automatic_mesh` is deprecated." "Use `mesh_automatic` instead.",
|
|
353
|
+
DeprecationWarning,
|
|
354
|
+
)
|
|
355
|
+
return self.sim_setup_info.simulation_settings.AdvancedSettings.MeshAutoMatic
|
|
356
|
+
|
|
357
|
+
@property
|
|
358
|
+
def mesh_automatic(self):
|
|
359
|
+
"""Whether to automatically pick a suitable mesh refinement frequency,
|
|
360
|
+
depending on drawing size, number of modes, and/or maximum sweep
|
|
361
|
+
frequency.
|
|
362
|
+
|
|
342
363
|
Returns
|
|
343
364
|
-------
|
|
344
365
|
bool
|
|
@@ -492,6 +513,10 @@ class AdvancedSettings(SettingsBase):
|
|
|
492
513
|
|
|
493
514
|
@automatic_mesh.setter
|
|
494
515
|
def automatic_mesh(self, value):
|
|
516
|
+
self.mesh_automatic = value
|
|
517
|
+
|
|
518
|
+
@mesh_automatic.setter
|
|
519
|
+
def mesh_automatic(self, value):
|
|
495
520
|
edb_setup_info = self.sim_setup_info
|
|
496
521
|
|
|
497
522
|
edb_setup_info.simulation_settings.AdvancedSettings.MeshAutoMatic = value
|
pyedb/dotnet/database/siwave.py
CHANGED
|
@@ -70,7 +70,7 @@ class EdbSiwave(object):
|
|
|
70
70
|
@property
|
|
71
71
|
def _edb(self):
|
|
72
72
|
"""EDB."""
|
|
73
|
-
return self._pedb.
|
|
73
|
+
return self._pedb.core
|
|
74
74
|
|
|
75
75
|
def _get_edb_value(self, value):
|
|
76
76
|
"""Get the Edb value."""
|
|
@@ -1492,7 +1492,7 @@ class EdbSiwave(object):
|
|
|
1492
1492
|
"""Icepak default setting. If "True", only resistor are active in Icepak simulation.
|
|
1493
1493
|
The power dissipation of the resistors are calculated from DC results.
|
|
1494
1494
|
"""
|
|
1495
|
-
siwave_id = self._pedb.
|
|
1495
|
+
siwave_id = self._pedb.core.ProductId.SIWave
|
|
1496
1496
|
cell = self._pedb.active_cell._active_cell
|
|
1497
1497
|
_, value = cell.GetProductProperty(siwave_id, 422, "")
|
|
1498
1498
|
return bool(value)
|
|
@@ -1524,20 +1524,20 @@ class EdbSiwave(object):
|
|
|
1524
1524
|
@icepak_use_minimal_comp_defaults.setter
|
|
1525
1525
|
def icepak_use_minimal_comp_defaults(self, value):
|
|
1526
1526
|
value = "True" if bool(value) else ""
|
|
1527
|
-
siwave_id = self._pedb.
|
|
1527
|
+
siwave_id = self._pedb.core.ProductId.SIWave
|
|
1528
1528
|
cell = self._pedb.active_cell._active_cell
|
|
1529
1529
|
cell.SetProductProperty(siwave_id, 422, value)
|
|
1530
1530
|
|
|
1531
1531
|
@property
|
|
1532
1532
|
def icepak_component_file(self):
|
|
1533
1533
|
"""Icepak component file path."""
|
|
1534
|
-
siwave_id = self._pedb.
|
|
1534
|
+
siwave_id = self._pedb.core.ProductId.SIWave
|
|
1535
1535
|
cell = self._pedb.active_cell._active_cell
|
|
1536
1536
|
_, value = cell.GetProductProperty(siwave_id, 420, "")
|
|
1537
1537
|
return value
|
|
1538
1538
|
|
|
1539
1539
|
@icepak_component_file.setter
|
|
1540
1540
|
def icepak_component_file(self, value):
|
|
1541
|
-
siwave_id = self._pedb.
|
|
1541
|
+
siwave_id = self._pedb.core.ProductId.SIWave
|
|
1542
1542
|
cell = self._pedb.active_cell._active_cell
|
|
1543
1543
|
cell.SetProductProperty(siwave_id, 420, value)
|