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 CHANGED
@@ -44,7 +44,7 @@ deprecation_warning()
44
44
  #
45
45
 
46
46
  pyedb_path = os.path.dirname(__file__)
47
- __version__ = "0.48.0"
47
+ __version__ = "0.49.0"
48
48
  version = __version__
49
49
 
50
50
  #
@@ -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
- self.thermal_modifier = [
68
- CfgMaterialPropertyThermalModifier(**i) for i in kwargs.get("thermal_modifier", {}) if i is not None
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("thermal_modifier", []):
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 [pt1.X.ToDouble(), pt1.Y.ToDouble(), pt2.X.ToDouble(), pt2.Y.ToDouble()]
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.GetNet().GetName() in power_ground_net_names]
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.GetName() == ref_pin.GetName(): # skip the reference psi
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
- if not isinstance(mounted_component, self._pedb.edb_api.cell.hierarchy.component):
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, self._pedb.edb_api.cell.hierarchy.component):
563
+ if not isinstance(hosting_component, EDBComponent):
562
564
  return False
563
565
 
564
- if mounted_component_pin1:
565
- m_pin1 = self._get_edb_pin_from_pin_name(mounted_component, mounted_component_pin1)
566
- m_pin1_pos = self.get_pin_position(m_pin1)
567
- if mounted_component_pin2:
568
- m_pin2 = self._get_edb_pin_from_pin_name(mounted_component, mounted_component_pin2)
569
- m_pin2_pos = self.get_pin_position(m_pin2)
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 = self._get_edb_pin_from_pin_name(hosting_component, hosting_component_pin1)
573
- h_pin1_pos = self.get_pin_position(h_pin1)
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 = self._get_edb_pin_from_pin_name(hosting_component, hosting_component_pin2)
577
- h_pin2_pos = self.get_pin_position(h_pin2)
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 = self.get_solder_ball_height(mounted_component)
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_{}_{}".format(pins[0].net_name, pins[0].name)
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".format(port_name)
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 {}".format(pins[0].name, reference_pins[0].name)
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].GetNet(),
1320
- "{}_{}".format(component.refdes, pins[0].GetName()),
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].GetNet(),
1330
- "{}_{}_ref".format(component.refdes, pins[1].GetName()),
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
- "{}_{}".format(component.refdes, pins[0].GetName()),
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
- "{}_{}_ref".format(component.refdes, pins[1].GetName()),
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.GetName(), to_pin.GetName())
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.GetId()) for i in pinlist]
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 = [p for p in list(component.LayoutObjs) if int(p.GetObjType()) == 1 and p.IsLayoutPin()]
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.GetNet().GetName() == net_name:
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.GetNet().GetName())
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 pin_obj in component_pins:
2617
- pin_name = pin_obj.GetName()
2618
- net_name = pin_obj.GetNet().GetName()
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 therm_cond(self):
109
- """Thermal conductivity of the package."""
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
- @therm_cond.setter
113
- def therm_cond(self, value):
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 point_in_polygon(self, x: Union[str, float], y: Union[str, float]) -> bool:
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)
@@ -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
- poligon_data = polygon.GetPolygonData()
460
- bound_center = poligon_data.GetBoundingCircleCenter()
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 = poligon_data.GetPoint(i)
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
- poligon_data.SetPoint(i, new_points)
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(poligon_data)
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
- padparams = self._edb.definition.PadstackDefData(pin.GetPadstackDef().GetData()).GetPadParametersValue(
633
- layername, self.int_to_pad_type(pad_type)
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:
@@ -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
- circuit_port.positive_node.net = pos_pin.GetNet().GetName()
265
- circuit_port.negative_node.net = neg_pin.GetNet().GetName()
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.GetComponent().GetName(),
271
- pos_pin.GetNet().GetName(),
272
- neg_pin.GetComponent().GetName(),
273
- neg_pin.GetNet().GetName(),
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.GetComponent()
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.GetComponent()
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.GetNet().GetName()
390
- voltage_source.negative_node.net = neg_pin.GetNet().GetName()
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.GetComponent().GetName(),
396
- pos_pin.GetNet().GetName(),
397
- neg_pin.GetComponent().GetName(),
398
- neg_pin.GetNet().GetName(),
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.GetComponent()
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.GetComponent()
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.GetNet().GetName()
438
- current_source.negative_node.net = neg_pin.GetNet().GetName()
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.GetComponent().GetName(),
444
- pos_pin.GetNet().GetName(),
445
- neg_pin.GetComponent().GetName(),
446
- neg_pin.GetNet().GetName(),
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.GetComponent()
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.GetComponent()
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.GetNet().GetName()
484
- resistor.negative_node.net = neg_pin.GetNet().GetName()
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.GetComponent().GetName(),
489
- pos_pin.GetNet().GetName(),
490
- neg_pin.GetComponent().GetName(),
491
- neg_pin.GetNet().GetName(),
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.GetComponent()
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.GetComponent()
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(self, name, frequency_set, sweep_type, **kwargs)
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,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyedb
3
- Version: 0.48.0
3
+ Version: 0.49.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>
@@ -1,4 +1,4 @@
1
- pyedb/__init__.py,sha256=sma-x2vdFZcXxr7FUff0rw9A0YRuIKpHgaggUeeVB5s,1525
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=pNymp3_NtvwkhlidFSV-bfTnEIi-CybEtETRgDBRrx4,12557
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=RAhoWsDtw6DUgcPqJPpXAXjyi4Km79LA3VQcZtV7fmI,110341
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=h1GmqYRXR1FzGfzXREBsMxo4lP78LFABrU5h6FOIbes,56001
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=maddMpEB07E408TNkoiBP4xWvmbpfHWDpv0zOM09Coo,73340
42
- pyedb/dotnet/database/siwave.py,sha256=P-AOz_DOQpqK6Am8-oCdkLA1ORanEEoOeeocbop390s,64366
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=qsxkUovUrVFLB0ikJ36ztcCCEUH4G1WATNSXF92tpfA,34847
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=o7Omw4R9uQGCBDj4dIU-R73Uf6v3p_zKLMAzJlaH9VA,1456
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=pvdI0RcFcm_SuPAXFYmTDpnFPpfsmaFGhkqiDbFg--4,18686
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=TJ3B3_6BTRJv3zayubhZiKdBHKa5ayfvmE2-EjBrWLA,6145
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=vPOte1QcDdArcMAXYgGON21147Rocu0SDvJr9a2qnR0,82907
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=zMqwQsdJS4ogxGlogau8IDQsIH7_dbjZTeKV2REA-0I,5752
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=j7bIniRXBJVw51MHv7FeNKQ_Fz3hOHxG8crzfJmNgm4,13872
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.48.0.dist-info/LICENSE,sha256=qQWivZ12ETN5l3QxvTARY-QI5eoRRlyHdwLlAj0Bg5I,1089
286
- pyedb-0.48.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
287
- pyedb-0.48.0.dist-info/METADATA,sha256=uYDU4gNfJHZLqt0kT89aYRlehqhAYuTrqU_9mfn-TBg,8619
288
- pyedb-0.48.0.dist-info/RECORD,,
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