pyedb 0.28.0__py3-none-any.whl → 0.30.0__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 (33) hide show
  1. pyedb/__init__.py +29 -3
  2. pyedb/configuration/cfg_boundaries.py +44 -74
  3. pyedb/configuration/cfg_common.py +1 -1
  4. pyedb/configuration/cfg_components.py +31 -105
  5. pyedb/configuration/cfg_data.py +4 -9
  6. pyedb/configuration/cfg_general.py +19 -8
  7. pyedb/configuration/cfg_operations.py +14 -10
  8. pyedb/configuration/cfg_padstacks.py +41 -61
  9. pyedb/configuration/cfg_ports_sources.py +4 -2
  10. pyedb/configuration/cfg_s_parameter_models.py +85 -29
  11. pyedb/configuration/cfg_setup.py +5 -0
  12. pyedb/configuration/cfg_stackup.py +2 -6
  13. pyedb/configuration/configuration.py +42 -9
  14. pyedb/dotnet/edb.py +116 -57
  15. pyedb/dotnet/edb_core/cell/hierarchy/component.py +202 -0
  16. pyedb/dotnet/edb_core/cell/layout.py +2 -13
  17. pyedb/dotnet/edb_core/cell/primitive/primitive.py +10 -2
  18. pyedb/dotnet/edb_core/cell/terminal/terminal.py +4 -3
  19. pyedb/dotnet/edb_core/components.py +1 -2
  20. pyedb/dotnet/edb_core/definition/component_def.py +17 -1
  21. pyedb/dotnet/edb_core/definition/component_model.py +0 -4
  22. pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +3 -3
  23. pyedb/dotnet/edb_core/edb_data/layer_data.py +95 -1
  24. pyedb/dotnet/edb_core/edb_data/nets_data.py +10 -7
  25. pyedb/dotnet/edb_core/edb_data/padstacks_data.py +67 -5
  26. pyedb/dotnet/edb_core/layout_validation.py +27 -4
  27. pyedb/dotnet/edb_core/nets.py +162 -181
  28. pyedb/dotnet/edb_core/padstack.py +0 -1
  29. pyedb/siwave.py +5 -1
  30. {pyedb-0.28.0.dist-info → pyedb-0.30.0.dist-info}/METADATA +3 -3
  31. {pyedb-0.28.0.dist-info → pyedb-0.30.0.dist-info}/RECORD +33 -33
  32. {pyedb-0.28.0.dist-info → pyedb-0.30.0.dist-info}/LICENSE +0 -0
  33. {pyedb-0.28.0.dist-info → pyedb-0.30.0.dist-info}/WHEEL +0 -0
@@ -22,6 +22,7 @@
22
22
 
23
23
  import re
24
24
 
25
+ from pyedb.dotnet.clr_module import String
25
26
  from pyedb.dotnet.edb_core.edb_data.padstacks_data import EDBPadstackInstance
26
27
  from pyedb.dotnet.edb_core.edb_data.primitives_data import Primitive
27
28
  from pyedb.generic.general_methods import generate_unique_name
@@ -168,7 +169,7 @@ class LayoutValidation:
168
169
  _objects_list[n_name].append(prim)
169
170
  else:
170
171
  _objects_list[n_name] = [prim]
171
- for pad in list(self._pedb.padstacks.instances.values()):
172
+ for pad in list(self._pedb.layout.padstack_instances):
172
173
  n_name = pad.net_name
173
174
  if n_name in _padstacks_list:
174
175
  _padstacks_list[n_name].append(pad)
@@ -190,9 +191,9 @@ class LayoutValidation:
190
191
  l1 = objs[0].get_connected_object_id_set()
191
192
  l1.append(objs[0].id)
192
193
  repetition = False
193
- for net_list in net_groups:
194
- if set(l1).intersection(net_list):
195
- net_groups.append([i for i in l1 if i not in net_list])
194
+ for id_by_net in net_groups:
195
+ if set(l1).intersection(id_by_net):
196
+ net_groups.append([i for i in l1 if i not in id_by_net])
196
197
  repetition = True
197
198
  if not repetition:
198
199
  net_groups.append(l1)
@@ -318,3 +319,25 @@ class LayoutValidation:
318
319
 
319
320
  self._pedb._logger.info("Found {} inductors have no value.".format(len(temp)))
320
321
  return
322
+
323
+ def padstacks_no_name(self, fix=False):
324
+ pds = self._pedb.layout.padstack_instances
325
+ counts = 0
326
+ via_count = 1
327
+ for obj in pds:
328
+ val = String("")
329
+ _, name = obj._edb_object.GetProductProperty(self._pedb.edb_api.ProductId.Designer, 11, val)
330
+ name = str(name).strip("'")
331
+ if name == "":
332
+ counts += 1
333
+ if fix:
334
+ if not obj.component:
335
+ obj._edb_object.SetProductProperty(
336
+ self._pedb.edb_api.ProductId.Designer, 11, f"via_{via_count}"
337
+ )
338
+ via_count = via_count + 1
339
+ else:
340
+ obj._edb_object.SetProductProperty(
341
+ self._pedb.edb_api.ProductId.Designer, 11, f"{obj.component.name}-{obj.component_pin}"
342
+ )
343
+ self._pedb._logger.info(f"Found {counts}/{len(pds)} padstacks have no name.")
@@ -444,6 +444,7 @@ class EdbNets(object):
444
444
  codes.append(79)
445
445
  objects_lists.append([vertices, codes, "b", "Outline", 1.0, 1.5, "contour"])
446
446
  n_label += 1
