pyedb 0.52.0__py3-none-any.whl → 0.54.0__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (97) hide show
  1. pyedb/__init__.py +1 -1
  2. pyedb/configuration/cfg_common.py +12 -15
  3. pyedb/configuration/cfg_data.py +2 -2
  4. pyedb/configuration/cfg_modeler.py +163 -234
  5. pyedb/configuration/cfg_ports_sources.py +6 -8
  6. pyedb/configuration/cfg_stackup.py +62 -249
  7. pyedb/configuration/configuration.py +272 -170
  8. pyedb/dotnet/database/cell/hierarchy/model.py +1 -1
  9. pyedb/dotnet/database/cell/layout.py +1 -1
  10. pyedb/dotnet/database/cell/layout_obj.py +3 -3
  11. pyedb/dotnet/database/cell/primitive/path.py +1 -1
  12. pyedb/dotnet/database/cell/primitive/primitive.py +8 -8
  13. pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +1 -1
  14. pyedb/dotnet/database/cell/terminal/point_terminal.py +1 -1
  15. pyedb/dotnet/database/cell/terminal/terminal.py +24 -26
  16. pyedb/dotnet/database/components.py +33 -27
  17. pyedb/dotnet/database/definition/component_def.py +3 -3
  18. pyedb/dotnet/database/definition/component_model.py +1 -1
  19. pyedb/dotnet/database/definition/package_def.py +1 -1
  20. pyedb/dotnet/database/dotnet/database.py +47 -38
  21. pyedb/dotnet/database/dotnet/primitive.py +16 -16
  22. pyedb/dotnet/database/edb_data/hfss_extent_info.py +6 -6
  23. pyedb/dotnet/database/edb_data/layer_data.py +17 -15
  24. pyedb/dotnet/database/edb_data/padstacks_data.py +12 -12
  25. pyedb/dotnet/database/edb_data/primitives_data.py +3 -3
  26. pyedb/dotnet/database/edb_data/sources.py +6 -6
  27. pyedb/dotnet/database/edb_data/variables.py +7 -3
  28. pyedb/dotnet/database/geometry/point_data.py +1 -1
  29. pyedb/dotnet/database/geometry/polygon_data.py +2 -4
  30. pyedb/dotnet/database/hfss.py +7 -7
  31. pyedb/dotnet/database/materials.py +2 -2
  32. pyedb/dotnet/database/modeler.py +8 -11
  33. pyedb/dotnet/database/nets.py +1 -1
  34. pyedb/dotnet/database/padstack.py +72 -1
  35. pyedb/dotnet/database/sim_setup_data/data/settings.py +24 -0
  36. pyedb/dotnet/database/sim_setup_data/io/siwave.py +26 -1
  37. pyedb/dotnet/database/siwave.py +19 -5
  38. pyedb/dotnet/database/stackup.py +80 -137
  39. pyedb/dotnet/database/utilities/heatsink.py +4 -4
  40. pyedb/dotnet/database/utilities/obj_base.py +1 -1
  41. pyedb/dotnet/database/utilities/simulation_setup.py +1 -1
  42. pyedb/dotnet/database/utilities/siwave_cpa_simulation_setup.py +894 -0
  43. pyedb/dotnet/database/utilities/siwave_simulation_setup.py +15 -0
  44. pyedb/dotnet/database/utilities/value.py +116 -0
  45. pyedb/dotnet/edb.py +58 -45
  46. pyedb/generic/design_types.py +39 -1
  47. pyedb/generic/grpc_warnings.py +5 -0
  48. pyedb/grpc/__init__.py +0 -0
  49. pyedb/grpc/database/components.py +155 -98
  50. pyedb/grpc/database/control_file.py +240 -193
  51. pyedb/grpc/database/definition/materials.py +23 -30
  52. pyedb/grpc/database/definition/package_def.py +15 -15
  53. pyedb/grpc/database/definition/padstack_def.py +51 -51
  54. pyedb/grpc/database/definitions.py +7 -5
  55. pyedb/grpc/database/geometry/arc_data.py +7 -5
  56. pyedb/grpc/database/geometry/point_3d_data.py +8 -7
  57. pyedb/grpc/database/geometry/polygon_data.py +3 -2
  58. pyedb/grpc/database/hierarchy/component.py +43 -38
  59. pyedb/grpc/database/hierarchy/pin_pair_model.py +15 -14
  60. pyedb/grpc/database/hierarchy/pingroup.py +9 -9
  61. pyedb/grpc/database/layers/stackup_layer.py +45 -44
  62. pyedb/grpc/database/layout/layout.py +9 -8
  63. pyedb/grpc/database/layout/voltage_regulator.py +7 -7
  64. pyedb/grpc/database/layout_validation.py +13 -12
  65. pyedb/grpc/database/modeler.py +156 -131
  66. pyedb/grpc/database/nets.py +42 -31
  67. pyedb/grpc/database/padstacks.py +270 -175
  68. pyedb/grpc/database/ports/ports.py +5 -6
  69. pyedb/grpc/database/primitive/bondwire.py +8 -7
  70. pyedb/grpc/database/primitive/circle.py +4 -4
  71. pyedb/grpc/database/primitive/padstack_instance.py +18 -18
  72. pyedb/grpc/database/primitive/path.py +7 -7
  73. pyedb/grpc/database/primitive/polygon.py +3 -3
  74. pyedb/grpc/database/primitive/primitive.py +13 -17
  75. pyedb/grpc/database/primitive/rectangle.py +13 -13
  76. pyedb/grpc/database/simulation_setup/hfss_general_settings.py +1 -1
  77. pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +10 -0
  78. pyedb/grpc/database/simulation_setup/siwave_cpa_simulation_setup.py +961 -0
  79. pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +17 -1
  80. pyedb/grpc/database/siwave.py +44 -24
  81. pyedb/grpc/database/source_excitations.py +333 -229
  82. pyedb/grpc/database/stackup.py +164 -147
  83. pyedb/grpc/database/terminal/bundle_terminal.py +17 -7
  84. pyedb/grpc/database/terminal/edge_terminal.py +10 -0
  85. pyedb/grpc/database/terminal/padstack_instance_terminal.py +15 -4
  86. pyedb/grpc/database/terminal/pingroup_terminal.py +11 -10
  87. pyedb/grpc/database/terminal/point_terminal.py +4 -3
  88. pyedb/grpc/database/terminal/terminal.py +9 -9
  89. pyedb/grpc/database/utility/value.py +109 -0
  90. pyedb/grpc/edb.py +129 -45
  91. pyedb/grpc/edb_init.py +0 -7
  92. pyedb/siwave_core/cpa/simulation_setup_data_model.py +132 -0
  93. pyedb/siwave_core/product_properties.py +198 -0
  94. {pyedb-0.52.0.dist-info → pyedb-0.54.0.dist-info}/METADATA +15 -13
  95. {pyedb-0.52.0.dist-info → pyedb-0.54.0.dist-info}/RECORD +97 -89
  96. {pyedb-0.52.0.dist-info → pyedb-0.54.0.dist-info}/WHEEL +1 -1
  97. {pyedb-0.52.0.dist-info → pyedb-0.54.0.dist-info/licenses}/LICENSE +0 -0
