pyedb 0.48.0__py3-none-any.whl → 0.49.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.
- pyedb/__init__.py +1 -1
- pyedb/configuration/cfg_stackup.py +4 -4
- pyedb/dotnet/database/cell/hierarchy/component.py +61 -5
- pyedb/dotnet/database/cell/hierarchy/s_parameter_model.py +7 -0
- pyedb/dotnet/database/cell/terminal/terminal.py +3 -3
- pyedb/dotnet/database/components.py +65 -43
- pyedb/dotnet/database/definition/package_def.py +29 -5
- pyedb/dotnet/database/edb_data/padstacks_data.py +5 -5
- pyedb/dotnet/database/geometry/polygon_data.py +14 -1
- pyedb/dotnet/database/modeler.py +12 -5
- pyedb/dotnet/database/padstack.py +7 -5
- pyedb/dotnet/database/siwave.py +36 -32
- pyedb/dotnet/database/utilities/siwave_simulation_setup.py +3 -1
- {pyedb-0.48.0.dist-info → pyedb-0.49.0.dist-info}/METADATA +1 -1
- {pyedb-0.48.0.dist-info → pyedb-0.49.0.dist-info}/RECORD +17 -17
- {pyedb-0.48.0.dist-info → pyedb-0.49.0.dist-info}/LICENSE +0 -0
- {pyedb-0.48.0.dist-info → pyedb-0.49.0.dist-info}/WHEEL +0 -0
pyedb/__init__.py
CHANGED
|
@@ -64,9 +64,9 @@ class CfgMaterial(CfgBase):
|
|
|
64
64
|
self.specific_heat = kwargs.get("specific_heat", None)
|
|
65
65
|
self.thermal_conductivity = kwargs.get("thermal_conductivity", None)
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
thermal_modifiers = kwargs.get("thermal_modifiers")
|
|
68
|
+
if thermal_modifiers:
|
|
69
|
+
self.thermal_modifiers = [CfgMaterialPropertyThermalModifier(**i) for i in thermal_modifiers]
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
class CfgLayer(CfgBase):
|
|
@@ -162,7 +162,7 @@ class CfgStackup:
|
|
|
162
162
|
attrs = mat_in_cfg.get_attributes()
|
|
163
163
|
mat = self._pedb.materials.add_material(**attrs)
|
|
164
164
|
|
|
165
|
-
for i in attrs.get("
|
|
165
|
+
for i in attrs.get("thermal_modifiers", []):
|
|
166
166
|
mat.set_thermal_modifier(**i.to_dict())
|
|
167
167
|
|
|
168
168
|
def get_materials_from_db(self):
|
|
@@ -44,6 +44,41 @@ except ImportError:
|
|
|
44
44
|
from pyedb.generic.general_methods import get_filename_without_extension
|
|
45
45
|
|
|
46
46
|
|
|
47
|
+
class ICDieProperties:
|
|
48
|
+
def __init__(self, pedb, edb_object):
|
|
49
|
+
self._pedb = pedb
|
|
50
|
+
self._edb_object = edb_object
|
|
51
|
+
|
|
52
|
+
@property
|
|
53
|
+
def die_orientation(self):
|
|
54
|
+
if str(self._edb_object.GetOrientation()) == "ChipUp":
|
|
55
|
+
return "chip_up"
|
|
56
|
+
return "chip_down"
|
|
57
|
+
|
|
58
|
+
@die_orientation.setter
|
|
59
|
+
def die_orientation(self, value):
|
|
60
|
+
if value == "chip_up" or value == "ChipUp":
|
|
61
|
+
self._edb_object.SetOrientation(self._pedb.api_class.Definition.DieOrientation.ChipUp)
|
|
62
|
+
elif value == "chip_down" or value == "ChipDown":
|
|
63
|
+
self._edb_object.SetOrientation(self._pedb.api_class.Definition.DieOrientation.ChipDown)
|
|
64
|
+
|
|
65
|
+
@property
|
|
66
|
+
def die_type(self):
|
|
67
|
+
if str(self._edb_object.GetType()) == "NoDie":
|
|
68
|
+
return "none"
|
|
69
|
+
elif str(self._edb_object.GetType()) == "FlipChip":
|
|
70
|
+
return "flip_chip"
|
|
71
|
+
return "none"
|
|
72
|
+
|
|
73
|
+
@property
|
|
74
|
+
def height(self):
|
|
75
|
+
return self._edb_object.GetHeight()
|
|
76
|
+
|
|
77
|
+
@height.setter
|
|
78
|
+
def height(self, value):
|
|
79
|
+
self._edb_object.SetHeight(self._pedb.edb_value(value))
|
|
80
|
+
|
|
81
|
+
|
|
47
82
|
class EDBComponent(Group):
|
|
48
83
|
"""Manages EDB functionalities for components.
|
|
49
84
|
|
|
@@ -61,6 +96,7 @@ class EDBComponent(Group):
|
|
|
61
96
|
self.edbcomponent = edb_object
|
|
62
97
|
self._layout_instance = None
|
|
63
98
|
self._comp_instance = None
|
|
99
|
+
self._ic_die_properties = None
|
|
64
100
|
|
|
65
101
|
@property
|
|
66
102
|
def name(self):
|
|
@@ -149,6 +185,21 @@ class EDBComponent(Group):
|
|
|
149
185
|
comp_prop.SetPackageDef(package_def._edb_object)
|
|
150
186
|
self.edbcomponent.SetComponentProperty(comp_prop)
|
|
151
187
|
|
|
188
|
+
@property
|
|
189
|
+
def ic_die_properties(self):
|
|
190
|
+
"""Adding IC properties for grpc compatibility."""
|
|
191
|
+
if self.type == "IC":
|
|
192
|
+
if not self._ic_die_properties:
|
|
193
|
+
self._ic_die_properties = ICDieProperties(self._pedb, self.component_property.GetDieProperty().Clone())
|
|
194
|
+
return self._ic_die_properties
|
|
195
|
+
return None
|
|
196
|
+
|
|
197
|
+
@ic_die_properties.setter
|
|
198
|
+
def ic_die_properties(self, value):
|
|
199
|
+
component_property = self.component_property
|
|
200
|
+
component_property.SetDieProperties(value)
|
|
201
|
+
self.component_property = component_property
|
|
202
|
+
|
|
152
203
|
def create_package_def(self, name="", component_part_name=None):
|
|
153
204
|
"""Create a package definition and assign it to the component.
|
|
154
205
|
|
|
@@ -575,7 +626,7 @@ class EDBComponent(Group):
|
|
|
575
626
|
list
|
|
576
627
|
"""
|
|
577
628
|
center = self.component_instance.GetCenter()
|
|
578
|
-
return [center.X.ToDouble(), center.Y.ToDouble()]
|
|
629
|
+
return [round(center.X.ToDouble(), 6), round(center.Y.ToDouble(), 6)]
|
|
579
630
|
|
|
580
631
|
@property
|
|
581
632
|
def bounding_box(self):
|
|
@@ -591,7 +642,12 @@ class EDBComponent(Group):
|
|
|
591
642
|
bbox = self.component_instance.GetBBox()
|
|
592
643
|
pt1 = bbox.Item1
|
|
593
644
|
pt2 = bbox.Item2
|
|
594
|
-
return [
|
|
645
|
+
return [
|
|
646
|
+
round(pt1.X.ToDouble(), 6),
|
|
647
|
+
round(pt1.Y.ToDouble(), 6),
|
|
648
|
+
round(pt2.X.ToDouble(), 6),
|
|
649
|
+
round(pt2.Y.ToDouble(), 6),
|
|
650
|
+
]
|
|
595
651
|
|
|
596
652
|
@property
|
|
597
653
|
def rotation(self):
|
|
@@ -601,7 +657,7 @@ class EDBComponent(Group):
|
|
|
601
657
|
-------
|
|
602
658
|
float
|
|
603
659
|
"""
|
|
604
|
-
return self.edbcomponent.GetTransform().Rotation.ToDouble()
|
|
660
|
+
return round(self.edbcomponent.GetTransform().Rotation.ToDouble(), 6)
|
|
605
661
|
|
|
606
662
|
@property
|
|
607
663
|
def pinlist(self):
|
|
@@ -776,7 +832,7 @@ class EDBComponent(Group):
|
|
|
776
832
|
float
|
|
777
833
|
Lower elevation of the placement layer.
|
|
778
834
|
"""
|
|
779
|
-
return self.edbcomponent.GetPlacementLayer().Clone().GetLowerElevation()
|
|
835
|
+
return round(self.edbcomponent.GetPlacementLayer().Clone().GetLowerElevation(), 6)
|
|
780
836
|
|
|
781
837
|
@property
|
|
782
838
|
def upper_elevation(self):
|
|
@@ -788,7 +844,7 @@ class EDBComponent(Group):
|
|
|
788
844
|
Upper elevation of the placement layer.
|
|
789
845
|
|
|
790
846
|
"""
|
|
791
|
-
return self.edbcomponent.GetPlacementLayer().Clone().GetUpperElevation()
|
|
847
|
+
return round(self.edbcomponent.GetPlacementLayer().Clone().GetUpperElevation(), 6)
|
|
792
848
|
|
|
793
849
|
@property
|
|
794
850
|
def top_bottom_association(self):
|
|
@@ -32,3 +32,10 @@ class SparamModel(object): # pragma: no cover
|
|
|
32
32
|
@property
|
|
33
33
|
def reference_net(self):
|
|
34
34
|
return self._edb_model.GetReferenceNet()
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def is_null(self):
|
|
38
|
+
"""Adding this property to be compatible with grpc."""
|
|
39
|
+
if self.name:
|
|
40
|
+
return False
|
|
41
|
+
return True
|
|
@@ -405,7 +405,7 @@ class Terminal(Connectable):
|
|
|
405
405
|
power_ground_net_names = [gnd_net]
|
|
406
406
|
else:
|
|
407
407
|
power_ground_net_names = [net for net in self._pedb.nets.power.keys()]
|
|
408
|
-
comp_ref_pins = [i for i in pin_list if i.
|
|
408
|
+
comp_ref_pins = [i for i in pin_list if i.net_name in power_ground_net_names]
|
|
409
409
|
if len(comp_ref_pins) == 0: # pragma: no cover
|
|
410
410
|
self._pedb.logger.error(
|
|
411
411
|
"Terminal with PadStack Instance Name {} component has no reference pins.".format(ref_pin.GetName())
|
|
@@ -414,9 +414,9 @@ class Terminal(Connectable):
|
|
|
414
414
|
closest_pin_distance = None
|
|
415
415
|
pin_obj = None
|
|
416
416
|
for pin in comp_ref_pins: # find the distance to all the pins to the terminal pin
|
|
417
|
-
if pin.
|
|
417
|
+
if pin.component_pin == ref_pin.GetName(): # skip the reference psi
|
|
418
418
|
continue # pragma: no cover
|
|
419
|
-
_, pin_point, _ = pin.GetPositionAndRotation()
|
|
419
|
+
_, pin_point, _ = pin._edb_object.GetPositionAndRotation()
|
|
420
420
|
distance = pad_stack_inst_point.Distance(pin_point)
|
|
421
421
|
if closest_pin_distance is None:
|
|
422
422
|
closest_pin_distance = distance
|
|
@@ -556,25 +556,27 @@ class Components(object):
|
|
|
556
556
|
m_pin2_pos = [0.0, 0.0]
|
|
557
557
|
h_pin1_pos = [0.0, 0.0]
|
|
558
558
|
h_pin2_pos = [0.0, 0.0]
|
|
559
|
-
|
|
559
|
+
from pyedb.dotnet.database.cell.hierarchy.component import EDBComponent
|
|
560
|
+
|
|
561
|
+
if not isinstance(mounted_component, EDBComponent):
|
|
560
562
|
return False
|
|
561
|
-
if not isinstance(hosting_component,
|
|
563
|
+
if not isinstance(hosting_component, EDBComponent):
|
|
562
564
|
return False
|
|
563
565
|
|
|
564
|
-
if mounted_component_pin1:
|
|
565
|
-
m_pin1 =
|
|
566
|
-
m_pin1_pos =
|
|
567
|
-
if mounted_component_pin2:
|
|
568
|
-
m_pin2 =
|
|
569
|
-
m_pin2_pos =
|
|
566
|
+
if mounted_component_pin1 in mounted_component.pins:
|
|
567
|
+
m_pin1 = mounted_component.pins[mounted_component_pin1]
|
|
568
|
+
m_pin1_pos = m_pin1.position
|
|
569
|
+
if mounted_component_pin2 in mounted_component.pins:
|
|
570
|
+
m_pin2 = mounted_component.pins[mounted_component_pin2]
|
|
571
|
+
m_pin2_pos = m_pin2.position
|
|
570
572
|
|
|
571
|
-
if hosting_component_pin1:
|
|
572
|
-
h_pin1 =
|
|
573
|
-
h_pin1_pos =
|
|
573
|
+
if hosting_component_pin1 in hosting_component.pins:
|
|
574
|
+
h_pin1 = hosting_component.pins[hosting_component_pin1]
|
|
575
|
+
h_pin1_pos = h_pin1.position
|
|
574
576
|
|
|
575
|
-
if hosting_component_pin2:
|
|
576
|
-
h_pin2 =
|
|
577
|
-
h_pin2_pos =
|
|
577
|
+
if hosting_component_pin2 in hosting_component.pins:
|
|
578
|
+
h_pin2 = hosting_component.pins[hosting_component_pin2]
|
|
579
|
+
h_pin2_pos = h_pin2.position
|
|
578
580
|
#
|
|
579
581
|
vector = [h_pin1_pos[0] - m_pin1_pos[0], h_pin1_pos[1] - m_pin1_pos[1]]
|
|
580
582
|
vector1 = GeometryOperators.v_points(m_pin1_pos, m_pin2_pos)
|
|
@@ -586,8 +588,8 @@ class Components(object):
|
|
|
586
588
|
|
|
587
589
|
rotation = GeometryOperators.v_angle_sign_2D(vector1, vector2, False)
|
|
588
590
|
if rotation != 0.0:
|
|
589
|
-
layinst = mounted_component.GetLayout().GetLayoutInstance()
|
|
590
|
-
cmpinst = layinst.GetLayoutObjInstance(mounted_component, None)
|
|
591
|
+
layinst = mounted_component._edb_object.GetLayout().GetLayoutInstance()
|
|
592
|
+
cmpinst = layinst.GetLayoutObjInstance(mounted_component._edb_object, None)
|
|
591
593
|
center = cmpinst.GetCenter()
|
|
592
594
|
center_double = [center.X.ToDouble(), center.Y.ToDouble()]
|
|
593
595
|
vector_center = GeometryOperators.v_points(center_double, m_pin1_pos)
|
|
@@ -597,7 +599,7 @@ class Components(object):
|
|
|
597
599
|
vector = [h_pin1_pos[0] - new_vector[0], h_pin1_pos[1] - new_vector[1]]
|
|
598
600
|
|
|
599
601
|
if vector:
|
|
600
|
-
solder_ball_height =
|
|
602
|
+
solder_ball_height = mounted_component.solder_ball_height
|
|
601
603
|
return True, vector, rotation, solder_ball_height
|
|
602
604
|
self._logger.warning("Failed to compute vector.")
|
|
603
605
|
return False, [0, 0], 0, 0
|
|
@@ -818,7 +820,7 @@ class Components(object):
|
|
|
818
820
|
if refdes and any(refdes.rlc_values):
|
|
819
821
|
return self.deactivate_rlc_component(component=refdes, create_circuit_port=True)
|
|
820
822
|
if not port_name:
|
|
821
|
-
port_name = "Port_{
|
|
823
|
+
port_name = f"Port_{pins[0].net_name}_{pins[0].name}".replace("-", "_")
|
|
822
824
|
|
|
823
825
|
if len(pins) > 1 or pingroup_on_single_pin:
|
|
824
826
|
if pec_boundary:
|
|
@@ -842,7 +844,7 @@ class Components(object):
|
|
|
842
844
|
f"ports only, {len(reference_pins)} reference pins found "
|
|
843
845
|
f"(pingroup_on_single_pin: {pingroup_on_single_pin})."
|
|
844
846
|
)
|
|
845
|
-
ref_group_name = "group_{}_ref"
|
|
847
|
+
ref_group_name = f"group_{port_name}_ref"
|
|
846
848
|
ref_pin_group = self.create_pingroup_from_pins(reference_pins, ref_group_name)
|
|
847
849
|
ref_term = self._create_pin_group_terminal(pingroup=ref_pin_group, term_name=port_name + "_ref")
|
|
848
850
|
else:
|
|
@@ -857,7 +859,7 @@ class Components(object):
|
|
|
857
859
|
term.SetBoundaryType(self._edb.cell.terminal.BoundaryType.PecBoundary)
|
|
858
860
|
ref_term.SetBoundaryType(self._edb.cell.terminal.BoundaryType.PecBoundary)
|
|
859
861
|
self._logger.info(
|
|
860
|
-
"PEC boundary created between pin {} and reference pin {
|
|
862
|
+
f"PEC boundary created between pin {pins[0].name} and reference pin {reference_pins[0].name}"
|
|
861
863
|
)
|
|
862
864
|
|
|
863
865
|
return term or False
|
|
@@ -1316,9 +1318,9 @@ class Components(object):
|
|
|
1316
1318
|
pin_layers = self._padstack._get_pin_layer_range(pins[0])
|
|
1317
1319
|
pos_pin_term = self._pedb.edb_api.cell.terminal.PadstackInstanceTerminal.Create(
|
|
1318
1320
|
self._active_layout,
|
|
1319
|
-
pins[0].
|
|
1320
|
-
"{}_{
|
|
1321
|
-
pins[0],
|
|
1321
|
+
pins[0].net._edb_object,
|
|
1322
|
+
f"{component.refdes}_{pins[0]._edb_object.GetName()}",
|
|
1323
|
+
pins[0]._edb_object,
|
|
1322
1324
|
pin_layers[0],
|
|
1323
1325
|
False,
|
|
1324
1326
|
)
|
|
@@ -1326,9 +1328,9 @@ class Components(object):
|
|
|
1326
1328
|
return False
|
|
1327
1329
|
neg_pin_term = self._pedb.edb_api.cell.terminal.PadstackInstanceTerminal.Create(
|
|
1328
1330
|
self._active_layout,
|
|
1329
|
-
pins[1].
|
|
1330
|
-
"{}_{
|
|
1331
|
-
pins[1],
|
|
1331
|
+
pins[1].net._edb_object,
|
|
1332
|
+
f"{component.refdes}_{pins[1]._edb_object.GetName()}_ref",
|
|
1333
|
+
pins[1]._edb_object,
|
|
1332
1334
|
pin_layers[0],
|
|
1333
1335
|
False,
|
|
1334
1336
|
)
|
|
@@ -1382,9 +1384,9 @@ class Components(object):
|
|
|
1382
1384
|
pin_layer = self._padstack._get_pin_layer_range(pins[0])[0]
|
|
1383
1385
|
pos_pin_term = self._pedb.edb_api.cell.terminal.PadstackInstanceTerminal.Create(
|
|
1384
1386
|
self._active_layout,
|
|
1385
|
-
pins[0].GetNet(),
|
|
1386
|
-
"{}_{
|
|
1387
|
-
pins[0],
|
|
1387
|
+
pins[0]._edb_object.GetNet(),
|
|
1388
|
+
f"{component.refdes}_{pins[0]._edb_object.GetName()}",
|
|
1389
|
+
pins[0]._edb_object,
|
|
1388
1390
|
pin_layer,
|
|
1389
1391
|
False,
|
|
1390
1392
|
)
|
|
@@ -1392,9 +1394,9 @@ class Components(object):
|
|
|
1392
1394
|
return False
|
|
1393
1395
|
neg_pin_term = self._pedb.edb_api.cell.terminal.PadstackInstanceTerminal.Create(
|
|
1394
1396
|
self._active_layout,
|
|
1395
|
-
pins[1].GetNet(),
|
|
1396
|
-
"{}_{
|
|
1397
|
-
pins[1],
|
|
1397
|
+
pins[1]._edb_object.GetNet(),
|
|
1398
|
+
f"{component.refdes}_{pins[1]._edb_object.GetName()}_ref",
|
|
1399
|
+
pins[1]._edb_object,
|
|
1398
1400
|
pin_layer,
|
|
1399
1401
|
True,
|
|
1400
1402
|
)
|
|
@@ -2164,7 +2166,7 @@ class Components(object):
|
|
|
2164
2166
|
rlc.C = self._get_edb_value(cap_value)
|
|
2165
2167
|
else:
|
|
2166
2168
|
rlc.CEnabled = False
|
|
2167
|
-
pin_pair = self._edb.utility.utility.PinPair(from_pin.
|
|
2169
|
+
pin_pair = self._edb.utility.utility.PinPair(from_pin.name, to_pin.name)
|
|
2168
2170
|
rlc_model = self._edb.cell.hierarchy._hierarchy.PinPairModel()
|
|
2169
2171
|
rlc_model.SetPinPairRlc(pin_pair, rlc)
|
|
2170
2172
|
if not edb_rlc_component_property.SetModel(rlc_model) or not edb_component.SetComponentProperty(
|
|
@@ -2304,7 +2306,7 @@ class Components(object):
|
|
|
2304
2306
|
footprint_cell = self.definitions[comp.partname]._edb_object.GetFootprintCell()
|
|
2305
2307
|
comp_def = self._edb.definition.ComponentDef.Create(self._db, part_name, footprint_cell)
|
|
2306
2308
|
for pin in pinlist:
|
|
2307
|
-
self._edb.definition.ComponentDefPin.Create(comp_def, pin.GetName())
|
|
2309
|
+
self._edb.definition.ComponentDefPin.Create(comp_def, pin._edb_object.GetName())
|
|
2308
2310
|
|
|
2309
2311
|
p_layer = comp.placement_layer
|
|
2310
2312
|
refdes_temp = comp.refdes + "_temp"
|
|
@@ -2313,7 +2315,7 @@ class Components(object):
|
|
|
2313
2315
|
unmount_comp_list.remove(refdes)
|
|
2314
2316
|
comp.edbcomponent.Ungroup(True)
|
|
2315
2317
|
|
|
2316
|
-
pinlist = [self._pedb.layout.find_object_by_id(i.
|
|
2318
|
+
pinlist = [self._pedb.layout.find_object_by_id(i.id) for i in pinlist]
|
|
2317
2319
|
self.create(pinlist, refdes, p_layer, part_name)
|
|
2318
2320
|
self.refresh_components()
|
|
2319
2321
|
comp = self.instances[refdes]
|
|
@@ -2383,7 +2385,7 @@ class Components(object):
|
|
|
2383
2385
|
obj = self._pedb.edb_api.cell.hierarchy.component.FindByName(self._active_layout, reference_designator)
|
|
2384
2386
|
return EDBComponent(self._pedb, obj)
|
|
2385
2387
|
|
|
2386
|
-
def get_pin_from_component(self, component, netName=None, pinName=None):
|
|
2388
|
+
def get_pin_from_component(self, component, netName=None, pinName=None, net_name=None, pin_name=None):
|
|
2387
2389
|
"""Retrieve the pins of a component.
|
|
2388
2390
|
|
|
2389
2391
|
Parameters
|
|
@@ -2396,6 +2398,14 @@ class Components(object):
|
|
|
2396
2398
|
pinName : str, optional
|
|
2397
2399
|
Filter on the pin name an alternative to
|
|
2398
2400
|
``netName``. The default is ``None``.
|
|
2401
|
+
net_name : str, optional
|
|
2402
|
+
Filter on the net name as an alternative to
|
|
2403
|
+
``pin_name``. The default is ``None``. This parameter is added to add compatibility with grpc and is
|
|
2404
|
+
recommended using it rather than `netName`.
|
|
2405
|
+
pin_name : str, optional
|
|
2406
|
+
Filter on the pin name an alternative to
|
|
2407
|
+
``netName``. The default is ``None``. This parameter is added to add compatibility with grpc and is
|
|
2408
|
+
recommended using it rather than `pinName`.
|
|
2399
2409
|
|
|
2400
2410
|
Returns
|
|
2401
2411
|
-------
|
|
@@ -2413,6 +2423,14 @@ class Components(object):
|
|
|
2413
2423
|
warnings.warn("Use new property :func:`edb.padstacks.get_instances` instead.", DeprecationWarning)
|
|
2414
2424
|
if not isinstance(component, self._pedb.edb_api.cell.hierarchy.component):
|
|
2415
2425
|
component = self._pedb.edb_api.cell.hierarchy.component.FindByName(self._active_layout, component)
|
|
2426
|
+
if pinName:
|
|
2427
|
+
warnings.warn("Use argument `pin_name` instead of `pinName`", DeprecationWarning)
|
|
2428
|
+
if netName:
|
|
2429
|
+
warnings.warn("Use argument `net_name` instead of `netName`", DeprecationWarning)
|
|
2430
|
+
if net_name:
|
|
2431
|
+
netName = net_name
|
|
2432
|
+
if pin_name:
|
|
2433
|
+
pinName = pin_name
|
|
2416
2434
|
if netName:
|
|
2417
2435
|
if not isinstance(netName, list):
|
|
2418
2436
|
netName = [netName]
|
|
@@ -2425,14 +2443,18 @@ class Components(object):
|
|
|
2425
2443
|
if not isinstance(pinName, list):
|
|
2426
2444
|
pinName = [pinName]
|
|
2427
2445
|
pins = [
|
|
2428
|
-
p
|
|
2446
|
+
EDBPadstackInstance(p, self._pedb)
|
|
2429
2447
|
for p in list(component.LayoutObjs)
|
|
2430
2448
|
if int(p.GetObjType()) == 1
|
|
2431
2449
|
and p.IsLayoutPin()
|
|
2432
2450
|
and (self.get_aedt_pin_name(p) in pinName or p.GetName() in pinName)
|
|
2433
2451
|
]
|
|
2434
2452
|
else:
|
|
2435
|
-
pins = [
|
|
2453
|
+
pins = [
|
|
2454
|
+
EDBPadstackInstance(p, self._pedb)
|
|
2455
|
+
for p in list(component.LayoutObjs)
|
|
2456
|
+
if int(p.GetObjType()) == 1 and p.IsLayoutPin()
|
|
2457
|
+
]
|
|
2436
2458
|
return pins
|
|
2437
2459
|
|
|
2438
2460
|
def get_aedt_pin_name(self, pin):
|
|
@@ -2560,7 +2582,7 @@ class Components(object):
|
|
|
2560
2582
|
for j in [*i.pins.values()]:
|
|
2561
2583
|
pin_list.append(j)
|
|
2562
2584
|
for pin in pin_list:
|
|
2563
|
-
if pin.
|
|
2585
|
+
if pin.net_name == net_name:
|
|
2564
2586
|
pin_names.append(self.get_aedt_pin_name(pin))
|
|
2565
2587
|
return pin_names
|
|
2566
2588
|
|
|
@@ -2587,7 +2609,7 @@ class Components(object):
|
|
|
2587
2609
|
"""
|
|
2588
2610
|
netlist = []
|
|
2589
2611
|
for pin in PinList:
|
|
2590
|
-
netlist.append(pin.
|
|
2612
|
+
netlist.append(pin.net_name)
|
|
2591
2613
|
return list(set(netlist))
|
|
2592
2614
|
|
|
2593
2615
|
def get_component_net_connection_info(self, refdes):
|
|
@@ -2613,9 +2635,9 @@ class Components(object):
|
|
|
2613
2635
|
"""
|
|
2614
2636
|
component_pins = self.get_pin_from_component(refdes)
|
|
2615
2637
|
data = {"refdes": [], "pin_name": [], "net_name": []}
|
|
2616
|
-
for
|
|
2617
|
-
pin_name =
|
|
2618
|
-
net_name =
|
|
2638
|
+
for pin in component_pins:
|
|
2639
|
+
pin_name = pin._edb_object.GetName()
|
|
2640
|
+
net_name = pin._edb_object.GetNet().GetName()
|
|
2619
2641
|
if pin_name is not None:
|
|
2620
2642
|
data["refdes"].append(refdes)
|
|
2621
2643
|
data["pin_name"].append(pin_name)
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
# SOFTWARE.
|
|
22
|
+
import warnings
|
|
22
23
|
|
|
23
24
|
from pyedb.dotnet.database.geometry.polygon_data import PolygonData
|
|
24
25
|
from pyedb.dotnet.database.utilities.obj_base import ObjBase
|
|
@@ -105,15 +106,29 @@ class PackageDef(ObjBase):
|
|
|
105
106
|
self._edb_object.SetMaximumPower(value)
|
|
106
107
|
|
|
107
108
|
@property
|
|
108
|
-
def
|
|
109
|
-
"""
|
|
109
|
+
def thermal_conductivity(self):
|
|
110
|
+
"""Adding this property for compatibility with grpc."""
|
|
110
111
|
return self._edb_object.GetTherm_Cond().ToDouble()
|
|
111
112
|
|
|
112
|
-
@
|
|
113
|
-
def
|
|
113
|
+
@thermal_conductivity.setter
|
|
114
|
+
def thermal_conductivity(self, value):
|
|
114
115
|
value = self._pedb.edb_value(value)
|
|
115
116
|
self._edb_object.SetTherm_Cond(value)
|
|
116
117
|
|
|
118
|
+
@property
|
|
119
|
+
def therm_cond(self):
|
|
120
|
+
"""Thermal conductivity of the package.
|
|
121
|
+
|
|
122
|
+
..deprecated:: 0.48.0
|
|
123
|
+
Use: func:`thermal_conductivity` property instead.
|
|
124
|
+
"""
|
|
125
|
+
warnings.warn("Use property thermal_conductivity instead.", DeprecationWarning)
|
|
126
|
+
return self.thermal_conductivity
|
|
127
|
+
|
|
128
|
+
@therm_cond.setter
|
|
129
|
+
def therm_cond(self, value):
|
|
130
|
+
self.thermal_conductivity = value
|
|
131
|
+
|
|
117
132
|
@property
|
|
118
133
|
def theta_jb(self):
|
|
119
134
|
"""Theta Junction-to-Board of the package."""
|
|
@@ -153,10 +168,19 @@ class PackageDef(ObjBase):
|
|
|
153
168
|
heatsink.fin_orientation = fin_orientation
|
|
154
169
|
heatsink.fin_spacing = fin_spacing
|
|
155
170
|
heatsink.fin_thickness = fin_thickness
|
|
156
|
-
self._edb_object.SetHeatSink(heatsink._edb_object)
|
|
171
|
+
return self._edb_object.SetHeatSink(heatsink._edb_object)
|
|
157
172
|
|
|
158
173
|
@property
|
|
159
174
|
def heatsink(self):
|
|
175
|
+
"""Component heatsink.
|
|
176
|
+
|
|
177
|
+
..deprecated:: 0.48.0
|
|
178
|
+
Use: func:`heat_sink` property instead.
|
|
179
|
+
"""
|
|
180
|
+
return self.heat_sink
|
|
181
|
+
|
|
182
|
+
@property
|
|
183
|
+
def heat_sink(self):
|
|
160
184
|
"""Component heatsink."""
|
|
161
185
|
from pyedb.dotnet.database.utilities.heatsink import HeatSink
|
|
162
186
|
|
|
@@ -1696,9 +1696,9 @@ class EDBPadstackInstance(Primitive):
|
|
|
1696
1696
|
out = self._edb_padstackinstance.GetPositionAndRotationValue()
|
|
1697
1697
|
if self._edb_padstackinstance.GetComponent():
|
|
1698
1698
|
out2 = self._edb_padstackinstance.GetComponent().GetTransform().TransformPoint(out[1])
|
|
1699
|
-
self._position = [out2.X.ToDouble(), out2.Y.ToDouble()]
|
|
1699
|
+
self._position = [round(out2.X.ToDouble(), 6), round(out2.Y.ToDouble(), 6)]
|
|
1700
1700
|
elif out[0]:
|
|
1701
|
-
self._position = [out[1].X.ToDouble(), out[1].Y.ToDouble()]
|
|
1701
|
+
self._position = [round(out[1].X.ToDouble(), 6), round(out[1].Y.ToDouble(), 6)]
|
|
1702
1702
|
return self._position
|
|
1703
1703
|
|
|
1704
1704
|
@position.setter
|
|
@@ -1724,7 +1724,7 @@ class EDBPadstackInstance(Primitive):
|
|
|
1724
1724
|
out = self._edb_padstackinstance.GetPositionAndRotationValue()
|
|
1725
1725
|
|
|
1726
1726
|
if out[0]:
|
|
1727
|
-
return out[2].ToDouble()
|
|
1727
|
+
return round(out[2].ToDouble(), 6)
|
|
1728
1728
|
|
|
1729
1729
|
@property
|
|
1730
1730
|
def name(self):
|
|
@@ -1894,7 +1894,7 @@ class EDBPadstackInstance(Primitive):
|
|
|
1894
1894
|
Lower elavation of the placement layer.
|
|
1895
1895
|
"""
|
|
1896
1896
|
try:
|
|
1897
|
-
return self._edb_padstackinstance.GetGroup().GetPlacementLayer().Clone().GetLowerElevation()
|
|
1897
|
+
return round(self._edb_padstackinstance.GetGroup().GetPlacementLayer().Clone().GetLowerElevation(), 6)
|
|
1898
1898
|
except AttributeError: # pragma: no cover
|
|
1899
1899
|
return None
|
|
1900
1900
|
|
|
@@ -1908,7 +1908,7 @@ class EDBPadstackInstance(Primitive):
|
|
|
1908
1908
|
Upper elevation of the placement layer.
|
|
1909
1909
|
"""
|
|
1910
1910
|
try:
|
|
1911
|
-
return self._edb_padstackinstance.GetGroup().GetPlacementLayer().Clone().GetUpperElevation()
|
|
1911
|
+
return round(self._edb_padstackinstance.GetGroup().GetPlacementLayer().Clone().GetUpperElevation(), 6)
|
|
1912
1912
|
except AttributeError: # pragma: no cover
|
|
1913
1913
|
return None
|
|
1914
1914
|
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
# SOFTWARE.
|
|
22
22
|
from typing import Union
|
|
23
|
+
import warnings
|
|
23
24
|
|
|
24
25
|
from pyedb.dotnet.database.general import convert_py_list_to_net_list
|
|
25
26
|
from pyedb.dotnet.database.geometry.point_data import PointData
|
|
@@ -132,10 +133,22 @@ class PolygonData:
|
|
|
132
133
|
poly = self._edb_object.CreateFromArcs(arcs, flag)
|
|
133
134
|
return PolygonData(self._pedb, poly)
|
|
134
135
|
|
|
135
|
-
def
|
|
136
|
+
def is_inside(self, x: Union[str, float], y: Union[str, float] = None) -> bool:
|
|
136
137
|
"""Determines whether a point is inside the polygon."""
|
|
138
|
+
if isinstance(x, list) and len(x) == 2:
|
|
139
|
+
y = x[1]
|
|
140
|
+
x = x[0]
|
|
137
141
|
return self._edb_object.PointInPolygon(self._pedb.point_data(x, y))
|
|
138
142
|
|
|
143
|
+
def point_in_polygon(self, x: Union[str, float], y: Union[str, float] = None) -> bool:
|
|
144
|
+
"""Determines whether a point is inside the polygon.
|
|
145
|
+
|
|
146
|
+
..deprecated:: 0.48.0
|
|
147
|
+
Use: func:`is_inside` instead.
|
|
148
|
+
"""
|
|
149
|
+
warnings.warn("Use method is_inside instead", DeprecationWarning)
|
|
150
|
+
return self.is_inside(x, y)
|
|
151
|
+
|
|
139
152
|
def get_point(self, index):
|
|
140
153
|
"""Gets the point at the index as a PointData object."""
|
|
141
154
|
edb_object = self._edb_object.GetPoint(index)
|
pyedb/dotnet/database/modeler.py
CHANGED
|
@@ -455,9 +455,16 @@ class Modeler(object):
|
|
|
455
455
|
xcoeff = str(xcoeff)
|
|
456
456
|
return xcoeff, ycoeff
|
|
457
457
|
|
|
458
|
+
from pyedb.dotnet.database.edb_data.primitives_data import EdbPolygon
|
|
459
|
+
|
|
460
|
+
if isinstance(selection_polygon, EdbPolygon):
|
|
461
|
+
selection_polygon = selection_polygon._edb_object
|
|
462
|
+
if isinstance(polygon, EdbPolygon):
|
|
463
|
+
polygon = polygon._edb_object
|
|
464
|
+
|
|
458
465
|
selection_polygon_data = selection_polygon.GetPolygonData()
|
|
459
|
-
|
|
460
|
-
bound_center =
|
|
466
|
+
polygon_data = polygon.GetPolygonData()
|
|
467
|
+
bound_center = polygon_data.GetBoundingCircleCenter()
|
|
461
468
|
bound_center2 = selection_polygon_data.GetBoundingCircleCenter()
|
|
462
469
|
center = [bound_center.X.ToDouble(), bound_center.Y.ToDouble()]
|
|
463
470
|
center2 = [bound_center2.X.ToDouble(), bound_center2.Y.ToDouble()]
|
|
@@ -471,7 +478,7 @@ class Modeler(object):
|
|
|
471
478
|
prev_point = None
|
|
472
479
|
while continue_iterate:
|
|
473
480
|
try:
|
|
474
|
-
point =
|
|
481
|
+
point = polygon_data.GetPoint(i)
|
|
475
482
|
if prev_point != point:
|
|
476
483
|
check_inside = selection_polygon_data.PointInPolygon(point)
|
|
477
484
|
if check_inside:
|
|
@@ -481,14 +488,14 @@ class Modeler(object):
|
|
|
481
488
|
point.X.ToString() + "{}*{}".format(xcoeff, offset_name),
|
|
482
489
|
point.Y.ToString() + "{}*{}".format(ycoeff, offset_name),
|
|
483
490
|
)
|
|
484
|
-
|
|
491
|
+
polygon_data.SetPoint(i, new_points)
|
|
485
492
|
prev_point = point
|
|
486
493
|
i += 1
|
|
487
494
|
else:
|
|
488
495
|
continue_iterate = False
|
|
489
496
|
except:
|
|
490
497
|
continue_iterate = False
|
|
491
|
-
polygon.SetPolygonData(
|
|
498
|
+
polygon.SetPolygonData(polygon_data)
|
|
492
499
|
return True
|
|
493
500
|
|
|
494
501
|
def _create_path(
|
|
@@ -629,9 +629,11 @@ class EdbPadstacks(object):
|
|
|
629
629
|
if "PadstackDef" in str(type(pin)):
|
|
630
630
|
padparams = pin.GetData().GetPadParametersValue(layername, self.int_to_pad_type(pad_type))
|
|
631
631
|
else:
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
632
|
+
if not isinstance(pin, EDBPadstackInstance):
|
|
633
|
+
pin = EDBPadstackInstance(pin, self._pedb)
|
|
634
|
+
padparams = self._edb.definition.PadstackDefData(
|
|
635
|
+
pin._edb_object.GetPadstackDef().GetData()
|
|
636
|
+
).GetPadParametersValue(layername, self.int_to_pad_type(pad_type))
|
|
635
637
|
if padparams[2]:
|
|
636
638
|
geometry_type = int(padparams[1])
|
|
637
639
|
parameters = [i.ToString() for i in padparams[2]]
|
|
@@ -646,7 +648,7 @@ class EdbPadstacks(object):
|
|
|
646
648
|
)
|
|
647
649
|
else:
|
|
648
650
|
padparams = self._edb.definition.PadstackDefData(
|
|
649
|
-
pin.GetPadstackDef().GetData()
|
|
651
|
+
pin._edb_object.GetPadstackDef().GetData()
|
|
650
652
|
).GetPolygonalPadParameters(layername, self.int_to_pad_type(pad_type))
|
|
651
653
|
|
|
652
654
|
if padparams[0]:
|
|
@@ -1076,7 +1078,7 @@ class EdbPadstacks(object):
|
|
|
1076
1078
|
return padstackname
|
|
1077
1079
|
|
|
1078
1080
|
def _get_pin_layer_range(self, pin):
|
|
1079
|
-
res, fromlayer, tolayer = pin.GetLayerRange()
|
|
1081
|
+
res, fromlayer, tolayer = pin._edb_object.GetLayerRange()
|
|
1080
1082
|
if res:
|
|
1081
1083
|
return fromlayer, tolayer
|
|
1082
1084
|
else:
|
pyedb/dotnet/database/siwave.py
CHANGED
|
@@ -261,21 +261,25 @@ class EdbSiwave(object):
|
|
|
261
261
|
>>> edbapp.siwave.create_circuit_port_on_pin(pins[0], pins[1], 50, "port_name")
|
|
262
262
|
"""
|
|
263
263
|
circuit_port = CircuitPort()
|
|
264
|
-
|
|
265
|
-
|
|
264
|
+
if not isinstance(pos_pin, EDBPadstackInstance):
|
|
265
|
+
pos_pin = EDBPadstackInstance(pos_pin, self._pedb)
|
|
266
|
+
if not isinstance(neg_pin, EDBPadstackInstance):
|
|
267
|
+
neg_pin = EDBPadstackInstance(neg_pin, self._pedb)
|
|
268
|
+
circuit_port.positive_node.net = pos_pin.net_name
|
|
269
|
+
circuit_port.negative_node.net = neg_pin.net_name
|
|
266
270
|
circuit_port.impedance = impedance
|
|
267
271
|
|
|
268
272
|
if not port_name:
|
|
269
273
|
port_name = "Port_{}_{}_{}_{}".format(
|
|
270
|
-
pos_pin.
|
|
271
|
-
pos_pin.
|
|
272
|
-
neg_pin.
|
|
273
|
-
neg_pin.
|
|
274
|
+
pos_pin.component.name,
|
|
275
|
+
pos_pin.net_name,
|
|
276
|
+
neg_pin.component.name,
|
|
277
|
+
neg_pin.net_name,
|
|
274
278
|
)
|
|
275
279
|
circuit_port.name = port_name
|
|
276
|
-
circuit_port.positive_node.component_node = pos_pin.
|
|
280
|
+
circuit_port.positive_node.component_node = pos_pin.component
|
|
277
281
|
circuit_port.positive_node.node_pins = pos_pin
|
|
278
|
-
circuit_port.negative_node.component_node = neg_pin.
|
|
282
|
+
circuit_port.negative_node.component_node = neg_pin.component
|
|
279
283
|
circuit_port.negative_node.node_pins = neg_pin
|
|
280
284
|
return self._create_terminal_on_pins(circuit_port)
|
|
281
285
|
|
|
@@ -386,21 +390,21 @@ class EdbSiwave(object):
|
|
|
386
390
|
"""
|
|
387
391
|
|
|
388
392
|
voltage_source = VoltageSource()
|
|
389
|
-
voltage_source.positive_node.net = pos_pin.
|
|
390
|
-
voltage_source.negative_node.net = neg_pin.
|
|
393
|
+
voltage_source.positive_node.net = pos_pin.net_name
|
|
394
|
+
voltage_source.negative_node.net = neg_pin.net_name
|
|
391
395
|
voltage_source.magnitude = voltage_value
|
|
392
396
|
voltage_source.phase = phase_value
|
|
393
397
|
if not source_name:
|
|
394
398
|
source_name = "VSource_{}_{}_{}_{}".format(
|
|
395
|
-
pos_pin.
|
|
396
|
-
pos_pin.
|
|
397
|
-
neg_pin.
|
|
398
|
-
neg_pin.
|
|
399
|
+
pos_pin.component.name,
|
|
400
|
+
pos_pin.net_name,
|
|
401
|
+
neg_pin.component.name,
|
|
402
|
+
neg_pin.net_name,
|
|
399
403
|
)
|
|
400
404
|
voltage_source.name = source_name
|
|
401
|
-
voltage_source.positive_node.component_node = pos_pin.
|
|
405
|
+
voltage_source.positive_node.component_node = pos_pin.component
|
|
402
406
|
voltage_source.positive_node.node_pins = pos_pin
|
|
403
|
-
voltage_source.negative_node.component_node = neg_pin.
|
|
407
|
+
voltage_source.negative_node.component_node = neg_pin.component
|
|
404
408
|
voltage_source.negative_node.node_pins = neg_pin
|
|
405
409
|
return self._create_terminal_on_pins(voltage_source)
|
|
406
410
|
|
|
@@ -434,21 +438,21 @@ class EdbSiwave(object):
|
|
|
434
438
|
>>> edbapp.siwave.create_current_source_on_pin(pins[0], pins[1], 50, "source_name")
|
|
435
439
|
"""
|
|
436
440
|
current_source = CurrentSource()
|
|
437
|
-
current_source.positive_node.net = pos_pin.
|
|
438
|
-
current_source.negative_node.net = neg_pin.
|
|
441
|
+
current_source.positive_node.net = pos_pin.net_name
|
|
442
|
+
current_source.negative_node.net = neg_pin.net_name
|
|
439
443
|
current_source.magnitude = current_value
|
|
440
444
|
current_source.phase = phase_value
|
|
441
445
|
if not source_name:
|
|
442
446
|
source_name = "ISource_{}_{}_{}_{}".format(
|
|
443
|
-
pos_pin.
|
|
444
|
-
pos_pin.
|
|
445
|
-
neg_pin.
|
|
446
|
-
neg_pin.
|
|
447
|
+
pos_pin.component.name,
|
|
448
|
+
pos_pin.net_name,
|
|
449
|
+
neg_pin.component.name,
|
|
450
|
+
neg_pin.net_name,
|
|
447
451
|
)
|
|
448
452
|
current_source.name = source_name
|
|
449
|
-
current_source.positive_node.component_node = pos_pin.
|
|
453
|
+
current_source.positive_node.component_node = pos_pin.component
|
|
450
454
|
current_source.positive_node.node_pins = pos_pin
|
|
451
|
-
current_source.negative_node.component_node = neg_pin.
|
|
455
|
+
current_source.negative_node.component_node = neg_pin.component
|
|
452
456
|
current_source.negative_node.node_pins = neg_pin
|
|
453
457
|
return self._create_terminal_on_pins(current_source)
|
|
454
458
|
|
|
@@ -480,20 +484,20 @@ class EdbSiwave(object):
|
|
|
480
484
|
>>> edbapp.siwave.create_resistor_on_pin(pins[0], pins[1],50,"res_name")
|
|
481
485
|
"""
|
|
482
486
|
resistor = ResistorSource()
|
|
483
|
-
resistor.positive_node.net = pos_pin.
|
|
484
|
-
resistor.negative_node.net = neg_pin.
|
|
487
|
+
resistor.positive_node.net = pos_pin.net_name
|
|
488
|
+
resistor.negative_node.net = neg_pin.net_name
|
|
485
489
|
resistor.rvalue = rvalue
|
|
486
490
|
if not resistor_name:
|
|
487
491
|
resistor_name = "Res_{}_{}_{}_{}".format(
|
|
488
|
-
pos_pin.
|
|
489
|
-
pos_pin.
|
|
490
|
-
neg_pin.
|
|
491
|
-
neg_pin.
|
|
492
|
+
pos_pin.component.name,
|
|
493
|
+
pos_pin.net_name,
|
|
494
|
+
neg_pin.component.name,
|
|
495
|
+
neg_pin.net_name,
|
|
492
496
|
)
|
|
493
497
|
resistor.name = resistor_name
|
|
494
|
-
resistor.positive_node.component_node = pos_pin.
|
|
498
|
+
resistor.positive_node.component_node = pos_pin.component
|
|
495
499
|
resistor.positive_node.node_pins = pos_pin
|
|
496
|
-
resistor.negative_node.component_node = neg_pin.
|
|
500
|
+
resistor.negative_node.component_node = neg_pin.component
|
|
497
501
|
resistor.negative_node.node_pins = neg_pin
|
|
498
502
|
return self._create_terminal_on_pins(resistor)
|
|
499
503
|
|
|
@@ -269,7 +269,9 @@ class SiwaveSimulationSetup(SimulationSetup):
|
|
|
269
269
|
>>> setup1 = edbapp.create_siwave_syz_setup("setup1")
|
|
270
270
|
>>> setup1.add_sweep(name="sw1", frequency_set=["linear count", "1MHz", "100MHz", 10])
|
|
271
271
|
"""
|
|
272
|
-
sweep_data = SimulationSetup.add_sweep(
|
|
272
|
+
sweep_data = SimulationSetup.add_sweep(
|
|
273
|
+
self, name=name, frequency_set=frequency_set, sweep_type=sweep_type, **kwargs
|
|
274
|
+
)
|
|
273
275
|
self._siwave_sweeps_list.append(sweep_data)
|
|
274
276
|
return sweep_data
|
|
275
277
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
pyedb/__init__.py,sha256=
|
|
1
|
+
pyedb/__init__.py,sha256=D-QTHDj41UTM5IywWlQfuFq5s1POfpP6q7wSxyHa4X8,1525
|
|
2
2
|
pyedb/edb_logger.py,sha256=7KXPvAMCKzlzJ5zioiNO5A3zkqbpCHhWHB4aXKfgu5Y,14959
|
|
3
3
|
pyedb/exceptions.py,sha256=n94xluzUks6BA24vd_L6HkrvoP_H_l6__hQmqzdCyPo,111
|
|
4
4
|
pyedb/siwave.py,sha256=Mgg5ZGzOUOtNdlePHcnrgN3rletQ7jrqRi3WfxF58uU,17727
|
|
@@ -22,24 +22,24 @@ pyedb/configuration/cfg_ports_sources.py,sha256=4_t88bqAQzfypFH95Ro9ATBFz1ZJenZB
|
|
|
22
22
|
pyedb/configuration/cfg_s_parameter_models.py,sha256=UBrCOt69AQof5r2OqpoSJ7E8G52jo0lAcSfYvJhm8hU,10224
|
|
23
23
|
pyedb/configuration/cfg_setup.py,sha256=A8fm2Qqy9SFi8peToI55rfh0jxPESmOM6ecNBWHCggA,17526
|
|
24
24
|
pyedb/configuration/cfg_spice_models.py,sha256=Q_5j2-V6cepSFcnijot8iypTqzanLp7HOz-agmnwKns,2570
|
|
25
|
-
pyedb/configuration/cfg_stackup.py,sha256=
|
|
25
|
+
pyedb/configuration/cfg_stackup.py,sha256=T28HTuR-EUIEGh41oIVD_BDambEds6CmJXmSggYKY70,12597
|
|
26
26
|
pyedb/configuration/configuration.py,sha256=KFMN90cxeUhbE7lpqmZLDBOEL9I8YTSNLeqzFkwzHXE,23023
|
|
27
27
|
pyedb/dotnet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
28
|
pyedb/dotnet/clr_module.py,sha256=EabqZgZgBZOhJD9_V8Ll8sEKgBFj9xe9zARNYIvYM_s,5304
|
|
29
29
|
pyedb/dotnet/edb.py,sha256=CTtXIEoPmgIA23HOl4u1GI_ofSOFvh_pMH6PgJ0buC0,188086
|
|
30
30
|
pyedb/dotnet/database/Variables.py,sha256=CX12X6u-2tbcgjYJU643TVjIJEGB58a2nM4f4wMVTR8,77687
|
|
31
31
|
pyedb/dotnet/database/__init__.py,sha256=nIRLJ8VZLcMAp12zmGsnZ5x2BEEl7q_Kj_KAOXxVjpQ,52
|
|
32
|
-
pyedb/dotnet/database/components.py,sha256=
|
|
32
|
+
pyedb/dotnet/database/components.py,sha256=BZJzALawqdmtNitVOv5uHpn5SC7Ky3ngW3_z0Ar3b4I,111385
|
|
33
33
|
pyedb/dotnet/database/general.py,sha256=k2Bcr5VV-QUzEZlYorqYCX1ZchHBH7WqUvc8maMxId0,4716
|
|
34
34
|
pyedb/dotnet/database/hfss.py,sha256=I1PxGkIVXQjC0obuN7J6BYGXmfKiqHwHHPtaCTIS-9E,69165
|
|
35
35
|
pyedb/dotnet/database/layout_obj_instance.py,sha256=se6eJ2kfQOAZfAwObCBdr0A7CCD3st4aiPPVJR9eQoA,1407
|
|
36
36
|
pyedb/dotnet/database/layout_validation.py,sha256=kanRMaFz7Xv_3jFUwdbbzc1d6Rj6kaHAjM4eNOTrYIk,13597
|
|
37
37
|
pyedb/dotnet/database/materials.py,sha256=NEwMvyslvWo_5YC3Ht0XU4Vmk4i25olDjnkG_zBBsB8,48088
|
|
38
|
-
pyedb/dotnet/database/modeler.py,sha256=
|
|
38
|
+
pyedb/dotnet/database/modeler.py,sha256=UPIdGc11s9mo6ugXGFu6o2xqNMzrGGAg4Rj6JJ1tsok,56283
|
|
39
39
|
pyedb/dotnet/database/net_class.py,sha256=NxRX8feIaJyf3NmRfSzZ08ItDbZOucOyAnTHZh-LkUI,11354
|
|
40
40
|
pyedb/dotnet/database/nets.py,sha256=bs7aX6a3xWWNzxsX471omu17_4jmC1HmNH9q8fefBJc,25614
|
|
41
|
-
pyedb/dotnet/database/padstack.py,sha256=
|
|
42
|
-
pyedb/dotnet/database/siwave.py,sha256=
|
|
41
|
+
pyedb/dotnet/database/padstack.py,sha256=A85zw3BgqRUQm-UzbLMzeY1KrhIhju3lcLe7AqsVGqU,73492
|
|
42
|
+
pyedb/dotnet/database/siwave.py,sha256=08Dx280x9TQ7Kl4lgEmFcnOp59Vnf2nRbdtAcJQ2atw,64326
|
|
43
43
|
pyedb/dotnet/database/stackup.py,sha256=y-lrZWwK3BVLuV1WR3pP3o6IppioaQkzeO5QPiN_KKY,120035
|
|
44
44
|
pyedb/dotnet/database/cell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
45
|
pyedb/dotnet/database/cell/connectable.py,sha256=7B8_w_IRLtzb6bLwm2-HR8ScURZb0P5dhE6jezBS8Ps,2864
|
|
@@ -47,12 +47,12 @@ pyedb/dotnet/database/cell/layout.py,sha256=dTx28Uj1uyjpan69vuIitv-G7h654R9JbO4-
|
|
|
47
47
|
pyedb/dotnet/database/cell/layout_obj.py,sha256=YpyXv8L9vHAH1Lvbu9s_2SlBExifBQrMnlvmvo7YO7M,2765
|
|
48
48
|
pyedb/dotnet/database/cell/voltage_regulator.py,sha256=p9PGP4f-uB75Y9Cf3RlB_IkAadVVa3vdhXnztvsH12g,5387
|
|
49
49
|
pyedb/dotnet/database/cell/hierarchy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
-
pyedb/dotnet/database/cell/hierarchy/component.py,sha256=
|
|
50
|
+
pyedb/dotnet/database/cell/hierarchy/component.py,sha256=gjpGM7t4Ir4VT8V9fRsclQ833wZTDgDdg0J9w_ZmC8o,36727
|
|
51
51
|
pyedb/dotnet/database/cell/hierarchy/hierarchy_obj.py,sha256=B42_qDotHyyhDOZM_fA1hzvPaqqR52A45u1AvOPmhFc,2160
|
|
52
52
|
pyedb/dotnet/database/cell/hierarchy/model.py,sha256=RHZTe4-IvF4dGWXXj9zB30zdRJaxhWngmJ_QQc9jkp0,3198
|
|
53
53
|
pyedb/dotnet/database/cell/hierarchy/netlist_model.py,sha256=fF6tY-6s-lW9EuvJ5sw3RlIkjuoSjeZbrNk5wG-_hzM,1356
|
|
54
54
|
pyedb/dotnet/database/cell/hierarchy/pin_pair_model.py,sha256=nq_22nNC2EWo9rirAztOE2mysfP6uV9cdMnamy6zTu4,3792
|
|
55
|
-
pyedb/dotnet/database/cell/hierarchy/s_parameter_model.py,sha256=
|
|
55
|
+
pyedb/dotnet/database/cell/hierarchy/s_parameter_model.py,sha256=jlL6Lbav16RVPlZPV3U1tRfeOip39wF6KeLbmiO9h3w,1624
|
|
56
56
|
pyedb/dotnet/database/cell/hierarchy/spice_model.py,sha256=SGiUcan2l0n8DGk3GtwCskkqZ3rdVHMSS_fGlAfwJSk,1443
|
|
57
57
|
pyedb/dotnet/database/cell/primitive/__init__.py,sha256=8jByHkoaowAYQTCww-zRrTQmN061fLz_OHjTLSrzQQY,58
|
|
58
58
|
pyedb/dotnet/database/cell/primitive/bondwire.py,sha256=3Wqn_9a54xhfPw38Vyo4ekzCF8NoU-WN_mNlhS8lFvw,7322
|
|
@@ -64,13 +64,13 @@ pyedb/dotnet/database/cell/terminal/edge_terminal.py,sha256=uyoemVyEzez8WjI9Fyqh
|
|
|
64
64
|
pyedb/dotnet/database/cell/terminal/padstack_instance_terminal.py,sha256=byFKoc1RzFmWUQuS5KuX9xiUikYjOwUjQuPby1jrV5o,4534
|
|
65
65
|
pyedb/dotnet/database/cell/terminal/pingroup_terminal.py,sha256=60DUrszHP7QUVPSxoqTYrkOUukZsGiGNE3zd2Wa-2zQ,2753
|
|
66
66
|
pyedb/dotnet/database/cell/terminal/point_terminal.py,sha256=psZBjsKufr_nMHGPIThfRD1jq4bVqgH_TE5Gq1BIhTQ,3390
|
|
67
|
-
pyedb/dotnet/database/cell/terminal/terminal.py,sha256=
|
|
67
|
+
pyedb/dotnet/database/cell/terminal/terminal.py,sha256=_FlndrFfSQX5V954trt4S4RIjloLc35b1g0MbpUW5gQ,18692
|
|
68
68
|
pyedb/dotnet/database/definition/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
69
|
pyedb/dotnet/database/definition/component_def.py,sha256=8Ldcn9zHP_-RJUo-kbLmtRRonS8X0EUc-Yo12X2GJdo,7404
|
|
70
70
|
pyedb/dotnet/database/definition/component_model.py,sha256=xvTQYuFAKRigacuahw6TQkM8SaJ8F-FExXmG2sTjSSI,1838
|
|
71
71
|
pyedb/dotnet/database/definition/definition_obj.py,sha256=HU_SL9tMGlmWyockpRM51k9PdpQ4eeHjScP4YQdGkls,1560
|
|
72
72
|
pyedb/dotnet/database/definition/definitions.py,sha256=sXWgCkHOtCkqZOtdnIdwjnkfCoKHAwFHsYleqkc_XcQ,2383
|
|
73
|
-
pyedb/dotnet/database/definition/package_def.py,sha256=
|
|
73
|
+
pyedb/dotnet/database/definition/package_def.py,sha256=kB3Od01vrJmvGynyhkuJLKT1Ry_aO4A0wt447HW_6IY,6828
|
|
74
74
|
pyedb/dotnet/database/dotnet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
75
|
pyedb/dotnet/database/dotnet/database.py,sha256=1LVNuN2FPSrUnNCQd9E541u8UevX1gq2kgym1cD-ygk,37240
|
|
76
76
|
pyedb/dotnet/database/dotnet/primitive.py,sha256=Ma-hwk62_6Xhi4SKViYyYVGxTqdZw5v3VcjZ55ek68c,49944
|
|
@@ -81,7 +81,7 @@ pyedb/dotnet/database/edb_data/edbvalue.py,sha256=Vj_11HXsQUNavizKp5FicORm6cjhXR
|
|
|
81
81
|
pyedb/dotnet/database/edb_data/hfss_extent_info.py,sha256=Ydzle6moatP89kQdjnzyNabsCW0KXE4WYqDv7sFyLb8,13040
|
|
82
82
|
pyedb/dotnet/database/edb_data/layer_data.py,sha256=4Z_eaHSfGfwQBKETEmGSwMvwGzvirtwYw4G4TwonNiA,34314
|
|
83
83
|
pyedb/dotnet/database/edb_data/nets_data.py,sha256=siq2w5CT5D5PeK9tC_vaGM54UOyqnYkcP4kUts459es,10009
|
|
84
|
-
pyedb/dotnet/database/edb_data/padstacks_data.py,sha256=
|
|
84
|
+
pyedb/dotnet/database/edb_data/padstacks_data.py,sha256=9HrWHNJr--OvO7uq2EnoEIPmiBilU7iNV0L9jyXSLS0,82977
|
|
85
85
|
pyedb/dotnet/database/edb_data/ports.py,sha256=qoqTqk47E4xtg43uvQ_SWCEUQscFBjt2bfcj9vsQsLI,7405
|
|
86
86
|
pyedb/dotnet/database/edb_data/primitives_data.py,sha256=gBW7GiaPxDWBUj1wgOIiNHJ3QKM2ZDU0SJh0JWUlFHc,16826
|
|
87
87
|
pyedb/dotnet/database/edb_data/raptor_x_simulation_setup_data.py,sha256=f_09VvuDHeaIuTivSi2OiAEv8aJ52vBasuBoSS9sCQE,20953
|
|
@@ -91,7 +91,7 @@ pyedb/dotnet/database/edb_data/utilities.py,sha256=ztJdG7fy-e4OoCOqmIYr2xE7Fz6YM
|
|
|
91
91
|
pyedb/dotnet/database/edb_data/variables.py,sha256=mJvOXT9A5rlxZamizCsC77QPWyt0zO_tUpPPl61xqcE,3501
|
|
92
92
|
pyedb/dotnet/database/geometry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
93
|
pyedb/dotnet/database/geometry/point_data.py,sha256=Cbs2849-Q6KC2nSr8AqFyhQrt2SSDFaTaZLRDeyP1EM,2174
|
|
94
|
-
pyedb/dotnet/database/geometry/polygon_data.py,sha256=
|
|
94
|
+
pyedb/dotnet/database/geometry/polygon_data.py,sha256=TDNuuqzNUYDB7QNNAbvJsq9YGAzYbAbc0vG7lz3Tmb4,6206
|
|
95
95
|
pyedb/dotnet/database/sim_setup_data/__init__.py,sha256=8jByHkoaowAYQTCww-zRrTQmN061fLz_OHjTLSrzQQY,58
|
|
96
96
|
pyedb/dotnet/database/sim_setup_data/data/__init__.py,sha256=8jByHkoaowAYQTCww-zRrTQmN061fLz_OHjTLSrzQQY,58
|
|
97
97
|
pyedb/dotnet/database/sim_setup_data/data/adaptive_frequency_data.py,sha256=tlHI7PUUoseNnJAtihpjb1PwXYNr-4ztAAnunlLLWVQ,2463
|
|
@@ -108,7 +108,7 @@ pyedb/dotnet/database/utilities/heatsink.py,sha256=7G7Yx9TxbL5EAiR51MnhdRiAQBVf-
|
|
|
108
108
|
pyedb/dotnet/database/utilities/hfss_simulation_setup.py,sha256=1tlZ64rUNEtvRLLbVhN-gfuVduVCo8fT6IPKfQCEaDs,14074
|
|
109
109
|
pyedb/dotnet/database/utilities/obj_base.py,sha256=xSGTbfh4pbNIw3EjqtjFMiN8rWM2JhYZ2eU73qHAGlI,2883
|
|
110
110
|
pyedb/dotnet/database/utilities/simulation_setup.py,sha256=YDOBKSU5cJ1crSrAccKVh8FGf0p84dghkEn8bTVG4hU,13320
|
|
111
|
-
pyedb/dotnet/database/utilities/siwave_simulation_setup.py,sha256=
|
|
111
|
+
pyedb/dotnet/database/utilities/siwave_simulation_setup.py,sha256=UhBBHd-Nmj5SKR4wtVprOULAnVegKCSQv840yvJNlyo,13924
|
|
112
112
|
pyedb/extensions/pre_layout_design_toolkit/via_design.py,sha256=b9pTM5Gi3S3O2epaSBp4cD5DEul-MP5gCvRw3E5GmpE,46734
|
|
113
113
|
pyedb/generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
114
114
|
pyedb/generic/constants.py,sha256=prWLZH0-SeBIVK6LHZ4SGZFQCofuym2TuQYfdqwhuSQ,28956
|
|
@@ -282,7 +282,7 @@ pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py,sha256=YmYI6WTQulL5Uf8Wx
|
|
|
282
282
|
pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py,sha256=KHa-UqcXuabiVfT2CV-UvWl5Q2qGYHF2Ye9azcAlnXc,3966
|
|
283
283
|
pyedb/modeler/geometry_operators.py,sha256=YhR-QE0dvIkbp4SsjWp309KDE1OZa6wUzr8a634MuJ4,74195
|
|
284
284
|
pyedb/siwave_core/icepak.py,sha256=WnZ-t8mik7LDY06V8hZFV-TxRZJQWK7bu_8Ichx-oBs,5206
|
|
285
|
-
pyedb-0.
|
|
286
|
-
pyedb-0.
|
|
287
|
-
pyedb-0.
|
|
288
|
-
pyedb-0.
|
|
285
|
+
pyedb-0.49.0.dist-info/LICENSE,sha256=qQWivZ12ETN5l3QxvTARY-QI5eoRRlyHdwLlAj0Bg5I,1089
|
|
286
|
+
pyedb-0.49.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
|
|
287
|
+
pyedb-0.49.0.dist-info/METADATA,sha256=2uC_uKSbJVh6acGuwZM4f1m4C_ScYkueKMuQsfzfURQ,8619
|
|
288
|
+
pyedb-0.49.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|