pyedb 0.13.dev0__py3-none-any.whl → 0.14.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyedb might be problematic. Click here for more details.

Files changed (75) hide show
  1. pyedb/__init__.py +1 -1
  2. pyedb/configuration/cfg_common.py +0 -5
  3. pyedb/configuration/cfg_components.py +0 -2
  4. pyedb/configuration/cfg_operations.py +0 -2
  5. pyedb/configuration/cfg_package_definition.py +0 -2
  6. pyedb/configuration/cfg_ports_sources.py +14 -11
  7. pyedb/configuration/cfg_stackup.py +0 -7
  8. pyedb/configuration/configuration.py +0 -6
  9. pyedb/dotnet/application/Variables.py +4 -40
  10. pyedb/dotnet/edb.py +27 -82
  11. pyedb/dotnet/edb_core/{edb_data/components_data.py → cell/hierarchy/component.py} +13 -133
  12. pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -3
  13. pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +30 -0
  14. pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +105 -0
  15. pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +34 -0
  16. pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +34 -0
  17. pyedb/dotnet/edb_core/cell/layout.py +137 -0
  18. pyedb/dotnet/edb_core/cell/layout_obj.py +2 -4
  19. pyedb/dotnet/edb_core/cell/primitive.py +199 -1
  20. pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +52 -0
  21. pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +50 -0
  22. pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +88 -0
  23. pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +59 -0
  24. pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +73 -0
  25. pyedb/dotnet/edb_core/{edb_data/terminals.py → cell/terminal/terminal.py} +33 -242
  26. pyedb/dotnet/edb_core/components.py +10 -56
  27. pyedb/dotnet/edb_core/definition/component_def.py +1 -8
  28. pyedb/dotnet/edb_core/definition/component_model.py +0 -2
  29. pyedb/dotnet/edb_core/definition/definitions.py +0 -2
  30. pyedb/dotnet/edb_core/definition/package_def.py +7 -5
  31. pyedb/dotnet/edb_core/edb_data/control_file.py +0 -3
  32. pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -5
  33. pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +4 -9
  34. pyedb/dotnet/edb_core/edb_data/layer_data.py +0 -7
  35. pyedb/dotnet/edb_core/edb_data/nets_data.py +2 -5
  36. pyedb/dotnet/edb_core/edb_data/padstacks_data.py +11 -29
  37. pyedb/dotnet/edb_core/edb_data/ports.py +4 -4
  38. pyedb/dotnet/edb_core/edb_data/primitives_data.py +3 -26
  39. pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +13 -20
  40. pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +3 -11
  41. pyedb/dotnet/edb_core/edb_data/sources.py +12 -17
  42. pyedb/dotnet/edb_core/general.py +1 -6
  43. pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -3
  44. pyedb/dotnet/edb_core/hfss.py +1 -33
  45. pyedb/dotnet/edb_core/layout.py +0 -35
  46. pyedb/dotnet/edb_core/layout_validation.py +1 -3
  47. pyedb/dotnet/edb_core/materials.py +1 -22
  48. pyedb/dotnet/edb_core/net_class.py +0 -8
  49. pyedb/dotnet/edb_core/nets.py +4 -29
  50. pyedb/dotnet/edb_core/padstack.py +76 -30
  51. pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +72 -0
  52. pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +287 -0
  53. pyedb/dotnet/edb_core/{edb_data/hfss_simulation_setup_data.py → sim_setup_data/data/settings.py} +174 -878
  54. pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +509 -0
  55. pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
  56. pyedb/dotnet/edb_core/{edb_data/siwave_simulation_setup_data.py → sim_setup_data/io/siwave.py} +0 -341
  57. pyedb/dotnet/edb_core/siwave.py +5 -33
  58. pyedb/dotnet/edb_core/stackup.py +4 -51
  59. pyedb/dotnet/edb_core/utilities/simulation_setup.py +613 -366
  60. pyedb/generic/data_handlers.py +1 -9
  61. pyedb/generic/general_methods.py +3 -53
  62. pyedb/generic/plot.py +1 -2
  63. pyedb/ipc2581/ecad/cad_data/layer_feature.py +1 -7
  64. pyedb/ipc2581/ecad/cad_data/package.py +1 -4
  65. pyedb/ipc2581/ecad/cad_data/path.py +1 -3
  66. pyedb/ipc2581/ecad/cad_data/polygon.py +1 -6
  67. pyedb/ipc2581/ecad/cad_data/step.py +1 -10
  68. pyedb/ipc2581/ipc2581.py +8 -15
  69. pyedb/modeler/geometry_operators.py +164 -67
  70. pyedb/siwave.py +25 -32
  71. {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/METADATA +2 -2
  72. {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/RECORD +75 -61
  73. /pyedb/dotnet/edb_core/cell/{__init__.py → terminal/__init__.py} +0 -0
  74. {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/LICENSE +0 -0
  75. {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/WHEEL +0 -0
@@ -25,8 +25,6 @@ import re
25
25
  from pyedb.dotnet.edb_core.cell.layout_obj import Connectable
26
26
  from pyedb.dotnet.edb_core.edb_data.padstacks_data import EDBPadstackInstance
27
27
  from pyedb.dotnet.edb_core.edb_data.primitives_data import cast
28
- from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
29
- from pyedb.generic.general_methods import generate_unique_name, pyedb_function_handler
30
28
 
31
29
 
32
30
  class Terminal(Connectable):
@@ -57,14 +55,6 @@ class Terminal(Connectable):
57
55
  "PinGroupTerminal": self._pedb.edb_api.cell.terminal.TerminalType.PinGroupTerminal,
58
56
  }
59
57
 
60
- self._terminal_mapping = {
61
- "EdgeTerminal": EdgeTerminal,
62
- "PointTerminal": PointTerminal,
63
- "PadstackInstanceTerminal": PadstackInstanceTerminal,
64
- "BundleTerminal": BundleTerminal,
65
- "PinGroupTerminal": PinGroupTerminal,
66
- }
67
-
68
58
  @property
69
59
  def _hfss_port_property(self):
70
60
  """HFSS port property."""
@@ -112,6 +102,34 @@ class Terminal(Connectable):
112
102
  p["HFSS Type"] = value
113
103
  self._hfss_port_property = p
114
104
 
105
+ @property
106
+ def layer(self):
107
+ """Get layer of the terminal."""
108
+ point_data = self._pedb.point_data(0, 0)
109
+ layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
110
+ if self._edb_object.GetParameters(point_data, layer):
111
+ return layer
112
+ else:
113
+ self._pedb.logger.warning(f"No pad parameters found for terminal {self.name}")
114
+
115
+ @layer.setter
116
+ def layer(self, value):
117
+ layer = self._pedb.stackup.layers[value]._edb_layer
118
+ point_data = self._pedb.point_data(*self.location)
119
+ self._edb_object.SetParameters(point_data, layer)
120
+
121
+ @property
122
+ def location(self):
123
+ """Location of the terminal."""
124
+ layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
125
+ _, point_data, _ = self._edb_object.GetParameters(None, layer)
126
+ return [point_data.X.ToDouble(), point_data.Y.ToDouble()]
127
+
128
+ @location.setter
129
+ def location(self, value):
130
+ layer = self.layer
131
+ self._edb_object.SetParameters(self._pedb.point_data(*value), layer)
132
+
115
133
  @property
116
134
  def is_circuit_port(self):
117
135
  """Whether it is a circuit port."""
@@ -219,7 +237,7 @@ class Terminal(Connectable):
219
237
 
220
238
  terminal = Terminal(self._pedb, self._edb_object.GetReferenceTerminal())
221
239
  if not terminal.is_null:
222
- return self._terminal_mapping[terminal.terminal_type](self._pedb, terminal._edb_object)
240
+ return terminal
223
241
 
224
242
  @ref_terminal.setter
225
243
  def ref_terminal(self, value):
@@ -265,7 +283,6 @@ class Terminal(Connectable):
265
283
 
266
284
  return ""
267
285
 
268
- @pyedb_function_handler()
269
286
  def get_padstack_terminal_reference_pin(self, gnd_net_name_preference=None): # pragma : no cover
270
287
  """Get a list of pad stacks instances and serves Coax wave ports,
271
288
  pingroup terminals, PadEdge terminals.
@@ -289,7 +306,6 @@ class Terminal(Connectable):
289
306
  pins = self._pedb.components.get_pin_from_component(compInst.GetName())
290
307
  return self._get_closest_pin(padStackInstance, pins, gnd_net_name_preference)
291
308
 
292
- @pyedb_function_handler()
293
309
  def get_pin_group_terminal_reference_pin(self, gnd_net_name_preference=None): # pragma : no cover
294
310
  """Return a list of pins and serves terminals connected to pingroups.
295
311
 
@@ -322,10 +338,9 @@ class Terminal(Connectable):
322
338
  _, refTermPSI, _ = refTerm.GetParameters()
323
339
  return EDBPadstackInstance(refTermPSI, self._pedb)
324
340
  except AttributeError:
325
- return None
326
- return None
341
+ return False
342
+ return False
327
343
 
328
- @pyedb_function_handler()
329
344
  def get_edge_terminal_reference_primitive(self): # pragma : no cover
330
345
  """Check and return a primitive instance that serves Edge ports,
331
346
  wave ports and coupled edge ports that are directly connedted to primitives.
@@ -349,7 +364,6 @@ class Terminal(Connectable):
349
364
  return cast(primitive, self._pedb)
350
365
  return None # pragma: no cover
351
366
 
352
- @pyedb_function_handler()
353
367
  def get_point_terminal_reference_primitive(self): # pragma : no cover
354
368
  """Find and return the primitive reference for the point terminal or the padstack instance.
355
369
 
@@ -378,9 +392,8 @@ class Terminal(Connectable):
378
392
  rectangle_data = vias._pedb.modeler.shape_to_polygon_data(plane)
379
393
  if rectangle_data.PointInPolygon(shape_pd):
380
394
  return vias
381
- return None
395
+ return False
382
396
 
383
- @pyedb_function_handler()
384
397
  def get_pad_edge_terminal_reference_pin(self, gnd_net_name_preference=None):
385
398
  """Get the closest pin padstack instances and serves any edge terminal connected to a pad.
386
399
 
@@ -398,11 +411,10 @@ class Terminal(Connectable):
398
411
  try:
399
412
  edges = self._edb_object.GetEdges()
400
413
  except AttributeError:
401
- return None
414
+ return False
402
415
  _, pad_edge_pstack_inst, _, _ = edges[0].GetParameters()
403
416
  return self._get_closest_pin(pad_edge_pstack_inst, pins, gnd_net_name_preference)
404
417
 
405
- @pyedb_function_handler()
406
418
  def _get_closest_pin(self, ref_pin, pin_list, gnd_net=None):
407
419
  _, pad_stack_inst_point, _ = ref_pin.GetPositionAndRotation() # get the xy of the padstack
408
420
  if gnd_net is not None:
@@ -432,224 +444,3 @@ class Terminal(Connectable):
432
444
  pin_obj = pin
433
445
  if pin_obj:
434
446
  return EDBPadstackInstance(pin_obj, self._pedb)
435
-
436
-
437
- class EdgeTerminal(Terminal):
438
- def __init__(self, pedb, edb_object):
439
- super().__init__(pedb, edb_object)
440
-
441
- @pyedb_function_handler()
442
- def couple_ports(self, port):
443
- """Create a bundle wave port.
444
-
445
- Parameters
446
- ----------
447
- port : :class:`dotnet.edb_core.ports.WavePort`, :class:`dotnet.edb_core.ports.GapPort`, list, optional
448
- Ports to be added.
449
-
450
- Returns
451
- -------
452
- :class:`dotnet.edb_core.ports.BundleWavePort`
453
-
454
- """
455
- if not isinstance(port, (list, tuple)):
456
- port = [port]
457
- temp = [self._edb_object]
458
- temp.extend([i._edb_object for i in port])
459
- edb_list = convert_py_list_to_net_list(temp, self._edb.cell.terminal.Terminal)
460
- _edb_bundle_terminal = self._edb.cell.terminal.BundleTerminal.Create(edb_list)
461
- return self._pedb.ports[self.name]
462
-
463
-
464
- class BundleTerminal(Terminal):
465
- """Manages bundle terminal properties.
466
-
467
- Parameters
468
- ----------
469
- pedb : pyedb.edb.Edb
470
- EDB object from the ``Edblib`` library.
471
- edb_object : Ansys.Ansoft.Edb.Cell.Terminal.BundleTerminal
472
- BundleTerminal instance from EDB.
473
- """
474
-
475
- def __init__(self, pedb, edb_object):
476
- super().__init__(pedb, edb_object)
477
-
478
- @property
479
- def terminals(self):
480
- """Get terminals belonging to this excitation."""
481
- return [EdgeTerminal(self._pedb, i) for i in list(self._edb_object.GetTerminals())]
482
-
483
- @property
484
- def name(self):
485
- return self.terminals[0].name
486
-
487
- @pyedb_function_handler()
488
- def decouple(self):
489
- """Ungroup a bundle of terminals."""
490
- return self._edb_object.Ungroup()
491
-
492
-
493
- class PadstackInstanceTerminal(Terminal):
494
- """Manages bundle terminal properties."""
495
-
496
- def __init__(self, pedb, edb_object):
497
- super().__init__(pedb, edb_object)
498
-
499
- @property
500
- def position(self):
501
- """Return terminal position.
502
- Returns
503
- -------
504
- Position [x,y] : [float, float]
505
- """
506
- edb_padstack_instance = self._edb_object.GetParameters()
507
- if edb_padstack_instance[0]:
508
- return EDBPadstackInstance(edb_padstack_instance[1], self._pedb).position
509
- return False
510
-
511
- def create(self, padstack_instance, name=None, layer=None, is_ref=False):
512
- """Create an edge terminal.
513
-
514
- Parameters
515
- ----------
516
- prim_id : int
517
- Primitive ID.
518
- point_on_edge : list
519
- Coordinate of the point to define the edge terminal.
520
- The point must be on the target edge but not on the two
521
- ends of the edge.
522
- terminal_name : str, optional
523
- Name of the terminal. The default is ``None``, in which case the
524
- default name is assigned.
525
- is_ref : bool, optional
526
- Whether it is a reference terminal. The default is ``False``.
527
-
528
- Returns
529
- -------
530
- Edb.Cell.Terminal.EdgeTerminal
531
- """
532
- if not name:
533
- pin_name = padstack_instance._edb_object.GetName()
534
- refdes = padstack_instance.component.refdes
535
- name = "{}_{}".format(refdes, pin_name)
536
- name = generate_unique_name(name)
537
-
538
- if not layer:
539
- layer = padstack_instance.start_layer
540
-
541
- layer_obj = self._pedb.stackup.signal_layers[layer]
542
-
543
- terminal = self._edb.cell.terminal.PadstackInstanceTerminal.Create(
544
- self._pedb.active_layout,
545
- padstack_instance.net.net_object,
546
- name,
547
- padstack_instance._edb_object,
548
- layer_obj._edb_layer,
549
- isRef=is_ref,
550
- )
551
- terminal = PadstackInstanceTerminal(self._pedb, terminal)
552
-
553
- return terminal if not terminal.is_null else False
554
-
555
-
556
- class PointTerminal(Terminal):
557
- """Manages point terminal properties."""
558
-
559
- def __init__(self, pedb, edb_object=None):
560
- super().__init__(pedb, edb_object)
561
-
562
- @pyedb_function_handler
563
- def create(self, name, net, location, layer, is_ref=False):
564
- """Create a point terminal.
565
-
566
- Parameters
567
- ----------
568
- name : str
569
- Name of the terminal.
570
- net : str
571
- Name of the net.
572
- location : list
573
- Location of the terminal.
574
- layer : str
575
- Name of the layer.
576
- is_ref : bool, optional
577
- Whether it is a reference terminal.
578
-
579
- Returns
580
- -------
581
- :class:`pyedb.dotnet.edb_core.edb_data.terminals.PointTerminal`
582
- """
583
- terminal = self._pedb.edb_api.cell.terminal.PointTerminal.Create(
584
- self._pedb.active_layout,
585
- self._pedb.nets[net].net_object,
586
- name,
587
- self._pedb.point_data(*location),
588
- self._pedb.stackup[layer]._edb_layer,
589
- is_ref,
590
- )
591
- terminal = PointTerminal(self._pedb, terminal)
592
- return terminal if not terminal.is_null else False
593
-
594
- @property
595
- def location(self):
596
- """Location of the terminal."""
597
- layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
598
- _, point_data, _ = self._edb_object.GetParameters(None, layer)
599
- return [point_data.X.ToDouble(), point_data.Y.ToDouble()]
600
-
601
- @location.setter
602
- def location(self, value):
603
- layer = self.layer
604
- self._edb_object.SetParameters(self._pedb.point_data(*value), layer)
605
-
606
- @property
607
- def layer(self):
608
- """Get layer of the terminal."""
609
- point_data = self._pedb.point_data(0, 0)
610
- layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
611
- if self._edb_object.GetParameters(point_data, layer):
612
- return layer
613
-
614
- @layer.setter
615
- def layer(self, value):
616
- layer = self._pedb.stackup.layers[value]._edb_layer
617
- point_data = self._pedb.point_data(*self.location)
618
- self._edb_object.SetParameters(point_data, layer)
619
-
620
-
621
- class PinGroupTerminal(Terminal):
622
- """Manages pin group terminal properties."""
623
-
624
- def __init__(self, pedb, edb_object=None):
625
- super().__init__(pedb, edb_object)
626
-
627
- @pyedb_function_handler
628
- def create(self, name, net_name, pin_group_name, is_ref=False):
629
- """Create a pin group terminal.
630
-
631
- Parameters
632
- ----------
633
- name : str
634
- Name of the terminal.
635
- net_name : str
636
- Name of the net.
637
- pin_group_name : str,
638
- Name of the pin group.
639
- is_ref : bool, optional
640
- Whether it is a reference terminal. The default is ``False``.
641
-
642
- Returns
643
- -------
644
- :class:`pyedb.dotnet.edb_core.edb_data.terminals.PinGroupTerminal`
645
- """
646
- net_obj = self._pedb.edb_api.cell.net.find_by_name(self._pedb.active_layout, net_name)
647
- term = self._pedb.edb_api.cell.terminal.PinGroupTerminal.Create(
648
- self._pedb.active_layout,
649
- net_obj.api_object,
650
- name,
651
- self._pedb.siwave.pin_groups[pin_group_name]._edb_object,
652
- is_ref,
653
- )
654
- term = PinGroupTerminal(self._pedb, term)
655
- return term if not term.is_null else False