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
|
@@ -52,7 +52,7 @@ class GapPort(EdgeTerminal):
|
|
|
52
52
|
super().__init__(pedb, edb_object)
|
|
53
53
|
|
|
54
54
|
@property
|
|
55
|
-
def magnitude(self):
|
|
55
|
+
def magnitude(self) -> float:
|
|
56
56
|
"""Magnitude.
|
|
57
57
|
|
|
58
58
|
Returns
|
|
@@ -63,7 +63,7 @@ class GapPort(EdgeTerminal):
|
|
|
63
63
|
return self._edb_object.source_amplitude.value
|
|
64
64
|
|
|
65
65
|
@property
|
|
66
|
-
def phase(self):
|
|
66
|
+
def phase(self) -> float:
|
|
67
67
|
"""Phase.
|
|
68
68
|
|
|
69
69
|
Returns
|
|
@@ -74,7 +74,7 @@ class GapPort(EdgeTerminal):
|
|
|
74
74
|
return self._edb_object.source_phase.value
|
|
75
75
|
|
|
76
76
|
@property
|
|
77
|
-
def renormalize(self):
|
|
77
|
+
def renormalize(self) -> bool:
|
|
78
78
|
"""Whether renormalize is active.
|
|
79
79
|
|
|
80
80
|
Returns
|
|
@@ -84,7 +84,7 @@ class GapPort(EdgeTerminal):
|
|
|
84
84
|
return self._edb_object.port_post_processing_prop.do_renormalize
|
|
85
85
|
|
|
86
86
|
@property
|
|
87
|
-
def deembed(self):
|
|
87
|
+
def deembed(self) -> bool:
|
|
88
88
|
"""Deembed gap port.
|
|
89
89
|
|
|
90
90
|
Returns
|
|
@@ -95,7 +95,7 @@ class GapPort(EdgeTerminal):
|
|
|
95
95
|
return self._edb_object.port_post_processing_prop.do_deembed
|
|
96
96
|
|
|
97
97
|
@property
|
|
98
|
-
def renormalize_z0(self):
|
|
98
|
+
def renormalize_z0(self) -> tuple[float, float]:
|
|
99
99
|
"""Renormalize Z0 value (real, imag).
|
|
100
100
|
|
|
101
101
|
Returns
|
|
@@ -109,7 +109,13 @@ class GapPort(EdgeTerminal):
|
|
|
109
109
|
)
|
|
110
110
|
|
|
111
111
|
@property
|
|
112
|
-
def terminal_type(self):
|
|
112
|
+
def terminal_type(self) -> str:
|
|
113
|
+
"""Returns terminal type.
|
|
114
|
+
|
|
115
|
+
Returns
|
|
116
|
+
-------
|
|
117
|
+
str
|
|
118
|
+
"""
|
|
113
119
|
return self._edb_object.terminal_type
|
|
114
120
|
|
|
115
121
|
|
|
@@ -153,7 +159,7 @@ class WavePort(EdgeTerminal):
|
|
|
153
159
|
super().__init__(pedb, edb_terminal)
|
|
154
160
|
|
|
155
161
|
@property
|
|
156
|
-
def horizontal_extent_factor(self):
|
|
162
|
+
def horizontal_extent_factor(self) -> float:
|
|
157
163
|
"""Horizontal extent factor.
|
|
158
164
|
|
|
159
165
|
Returns
|
|
@@ -170,7 +176,7 @@ class WavePort(EdgeTerminal):
|
|
|
170
176
|
self._hfss_port_property = p
|
|
171
177
|
|
|
172
178
|
@property
|
|
173
|
-
def vertical_extent_factor(self):
|
|
179
|
+
def vertical_extent_factor(self) -> float:
|
|
174
180
|
"""Vertical extent factor.
|
|
175
181
|
|
|
176
182
|
Returns
|
|
@@ -188,7 +194,7 @@ class WavePort(EdgeTerminal):
|
|
|
188
194
|
self._hfss_port_property = p
|
|
189
195
|
|
|
190
196
|
@property
|
|
191
|
-
def pec_launch_width(self):
|
|
197
|
+
def pec_launch_width(self) -> float:
|
|
192
198
|
"""Launch width for the printed electronic component (PEC).
|
|
193
199
|
|
|
194
200
|
Returns
|
|
@@ -205,7 +211,7 @@ class WavePort(EdgeTerminal):
|
|
|
205
211
|
self._hfss_port_property = p
|
|
206
212
|
|
|
207
213
|
@property
|
|
208
|
-
def deembed(self):
|
|
214
|
+
def deembed(self) -> bool:
|
|
209
215
|
"""Whether deembed is active.
|
|
210
216
|
|
|
211
217
|
Returns
|
|
@@ -222,7 +228,7 @@ class WavePort(EdgeTerminal):
|
|
|
222
228
|
self._edb_object.port_post_processing_prop = p
|
|
223
229
|
|
|
224
230
|
@property
|
|
225
|
-
def deembed_length(self):
|
|
231
|
+
def deembed_length(self) -> float:
|
|
226
232
|
"""Deembed Length.
|
|
227
233
|
|
|
228
234
|
Returns
|
|
@@ -281,7 +287,7 @@ class BundleWavePort(BundleTerminal):
|
|
|
281
287
|
super().__init__(pedb, edb_object)
|
|
282
288
|
|
|
283
289
|
@property
|
|
284
|
-
def _wave_port(self):
|
|
290
|
+
def _wave_port(self) -> WavePort:
|
|
285
291
|
""" "Wave port.
|
|
286
292
|
|
|
287
293
|
|
|
@@ -293,7 +299,7 @@ class BundleWavePort(BundleTerminal):
|
|
|
293
299
|
return WavePort(self._pedb, self.terminals[0]._edb_object)
|
|
294
300
|
|
|
295
301
|
@property
|
|
296
|
-
def horizontal_extent_factor(self):
|
|
302
|
+
def horizontal_extent_factor(self) -> float:
|
|
297
303
|
"""Horizontal extent factor.
|
|
298
304
|
|
|
299
305
|
Returns
|
|
@@ -308,7 +314,7 @@ class BundleWavePort(BundleTerminal):
|
|
|
308
314
|
self._wave_port.horizontal_extent_factor = value
|
|
309
315
|
|
|
310
316
|
@property
|
|
311
|
-
def vertical_extent_factor(self):
|
|
317
|
+
def vertical_extent_factor(self) -> float:
|
|
312
318
|
"""Vertical extent factor.
|
|
313
319
|
|
|
314
320
|
Returns
|
|
@@ -323,7 +329,7 @@ class BundleWavePort(BundleTerminal):
|
|
|
323
329
|
self._wave_port.vertical_extent_factor = value
|
|
324
330
|
|
|
325
331
|
@property
|
|
326
|
-
def pec_launch_width(self):
|
|
332
|
+
def pec_launch_width(self) -> float:
|
|
327
333
|
"""Launch width for the printed electronic component (PEC).
|
|
328
334
|
|
|
329
335
|
Returns
|
|
@@ -338,7 +344,7 @@ class BundleWavePort(BundleTerminal):
|
|
|
338
344
|
self._wave_port.pec_launch_width = value
|
|
339
345
|
|
|
340
346
|
@property
|
|
341
|
-
def deembed(self):
|
|
347
|
+
def deembed(self) -> bool:
|
|
342
348
|
"""Whether deembed is active.
|
|
343
349
|
|
|
344
350
|
Returns
|
|
@@ -352,7 +358,7 @@ class BundleWavePort(BundleTerminal):
|
|
|
352
358
|
self._wave_port.deembed = value
|
|
353
359
|
|
|
354
360
|
@property
|
|
355
|
-
def deembed_length(self):
|
|
361
|
+
def deembed_length(self) -> float:
|
|
356
362
|
"""Deembed Length.
|
|
357
363
|
|
|
358
364
|
Returns
|
|
@@ -62,12 +62,13 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
62
62
|
self._edb_object = edb_instance
|
|
63
63
|
self._bounding_box = []
|
|
64
64
|
self._position = []
|
|
65
|
+
self._side_number = None
|
|
65
66
|
self._pdef = None
|
|
66
67
|
self._pedb = pedb
|
|
67
68
|
self._object_instance = None
|
|
68
69
|
|
|
69
70
|
@property
|
|
70
|
-
def definition(self):
|
|
71
|
+
def definition(self) -> PadstackDef:
|
|
71
72
|
"""Padstack definition.
|
|
72
73
|
|
|
73
74
|
Returns
|
|
@@ -77,7 +78,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
77
78
|
return PadstackDef(self._pedb, self.padstack_def)
|
|
78
79
|
|
|
79
80
|
@property
|
|
80
|
-
def padstack_definition(self):
|
|
81
|
+
def padstack_definition(self) -> str:
|
|
81
82
|
"""Padstack definition name.
|
|
82
83
|
|
|
83
84
|
Returns
|
|
@@ -89,7 +90,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
89
90
|
return self.padstack_def.name
|
|
90
91
|
|
|
91
92
|
@property
|
|
92
|
-
def terminal(self):
|
|
93
|
+
def terminal(self) -> PadstackInstanceTerminal:
|
|
93
94
|
"""PadstackInstanceTerminal.
|
|
94
95
|
|
|
95
96
|
Returns
|
|
@@ -107,7 +108,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
107
108
|
term = PadstackInstanceTerminal(self._pedb, term)
|
|
108
109
|
return term if not term.is_null else None
|
|
109
110
|
|
|
110
|
-
def create_terminal(self, name=None):
|
|
111
|
+
def create_terminal(self, name=None) -> PadstackInstanceTerminal:
|
|
111
112
|
"""Create a padstack instance terminal.
|
|
112
113
|
|
|
113
114
|
Returns
|
|
@@ -129,7 +130,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
129
130
|
)
|
|
130
131
|
return PadstackInstanceTerminal(self._pedb, term)
|
|
131
132
|
|
|
132
|
-
def get_terminal(self, create_new_terminal=True):
|
|
133
|
+
def get_terminal(self, create_new_terminal=True) -> PadstackInstanceTerminal:
|
|
133
134
|
"""Returns padstack instance terminal.
|
|
134
135
|
|
|
135
136
|
Parameters
|
|
@@ -269,7 +270,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
269
270
|
self.set_product_property(pid, 18, em_prop)
|
|
270
271
|
|
|
271
272
|
@property
|
|
272
|
-
def dcir_equipotential_region(self):
|
|
273
|
+
def dcir_equipotential_region(self) -> bool:
|
|
273
274
|
"""Check whether dcir equipotential region is enabled.
|
|
274
275
|
|
|
275
276
|
Returns
|
|
@@ -308,7 +309,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
308
309
|
return self._object_instance
|
|
309
310
|
|
|
310
311
|
@property
|
|
311
|
-
def bounding_box(self):
|
|
312
|
+
def bounding_box(self) -> list[float]:
|
|
312
313
|
"""Padstack instance bounding box.
|
|
313
314
|
Because this method is slow, the bounding box is stored in a variable and reused.
|
|
314
315
|
|
|
@@ -321,7 +322,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
321
322
|
return self._bounding_box
|
|
322
323
|
return self._bounding_box
|
|
323
324
|
|
|
324
|
-
def in_polygon(self, polygon_data, include_partial=True):
|
|
325
|
+
def in_polygon(self, polygon_data, include_partial=True) -> bool:
|
|
325
326
|
"""Check if padstack Instance is in given polygon data.
|
|
326
327
|
|
|
327
328
|
Parameters
|
|
@@ -357,7 +358,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
357
358
|
return False
|
|
358
359
|
|
|
359
360
|
@property
|
|
360
|
-
def start_layer(self):
|
|
361
|
+
def start_layer(self) -> str:
|
|
361
362
|
"""Starting layer.
|
|
362
363
|
|
|
363
364
|
Returns
|
|
@@ -374,7 +375,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
374
375
|
self.set_layer_range(start_layer, stop_layer)
|
|
375
376
|
|
|
376
377
|
@property
|
|
377
|
-
def stop_layer(self):
|
|
378
|
+
def stop_layer(self) -> str:
|
|
378
379
|
"""Stopping layer.
|
|
379
380
|
|
|
380
381
|
Returns
|
|
@@ -391,7 +392,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
391
392
|
self.set_layer_range(start_layer, stop_layer)
|
|
392
393
|
|
|
393
394
|
@property
|
|
394
|
-
def layer_range_names(self):
|
|
395
|
+
def layer_range_names(self) -> list[str]:
|
|
395
396
|
"""List of all layers to which the padstack instance belongs.
|
|
396
397
|
|
|
397
398
|
Returns
|
|
@@ -423,7 +424,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
423
424
|
return layer_list
|
|
424
425
|
|
|
425
426
|
@property
|
|
426
|
-
def net_name(self):
|
|
427
|
+
def net_name(self) -> str:
|
|
427
428
|
"""Net name.
|
|
428
429
|
|
|
429
430
|
Returns
|
|
@@ -462,7 +463,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
462
463
|
return obj_inst[0] if obj_inst else None
|
|
463
464
|
|
|
464
465
|
@property
|
|
465
|
-
def is_pin(self):
|
|
466
|
+
def is_pin(self) -> bool:
|
|
466
467
|
"""Determines whether this padstack instance is a layout pin.
|
|
467
468
|
|
|
468
469
|
Returns
|
|
@@ -491,7 +492,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
491
492
|
return comp if not comp.is_null else False
|
|
492
493
|
|
|
493
494
|
@property
|
|
494
|
-
def position(self):
|
|
495
|
+
def position(self) -> list[float]:
|
|
495
496
|
"""Padstack instance position.
|
|
496
497
|
|
|
497
498
|
Returns
|
|
@@ -521,7 +522,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
521
522
|
)
|
|
522
523
|
|
|
523
524
|
@property
|
|
524
|
-
def rotation(self):
|
|
525
|
+
def rotation(self) -> float:
|
|
525
526
|
"""Padstack instance rotation.
|
|
526
527
|
|
|
527
528
|
Returns
|
|
@@ -532,7 +533,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
532
533
|
return self.get_position_and_rotation()[-1].value
|
|
533
534
|
|
|
534
535
|
@property
|
|
535
|
-
def name(self):
|
|
536
|
+
def name(self) -> str:
|
|
536
537
|
"""Padstack Instance Name.
|
|
537
538
|
|
|
538
539
|
Returns
|
|
@@ -552,7 +553,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
552
553
|
self.set_product_property(GrpcProductIdType.DESIGNER, 11, value)
|
|
553
554
|
|
|
554
555
|
@property
|
|
555
|
-
def backdrill_type(self):
|
|
556
|
+
def backdrill_type(self) -> str:
|
|
556
557
|
"""Backdrill type.
|
|
557
558
|
|
|
558
559
|
|
|
@@ -565,7 +566,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
565
566
|
return self.get_backdrill_type()
|
|
566
567
|
|
|
567
568
|
@property
|
|
568
|
-
def backdrill_top(self):
|
|
569
|
+
def backdrill_top(self) -> bool:
|
|
569
570
|
if self.get_back_drill_type(False).value == 0:
|
|
570
571
|
return False
|
|
571
572
|
else:
|
|
@@ -576,7 +577,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
576
577
|
return False
|
|
577
578
|
|
|
578
579
|
@property
|
|
579
|
-
def backdrill_bottom(self):
|
|
580
|
+
def backdrill_bottom(self) -> bool:
|
|
580
581
|
"""Check is backdrill is starting at bottom.
|
|
581
582
|
|
|
582
583
|
|
|
@@ -595,7 +596,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
595
596
|
return False
|
|
596
597
|
|
|
597
598
|
@property
|
|
598
|
-
def metal_volume(self):
|
|
599
|
+
def metal_volume(self) -> float:
|
|
599
600
|
"""Metal volume of the via hole instance in cubic units (m3). Metal plating ratio is accounted.
|
|
600
601
|
|
|
601
602
|
Returns
|
|
@@ -632,7 +633,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
632
633
|
return volume
|
|
633
634
|
|
|
634
635
|
@property
|
|
635
|
-
def component_pin(self):
|
|
636
|
+
def component_pin(self) -> str:
|
|
636
637
|
"""Component pin.
|
|
637
638
|
|
|
638
639
|
Returns
|
|
@@ -644,7 +645,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
644
645
|
return self.name
|
|
645
646
|
|
|
646
647
|
@property
|
|
647
|
-
def aedt_name(self):
|
|
648
|
+
def aedt_name(self) -> str:
|
|
648
649
|
"""Retrieve the pin name that is shown in AEDT.
|
|
649
650
|
|
|
650
651
|
.. note::
|
|
@@ -671,6 +672,18 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
671
672
|
def aedt_name(self, value):
|
|
672
673
|
self.set_product_property(GrpcProductIdType.DESIGNER, 11, value)
|
|
673
674
|
|
|
675
|
+
@property
|
|
676
|
+
def side_number(self) -> int:
|
|
677
|
+
if not self._side_number:
|
|
678
|
+
prop_string = "$begin ''\n\tsid=3\n\tmat='copper'\n\tvs='Wirebond'\n$end ''\n"
|
|
679
|
+
self.set_product_property(GrpcProductIdType.HFSS_3D_LAYOUT, 21, prop_string)
|
|
680
|
+
self._side_number = self.get_product_property(GrpcProductIdType.HFSS_3D_LAYOUT, 21)
|
|
681
|
+
return self._side_number
|
|
682
|
+
|
|
683
|
+
@side_number.setter
|
|
684
|
+
def side_number(self, value):
|
|
685
|
+
self._side_number = self.set_product_property(GrpcProductIdType.HFSS_3D_LAYOUT, 21, value)
|
|
686
|
+
|
|
674
687
|
def get_backdrill_type(self, from_bottom=True):
|
|
675
688
|
"""Return backdrill type
|
|
676
689
|
Parameters
|
|
@@ -686,7 +699,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
686
699
|
"""
|
|
687
700
|
return super().get_back_drill_type(from_bottom).name.lower()
|
|
688
701
|
|
|
689
|
-
def get_back_drill_by_layer(self, from_bottom=True):
|
|
702
|
+
def get_back_drill_by_layer(self, from_bottom=True) -> tuple[str, float, float]:
|
|
690
703
|
"""Get backdrill by layer.
|
|
691
704
|
|
|
692
705
|
Parameters
|
|
@@ -705,7 +718,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
705
718
|
diameter = round(back_drill[2].value, 9)
|
|
706
719
|
return layer, offset, diameter
|
|
707
720
|
|
|
708
|
-
def get_back_drill_by_depth(self, from_bottom=True):
|
|
721
|
+
def get_back_drill_by_depth(self, from_bottom=True) -> tuple[float, float]:
|
|
709
722
|
"""Get back drill by depth parameters
|
|
710
723
|
Parameters
|
|
711
724
|
----------
|
|
@@ -760,7 +773,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
760
773
|
from_bottom=from_bottom,
|
|
761
774
|
)
|
|
762
775
|
|
|
763
|
-
def parametrize_position(self, prefix=None):
|
|
776
|
+
def parametrize_position(self, prefix=None) -> list[str]:
|
|
764
777
|
"""Parametrize the instance position.
|
|
765
778
|
|
|
766
779
|
Parameters
|
|
@@ -784,7 +797,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
784
797
|
self.position = [var_name + "X", var_name + "Y"]
|
|
785
798
|
return [var_name + "X", var_name + "Y"]
|
|
786
799
|
|
|
787
|
-
def in_voids(self, net_name=None, layer_name=None):
|
|
800
|
+
def in_voids(self, net_name=None, layer_name=None) -> list[any]:
|
|
788
801
|
"""Check if this padstack instance is in any void.
|
|
789
802
|
|
|
790
803
|
Parameters
|
|
@@ -843,7 +856,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
843
856
|
return self.component.layer
|
|
844
857
|
|
|
845
858
|
@property
|
|
846
|
-
def lower_elevation(self):
|
|
859
|
+
def lower_elevation(self) -> float:
|
|
847
860
|
"""Lower elevation of the placement layer.
|
|
848
861
|
|
|
849
862
|
Returns
|
|
@@ -854,7 +867,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
854
867
|
return self._pedb.stackup.layers[self.component.placement_layer].lower_elevation
|
|
855
868
|
|
|
856
869
|
@property
|
|
857
|
-
def upper_elevation(self):
|
|
870
|
+
def upper_elevation(self) -> float:
|
|
858
871
|
"""Upper elevation of the placement layer.
|
|
859
872
|
|
|
860
873
|
Returns
|
|
@@ -865,7 +878,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
865
878
|
return self._pedb.stackup.layers[self.component.placement_layer].upper_elevation
|
|
866
879
|
|
|
867
880
|
@property
|
|
868
|
-
def top_bottom_association(self):
|
|
881
|
+
def top_bottom_association(self) -> int:
|
|
869
882
|
"""Top/bottom association of the placement layer.
|
|
870
883
|
|
|
871
884
|
Returns
|
|
@@ -1080,7 +1093,9 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
1080
1093
|
created_polygon = self._pedb.modeler.create_polygon(path, layer_name)
|
|
1081
1094
|
return created_polygon
|
|
1082
1095
|
|
|
1083
|
-
def get_reference_pins(
|
|
1096
|
+
def get_reference_pins(
|
|
1097
|
+
self, reference_net="GND", search_radius=5e-3, max_limit=0, component_only=True
|
|
1098
|
+
) -> list[PadstackInstance]:
|
|
1084
1099
|
"""Search for reference pins using given criteria.
|
|
1085
1100
|
|
|
1086
1101
|
Parameters
|
|
@@ -37,7 +37,7 @@ class Path(GrpcPath, Primitive):
|
|
|
37
37
|
self._pedb = pedb
|
|
38
38
|
|
|
39
39
|
@property
|
|
40
|
-
def width(self):
|
|
40
|
+
def width(self) -> float:
|
|
41
41
|
"""Path width.
|
|
42
42
|
|
|
43
43
|
Returns
|
|
@@ -52,7 +52,7 @@ class Path(GrpcPath, Primitive):
|
|
|
52
52
|
super(Path, self.__class__).width.__set__(self, GrpcValue(value))
|
|
53
53
|
|
|
54
54
|
@property
|
|
55
|
-
def length(self):
|
|
55
|
+
def length(self) -> float:
|
|
56
56
|
"""Path length in meters.
|
|
57
57
|
|
|
58
58
|
Returns
|
|
@@ -62,7 +62,7 @@ class Path(GrpcPath, Primitive):
|
|
|
62
62
|
"""
|
|
63
63
|
center_line_arcs = self._edb_object.cast().center_line.arc_data
|
|
64
64
|
path_length = 0.0
|
|
65
|
-
for arc in center_line_arcs
|
|
65
|
+
for arc in center_line_arcs:
|
|
66
66
|
path_length += arc.length
|
|
67
67
|
end_cap_style = self.get_end_cap_style()
|
|
68
68
|
if end_cap_style:
|
|
@@ -72,7 +72,7 @@ class Path(GrpcPath, Primitive):
|
|
|
72
72
|
path_length += self.width / 2
|
|
73
73
|
return round(path_length, 9)
|
|
74
74
|
|
|
75
|
-
def add_point(self, x, y, incremental=True):
|
|
75
|
+
def add_point(self, x, y, incremental=True) -> bool:
|
|
76
76
|
"""Add a point at the end of the path.
|
|
77
77
|
|
|
78
78
|
Parameters
|
|
@@ -297,7 +297,7 @@ class Path(GrpcPath, Primitive):
|
|
|
297
297
|
self._pedb.padstacks.place([x, y], padstack_name, net_name=net_name)
|
|
298
298
|
|
|
299
299
|
@property
|
|
300
|
-
def center_line(self):
|
|
300
|
+
def center_line(self) -> list[float]:
|
|
301
301
|
"""Path center line
|
|
302
302
|
|
|
303
303
|
Returns
|
|
@@ -307,7 +307,7 @@ class Path(GrpcPath, Primitive):
|
|
|
307
307
|
"""
|
|
308
308
|
return self.get_center_line()
|
|
309
309
|
|
|
310
|
-
def get_center_line(self):
|
|
310
|
+
def get_center_line(self) -> list[list[float]]:
|
|
311
311
|
"""Retrieve center line points list.
|
|
312
312
|
|
|
313
313
|
Returns
|
|
@@ -324,7 +324,7 @@ class Path(GrpcPath, Primitive):
|
|
|
324
324
|
# super(Path, self.__class__).polygon_data.__set__(self, polygon_data)
|
|
325
325
|
|
|
326
326
|
@property
|
|
327
|
-
def corner_style(self):
|
|
327
|
+
def corner_style(self) -> str:
|
|
328
328
|
"""Path's corner style as string.
|
|
329
329
|
|
|
330
330
|
Returns
|
|
@@ -38,7 +38,7 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
38
38
|
self._pedb = pedb
|
|
39
39
|
|
|
40
40
|
@property
|
|
41
|
-
def type(self):
|
|
41
|
+
def type(self) -> str:
|
|
42
42
|
"""Primitive type.
|
|
43
43
|
|
|
44
44
|
Return
|
|
@@ -50,7 +50,7 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
50
50
|
return self.primitive_type.name.lower()
|
|
51
51
|
|
|
52
52
|
@property
|
|
53
|
-
def has_self_intersections(self):
|
|
53
|
+
def has_self_intersections(self) -> bool:
|
|
54
54
|
"""Check if Polygon has self intersections.
|
|
55
55
|
|
|
56
56
|
Returns
|
|
@@ -59,7 +59,7 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
59
59
|
"""
|
|
60
60
|
return self.polygon_data.has_self_intersections()
|
|
61
61
|
|
|
62
|
-
def fix_self_intersections(self):
|
|
62
|
+
def fix_self_intersections(self) -> list[Polygon]:
|
|
63
63
|
"""Remove self intersections if they exist.
|
|
64
64
|
|
|
65
65
|
Returns
|
|
@@ -96,7 +96,7 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
96
96
|
duplicated_polygon.add_void(void)
|
|
97
97
|
return duplicated_polygon
|
|
98
98
|
|
|
99
|
-
def duplicate_across_layers(self, layers):
|
|
99
|
+
def duplicate_across_layers(self, layers) -> bool:
|
|
100
100
|
"""Duplicate across layer a primitive object.
|
|
101
101
|
|
|
102
102
|
Parameters:
|
|
@@ -127,7 +127,7 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
127
127
|
return False
|
|
128
128
|
return True
|
|
129
129
|
|
|
130
|
-
def move(self, vector):
|
|
130
|
+
def move(self, vector) -> bool:
|
|
131
131
|
"""Move polygon along a vector.
|
|
132
132
|
|
|
133
133
|
Parameters
|
|
@@ -152,7 +152,7 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
152
152
|
return True
|
|
153
153
|
return False
|
|
154
154
|
|
|
155
|
-
def scale(self, factor, center=None):
|
|
155
|
+
def scale(self, factor, center=None) -> bool:
|
|
156
156
|
"""Scales the polygon relative to a center point by a factor.
|
|
157
157
|
|
|
158
158
|
Parameters
|
|
@@ -182,7 +182,7 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
182
182
|
return True
|
|
183
183
|
return False
|
|
184
184
|
|
|
185
|
-
def rotate(self, angle, center=None):
|
|
185
|
+
def rotate(self, angle, center=None) -> bool:
|
|
186
186
|
"""Rotate polygon around a center point by an angle.
|
|
187
187
|
|
|
188
188
|
Parameters
|
|
@@ -215,7 +215,7 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
215
215
|
return True
|
|
216
216
|
return False
|
|
217
217
|
|
|
218
|
-
def move_layer(self, layer):
|
|
218
|
+
def move_layer(self, layer) -> bool:
|
|
219
219
|
"""Move polygon to given layer.
|
|
220
220
|
|
|
221
221
|
Parameters
|
|
@@ -237,7 +237,7 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
237
237
|
self,
|
|
238
238
|
point_data,
|
|
239
239
|
include_partial=True,
|
|
240
|
-
):
|
|
240
|
+
) -> bool:
|
|
241
241
|
"""Check if padstack Instance is in given polygon data.
|
|
242
242
|
|
|
243
243
|
Parameters
|