Skip to content

Commit bed4980

Browse files
REFACTOR: FilterSolutions unit test improvements (#5987)
Co-authored-by: pyansys-ci-bot <92810346+pyansys-ci-bot@users.noreply.github.com>
1 parent eefb51d commit bed4980

21 files changed

Lines changed: 1120 additions & 244 deletions
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
FilterSolutions unit test improvements

src/ansys/aedt/core/filtersolutions_core/attributes.py

Lines changed: 77 additions & 71 deletions
Large diffs are not rendered by default.

src/ansys/aedt/core/filtersolutions_core/distributed_substrate.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ def __init__(self):
4949

5050
def _define_substrate_dll_functions(self):
5151
"""Define C++ API DLL functions."""
52-
self._dll.setDistributedSubstrateType.argtype = c_char_p
52+
self._dll.setDistributedSubstrateType.argtype = c_int
5353
self._dll.setDistributedSubstrateType.restype = int
54-
self._dll.getDistributedSubstrateType.argtypes = [c_char_p, c_int]
54+
self._dll.getDistributedSubstrateType.argtype = POINTER(c_int)
5555
self._dll.getDistributedSubstrateType.restype = int
5656

5757
self._dll.setDistributedEr.argtype = [c_char_p, c_int]
@@ -114,14 +114,17 @@ def substrate_type(self) -> SubstrateType:
114114
-------
115115
:enum:`SubstrateType`
116116
"""
117-
type_string = self._dll_interface.get_string(self._dll.getDistributedSubstrateType)
118-
return self._dll_interface.string_to_enum(SubstrateType, type_string)
117+
index = c_int()
118+
substrate_type_list = list(SubstrateType)
119+
status = self._dll.getDistributedSubstrateType(byref(index))
120+
self._dll_interface.raise_error(status)
121+
substrate_type = substrate_type_list[index.value]
122+
return substrate_type
119123

120124
@substrate_type.setter
121125
def substrate_type(self, substrate_type: SubstrateType):
122-
if substrate_type:
123-
string_value = self._dll_interface.enum_to_string(substrate_type)
124-
self._dll_interface.set_string(self._dll.setDistributedSubstrateType, string_value)
126+
status = self._dll.setDistributedSubstrateType(substrate_type.value)
127+
self._dll_interface.raise_error(status)
125128

126129
@property
127130
def substrate_er(self) -> Union[SubstrateType, str]:
@@ -153,7 +156,7 @@ def substrate_er(self, substrate_input):
153156
substrate_er_value = substrate_input
154157
substrate_er_index = -1
155158
else:
156-
raise ValueError("Invalid substrate input. Must be a SubstrateEr enum member or a string.")
159+
raise ValueError("Invalid substrate input. Must be a SubstrateEr enum member or a string")
157160

158161
substrate_er_value_bytes = bytes(substrate_er_value, "ascii")
159162
status = self._dll.setDistributedEr(substrate_er_value_bytes, substrate_er_index)
@@ -190,7 +193,7 @@ def substrate_resistivity(self, substrate_input):
190193
substrate_resistivity_value = substrate_input
191194
substrate_resistivity_index = -1
192195
else:
193-
raise ValueError("Invalid substrate input. Must be a SubstrateResistivity enum member or a string.")
196+
raise ValueError("Invalid substrate input. Must be a SubstrateResistivity enum member or a string")
194197
substrate_resistivity_value_bytes = bytes(substrate_resistivity_value, "ascii")
195198
status = self._dll.setDistributedResistivity(substrate_resistivity_value_bytes, substrate_resistivity_index)
196199
self._dll_interface.raise_error(status)
@@ -226,7 +229,7 @@ def substrate_loss_tangent(self, substrate_input):
226229
substrate_loss_tangent_value = substrate_input
227230
substrate_loss_tangent_index = -1
228231
else:
229-
raise ValueError("Invalid substrate input. Must be a SubstrateEr enum member or a string.")
232+
raise ValueError("Invalid substrate input. Must be a SubstrateEr enum member or a string")
230233
substrate_loss_tangent_value_bytes = bytes(substrate_loss_tangent_value, "ascii")
231234
status = self._dll.setDistributedLossTangent(substrate_loss_tangent_value_bytes, substrate_loss_tangent_index)
232235
self._dll_interface.raise_error(status)

src/ansys/aedt/core/filtersolutions_core/dll_interface.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ def set_string(self, dll_function: Callable, string: str):
140140
bytes_value = bytes(string, "ascii")
141141
status = dll_function(bytes_value)
142142
self.raise_error(status)
143+
return status
143144

144145
def string_to_enum(self, enum_type: Enum, string: str) -> Enum:
145146
"""Convert a string to a string defined by an enum.

src/ansys/aedt/core/filtersolutions_core/export_to_aedt.py

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -366,10 +366,16 @@ def _define_export_to_desktop_dll_functions(self):
366366
self._dll.getInterconnectGeometryOptimization.argtype = POINTER(c_bool)
367367
self._dll.getInterconnectGeometryOptimization.restype = c_int
368368

369-
self._dll.setSubstrateType.argtype = c_char_p
370-
self._dll.setSubstrateType.restype = int
371-
self._dll.getSubstrateType.argtypes = [c_char_p, c_int]
372-
self._dll.getSubstrateType.restype = int
369+
if self._dll_interface.api_version() >= "2025.2":
370+
self._dll.setSubstrateType.argtype = c_int
371+
self._dll.setSubstrateType.restype = c_int
372+
self._dll.getSubstrateType.argtype = POINTER(c_int)
373+
self._dll.getSubstrateType.restype = c_int
374+
else:
375+
self._dll.setSubstrateType.argtype = c_char_p
376+
self._dll.setSubstrateType.restype = c_int
377+
self._dll.getSubstrateType.argtypes = [c_char_p, c_int]
378+
self._dll.getSubstrateType.restype = c_int
373379

374380
self._dll.setEr.argtype = [c_char_p, c_int]
375381
self._dll.setEr.restype = c_int
@@ -871,7 +877,7 @@ def export_design(self, export_format=None, export_creation_mode=None, export_pa
871877
export_format = ExportFormat.DIRECT_TO_AEDT
872878
if export_creation_mode is None:
873879
export_creation_mode = ExportCreationMode.OVERWRITE
874-
if export_path is None:
880+
if not export_path:
875881
export_path = ""
876882
else:
877883
directory_path = os.path.dirname(export_path)
@@ -898,7 +904,7 @@ def import_tuned_variables(self):
898904

899905
@property
900906
def part_libraries(self) -> PartLibraries:
901-
"""Part libraries selection. The default is ``LUMPED``.
907+
"""Part libraries selection. The default is ``LUMPED`` if not specified.
902908
903909
The ``PartLibraries`` enum provides a list of all options.
904910
@@ -1276,22 +1282,37 @@ def update_inductor_capacitor_tolerances(self): # pragma: no cover
12761282

12771283
@property
12781284
def substrate_type(self) -> SubstrateType:
1279-
"""Substrate type of the filter.
1285+
"""Substrate type of the filter. The default is ``MICROSTRIP`` if not specified.
12801286
12811287
The ``SubstrateType`` enum provides a list of all substrate types.
12821288
12831289
Returns
12841290
-------
12851291
:enum:`SubstrateType`
12861292
"""
1287-
type_string = self._dll_interface.get_string(self._dll.getSubstrateType)
1288-
return self._dll_interface.string_to_enum(SubstrateType, type_string)
1293+
# The 25R2 DLL is updated to return the enum value directly
1294+
if self._dll_interface.api_version() >= "2025.2":
1295+
index = c_int()
1296+
substrate_type_list = list(SubstrateType)
1297+
status = self._dll.getSubstrateType(byref(index))
1298+
self._dll_interface.raise_error(status)
1299+
substrate_type = substrate_type_list[index.value]
1300+
return substrate_type
1301+
# The 25R1 DLL returns the substrate type as a string
1302+
else:
1303+
type_string = self._dll_interface.get_string(self._dll.getSubstrateType)
1304+
return self._dll_interface.string_to_enum(SubstrateType, type_string)
12891305

12901306
@substrate_type.setter
12911307
def substrate_type(self, substrate_type: SubstrateType):
1292-
if substrate_type:
1308+
if self._dll_interface.api_version() >= "2025.2":
1309+
# The 25R2 DLL is updated to accept the enum value directly
1310+
status = self._dll.setSubstrateType(substrate_type.value)
1311+
else:
1312+
# The 25R1 DLL accepts substrate type as a string
12931313
string_value = self._dll_interface.enum_to_string(substrate_type)
1294-
self._dll_interface.set_string(self._dll.setSubstrateType, string_value)
1314+
status = self._dll_interface.set_string(self._dll.setSubstrateType, string_value)
1315+
self._dll_interface.raise_error(status)
12951316

12961317
@property
12971318
def substrate_er(self) -> Union[SubstrateType, str]:
@@ -1323,7 +1344,7 @@ def substrate_er(self, substrate_input):
13231344
substrate_er_value = substrate_input
13241345
substrate_er_index = -1
13251346
else:
1326-
raise ValueError("Invalid substrate input. Must be a SubstrateEr enum member or a string.")
1347+
raise ValueError("Invalid substrate input. Must be a SubstrateEr enum member or a string")
13271348
substrate_er_value_bytes = bytes(substrate_er_value, "ascii")
13281349
status = self._dll.setEr(substrate_er_value_bytes, substrate_er_index)
13291350
self._dll_interface.raise_error(status)
@@ -1357,7 +1378,7 @@ def substrate_resistivity(self, substrate_input):
13571378
substrate_resistivity_value = substrate_input
13581379
substrate_resistivity_index = -1
13591380
else:
1360-
raise ValueError("Invalid substrate input. Must be a SubstrateResistivity enum member or a string.")
1381+
raise ValueError("Invalid substrate input. Must be a SubstrateResistivity enum member or a string")
13611382
substrate_resistivity_value_bytes = bytes(substrate_resistivity_value, "ascii")
13621383
status = self._dll.setResistivity(substrate_resistivity_value_bytes, substrate_resistivity_index)
13631384
self._dll_interface.raise_error(status)
@@ -1391,7 +1412,7 @@ def substrate_loss_tangent(self, substrate_input):
13911412
substrate_loss_tangent_value = substrate_input
13921413
substrate_loss_tangent_index = -1
13931414
else:
1394-
raise ValueError("Invalid substrate input. Must be a SubstrateEr enum member or a string.")
1415+
raise ValueError("Invalid substrate input. Must be a SubstrateEr enum member or a string")
13951416
substrate_loss_tangent_value_bytes = bytes(substrate_loss_tangent_value, "ascii")
13961417
status = self._dll.setLossTangent(substrate_loss_tangent_value_bytes, substrate_loss_tangent_index)
13971418
self._dll_interface.raise_error(status)

src/ansys/aedt/core/filtersolutions_core/ideal_response.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,10 @@ def _frequency_response_getter(self, column: FrequencyResponseColumn):
213213
"""
214214
size = c_int()
215215
status = self._dll.getIdealFrequencyResponseSize(byref(size))
216-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
216+
self._dll_interface.raise_error(status)
217217
array = (c_double * size.value)()
218218
status = self._dll.getIdealFrequencyResponse(array, size.value, column.value)
219-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
219+
self._dll_interface.raise_error(status)
220220
values = [float(val) for val in array]
221221
return values
222222

@@ -235,10 +235,10 @@ def _time_response_getter(self, column: TimeResponseColumn):
235235
"""
236236
size = c_int()
237237
status = self._dll.getIdealTimeResponseSize(byref(size))
238-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
238+
self._dll_interface.raise_error(status)
239239
array = (c_double * size.value)()
240240
status = self._dll.getIdealTimeResponse(array, size.value, column.value)
241-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
241+
self._dll_interface.raise_error(status)
242242
values = [float(val) for val in array]
243243
return values
244244

@@ -257,10 +257,10 @@ def _sparamaters_response_getter(self, column: SParametersResponseColumn):
257257
"""
258258
size = c_int()
259259
status = self._dll.getIdealSParamatersResponseSize(byref(size))
260-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
260+
self._dll_interface.raise_error(status)
261261
array = (c_double * size.value)()
262262
status = self._dll.getIdealSParamatersResponse(array, size.value, column.value)
263-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
263+
self._dll_interface.raise_error(status)
264264
values = [float(val) for val in array]
265265
return values
266266

@@ -280,10 +280,10 @@ def _pole_zeros_response_getter(self, column: PoleZerosResponseColumn):
280280
"""
281281
size = c_int()
282282
status = self._dll.getIdealPoleZerosResponseSize(byref(size), column.value)
283-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
283+
self._dll_interface.raise_error(status)
284284
array = (c_double * size.value)()
285285
status = self._dll.getIdealPoleZerosResponse(array, size.value, column.value)
286-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
286+
self._dll_interface.raise_error(status)
287287
values = [float(val) for val in array]
288288
return values
289289

@@ -302,7 +302,7 @@ def transfer_function_response(self):
302302
"""
303303
size = c_int()
304304
status = self._dll.getIdealTransferFunctionResponseSize(byref(size))
305-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
305+
self._dll_interface.raise_error(status)
306306
transfer_function_response_string = self._dll_interface.get_string(
307307
self._dll.getIdealTransferFunctionResponse, max_size=size.value
308308
)
@@ -319,13 +319,13 @@ def vsg_analysis_enabled(self) -> bool:
319319

320320
vsg_analysis_enabled = c_bool()
321321
status = self._dll.getVSGAnalsyis(byref(vsg_analysis_enabled))
322-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
322+
self._dll_interface.raise_error(status)
323323
return bool(vsg_analysis_enabled.value)
324324

325325
@vsg_analysis_enabled.setter
326326
def vsg_analysis_enabled(self, filter_vsg_analysis_enabled: bool):
327327
status = self._dll.setVSGAnalsyis(filter_vsg_analysis_enabled)
328-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
328+
self._dll_interface.raise_error(status)
329329

330330
def frequency_response(
331331
self,

src/ansys/aedt/core/filtersolutions_core/lumped_nodes_and_leads.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,13 @@ def c_node_compensate(self) -> bool:
194194
"""
195195
c_node_compensate = c_bool()
196196
status = self._dll.getLumpedCNodeLedComensate(byref(c_node_compensate))
197-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
197+
self._dll_interface.raise_error(status)
198198
return bool(c_node_compensate.value)
199199

200200
@c_node_compensate.setter
201201
def c_node_compensate(self, c_node_compensate: bool):
202202
status = self._dll.setLumpedCNodeLedComensate(c_node_compensate)
203-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
203+
self._dll_interface.raise_error(status)
204204

205205
@property
206206
def l_node_compensate(self) -> bool:
@@ -212,10 +212,10 @@ def l_node_compensate(self) -> bool:
212212
"""
213213
l_node_compensate = c_bool()
214214
status = self._dll.getLumpedLNodeLedComensate(byref(l_node_compensate))
215-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
215+
self._dll_interface.raise_error(status)
216216
return bool(l_node_compensate.value)
217217

218218
@l_node_compensate.setter
219219
def l_node_compensate(self, l_node_compensate: bool):
220220
status = self._dll.setLumpedLNodeLedComensate(l_node_compensate)
221-
ansys.aedt.core.filtersolutions_core._dll_interface().raise_error(status)
221+
self._dll_interface.raise_error(status)

0 commit comments

Comments
 (0)