pyedb 0.15.dev0__py3-none-any.whl → 0.16.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/dotnet/edb.py CHANGED
@@ -48,6 +48,7 @@ from pyedb.dotnet.edb_core.cell.terminal.padstack_instance_terminal import (
48
48
  from pyedb.dotnet.edb_core.cell.terminal.pingroup_terminal import PinGroupTerminal
49
49
  from pyedb.dotnet.edb_core.cell.terminal.point_terminal import PointTerminal
50
50
  from pyedb.dotnet.edb_core.cell.terminal.terminal import Terminal
51
+ from pyedb.dotnet.edb_core.cell.voltage_regulator import VoltageRegulator
51
52
  from pyedb.dotnet.edb_core.components import Components
52
53
  from pyedb.dotnet.edb_core.dotnet.database import Database
53
54
  from pyedb.dotnet.edb_core.dotnet.layout import LayoutDotNet
@@ -93,10 +94,10 @@ from pyedb.dotnet.edb_core.nets import EdbNets
93
94
  from pyedb.dotnet.edb_core.padstack import EdbPadstacks
94
95
  from pyedb.dotnet.edb_core.siwave import EdbSiwave
95
96
  from pyedb.dotnet.edb_core.stackup import Stackup
96
- from pyedb.dotnet.edb_core.utilities.simulation_setup import (
97
- HfssSimulationSetup,
97
+ from pyedb.dotnet.edb_core.utilities.hfss_simulation_setup import HfssSimulationSetup
98
+ from pyedb.dotnet.edb_core.utilities.siwave_simulation_setup import (
98
99
  SiwaveDCSimulationSetup,
99
- SiwaveSYZSimulationSetup,
100
+ SiwaveSimulationSetup,
100
101
  )
101
102
  from pyedb.generic.constants import AEDT_UNITS, SolverType
102
103
  from pyedb.generic.general_methods import (
@@ -510,6 +511,15 @@ class Edb(Database):
510
511
  terms = [term for term in self.layout.terminals if int(term.GetBoundaryType()) in [3, 4, 7]]
511
512
  return {ter.GetName(): ExcitationSources(self, ter) for ter in terms}
512
513
 
514
+ @property
515
+ def voltage_regulator_modules(self):
516
+ """Get all voltage regulator modules"""
517
+ vrms = [VoltageRegulator(self, edb_object) for edb_object in list(self.active_layout.VoltageRegulators)]
518
+ _vrms = {}
519
+ for vrm in vrms:
520
+ _vrms[vrm.GetName()] = vrm
521
+ return _vrms
522
+
513
523
  @property
514
524
  def probes(self):
515
525
  """Get all layout probes."""
@@ -3556,7 +3566,7 @@ class Edb(Database):
3556
3566
  if i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kHFSS:
3557
3567
  setups[i.GetName()] = HfssSimulationSetup(self, i)
3558
3568
  elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWave:
3559
- setups[i.GetName()] = SiwaveSYZSimulationSetup(self, i)
3569
+ setups[i.GetName()] = SiwaveSimulationSetup(self, i)
3560
3570
  elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWaveDCIR:
3561
3571
  setups[i.GetName()] = SiwaveDCSimulationSetup(self, i)
3562
3572
  elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kRaptorX:
@@ -3594,7 +3604,7 @@ class Edb(Database):
3594
3604
  -------
3595
3605
  Dict[str, :class:`legacy.edb_core.edb_data.siwave_simulation_setup_data.SiwaveSYZSimulationSetup`]
3596
3606
  """
3597
- return {name: i for name, i in self.setups.items() if isinstance(i, SiwaveSYZSimulationSetup)}
3607
+ return {name: i for name, i in self.setups.items() if isinstance(i, SiwaveSimulationSetup)}
3598
3608
 
3599
3609
  def create_hfss_setup(self, name=None):
3600
3610
  """Create an HFSS simulation setup from a template.
@@ -3620,7 +3630,7 @@ class Edb(Database):
3620
3630
  return False
3621
3631
  elif not name:
3622
3632
  name = generate_unique_name("setup")
3623
- setup = HfssSimulationSetup(self).create(name)
3633
+ setup = HfssSimulationSetup(self, name=name)
3624
3634
  setup.set_solution_single_frequency("1GΗz")
3625
3635
  return setup
3626
3636
 
@@ -3671,7 +3681,7 @@ class Edb(Database):
3671
3681
  return False
3672
3682
  return HFSSPISimulationSetup(self).create(name)
3673
3683
 
3674
- def create_siwave_syz_setup(self, name=None):
3684
+ def create_siwave_syz_setup(self, name=None, **kwargs):
3675
3685
  """Create a setup from a template.
3676
3686
 
3677
3687
  Parameters
@@ -3698,10 +3708,12 @@ class Edb(Database):
3698
3708
  name = generate_unique_name("Siwave_SYZ")
3699
3709
  if name in self.setups:
3700
3710
  return False
3701
- SiwaveSYZSimulationSetup(self).create(name)
3711
+ setup = SiwaveSimulationSetup(self, name=name)
3712
+ for k, v in kwargs.items():
3713
+ setattr(setup, k, v)
3702
3714
  return self.setups[name]
3703
3715
 
3704
- def create_siwave_dc_setup(self, name=None):
3716
+ def create_siwave_dc_setup(self, name=None, **kwargs):
3705
3717
  """Create a setup from a template.
3706
3718
 
3707
3719
  Parameters
@@ -3725,7 +3737,9 @@ class Edb(Database):
3725
3737
  name = generate_unique_name("Siwave_DC")
3726
3738
  if name in self.setups:
3727
3739
  return False
3728
- setup = SiwaveDCSimulationSetup(self).create(name)
3740
+ setup = SiwaveDCSimulationSetup(self, name=name)
3741
+ for k, v in kwargs.items():
3742
+ setattr(setup, k, v)
3729
3743
  return setup
3730
3744
 
3731
3745
  def calculate_initial_extent(self, expansion_factor):
File without changes
@@ -0,0 +1,148 @@
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 pyedb.dotnet.edb_core.cell.layout_obj import Connectable
24
+ from pyedb.dotnet.edb_core.edb_data.padstacks_data import EDBPadstackInstance
25
+
26
+
27
+ class VoltageRegulator(Connectable):
28
+ """Class managing EDB voltage regulator."""
29
+
30
+ def __init__(self, pedb, edb_object=None):
31
+ super().__init__(pedb, edb_object)
32
+
33
+ @property
34
+ def component(self):
35
+ """Retrieve voltage regulator component"""
36
+ if not self._edb_object.GetComponent().IsNull():
37
+ ref_des = self._edb_object.GetComponent().GetName()
38
+ if not ref_des:
39
+ return False
40
+ return self._pedb.components.instances[ref_des]
41
+ self._pedb.logger.warning("No voltage regulator component.")
42
+ return False
43
+
44
+ @component.setter
45
+ def component(self, value):
46
+ if not isinstance(value, str):
47
+ self._pedb.logger.error("refdes name must be provided to set vrm component")
48
+ return
49
+ if value not in self._pedb.components.instances:
50
+ self._pedb.logger.error(f"component {value} not found in layout")
51
+ return
52
+ self._edb_object.SetGroup(self._pedb.components.instances[value].edbcomponent)
53
+
54
+ @property
55
+ def id(self):
56
+ """Retrieve voltage regulator ID."""
57
+ return self._edb_object.GetId()
58
+
59
+ @property
60
+ def load_regulator_current(self):
61
+ """Retrieve load regulator current value"""
62
+ return self._edb_object.GetLoadRegulationCurrent().ToDouble()
63
+
64
+ @load_regulator_current.setter
65
+ def load_regulator_current(self, value):
66
+ _value = self._pedb.edb_value(value)
67
+ self._edb_object.SetLoadRegulationCurrent(_value)
68
+
69
+ @property
70
+ def load_regulation_percent(self):
71
+ """Retrieve load regulation percent value."""
72
+ return self._edb_object.GetLoadRegulationPercent().ToDouble()
73
+
74
+ @load_regulation_percent.setter
75
+ def load_regulation_percent(self, value):
76
+ _value = self._edb_object.edb_value(value)
77
+ self._edb_object.SetLoadRegulationPercent(_value)
78
+
79
+ @property
80
+ def name(self):
81
+ """Retrieve voltage regulator name."""
82
+ return self._edb_object.GetName()
83
+
84
+ @name.setter
85
+ def name(self, value):
86
+ if isinstance(value, str):
87
+ self._edb_object.SetName(value)
88
+
89
+ @property
90
+ def negative_remote_sense_pin(self):
91
+ """Retrieve negative remote sense pin."""
92
+ edb_pin = self._edb_object.GetNegRemoteSensePin()
93
+ return self._pedb.padstacks.instances[edb_pin.GetId()]
94
+
95
+ @negative_remote_sense_pin.setter
96
+ def negative_remote_sense_pin(self, value):
97
+ if isinstance(value, int):
98
+ if value in self._pedb.padsatcks.instances:
99
+ _inst = self._pedb.padsatcks.instances[value]
100
+ if self._edb_object.SetNegRemoteSensePin(_inst._edb_object):
101
+ self._negative_remote_sense_pin = _inst
102
+ elif isinstance(value, EDBPadstackInstance):
103
+ if self._edb_object.SetNegRemoteSensePin(value._edb_object):
104
+ self._negative_remote_sense_pin = value
105
+
106
+ @property
107
+ def positive_remote_sense_pin(self):
108
+ """Retrieve positive remote sense pin."""
109
+ edb_pin = self._edb_object.GetPosRemoteSensePin()
110
+ return self._pedb.padstacks.instances[edb_pin.GetId()]
111
+
112
+ @positive_remote_sense_pin.setter
113
+ def positive_remote_sense_pin(self, value):
114
+ if isinstance(value, int):
115
+ if value in self._pedb.padsatcks.instances:
116
+ _inst = self._pedb.padsatcks.instances[value]
117
+ if self._edb_object.SetPosRemoteSensePin(_inst._edb_object):
118
+ self._positive_remote_sense_pin = _inst
119
+ if not self.component:
120
+ self.component = _inst._edb_object.GetComponent().GetName()
121
+ elif isinstance(value, EDBPadstackInstance):
122
+ if self._edb_object.SetPosRemoteSensePin(value._edb_object):
123
+ self._positive_remote_sense_pin = value
124
+ if not self.component:
125
+ self.component = value._edb_object.GetComponent().GetName()
126
+
127
+ @property
128
+ def voltage(self):
129
+ """Retrieve voltage value."""
130
+ return self._edb_object.GetVoltage().ToDouble()
131
+
132
+ @voltage.setter
133
+ def voltage(self, value):
134
+ self._edb_object.SetVoltage(self._pedb.edb_value(value))
135
+
136
+ @property
137
+ def is_active(self):
138
+ """Check is voltage regulator is active."""
139
+ return self._edb_object.IsActive()
140
+
141
+ @is_active.setter
142
+ def is_active(self, value):
143
+ if isinstance(value, bool):
144
+ self._edb_object.SetIsActive(value)
145
+
146
+ @property
147
+ def is_null(self):
148
+ return self._edb_object.IsNull()
@@ -149,10 +149,13 @@ class EdbLayout(object):
149
149
  _primitives_by_layer = {}
150
150
  for lay in self.layers:
151
151
  _primitives_by_layer[lay] = []
152
+ for lay in self._pedb.stackup.non_stackup_layers:
153
+ _primitives_by_layer[lay] = []
152
154
  for i in self._layout.primitives:
153
155
  try:
154
156
  lay = i.GetLayer().GetName()
155
- _primitives_by_layer[lay].append(cast(i, self._pedb))
157
+ if lay in _primitives_by_layer:
158
+ _primitives_by_layer[lay].append(cast(i, self._pedb))
156
159
  except:
157
160
  self._logger.warning(f"Failed to get layer on primitive {i}, skipping.")
158
161
  continue
@@ -20,22 +20,31 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
+ from enum import Enum
24
+
23
25
  from System import Tuple
24
26
 
25
27
  from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
26
28
 
27
29
 
30
+ class MeshOpType(Enum):
31
+ kMeshSetupBase = "base"
32
+ kMeshSetupLength = "length"
33
+ kMeshSetupSkinDepth = "skin_depth"
34
+ kNumMeshOpTypes = "num_mesh_op_types"
35
+
36
+
28
37
  class MeshOperation(object):
29
38
  """Mesh Operation Class."""
30
39
 
31
- def __init__(self, parent, mesh_operation):
40
+ def __init__(self, parent, edb_object):
32
41
  self._parent = parent
33
- self.mesh_operation = mesh_operation
42
+ self._edb_object = edb_object
34
43
  self._mesh_op_mapping = {
35
- "kMeshSetupBase": mesh_operation.TMeshOpType.kMeshSetupBase,
36
- "kMeshSetupLength": mesh_operation.TMeshOpType.kMeshSetupLength,
37
- "kMeshSetupSkinDepth": mesh_operation.TMeshOpType.kMeshSetupSkinDepth,
38
- "kNumMeshOpTypes": mesh_operation.TMeshOpType.kNumMeshOpTypes,
44
+ "kMeshSetupBase": self._edb_object.TMeshOpType.kMeshSetupBase,
45
+ "kMeshSetupLength": self._edb_object.TMeshOpType.kMeshSetupLength,
46
+ "kMeshSetupSkinDepth": self._edb_object.TMeshOpType.kMeshSetupSkinDepth,
47
+ "kNumMeshOpTypes": self._edb_object.TMeshOpType.kNumMeshOpTypes,
39
48
  }
40
49
 
41
50
  @property
@@ -47,7 +56,7 @@ class MeshOperation(object):
47
56
  bool
48
57
  ``True`` if mesh operation is used, ``False`` otherwise.
49
58
  """
50
- return self.mesh_operation.Enabled
59
+ return self._edb_object.Enabled
51
60
 
52
61
  @property
53
62
  def mesh_operation_type(self):
@@ -60,9 +69,14 @@ class MeshOperation(object):
60
69
 
61
70
  Returns
62
71
  -------
63
- int
72
+ str
64
73
  """
65
- return self.mesh_operation.MeshOpType.ToString()
74
+ return self._edb_object.MeshOpType.ToString()
75
+
76
+ @property
77
+ def type(self):
78
+ mop_type = self.mesh_operation_type
79
+ return MeshOpType[mop_type].value
66
80
 
67
81
  @property
68
82
  def mesh_region(self):
@@ -73,7 +87,7 @@ class MeshOperation(object):
73
87
  str
74
88
  Name of the mesh region.
75
89
  """
76
- return self.mesh_operation.MeshRegion
90
+ return self._edb_object.MeshRegion
77
91
 
78
92
  @property
79
93
  def name(self):
@@ -83,7 +97,7 @@ class MeshOperation(object):
83
97
  -------
84
98
  str
85
99
  """
86
- return self.mesh_operation.Name
100
+ return self._edb_object.Name
87
101
 
88
102
  @property
89
103
  def nets_layers_list(self):
@@ -99,7 +113,18 @@ class MeshOperation(object):
99
113
  Third element is represents whether if the mesh operation is enabled or disabled.
100
114
 
101
115
  """
102
- return self.mesh_operation.NetsLayersList
116
+ nets_layers = {}
117
+ for i in list(self._edb_object.NetsLayersList):
118
+ net = i.Item1
119
+ layer = i.Item2
120
+ flag = i.Item3
121
+ if not flag:
122
+ continue
123
+ if net not in nets_layers:
124
+ nets_layers[net] = [layer]
125
+ else:
126
+ nets_layers[net].append(layer)
127
+ return nets_layers
103
128
 
104
129
  @nets_layers_list.setter
105
130
  def nets_layers_list(self, values):
@@ -107,7 +132,7 @@ class MeshOperation(object):
107
132
  for net, layers in values.items():
108
133
  for layer in layers:
109
134
  temp.append(Tuple[str, str, bool](net, layer, True))
110
- self.mesh_operation.NetsLayersList = convert_py_list_to_net_list(temp)
135
+ self._edb_object.NetsLayersList = convert_py_list_to_net_list(temp)
111
136
 
112
137
  @property
113
138
  def refine_inside(self):
@@ -119,27 +144,23 @@ class MeshOperation(object):
119
144
  ``True`` if refine inside objects is used, ``False`` otherwise.
120
145
 
121
146
  """
122
- return self.mesh_operation.RefineInside
147
+ return self._edb_object.RefineInside
123
148
 
124
149
  @enabled.setter
125
150
  def enabled(self, value):
126
- self.mesh_operation.Enabled = value
127
- self._parent._update_setup()
151
+ self._edb_object.Enabled = value
128
152
 
129
153
  @mesh_region.setter
130
154
  def mesh_region(self, value):
131
- self.mesh_operation.MeshRegion = value
132
- self._parent._update_setup()
155
+ self._edb_object.MeshRegion = value
133
156
 
134
157
  @name.setter
135
158
  def name(self, value):
136
- self.mesh_operation.Name = value
137
- self._parent._update_setup()
159
+ self._edb_object.Name = value
138
160
 
139
161
  @refine_inside.setter
140
162
  def refine_inside(self, value):
141
- self.mesh_operation.RefineInside = value
142
- self._parent._update_setup()
163
+ self._edb_object.RefineInside = value
143
164
 
144
165
  @property
145
166
  def max_elements(self):
@@ -149,7 +170,7 @@ class MeshOperation(object):
149
170
  -------
150
171
  str
151
172
  """
152
- return self.mesh_operation.MaxElems
173
+ return int(self._edb_object.MaxElems)
153
174
 
154
175
  @property
155
176
  def restrict_max_elements(self):
@@ -159,12 +180,11 @@ class MeshOperation(object):
159
180
  -------
160
181
  bool
161
182
  """
162
- return self.mesh_operation.RestrictMaxElem
183
+ return self._edb_object.RestrictMaxElem
163
184
 
164
185
  @max_elements.setter
165
186
  def max_elements(self, value):
166
- self.mesh_operation.MaxElems = str(value)
167
- self._parent._update_setup()
187
+ self._edb_object.MaxElems = str(value)
168
188
 
169
189
  @restrict_max_elements.setter
170
190
  def restrict_max_elements(self, value):
@@ -174,11 +194,10 @@ class MeshOperation(object):
174
194
  -------
175
195
  bool
176
196
  """
177
- self.mesh_operation.RestrictMaxElem = value
178
- self._parent._update_setup()
197
+ self._edb_object.RestrictMaxElem = value
179
198
 
180
199
 
181
- class MeshOperationLength(MeshOperation, object):
200
+ class LengthMeshOperation(MeshOperation, object):
182
201
  """Mesh operation Length class.
183
202
  This class is accessible from Hfss Setup in EDB and add_length_mesh_operation method.
184
203
 
@@ -188,8 +207,8 @@ class MeshOperationLength(MeshOperation, object):
188
207
  >>> mop.max_elements = 3000
189
208
  """
190
209
 
191
- def __init__(self, parent, mesh_operation):
192
- MeshOperation.__init__(self, parent, mesh_operation)
210
+ def __init__(self, parent, edb_object):
211
+ MeshOperation.__init__(self, parent, edb_object)
193
212
 
194
213
  @property
195
214
  def max_length(self):
@@ -199,7 +218,7 @@ class MeshOperationLength(MeshOperation, object):
199
218
  -------
200
219
  str
201
220
  """
202
- return self.mesh_operation.MaxLength
221
+ return self._edb_object.MaxLength
203
222
 
204
223
  @property
205
224
  def restrict_length(self):
@@ -209,12 +228,11 @@ class MeshOperationLength(MeshOperation, object):
209
228
  -------
210
229
  bool
211
230
  """
212
- return self.mesh_operation.RestrictLength
231
+ return self._edb_object.RestrictLength
213
232
 
214
233
  @max_length.setter
215
234
  def max_length(self, value):
216
- self.mesh_operation.MaxLength = value
217
- self._parent._update_setup()
235
+ self._edb_object.MaxLength = value
218
236
 
219
237
  @restrict_length.setter
220
238
  def restrict_length(self, value):
@@ -224,11 +242,10 @@ class MeshOperationLength(MeshOperation, object):
224
242
  -------
225
243
  bool
226
244
  """
227
- self.mesh_operation.RestrictLength = value
228
- self._parent._update_setup()
245
+ self._edb_object.RestrictLength = value
229
246
 
230
247
 
231
- class MeshOperationSkinDepth(MeshOperation, object):
248
+ class SkinDepthMeshOperation(MeshOperation, object):
232
249
  """Mesh operation Skin Depth class.
233
250
  This class is accessible from Hfss Setup in EDB and assign_skin_depth_mesh_operation method.
234
251
 
@@ -238,8 +255,8 @@ class MeshOperationSkinDepth(MeshOperation, object):
238
255
  >>> mop.max_elements = 3000
239
256
  """
240
257
 
241
- def __init__(self, parent, mesh_operation):
242
- MeshOperation.__init__(self, parent, mesh_operation)
258
+ def __init__(self, parent, edb_object):
259
+ MeshOperation.__init__(self, parent, edb_object)
243
260
 
244
261
  @property
245
262
  def skin_depth(self):
@@ -249,12 +266,11 @@ class MeshOperationSkinDepth(MeshOperation, object):
249
266
  -------
250
267
  str
251
268
  """
252
- return self.mesh_operation.SkinDepth
269
+ return self._edb_object.SkinDepth
253
270
 
254
271
  @skin_depth.setter
255
272
  def skin_depth(self, value):
256
- self.mesh_operation.SkinDepth = value
257
- self._parent._update_setup()
273
+ self._edb_object.SkinDepth = value
258
274
 
259
275
  @property
260
276
  def surface_triangle_length(self):
@@ -264,12 +280,11 @@ class MeshOperationSkinDepth(MeshOperation, object):
264
280
  -------
265
281
  str
266
282
  """
267
- return self.mesh_operation.SurfTriLength
283
+ return self._edb_object.SurfTriLength
268
284
 
269
285
  @surface_triangle_length.setter
270
286
  def surface_triangle_length(self, value):
271
- self.mesh_operation.SurfTriLength = value
272
- self._parent._update_setup()
287
+ self._edb_object.SurfTriLength = value
273
288
 
274
289
  @property
275
290
  def number_of_layer_elements(self):
@@ -279,9 +294,8 @@ class MeshOperationSkinDepth(MeshOperation, object):
279
294
  -------
280
295
  str
281
296
  """
282
- return self.mesh_operation.NumLayers
297
+ return self._edb_object.NumLayers
283
298
 
284
299
  @number_of_layer_elements.setter
285
300
  def number_of_layer_elements(self, value):
286
- self.mesh_operation.NumLayers = str(value)
287
- self._parent._update_setup()
301
+ self._edb_object.NumLayers = str(value)
@@ -45,7 +45,7 @@ class AdaptiveSettings(object):
45
45
  -------
46
46
  :class:`pyedb.dotnet.edb_core.edb_data.hfss_simulation_setup_data.AdaptiveSettings`
47
47
  """
48
- return self._parent.get_sim_setup_info.SimulationSettings.AdaptiveSettings
48
+ return self._parent.sim_setup_info.simulation_settings.AdaptiveSettings
49
49
 
50
50
  @property
51
51
  def adaptive_frequency_data_list(self):
@@ -0,0 +1,81 @@
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 pyedb.dotnet.edb_core.sim_setup_data.data.sweep_data import SweepData
24
+
25
+
26
+ class SimSetupInfo:
27
+ def __init__(
28
+ self,
29
+ pedb,
30
+ sim_setup,
31
+ edb_object=None,
32
+ setup_type: str = None,
33
+ name: str = None,
34
+ ):
35
+ self._pedb = pedb
36
+ self.sim_setup = sim_setup
37
+ simulation_setup_type = {
38
+ "kHFSS": self._pedb.simsetupdata.HFSSSimulationSettings,
39
+ "kPEM": None,
40
+ "kSIwave": self._pedb.simsetupdata.SIwave.SIWSimulationSettings,
41
+ "kLNA": None,
42
+ "kTransient": None,
43
+ "kQEye": None,
44
+ "kVEye": None,
45
+ "kAMI": None,
46
+ "kAnalysisOption": None,
47
+ "kSIwaveDCIR": self._pedb.simsetupdata.SIwave.SIWDCIRSimulationSettings,
48
+ "kSIwaveEMI": None,
49
+ "kHFSSPI": None,
50
+ "kDDRwizard": None,
51
+ "kQ3D": None,
52
+ "kNumSetupTypes": None,
53
+ }
54
+
55
+ if edb_object is None:
56
+ self._edb_object = self._pedb.simsetupdata.SimSetupInfo[simulation_setup_type[setup_type]]()
57
+ self._edb_object.Name = name
58
+ else:
59
+ self._edb_object = edb_object
60
+
61
+ @property
62
+ def position(self):
63
+ return self._edb_object.Position
64
+
65
+ @property
66
+ def sim_setup_type(self):
67
+ return self._edb_object.SimSetupType
68
+
69
+ @property
70
+ def simulation_settings(self):
71
+ return self._edb_object.SimulationSettings
72
+
73
+ @property
74
+ def sweep_data_list(self):
75
+ return [
76
+ SweepData(self._pedb, edb_object=i, sim_setup=self.sim_setup) for i in list(self._edb_object.SweepDataList)
77
+ ]
78
+
79
+ def add_sweep_data(self, sweep_data):
80
+ sweep_data.sim_setup = self.sim_setup
81
+ self._edb_object.SweepDataList.Add(sweep_data._edb_object)