447
+ layer_colors = {i: k.color for i, k in self._pedb.stackup.layers.items()}
447
448
  top_layer = list(self._pedb.stackup.signal_layers.keys())[0]
448
449
  bottom_layer = list(self._pedb.stackup.signal_layers.keys())[-1]
449
450
  if plot_components_on_top or plot_components_on_bottom:
@@ -481,206 +482,186 @@ class EdbNets(object):
481
482
  objects_lists.append([vertices, codes, label_colors[label], None, 1.0, 2.0, "contour"])
482
483
  nc += 1
483
484
  self._logger.debug("Plotted {} component(s)".format(nc))
484
-
485
- for path in self._pedb.modeler.paths:
486
- if path.is_void:
485
+ for prim in self._pedb.modeler.primitives:
486
+ if prim.is_void:
487
487
  continue
488
- net_name = path.net_name
489
- layer_name = path.layer_name
488
+ net_name = prim.net_name
489
+ layer_name = prim.layer_name
490
490
  if nets and (net_name not in nets or layer_name not in layers):
491
491
  continue
492
- try:
493
- x, y = path.points()
494
- except ValueError:
495
- x = None
496
- if not x:
497
- continue
498
- create_label = False
499
- if not color_by_net:
500
- label = "Layer " + layer_name
501
- if label not in label_colors:
502
- try:
503
- color = path.layer.GetColor()
504
- c = (
505
- float(color.Item1 / 255),
506
- float(color.Item2 / 255),
507
- float(color.Item3 / 255),
508
- )
509
- except:
510
- c = list(CSS4_COLORS.keys())[color_index]
492
+ prim_type = prim.primitive_type
493
+ if prim_type == "path":
494
+ try:
495
+ x, y = prim.points()
496
+ except ValueError:
497
+ x = None
498
+ if not x:
499
+ continue
500
+ create_label = False
501
+ if not color_by_net:
502
+ label = "Layer " + layer_name
503
+ if label not in label_colors:
504
+ try:
505
+ color = layer_colors[layer_name]
506
+ c = (
507
+ float(color[0] / 255),
508
+ float(color[1] / 255),
509
+ float(color[2] / 255),
510
+ )
511
+ except:
512
+ c = list(CSS4_COLORS.keys())[color_index]
513
+ color_index += 1
514
+ if color_index >= len(CSS4_COLORS):
515
+ color_index = 0
516
+ label_colors[label] = c
517
+ create_label = True
518
+ else:
519
+ label = "Net " + net_name
520
+ if label not in label_colors:
521
+ label_colors[label] = list(CSS4_COLORS.keys())[color_index]
511
522
  color_index += 1
512
523
  if color_index >= len(CSS4_COLORS):
513
524
  color_index = 0
514
- label_colors[label] = c
515
- create_label = True
516
- else:
517
- label = "Net " + net_name
518
- if label not in label_colors:
519
- label_colors[label] = list(CSS4_COLORS.keys())[color_index]
520
- color_index += 1
521
- if color_index >= len(CSS4_COLORS):
522
- color_index = 0
523
- create_label = True
524
-
525
- if create_label and n_label <= max_labels:
526
- objects_lists.append([x, y, label_colors[label], label, 0.4, "fill"])
527
- n_label += 1
528
- else:
529
- objects_lists.append([x, y, label_colors[label], None, 0.4, "fill"])
525
+ create_label = True
530
526
 
531
- for poly in self._pedb.modeler.polygons:
532
- if poly.is_void:
533
- continue
534
- net_name = poly.net_name
535
- layer_name = poly.layer_name
536
- if nets and (net_name != "" and net_name not in nets or layer_name not in layers):
537
- continue
538
- xt, yt = poly.points()
539
- if not xt:
540
- continue
541
- x, y = GeometryOperators.orient_polygon(xt, yt, clockwise=True)
542
- vertices = [(i, j) for i, j in zip(x, y)]
543
- codes = [2 for _ in vertices]
544
- codes[0] = 1
545
- vertices.append((0, 0))
546
- codes.append(79)
527
+ if create_label and n_label <= max_labels:
528
+ objects_lists.append([x, y, label_colors[label], label, 0.4, "fill"])
529
+ n_label += 1
530
+ else:
531
+ objects_lists.append([x, y, label_colors[label], None, 0.4, "fill"])
532
+ elif prim_type == "polygon":
533
+ xt, yt = prim.points()
534
+ if not xt:
535
+ continue
536
+ x, y = GeometryOperators.orient_polygon(xt, yt, clockwise=True)
537
+ vertices = [(i, j) for i, j in zip(x, y)]
538
+ codes = [2 for _ in vertices]
539
+ codes[0] = 1
540
+ vertices.append((0, 0))
541
+ codes.append(79)
547
542
 
