Skip to content

Commit 3fe7b68

Browse files
chore: Enable beta features (#4235)
Document beta features access. Update behavior so that beta features are available but not usable before switching. --------- Co-authored-by: pyansys-ci-bot <[email protected]>
1 parent a253805 commit 3fe7b68

File tree

7 files changed

+99
-16
lines changed

7 files changed

+99
-16
lines changed

doc/changelog.d/4235.maintenance.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Enable beta features
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
.. _ref_beta_feature_access:
2+
3+
Beta features
4+
=============
5+
6+
PyFluent provides access to experimental capabilities of Fluent via **beta features**.
7+
These features are disabled by default and can be enabled at runtime by calling
8+
the `enable_beta_features()` method on a session object.
9+
Once activated, the additional beta methods and workflows become available.
10+
11+
Currently, limited number of beta features are available in both **Meshing** and **Solver** sessions.
12+
13+
Meshing Session
14+
---------------
15+
16+
The **Topology-Based Meshing** workflow is available as a beta feature in meshing mode.
17+
18+
To enable and access it:
19+
20+
.. code-block:: python
21+
22+
>>> import ansys.fluent.core as pyfluent
23+
>>> meshing_session = pyfluent.launch_fluent(mode="meshing")
24+
25+
>>> # Feature is available before enabling beta features, but unusable and raises 'BetaFeaturesNotEnabled'
26+
>>> assert hasattr(meshing_session, "topology_based")
27+
>>> assert "topology_based" in dir(meshing_session)
28+
29+
>>> topo_meshing = meshing_session.topology_based()
30+
ansys.fluent.core.exceptions.BetaFeaturesNotEnabled: The feature 'topology_based' requires 'enable_beta_features' flag to be enabled.
31+
32+
>>> # Enable beta features
33+
>>> meshing_session.enable_beta_features()
34+
35+
>>> # Feature is now usable
36+
>>> topo_meshing = meshing_session.topology_based()
37+
>>> topo_meshing
38+
<ansys.fluent.core.meshing.meshing_workflow.TopologyBasedMeshingWorkflow object at 0x0000024D574410F0>
39+
40+
41+
Solver Session
42+
--------------
43+
44+
The ability to **switch to meshing mode** from a solver session is a beta feature.
45+
46+
To enable and use it:
47+
48+
.. code-block:: python
49+
50+
>>> solver_session = pyfluent.launch_fluent()
51+
52+
>>> # Method available before enabling beta features, but unusable and raises 'BetaFeaturesNotEnabled'
53+
>>> assert hasattr(solver_session, "switch_to_meshing")
54+
55+
>>> switched_meshing_session = solver_session.switch_to_meshing()
56+
ansys.fluent.core.exceptions.BetaFeaturesNotEnabled: The feature 'switch_to_meshing' requires 'enable_beta_features' flag to be enabled.
57+
58+
>>> # Enable beta features
59+
>>> solver_session.enable_beta_features()
60+
61+
>>> # Method is now usable
62+
>>> switched_meshing_session = solver_session.switch_to_meshing()
63+
>>> assert switched_meshing_session.is_active()
64+
>>> assert not solver_session.is_active()
65+
66+
67+
.. note::
68+
69+
Beta features are subject to change and may not be fully supported in all versions of Fluent.
70+
Use them with caution in production workflows. Feedback on beta features is encouraged and
71+
helps improve future releases.

doc/source/user_guide/user_guide_contents.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ User guide
2525
usability
2626
make_container_image
2727
legacy/legacy_contents
28+
beta_feature_access
2829

2930

3031
Welcome to the PyFluent user guide. This guide helps you understand how to use PyFluent to

src/ansys/fluent/core/exceptions.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def __init__(
3434
context: str | None = None,
3535
name: Any | None = None,
3636
allowed_values: Iterable[Any] | None = None,
37-
):
37+
) -> None:
3838
"""Initialize DisallowedValuesError."""
3939
super().__init__(
4040
allowed_name_error_message(
@@ -50,3 +50,15 @@ class InvalidArgument(ValueError):
5050
"""Raised when an argument value is inappropriate."""
5151

5252
pass
53+
54+
55+
class BetaFeaturesNotEnabled(RuntimeError):
56+
"""Raised when a beta feature is accessed without enabling beta features."""
57+
58+
def __init__(self, feature_name: str | None = None) -> None:
59+
message = (
60+
f"The feature '{feature_name}' is not available until 'enable_beta_features()' has been called."
61+
if feature_name
62+
else "This feature is not available until 'enable_beta_features()' has been called."
63+
)
64+
super().__init__(message)

src/ansys/fluent/core/session_pure_meshing.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import ansys.fluent.core as pyfluent
2929
from ansys.fluent.core.data_model_cache import DataModelCache, NameKey
30+
from ansys.fluent.core.exceptions import BetaFeaturesNotEnabled
3031
from ansys.fluent.core.fluent_connection import FluentConnection
3132
from ansys.fluent.core.services import SchemeEval
3233
from ansys.fluent.core.session import BaseSession
@@ -179,7 +180,7 @@ def topology_based(self):
179180
If beta features are not enabled in Fluent.
180181
"""
181182
if not self._is_beta_enabled:
182-
raise AttributeError("Topology-based Meshing is a beta feature in Fluent.")
183+
raise BetaFeaturesNotEnabled("Topology-based meshing")
183184
return self._base_meshing.topology_based_meshing_workflow()
184185

185186
@property
@@ -237,8 +238,3 @@ def transfer_mesh_to_solvers(
237238
clean_up_mesh_file,
238239
overwrite_previous,
239240
)
240-
241-
def __dir__(self):
242-
if self._fluent_connection is not None and self._is_beta_enabled is False:
243-
return sorted(set(super().__dir__()) - {"topology_based"})
244-
return super().__dir__()

src/ansys/fluent/core/session_solver.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
from ansys.api.fluent.v0 import svar_pb2 as SvarProtoModule
3232
import ansys.fluent.core as pyfluent
33+
from ansys.fluent.core.exceptions import BetaFeaturesNotEnabled
3334
from ansys.fluent.core.pyfluent_warnings import PyFluentDeprecationWarning
3435
from ansys.fluent.core.services import SchemeEval, service_creator
3536
from ansys.fluent.core.services.field_data import ZoneInfo, ZoneType
@@ -358,8 +359,6 @@ def __dir__(self):
358359
"svar_info",
359360
"reduction",
360361
}
361-
if self._fluent_connection is not None and self._is_beta_enabled is False:
362-
return sorted(dir_list - {"switch_to_meshing"})
363362
return sorted(dir_list)
364363

365364
def switch_to_meshing(self):
@@ -376,9 +375,7 @@ def switch_to_meshing(self):
376375
Meshing
377376
"""
378377
if not self._is_beta_enabled:
379-
raise AttributeError(
380-
"Switching to meshing mode is a beta feature in Fluent."
381-
)
378+
raise BetaFeaturesNotEnabled("switch_to_meshing")
382379
from ansys.fluent.core.session_meshing import Meshing
383380

384381
self.settings.switch_to_meshing_mode()

tests/test_session.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
from ansys.api.fluent.v0.scheme_pointer_pb2 import SchemePointer
4040
import ansys.fluent.core as pyfluent
4141
from ansys.fluent.core import connect_to_fluent, examples, session
42+
from ansys.fluent.core.exceptions import BetaFeaturesNotEnabled
4243
from ansys.fluent.core.fluent_connection import FluentConnection, PortNotProvided
4344
from ansys.fluent.core.launcher.error_handler import LaunchFluentError
4445
from ansys.fluent.core.pyfluent_warnings import PyFluentDeprecationWarning
@@ -753,11 +754,13 @@ def test_solver_attr_lookup(new_solver_session):
753754
@pytest.mark.fluent_version(">=25.2")
754755
def test_beta_meshing_session(new_meshing_session_wo_exit):
755756
meshing = new_meshing_session_wo_exit
756-
assert "topology_based" not in dir(meshing)
757-
with pytest.raises(AttributeError):
757+
assert "topology_based" in dir(meshing)
758+
assert hasattr(meshing, "topology_based")
759+
with pytest.raises(BetaFeaturesNotEnabled):
758760
tp = meshing.topology_based()
759761
meshing.enable_beta_features()
760762
assert "topology_based" in dir(meshing)
763+
assert hasattr(meshing, "topology_based")
761764
tp = meshing.topology_based()
762765
assert tp
763766

@@ -772,11 +775,13 @@ def test_beta_meshing_session(new_meshing_session_wo_exit):
772775
def test_beta_solver_session(new_solver_session_wo_exit):
773776
solver = new_solver_session_wo_exit
774777
assert solver.is_active() is True
775-
assert "switch_to_meshing" not in dir(solver)
776-
with pytest.raises(AttributeError):
778+
assert "switch_to_meshing" in dir(solver)
779+
assert hasattr(solver, "switch_to_meshing")
780+
with pytest.raises(BetaFeaturesNotEnabled):
777781
meshing = solver.switch_to_meshing()
778782
solver.enable_beta_features()
779783
assert "switch_to_meshing" in dir(solver)
784+
assert hasattr(solver, "switch_to_meshing")
780785
meshing = solver.switch_to_meshing()
781786

782787
assert solver.is_active() is False

0 commit comments

Comments
 (0)