@@ -37,6 +37,21 @@ class SiwaveSimulationSetup(GrpcSIWaveSimulationSetup):
37
37
  super().__init__(edb_object.msg)
38
38
  self._pedb = pedb
39
39
 
40
+ @property
41
+ def advanced_settings(self):
42
+ """Setup advanced settings."""
43
+ return self.settings.advanced
44
+
45
+ @property
46
+ def dc_settings(self):
47
+ """Setup dc settings."""
48
+ return self.settings.dc
49
+
50
+ @property
51
+ def dc_advanced_settings(self):
52
+ """Setup dc settings."""
53
+ return self.settings.dc_advanced
54
+
40
55
  @property
41
56
  def type(self) -> str:
42
57
  """Simulation setup type.
@@ -127,6 +142,7 @@ class SiwaveSimulationSetup(GrpcSIWaveSimulationSetup):
127
142
  for sweep in self.sweep_data:
128
143
  sweep_data.append(sweep)
129
144
  self.sweep_data = sweep_data
145
+ return sweep_data[0]
130
146
  else:
131
147
  start_freq = self._pedb.number_with_units(start_freq, "Hz")
132
148
  stop_freq = self._pedb.number_with_units(stop_freq, "Hz")
@@ -156,7 +172,7 @@ class SiwaveSimulationSetup(GrpcSIWaveSimulationSetup):
156
172
  sweep_data.append(sweep)
157
173
  self.sweep_data = sweep_data
158
174
  if len(self.sweep_data) == init_sweep_count + 1:
159
- return True
175
+ return sweep_data[0]
160
176
  else:
161
177
  self._pedb.logger.error("Failed to add frequency sweep data")
162
178
  return False
@@ -25,6 +25,7 @@ This module contains these classes: ``CircuitPort``, ``CurrentSource``, ``EdbSiw
25
25
  ``PinGroup``, ``ResistorSource``, ``Source``, ``SourceType``, and ``VoltageSource``.
26
26
  """
