Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/changelog.d/4553.miscellaneous.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Update deprecate arguments.
38 changes: 22 additions & 16 deletions src/ansys/fluent/core/file_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
_to_vector_field_name,
)
from ansys.fluent.core.utils.deprecate import all_deprecators
from ansys.fluent.core.utils.deprecate_new import deprecate_arguments


class InvalidMultiPhaseFieldName(ValueError):
Expand Down Expand Up @@ -87,6 +88,19 @@ def _data_type_convertor(args_dict):
return args_dict


def _custom_converter(kwargs, old_arg_list, new_arg_list):
for old_group, new_group in zip(old_arg_list, new_arg_list):
if old_group == ["surface_names"] and new_group == ["surfaces"]:
kwargs["surfaces"] = kwargs.pop("surface_names", None)
elif old_group == ["surface_ids"] and new_group == ["surfaces"]:
kwargs["surfaces"] = kwargs.pop("surface_ids", None)
elif old_group == ["provide_vertices", "provide_faces"] and new_group == [
"data_types"
]:
kwargs = _data_type_convertor(kwargs)
return kwargs


class BatchFieldData:
"""Provides access to Fluent field data on surfaces collected via batches."""

Expand Down Expand Up @@ -253,23 +267,15 @@ def get_surface_ids(self, surfaces: List[str | int]) -> List[int]:
surfaces=surfaces,
)

