pyedb 0.50.0__py3-none-any.whl → 0.51.2__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 +79 -239
- pyedb/configuration/configuration.py +27 -0
- pyedb/dotnet/clr_module.py +9 -3
- pyedb/dotnet/database/cell/hierarchy/component.py +3 -3
- pyedb/dotnet/database/cell/layout.py +10 -1
- pyedb/dotnet/database/dotnet/database.py +0 -2
- pyedb/dotnet/database/edb_data/padstacks_data.py +13 -0
- pyedb/dotnet/database/layout_validation.py +17 -13
- pyedb/dotnet/database/modeler.py +0 -1
- pyedb/dotnet/edb.py +7 -1
- pyedb/generic/design_types.py +183 -62
- pyedb/grpc/database/components.py +604 -652
- pyedb/grpc/database/control_file.py +597 -155
- pyedb/grpc/database/definition/component_def.py +17 -14
- pyedb/grpc/database/definition/materials.py +27 -27
- pyedb/grpc/database/definition/package_def.py +8 -8
- pyedb/grpc/database/definition/padstack_def.py +31 -33
- pyedb/grpc/database/definitions.py +36 -2
- pyedb/grpc/database/geometry/arc_data.py +5 -5
- pyedb/grpc/database/geometry/point_3d_data.py +3 -3
- pyedb/grpc/database/geometry/polygon_data.py +5 -5
- pyedb/grpc/database/hfss.py +412 -395
- pyedb/grpc/database/hierarchy/component.py +67 -58
- pyedb/grpc/database/hierarchy/pin_pair_model.py +6 -6
- pyedb/grpc/database/hierarchy/pingroup.py +13 -11
- pyedb/grpc/database/hierarchy/s_parameter_model.py +1 -1
- pyedb/grpc/database/hierarchy/spice_model.py +1 -1
- pyedb/grpc/database/layers/layer.py +2 -2
- pyedb/grpc/database/layers/stackup_layer.py +26 -23
- pyedb/grpc/database/layout/layout.py +12 -12
- pyedb/grpc/database/layout/voltage_regulator.py +8 -8
- pyedb/grpc/database/layout_validation.py +58 -7
- pyedb/grpc/database/modeler.py +248 -245
- pyedb/grpc/database/net/differential_pair.py +4 -4
- pyedb/grpc/database/net/extended_net.py +7 -8
- pyedb/grpc/database/net/net.py +57 -46
- pyedb/grpc/database/nets.py +362 -116
- pyedb/grpc/database/padstacks.py +259 -178
- pyedb/grpc/database/ports/ports.py +23 -17
- pyedb/grpc/database/primitive/padstack_instance.py +45 -30
- pyedb/grpc/database/primitive/path.py +6 -6
- pyedb/grpc/database/primitive/polygon.py +9 -9
- pyedb/grpc/database/primitive/primitive.py +21 -21
- pyedb/grpc/database/primitive/rectangle.py +1 -1
- pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +1 -1
- pyedb/grpc/database/simulation_setup/hfss_general_settings.py +1 -1
- pyedb/grpc/database/simulation_setup/hfss_settings_options.py +1 -1
- pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +6 -6
- pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +2 -2
- pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +2 -2
- pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +1 -1
- pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +3 -3
- pyedb/grpc/database/siwave.py +226 -214
- pyedb/grpc/database/source_excitations.py +307 -40
- pyedb/grpc/database/stackup.py +461 -283
- pyedb/grpc/database/terminal/bundle_terminal.py +12 -12
- pyedb/grpc/database/terminal/edge_terminal.py +6 -5
- pyedb/grpc/database/terminal/padstack_instance_terminal.py +13 -13
- pyedb/grpc/database/terminal/pingroup_terminal.py +12 -12
- pyedb/grpc/database/terminal/point_terminal.py +6 -6
- pyedb/grpc/database/terminal/terminal.py +26 -26
- pyedb/grpc/database/utility/heat_sink.py +5 -5
- pyedb/grpc/database/utility/hfss_extent_info.py +21 -21
- pyedb/grpc/database/utility/layout_statistics.py +13 -13
- pyedb/grpc/database/utility/rlc.py +3 -3
- pyedb/grpc/database/utility/sources.py +1 -1
- pyedb/grpc/database/utility/sweep_data_distribution.py +1 -1
- pyedb/grpc/edb.py +542 -739
- pyedb/grpc/edb_init.py +50 -3
- {pyedb-0.50.0.dist-info → pyedb-0.51.2.dist-info}/METADATA +1 -1
- {pyedb-0.50.0.dist-info → pyedb-0.51.2.dist-info}/RECORD +74 -75
- pyedb/grpc/database/utility/simulation_configuration.py +0 -3305
- {pyedb-0.50.0.dist-info → pyedb-0.51.2.dist-info}/LICENSE +0 -0
- {pyedb-0.50.0.dist-info → pyedb-0.51.2.dist-info}/WHEEL +0 -0
|
@@ -48,7 +48,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
@property
|
|
51
|
-
def type(self):
|
|
51
|
+
def type(self) -> str:
|
|
52
52
|
"""Layer type.
|
|
53
53
|
|
|
54
54
|
Returns
|
|
@@ -139,7 +139,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
139
139
|
)
|
|
140
140
|
|
|
141
141
|
@property
|
|
142
|
-
def lower_elevation(self):
|
|
142
|
+
def lower_elevation(self) -> float:
|
|
143
143
|
"""Lower elevation.
|
|
144
144
|
|
|
145
145
|
Returns
|
|
@@ -155,7 +155,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
155
155
|
super(StackupLayer, self.__class__).lower_elevation.__set__(self, GrpcValue(value))
|
|
156
156
|
|
|
157
157
|
@property
|
|
158
|
-
def fill_material(self):
|
|
158
|
+
def fill_material(self) -> str:
|
|
159
159
|
"""The layer's fill material.
|
|
160
160
|
|
|
161
161
|
Returns
|
|
@@ -172,7 +172,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
172
172
|
self.set_fill_material(value)
|
|
173
173
|
|
|
174
174
|
@property
|
|
175
|
-
def upper_elevation(self):
|
|
175
|
+
def upper_elevation(self) -> float:
|
|
176
176
|
"""Upper elevation.
|
|
177
177
|
|
|
178
178
|
Returns
|
|
@@ -183,7 +183,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
183
183
|
return round(super().upper_elevation.value, 9)
|
|
184
184
|
|
|
185
185
|
@property
|
|
186
|
-
def is_negative(self):
|
|
186
|
+
def is_negative(self) -> bool:
|
|
187
187
|
"""Determine whether this layer is a negative layer.
|
|
188
188
|
|
|
189
189
|
Returns
|
|
@@ -205,7 +205,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
205
205
|
self.negative = value
|
|
206
206
|
|
|
207
207
|
@property
|
|
208
|
-
def is_stackup_layer(self):
|
|
208
|
+
def is_stackup_layer(self) -> bool:
|
|
209
209
|
"""Testing if layer is stackup layer.
|
|
210
210
|
|
|
211
211
|
Returns
|
|
@@ -217,7 +217,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
217
217
|
return False
|
|
218
218
|
|
|
219
219
|
@property
|
|
220
|
-
def material(self):
|
|
220
|
+
def material(self) -> str:
|
|
221
221
|
"""Material.
|
|
222
222
|
|
|
223
223
|
Returns
|
|
@@ -232,7 +232,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
232
232
|
self.set_material(name)
|
|
233
233
|
|
|
234
234
|
@property
|
|
235
|
-
def conductivity(self):
|
|
235
|
+
def conductivity(self) -> float:
|
|
236
236
|
"""Material conductivity.
|
|
237
237
|
|
|
238
238
|
Returns
|
|
@@ -246,7 +246,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
246
246
|
return None
|
|
247
247
|
|
|
248
248
|
@property
|
|
249
|
-
def permittivity(self):
|
|
249
|
+
def permittivity(self) -> float:
|
|
250
250
|
"""Material permittivity.
|
|
251
251
|
|
|
252
252
|
Returns
|
|
@@ -260,7 +260,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
260
260
|
return None
|
|
261
261
|
|
|
262
262
|
@property
|
|
263
|
-
def loss_tangent(self):
|
|
263
|
+
def loss_tangent(self) -> float:
|
|
264
264
|
"""Material loss_tangent.
|
|
265
265
|
|
|
266
266
|
Returns
|
|
@@ -274,7 +274,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
274
274
|
return None
|
|
275
275
|
|
|
276
276
|
@property
|
|
277
|
-
def dielectric_fill(self):
|
|
277
|
+
def dielectric_fill(self) -> str:
|
|
278
278
|
"""Material name of the layer dielectric fill.
|
|
279
279
|
|
|
280
280
|
Returns
|
|
@@ -295,7 +295,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
295
295
|
pass
|
|
296
296
|
|
|
297
297
|
@property
|
|
298
|
-
def thickness(self):
|
|
298
|
+
def thickness(self) -> float:
|
|
299
299
|
"""Layer thickness.
|
|
300
300
|
|
|
301
301
|
Returns
|
|
@@ -310,7 +310,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
310
310
|
super(StackupLayer, self.__class__).thickness.__set__(self, GrpcValue(value))
|
|
311
311
|
|
|
312
312
|
@property
|
|
313
|
-
def etch_factor(self):
|
|
313
|
+
def etch_factor(self) -> float:
|
|
314
314
|
"""Layer etching factor.
|
|
315
315
|
|
|
316
316
|
Returns
|
|
@@ -329,7 +329,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
329
329
|
super(StackupLayer, self.__class__).etch_factor.__set__(self, GrpcValue(value))
|
|
330
330
|
|
|
331
331
|
@property
|
|
332
|
-
def top_hallhuray_nodule_radius(self):
|
|
332
|
+
def top_hallhuray_nodule_radius(self) -> float:
|
|
333
333
|
"""Huray model nodule radius on layer top.
|
|
334
334
|
|
|
335
335
|
Returns
|
|
@@ -357,7 +357,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
357
357
|
pass
|
|
358
358
|
|
|
359
359
|
@property
|
|
360
|
-
def top_hallhuray_surface_ratio(self):
|
|
360
|
+
def top_hallhuray_surface_ratio(self) -> float:
|
|
361
361
|
"""Huray model surface ratio on layer top.
|
|
362
362
|
|
|
363
363
|
Returns
|
|
@@ -385,7 +385,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
385
385
|
pass
|
|
386
386
|
|
|
387
387
|
@property
|
|
388
|
-
def bottom_hallhuray_nodule_radius(self):
|
|
388
|
+
def bottom_hallhuray_nodule_radius(self) -> float:
|
|
389
389
|
"""Huray model nodule radius on layer bottom.
|
|
390
390
|
|
|
391
391
|
Returns
|
|
@@ -413,7 +413,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
413
413
|
pass
|
|
414
414
|
|
|
415
415
|
@property
|
|
416
|
-
def bottom_hallhuray_surface_ratio(self):
|
|
416
|
+
def bottom_hallhuray_surface_ratio(self) -> float:
|
|
417
417
|
"""Huray model surface ratio on layer bottom.
|
|
418
418
|
|
|
419
419
|
Returns
|
|
@@ -441,7 +441,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
441
441
|
pass
|
|
442
442
|
|
|
443
443
|
@property
|
|
444
|
-
def side_hallhuray_nodule_radius(self):
|
|
444
|
+
def side_hallhuray_nodule_radius(self) -> float:
|
|
445
445
|
"""Huray model nodule radius on layer sides.
|
|
446
446
|
|
|
447
447
|
Returns
|
|
@@ -469,7 +469,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
469
469
|
pass
|
|
470
470
|
|
|
471
471
|
@property
|
|
472
|
-
def side_hallhuray_surface_ratio(self):
|
|
472
|
+
def side_hallhuray_surface_ratio(self) -> float:
|
|
473
473
|
"""Huray model surface ratio on layer sides.
|
|
474
474
|
|
|
475
475
|
Returns
|
|
@@ -496,7 +496,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
496
496
|
pass
|
|
497
497
|
|
|
498
498
|
@property
|
|
499
|
-
def top_groisse_roughness(self):
|
|
499
|
+
def top_groisse_roughness(self) -> float:
|
|
500
500
|
"""Groisse model on layer top.
|
|
501
501
|
|
|
502
502
|
Returns
|
|
@@ -524,7 +524,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
524
524
|
pass
|
|
525
525
|
|
|
526
526
|
@property
|
|
527
|
-
def bottom_groisse_roughness(self):
|
|
527
|
+
def bottom_groisse_roughness(self) -> float:
|
|
528
528
|
"""Groisse model on layer bottom.
|
|
529
529
|
|
|
530
530
|
Returns
|
|
@@ -552,7 +552,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
552
552
|
pass
|
|
553
553
|
|
|
554
554
|
@property
|
|
555
|
-
def side_groisse_roughness(self):
|
|
555
|
+
def side_groisse_roughness(self) -> float:
|
|
556
556
|
"""Groisse model on layer bottom.
|
|
557
557
|
|
|
558
558
|
Returns
|
|
@@ -586,7 +586,7 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
586
586
|
huray_surface_ratio="2.9",
|
|
587
587
|
groisse_roughness="1um",
|
|
588
588
|
apply_on_surface="all",
|
|
589
|
-
):
|
|
589
|
+
) -> bool:
|
|
590
590
|
"""Assign roughness model on this layer.
|
|
591
591
|
|
|
592
592
|
Parameters
|
|
@@ -603,6 +603,9 @@ class StackupLayer(GrpcStackupLayer):
|
|
|
603
603
|
Where to assign roughness model. The default is ``"all"``. Options are ``"top"``, ``"bottom"``,
|
|
604
604
|
``"side"``.
|
|
605
605
|
|
|
606
|
+
Returns
|
|
607
|
+
-------
|
|
608
|
+
bool
|
|
606
609
|
"""
|
|
607
610
|
regions = []
|
|
608
611
|
if apply_on_surface == "all":
|
|
@@ -72,7 +72,7 @@ class Layout(GrpcLayout):
|
|
|
72
72
|
return self._pedb._active_cell
|
|
73
73
|
|
|
74
74
|
@property
|
|
75
|
-
def primitives(self):
|
|
75
|
+
def primitives(self) -> list[any]:
|
|
76
76
|
prims = []
|
|
77
77
|
for prim in super().primitives:
|
|
78
78
|
if isinstance(prim, ansys.edb.core.primitive.path.Path):
|
|
@@ -90,7 +90,7 @@ class Layout(GrpcLayout):
|
|
|
90
90
|
return prims
|
|
91
91
|
|
|
92
92
|
@property
|
|
93
|
-
def terminals(self):
|
|
93
|
+
def terminals(self) -> list[any]:
|
|
94
94
|
"""Get terminals belonging to active layout.
|
|
95
95
|
|
|
96
96
|
Returns
|
|
@@ -113,7 +113,7 @@ class Layout(GrpcLayout):
|
|
|
113
113
|
return temp
|
|
114
114
|
|
|
115
115
|
@property
|
|
116
|
-
def nets(self):
|
|
116
|
+
def nets(self) -> list[Net]:
|
|
117
117
|
"""Nets.
|
|
118
118
|
|
|
119
119
|
Returns
|
|
@@ -124,7 +124,7 @@ class Layout(GrpcLayout):
|
|
|
124
124
|
return [Net(self._pedb, net) for net in super().nets]
|
|
125
125
|
|
|
126
126
|
@property
|
|
127
|
-
def bondwires(self):
|
|
127
|
+
def bondwires(self) -> list[Bondwire]:
|
|
128
128
|
"""Bondwires.
|
|
129
129
|
|
|
130
130
|
Returns
|
|
@@ -135,7 +135,7 @@ class Layout(GrpcLayout):
|
|
|
135
135
|
return [i for i in self.primitives if i.primitive_type == "bondwire"]
|
|
136
136
|
|
|
137
137
|
@property
|
|
138
|
-
def groups(self):
|
|
138
|
+
def groups(self) -> list[Component]:
|
|
139
139
|
"""Groups
|
|
140
140
|
|
|
141
141
|
Returns
|
|
@@ -147,7 +147,7 @@ class Layout(GrpcLayout):
|
|
|
147
147
|
return [Component(self._pedb, g) for g in self._pedb.active_cell.layout.groups]
|
|
148
148
|
|
|
149
149
|
@property
|
|
150
|
-
def pin_groups(self):
|
|
150
|
+
def pin_groups(self) -> list[PinGroup]:
|
|
151
151
|
"""Pin groups.
|
|
152
152
|
|
|
153
153
|
Returns
|
|
@@ -159,7 +159,7 @@ class Layout(GrpcLayout):
|
|
|
159
159
|
return [PinGroup(self._pedb, i) for i in self._pedb.active_cell.layout.pin_groups]
|
|
160
160
|
|
|
161
161
|
@property
|
|
162
|
-
def net_classes(self):
|
|
162
|
+
def net_classes(self) -> list[NetClass]:
|
|
163
163
|
"""Net classes.
|
|
164
164
|
|
|
165
165
|
Returns
|
|
@@ -171,7 +171,7 @@ class Layout(GrpcLayout):
|
|
|
171
171
|
return [NetClass(self._pedb, i) for i in self._pedb.active_cell.layout.net_classes]
|
|
172
172
|
|
|
173
173
|
@property
|
|
174
|
-
def extended_nets(self):
|
|
174
|
+
def extended_nets(self) -> list[ExtendedNet]:
|
|
175
175
|
"""Extended nets.
|
|
176
176
|
|
|
177
177
|
Returns
|
|
@@ -183,7 +183,7 @@ class Layout(GrpcLayout):
|
|
|
183
183
|
return [ExtendedNet(self._pedb, i) for i in self._pedb.active_cell.layout.extended_nets]
|
|
184
184
|
|
|
185
185
|
@property
|
|
186
|
-
def differential_pairs(self):
|
|
186
|
+
def differential_pairs(self) -> list[DifferentialPair]:
|
|
187
187
|
"""Differential pairs.
|
|
188
188
|
|
|
189
189
|
Returns
|
|
@@ -195,13 +195,13 @@ class Layout(GrpcLayout):
|
|
|
195
195
|
return [DifferentialPair(self._pedb, i) for i in self._pedb.active_cell.layout.differential_pairs]
|
|
196
196
|
|
|
197
197
|
@property
|
|
198
|
-
def padstack_instances(self):
|
|
198
|
+
def padstack_instances(self) -> list[PadstackInstance]:
|
|
199
199
|
"""Get all padstack instances in a list."""
|
|
200
200
|
return [PadstackInstance(self._pedb, i) for i in self._pedb.active_cell.layout.padstack_instances]
|
|
201
201
|
|
|
202
202
|
#
|
|
203
203
|
@property
|
|
204
|
-
def voltage_regulators(self):
|
|
204
|
+
def voltage_regulators(self) -> list[VoltageRegulator]:
|
|
205
205
|
"""Voltage regulators.
|
|
206
206
|
|
|
207
207
|
List[:class:`VoltageRegulator <pyedb.grpc.database.layout.voltage_regulator.VoltageRegulator>`.
|
|
@@ -212,7 +212,7 @@ class Layout(GrpcLayout):
|
|
|
212
212
|
|
|
213
213
|
def find_primitive(
|
|
214
214
|
self, layer_name: Union[str, list] = None, name: Union[str, list] = None, net_name: Union[str, list] = None
|
|
215
|
-
) -> list:
|
|
215
|
+
) -> list[any]:
|
|
216
216
|
"""Find a primitive objects by layer name.
|
|
217
217
|
Parameters
|
|
218
218
|
----------
|
|
@@ -25,7 +25,7 @@ from ansys.edb.core.layout.voltage_regulator import (
|
|
|
25
25
|
)
|
|
26
26
|
from ansys.edb.core.utility.value import Value as GrpcValue
|
|
27
27
|
|
|
28
|
-
from pyedb.
|
|
28
|
+
from pyedb.grpc.database.primitive.padstack_instance import PadstackInstance
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class VoltageRegulator(GrpcVoltageRegulator):
|
|
@@ -62,7 +62,7 @@ class VoltageRegulator(GrpcVoltageRegulator):
|
|
|
62
62
|
self.group = self._pedb.components.instances[value]
|
|
63
63
|
|
|
64
64
|
@property
|
|
65
|
-
def load_regulator_current(self):
|
|
65
|
+
def load_regulator_current(self) -> float:
|
|
66
66
|
"""Load regulator current value
|
|
67
67
|
|
|
68
68
|
Returns
|
|
@@ -77,7 +77,7 @@ class VoltageRegulator(GrpcVoltageRegulator):
|
|
|
77
77
|
self.load_regulation_percent = GrpcValue(value)
|
|
78
78
|
|
|
79
79
|
@property
|
|
80
|
-
def load_regulation_percent(self):
|
|
80
|
+
def load_regulation_percent(self) -> float:
|
|
81
81
|
"""Retrieve load regulation percent value.
|
|
82
82
|
|
|
83
83
|
Returns
|
|
@@ -92,7 +92,7 @@ class VoltageRegulator(GrpcVoltageRegulator):
|
|
|
92
92
|
self.load_regulation_percent = GrpcValue(value)
|
|
93
93
|
|
|
94
94
|
@property
|
|
95
|
-
def negative_remote_sense_pin(self):
|
|
95
|
+
def negative_remote_sense_pin(self) -> PadstackInstance:
|
|
96
96
|
"""Retrieve negative remote sense pin.
|
|
97
97
|
|
|
98
98
|
Returns
|
|
@@ -107,11 +107,11 @@ class VoltageRegulator(GrpcVoltageRegulator):
|
|
|
107
107
|
if isinstance(value, int):
|
|
108
108
|
if value in self._pedb.padsatcks.instances:
|
|
109
109
|
self.neg_remote_sense_pin = self._pedb.padsatcks.instances[value]
|
|
110
|
-
elif isinstance(value,
|
|
110
|
+
elif isinstance(value, PadstackInstance):
|
|
111
111
|
self.neg_remote_sense_pin = value
|
|
112
112
|
|
|
113
113
|
@property
|
|
114
|
-
def positive_remote_sense_pin(self):
|
|
114
|
+
def positive_remote_sense_pin(self) -> PadstackInstance:
|
|
115
115
|
"""Retrieve positive remote sense pin.
|
|
116
116
|
|
|
117
117
|
Returns
|
|
@@ -128,13 +128,13 @@ class VoltageRegulator(GrpcVoltageRegulator):
|
|
|
128
128
|
self.positive_remote_sense_pin = self._pedb.padsatcks.instances[value]
|
|
129
129
|
if not self.component:
|
|
130
130
|
self.component = self._pedb.padsatcks.instances[value].component.name
|
|
131
|
-
elif isinstance(value,
|
|
131
|
+
elif isinstance(value, PadstackInstance):
|
|
132
132
|
self.positive_remote_sense_pin = value
|
|
133
133
|
if not self.component:
|
|
134
134
|
self.component = value.component.name
|
|
135
135
|
|
|
136
136
|
@property
|
|
137
|
-
def voltage(self):
|
|
137
|
+
def voltage(self) -> float:
|
|
138
138
|
"""Retrieve voltage value.
|
|
139
139
|
|
|
140
140
|
Returns
|
|
@@ -55,10 +55,12 @@ class LayoutValidation:
|
|
|
55
55
|
|
|
56
56
|
Examples
|
|
57
57
|
--------
|
|
58
|
-
|
|
59
58
|
>>> edb = Edb("edb_file")
|
|
60
|
-
>>>
|
|
61
|
-
|
|
59
|
+
>>> # Find shorts without fixing
|
|
60
|
+
>>> shorts = edb.layout_validation.dc_shorts()
|
|
61
|
+
>>>
|
|
62
|
+
>>> # Find and fix shorts on specific nets
|
|
63
|
+
>>> fixed_shorts = edb.layout_validation.dc_shorts(net_list=["GND", "VCC"], fix=True)
|
|
62
64
|
"""
|
|
63
65
|
if not net_list:
|
|
64
66
|
net_list = list(self._pedb.nets.nets.keys())
|
|
@@ -154,8 +156,17 @@ class LayoutValidation:
|
|
|
154
156
|
|
|
155
157
|
Examples
|
|
156
158
|
--------
|
|
157
|
-
|
|
158
|
-
>>>
|
|
159
|
+
>>> edb = Edb("edb_file")
|
|
160
|
+
>>> # Find disjoint nets on all nets
|
|
161
|
+
>>> new_nets = edb.layout_validation.disjoint_nets()
|
|
162
|
+
>>>
|
|
163
|
+
>>> # Clean disjoints on specific nets with advanced options
|
|
164
|
+
>>> cleaned = edb.layout_validation.disjoint_nets(
|
|
165
|
+
... net_list=["GND"],
|
|
166
|
+
... keep_only_main_net=True,
|
|
167
|
+
... clean_disjoints_less_than=1e-6,
|
|
168
|
+
... order_by_area=True
|
|
169
|
+
... ))
|
|
159
170
|
"""
|
|
160
171
|
timer_start = self._pedb.logger.reset_timer()
|
|
161
172
|
|
|
@@ -274,6 +285,15 @@ class LayoutValidation:
|
|
|
274
285
|
Returns
|
|
275
286
|
-------
|
|
276
287
|
bool
|
|
288
|
+
|
|
289
|
+
Examples
|
|
290
|
+
--------
|
|
291
|
+
>>> edb = Edb("edb_file")
|
|
292
|
+
>>> # Fix self-intersections on all nets
|
|
293
|
+
>>> edb.layout_validation.fix_self_intersections()
|
|
294
|
+
>>>
|
|
295
|
+
>>> # Fix self-intersections on specific nets
|
|
296
|
+
>>> edb.layout_validation.fix_self_intersections(net_list=["RF_line"])
|
|
277
297
|
"""
|
|
278
298
|
if not net_list:
|
|
279
299
|
net_list = list(self._pedb.nets.nets.keys())
|
|
@@ -290,7 +310,17 @@ class LayoutValidation:
|
|
|
290
310
|
return True
|
|
291
311
|
|
|
292
312
|
def illegal_net_names(self, fix=False):
|
|
293
|
-
"""Find and fix illegal net names.
|
|
313
|
+
"""Find and fix illegal net names.
|
|
314
|
+
|
|
315
|
+
Examples
|
|
316
|
+
--------
|
|
317
|
+
>>> edb = Edb("edb_file")
|
|
318
|
+
>>> # Identify illegal net names
|
|
319
|
+
>>> edb.layout_validation.illegal_net_names()
|
|
320
|
+
>>>
|
|
321
|
+
>>> # Find and automatically fix illegal names
|
|
322
|
+
>>> edb.layout_validation.illegal_net_names(fix=True)
|
|
323
|
+
"""
|
|
294
324
|
pattern = r"[\(\)\\\/:;*?<>\'\"|`~$]"
|
|
295
325
|
|
|
296
326
|
nets = self._pedb.nets.nets
|
|
@@ -307,7 +337,17 @@ class LayoutValidation:
|
|
|
307
337
|
return
|
|
308
338
|
|
|
309
339
|
def illegal_rlc_values(self, fix=False) -> list[str]:
|
|
310
|
-
"""Find and fix RLC illegal values.
|
|
340
|
+
"""Find and fix RLC illegal values.
|
|
341
|
+
|
|
342
|
+
Examples
|
|
343
|
+
--------
|
|
344
|
+
>>> edb = Edb("edb_file")
|
|
345
|
+
>>> # Identify components with illegal RLC values
|
|
346
|
+
>>> bad_components = edb.layout_validation.illegal_rlc_values()
|
|
347
|
+
>>>
|
|
348
|
+
>>> # Automatically fix invalid inductor values
|
|
349
|
+
>>> edb.layout_validation.illegal_rlc_values(fix=True)
|
|
350
|
+
"""
|
|
311
351
|
inductors = self._pedb.components.inductors
|
|
312
352
|
|
|
313
353
|
temp = []
|
|
@@ -321,6 +361,17 @@ class LayoutValidation:
|
|
|
321
361
|
return temp
|
|
322
362
|
|
|
323
363
|
def padstacks_no_name(self, fix=False):
|
|
364
|
+
"""Identify and fix padstacks without names.
|
|
365
|
+
|
|
366
|
+
Examples
|
|
367
|
+
--------
|
|
368
|
+
>>> edb = Edb("edb_file")
|
|
369
|
+
>>> # Report unnamed padstacks
|
|
370
|
+
>>> edb.layout_validation.padstacks_no_name()
|
|
371
|
+
>>>
|
|
372
|
+
>>> # Automatically assign names to unnamed padstacks
|
|
373
|
+
>>> edb.layout_validation.padstacks_no_name(fix=True)
|
|
374
|
+
"""
|
|
324
375
|
pds = self._pedb.layout.padstack_instances
|
|
325
376
|
counts = 0
|
|
326
377
|
via_count = 1
|