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
@@ -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,19 @@ class StackupLayer(GrpcStackupLayer):
205
205
  self.negative = value
206
206
 
207
207
  @property
208
- def material(self):
208
+ def is_stackup_layer(self) -> bool:
209
+ """Testing if layer is stackup layer.
210
+
211
+ Returns
212
+ -------
213
+ `True` if layer type is "signal" or "dielectric".
214
+ """
215
+ if self.type in ["signal", "dielectric", "via", "wirebond"]:
216
+ return True
217
+ return False
218
+
219
+ @property
220
+ def material(self) -> str:
209
221
  """Material.
210
222
 
211
223
  Returns
@@ -220,7 +232,7 @@ class StackupLayer(GrpcStackupLayer):
220
232
  self.set_material(name)
221
233
 
222
234
  @property
223
- def conductivity(self):
235
+ def conductivity(self) -> float:
224
236
  """Material conductivity.
225
237
 
226
238
  Returns
@@ -229,11 +241,12 @@ class StackupLayer(GrpcStackupLayer):
229
241
  Material conductivity value.
230
242
  """
231
243
  if self.material in self._pedb.materials.materials:
232
- return self._pedb.materials[self.material].conductivity
244
+ condcutivity = self._pedb.materials[self.material].conductivity
245
+ return condcutivity if condcutivity else 0.0
233
246
  return None
234
247
 
235
248
  @property
236
- def permittivity(self):
249
+ def permittivity(self) -> float:
237
250
  """Material permittivity.
238
251
 
239
252
  Returns
@@ -242,11 +255,12 @@ class StackupLayer(GrpcStackupLayer):
242
255
  Material permittivity value.
243
256
  """
244
257
  if self.material in self._pedb.materials.materials:
245
- return self._pedb.materials[self.material].permittivity
258
+ permittivity = self._pedb.materials[self.material].permittivity
259
+ return permittivity if permittivity else 0.0
246
260
  return None
247
261
 
248
262
  @property
249
- def loss_tangent(self):
263
+ def loss_tangent(self) -> float:
250
264
  """Material loss_tangent.
251
265
 
252
266
  Returns
@@ -255,11 +269,12 @@ class StackupLayer(GrpcStackupLayer):
255
269
  Material loss tangent value.
256
270
  """
257
271
  if self.material in self._pedb.materials.materials:
258
- return self._pedb.materials[self.material].loss_tangent
272
+ loss_tangent = self._pedb.materials[self.material].loss_tangent
273
+ return loss_tangent if loss_tangent else 0.0
259
274
  return None
260
275
 
261
276
  @property
262
- def dielectric_fill(self):
277
+ def dielectric_fill(self) -> str:
263
278
  """Material name of the layer dielectric fill.
264
279
 
265
280
  Returns
@@ -270,7 +285,7 @@ class StackupLayer(GrpcStackupLayer):
270
285
  if self.type == "signal":
271
286
  return self.get_fill_material()
272
287
  else:
273
- return
288
+ return None
274
289
 
275
290
  @dielectric_fill.setter
276
291
  def dielectric_fill(self, name):
@@ -280,7 +295,7 @@ class StackupLayer(GrpcStackupLayer):
280
295
  pass
281
296
 
282
297
  @property
283
- def thickness(self):
298
+ def thickness(self) -> float:
284
299
  """Layer thickness.
285
300
 
286
301
  Returns
@@ -295,7 +310,7 @@ class StackupLayer(GrpcStackupLayer):
295
310
  super(StackupLayer, self.__class__).thickness.__set__(self, GrpcValue(value))
296
311
 
297
312
  @property
298
- def etch_factor(self):
313
+ def etch_factor(self) -> float:
299
314
  """Layer etching factor.
300
315
 
301
316
  Returns
@@ -314,7 +329,7 @@ class StackupLayer(GrpcStackupLayer):
314
329
  super(StackupLayer, self.__class__).etch_factor.__set__(self, GrpcValue(value))
315
330
 
316
331
  @property
317
- def top_hallhuray_nodule_radius(self):
332
+ def top_hallhuray_nodule_radius(self) -> float:
318
333
  """Huray model nodule radius on layer top.
319
334
 
320
335
  Returns
@@ -327,9 +342,9 @@ class StackupLayer(GrpcStackupLayer):
327
342
  if len(top_roughness_model) == 2:
328
343
  return top_roughness_model[0].value
329
344
  else:
330
- return None
345
+ return 0.0
331
346
  except:
332
- return None
347
+ return 0.0
333
348
 
334
349
  @top_hallhuray_nodule_radius.setter
335
350
  def top_hallhuray_nodule_radius(self, value):
@@ -342,7 +357,7 @@ class StackupLayer(GrpcStackupLayer):
342
357
  pass
343
358
 
344
359
  @property
345
- def top_hallhuray_surface_ratio(self):
360
+ def top_hallhuray_surface_ratio(self) -> float:
346
361
  """Huray model surface ratio on layer top.