27
27
  import os
28
+ from typing import Any, Dict, Optional, Union
28
29
  import warnings
29
30
 
30
31
  from ansys.edb.core.database import ProductIdType as GrpcProductIdType
@@ -36,6 +37,9 @@ from ansys.edb.core.simulation_setup.simulation_setup import (
36
37
  )
37
38
  from ansys.edb.core.simulation_setup.simulation_setup import SweepData as GrpcSweepData
38
39
 
40
+ from pyedb.grpc.database.simulation_setup.siwave_cpa_simulation_setup import (
41
+ SIWaveCPASimulationSetup,
42
+ )
39
43
  from pyedb.misc.siw_feature_config.xtalk_scan.scan_config import SiwaveScanConfig
40
44
 
41
45
 
@@ -54,41 +58,41 @@ class Siwave(object):
54
58
  >>> edb_siwave = edbapp.siwave
55
59
  """
56
60
 
57
- def __init__(self, p_edb):
61
+ def __init__(self, p_edb) -> None:
58
62
  self._pedb = p_edb
59
63
 
60
64
  @property
61
- def _edb(self):
65
+ def _edb(self) -> Any:
62
66
  """EDB object."""
63
67
  return self._pedb
64
68
 
65
69
  @property
66
- def _logger(self):
70
+ def _logger(self) -> Any:
67
71
  """Logger object."""
68
72
  return self._pedb.logger
69
73
 
70
74
  @property
71
- def _active_layout(self):
75
+ def _active_layout(self) -> Any:
72
76
  """Active layout."""
73
77
  return self._pedb.active_layout
74
78
 
75
79
  @property
76
- def _layout(self):
80
+ def _layout(self) -> Any:
77
81
  """Active layout."""
78
82
  return self._pedb.layout
79
83
 
80
84
  @property
81
- def _cell(self):
85
+ def _cell(self) -> Any:
82
86
  """Active cell."""
83
87
  return self._pedb.active_cell
84
88
 
85
89
  @property
86
- def _db(self):
90
+ def _db(self) -> Any:
87
91
  """Active database."""
88
92
  return self._pedb.active_db
89
93
 
90
94
  @property
91
- def excitations(self):
95
+ def excitations(self) -> Dict[str, Any]:
92
96
  """Excitation sources in the layout.
93
97
 
94
98
  Examples
@@ -100,7 +104,7 @@ class Siwave(object):
100
104
  return self._pedb.excitations
101
105
 
102
106
  @property
103
- def sources(self):
107
+ def sources(self) -> Dict[str, Any]:
104
108
  """All sources in the layout.
105
109
 
106
110
  Examples
@@ -112,7 +116,7 @@ class Siwave(object):
112
116
  return self._pedb.sources
113
117
 
114
118
  @property
115
- def probes(self):
119
+ def probes(self) -> Dict[str, Any]:
116
120
  """All probes in the layout.
117
121
 
118
122
  Examples
@@ -124,7 +128,7 @@ class Siwave(object):
124
128
  return self._pedb.probes
125
129
 
126
130
  @property