548
- for void in poly.voids:
549
- xvt, yvt = void.points()
550
- if xvt:
551
- xv, yv = GeometryOperators.orient_polygon(xvt, yvt, clockwise=False)
552
- tmpV = [(i, j) for i, j in zip(xv, yv)]
553
- vertices.extend(tmpV)
554
- tmpC = [2 for _ in tmpV]
555
- tmpC[0] = 1
556
- codes.extend(tmpC)
557
- vertices.append((0, 0))
558
- codes.append(79)
559
-
560
- create_label = False
561
- if not color_by_net:
562
- label = "Layer " + layer_name
563
- if label not in label_colors:
564
- try:
565
- color = poly.GetLayer().GetColor()
566
- c = (
567
- float(color.Item1 / 255),
568
- float(color.Item2 / 255),
569
- float(color.Item3 / 255),
570
- )
571
- except:
572
- c = list(CSS4_COLORS.keys())[color_index]
543
+ for void in prim.voids:
544
+ xvt, yvt = void.points()
545
+ if xvt:
546
+ xv, yv = GeometryOperators.orient_polygon(xvt, yvt, clockwise=False)
547
+ tmpV = [(i, j) for i, j in zip(xv, yv)]
548
+ vertices.extend(tmpV)
549
+ tmpC = [2 for _ in tmpV]
550
+ tmpC[0] = 1
551
+ codes.extend(tmpC)
552
+ vertices.append((0, 0))
553
+ codes.append(79)
554
+
555
+ create_label = False
556
+ if not color_by_net:
557
+ label = "Layer " + layer_name
558
+ if label not in label_colors:
559
+ try:
560
+ color = layer_colors[layer_name]
561
+ c = (
562
+ float(color[0] / 255),
563
+ float(color[1] / 255),
564
+ float(color[2] / 255),
565
+ )
566
+ except:
567
+ c = list(CSS4_COLORS.keys())[color_index]
568
+ color_index += 1
569
+ if color_index >= len(CSS4_COLORS):
570
+ color_index = 0
571
+ label_colors[label] = c
572
+ create_label = True
573
+ else:
574
+ label = "Net " + net_name
575
+ if label not in label_colors:
576
+ label_colors[label] = list(CSS4_COLORS.keys())[color_index]
573
577
  color_index += 1
574
578
  if color_index >= len(CSS4_COLORS):
575
579
  color_index = 0
576
- label_colors[label] = c
577
- create_label = True
578
- else:
579
- label = "Net " + net_name
580
- if label not in label_colors:
581
- label_colors[label] = list(CSS4_COLORS.keys())[color_index]
582
- color_index += 1
583
- if color_index >= len(CSS4_COLORS):
584
- color_index = 0
585
- create_label = True
586
-
587
- if create_label and n_label <= max_labels:
588
- if layer_name == "Outline":
589
- objects_lists.append([vertices, codes, label_colors[label], label, 1.0, 2.0, "contour"])
580
+ create_label = True
581
+
582
+ if create_label and n_label <= max_labels:
583
+ if layer_name == "Outline":
584
+ objects_lists.append([vertices, codes, label_colors[label], label, 1.0, 2.0, "contour"])
585
+ else:
586
+ objects_lists.append([vertices, codes, label_colors[label], label, 0.4, "path"])
587
+ n_label += 1
590
588
  else:
591
- objects_lists.append([vertices, codes, label_colors[label], label, 0.4, "path"])
592
- n_label += 1
593
- else:
594
- if layer_name == "Outline":
595
- objects_lists.append([vertices, codes, label_colors[label], None, 1.0, 2.0, "contour"])
589
+ if layer_name == "Outline":
590
+ objects_lists.append([vertices, codes, label_colors[label], None, 1.0, 2.0, "contour"])
591
+ else:
592
+ objects_lists.append([vertices, codes, label_colors[label], None, 0.4, "path"])
593
+ elif prim_type == "circle":
594
+ x, y = prim.points()
595
+ if not x:
596
+ continue
597
+ create_label = False
598
+ if not color_by_net:
599
+ label = "Layer " + layer_name
600
+ if label not in label_colors:
601
+ try:
602
+ color = layer_colors[layer_name]
603
+ c = (
604
+ float(color[0] / 255),
605
+ float(color[1] / 255),
606
+ float(color[2] / 255),
607
+ )
608
+ except:
609
+ c = list(CSS4_COLORS.keys())[color_index]
610
+ color_index += 1
611
+ if color_index >= len(CSS4_COLORS):
612
+ color_index = 0
613
+ label_colors[label] = c
614
+ create_label = True
596
615
  else:
597
- objects_lists.append([vertices, codes, label_colors[label], None, 0.4, "path"])
598
-
599
- for circle in self._pedb.modeler.circles:
600
- if circle.is_void:
601
- continue
602
- net_name = circle.net_name
603
- layer_name = circle.layer_name
604
- if nets and (net_name not in nets or layer_name not in layers):
605
- continue
606
- x, y = circle.points()
607
- if not x:
608
- continue
609
- create_label = False
610
- if not color_by_net:
611
- label = "Layer " + layer_name
612
- if label not in label_colors:
613
- try:
614
- color = circle.layer.GetColor()
615
- c = (
616
- float(color.Item1 / 255),
617
- float(color.Item2 / 255),
618
- float(color.Item3 / 255),
619
- )
620
- except:
621
- c = list(CSS4_COLORS.keys())[color_index]
616
+ label = "Net " + net_name
617
+ if label not in label_colors:
618
+ label_colors[label] = list(CSS4_COLORS.keys())[color_index]
622
619
  color_index += 1
623
620
  if color_index >= len(CSS4_COLORS):
624
621
  color_index = 0
625
- label_colors[label] = c
626
- create_label = True
627
- else:
628
- label = "Net " + net_name
629
- if label not in label_colors:
630
- label_colors[label] = list(CSS4_COLORS.keys())[color_index]
631
- color_index += 1
632
- if color_index >= len(CSS4_COLORS):
633
- color_index = 0
634
- create_label = True
635
-
636
- if create_label and n_label <= max_labels:
637
- objects_lists.append([x, y, label_colors[label], label, 0.4, "fill"])
638
- n_label += 1
639
- else:
640
- objects_lists.append([x, y, label_colors[label], None, 0.4, "fill"])
622
+ create_label = True
641
623
 