347
362
 
348
363
  Returns
@@ -355,9 +370,9 @@ class StackupLayer(GrpcStackupLayer):
355
370
  if len(top_roughness_model) == 2:
356
371
  return top_roughness_model[1].value
357
372
  else:
358
- return None
373
+ return 0.0
359
374
  except:
360
- return None
375
+ return 0.0
361
376
 
362
377
  @top_hallhuray_surface_ratio.setter
363
378
  def top_hallhuray_surface_ratio(self, value):
@@ -370,7 +385,7 @@ class StackupLayer(GrpcStackupLayer):
370
385
  pass
371
386
 
372
387
  @property
373
- def bottom_hallhuray_nodule_radius(self):
388
+ def bottom_hallhuray_nodule_radius(self) -> float:
374
389
  """Huray model nodule radius on layer bottom.
375
390
 
376
391
  Returns
@@ -383,9 +398,9 @@ class StackupLayer(GrpcStackupLayer):
383
398
  if len(bottom_roughness_model) == 2:
384
399
  return round(bottom_roughness_model[0].value, 9)
385
400
  else:
386
- return None
401
+ return 0.0
387
402
  except:
388
- return None
403
+ return 0.0
389
404
 
390
405
  @bottom_hallhuray_nodule_radius.setter
391
406
  def bottom_hallhuray_nodule_radius(self, value):
@@ -398,7 +413,7 @@ class StackupLayer(GrpcStackupLayer):
398
413
  pass
399
414
 
400
415
  @property
401
- def bottom_hallhuray_surface_ratio(self):
416
+ def bottom_hallhuray_surface_ratio(self) -> float:
402
417
  """Huray model surface ratio on layer bottom.
403
418
 
404
419
  Returns
@@ -411,9 +426,9 @@ class StackupLayer(GrpcStackupLayer):
411
426
  if len(bottom_roughness_model) == 2:
412
427
  return bottom_roughness_model[1].value
413
428
  else:
414
- return None
429
+ return 0.0
415
430
  except:
416
- return None
431
+ return 0.0
417
432
 
418
433
  @bottom_hallhuray_surface_ratio.setter
419
434
  def bottom_hallhuray_surface_ratio(self, value):
@@ -426,7 +441,7 @@ class StackupLayer(GrpcStackupLayer):
426
441
  pass
427
442
 
428
443
  @property
429
- def side_hallhuray_nodule_radius(self):
444
+ def side_hallhuray_nodule_radius(self) -> float:
430
445
  """Huray model nodule radius on layer sides.
431
446
 
432
447
  Returns
@@ -439,9 +454,9 @@ class StackupLayer(GrpcStackupLayer):
439
454
  side_roughness_model = self.get_roughness_model(GrpcRoughnessRegion.SIDE)
440
455
  if len(side_roughness_model) == 2:
441
456
  return round(side_roughness_model[0].value, 9)
442
- return None
457
+ return 0.0
443
458
  except:
444
- return None
459
+ return 0.0
445
460
 
446
461
  @side_hallhuray_nodule_radius.setter
447
462
  def side_hallhuray_nodule_radius(self, value):
@@ -454,7 +469,7 @@ class StackupLayer(GrpcStackupLayer):
454
469
  pass
455
470
 
456
471
  @property
457
- def side_hallhuray_surface_ratio(self):
472
+ def side_hallhuray_surface_ratio(self) -> float:
458
473
  """Huray model surface ratio on layer sides.
459
474
 
460
475
  Returns
@@ -466,9 +481,9 @@ class StackupLayer(GrpcStackupLayer):
466
481
  side_roughness_model = self.get_roughness_model(GrpcRoughnessRegion.SIDE)
467
482
  if len(side_roughness_model) == 2:
468
483
  return side_roughness_model[1].value
469
- return None
484
+ return 0.0
470
485
  except:
471
- return None
486
+ return 0.0
472
487
 
473
488
  @side_hallhuray_surface_ratio.setter
474
489
  def side_hallhuray_surface_ratio(self, value):
@@ -481,7 +496,7 @@ class StackupLayer(GrpcStackupLayer):
481
496
  pass
482
497
 
483
498
  @property
