pyedb 0.38.0__py3-none-any.whl → 0.39.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.
- pyedb/__init__.py +1 -1
- pyedb/common/nets.py +53 -139
- pyedb/configuration/cfg_components.py +1 -1
- pyedb/configuration/cfg_general.py +4 -2
- pyedb/configuration/cfg_modeler.py +1 -1
- pyedb/configuration/cfg_package_definition.py +1 -1
- pyedb/configuration/cfg_padstacks.py +1 -1
- pyedb/configuration/cfg_ports_sources.py +56 -23
- pyedb/configuration/configuration.py +18 -1
- pyedb/dotnet/{application → database}/Variables.py +21 -21
- pyedb/dotnet/{edb_core → database}/cell/connectable.py +5 -5
- pyedb/dotnet/{edb_core → database}/cell/hierarchy/component.py +11 -11
- pyedb/dotnet/{edb_core → database}/cell/hierarchy/hierarchy_obj.py +1 -1
- pyedb/dotnet/{edb_core → database}/cell/hierarchy/model.py +1 -1
- pyedb/dotnet/{edb_core → database}/cell/layout.py +17 -17
- pyedb/dotnet/{edb_core → database}/cell/layout_obj.py +3 -3
- pyedb/dotnet/{edb_core → database}/cell/primitive/bondwire.py +1 -1
- pyedb/dotnet/{edb_core → database}/cell/primitive/path.py +4 -4
- pyedb/dotnet/{edb_core → database}/cell/primitive/primitive.py +14 -14
- pyedb/dotnet/{edb_core → database}/cell/terminal/bundle_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/edge_terminal.py +4 -4
- pyedb/dotnet/{edb_core → database}/cell/terminal/padstack_instance_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/pingroup_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/point_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/terminal.py +11 -11
- pyedb/dotnet/{edb_core → database}/cell/voltage_regulator.py +2 -2
- pyedb/dotnet/{edb_core → database}/components.py +101 -124
- pyedb/dotnet/{edb_core → database}/definition/component_def.py +5 -5
- pyedb/dotnet/{edb_core → database}/definition/component_model.py +1 -1
- pyedb/dotnet/{edb_core → database}/definition/definition_obj.py +1 -1
- pyedb/dotnet/{edb_core → database}/definition/definitions.py +2 -2
- pyedb/dotnet/{edb_core → database}/definition/package_def.py +4 -4
- pyedb/dotnet/{edb_core → database}/dotnet/database.py +8 -8
- pyedb/dotnet/{edb_core → database}/dotnet/primitive.py +9 -9
- pyedb/dotnet/{edb_core → database}/edb_data/control_file.py +12 -12
- pyedb/dotnet/{edb_core → database}/edb_data/hfss_extent_info.py +7 -7
- pyedb/dotnet/{edb_core → database}/edb_data/nets_data.py +10 -13
- pyedb/dotnet/{edb_core → database}/edb_data/padstacks_data.py +16 -16
- pyedb/dotnet/{edb_core → database}/edb_data/ports.py +4 -4
- pyedb/dotnet/{edb_core → database}/edb_data/primitives_data.py +5 -5
- pyedb/dotnet/{edb_core → database}/edb_data/raptor_x_simulation_setup_data.py +4 -4
- pyedb/dotnet/{edb_core → database}/edb_data/simulation_configuration.py +10 -10
- pyedb/dotnet/{edb_core → database}/edb_data/sources.py +4 -4
- pyedb/dotnet/{edb_core → database}/edb_data/variables.py +1 -1
- pyedb/dotnet/{edb_core → database}/geometry/polygon_data.py +4 -4
- pyedb/dotnet/{edb_core → database}/hfss.py +8 -8
- pyedb/dotnet/{edb_core → database}/layout_obj_instance.py +1 -1
- pyedb/dotnet/{edb_core → database}/layout_validation.py +2 -2
- pyedb/dotnet/{edb_core → database}/materials.py +23 -8
- pyedb/dotnet/{edb_core → database}/modeler.py +27 -27
- pyedb/dotnet/{edb_core → database}/net_class.py +8 -8
- pyedb/dotnet/{edb_core → database}/nets.py +12 -12
- pyedb/dotnet/{edb_core → database}/padstack.py +15 -15
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/mesh_operation.py +1 -1
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/settings.py +3 -3
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/sim_setup_info.py +2 -2
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/simulation_settings.py +1 -1
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/siw_dc_ir_settings.py +1 -1
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/sweep_data.py +1 -1
- pyedb/dotnet/{edb_core → database}/siwave.py +10 -10
- pyedb/dotnet/{edb_core → database}/stackup.py +12 -12
- pyedb/dotnet/{edb_core → database}/utilities/hfss_simulation_setup.py +15 -15
- pyedb/dotnet/{edb_core → database}/utilities/obj_base.py +1 -1
- pyedb/dotnet/{edb_core → database}/utilities/simulation_setup.py +3 -3
- pyedb/dotnet/{edb_core → database}/utilities/siwave_simulation_setup.py +6 -6
- pyedb/dotnet/edb.py +117 -112
- pyedb/generic/design_types.py +26 -19
- pyedb/generic/general_methods.py +1 -1
- pyedb/generic/plot.py +0 -2
- pyedb/grpc/database/__init__.py +1 -0
- pyedb/grpc/database/components.py +2354 -0
- pyedb/grpc/database/control_file.py +1277 -0
- pyedb/grpc/database/definition/component_def.py +218 -0
- pyedb/grpc/database/definition/component_model.py +39 -0
- pyedb/grpc/database/definition/component_pin.py +32 -0
- pyedb/grpc/database/definition/materials.py +1207 -0
- pyedb/grpc/database/definition/n_port_component_model.py +34 -0
- pyedb/grpc/database/definition/package_def.py +227 -0
- pyedb/grpc/database/definition/padstack_def.py +842 -0
- pyedb/grpc/database/definitions.py +70 -0
- pyedb/grpc/database/general.py +43 -0
- pyedb/grpc/database/geometry/__init__.py +0 -0
- pyedb/grpc/database/geometry/arc_data.py +93 -0
- pyedb/grpc/database/geometry/point_3d_data.py +79 -0
- pyedb/grpc/database/geometry/point_data.py +30 -0
- pyedb/grpc/database/geometry/polygon_data.py +133 -0
- pyedb/grpc/database/hfss.py +1279 -0
- pyedb/grpc/database/hierarchy/__init__.py +0 -0
- pyedb/grpc/database/hierarchy/component.py +1301 -0
- pyedb/grpc/database/hierarchy/model.py +31 -0
- pyedb/grpc/database/hierarchy/netlist_model.py +30 -0
- pyedb/grpc/database/hierarchy/pin_pair_model.py +128 -0
- pyedb/grpc/database/hierarchy/pingroup.py +245 -0
- pyedb/grpc/database/hierarchy/s_parameter_model.py +33 -0
- pyedb/grpc/database/hierarchy/spice_model.py +48 -0
- pyedb/grpc/database/layers/__init__.py +0 -0
- pyedb/grpc/database/layers/layer.py +57 -0
- pyedb/grpc/database/layers/stackup_layer.py +410 -0
- pyedb/grpc/database/layout/__init__.py +0 -0
- pyedb/grpc/database/layout/cell.py +30 -0
- pyedb/grpc/database/layout/layout.py +196 -0
- pyedb/grpc/database/layout/voltage_regulator.py +149 -0
- pyedb/grpc/database/layout_validation.py +319 -0
- pyedb/grpc/database/modeler.py +1468 -0
- pyedb/grpc/database/net/__init__.py +0 -0
- pyedb/grpc/database/net/differential_pair.py +138 -0
- pyedb/grpc/database/net/extended_net.py +340 -0
- pyedb/grpc/database/net/net.py +198 -0
- pyedb/grpc/database/net/net_class.py +93 -0
- pyedb/grpc/database/nets.py +633 -0
- pyedb/grpc/database/padstacks.py +1500 -0
- pyedb/grpc/database/ports/__init__.py +0 -0
- pyedb/grpc/database/ports/ports.py +396 -0
- pyedb/grpc/database/primitive/__init__.py +3 -0
- pyedb/grpc/database/primitive/bondwire.py +181 -0
- pyedb/grpc/database/primitive/circle.py +75 -0
- pyedb/grpc/database/primitive/padstack_instance.py +1116 -0
- pyedb/grpc/database/primitive/path.py +346 -0
- pyedb/grpc/database/primitive/polygon.py +276 -0
- pyedb/grpc/database/primitive/primitive.py +739 -0
- pyedb/grpc/database/primitive/rectangle.py +146 -0
- pyedb/grpc/database/simulation_setup/__init__.py +0 -0
- pyedb/grpc/database/simulation_setup/adaptive_frequency.py +33 -0
- pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py +32 -0
- pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +59 -0
- pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py +35 -0
- pyedb/grpc/database/simulation_setup/hfss_general_settings.py +61 -0
- pyedb/grpc/database/simulation_setup/hfss_settings_options.py +78 -0
- pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +118 -0
- pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +355 -0
- pyedb/grpc/database/simulation_setup/hfss_solver_settings.py +34 -0
- pyedb/grpc/database/simulation_setup/mesh_operation.py +34 -0
- pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py +34 -0
- pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py +33 -0
- pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +64 -0
- pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +125 -0
- pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py +34 -0
- pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +119 -0
- pyedb/grpc/database/simulation_setup/sweep_data.py +32 -0
- pyedb/grpc/database/siwave.py +1023 -0
- pyedb/grpc/database/source_excitations.py +2572 -0
- pyedb/grpc/database/stackup.py +2574 -0
- pyedb/grpc/database/terminal/__init__.py +0 -0
- pyedb/grpc/database/terminal/bundle_terminal.py +218 -0
- pyedb/grpc/database/terminal/edge_terminal.py +51 -0
- pyedb/grpc/database/terminal/padstack_instance_terminal.py +171 -0
- pyedb/grpc/database/terminal/pingroup_terminal.py +162 -0
- pyedb/grpc/database/terminal/point_terminal.py +99 -0
- pyedb/grpc/database/terminal/terminal.py +470 -0
- pyedb/grpc/database/utility/__init__.py +3 -0
- pyedb/grpc/database/utility/constants.py +25 -0
- pyedb/grpc/database/utility/heat_sink.py +124 -0
- pyedb/grpc/database/utility/hfss_extent_info.py +448 -0
- pyedb/grpc/database/utility/layout_statistics.py +277 -0
- pyedb/grpc/database/utility/rlc.py +80 -0
- pyedb/grpc/database/utility/simulation_configuration.py +3305 -0
- pyedb/grpc/database/utility/sources.py +388 -0
- pyedb/grpc/database/utility/sweep_data_distribution.py +83 -0
- pyedb/grpc/database/utility/xml_control_file.py +1277 -0
- pyedb/grpc/edb.py +4152 -0
- pyedb/grpc/edb_init.py +481 -0
- pyedb/grpc/rpc_session.py +177 -0
- pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +3 -2
- pyedb/ipc2581/ecad/cad_data/feature.py +4 -3
- pyedb/ipc2581/ecad/cad_data/layer_feature.py +32 -20
- pyedb/ipc2581/ecad/cad_data/outline.py +3 -2
- pyedb/ipc2581/ecad/cad_data/package.py +4 -3
- pyedb/ipc2581/ecad/cad_data/path.py +82 -31
- pyedb/ipc2581/ecad/cad_data/polygon.py +122 -60
- pyedb/ipc2581/ecad/cad_data/profile.py +13 -12
- pyedb/ipc2581/ecad/cad_data/step.py +53 -21
- pyedb/ipc2581/ipc2581.py +47 -49
- pyedb/modeler/geometry_operators.py +1 -1
- {pyedb-0.38.0.dist-info → pyedb-0.39.1.dist-info}/METADATA +5 -2
- pyedb-0.39.1.dist-info/RECORD +288 -0
- pyedb-0.38.0.dist-info/RECORD +0 -195
- /pyedb/dotnet/{edb_core → database}/__init__.py +0 -0
- /pyedb/dotnet/{application → database/cell}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/cell → database/cell/hierarchy}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/netlist_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/pin_pair_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/s_parameter_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/spice_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/primitive/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/cell/hierarchy → database/cell/terminal}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/cell/terminal → database/definition}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/definition → database/dotnet}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/dotnet → database/edb_data}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/design_options.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/edbvalue.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/layer_data.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/utilities.py +0 -0
- /pyedb/dotnet/{edb_core → database}/general.py +0 -0
- /pyedb/dotnet/{edb_core/edb_data → database/geometry}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/geometry/point_data.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/data/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/data/adaptive_frequency_data.py +0 -0
- /pyedb/dotnet/{edb_core/geometry → database/sim_setup_data/io}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/io/siwave.py +0 -0
- /pyedb/dotnet/{edb_core → database}/utilities/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/utilities/heatsink.py +0 -0
- /pyedb/{dotnet/edb_core/sim_setup_data/io → grpc/database/definition}/__init__.py +0 -0
- {pyedb-0.38.0.dist-info → pyedb-0.39.1.dist-info}/LICENSE +0 -0
- {pyedb-0.38.0.dist-info → pyedb-0.39.1.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
# Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
#
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
# furnished to do so, subject to the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
# copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
# SOFTWARE.
|
|
22
|
+
|
|
23
|
+
import re
|
|
24
|
+
|
|
25
|
+
from ansys.edb.core.terminal.terminals import BoundaryType as GrpcBoundaryType
|
|
26
|
+
from ansys.edb.core.terminal.terminals import EdgeType as GrpcEdgeType
|
|
27
|
+
from ansys.edb.core.terminal.terminals import Terminal as GrpcTerminal
|
|
28
|
+
from ansys.edb.core.terminal.terminals import TerminalType as GrpcTerminalType
|
|
29
|
+
from ansys.edb.core.utility.value import Value as GrpcValue
|
|
30
|
+
|
|
31
|
+
from pyedb.dotnet.database.edb_data.padstacks_data import EDBPadstackInstance
|
|
32
|
+
from pyedb.dotnet.database.edb_data.primitives_data import cast
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Terminal(GrpcTerminal):
|
|
36
|
+
def __init__(self, pedb, edb_object):
|
|
37
|
+
super().__init__(edb_object.msg)
|
|
38
|
+
self._pedb = pedb
|
|
39
|
+
self._reference_object = None
|
|
40
|
+
self.edb_object = edb_object
|
|
41
|
+
|
|
42
|
+
self._boundary_type_mapping = {
|
|
43
|
+
"port": GrpcBoundaryType.PORT,
|
|
44
|
+
"pec": GrpcBoundaryType.PEC,
|
|
45
|
+
"rlc": GrpcBoundaryType.RLC,
|
|
46
|
+
"current_source": GrpcBoundaryType.CURRENT_SOURCE,
|
|
47
|
+
"voltage_source": GrpcBoundaryType.VOLTAGE_SOURCE,
|
|
48
|
+
"nexxim_ground": GrpcBoundaryType.NEXXIM_GROUND,
|
|
49
|
+
"nxxim_port": GrpcBoundaryType.NEXXIM_PORT,
|
|
50
|
+
"dc_terminal": GrpcBoundaryType.DC_TERMINAL,
|
|
51
|
+
"voltage_probe": GrpcBoundaryType.VOLTAGE_PROBE,
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
self._terminal_type_mapping = {
|
|
55
|
+
"edge": GrpcTerminalType.EDGE,
|
|
56
|
+
"point": GrpcTerminalType.POINT,
|
|
57
|
+
"terminal_instance": GrpcTerminalType.TERM_INST,
|
|
58
|
+
"padstack_instance": GrpcTerminalType.PADSTACK_INST,
|
|
59
|
+
"bundle": GrpcTerminalType.BUNDLE,
|
|
60
|
+
"pin_group": GrpcTerminalType.PIN_GROUP,
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def _hfss_port_property(self):
|
|
65
|
+
"""HFSS port property."""
|
|
66
|
+
hfss_prop = re.search(r"HFSS\(.*?\)", self._edb_properties)
|
|
67
|
+
p = {}
|
|
68
|
+
if hfss_prop:
|
|
69
|
+
hfss_type = re.search(r"'HFSS Type'='([^']+)'", hfss_prop.group())
|
|
70
|
+
orientation = re.search(r"'Orientation'='([^']+)'", hfss_prop.group())
|
|
71
|
+
horizontal_ef = re.search(r"'Horizontal Extent Factor'='([^']+)'", hfss_prop.group())
|
|
72
|
+
vertical_ef = re.search(r"'Vertical Extent Factor'='([^']+)'", hfss_prop.group())
|
|
73
|
+
radial_ef = re.search(r"'Radial Extent Factor'='([^']+)'", hfss_prop.group())
|
|
74
|
+
pec_w = re.search(r"'PEC Launch Width'='([^']+)'", hfss_prop.group())
|
|
75
|
+
|
|
76
|
+
p["HFSS Type"] = hfss_type.group(1) if hfss_type else ""
|
|
77
|
+
p["Orientation"] = orientation.group(1) if orientation else ""
|
|
78
|
+
p["Horizontal Extent Factor"] = float(horizontal_ef.group(1)) if horizontal_ef else ""
|
|
79
|
+
p["Vertical Extent Factor"] = float(vertical_ef.group(1)) if vertical_ef else ""
|
|
80
|
+
p["Radial Extent Factor"] = float(radial_ef.group(1)) if radial_ef else ""
|
|
81
|
+
p["PEC Launch Width"] = pec_w.group(1) if pec_w else ""
|
|
82
|
+
else:
|
|
83
|
+
p["HFSS Type"] = ""
|
|
84
|
+
p["Orientation"] = ""
|
|
85
|
+
p["Horizontal Extent Factor"] = ""
|
|
86
|
+
p["Vertical Extent Factor"] = ""
|
|
87
|
+
p["Radial Extent Factor"] = ""
|
|
88
|
+
p["PEC Launch Width"] = ""
|
|
89
|
+
return p
|
|
90
|
+
|
|
91
|
+
@property
|
|
92
|
+
def ref_terminal(self):
|
|
93
|
+
"""Reference terminal.
|
|
94
|
+
|
|
95
|
+
Returns
|
|
96
|
+
-------
|
|
97
|
+
:class:`PointTerminal <pyedb.grpc.database.terminal.point_terminal.PointTerminal>`
|
|
98
|
+
|
|
99
|
+
"""
|
|
100
|
+
return self.reference_terminal
|
|
101
|
+
|
|
102
|
+
@ref_terminal.setter
|
|
103
|
+
def ref_terminal(self, value):
|
|
104
|
+
self.reference_terminal = value
|
|
105
|
+
|
|
106
|
+
@_hfss_port_property.setter
|
|
107
|
+
def _hfss_port_property(self, value):
|
|
108
|
+
txt = []
|
|
109
|
+
for k, v in value.items():
|
|
110
|
+
txt.append("'{}'='{}'".format(k, v))
|
|
111
|
+
txt = ",".join(txt)
|
|
112
|
+
self._edb_properties = "HFSS({})".format(txt)
|
|
113
|
+
|
|
114
|
+
@property
|
|
115
|
+
def hfss_type(self):
|
|
116
|
+
"""HFSS port type."""
|
|
117
|
+
return self._hfss_port_property["HFSS Type"]
|
|
118
|
+
|
|
119
|
+
@hfss_type.setter
|
|
120
|
+
def hfss_type(self, value):
|
|
121
|
+
p = self._hfss_port_property
|
|
122
|
+
p["HFSS Type"] = value
|
|
123
|
+
self._hfss_port_property = p
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def layer(self):
|
|
127
|
+
"""Get layer of the terminal.
|
|
128
|
+
|
|
129
|
+
Returns
|
|
130
|
+
-------
|
|
131
|
+
str : layer name.
|
|
132
|
+
"""
|
|
133
|
+
return self.reference_layer.name
|
|
134
|
+
|
|
135
|
+
@layer.setter
|
|
136
|
+
def layer(self, value):
|
|
137
|
+
from ansys.edb.core.layer.layer import Layer
|
|
138
|
+
|
|
139
|
+
if isinstance(value, Layer):
|
|
140
|
+
self.reference_layer = value
|
|
141
|
+
if isinstance(value, str):
|
|
142
|
+
self.reference_layer = self._pedb.stackup.layers[value]
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def do_renormalize(self):
|
|
146
|
+
"""Determine whether port renormalization is enabled.
|
|
147
|
+
|
|
148
|
+
Returns
|
|
149
|
+
-------
|
|
150
|
+
bool
|
|
151
|
+
|
|
152
|
+
"""
|
|
153
|
+
return self.port_post_processing_prop.do_renormalize
|
|
154
|
+
|
|
155
|
+
@do_renormalize.setter
|
|
156
|
+
def do_renormalize(self, value):
|
|
157
|
+
self.port_post_processing_prop.do_renormalize = value
|
|
158
|
+
|
|
159
|
+
@property
|
|
160
|
+
def net_name(self):
|
|
161
|
+
"""Net name.
|
|
162
|
+
|
|
163
|
+
Returns
|
|
164
|
+
-------
|
|
165
|
+
str
|
|
166
|
+
Net name.
|
|
167
|
+
"""
|
|
168
|
+
return self.net.name
|
|
169
|
+
|
|
170
|
+
@property
|
|
171
|
+
def terminal_type(self):
|
|
172
|
+
"""Terminal Type. Accepted values for setter: `"edge"`, `"point"`, `"terminal_instance"`,
|
|
173
|
+
`"padstack_instance"`, `"bundle_terminal"`, `"pin_group"`.
|
|
174
|
+
|
|
175
|
+
Returns
|
|
176
|
+
-------
|
|
177
|
+
str
|
|
178
|
+
"""
|
|
179
|
+
return self.type.name.lower()
|
|
180
|
+
|
|
181
|
+
@terminal_type.setter
|
|
182
|
+
def terminal_type(self, value):
|
|
183
|
+
self.type = self._terminal_type_mapping[value]
|
|
184
|
+
|
|
185
|
+
@property
|
|
186
|
+
def boundary_type(self):
|
|
187
|
+
"""Boundary type.
|
|
188
|
+
|
|
189
|
+
Returns
|
|
190
|
+
-------
|
|
191
|
+
str
|
|
192
|
+
port, pec, rlc, current_source, voltage_source, nexxim_ground, nexxim_pPort, dc_terminal, voltage_probe.
|
|
193
|
+
"""
|
|
194
|
+
return super().boundary_type.name.lower()
|
|
195
|
+
|
|
196
|
+
@boundary_type.setter
|
|
197
|
+
def boundary_type(self, value):
|
|
198
|
+
super(Terminal, self.__class__).boundary_type.__set__(self, self._boundary_type_mapping[value])
|
|
199
|
+
|
|
200
|
+
@property
|
|
201
|
+
def is_port(self):
|
|
202
|
+
"""Whether it is a port.
|
|
203
|
+
|
|
204
|
+
Returns
|
|
205
|
+
-------
|
|
206
|
+
bool
|
|
207
|
+
|
|
208
|
+
"""
|
|
209
|
+
return True if self.boundary_type == "port" else False
|
|
210
|
+
|
|
211
|
+
@property
|
|
212
|
+
def is_current_source(self):
|
|
213
|
+
"""Whether it is a current source.
|
|
214
|
+
|
|
215
|
+
Returns
|
|
216
|
+
-------
|
|
217
|
+
bool
|
|
218
|
+
|
|
219
|
+
"""
|
|
220
|
+
return True if self.boundary_type == "current_source" else False
|
|
221
|
+
|
|
222
|
+
@property
|
|
223
|
+
def is_voltage_source(self):
|
|
224
|
+
"""Whether it is a voltage source.
|
|
225
|
+
|
|
226
|
+
Returns
|
|
227
|
+
-------
|
|
228
|
+
bool
|
|
229
|
+
|
|
230
|
+
"""
|
|
231
|
+
return True if self.boundary_type == "voltage_source" else False
|
|
232
|
+
|
|
233
|
+
@property
|
|
234
|
+
def impedance(self):
|
|
235
|
+
"""Impedance of the port.
|
|
236
|
+
|
|
237
|
+
Returns
|
|
238
|
+
-------
|
|
239
|
+
float : impedance value.
|
|
240
|
+
|
|
241
|
+
"""
|
|
242
|
+
return self.impedance.value
|
|
243
|
+
|
|
244
|
+
@impedance.setter
|
|
245
|
+
def impedance(self, value):
|
|
246
|
+
self.impedance = GrpcValue(value)
|
|
247
|
+
|
|
248
|
+
@property
|
|
249
|
+
def reference_object(self): # pragma : no cover
|
|
250
|
+
"""This returns the object assigned as reference. It can be a primitive or a padstack instance.
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
Returns
|
|
254
|
+
-------
|
|
255
|
+
:class:`PadstackInstance <pyedb.grpc.database.primitive.padstack_instance.PadstackInstance>` or
|
|
256
|
+
:class:`Primitive <pyedb.grpc.database.primitive.primitives.Primitive>`
|
|
257
|
+
"""
|
|
258
|
+
if not self._reference_object:
|
|
259
|
+
if self.terminal_type == "edge":
|
|
260
|
+
edges = self.edges
|
|
261
|
+
edgeType = edges[0].type
|
|
262
|
+
if edgeType == GrpcEdgeType.PADSTACK:
|
|
263
|
+
self._reference_object = self.get_pad_edge_terminal_reference_pin()
|
|
264
|
+
else:
|
|
265
|
+
self._reference_object = self.get_edge_terminal_reference_primitive()
|
|
266
|
+
elif self.terminal_type == "pin_group":
|
|
267
|
+
self._reference_object = self.get_pin_group_terminal_reference_pin()
|
|
268
|
+
elif self.terminal_type == "point":
|
|
269
|
+
self._reference_object = self.get_point_terminal_reference_primitive()
|
|
270
|
+
elif self.terminal_type == "padstack_instance":
|
|
271
|
+
self._reference_object = self.get_padstack_terminal_reference_pin()
|
|
272
|
+
else:
|
|
273
|
+
self._pedb.logger.warning("Invalid Terminal Type={}")
|
|
274
|
+
return False
|
|
275
|
+
|
|
276
|
+
return self._reference_object
|
|
277
|
+
|
|
278
|
+
@property
|
|
279
|
+
def reference_net_name(self):
|
|
280
|
+
"""Net name to which reference_object belongs.
|
|
281
|
+
|
|
282
|
+
Returns
|
|
283
|
+
-------
|
|
284
|
+
str : net name.
|
|
285
|
+
|
|
286
|
+
"""
|
|
287
|
+
if self.reference_object:
|
|
288
|
+
return self.reference_object.net_name
|
|
289
|
+
|
|
290
|
+
return ""
|
|
291
|
+
|
|
292
|
+
def get_padstack_terminal_reference_pin(self, gnd_net_name_preference=None): # pragma : no cover
|
|
293
|
+
"""Get a list of pad stacks instances and serves Coax wave ports,
|
|
294
|
+
pingroup terminals, PadEdge terminals.
|
|
295
|
+
|
|
296
|
+
Parameters
|
|
297
|
+
----------
|
|
298
|
+
gnd_net_name_preference : str, optional
|
|
299
|
+
Preferred reference net name.
|
|
300
|
+
|
|
301
|
+
Returns
|
|
302
|
+
-------
|
|
303
|
+
:class:`PadstackInstance <pyedb.grpc.database.primitive.padstack_instance.PadstackInstance>`
|
|
304
|
+
"""
|
|
305
|
+
|
|
306
|
+
if self.is_circuit_port:
|
|
307
|
+
return self.get_pin_group_terminal_reference_pin()
|
|
308
|
+
_, padStackInstance, _ = self.get_parameters()
|
|
309
|
+
|
|
310
|
+
# Get the pastack instance of the terminal
|
|
311
|
+
pins = self._pedb.components.get_pin_from_component(self.component.name)
|
|
312
|
+
return self._get_closest_pin(padStackInstance, pins, gnd_net_name_preference)
|
|
313
|
+
|
|
314
|
+
def get_pin_group_terminal_reference_pin(self, gnd_net_name_preference=None): # pragma : no cover
|
|
315
|
+
"""Return a list of pins and serves terminals connected to pingroups.
|
|
316
|
+
|
|
317
|
+
Parameters
|
|
318
|
+
----------
|
|
319
|
+
gnd_net_name_preference : str, optional
|
|
320
|
+
Preferred reference net name.
|
|
321
|
+
|
|
322
|
+
Returns
|
|
323
|
+
-------
|
|
324
|
+
:class:`PadstackInstance <pyedb.grpc.database.primitive.padstack_instance.PadstackInstance>`
|
|
325
|
+
"""
|
|
326
|
+
|
|
327
|
+
refTerm = self.reference_terminal
|
|
328
|
+
if self.type == GrpcTerminalType.PIN_GROUP:
|
|
329
|
+
padStackInstance = self.pin_group.pins[0]
|
|
330
|
+
pingroup = refTerm.pin_group
|
|
331
|
+
refPinList = pingroup.pins
|
|
332
|
+
return self._get_closest_pin(padStackInstance, refPinList, gnd_net_name_preference)
|
|
333
|
+
elif self.type == GrpcTerminalType.PADSTACK_INST:
|
|
334
|
+
_, padStackInstance, _ = self.get_parameters()
|
|
335
|
+
if refTerm.type == GrpcTerminalType.PIN_GROUP:
|
|
336
|
+
pingroup = refTerm.pin_group
|
|
337
|
+
refPinList = pingroup.pins
|
|
338
|
+
return self._get_closest_pin(padStackInstance, refPinList, gnd_net_name_preference)
|
|
339
|
+
else:
|
|
340
|
+
try:
|
|
341
|
+
_, refTermPSI, _ = refTerm.get_parameters()
|
|
342
|
+
return EDBPadstackInstance(refTermPSI, self._pedb)
|
|
343
|
+
except AttributeError:
|
|
344
|
+
return False
|
|
345
|
+
return False
|
|
346
|
+
|
|
347
|
+
def get_edge_terminal_reference_primitive(self): # pragma : no cover
|
|
348
|
+
"""Check and return a primitive instance that serves Edge ports,
|
|
349
|
+
wave-ports and coupled-edge ports that are directly connected to primitives.
|
|
350
|
+
|
|
351
|
+
Returns
|
|
352
|
+
-------
|
|
353
|
+
:class:`Primitive <pyedb.grpc.database.primitive.primitive.Primitive>`
|
|
354
|
+
"""
|
|
355
|
+
|
|
356
|
+
ref_layer = self.reference_layer
|
|
357
|
+
edges = self.edges
|
|
358
|
+
_, _, point_data = edges[0].get_parameters()
|
|
359
|
+
# shape_pd = self._pedb.edb_api.geometry.point_data(X, Y)
|
|
360
|
+
layer_name = ref_layer.name
|
|
361
|
+
for primitive in self._pedb.layout.primitives:
|
|
362
|
+
if primitive.layer.name == layer_name:
|
|
363
|
+
if primitive.polygon_data.point_in_polygon(point_data):
|
|
364
|
+
return cast(primitive, self._pedb)
|
|
365
|
+
return None # pragma: no cover
|
|
366
|
+
|
|
367
|
+
def get_point_terminal_reference_primitive(self): # pragma : no cover
|
|
368
|
+
"""Find and return the primitive reference for the point terminal or the padstack instance.
|
|
369
|
+
|
|
370
|
+
Returns
|
|
371
|
+
-------
|
|
372
|
+
:class:`PadstackInstance <pyedb.grpc.database.primitive.padstack_instance.PadstackInstance>` or
|
|
373
|
+
:class:`Primitive <pyedb.grpc.database.primitive.primitive.Primitive>`
|
|
374
|
+
"""
|
|
375
|
+
|
|
376
|
+
ref_term = self.reference_terminal # return value is type terminal
|
|
377
|
+
_, point_data, layer = ref_term.get_parameters()
|
|
378
|
+
# shape_pd = self._pedb.edb_api.geometry.point_data(X, Y)
|
|
379
|
+
layer_name = layer.name
|
|
380
|
+
for primitive in self._pedb.layout.primitives:
|
|
381
|
+
if primitive.layer.name == layer_name:
|
|
382
|
+
prim_shape_data = primitive.GetPolygonData()
|
|
383
|
+
if primitive.polygon_data.point_in_polygon(point_data):
|
|
384
|
+
return cast(primitive, self._pedb)
|
|
385
|
+
for vias in self._pedb.padstacks.instances.values():
|
|
386
|
+
if layer_name in vias.layer_range_names:
|
|
387
|
+
plane = self._pedb.modeler.Shape(
|
|
388
|
+
"rectangle", pointA=vias.position, pointB=vias.padstack_definition.bounding_box[1]
|
|
389
|
+
)
|
|
390
|
+
rectangle_data = vias._pedb.modeler.shape_to_polygon_data(plane)
|
|
391
|
+
if rectangle_data.point_in_polygon(point_data):
|
|
392
|
+
return vias
|
|
393
|
+
return False
|
|
394
|
+
|
|
395
|
+
def get_pad_edge_terminal_reference_pin(self, gnd_net_name_preference=None):
|
|
396
|
+
"""Get the closest pin padstack instances and serves any edge terminal connected to a pad.
|
|
397
|
+
|
|
398
|
+
Parameters
|
|
399
|
+
----------
|
|
400
|
+
gnd_net_name_preference : str, optional
|
|
401
|
+
Preferred reference net name. Optianal, default is `None` which will auto compute the gnd name.
|
|
402
|
+
|
|
403
|
+
Returns
|
|
404
|
+
-------
|
|
405
|
+
:class:`PadstackInstance <pyedb.grpc.database.primitive.padstack_instance.PadstackInstance>`
|
|
406
|
+
"""
|
|
407
|
+
comp_inst = self.component
|
|
408
|
+
pins = self._pedb.components.get_pin_from_component(comp_inst.name)
|
|
409
|
+
edges = self.edges
|
|
410
|
+
_, pad_edge_pstack_inst, _, _ = edges[0].get_parameters()
|
|
411
|
+
return self._get_closest_pin(pad_edge_pstack_inst, pins, gnd_net_name_preference)
|
|
412
|
+
|
|
413
|
+
def _get_closest_pin(self, ref_pin, pin_list, gnd_net=None):
|
|
414
|
+
_, pad_stack_inst_point, _ = ref_pin.position_and_rotation # get the xy of the padstack
|
|
415
|
+
if gnd_net is not None:
|
|
416
|
+
power_ground_net_names = [gnd_net]
|
|
417
|
+
else:
|
|
418
|
+
power_ground_net_names = [net for net in self._pedb.nets.power.keys()]
|
|
419
|
+
comp_ref_pins = [i for i in pin_list if i.net.name in power_ground_net_names]
|
|
420
|
+
if len(comp_ref_pins) == 0: # pragma: no cover
|
|
421
|
+
self._pedb.logger.error(
|
|
422
|
+
"Terminal with PadStack Instance Name {} component has no reference pins.".format(ref_pin.GetName())
|
|
423
|
+
)
|
|
424
|
+
return None
|
|
425
|
+
closest_pin_distance = None
|
|
426
|
+
pin_obj = None
|
|
427
|
+
for pin in comp_ref_pins: # find the distance to all the pins to the terminal pin
|
|
428
|
+
if pin.name == ref_pin.name: # skip the reference psi
|
|
429
|
+
continue # pragma: no cover
|
|
430
|
+
_, pin_point, _ = pin.position_and_rotation
|
|
431
|
+
distance = pad_stack_inst_point.distance(pin_point)
|
|
432
|
+
if closest_pin_distance is None:
|
|
433
|
+
closest_pin_distance = distance
|
|
434
|
+
pin_obj = pin
|
|
435
|
+
elif closest_pin_distance < distance:
|
|
436
|
+
continue
|
|
437
|
+
else:
|
|
438
|
+
closest_pin_distance = distance
|
|
439
|
+
pin_obj = pin
|
|
440
|
+
if pin_obj:
|
|
441
|
+
return EDBPadstackInstance(pin_obj, self._pedb)
|
|
442
|
+
|
|
443
|
+
@property
|
|
444
|
+
def magnitude(self):
|
|
445
|
+
"""Get the magnitude of the source.
|
|
446
|
+
|
|
447
|
+
Returns
|
|
448
|
+
-------
|
|
449
|
+
float : source magnitude.
|
|
450
|
+
"""
|
|
451
|
+
return self.source_amplitude.value
|
|
452
|
+
|
|
453
|
+
@magnitude.setter
|
|
454
|
+
def magnitude(self, value):
|
|
455
|
+
self.source_amplitude = GrpcValue(value)
|
|
456
|
+
|
|
457
|
+
@property
|
|
458
|
+
def phase(self):
|
|
459
|
+
"""Get the phase of the source.
|
|
460
|
+
|
|
461
|
+
Returns
|
|
462
|
+
-------
|
|
463
|
+
float : source phase.
|
|
464
|
+
|
|
465
|
+
"""
|
|
466
|
+
return self.source_phase.value
|
|
467
|
+
|
|
468
|
+
@phase.setter
|
|
469
|
+
def phase(self, value):
|
|
470
|
+
self.source_phase = GrpcValue(value)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
#
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
# furnished to do so, subject to the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
# copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
# SOFTWARE.
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def get_terminal_supported_boundary_types():
|
|
25
|
+
return ["voltage_source", "current_source", "port", "dc_terminal", "voltage_probe"]
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
#
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
# furnished to do so, subject to the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
# copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
# SOFTWARE.
|
|
22
|
+
|
|
23
|
+
from ansys.edb.core.utility.heat_sink import (
|
|
24
|
+
HeatSinkFinOrientation as GrpcHeatSinkFinOrientation,
|
|
25
|
+
)
|
|
26
|
+
from ansys.edb.core.utility.value import Value as GrpcValue
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class HeatSink:
|
|
30
|
+
|
|
31
|
+
"""Heatsink model description.
|
|
32
|
+
|
|
33
|
+
Parameters
|
|
34
|
+
----------
|
|
35
|
+
pedb : :class:`Edb < pyedb.grpc.edb.Edb>`
|
|
36
|
+
Inherited object.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(self, pedb, edb_object):
|
|
40
|
+
self._pedb = pedb
|
|
41
|
+
self._edb_object = edb_object
|
|
42
|
+
self._fin_orientation_type = {
|
|
43
|
+
"x_oriented": GrpcHeatSinkFinOrientation.X_ORIENTED,
|
|
44
|
+
"y_oriented": GrpcHeatSinkFinOrientation.Y_ORIENTED,
|
|
45
|
+
"other_oriented": GrpcHeatSinkFinOrientation.OTHER_ORIENTED,
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def fin_base_height(self):
|
|
50
|
+
"""The base elevation of the fins.
|
|
51
|
+
|
|
52
|
+
Returns
|
|
53
|
+
-------
|
|
54
|
+
float
|
|
55
|
+
Height value.
|
|
56
|
+
"""
|
|
57
|
+
return self._edb_object.fin_base_height.value
|
|
58
|
+
|
|
59
|
+
@fin_base_height.setter
|
|
60
|
+
def fin_base_height(self, value):
|
|
61
|
+
self._edb_object.fin_base_height = GrpcValue(value)
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def fin_height(self):
|
|
65
|
+
"""Fin height.
|
|
66
|
+
|
|
67
|
+
Returns
|
|
68
|
+
-------
|
|
69
|
+
float
|
|
70
|
+
Fin height value.
|
|
71
|
+
|
|
72
|
+
"""
|
|
73
|
+
return self._edb_object.fin_height.value
|
|
74
|
+
|
|
75
|
+
@fin_height.setter
|
|
76
|
+
def fin_height(self, value):
|
|
77
|
+
self._edb_object.fin_height = GrpcValue(value)
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def fin_orientation(self):
|
|
81
|
+
"""Fin orientation.
|
|
82
|
+
|
|
83
|
+
Returns
|
|
84
|
+
-------
|
|
85
|
+
str
|
|
86
|
+
Fin orientation.
|
|
87
|
+
"""
|
|
88
|
+
return self._edb_object.fin_orientation.name.lower()
|
|
89
|
+
|
|
90
|
+
@fin_orientation.setter
|
|
91
|
+
def fin_orientation(self, value):
|
|
92
|
+
self._edb_object.fin_orientation = self._fin_orientation_type[value]
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def fin_spacing(self):
|
|
96
|
+
"""Fin spacing.
|
|
97
|
+
|
|
98
|
+
Returns
|
|
99
|
+
-------
|
|
100
|
+
float
|
|
101
|
+
Fin spacing value.
|
|
102
|
+
|
|
103
|
+
"""
|
|
104
|
+
return self._edb_object.fin_spacing.value
|
|
105
|
+
|
|
106
|
+
@fin_spacing.setter
|
|
107
|
+
def fin_spacing(self, value):
|
|
108
|
+
self._edb_object.fin_spacing = GrpcValue(value)
|
|
109
|
+
|
|
110
|
+
@property
|
|
111
|
+
def fin_thickness(self):
|
|
112
|
+
"""Fin thickness.
|
|
113
|
+
|
|
114
|
+
Returns
|
|
115
|
+
-------
|
|
116
|
+
float
|
|
117
|
+
Fin thickness value.
|
|
118
|
+
|
|
119
|
+
"""
|
|
120
|
+
return self._edb_object.fin_thickness.value
|
|
121
|
+
|
|
122
|
+
@fin_thickness.setter
|
|
123
|
+
def fin_thickness(self, value):
|
|
124
|
+
self._edb_object.fin_thickness = GrpcValue(value)
|