642
- for rect in self._pedb.modeler.rectangles:
643
- if rect.is_void:
644
- continue
645
- net_name = rect.net_name
646
- layer_name = rect.layer_name
647
- if nets and (net_name not in nets or layer_name not in layers):
648
- continue
649
- x, y = rect.points()
650
- if not x:
651
- continue
652
- create_label = False
653
- if not color_by_net:
654
- label = "Layer " + layer_name
655
- if label not in label_colors:
656
- try:
657
- color = rect.layer.GetColor()
658
- c = (
659
- float(color.Item1 / 255),
660
- float(color.Item2 / 255),
661
- float(color.Item3 / 255),
662
- )
663
- except:
664
- c = list(CSS4_COLORS.keys())[color_index]
624
+ if create_label and n_label <= max_labels:
625
+ objects_lists.append([x, y, label_colors[label], label, 0.4, "fill"])
626
+ n_label += 1
627
+ else:
628
+ objects_lists.append([x, y, label_colors[label], None, 0.4, "fill"])
629
+ elif prim_type == "rectangle":
630
+ x, y = prim.points()
631
+ if not x:
632
+ continue
633
+ create_label = False
634
+ if not color_by_net:
635
+ label = "Layer " + layer_name
636
+ if label not in label_colors:
637
+ try:
638
+ color = layer_colors[layer_name]
639
+ c = (
640
+ float(color[0] / 255),
641
+ float(color[1] / 255),
642
+ float(color[2] / 255),
643
+ )
644
+ except:
645
+ c = list(CSS4_COLORS.keys())[color_index]
646
+ color_index += 1
647
+ if color_index >= len(CSS4_COLORS):
648
+ color_index = 0
649
+ label_colors[label] = c
650
+ create_label = True
651
+ else:
652
+ label = "Net " + net_name
653
+ if label not in label_colors:
654
+ label_colors[label] = list(CSS4_COLORS.keys())[color_index]
665
655
  color_index += 1
666
656
  if color_index >= len(CSS4_COLORS):
667
657
  color_index = 0
668
- label_colors[label] = c
669
- create_label = True
670
- else:
671
- label = "Net " + net_name
672
- if label not in label_colors:
673
- label_colors[label] = list(CSS4_COLORS.keys())[color_index]
674
- color_index += 1
675
- if color_index >= len(CSS4_COLORS):
676
- color_index = 0
677
- create_label = True
678
-
679
- if create_label and n_label <= max_labels:
680
- objects_lists.append([x, y, label_colors[label], label, 0.4, "fill"])
681
- n_label += 1
682
- else:
683
- objects_lists.append([x, y, label_colors[label], None, 0.4, "fill"])
658
+ create_label = True
659
+
660
+ if create_label and n_label <= max_labels:
661
+ objects_lists.append([x, y, label_colors[label], label, 0.4, "fill"])
662
+ n_label += 1
663
+ else:
664
+ objects_lists.append([x, y, label_colors[label], None, 0.4, "fill"])
684
665
 
685
666
  end_time = time.time() - start_time
686
667
  self._logger.info("Nets Point Generation time %s seconds", round(end_time, 3))
@@ -782,7 +763,7 @@ class EdbNets(object):
782
763
  fig_size_y = board_size_y * fig_size_x / board_size_x
783
764
  size = (fig_size_x, fig_size_y)
784
765
 