484
- def top_groisse_roughness(self):
499
+ def top_groisse_roughness(self) -> float:
485
500
  """Groisse model on layer top.
486
501
 
487
502
  Returns
@@ -494,9 +509,9 @@ class StackupLayer(GrpcStackupLayer):
494
509
  if isinstance(top_roughness_model, GrpcValue):
495
510
  return top_roughness_model.value
496
511
  else:
497
- return None
512
+ return 0.0
498
513
  except:
499
- return None
514
+ return 0.0
500
515
 
501
516
  @top_groisse_roughness.setter
502
517
  def top_groisse_roughness(self, value):
@@ -509,7 +524,7 @@ class StackupLayer(GrpcStackupLayer):
509
524
  pass
510
525
 
511
526
  @property
512
- def bottom_groisse_roughness(self):
527
+ def bottom_groisse_roughness(self) -> float:
513
528
  """Groisse model on layer bottom.
514
529
 
515
530
  Returns
@@ -522,9 +537,9 @@ class StackupLayer(GrpcStackupLayer):
522
537
  if isinstance(bottom_roughness_model, GrpcValue):
523
538
  return bottom_roughness_model.value
524
539
  else:
525
- return None
540
+ return 0.0
526
541
  except:
527
- return None
542
+ return 0.0
528
543
 
529
544
  @bottom_groisse_roughness.setter
530
545
  def bottom_groisse_roughness(self, value):
@@ -537,7 +552,7 @@ class StackupLayer(GrpcStackupLayer):
537
552
  pass
538
553
 
539
554
  @property
540
- def side_groisse_roughness(self):
555
+ def side_groisse_roughness(self) -> float:
541
556
  """Groisse model on layer bottom.
542
557
 
543
558
  Returns
@@ -550,9 +565,9 @@ class StackupLayer(GrpcStackupLayer):
550
565
  if isinstance(side_roughness_model, GrpcValue):
551
566
  return side_roughness_model.value
552
567
  else:
553
- return None
568
+ return 0.0
554
569
  except:
555
- return None
570
+ return 0.0
556
571
 
557
572
  @side_groisse_roughness.setter
558
573
  def side_groisse_roughness(self, value):
@@ -571,7 +586,7 @@ class StackupLayer(GrpcStackupLayer):
571
586
  huray_surface_ratio="2.9",
572
587
  groisse_roughness="1um",
573
588
  apply_on_surface="all",
574
- ):
589
+ ) -> bool:
575
590
  """Assign roughness model on this layer.
576
591
 
577
592
  Parameters
@@ -588,6 +603,9 @@ class StackupLayer(GrpcStackupLayer):
588
603
  Where to assign roughness model. The default is ``"all"``. Options are ``"top"``, ``"bottom"``,
589
604
  ``"side"``.
590
605
 