@all_deprecators(
deprecate_arg_mappings=[
{
"old_arg": "surface_names",
"new_arg": "surfaces",
"converter": lambda old_arg_val: old_arg_val,
},
{
"old_arg": "surface_ids",
"new_arg": "surfaces",
"converter": lambda old_arg_val: old_arg_val,
},
@deprecate_arguments(
old_arg_list=[
["surface_names"],
["surface_ids"],
["provide_vertices", "provide_faces"],
],
data_type_converter=_data_type_convertor,
deprecated_version="v0.25.0",
deprecated_reason="Old arguments 'surface_ids' and 'surface_names' are deprecated. Use 'surfaces' instead.",
warn_message="'add_surfaces_request' is deprecated, use 'add_requests' instead.",
new_arg_list=[["surfaces"], ["surfaces"], ["data_types"]],
version="v0.25.0",
converter=_custom_converter,
)
def add_surfaces_request(
self,
Expand Down
39 changes: 20 additions & 19 deletions src/ansys/fluent/core/launcher/launcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
from ansys.fluent.core.session_pure_meshing import PureMeshing
from ansys.fluent.core.session_solver import Solver
from ansys.fluent.core.session_solver_icing import SolverIcing
from ansys.fluent.core.utils.deprecate import all_deprecators
from ansys.fluent.core.utils.deprecate_new import deprecate_arguments
from ansys.fluent.core.utils.fluent_version import FluentVersion

_THIS_DIR = os.path.dirname(__file__)
Expand Down Expand Up @@ -125,24 +125,25 @@ def _version_to_dimension(old_arg_val):
return None


# pylint: disable=unused-argument
@all_deprecators(
deprecate_arg_mappings=[
{
"old_arg": "show_gui",
"new_arg": "ui_mode",
"converter": _show_gui_to_ui_mode,
},
{
"old_arg": "version",
"new_arg": "dimension",
"converter": _version_to_dimension,
},
],
data_type_converter=None,
deprecated_version="v0.22.dev0",
deprecated_reason="'show_gui' and 'version' are deprecated. Use 'ui_mode' and 'dimension' instead.",
warn_message="",
def _custom_converter(kwargs, old_arg_list, new_arg_list):
for old_group, new_group in zip(old_arg_list, new_arg_list):
if old_group == ["show_gui"] and new_group == ["ui_mode"]:
old_val = kwargs.pop("show_gui", None)
if old_val is not None:
kwargs["ui_mode"] = _show_gui_to_ui_mode(old_val, **kwargs)
else:
kwargs["ui_mode"] = None
elif old_group == ["version"] and new_group == ["dimension"]:
old_val = kwargs.pop("version", None)
kwargs["dimension"] = _version_to_dimension(old_val)
return kwargs


@deprecate_arguments(
old_arg_list=[["show_gui"], ["version"]],
new_arg_list=[["ui_mode"], ["dimension"]],
version="v0.22.0",
converter=_custom_converter,
)
def launch_fluent(
product_version: FluentVersion | str | float | int | None = None,
Expand Down
48 changes: 32 additions & 16 deletions src/ansys/fluent/core/services/field_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
)
from ansys.fluent.core.services.streaming import StreamingService
from ansys.fluent.core.utils.deprecate import all_deprecators
from ansys.fluent.core.utils.deprecate_new import deprecate_arguments

logger = logging.getLogger("pyfluent.field_data")

Expand Down Expand Up @@ -413,6 +414,24 @@ def _data_type_convertor(args_dict):
return args_dict


def _custom_converter(kwargs, old_arg_list, new_arg_list):
for old_group, new_group in zip(old_arg_list, new_arg_list):
if old_group == ["surface_names"] and new_group == ["surfaces"]:
if "surface_names" in kwargs:
kwargs["surfaces"] = kwargs.pop("surface_names")
elif old_group == ["surface_ids"] and new_group == ["surfaces"]:
if "surface_ids" in kwargs:
kwargs["surfaces"] = kwargs.pop("surface_ids")
elif old_group == [
"provide_vertices",
"provide_faces",
"provide_faces_centroid",
"provide_faces_normal",
] and new_group == ["data_types"]:
kwargs = _data_type_convertor(kwargs)
return kwargs


class _FetchFieldData:

@staticmethod
Expand Down Expand Up @@ -783,23 +802,20 @@ def _add_pathlines_fields_request(
)
)

@all_deprecators(
deprecate_arg_mappings=[
{
"old_arg": "surface_names",
"new_arg": "surfaces",
"converter": lambda old_arg_val: old_arg_val or [],
},
{
"old_arg": "surface_ids",
"new_arg": "surfaces",
"converter": lambda old_arg_val: old_arg_val or [],
},
@deprecate_arguments(
old_arg_list=[
["surface_names"],
["surface_ids"],
[
"provide_vertices",
"provide_faces",
"provide_faces_centroid",
"provide_faces_normal",
],
],
data_type_converter=_data_type_convertor,
deprecated_version="v0.23.dev0",
deprecated_reason="Old arguments 'surface_ids' and 'surface_names' are deprecated. Use 'surfaces' instead.",
warn_message="'add_surfaces_request' is deprecated, use 'add_requests' instead",
new_arg_list=[["surfaces"], ["surfaces"], ["data_types"]],
version="v0.23.0",
converter=_custom_converter,
)
def add_surfaces_request(
self,
Expand Down
118 changes: 118 additions & 0 deletions src/ansys/fluent/core/utils/deprecate_new.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
"""Deprecate Arguments."""

import functools
from typing import Any, Callable
import warnings

from deprecated.sphinx import deprecated

from ansys.fluent.core.pyfluent_warnings import PyFluentDeprecationWarning


def deprecate_arguments(
old_arg_list: list[list[str]],
new_arg_list: list[list[str]],
version: str,
converter: Callable | None = None,
warning_cls: type[Warning] = PyFluentDeprecationWarning,
) -> Callable:
"""
Deprecate multiple arguments (possibly grouped) and automatically replace them with new ones.
Parameters
----------
old_arg_list : list[list[str]]
Each inner list represents a group of old argument names being deprecated.
new_arg_list : list[list[str]]
Each inner list represents a corresponding group of new argument names.
version : str
The version in which the arguments were deprecated.
converter : callable, optional
Custom converter function that takes (kwargs, old_arg_list, new_arg_list)
and returns modified kwargs.
If not provided, a default converter is used.
warning_cls : warnings, optional
The warning class to use for deprecation warnings.
Raises
------
ValueError
For arguments mismatch.
"""

# Validation
if len(old_arg_list) != len(new_arg_list):
raise ValueError(
f"old_arg_list and new_arg_list must have the same number of groups. "
f"Got {len(old_arg_list)} vs {len(new_arg_list)}."
)

# Default converter
def _default_converter(
kwargs: dict[str, Any],
old_param_list: list[list[str]],
new_param_list: list[list[str]],
) -> dict[str, Any]:
"""Default converter that maps all old args to new args one-to-one across groups."""
for old_group, new_group in zip(old_param_list, new_param_list):
if len(old_group) > len(new_group):
raise ValueError(
f"Cannot automatically convert {old_group}{new_group}: "
"too many old args. Provide a custom converter."
)

for i, old_arg in enumerate(old_group):
if old_arg in kwargs:
old_val = kwargs.pop(old_arg)
target_arg = new_group[i]
if target_arg in kwargs:
warnings.warn(
f"Both deprecated argument '{old_arg}' and new argument '{target_arg}' were provided. "
f"Ignoring {old_arg}."
)
else:
kwargs[target_arg] = old_val
return kwargs

converter = converter or _default_converter

def _message(old: str, new: str) -> str:
if "," in old:
return f"Arguments {old} are deprecated; use {new} instead."
else:
return f"Argument {old} is deprecated; use {new} instead."

def build_warning_messages() -> list[str]:
messages = []
for old_group, new_group in zip(old_arg_list, new_arg_list):
old_str = ", ".join(f"'{o}'" for o in old_group)
new_str = ", ".join(f"'{n}'" for n in new_group)
messages.append(_message(old_str, new_str))
return messages

reason = " ".join(build_warning_messages())

def decorator(func: Callable):
# Documentation
deprecated_func = deprecated(version=version, reason=reason)(func)

@functools.wraps(deprecated_func)
def wrapper(*args, **kwargs):
# Issue warnings for all relevant mappings
for old_group, new_group in zip(old_arg_list, new_arg_list):
if any(arg in kwargs for arg in old_group):
old_str = ", ".join(f"'{o}'" for o in old_group)
new_str = ", ".join(f"'{n}'" for n in new_group)
warnings.warn(
_message(old_str, new_str),
warning_cls,
stacklevel=2,
)

# Perform conversion (default or custom)
kwargs = converter(kwargs, old_arg_list, new_arg_list)
return deprecated_func(*args, **kwargs)

return wrapper

return decorator
Loading