785
- plot_matplotlib(
766
+ return plot_matplotlib(
786
767
  plot_data=object_lists,
787
768
  size=size,
788
769
  show_legend=show_legend,
@@ -220,7 +220,6 @@ class EdbPadstacks(object):
220
220
  List of padstack instances.
221
221
 
222
222
  """
223
-
224
223
  edb_padstack_inst_list = self._pedb.layout.padstack_instances
225
224
  if len(self._instances) == len(edb_padstack_inst_list):
226
225
  return self._instances
pyedb/siwave.py CHANGED
@@ -555,13 +555,15 @@ class Siwave(object): # pragma no cover
555
555
  self.import_edb(temp_edb)
556
556
  shutil.rmtree(Path(temp_edb), ignore_errors=True)
557
557
 
558
- def export_configuration(self, file_path: str):
558
+ def export_configuration(self, file_path: str, fix_padstack_names: bool = False):
559
559
  """Export layout information into a configuration file.
560
560
 
561
561
  Parameters
562
562
  ----------
563
563
  file_path : str
564
564
  Path to the configuration file.
565
+ fix_padstack_names : bool
566
+ Name all the padstacks in edb.
565
567
  """
566
568
  file_path = parser_file_path(file_path)
567
569
 
@@ -570,5 +572,7 @@ class Siwave(object): # pragma no cover
570
572
 
571
573
  self.export_edb(temp_edb)
572
574
  edbapp = Edb(temp_edb, edbversion=self.current_version)
575
+ if fix_padstack_names:
576
+ edbapp.layout_validation.padstacks_no_name(fix=True)
573
577
  edbapp.configuration.export(file_path)
574
578
  edbapp.close()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyedb
3
- Version: 0.28.0
3
+ Version: 0.30.0
4
4
  Summary: Higher-Level Pythonic Ansys Electronics Data Base
5
5
  Author-email: "ANSYS, Inc." <pyansys.core@ansys.com>
6
6
  Maintainer-email: PyEDB developers <simon.vandenbrouck@ansys.com>
@@ -27,7 +27,7 @@ Requires-Dist: toml == 0.10.2
27
27
  Requires-Dist: scikit-rf
28
28
  Requires-Dist: ansys-sphinx-theme>=0.10.0,<1.1 ; extra == "doc"
29
29
  Requires-Dist: imageio>=2.30.0,<2.36 ; extra == "doc"
30
- Requires-Dist: ipython>=8.13.0,<8.28 ; extra == "doc"
30
+ Requires-Dist: ipython>=8.13.0,<8.29 ; extra == "doc"
31
31
  Requires-Dist: jupyterlab>=4.0.0,<4.3 ; extra == "doc"
32
32
  Requires-Dist: jupytext>=1.16.0,<1.17 ; extra == "doc"
33
33
  Requires-Dist: matplotlib>=3.5.0,<3.10 ; extra == "doc"
@@ -38,7 +38,7 @@ Requires-Dist: pypandoc>=1.10.0,<1.14 ; extra == "doc"
38
38
  Requires-Dist: recommonmark ; extra == "doc"
39
39
  Requires-Dist: Sphinx>=7.1.0,<8.1 ; extra == "doc"
40
40
  Requires-Dist: sphinx-autobuild==2021.3.14 ; extra == "doc" and ( python_version == '3.8')
41
- Requires-Dist: sphinx-autobuild==2024.2.4 ; extra == "doc" and ( python_version > '3.8')
41
+ Requires-Dist: sphinx-autobuild==2024.10.3 ; extra == "doc" and ( python_version > '3.8')
42
42
  Requires-Dist: sphinx-copybutton>=0.5.0,<0.6 ; extra == "doc"
43
43
  Requires-Dist: sphinx-gallery>=0.14.0,<0.18 ; extra == "doc"
44
44
  Requires-Dist: sphinx_design>=0.4.0,<0.7 ; extra == "doc"
@@ -1,51 +1,51 @@
1
- pyedb/__init__.py,sha256=i2Y8_oZHdAU8T5kqsiHeENkfm9LyD8AcJUy50FaBecM,1521
1
+ pyedb/__init__.py,sha256=i3nK0Ify0Hxn6Qa-eIDag4HU7ru7gjzKnxiqqamC3KM,2592
2
2
  pyedb/edb_logger.py,sha256=7KXPvAMCKzlzJ5zioiNO5A3zkqbpCHhWHB4aXKfgu5Y,14959
3
3
  pyedb/exceptions.py,sha256=n94xluzUks6BA24vd_L6HkrvoP_H_l6__hQmqzdCyPo,111
4
- pyedb/siwave.py,sha256=6SL3PnklGMbVOsstvJJ1fx3D3YkBWr27pYDUG-U4VB8,17520
4
+ pyedb/siwave.py,sha256=Mgg5ZGzOUOtNdlePHcnrgN3rletQ7jrqRi3WfxF58uU,17727
5
5
  pyedb/workflow.py,sha256=Y0ya4FUHwlSmoLP45zjdYLsSpyKduHUSpT9GGK9MGd8,814
6
6
  pyedb/component_libraries/ansys_components.py,sha256=O3ypt832IHY9zG2AD_yrRrbH2KH9P1yFaoi1EO6Zllw,4830
7
7
  pyedb/configuration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- pyedb/configuration/cfg_boundaries.py,sha256=ckb-OfaObItwy-xc0LqkHJyeCfKC5vg668olPjZbaKo,6647
9
- pyedb/configuration/cfg_common.py,sha256=5ne78TTA0wHpbi804nsUd9SPxNKZvut_X_Miu-xDRgk,1982
10
- pyedb/configuration/cfg_components.py,sha256=XGWvttmVpz7zHh9fpKFjsMiMy6KTP_GGsR3UGv8xuoI,7683
11
- pyedb/configuration/cfg_data.py,sha256=MQJJ-ztmxI1Gzii2xoepKSb7IWImnyeFBMCpWeAHGvs,3637
12
- pyedb/configuration/cfg_general.py,sha256=0dtd-rkQt2aYR3EOL0c3sNuDuJs7htRos1OWck3rxaI,1626
8
+ pyedb/configuration/cfg_boundaries.py,sha256=5_v6HD0VgkFCJHgx5zTIn_nxPv3KpcCuGz9P4Kk4ywM,6246
9
+ pyedb/configuration/cfg_common.py,sha256=yF_dwdHA8rsyBcqLmhfkJoZ_aOVkDM5pqePGQqBh-Nk,1992
10
+ pyedb/configuration/cfg_components.py,sha256=-AXoHvFqrQI_j6JCzXPit-u6cYK-qR2_k1msPrn_Xkw,4587
11
+ pyedb/configuration/cfg_data.py,sha256=KPejkIgaY1JfLA8gsbsqcn1x9gEgyDMok1A33sgXHGs,3498
12
+ pyedb/configuration/cfg_general.py,sha256=DJAKTW8Sqojfqzc3jO3MU1-J8MrmVi37jUIkTD_Tw6o,2068
13
13
  pyedb/configuration/cfg_nets.py,sha256=18NezeNh0ZOwk2ehz3zWJF_xYR7IYCqGlpDfDt7Ilho,2349
14
- pyedb/configuration/cfg_operations.py,sha256=iT7GW2XggtDjfS4vI4-2gS47Nai7mxfpKjG7V_8IM_0,4541
14
+ pyedb/configuration/cfg_operations.py,sha256=mk0uY9kWEZ6hLciZz6l9ESBC-yHr08GgWBEX2iLutPE,4674
15
15
  pyedb/configuration/cfg_package_definition.py,sha256=f_RRT9R-3H5kHBlc4QSpjq9uQgYbaKQ78XXXrc_r3kg,5296
16
- pyedb/configuration/cfg_padstacks.py,sha256=yRHWZJ1E6vcVxK-l1No_p33sEdPIOyqZvN5stNMqSLQ,5605
16
+ pyedb/configuration/cfg_padstacks.py,sha256=GNastAjgvqf90IxNZTbsMI_x9fQx5_FLbIsNqZ2ChNI,4766
17
17
  pyedb/configuration/cfg_pin_groups.py,sha256=b0H6NaPKJ5zlcXL9W2Q8_HbiLB8-OxaqjsM4wlqP2ic,3768
18
- pyedb/configuration/cfg_ports_sources.py,sha256=G2mX057QB3H3JUxAL0wDMDaHgabKFnht3iIyhTJvJU4,16356
19
- pyedb/configuration/cfg_s_parameter_models.py,sha256=NzS3eBjBSnd7ZDk_TsX04dqRcRXompjx1DxCe1UzWMw,2855
20
- pyedb/configuration/cfg_setup.py,sha256=SPpNRLJusB-Cz2fDQkc6gkdilUqIlbNngoxF3zySt6g,10115
18
+ pyedb/configuration/cfg_ports_sources.py,sha256=8D4QcHlrCdMI0URv3NzSRf0ke8BiF1dpREiimwb9Hbk,16430
19
+ pyedb/configuration/cfg_s_parameter_models.py,sha256=iwLT581u7v26QtsLOaxrtpvAxrnk1VWqNiRYKOmK3y0,5300
20
+ pyedb/configuration/cfg_setup.py,sha256=QGKQHAEeo196TYtKMvIMb2-p8KC4U8fmHx0yn0SpgMo,10351
21
21
  pyedb/configuration/cfg_spice_models.py,sha256=Q_5j2-V6cepSFcnijot8iypTqzanLp7HOz-agmnwKns,2570
22
- pyedb/configuration/cfg_stackup.py,sha256=CX7uNN5QRoYW_MOObknP8003YchTS7PH9Oee7FG0VKU,6589
23
- pyedb/configuration/configuration.py,sha256=I-ivhVqnqEmDShTSACNqfZ0l49yJdNfyxNwHY-cMtkg,13502
22
+ pyedb/configuration/cfg_stackup.py,sha256=ZKUcTh4UAFLJgES2W-5J7uXkUdz_q0URg28lUZUyfdo,6433
23
+ pyedb/configuration/configuration.py,sha256=ndNU2C9Kgp7t2InZt0IcrBXooxjwFChpc7ylajhbTNc,14622
24
24
  pyedb/dotnet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  pyedb/dotnet/clr_module.py,sha256=Mo13Of3DVSA5HR-5xZEXOiHApIKy52CUxtJ2gPkEu1A,3406
26
- pyedb/dotnet/edb.py,sha256=B7HYfgZkc-ezrdMIm3wInWAd5zw6ZMM5KdBG3H6y7L0,181695
26
+ pyedb/dotnet/edb.py,sha256=He8yGP0ykTRCmiHZMDGQvT5Eeg-m0t9-HLbRquBLu2Y,184294
27
27
  pyedb/dotnet/application/Variables.py,sha256=awNhyiLASBYrNjWIyW8IJowgqt7FfFPKF9UElRWyjZg,77750
28
28
  pyedb/dotnet/application/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  pyedb/dotnet/edb_core/__init__.py,sha256=nIRLJ8VZLcMAp12zmGsnZ5x2BEEl7q_Kj_KAOXxVjpQ,52
30
- pyedb/dotnet/edb_core/components.py,sha256=g2hPrTotCtHWA7y79ej1fw3UoY5KrgDwur3H3m-Vmfg,111194
30
+ pyedb/dotnet/edb_core/components.py,sha256=r8Gr9mV4Cuky7lVKOg-JWhRR2bflGYESsnOGG2g4BwM,111146
31
31
  pyedb/dotnet/edb_core/general.py,sha256=k2Bcr5VV-QUzEZlYorqYCX1ZchHBH7WqUvc8maMxId0,4716
32
32
  pyedb/dotnet/edb_core/hfss.py,sha256=C6-to6YKoruQjRWedLY7agkTVQv4Hb2U2qX-iPzHOI0,68655
33
33
  pyedb/dotnet/edb_core/layout_obj_instance.py,sha256=Pd8rfdO3b6HLFGwXBMw-tfE4LPIcW_9_X5KEdFaiito,1407
34
- pyedb/dotnet/edb_core/layout_validation.py,sha256=HxRPHEs9yMyz0XgIegWsb4nSV7hNYbO-xBJ-eFyNnQw,12609
34
+ pyedb/dotnet/edb_core/layout_validation.py,sha256=ONhxkMFi9k5Or_F4l4pdOzyj1-ZVKE2BmbgxbuvCOHE,13647
35
35
  pyedb/dotnet/edb_core/materials.py,sha256=zzYWIJ5dvOIO2H2vREpRnwGDx0hEa5QhCsg_EJkydww,43222
36
36
  pyedb/dotnet/edb_core/modeler.py,sha256=87amEA3xHszL52ae8i-7fAJzWL4Ntqp72omocNO5XAw,55442
37
37
  pyedb/dotnet/edb_core/net_class.py,sha256=4U6Cc1Gn7ZJ_ub9uKmtrsoz5wD1XS42afci3Y3ewRp0,11354
38
- pyedb/dotnet/edb_core/nets.py,sha256=WMKC9aKkmGP_NFqAkQpM8b4AjgDgjhrRXOz8VrN4yj8,41429
39
- pyedb/dotnet/edb_core/padstack.py,sha256=P4WqnMy_mRHHPNvLCG96eGGB8_8bSZPBVziStxGNd5I,63567
38
+ pyedb/dotnet/edb_core/nets.py,sha256=kD8Pa4JCon6ZOS2H3B9B32m24qNBZQDA69_m2zKlVa4,41464
39
+ pyedb/dotnet/edb_core/padstack.py,sha256=19cRYqTHVjjvblYVoZgMetRBXDjtP5-URUv6eA0mvfY,63566
40
40
  pyedb/dotnet/edb_core/siwave.py,sha256=4duoAsFCuPMNLxtMTEEVJCUaHKNkdbLDmtTXiD93VrM,64311
41
41
  pyedb/dotnet/edb_core/stackup.py,sha256=b56leXg7X7dEVPP2DUD9n8LZIakWcjIsjiqqkIWsyZU,120035
42
42
  pyedb/dotnet/edb_core/cell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  pyedb/dotnet/edb_core/cell/connectable.py,sha256=gc5jhWx4DX718T7koL6oZZzfS4EdQNTiFX76ZJ2c83E,2864
44
- pyedb/dotnet/edb_core/cell/layout.py,sha256=1BZ5j5sD7cuomG3-mV7Z7UBtfko39m6xm6Fjgwvn0zo,12696
44
+ pyedb/dotnet/edb_core/cell/layout.py,sha256=qMok2j0LbjoYJ0QBDEZp-nHDLaIXZYZ1jPpqso7z5gs,12448
45
45
  pyedb/dotnet/edb_core/cell/layout_obj.py,sha256=S42rdiI6gVqO77DV3ikc4YxTNufTuqW_X1G-2zkWArA,2765
46
46
  pyedb/dotnet/edb_core/cell/voltage_regulator.py,sha256=-uAzuyERV6ca0bFRzdH4SllcpGY2D9JEdpS7RYaQt6c,5387
47
47
  pyedb/dotnet/edb_core/cell/hierarchy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- pyedb/dotnet/edb_core/cell/hierarchy/component.py,sha256=Iri2YVNntt02ojqtBAg-NosarqN7aHyr37kl5TKQzuM,34847
48
+ pyedb/dotnet/edb_core/cell/hierarchy/component.py,sha256=3TlxpkCIJnAC13xEzzm65ar43AaC9CFE_pskb79yHHQ,43673
49
49
  pyedb/dotnet/edb_core/cell/hierarchy/hierarchy_obj.py,sha256=OUNK6INKlbJkCbzy6jKZzrQs7fvCR1qiTjt7te0S7nQ,2160
50
50
  pyedb/dotnet/edb_core/cell/hierarchy/model.py,sha256=LwXE4VUfptG5rJ9gmAmye0hECBv7bUGtby1ZzNFkeT0,3198
51
51
  pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py,sha256=fF6tY-6s-lW9EuvJ5sw3RlIkjuoSjeZbrNk5wG-_hzM,1356
@@ -55,17 +55,17 @@ pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py,sha256=SGiUcan2l0n8DGk3GtwCs
55
55
  pyedb/dotnet/edb_core/cell/primitive/__init__.py,sha256=8jByHkoaowAYQTCww-zRrTQmN061fLz_OHjTLSrzQQY,58
56
56
  pyedb/dotnet/edb_core/cell/primitive/bondwire.py,sha256=fqIMdv0bNvk591DG6De5c--w9Rpkl5AOeo_qgzoPE6M,7322
57
57
  pyedb/dotnet/edb_core/cell/primitive/path.py,sha256=XVN7dOVpccoBP28M8l5iMzK5QSQdHqpKqC4jK76UTis,12543
58
- pyedb/dotnet/edb_core/cell/primitive/primitive.py,sha256=4ngcedgn3rpMzx8irWCyLA4I-ONKc-Ji8-fpcIpw7x4,27526
58
+ pyedb/dotnet/edb_core/cell/primitive/primitive.py,sha256=ApzSvcKHs3UI8hOOSqT3mTDAgjXfGCSMw01QFey7ohY,27675
59
59
  pyedb/dotnet/edb_core/cell/terminal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
60
  pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py,sha256=qM0wEXkZ-DpoJ6vlVa560Ce8IgOdp4vyIJPedvoa3O0,1977
61
61
  pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py,sha256=lafPRrvsDPYKcysvrkO-5tEZXF3h4IcTXdeJgTjleuI,2158
62
62
  pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py,sha256=XI7NiP1qT2aft7hjPK4gX42RzreiZ66aHXIHFPwUghs,3999
63
63
  pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py,sha256=Xupr55vseJsAR6y62Ekv1Kie_ILc6RVNzT3Sgxdi7X4,2753
64
64
  pyedb/dotnet/edb_core/cell/terminal/point_terminal.py,sha256=S3aCAuFc_QA36PVn2Cdb9L4dO3T4IikwyEVcP1FOW3I,2597
65
- pyedb/dotnet/edb_core/cell/terminal/terminal.py,sha256=WoNS05-wSktF93MvDUjNQw9MMC3e18UGcsBKsy2fo68,19130
65
+ pyedb/dotnet/edb_core/cell/terminal/terminal.py,sha256=2pAba8-6YxZdbrh_b8WiqF_pitmfGy8_fSiMHro7oEs,19145
66
66
  pyedb/dotnet/edb_core/definition/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
- pyedb/dotnet/edb_core/definition/component_def.py,sha256=paLZ7E4gxSFO8UYdQP1mHYDRJH8M5YtD9UbPPypMkcg,6799
68
- pyedb/dotnet/edb_core/definition/component_model.py,sha256=PhT5voy3qk8fsp94dK6TN_Zxz5aXwO_mmeIwWm7C_Hs,1944
67
+ pyedb/dotnet/edb_core/definition/component_def.py,sha256=iXrGs1CpFHoLZ4cJZ7hebf592Hq5mG9Kp4Ip1TfuMjo,7404
68
+ pyedb/dotnet/edb_core/definition/component_model.py,sha256=HZzS3YX9hZBq5vv5Q9fS9MAN8S7Bxc3M6xcOETKvfT0,1838
69
69
  pyedb/dotnet/edb_core/definition/definition_obj.py,sha256=QKlR8DNpNaOd00sY1ybEZANioAg_tgfZAOmh7-997og,1560
70
70
  pyedb/dotnet/edb_core/definition/definitions.py,sha256=9Zjl5LNidDBk07m-QGpducWfFsyE52pScI8PC5f0doU,2383
71
71
  pyedb/dotnet/edb_core/definition/package_def.py,sha256=UoYNdfrB5j0rG4OK94yE25dCTzHcpDjSEn4L2yF10YY,6145
@@ -76,10 +76,10 @@ pyedb/dotnet/edb_core/edb_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
76
76
  pyedb/dotnet/edb_core/edb_data/control_file.py,sha256=_W5DDBFvm4gTq8yCvhzfiWUsfpQK4PnLkjmntIYvW8E,48217
77
77
  pyedb/dotnet/edb_core/edb_data/design_options.py,sha256=RO9ip-T5Bfxpsl97_QEk0qDZsza3tLzIX2t25XLutys,2057
78
78
  pyedb/dotnet/edb_core/edb_data/edbvalue.py,sha256=Vj_11HXsQUNavizKp5FicORm6cjhXRh9uvxhv_D_RJc,1977
79
- pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py,sha256=hKFHWUl0_OCMEZJbQn5c8Y1a-BYKr8nAycIlrCoeufk,13005
80
- pyedb/dotnet/edb_core/edb_data/layer_data.py,sha256=2K1rvBXAWg3s8paNU6TPNb5tC1B3bRHmiUZjVsoX_Z8,26001
81
- pyedb/dotnet/edb_core/edb_data/nets_data.py,sha256=Ifi5uSfnOuTLwesO9TS3_F-qa_8rpPXrJy6W5lvIWik,9684
82
- pyedb/dotnet/edb_core/edb_data/padstacks_data.py,sha256=W6yX4KxDdD7OiPQjuLEsXivKNp3yDoCzWNliEDHeRaM,85380
79
+ pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py,sha256=wIKH4it1uYkEae4OimS3YE6QoSf8rAAIhxdTwtR9cqU,13040
80
+ pyedb/dotnet/edb_core/edb_data/layer_data.py,sha256=Yg3y80d4dn47vtFaNUr2Mt8LRIKvu9TMGxQiu9CIc_s,29586
81
+ pyedb/dotnet/edb_core/edb_data/nets_data.py,sha256=B3SirURVYrmFZPjQLGEYUfTSDZOzzCSB1l7CPQFdWr4,9942
82
+ pyedb/dotnet/edb_core/edb_data/padstacks_data.py,sha256=QACrVhAiVbu8GASxrynqmVrDHZCEpm5wvgSg5EO3t5Q,87918
83
83
  pyedb/dotnet/edb_core/edb_data/ports.py,sha256=wr2RQi8VExuNIVmnp7c4VpTIhODgthmJmHr01zO4ueo,8873
84
84
  pyedb/dotnet/edb_core/edb_data/primitives_data.py,sha256=zDgVbOcvgc7fbpLnCcCHURV9_ePYT4R129kAhSJRy9A,15467
85
85
  pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py,sha256=P37-OIsc8TuTC_s3CXRmvZcJqxAftHA7SATfEyoAnMM,20953
@@ -185,7 +185,7 @@ pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py,sha256=YmYI6WTQulL5Uf8Wx
185
185
  pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py,sha256=KHa-UqcXuabiVfT2CV-UvWl5Q2qGYHF2Ye9azcAlnXc,3966
186
186
  pyedb/modeler/geometry_operators.py,sha256=g_Sy7a6R23sP6RtboJn1rl8uTuo8oeLmMF21rNkzwjk,74198
187
187
  pyedb/siwave_core/icepak.py,sha256=WnZ-t8mik7LDY06V8hZFV-TxRZJQWK7bu_8Ichx-oBs,5206
188
- pyedb-0.28.0.dist-info/LICENSE,sha256=qQWivZ12ETN5l3QxvTARY-QI5eoRRlyHdwLlAj0Bg5I,1089
189
- pyedb-0.28.0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
190
- pyedb-0.28.0.dist-info/METADATA,sha256=12aP4dKjrhx21He3-0FQDDWfpDMkTHmpM8b1IF2pckU,8388
191
- pyedb-0.28.0.dist-info/RECORD,,
188
+ pyedb-0.30.0.dist-info/LICENSE,sha256=qQWivZ12ETN5l3QxvTARY-QI5eoRRlyHdwLlAj0Bg5I,1089
189
+ pyedb-0.30.0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
190
+ pyedb-0.30.0.dist-info/METADATA,sha256=-lDcxg_ntc5YBawrtVWPdjn7L3k6jWTlI9U-jMGlUzc,8389
191
+ pyedb-0.30.0.dist-info/RECORD,,
File without changes