Skip to content

Commit 8355d6c

Browse files
FIX: Exception error for multiple design (#5937)
Co-authored-by: pyansys-ci-bot <92810346+pyansys-ci-bot@users.noreply.github.com>
1 parent 89732e3 commit 8355d6c

4 files changed

Lines changed: 80 additions & 3 deletions

File tree

doc/changelog.d/5937.fixed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Exception error for multiple design

src/ansys/aedt/core/filtersolutions.py

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2323
# SOFTWARE.
2424

25+
import warnings
26+
2527
from ansys.aedt.core import settings
2628
import ansys.aedt.core.filtersolutions_core
2729
from ansys.aedt.core.filtersolutions_core.attributes import Attributes
@@ -45,11 +47,19 @@
4547

4648

4749
class FilterDesignBase:
48-
"""Provides the `FilterSolutions` main parameters applicable for all design types.
49-
This class has access to ideal filter attributes and calculated output parameters.
50-
"""
50+
"""Provides the `FilterSolutions` main parameters applicable for all design types."""
51+
52+
_active_design = None
5153

5254
def __init__(self, version=None):
55+
if FilterDesignBase._active_design:
56+
warnings.warn(
57+
"FilterSolutions API currently supports only one design at a time. \n"
58+
"Opening a new design will overwrite the existing design with default values.",
59+
UserWarning,
60+
)
61+
FilterDesignBase._active_design.close()
62+
FilterDesignBase._active_design = self
5363
self.version = version if version else settings.aedt_version
5464
ansys.aedt.core.filtersolutions_core._dll_interface(version)
5565
self.attributes = Attributes()
@@ -59,6 +69,33 @@ def __init__(self, version=None):
5969
self.transmission_zeros_bandwidth = TransmissionZeros(TableFormat.BANDWIDTH)
6070
self.export_to_aedt = ExportToAedt()
6171

72+
def close(self):
73+
"""Closes the current design and clears the active design."""
74+
if FilterDesignBase._active_design == self:
75+
print(f"Closing design: {self}")
76+
self._cleanup_resources()
77+
FilterDesignBase._active_design = None
78+
79+
def _cleanup_resources(self):
80+
"""Perform cleanup operations for the design."""
81+
print("Cleaning up resources...")
82+
self.attributes = None
83+
self.ideal_response = None
84+
self.graph_setup = None
85+
self.transmission_zeros_ratio = None
86+
self.transmission_zeros_bandwidth = None
87+
self.export_to_aedt = None
88+
self.source_impedance_table = None
89+
self.load_impedance_table = None
90+
self.multiple_bands_table = None
91+
self.optimization_goals_table = None
92+
self.topology = None
93+
self.parasitics = None
94+
self.leads_and_nodes = None
95+
self.substrate = None
96+
self.geometry = None
97+
self.radial = None
98+
6299

63100
class LumpedDesign(FilterDesignBase):
64101
"""Provides the `FilterSolutions` application interface for lumped filter designs.

tests/system/solvers/test_45_FilterSolutions/test_filter/test_attributes.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2323
# SOFTWARE.
2424

25+
import ansys.aedt.core.filtersolutions
2526
from ansys.aedt.core.filtersolutions_core.attributes import BesselRipplePercentage
2627
from ansys.aedt.core.filtersolutions_core.attributes import DiplexerType
2728
from ansys.aedt.core.filtersolutions_core.attributes import FilterClass
@@ -50,6 +51,24 @@
5051
@pytest.mark.skipif(is_linux, reason="FilterSolutions API is not supported on Linux.")
5152
@pytest.mark.skipif(config["desktopVersion"] < "2025.1", reason="Skipped on versions earlier than 2025.1")
5253
class TestClass:
54+
def test_multiple_designs(self, lumped_design):
55+
lumped_design.attributes.filter_class = FilterClass.BAND_PASS
56+
assert lumped_design.attributes.filter_class == FilterClass.BAND_PASS
57+
lumped_design.attributes.filter_type = FilterType.ELLIPTIC
58+
assert lumped_design.attributes.filter_type == FilterType.ELLIPTIC
59+
lumped_design.attributes.filter_order = 8
60+
assert lumped_design.attributes.filter_order == 8
61+
with pytest.warns(
62+
UserWarning,
63+
match="FilterSolutions API currently supports only one design at a time. \n"
64+
"Opening a new design will overwrite the existing design with default values.",
65+
):
66+
new_lumped_design = ansys.aedt.core.filtersolutions.LumpedDesign()
67+
new_lumped_design = ansys.aedt.core.filtersolutions.LumpedDesign()
68+
assert new_lumped_design.attributes.filter_class == FilterClass.LOW_PASS
69+
assert new_lumped_design.attributes.filter_type == FilterType.BUTTERWORTH
70+
assert new_lumped_design.attributes.filter_order == 5
71+
5372
def test_filter_type(self, lumped_design):
5473
assert lumped_design.attributes.filter_type == FilterType.BUTTERWORTH
5574
assert hasattr(FilterType, "CHEBY") is False

tests/system/solvers/test_45_FilterSolutions/test_raise_error.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,23 @@ def test_raise_error(self, lumped_design):
3636
with pytest.raises(RuntimeError) as info:
3737
lumped_design.transmission_zeros_ratio.row(0)
3838
assert info.value.args[0] == test_transmission_zeros.TestClass.no_transmission_zero_msg
39+
40+
@pytest.mark.skipif(config["desktopVersion"] < "2025.2", reason="Skipped on versions earlier than 2025.2")
41+
def test_close_lumped_design(self, lumped_design):
42+
lumped_design.close()
43+
for attr_name in dir(lumped_design):
44+
if attr_name.startswith("_") or callable(getattr(lumped_design, attr_name)):
45+
continue
46+
if attr_name in ["version"]:
47+
continue
48+
assert getattr(lumped_design, attr_name) is None
49+
50+
@pytest.mark.skipif(config["desktopVersion"] < "2025.2", reason="Skipped on versions earlier than 2025.2")
51+
def test_close_distributed_design(self, distributed_design):
52+
distributed_design.close()
53+
for attr_name in dir(distributed_design):
54+
if attr_name.startswith("_") or callable(getattr(distributed_design, attr_name)):
55+
continue
56+
if attr_name in ["version"]:
57+
continue
58+
assert getattr(distributed_design, attr_name) is None

0 commit comments

Comments
 (0)