pyedb 0.49.0__py3-none-any.whl → 0.50.1__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_modeler.py +42 -11
- pyedb/configuration/cfg_ports_sources.py +9 -1
- pyedb/dotnet/database/cell/hierarchy/component.py +6 -6
- pyedb/dotnet/database/components.py +3 -3
- pyedb/dotnet/database/edb_data/padstacks_data.py +13 -0
- pyedb/dotnet/database/edb_data/primitives_data.py +3 -3
- pyedb/dotnet/database/edb_data/variables.py +3 -3
- pyedb/dotnet/database/materials.py +16 -16
- pyedb/dotnet/database/modeler.py +38 -4
- pyedb/dotnet/database/sim_setup_data/data/settings.py +28 -0
- pyedb/dotnet/database/stackup.py +1 -0
- pyedb/dotnet/database/utilities/hfss_simulation_setup.py +5 -6
- pyedb/dotnet/edb.py +22 -20
- pyedb/extensions/__init__.py +0 -0
- pyedb/extensions/via_design_backend.py +681 -0
- pyedb/grpc/database/components.py +537 -686
- pyedb/grpc/database/control_file.py +458 -149
- pyedb/grpc/database/definition/component_def.py +17 -14
- pyedb/grpc/database/definition/materials.py +60 -60
- pyedb/grpc/database/definition/package_def.py +8 -8
- pyedb/grpc/database/definition/padstack_def.py +31 -33
- pyedb/grpc/database/definitions.py +6 -4
- 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 +399 -397
- pyedb/grpc/database/hierarchy/component.py +60 -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 +144 -44
- pyedb/grpc/database/layout/layout.py +12 -12
- pyedb/grpc/database/layout/voltage_regulator.py +8 -8
- pyedb/grpc/database/layout_validation.py +5 -5
- 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 +139 -122
- pyedb/grpc/database/padstacks.py +174 -190
- pyedb/grpc/database/ports/ports.py +23 -17
- pyedb/grpc/database/primitive/padstack_instance.py +45 -30
- pyedb/grpc/database/primitive/path.py +7 -7
- 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 +166 -214
- pyedb/grpc/database/source_excitations.py +156 -0
- pyedb/grpc/database/stackup.py +415 -316
- 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 +524 -764
- {pyedb-0.49.0.dist-info → pyedb-0.50.1.dist-info}/METADATA +1 -1
- {pyedb-0.49.0.dist-info → pyedb-0.50.1.dist-info}/RECORD +77 -77
- pyedb/extensions/pre_layout_design_toolkit/via_design.py +0 -1151
- pyedb/grpc/database/utility/simulation_configuration.py +0 -3305
- {pyedb-0.49.0.dist-info → pyedb-0.50.1.dist-info}/LICENSE +0 -0
- {pyedb-0.49.0.dist-info → pyedb-0.50.1.dist-info}/WHEEL +0 -0
pyedb/grpc/database/nets.py
CHANGED
|
@@ -44,99 +44,101 @@ class Nets(CommonNets):
|
|
|
44
44
|
"""
|
|
45
45
|
|
|
46
46
|
def __getitem__(self, name):
|
|
47
|
-
"""Get
|
|
47
|
+
"""Get a net by name.
|
|
48
48
|
|
|
49
49
|
Parameters
|
|
50
50
|
----------
|
|
51
|
-
name : str
|
|
51
|
+
name : str
|
|
52
|
+
Name of the net to retrieve.
|
|
52
53
|
|
|
53
54
|
Returns
|
|
54
55
|
-------
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
pyedb.grpc.database.net.net.Net
|
|
57
|
+
Net object if found, otherwise None.
|
|
57
58
|
"""
|
|
58
59
|
return Net(self._pedb, Net.find_by_name(self._active_layout, name))
|
|
59
60
|
|
|
60
61
|
def __contains__(self, name):
|
|
61
|
-
"""
|
|
62
|
+
"""Check if a net exists in the layout.
|
|
62
63
|
|
|
63
64
|
Parameters
|
|
64
65
|
----------
|
|
65
66
|
name : str
|
|
67
|
+
Name of the net to check.
|
|
66
68
|
|
|
67
69
|
Returns
|
|
68
70
|
-------
|
|
69
71
|
bool
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
True if the net exists, False otherwise.
|
|
72
73
|
"""
|
|
73
74
|
return name in self.nets
|
|
74
75
|
|
|
75
76
|
def __init__(self, p_edb):
|
|
77
|
+
"""Initialize the Nets class."""
|
|
76
78
|
CommonNets.__init__(self, p_edb)
|
|
77
79
|
self._nets_by_comp_dict = {}
|
|
78
80
|
self._comps_by_nets_dict = {}
|
|
79
81
|
|
|
80
82
|
@property
|
|
81
83
|
def _edb(self):
|
|
82
|
-
""" """
|
|
84
|
+
"""EDB object."""
|
|
83
85
|
return self._pedb
|
|
84
86
|
|
|
85
87
|
@property
|
|
86
88
|
def _active_layout(self):
|
|
87
|
-
""" """
|
|
89
|
+
"""Active layout."""
|
|
88
90
|
return self._pedb.active_layout
|
|
89
91
|
|
|
90
92
|
@property
|
|
91
93
|
def _layout(self):
|
|
92
|
-
""" """
|
|
94
|
+
"""Current layout."""
|
|
93
95
|
return self._pedb.layout
|
|
94
96
|
|
|
95
97
|
@property
|
|
96
98
|
def _cell(self):
|
|
97
|
-
""" """
|
|
99
|
+
"""Current cell."""
|
|
98
100
|
return self._pedb.cell
|
|
99
101
|
|
|
100
102
|
@property
|
|
101
103
|
def db(self):
|
|
102
|
-
"""
|
|
104
|
+
"""Database object."""
|
|
103
105
|
return self._pedb.active_db
|
|
104
106
|
|
|
105
107
|
@property
|
|
106
108
|
def _logger(self):
|
|
107
|
-
"""
|
|
109
|
+
"""Logger instance."""
|
|
108
110
|
return self._pedb.logger
|
|
109
111
|
|
|
110
112
|
@property
|
|
111
113
|
def nets(self):
|
|
112
|
-
"""
|
|
114
|
+
"""All nets in the layout.
|
|
113
115
|
|
|
114
116
|
Returns
|
|
115
117
|
-------
|
|
116
|
-
dict[str,
|
|
117
|
-
Dictionary of
|
|
118
|
+
dict[str, pyedb.grpc.database.net.net.Net]
|
|
119
|
+
Dictionary of net names to Net objects.
|
|
118
120
|
"""
|
|
119
121
|
return {i.name: i for i in self._pedb.layout.nets}
|
|
120
122
|
|
|
121
123
|
@property
|
|
122
124
|
def netlist(self):
|
|
123
|
-
"""
|
|
125
|
+
"""List of all net names.
|
|
124
126
|
|
|
125
127
|
Returns
|
|
126
128
|
-------
|
|
127
|
-
list
|
|
128
|
-
|
|
129
|
+
list[str]
|
|
130
|
+
Names of all nets in the layout.
|
|
129
131
|
"""
|
|
130
132
|
return list(self.nets.keys())
|
|
131
133
|
|
|
132
134
|
@property
|
|
133
135
|
def signal(self):
|
|
134
|
-
"""Signal nets.
|
|
136
|
+
"""Signal nets in the layout.
|
|
135
137
|
|
|
136
138
|
Returns
|
|
137
139
|
-------
|
|
138
|
-
dict[str,
|
|
139
|
-
Dictionary of signal
|
|
140
|
+
dict[str, pyedb.grpc.database.net.net.Net]
|
|
141
|
+
Dictionary of signal net names to Net objects.
|
|
140
142
|
"""
|
|
141
143
|
nets = {}
|
|
142
144
|
for net, value in self.nets.items():
|
|
@@ -146,12 +148,12 @@ class Nets(CommonNets):
|
|
|
146
148
|
|
|
147
149
|
@property
|
|
148
150
|
def power(self):
|
|
149
|
-
"""Power nets.
|
|
151
|
+
"""Power and ground nets in the layout.
|
|
150
152
|
|
|
151
153
|
Returns
|
|
152
154
|
-------
|
|
153
|
-
dict[str,
|
|
154
|
-
Dictionary of power
|
|
155
|
+
dict[str, pyedb.grpc.database.net.net.Net]
|
|
156
|
+
Dictionary of power/ground net names to Net objects.
|
|
155
157
|
"""
|
|
156
158
|
nets = {}
|
|
157
159
|
for net, value in self.nets.items():
|
|
@@ -160,17 +162,20 @@ class Nets(CommonNets):
|
|
|
160
162
|
return nets
|
|
161
163
|
|
|
162
164
|
def eligible_power_nets(self, threshold=0.3):
|
|
163
|
-
"""
|
|
164
|
-
|
|
165
|
+
"""Identify nets eligible for power/ground classification based on area ratio.
|
|
166
|
+
|
|
167
|
+
Uses the same algorithm implemented in SIwave.
|
|
165
168
|
|
|
166
169
|
Parameters
|
|
167
170
|
----------
|
|
168
171
|
threshold : float, optional
|
|
169
|
-
|
|
172
|
+
Area ratio threshold. Nets with plane area ratio above this value are
|
|
173
|
+
considered power/ground nets.
|
|
170
174
|
|
|
171
175
|
Returns
|
|
172
176
|
-------
|
|
173
|
-
list
|
|
177
|
+
list[pyedb.grpc.database.net.net.Net]
|
|
178
|
+
List of nets eligible as power/ground nets.
|
|
174
179
|
"""
|
|
175
180
|
pwr_gnd_nets = []
|
|
176
181
|
for net in self._layout.nets[:]:
|
|
@@ -194,16 +199,26 @@ class Nets(CommonNets):
|
|
|
194
199
|
|
|
195
200
|
@property
|
|
196
201
|
def nets_by_components(self):
|
|
197
|
-
|
|
198
|
-
|
|
202
|
+
"""Mapping of components to their associated nets.
|
|
203
|
+
|
|
204
|
+
Returns
|
|
205
|
+
-------
|
|
206
|
+
dict[str, list[str]]
|
|
207
|
+
Dictionary mapping component names to list of net names.
|
|
208
|
+
"""
|
|
199
209
|
for comp, i in self._pedb.components.instances.items():
|
|
200
210
|
self._nets_by_comp_dict[comp] = i.nets
|
|
201
211
|
return self._nets_by_comp_dict
|
|
202
212
|
|
|
203
213
|
@property
|
|
204
214
|
def components_by_nets(self):
|
|
205
|
-
|
|
206
|
-
|
|
215
|
+
"""Mapping of nets to their associated components.
|
|
216
|
+
|
|
217
|
+
Returns
|
|
218
|
+
-------
|
|
219
|
+
dict[str, list[str]]
|
|
220
|
+
Dictionary mapping net names to list of component names.
|
|
221
|
+
"""
|
|
207
222
|
for comp, i in self._pedb.components.instances.items():
|
|
208
223
|
for n in i.nets:
|
|
209
224
|
if n in self._comps_by_nets_dict:
|
|
@@ -221,40 +236,30 @@ class Nets(CommonNets):
|
|
|
221
236
|
include_signal=True,
|
|
222
237
|
include_power=True,
|
|
223
238
|
):
|
|
224
|
-
|
|
225
|
-
"""Get extended net and associated components.
|
|
239
|
+
"""Generate extended nets based on component thresholds.
|
|
226
240
|
|
|
227
|
-
|
|
228
|
-
|
|
241
|
+
.. deprecated:: pyedb 0.30.0
|
|
242
|
+
Use :func:`pyedb.grpc.extended_nets.generate_extended_nets` instead.
|
|
229
243
|
|
|
230
244
|
Parameters
|
|
231
245
|
----------
|
|
232
|
-
resistor_below : int
|
|
233
|
-
|
|
234
|
-
inductor_below : int
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
Threshold of capacitor value. Search extended net across capacitors which has value higher than the
|
|
239
|
-
threshold.
|
|
246
|
+
resistor_below : int | float, optional
|
|
247
|
+
Resistor threshold value. Components below this value are considered.
|
|
248
|
+
inductor_below : int | float, optional
|
|
249
|
+
Inductor threshold value. Components below this value are considered.
|
|
250
|
+
capacitor_above : int | float, optional
|
|
251
|
+
Capacitor threshold value. Components above this value are considered.
|
|
240
252
|
exception_list : list, optional
|
|
241
|
-
List of components to bypass
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
Whether to generate extended power nets. The default is ``True``.
|
|
253
|
+
List of components to bypass during threshold checks.
|
|
254
|
+
include_signal : bool, optional
|
|
255
|
+
Whether to include signal nets in extended net generation.
|
|
256
|
+
include_power : bool, optional
|
|
257
|
+
Whether to include power nets in extended net generation.
|
|
247
258
|
|
|
248
259
|
Returns
|
|
249
260
|
-------
|
|
250
261
|
list
|
|
251
|
-
List of
|
|
252
|
-
|
|
253
|
-
Examples
|
|
254
|
-
--------
|
|
255
|
-
>>> from pyedb import Edb
|
|
256
|
-
>>> app = Edb()
|
|
257
|
-
>>> app.nets.get_extended_nets()
|
|
262
|
+
List of generated extended nets.
|
|
258
263
|
"""
|
|
259
264
|
warnings.warn("Use new method :func:`edb.extended_nets.generate_extended_nets` instead.", DeprecationWarning)
|
|
260
265
|
self._pedb.extended_nets.generate_extended_nets(
|
|
@@ -262,9 +267,18 @@ class Nets(CommonNets):
|
|
|
262
267
|
)
|
|
263
268
|
|
|
264
269
|
@staticmethod
|
|
265
|
-
def _get_points_for_plot(
|
|
266
|
-
"""
|
|
267
|
-
|
|
270
|
+
def _get_points_for_plot(my_net_points):
|
|
271
|
+
"""Get points for plotting.
|
|
272
|
+
|
|
273
|
+
Parameters
|
|
274
|
+
----------
|
|
275
|
+
my_net_points : list
|
|
276
|
+
List of points defining the net.
|
|
277
|
+
|
|
278
|
+
Returns
|
|
279
|
+
-------
|
|
280
|
+
tuple
|
|
281
|
+
X and Y coordinates of the points.
|
|
268
282
|
"""
|
|
269
283
|
# fmt: off
|
|
270
284
|
x = []
|
|
@@ -288,19 +302,19 @@ class Nets(CommonNets):
|
|
|
288
302
|
return x, y
|
|
289
303
|
|
|
290
304
|
def classify_nets(self, power_nets=None, signal_nets=None):
|
|
291
|
-
"""Reassign power/ground or signal
|
|
305
|
+
"""Reassign net classifications as power/ground or signal.
|
|
292
306
|
|
|
293
307
|
Parameters
|
|
294
308
|
----------
|
|
295
|
-
power_nets : str
|
|
296
|
-
|
|
297
|
-
signal_nets : str
|
|
298
|
-
|
|
309
|
+
power_nets : str | list[str], optional
|
|
310
|
+
Nets to classify as power/ground.
|
|
311
|
+
signal_nets : str | list[str], optional
|
|
312
|
+
Nets to classify as signal.
|
|
299
313
|
|
|
300
314
|
Returns
|
|
301
315
|
-------
|
|
302
316
|
bool
|
|
303
|
-
|
|
317
|
+
True if successful, False otherwise.
|
|
304
318
|
"""
|
|
305
319
|
if isinstance(power_nets, str):
|
|
306
320
|
power_nets = []
|
|
@@ -319,17 +333,17 @@ class Nets(CommonNets):
|
|
|
319
333
|
return True
|
|
320
334
|
|
|
321
335
|
def is_power_gound_net(self, netname_list):
|
|
322
|
-
"""
|
|
336
|
+
"""Check if any net in a list is a power/ground net.
|
|
323
337
|
|
|
324
338
|
Parameters
|
|
325
339
|
----------
|
|
326
|
-
netname_list : list
|
|
327
|
-
|
|
340
|
+
netname_list : str | list[str]
|
|
341
|
+
Net name or list of net names to check.
|
|
328
342
|
|
|
329
343
|
Returns
|
|
330
344
|
-------
|
|
331
345
|
bool
|
|
332
|
-
|
|
346
|
+
True if any net is power/ground, False otherwise.
|
|
333
347
|
"""
|
|
334
348
|
if isinstance(netname_list, str):
|
|
335
349
|
netname_list = [netname_list]
|
|
@@ -340,20 +354,19 @@ class Nets(CommonNets):
|
|
|
340
354
|
return False
|
|
341
355
|
|
|
342
356
|
def get_dcconnected_net_list(self, ground_nets=["GND"], res_value=0.001):
|
|
343
|
-
"""Get
|
|
344
|
-
|
|
345
|
-
.. note::
|
|
346
|
-
Only inductors are considered.
|
|
357
|
+
"""Get nets connected to DC through inductors and low-value resistors.
|
|
347
358
|
|
|
348
359
|
Parameters
|
|
349
360
|
----------
|
|
350
|
-
ground_nets :
|
|
351
|
-
|
|
361
|
+
ground_nets : tuple, optional
|
|
362
|
+
Ground net names. Default is ("GND",).
|
|
363
|
+
res_value : float, optional
|
|
364
|
+
Resistance threshold value. Default is 0.001 ohms.
|
|
352
365
|
|
|
353
366
|
Returns
|
|
354
367
|
-------
|
|
355
|
-
list
|
|
356
|
-
List of
|
|
368
|
+
list[set]
|
|
369
|
+
List of sets of connected nets.
|
|
357
370
|
"""
|
|
358
371
|
temp_list = []
|
|
359
372
|
for _, comp_obj in self._pedb.components.inductors.items():
|
|
@@ -390,18 +403,19 @@ class Nets(CommonNets):
|
|
|
390
403
|
return dcconnected_net_list
|
|
391
404
|
|
|
392
405
|
def get_powertree(self, power_net_name, ground_nets):
|
|
393
|
-
"""Retrieve
|
|
406
|
+
"""Retrieve power tree for a given power net.
|
|
394
407
|
|
|
395
408
|
Parameters
|
|
396
409
|
----------
|
|
397
410
|
power_net_name : str
|
|
398
411
|
Name of the power net.
|
|
399
|
-
ground_nets :
|
|
400
|
-
|
|
412
|
+
ground_nets : list
|
|
413
|
+
List of ground net names.
|
|
401
414
|
|
|
402
415
|
Returns
|
|
403
416
|
-------
|
|
404
|
-
|
|
417
|
+
tuple
|
|
418
|
+
(component_list, component_list_columns, net_group)
|
|
405
419
|
"""
|
|
406
420
|
flag_in_ng = False
|
|
407
421
|
net_group = []
|
|
@@ -449,27 +463,37 @@ class Nets(CommonNets):
|
|
|
449
463
|
return component_list, component_list_columns, net_group
|
|
450
464
|
|
|
451
465
|
def get_net_by_name(self, net_name):
|
|
452
|
-
"""Find a net by name.
|
|
466
|
+
"""Find a net by name.
|
|
467
|
+
|
|
468
|
+
Parameters
|
|
469
|
+
----------
|
|
470
|
+
net_name : str
|
|
471
|
+
Name of the net to find.
|
|
472
|
+
|
|
473
|
+
Returns
|
|
474
|
+
-------
|
|
475
|
+
pyedb.grpc.database.net.net.Net
|
|
476
|
+
Net object if found, otherwise None.
|
|
477
|
+
"""
|
|
453
478
|
edb_net = Net.find_by_name(self._active_layout, net_name)
|
|
454
479
|
if edb_net is not None:
|
|
455
480
|
return edb_net
|
|
456
481
|
|
|
457
482
|
def delete(self, netlist):
|
|
458
|
-
"""Delete one or more nets from
|
|
483
|
+
"""Delete one or more nets from the layout.
|
|
459
484
|
|
|
460
485
|
Parameters
|
|
461
486
|
----------
|
|
462
|
-
netlist : str
|
|
463
|
-
|
|
487
|
+
netlist : str | list[str]
|
|
488
|
+
Net name or list of net names to delete.
|
|
464
489
|
|
|
465
490
|
Returns
|
|
466
491
|
-------
|
|
467
|
-
list
|
|
468
|
-
|
|
492
|
+
list[str]
|
|
493
|
+
Names of nets that were deleted.
|
|
469
494
|
|
|
470
495
|
Examples
|
|
471
496
|
--------
|
|
472
|
-
|
|
473
497
|
>>> deleted_nets = database.nets.delete(["Net1","Net2"])
|
|
474
498
|
"""
|
|
475
499
|
if isinstance(netlist, str):
|
|
@@ -487,26 +511,23 @@ class Nets(CommonNets):
|
|
|
487
511
|
return nets_deleted
|
|
488
512
|
|
|
489
513
|
def find_or_create_net(self, net_name="", start_with="", contain="", end_with=""):
|
|
490
|
-
"""Find or create
|
|
514
|
+
"""Find or create a net based on given criteria.
|
|
491
515
|
|
|
492
516
|
Parameters
|
|
493
517
|
----------
|
|
494
518
|
net_name : str, optional
|
|
495
|
-
|
|
496
|
-
|
|
519
|
+
Exact name of the net to find or create.
|
|
497
520
|
start_with : str, optional
|
|
498
|
-
|
|
499
|
-
|
|
521
|
+
Find nets starting with this string.
|
|
500
522
|
contain : str, optional
|
|
501
|
-
|
|
502
|
-
|
|
523
|
+
Find nets containing this string.
|
|
503
524
|
end_with : str, optional
|
|
504
|
-
|
|
525
|
+
Find nets ending with this string.
|
|
505
526
|
|
|
506
527
|
Returns
|
|
507
528
|
-------
|
|
508
|
-
|
|
509
|
-
Net
|
|
529
|
+
pyedb.grpc.database.net.net.Net | list[pyedb.grpc.database.net.net.Net]
|
|
530
|
+
Net object or list of matching net objects.
|
|
510
531
|
"""
|
|
511
532
|
if not net_name and not start_with and not contain and not end_with:
|
|
512
533
|
net_name = generate_unique_name("NET_")
|
|
@@ -569,8 +590,7 @@ class Nets(CommonNets):
|
|
|
569
590
|
Returns
|
|
570
591
|
-------
|
|
571
592
|
bool
|
|
572
|
-
|
|
573
|
-
|
|
593
|
+
True if the net is found in the component, False otherwise.
|
|
574
594
|
"""
|
|
575
595
|
if component_name not in self._pedb.components.instances:
|
|
576
596
|
return False
|
|
@@ -582,51 +602,48 @@ class Nets(CommonNets):
|
|
|
582
602
|
def find_and_fix_disjoint_nets(
|
|
583
603
|
self, net_list=None, keep_only_main_net=False, clean_disjoints_less_than=0.0, order_by_area=False
|
|
584
604
|
):
|
|
585
|
-
"""Find and fix disjoint nets
|
|
605
|
+
"""Find and fix disjoint nets.
|
|
586
606
|
|
|
587
|
-
.. deprecated::
|
|
588
|
-
|
|
607
|
+
.. deprecated:: pyedb 0.30.0
|
|
608
|
+
Use :func:`edb.layout_validation.disjoint_nets` instead.
|
|
589
609
|
|
|
590
610
|
Parameters
|
|
591
611
|
----------
|
|
592
|
-
net_list : str,
|
|
593
|
-
List of nets
|
|
612
|
+
net_list : list[str], optional
|
|
613
|
+
List of nets to check. Checks all nets if None.
|
|
594
614
|
keep_only_main_net : bool, optional
|
|
595
|
-
|
|
596
|
-
clean_disjoints_less_than :
|
|
597
|
-
Clean
|
|
615
|
+
Keep only the main net segment if True.
|
|
616
|
+
clean_disjoints_less_than : float, optional
|
|
617
|
+
Clean disjoint nets smaller than this area (in m²).
|
|
598
618
|
order_by_area : bool, optional
|
|
599
|
-
|
|
600
|
-
Default is ``False``.
|
|
619
|
+
Order naming by area instead of object count.
|
|
601
620
|
|
|
602
621
|
Returns
|
|
603
622
|
-------
|
|
604
|
-
|
|
605
|
-
New
|
|
623
|
+
list
|
|
624
|
+
New ne
|
|
606
625
|
|
|
607
|
-
|
|
608
|
-
--------
|
|
626
|
+
New nets created.
|
|
609
627
|
|
|
610
|
-
>>> renamed_nets = database.nets.find_and_fix_disjoint_nets(["GND","Net2"])
|
|
611
628
|
"""
|
|
629
|
+
|
|
612
630
|
warnings.warn("Use new function :func:`edb.layout_validation.disjoint_nets` instead.", DeprecationWarning)
|
|
613
631
|
return self._pedb.layout_validation.disjoint_nets(
|
|
614
632
|
net_list, keep_only_main_net, clean_disjoints_less_than, order_by_area
|
|
615
633
|
)
|
|
616
634
|
|
|
617
635
|
def merge_nets_polygons(self, net_names_list):
|
|
618
|
-
"""
|
|
636
|
+
"""Merge polygons for specified nets on each layer.
|
|
619
637
|
|
|
620
638
|
Parameters
|
|
621
639
|
----------
|
|
622
|
-
net_names_list : str
|
|
623
|
-
Net name
|
|
640
|
+
net_names_list : str | list[str]
|
|
641
|
+
Net name or list of net names.
|
|
624
642
|
|
|
625
643
|
Returns
|
|
626
644
|
-------
|
|
627
645
|
bool
|
|
628
|
-
|
|
629
|
-
|
|
646
|
+
True if successful, False otherwise.
|
|
630
647
|
"""
|
|
631
648
|
if isinstance(net_names_list, str):
|
|
632
649
|
net_names_list = [net_names_list]
|