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.
- pyedb/__init__.py +1 -1
- pyedb/configuration/cfg_common.py +12 -15
- pyedb/configuration/cfg_data.py +2 -2
- pyedb/configuration/cfg_modeler.py +163 -234
- pyedb/configuration/cfg_ports_sources.py +6 -8
- pyedb/configuration/cfg_stackup.py +62 -249
- pyedb/configuration/configuration.py +272 -170
- pyedb/dotnet/database/cell/hierarchy/model.py +1 -1
- pyedb/dotnet/database/cell/layout.py +1 -1
- pyedb/dotnet/database/cell/layout_obj.py +3 -3
- pyedb/dotnet/database/cell/primitive/path.py +1 -1
- pyedb/dotnet/database/cell/primitive/primitive.py +8 -8
- pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +1 -1
- pyedb/dotnet/database/cell/terminal/point_terminal.py +1 -1
- pyedb/dotnet/database/cell/terminal/terminal.py +24 -26
- pyedb/dotnet/database/components.py +33 -27
- pyedb/dotnet/database/definition/component_def.py +3 -3
- pyedb/dotnet/database/definition/component_model.py +1 -1
- pyedb/dotnet/database/definition/package_def.py +1 -1
- pyedb/dotnet/database/dotnet/database.py +47 -38
- pyedb/dotnet/database/dotnet/primitive.py +16 -16
- pyedb/dotnet/database/edb_data/hfss_extent_info.py +6 -6
- pyedb/dotnet/database/edb_data/layer_data.py +17 -15
- pyedb/dotnet/database/edb_data/padstacks_data.py +12 -12
- pyedb/dotnet/database/edb_data/primitives_data.py +3 -3
- pyedb/dotnet/database/edb_data/sources.py +6 -6
- pyedb/dotnet/database/edb_data/variables.py +7 -3
- pyedb/dotnet/database/geometry/point_data.py +1 -1
- pyedb/dotnet/database/geometry/polygon_data.py +2 -4
- pyedb/dotnet/database/hfss.py +7 -7
- pyedb/dotnet/database/materials.py +2 -2
- pyedb/dotnet/database/modeler.py +8 -11
- pyedb/dotnet/database/nets.py +1 -1
- pyedb/dotnet/database/padstack.py +72 -1
- pyedb/dotnet/database/sim_setup_data/data/settings.py +24 -0
- pyedb/dotnet/database/sim_setup_data/io/siwave.py +26 -1
- pyedb/dotnet/database/siwave.py +19 -5
- pyedb/dotnet/database/stackup.py +80 -137
- pyedb/dotnet/database/utilities/heatsink.py +4 -4
- pyedb/dotnet/database/utilities/obj_base.py +1 -1
- pyedb/dotnet/database/utilities/simulation_setup.py +1 -1
- pyedb/dotnet/database/utilities/siwave_cpa_simulation_setup.py +894 -0
- pyedb/dotnet/database/utilities/siwave_simulation_setup.py +15 -0
- pyedb/dotnet/database/utilities/value.py +116 -0
- pyedb/dotnet/edb.py +58 -45
- pyedb/generic/design_types.py +39 -1
- pyedb/generic/grpc_warnings.py +5 -0
- pyedb/grpc/__init__.py +0 -0
- pyedb/grpc/database/components.py +155 -98
- pyedb/grpc/database/control_file.py +240 -193
- pyedb/grpc/database/definition/materials.py +23 -30
- pyedb/grpc/database/definition/package_def.py +15 -15
- pyedb/grpc/database/definition/padstack_def.py +51 -51
- pyedb/grpc/database/definitions.py +7 -5
- pyedb/grpc/database/geometry/arc_data.py +7 -5
- pyedb/grpc/database/geometry/point_3d_data.py +8 -7
- pyedb/grpc/database/geometry/polygon_data.py +3 -2
- pyedb/grpc/database/hierarchy/component.py +43 -38
- pyedb/grpc/database/hierarchy/pin_pair_model.py +15 -14
- pyedb/grpc/database/hierarchy/pingroup.py +9 -9
- pyedb/grpc/database/layers/stackup_layer.py +45 -44
- pyedb/grpc/database/layout/layout.py +9 -8
- pyedb/grpc/database/layout/voltage_regulator.py +7 -7
- pyedb/grpc/database/layout_validation.py +13 -12
- pyedb/grpc/database/modeler.py +156 -131
- pyedb/grpc/database/nets.py +42 -31
- pyedb/grpc/database/padstacks.py +270 -175
- pyedb/grpc/database/ports/ports.py +5 -6
- pyedb/grpc/database/primitive/bondwire.py +8 -7
- pyedb/grpc/database/primitive/circle.py +4 -4
- pyedb/grpc/database/primitive/padstack_instance.py +18 -18
- pyedb/grpc/database/primitive/path.py +7 -7
- pyedb/grpc/database/primitive/polygon.py +3 -3
- pyedb/grpc/database/primitive/primitive.py +13 -17
- pyedb/grpc/database/primitive/rectangle.py +13 -13
- pyedb/grpc/database/simulation_setup/hfss_general_settings.py +1 -1
- pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +10 -0
- pyedb/grpc/database/simulation_setup/siwave_cpa_simulation_setup.py +961 -0
- pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +17 -1
- pyedb/grpc/database/siwave.py +44 -24
- pyedb/grpc/database/source_excitations.py +333 -229
- pyedb/grpc/database/stackup.py +164 -147
- pyedb/grpc/database/terminal/bundle_terminal.py +17 -7
- pyedb/grpc/database/terminal/edge_terminal.py +10 -0
- pyedb/grpc/database/terminal/padstack_instance_terminal.py +15 -4
- pyedb/grpc/database/terminal/pingroup_terminal.py +11 -10
- pyedb/grpc/database/terminal/point_terminal.py +4 -3
- pyedb/grpc/database/terminal/terminal.py +9 -9
- pyedb/grpc/database/utility/value.py +109 -0
- pyedb/grpc/edb.py +129 -45
- pyedb/grpc/edb_init.py +0 -7
- pyedb/siwave_core/cpa/simulation_setup_data_model.py +132 -0
- pyedb/siwave_core/product_properties.py +198 -0
- {pyedb-0.52.0.dist-info → pyedb-0.54.0.dist-info}/METADATA +15 -13
- {pyedb-0.52.0.dist-info → pyedb-0.54.0.dist-info}/RECORD +97 -89
- {pyedb-0.52.0.dist-info → pyedb-0.54.0.dist-info}/WHEEL +1 -1
- {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
|
|
175
|
+
return sweep_data[0]
|
|
160
176
|
else:
|
|
161
177
|
self._pedb.logger.error("Failed to add frequency sweep data")
|
|
162
178
|
return False
|
pyedb/grpc/database/siwave.py
CHANGED
|
@@ -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,
|
|
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
|
|