606
+ Returns
607
+ -------
608
+ bool
591
609
  """
592
610
  regions = []
593
611
  if apply_on_surface == "all":
@@ -605,6 +623,13 @@ class StackupLayer(GrpcStackupLayer):
605
623
  else:
606
624
  model = GrpcValue(groisse_roughness)
607
625
  self.set_roughness_model(model, r)
626
+ if [
627
+ self.get_roughness_model(GrpcRoughnessRegion.TOP),
628
+ self.get_roughness_model(GrpcRoughnessRegion.BOTTOM),
629
+ self.get_roughness_model(GrpcRoughnessRegion.SIDE),
630
+ ]:
631
+ return True
632
+ return False
608
633
 
609
634
  @property
610
635
  def properties(self):
@@ -649,3 +674,78 @@ class StackupLayer(GrpcStackupLayer):
649
674
  data["roughness"] = roughness
650
675
  data["etching"] = {"enabled": self.etch_factor_enabled, "factor": self.etch_factor}
651
676
  return data
677
+
678
+ def _json_format(self):
679
+ dict_out = {
680
+ "color": self.color,
681
+ "dielectric_fill": self.dielectric_fill,
682
+ "etch_factor": self.etch_factor,
683
+ "material": self.material,
684
+ "loss_tangent": self.loss_tangent,
685
+ "permittivity": self.permittivity,
686
+ "conductivity": self.conductivity,
687
+ "zones": self.zones,
688
+ "transparency": self.transparency,
689
+ "name": self.name,
690
+ "roughness_enabled": self.roughness_enabled,
691
+ "thickness": self.thickness,
692
+ "lower_elevation": self.lower_elevation,
693
+ "upper_elevation": self.upper_elevation,
694
+ "type": self.type,
695
+ "top_hallhuray_nodule_radius": self.top_hallhuray_nodule_radius,
696
+ "top_hallhuray_surface_ratio": self.top_hallhuray_surface_ratio,
697
+ "side_hallhuray_nodule_radius": self.side_hallhuray_nodule_radius,
698
+ "side_hallhuray_surface_ratio": self.side_hallhuray_surface_ratio,
699
+ "bottom_hallhuray_nodule_radius": self.bottom_hallhuray_nodule_radius,
700
+ "bottom_hallhuray_surface_ratio": self.bottom_hallhuray_surface_ratio,
701
+ }
702
+ return dict_out
703
+
704
+ def _load_layer(self, layer):
705
+ if layer:
706
+ self.color = layer["color"]
707
+ self.type = layer["type"]
708
+ if isinstance(layer["material"], str):
709
+ self.material = layer["material"]
710
+ else:
711
+ material_data = layer["material"]
712
+ if material_data is not None:
713
+ material_name = layer["material"]["name"]
714
+ self._pedb.materials.add_material(material_name, **material_data)
715
+ self.material = material_name
716
+ if layer["dielectric_fill"]:
717
+ if isinstance(layer["dielectric_fill"], str):
718
+ self.dielectric_fill = layer["dielectric_fill"]
719
+ else:
720
+ dielectric_data = layer["dielectric_fill"]
721
+ if dielectric_data is not None:
722
+ self._pedb.materials.add_material(**dielectric_data)
723
+ self.dielectric_fill = layer["dielectric_fill"]["name"]
724
+ self.thickness = layer["thickness"]
725
+ self.etch_factor = layer["etch_factor"]
726
+ self.roughness_enabled = layer["roughness_enabled"]
727
+ if self.roughness_enabled:
728
+ self.top_hallhuray_nodule_radius = layer["top_hallhuray_nodule_radius"]
729
+ self.top_hallhuray_surface_ratio = layer["top_hallhuray_surface_ratio"]
730
+ self.assign_roughness_model(
731
+ "huray",
732
+ layer["top_hallhuray_nodule_radius"],
733
+ layer["top_hallhuray_surface_ratio"],
734
+ apply_on_surface="top",
735
+ )
736
+ self.bottom_hallhuray_nodule_radius = layer["bottom_hallhuray_nodule_radius"]
737
+ self.bottom_hallhuray_surface_ratio = layer["bottom_hallhuray_surface_ratio"]
738
+ self.assign_roughness_model(
739
+ "huray",
740
+ layer["bottom_hallhuray_nodule_radius"],
741
+ layer["bottom_hallhuray_surface_ratio"],
742
+ apply_on_surface="bottom",
743
+ )
744
+ self.side_hallhuray_nodule_radius = layer["side_hallhuray_nodule_radius"]
745
+ self.side_hallhuray_surface_ratio = layer["side_hallhuray_surface_ratio"]
746
+ self.assign_roughness_model(
747
+ "huray",
748
+ layer["side_hallhuray_nodule_radius"],
749
+ layer["side_hallhuray_surface_ratio"],
750
+ apply_on_surface="side",
751
+ )
@@ -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.dotnet.database.edb_data.padstacks_data import EDBPadstackInstance
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, EDBPadstackInstance):
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, EDBPadstackInstance):
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
@@ -37,7 +37,7 @@ class LayoutValidation:
37
37
  self._pedb = pedb
38
38
  self._layout_instance = self._pedb.layout_instance
39
39
 
40
- def dc_shorts(self, net_list=None, fix=False):
40
+ def dc_shorts(self, net_list=None, fix=False) -> list[list[str, str]]:
41
41
  """Find DC shorts on layout.
42
42
 
43
43
  Parameters
@@ -130,7 +130,7 @@ class LayoutValidation:
130
130
  clean_disjoints_less_than=0.0,
131
131
  order_by_area=False,
132
132
  keep_disjoint_pins=False,
133
- ):
133
+ ) -> list[str]:
134
134
  """Find and fix disjoint nets from a given netlist.
135
135
 
136
136
  Parameters
@@ -263,7 +263,7 @@ class LayoutValidation:
263
263
 
264
264
  return new_nets
265
265
 
266
- def fix_self_intersections(self, net_list=None):
266
+ def fix_self_intersections(self, net_list=None) -> bool:
267
267
  """Find and fix self intersections from a given netlist.
268
268
 
269
269
  Parameters
@@ -306,7 +306,7 @@ class LayoutValidation:
306
306
  self._pedb._logger.info("Found {} illegal net names.".format(len(renamed_nets)))
307
307
  return
308
308
 
309
- def illegal_rlc_values(self, fix=False):
309
+ def illegal_rlc_values(self, fix=False) -> list[str]:
310
310
  """Find and fix RLC illegal values."""
311
311
  inductors = self._pedb.components.inductors
312
312
 
@@ -318,7 +318,7 @@ class LayoutValidation:
318
318
  if fix:
319
319
  v.rlc_values = [0, 1, 0]
320
320
  self._pedb._logger.info(f"Found {len(temp)} inductors have no value.")
321
- return
321
+ return temp
322
322
 
323
323
  def padstacks_no_name(self, fix=False):
324
324
  pds = self._pedb.layout.padstack_instances