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.

Files changed (79) hide show
  1. pyedb/__init__.py +1 -1
  2. pyedb/configuration/cfg_modeler.py +42 -11
  3. pyedb/configuration/cfg_ports_sources.py +9 -1
  4. pyedb/dotnet/database/cell/hierarchy/component.py +6 -6
  5. pyedb/dotnet/database/components.py +3 -3
  6. pyedb/dotnet/database/edb_data/padstacks_data.py +13 -0
  7. pyedb/dotnet/database/edb_data/primitives_data.py +3 -3
  8. pyedb/dotnet/database/edb_data/variables.py +3 -3
  9. pyedb/dotnet/database/materials.py +16 -16
  10. pyedb/dotnet/database/modeler.py +38 -4
  11. pyedb/dotnet/database/sim_setup_data/data/settings.py +28 -0
  12. pyedb/dotnet/database/stackup.py +1 -0
  13. pyedb/dotnet/database/utilities/hfss_simulation_setup.py +5 -6
  14. pyedb/dotnet/edb.py +22 -20
  15. pyedb/extensions/__init__.py +0 -0
  16. pyedb/extensions/via_design_backend.py +681 -0
  17. pyedb/grpc/database/components.py +537 -686
  18. pyedb/grpc/database/control_file.py +458 -149
  19. pyedb/grpc/database/definition/component_def.py +17 -14
  20. pyedb/grpc/database/definition/materials.py +60 -60
  21. pyedb/grpc/database/definition/package_def.py +8 -8
  22. pyedb/grpc/database/definition/padstack_def.py +31 -33
  23. pyedb/grpc/database/definitions.py +6 -4
  24. pyedb/grpc/database/geometry/arc_data.py +5 -5
  25. pyedb/grpc/database/geometry/point_3d_data.py +3 -3
  26. pyedb/grpc/database/geometry/polygon_data.py +5 -5
  27. pyedb/grpc/database/hfss.py +399 -397
  28. pyedb/grpc/database/hierarchy/component.py +60 -58
  29. pyedb/grpc/database/hierarchy/pin_pair_model.py +6 -6
  30. pyedb/grpc/database/hierarchy/pingroup.py +13 -11
  31. pyedb/grpc/database/hierarchy/s_parameter_model.py +1 -1
  32. pyedb/grpc/database/hierarchy/spice_model.py +1 -1
  33. pyedb/grpc/database/layers/layer.py +2 -2
  34. pyedb/grpc/database/layers/stackup_layer.py +144 -44
  35. pyedb/grpc/database/layout/layout.py +12 -12
  36. pyedb/grpc/database/layout/voltage_regulator.py +8 -8
  37. pyedb/grpc/database/layout_validation.py +5 -5
  38. pyedb/grpc/database/modeler.py +248 -245
  39. pyedb/grpc/database/net/differential_pair.py +4 -4
  40. pyedb/grpc/database/net/extended_net.py +7 -8
  41. pyedb/grpc/database/net/net.py +57 -46
  42. pyedb/grpc/database/nets.py +139 -122
  43. pyedb/grpc/database/padstacks.py +174 -190
  44. pyedb/grpc/database/ports/ports.py +23 -17
  45. pyedb/grpc/database/primitive/padstack_instance.py +45 -30
  46. pyedb/grpc/database/primitive/path.py +7 -7
  47. pyedb/grpc/database/primitive/polygon.py +9 -9
  48. pyedb/grpc/database/primitive/primitive.py +21 -21
  49. pyedb/grpc/database/primitive/rectangle.py +1 -1
  50. pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +1 -1
  51. pyedb/grpc/database/simulation_setup/hfss_general_settings.py +1 -1
  52. pyedb/grpc/database/simulation_setup/hfss_settings_options.py +1 -1
  53. pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +6 -6
  54. pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +2 -2
  55. pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +2 -2
  56. pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +1 -1
  57. pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +3 -3
  58. pyedb/grpc/database/siwave.py +166 -214
  59. pyedb/grpc/database/source_excitations.py +156 -0
  60. pyedb/grpc/database/stackup.py +415 -316
  61. pyedb/grpc/database/terminal/bundle_terminal.py +12 -12
  62. pyedb/grpc/database/terminal/edge_terminal.py +6 -5
  63. pyedb/grpc/database/terminal/padstack_instance_terminal.py +13 -13
  64. pyedb/grpc/database/terminal/pingroup_terminal.py +12 -12
  65. pyedb/grpc/database/terminal/point_terminal.py +6 -6
  66. pyedb/grpc/database/terminal/terminal.py +26 -26
  67. pyedb/grpc/database/utility/heat_sink.py +5 -5
  68. pyedb/grpc/database/utility/hfss_extent_info.py +21 -21
  69. pyedb/grpc/database/utility/layout_statistics.py +13 -13
  70. pyedb/grpc/database/utility/rlc.py +3 -3
  71. pyedb/grpc/database/utility/sources.py +1 -1
  72. pyedb/grpc/database/utility/sweep_data_distribution.py +1 -1
  73. pyedb/grpc/edb.py +524 -764
  74. {pyedb-0.49.0.dist-info → pyedb-0.50.1.dist-info}/METADATA +1 -1
  75. {pyedb-0.49.0.dist-info → pyedb-0.50.1.dist-info}/RECORD +77 -77
  76. pyedb/extensions/pre_layout_design_toolkit/via_design.py +0 -1151
  77. pyedb/grpc/database/utility/simulation_configuration.py +0 -3305
  78. {pyedb-0.49.0.dist-info → pyedb-0.50.1.dist-info}/LICENSE +0 -0
  79. {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(self, reference_net="GND", search_radius=5e-3, max_limit=0, component_only=True):
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[: int(len(center_line_arcs) / 2)]:
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