127
- def pin_groups(self):
131
+ def pin_groups(self) -> Dict[str, Any]:
128
132
  """All layout pin groups.
129
133
 
130
134
  Returns
@@ -523,8 +527,13 @@ class Siwave(object):
523
527
  return self._pedb.source_excitation.create_dc_terminal(component_name, net_name, source_name)
524
528
 
525
529
  def create_exec_file(
526
- self, add_dc=False, add_ac=False, add_syz=False, export_touchstone=False, touchstone_file_path=""
527
- ):
530
+ self,
531
+ add_dc: bool = False,
532
+ add_ac: bool = False,
533
+ add_syz: bool = False,
534
+ export_touchstone: bool = False,
535
+ touchstone_file_path: str = "",
536
+ ) -> bool:
528
537
  """Create an executable file.
529
538
 
530
539
  Parameters
@@ -582,15 +591,26 @@ class Siwave(object):
582
591
 
583
592
  return True if os.path.exists(file_name) else False
584
593
 
594
+ def add_cpa_analysis(self, name=None, siwave_cpa_setup_class=None):
595
+ if not name:
596
+ from pyedb.generic.general_methods import generate_unique_name
597
+
598
+ if not siwave_cpa_setup_class:
599
+ name = generate_unique_name("cpa_setup")
600
+ else:
601
+ name = siwave_cpa_setup_class.name
602
+ cpa_setup = SIWaveCPASimulationSetup(self._pedb, name=name, siwave_cpa_setup_class=siwave_cpa_setup_class)
603
+ return cpa_setup
604
+
585
605
  def add_siwave_syz_analysis(
586
606
  self,
587
- accuracy_level=1,
588
- distribution="linear",
589
- start_freq=1,
590
- stop_freq=1e9,
591
- step_freq=1e6,
592
- discrete_sweep=False,
593
- ):
607
+ accuracy_level: int = 1,
608
+ distribution: str = "linear",
609
+ start_freq: Union[str, float] = 1,
610
+ stop_freq: Union[str, float] = 1e9,
611
+ step_freq: Union[str, float, int] = 1e6,
612
+ discrete_sweep: bool = False,
613
+ ) -> Any:
594
614
  """Add a SIwave AC analysis to EDB.
595
615
 
596
616
  Parameters
@@ -670,7 +690,7 @@ class Siwave(object):
670
690
  self.create_exec_file(add_ac=True)
671
691
  return setup
672
692
 
673
- def add_siwave_dc_analysis(self, name=None):
693
+ def add_siwave_dc_analysis(self, name: Optional[str] = None) -> Any:
674
694
  """Add a Siwave DC analysis in EDB.
675
695
 
676
696
  .. note::
@@ -1001,7 +1021,7 @@ class Siwave(object):
1001
1021
  negative_layer,
1002
1022
  )
1003
1023
 
1004
- def create_impedance_crosstalk_scan(self, scan_type="impedance"):
1024
+ def create_impedance_crosstalk_scan(self, scan_type: str = "impedance") -> "SiwaveScanConfig":
1005
1025
  """Create Siwave crosstalk scan object.
1006
1026
 
1007
1027
  Parameters
@@ -1021,7 +1041,7 @@ class Siwave(object):
1021
1041
  return SiwaveScanConfig(self._pedb, scan_type)
1022
1042
 
1023
1043
  @property
1024
- def icepak_use_minimal_comp_defaults(self):
1044
+ def icepak_use_minimal_comp_defaults(self) -> bool:
1025
1045
  """Icepak default setting.
1026
1046
 
1027
1047
  If ``True``, only resistors are active in Icepak simulation and power dissipation
@@ -1035,7 +1055,7 @@ class Siwave(object):
1035
1055
  self._pedb.active_cell.set_product_property(GrpcProductIdType.SIWAVE, 422, value)
1036
1056
 
1037
1057
  @property
1038
- def icepak_component_file(self):
1058
+ def icepak_component_file(self) -> str:
1039
1059
  """Icepak component file path."""
1040
1060
  return self._pedb.active_cell.get_product_property(GrpcProductIdType.SIWAVE, 420).value
1041
1061