ansys-fluent-core 0.30.dev2__py3-none-any.whl → 0.30.dev4__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 ansys-fluent-core might be problematic. Click here for more details.

Files changed (78) hide show
  1. ansys/fluent/core/__init__.py +14 -3
  2. ansys/fluent/core/codegen/datamodelgen.py +17 -3
  3. ansys/fluent/core/codegen/settingsgen.py +26 -4
  4. ansys/fluent/core/codegen/walk_api.py +11 -1
  5. ansys/fluent/core/exceptions.py +7 -4
  6. ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
  7. ansys/fluent/core/generated/datamodel_242/meshing_utilities.pyi +990 -0
  8. ansys/fluent/core/generated/datamodel_251/meshing_utilities.pyi +1002 -0
  9. ansys/fluent/core/generated/datamodel_252/meshing.py +7 -0
  10. ansys/fluent/core/generated/datamodel_252/meshing_utilities.pyi +1007 -0
  11. ansys/fluent/core/generated/datamodel_252/preferences.py +132 -3
  12. ansys/fluent/core/generated/fluent_version_252.py +3 -3
  13. ansys/fluent/core/generated/meshing/tui_252.py +111 -12
  14. ansys/fluent/core/generated/solver/settings_222.py +166 -170
  15. ansys/fluent/core/generated/solver/settings_222.pyi +10 -8
  16. ansys/fluent/core/generated/solver/settings_231.py +551 -598
  17. ansys/fluent/core/generated/solver/settings_231.pyi +40 -38
  18. ansys/fluent/core/generated/solver/settings_232.py +689 -736
  19. ansys/fluent/core/generated/solver/settings_232.pyi +39 -37
  20. ansys/fluent/core/generated/solver/settings_241.py +1365 -1439
  21. ansys/fluent/core/generated/solver/settings_241.pyi +1071 -1074
  22. ansys/fluent/core/generated/solver/settings_242.py +2852 -3098
  23. ansys/fluent/core/generated/solver/settings_242.pyi +2059 -2151
  24. ansys/fluent/core/generated/solver/settings_251.py +3656 -3914
  25. ansys/fluent/core/generated/solver/settings_251.pyi +2915 -3008
  26. ansys/fluent/core/generated/solver/settings_252.py +5894 -5707
  27. ansys/fluent/core/generated/solver/settings_252.pyi +4411 -4297
  28. ansys/fluent/core/generated/solver/tui_252.py +205 -25
  29. ansys/fluent/core/get_build_details.py +2 -2
  30. ansys/fluent/core/launcher/container_launcher.py +7 -1
  31. ansys/fluent/core/launcher/fluent_container.py +3 -2
  32. ansys/fluent/core/launcher/pim_launcher.py +7 -1
  33. ansys/fluent/core/launcher/slurm_launcher.py +7 -1
  34. ansys/fluent/core/launcher/standalone_launcher.py +7 -1
  35. ansys/fluent/core/services/datamodel_se.py +28 -23
  36. ansys/fluent/core/services/datamodel_tui.py +1 -1
  37. ansys/fluent/core/services/field_data.py +17 -5
  38. ansys/fluent/core/session_base_meshing.py +3 -3
  39. ansys/fluent/core/session_meshing.py +4 -4
  40. ansys/fluent/core/session_meshing.pyi +9 -9
  41. ansys/fluent/core/session_pure_meshing.pyi +9 -9
  42. ansys/fluent/core/session_solver.py +1 -1
  43. ansys/fluent/core/session_solver.pyi +5 -5
  44. ansys/fluent/core/solver/_docstrings.py +244 -0
  45. ansys/fluent/core/solver/error_message.py +7 -12
  46. ansys/fluent/core/solver/flobject.py +86 -27
  47. ansys/fluent/core/utils/fluent_version.py +2 -3
  48. ansys/fluent/core/utils/test_grpc_connection.py +139 -0
  49. ansys/fluent/core/workflow.py +1 -0
  50. {ansys_fluent_core-0.30.dev2.dist-info → ansys_fluent_core-0.30.dev4.dist-info}/METADATA +12 -12
  51. {ansys_fluent_core-0.30.dev2.dist-info → ansys_fluent_core-0.30.dev4.dist-info}/RECORD +77 -73
  52. ansys/fluent/core/_version.py +0 -40
  53. /ansys/fluent/core/generated/datamodel_222/{PartManagement.py → part_management.py} +0 -0
  54. /ansys/fluent/core/generated/datamodel_222/{PMFileManagement.py → pm_file_management.py} +0 -0
  55. /ansys/fluent/core/generated/datamodel_231/{PartManagement.py → part_management.py} +0 -0
  56. /ansys/fluent/core/generated/datamodel_231/{PMFileManagement.py → pm_file_management.py} +0 -0
  57. /ansys/fluent/core/generated/datamodel_231/{solverworkflow.py → solver_workflow.py} +0 -0
  58. /ansys/fluent/core/generated/datamodel_232/{PartManagement.py → part_management.py} +0 -0
  59. /ansys/fluent/core/generated/datamodel_232/{PMFileManagement.py → pm_file_management.py} +0 -0
  60. /ansys/fluent/core/generated/datamodel_232/{solverworkflow.py → solver_workflow.py} +0 -0
  61. /ansys/fluent/core/generated/datamodel_241/{PartManagement.py → part_management.py} +0 -0
  62. /ansys/fluent/core/generated/datamodel_241/{PMFileManagement.py → pm_file_management.py} +0 -0
  63. /ansys/fluent/core/generated/datamodel_241/{solverworkflow.py → solver_workflow.py} +0 -0
  64. /ansys/fluent/core/generated/datamodel_242/{MeshingUtilities.py → meshing_utilities.py} +0 -0
  65. /ansys/fluent/core/generated/datamodel_242/{PartManagement.py → part_management.py} +0 -0
  66. /ansys/fluent/core/generated/datamodel_242/{PMFileManagement.py → pm_file_management.py} +0 -0
  67. /ansys/fluent/core/generated/datamodel_242/{solverworkflow.py → solver_workflow.py} +0 -0
  68. /ansys/fluent/core/generated/datamodel_251/{MeshingUtilities.py → meshing_utilities.py} +0 -0
  69. /ansys/fluent/core/generated/datamodel_251/{PartManagement.py → part_management.py} +0 -0
  70. /ansys/fluent/core/generated/datamodel_251/{PMFileManagement.py → pm_file_management.py} +0 -0
  71. /ansys/fluent/core/generated/datamodel_251/{solverworkflow.py → solver_workflow.py} +0 -0
  72. /ansys/fluent/core/generated/datamodel_252/{MeshingUtilities.py → meshing_utilities.py} +0 -0
  73. /ansys/fluent/core/generated/datamodel_252/{PartManagement.py → part_management.py} +0 -0
  74. /ansys/fluent/core/generated/datamodel_252/{PMFileManagement.py → pm_file_management.py} +0 -0
  75. /ansys/fluent/core/generated/datamodel_252/{solverworkflow.py → solver_workflow.py} +0 -0
  76. /ansys/fluent/core/{systemcoupling.py → system_coupling.py} +0 -0
  77. {ansys_fluent_core-0.30.dev2.dist-info → ansys_fluent_core-0.30.dev4.dist-info}/LICENSE +0 -0
  78. {ansys_fluent_core-0.30.dev2.dist-info → ansys_fluent_core-0.30.dev4.dist-info}/WHEEL +0 -0
@@ -69,13 +69,13 @@ from typing import (
69
69
  import warnings
70
70
  import weakref
71
71
 
72
- import ansys.fluent.core as pyfluent
73
72
  from ansys.fluent.core.pyfluent_warnings import (
74
73
  PyFluentDeprecationWarning,
75
74
  PyFluentUserWarning,
76
75
  )
77
76
  from ansys.fluent.core.utils.fluent_version import FluentVersion
78
77
 
78
+ from . import _docstrings
79
79
  from .error_message import allowed_name_error_message, allowed_values_error
80
80
  from .flunits import UnhandledQuantity, get_si_unit_for_fluent_quantity
81
81
  from .settings_external import expand_api_file_argument
@@ -200,10 +200,10 @@ def _get_python_path_comps(obj):
200
200
  """Get python path components for traversing class hierarchy."""
201
201
  comps = []
202
202
  while obj:
203
- python_name = obj._python_name
203
+ python_name = obj.python_name
204
204
  obj = obj._parent
205
205
  if isinstance(obj, (NamedObject, ListObject)):
206
- comps.append(obj._python_name)
206
+ comps.append(obj.python_name)
207
207
  obj = obj._parent
208
208
  else:
209
209
  comps.append(python_name)
@@ -407,9 +407,19 @@ class Base:
407
407
  return None
408
408
  return val
409
409
 
410
+ def _is_deprecated(self) -> bool:
411
+ """Whether the object is deprecated in a specific Fluent version.'"""
412
+ deprecated_version = self.get_attrs(["deprecated-version"])
413
+ deprecated_version = (
414
+ deprecated_version.get("deprecated-version") if deprecated_version else None
415
+ )
416
+ return deprecated_version and FluentVersion(self.version) >= FluentVersion(
417
+ deprecated_version
418
+ )
419
+
410
420
  def is_active(self) -> bool:
411
421
  """Whether the object is active."""
412
- attr = self.get_attr(_InlineConstants.is_active)
422
+ attr = self.get_attr(_InlineConstants.is_active) and not self._is_deprecated()
413
423
  return False if attr is False else True
414
424
 
415
425
  def _check_stable(self) -> None:
@@ -695,9 +705,14 @@ class _Alias:
695
705
 
696
706
  def _create_child(cls, name, parent: weakref.CallableProxyType, alias_path=None):
697
707
  if alias_path or isinstance(parent, _Alias):
708
+ bases = (cls,)
709
+ # True child of parent alias is already derived from _Alias.
710
+ # Avoiding duplicate derivation and mro resolution issue.
711
+ if _Alias not in cls.__mro__:
712
+ bases = (_Alias, cls)
698
713
  alias_cls = type(
699
714
  f"{cls.__name__}_alias",
700
- (_Alias, cls),
715
+ bases,
701
716
  dict(cls.__dict__) | {"alias_path": alias_path},
702
717
  )
703
718
  return alias_cls(name, parent.__repr__.__self__)
@@ -945,6 +960,23 @@ def _command_query_name_filter(
945
960
  return ret
946
961
 
947
962
 
963
+ def _get_type_for_completer_info(cls) -> str:
964
+ if issubclass(cls, (FileName, _InputFile)):
965
+ return "InputFilename"
966
+ elif issubclass(cls, (FileName, _OutputFile)):
967
+ return "OutputFilename"
968
+ elif issubclass(cls, (FileName, _InOutFile)):
969
+ return "InOutFilename"
970
+ elif issubclass(cls, (FilenameList, _InputFile)):
971
+ return "InputFilenameList"
972
+ elif issubclass(cls, (FilenameList, _OutputFile)):
973
+ return "OutputFilenameList"
974
+ elif issubclass(cls, (FilenameList, _InOutFile)):
975
+ return "InOutFilenameList"
976
+ else:
977
+ return cls.__bases__[0].__name__
978
+
979
+
948
980
  class Group(SettingsBase[DictStateType]):
949
981
  """A ``Group`` container object.
950
982
 
@@ -1056,6 +1088,16 @@ class Group(SettingsBase[DictStateType]):
1056
1088
  ret.append(query)
1057
1089
  return ret
1058
1090
 
1091
+ def __dir__(self):
1092
+ dir_list = set(list(self.__dict__.keys()) + dir(type(self)))
1093
+ return dir_list - set(
1094
+ [
1095
+ child
1096
+ for child in self.child_names + self.command_names + self.query_names
1097
+ if getattr(self, child)._is_deprecated()
1098
+ ]
1099
+ )
1100
+
1059
1101
  def get_completer_info(self, prefix="", excluded=None) -> List[List[str]]:
1060
1102
  """Get completer info of all children.
1061
1103
 
@@ -1073,7 +1115,7 @@ class Group(SettingsBase[DictStateType]):
1073
1115
  ret.append(
1074
1116
  [
1075
1117
  child_name,
1076
- child.__class__.__bases__[0].__name__,
1118
+ _get_type_for_completer_info(child.__class__),
1077
1119
  child.__doc__,
1078
1120
  ]
1079
1121
  )
@@ -1105,18 +1147,12 @@ class Group(SettingsBase[DictStateType]):
1105
1147
  attr._check_stable()
1106
1148
  return attr
1107
1149
  except AttributeError as ex:
1108
- pyfluent.PRINT_SEARCH_RESULTS = False
1109
- search_results = pyfluent.utils.search(
1110
- search_string=name,
1111
- match_case=False,
1112
- match_whole_word=False,
1113
- )
1114
- pyfluent.PRINT_SEARCH_RESULTS = True
1115
- results = search_results if search_results else []
1116
1150
  error_msg = allowed_name_error_message(
1117
1151
  trial_name=name,
1118
1152
  message=ex.args[0],
1119
- search_results=results,
1153
+ allowed_values=sorted(
1154
+ set(self.get_active_child_names() + self.command_names)
1155
+ ),
1120
1156
  )
1121
1157
  ex.args = (error_msg,)
1122
1158
  raise
@@ -1391,7 +1427,7 @@ class NamedObject(SettingsBase[DictStateType], Generic[ChildTypeT]):
1391
1427
  )
1392
1428
  raise KeyError(
1393
1429
  allowed_name_error_message(
1394
- context=self.__class__._python_name,
1430
+ context=self.python_name,
1395
1431
  trial_name=name,
1396
1432
  allowed_values=self.get_object_names(),
1397
1433
  )
@@ -1608,6 +1644,16 @@ class Action(Base):
1608
1644
  cls = self.__class__._child_classes[argument]
1609
1645
  self._setattr(argument, _create_child(cls, None, self))
1610
1646
 
1647
+ def __dir__(self):
1648
+ dir_list = set(list(self.__dict__.keys()) + dir(type(self)))
1649
+ return dir_list - set(
1650
+ [
1651
+ child
1652
+ for child in self.argument_names
1653
+ if getattr(self, child)._is_deprecated()
1654
+ ]
1655
+ )
1656
+
1611
1657
  def get_completer_info(self, prefix="", excluded=None) -> List[List[str]]:
1612
1658
  """Get completer info of all arguments.
1613
1659
 
@@ -1625,7 +1671,7 @@ class Action(Base):
1625
1671
  ret.append(
1626
1672
  [
1627
1673
  argument_name,
1628
- argument.__class__.__bases__[0].__name__,
1674
+ _get_type_for_completer_info(argument.__class__),
1629
1675
  argument.__doc__,
1630
1676
  ]
1631
1677
  )
@@ -1809,13 +1855,22 @@ _baseTypes = {
1809
1855
 
1810
1856
 
1811
1857
  def _clean_helpinfo(helpinfo):
1812
- helpinfo = helpinfo.strip("\n")
1858
+ helpinfo = helpinfo.strip("\n").lstrip(" ")
1813
1859
  if not helpinfo.endswith("."):
1814
1860
  helpinfo += "."
1815
1861
  helpinfo = helpinfo[0].upper() + helpinfo[1:]
1816
1862
  return helpinfo
1817
1863
 
1818
1864
 
1865
+ def _fix_help_info(obj_type, helpinfo):
1866
+ # The else clause is just picking "object" due to our current
1867
+ # knowledge that the implementation only distinguishes between
1868
+ # "method" and everything else. This is fragile.
1869
+ api_item_type = "method" if obj_type in ("command", "query") else "object"
1870
+ fix = _docstrings._fixed_doc_string(api_item_type, helpinfo)
1871
+ return fix or helpinfo
1872
+
1873
+
1819
1874
  class _ChildNamedObjectAccessorMixin(collections.abc.MutableMapping):
1820
1875
  """A mixin class to provide a dictionary interface at a Group class level if the
1821
1876
  Group has multiple named objects of a similar type. For example, boundary conditions
@@ -1935,7 +1990,7 @@ class _NonCreatableNamedObjectMixin(
1935
1990
  else:
1936
1991
  raise KeyError(
1937
1992
  allowed_name_error_message(
1938
- context=self.__class__._python_name,
1993
+ context=self.python_name,
1939
1994
  trial_name=name,
1940
1995
  allowed_values=self.get_object_names(),
1941
1996
  )
@@ -1983,7 +2038,7 @@ def get_cls(name, info, parent=None, version=None, parent_taboo=None):
1983
2038
  dct = {"fluent_name": name, "version": version}
1984
2039
  helpinfo = info.get("help")
1985
2040
  if helpinfo:
1986
- dct["__doc__"] = _clean_helpinfo(helpinfo)
2041
+ dct["__doc__"] = _fix_help_info(obj_type, _clean_helpinfo(helpinfo))
1987
2042
  else:
1988
2043
  if parent is None:
1989
2044
  dct["__doc__"] = "'root' object."
@@ -2189,15 +2244,19 @@ def get_root(
2189
2244
  """
2190
2245
  from ansys.fluent.core import CODEGEN_OUTDIR, utils
2191
2246
 
2192
- try:
2193
- settings = utils.load_module(
2194
- f"settings_{version}",
2195
- CODEGEN_OUTDIR / "solver" / f"settings_{version}.py",
2196
- )
2197
- root_cls = settings.root
2198
- except FileNotFoundError:
2247
+ if os.getenv("PYFLUENT_USE_RUNTIME_PYTHON_CLASSES") == "1":
2199
2248
  obj_info = flproxy.get_static_info()
2200
2249
  root_cls, _ = get_cls("", obj_info, version=version)
2250
+ else:
2251
+ try:
2252
+ settings = utils.load_module(
2253
+ f"settings_{version}",
2254
+ CODEGEN_OUTDIR / "solver" / f"settings_{version}.py",
2255
+ )
2256
+ root_cls = settings.root
2257
+ except FileNotFoundError:
2258
+ obj_info = flproxy.get_static_info()
2259
+ root_cls, _ = get_cls("", obj_info, version=version)
2201
2260
  root = root_cls()
2202
2261
  root.set_flproxy(flproxy)
2203
2262
  root._set_on_interrupt(interrupt)
@@ -27,7 +27,6 @@ from functools import total_ordering
27
27
  import os
28
28
 
29
29
  import ansys.fluent.core as pyfluent
30
- from ansys.fluent.core._version import fluent_dev_version, fluent_release_version
31
30
 
32
31
 
33
32
  class AnsysVersionNotFound(RuntimeError):
@@ -131,7 +130,7 @@ class FluentVersion(Enum):
131
130
  FluentVersion
132
131
  FluentVersion member corresponding to the latest release.
133
132
  """
134
- return cls(fluent_release_version)
133
+ return cls(pyfluent.FLUENT_RELEASE_VERSION)
135
134
 
136
135
  @classmethod
137
136
  def current_dev(cls):
@@ -142,7 +141,7 @@ class FluentVersion(Enum):
142
141
  FluentVersion
143
142
  FluentVersion member corresponding to the latest development version.
144
143
  """
145
- return cls(fluent_dev_version)
144
+ return cls(pyfluent.FLUENT_DEV_VERSION)
146
145
 
147
146
  @property
148
147
  def awp_var(self):
@@ -0,0 +1,139 @@
1
+ # Copyright (C) 2021 - 2025 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
+ """Script to test viability of gRPC connection in the current machine."""
24
+
25
+
26
+ from argparse import ArgumentParser
27
+ import socket
28
+
29
+ import grpc
30
+ from grpc_health.v1 import health_pb2, health_pb2_grpc
31
+
32
+ from ansys.fluent.core.utils.networking import _GrpcServer, get_free_port
33
+
34
+
35
+ def _test_connection_using_specified_ip(ip: str, port: int | None = None) -> bool:
36
+ if not port:
37
+ port = get_free_port()
38
+ address = f"{ip}:{port}"
39
+ try:
40
+ with _GrpcServer(address):
41
+ with grpc.insecure_channel(address) as channel:
42
+ stub = health_pb2_grpc.HealthStub(channel)
43
+ return (
44
+ stub.Check(
45
+ health_pb2.HealthCheckRequest(),
46
+ timeout=1,
47
+ ).status
48
+ == health_pb2.HealthCheckResponse.ServingStatus.SERVING
49
+ )
50
+ except Exception:
51
+ return False
52
+
53
+
54
+ def _test_connection_using_all_available_ips(port: int | None = None) -> list[str]:
55
+ successful_ips = []
56
+ for addrinfo in socket.getaddrinfo(
57
+ "localhost",
58
+ 0,
59
+ family=socket.AF_INET,
60
+ type=socket.SOCK_STREAM,
61
+ flags=socket.AI_PASSIVE,
62
+ ):
63
+ ip = addrinfo[-1][0]
64
+ if _test_connection_using_specified_ip(ip, port):
65
+ successful_ips.append(ip)
66
+ return successful_ips
67
+
68
+
69
+ def test_connection(ip: str | None = None, port: int | None = None):
70
+ """
71
+ Test viability of gRPC connection in the current machine.
72
+ Parameters
73
+ ----------
74
+ ip : str, optional
75
+ IP address to test connection with. If not provided, will test using all available ips.
76
+ port : int, optional
77
+ Port to test connection with. If not provided, will test using random port.
78
+ """
79
+
80
+ if ip is not None and port is not None:
81
+ print(f"Testing gRPC connection using ip={ip} and port={port}.")
82
+ if _test_connection_using_specified_ip(ip, port):
83
+ print(f"gRPC connection can be established using ip={ip} and port={port}.")
84
+ else:
85
+ print(
86
+ f"gRPC connection cannot be established using ip={ip} and port={port}. "
87
+ "Try with a different ip and/or port. You can run the script again without "
88
+ "providing any ip to print all viable ips where gRPC connection can be established."
89
+ )
90
+ elif ip is not None and port is None:
91
+ print(f"Testing gRPC connection using ip={ip} and random port.")
92
+ if _test_connection_using_specified_ip(ip):
93
+ print(f"gRPC connection can be established using ip={ip}.")
94
+ else:
95
+ print(
96
+ f"gRPC connection cannot be established using ip={ip}. "
97
+ "Try with a different ip. You can run the script again without "
98
+ "providing any ip to print all viable ips where gRPC connection can be established."
99
+ )
100
+ elif ip is None and port is not None:
101
+ print(f"Testing gRPC connection using all available ips and port={port}.")
102
+ successful_ips = _test_connection_using_all_available_ips(port)
103
+ if successful_ips:
104
+ for ip in successful_ips:
105
+ print(
106
+ f"gRPC connection can be established using ip={ip} and port={port}."
107
+ )
108
+ else:
109
+ print(
110
+ f"gRPC connection cannot be established using any ip and port={port}. "
111
+ "Try with a different port. You can run the script again without "
112
+ "providing any port to test using random port."
113
+ )
114
+ else:
115
+ print("Testing gRPC connection using all available ips and random port.")
116
+ successful_ips = _test_connection_using_all_available_ips()
117
+ if successful_ips:
118
+ for ip in successful_ips:
119
+ print(f"gRPC connection can be established using ip={ip}.")
120
+ else:
121
+ print("gRPC connection cannot be established using any ip.")
122
+
123
+
124
+ if __name__ == "__main__":
125
+ parser = ArgumentParser(
126
+ description="Script to test viability of gRPC connection in the current machine."
127
+ )
128
+ parser.add_argument(
129
+ "-i",
130
+ "--ip",
131
+ help="IP address to test connection with. If not provided, will test using all available ips.",
132
+ )
133
+ parser.add_argument(
134
+ "-p",
135
+ "--port",
136
+ help="Port to test connection with. If not provided, will test using random port.",
137
+ )
138
+ args = parser.parse_args()
139
+ test_connection(args.ip, args.port)
@@ -1365,6 +1365,7 @@ class Workflow:
1365
1365
  "service",
1366
1366
  "task_object",
1367
1367
  "workflow",
1368
+ "rename",
1368
1369
  },
1369
1370
  _fluent_version=fluent_version,
1370
1371
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ansys-fluent-core
3
- Version: 0.30.dev2
3
+ Version: 0.30.dev4
4
4
  Summary: PyFluent provides Pythonic access to Ansys Fluent.
5
5
  Author-email: "ANSYS, Inc." <pyansys.core@ansys.com>
6
6
  Maintainer-email: "ANSYS, Inc." <pyansys.core@ansys.com>
@@ -17,34 +17,34 @@ Requires-Dist: ansys-units>=0.3.3,<0.5
17
17
  Requires-Dist: docker>=7.1.0
18
18
  Requires-Dist: grpcio>=1.30.0
19
19
  Requires-Dist: grpcio-health-checking>=1.30.0
20
- Requires-Dist: grpcio-status>=1.30.0
20
+ Requires-Dist: grpcio-status>=1.26.0
21
21
  Requires-Dist: lxml>=4.9.2
22
22
  Requires-Dist: nltk>=3.9.1
23
23
  Requires-Dist: numpy>=1.14.0,<3.0.0
24
24
  Requires-Dist: pandas>=1.1.0,<2.3
25
25
  Requires-Dist: pyansys-tools-report>=0.8.1
26
26
  Requires-Dist: pyyaml>=6.0
27
- Requires-Dist: Sphinx==7.4.7 ; extra == "docs"
27
+ Requires-Dist: Sphinx==8.1.3 ; extra == "docs"
28
28
  Requires-Dist: jupyter_sphinx==0.5.3 ; extra == "docs"
29
29
  Requires-Dist: numpydoc==1.8.0 ; extra == "docs"
30
- Requires-Dist: matplotlib==3.10.0 ; extra == "docs"
31
- Requires-Dist: ansys-sphinx-theme==1.2.7 ; extra == "docs"
30
+ Requires-Dist: matplotlib==3.10.1 ; extra == "docs"
31
+ Requires-Dist: ansys-sphinx-theme==1.3.2 ; extra == "docs"
32
32
  Requires-Dist: pypandoc==1.15 ; extra == "docs"
33
33
  Requires-Dist: pytest-sphinx==0.6.3 ; extra == "docs"
34
34
  Requires-Dist: sphinx-autobuild==2024.10.3 ; extra == "docs"
35
- Requires-Dist: sphinx-autodoc-typehints==2.3.0 ; extra == "docs"
35
+ Requires-Dist: sphinx-autodoc-typehints==3.0.1 ; extra == "docs"
36
36
  Requires-Dist: sphinx-copybutton==0.5.2 ; extra == "docs"
37
- Requires-Dist: sphinx-gallery==0.18.0 ; extra == "docs"
37
+ Requires-Dist: sphinx-gallery==0.19.0 ; extra == "docs"
38
38
  Requires-Dist: sphinx-notfound-page==1.1.0 ; extra == "docs"
39
39
  Requires-Dist: sphinxcontrib-websupport==2.0.0 ; extra == "docs"
40
40
  Requires-Dist: sphinxemoji==0.3.1 ; extra == "docs"
41
- Requires-Dist: sphinx-toggleprompt==0.5.2 ; extra == "docs"
41
+ Requires-Dist: sphinx-toggleprompt==0.6.0 ; extra == "docs"
42
42
  Requires-Dist: autodocsumm==0.2.14 ; extra == "docs"
43
- Requires-Dist: beautifulsoup4==4.13.1 ; extra == "docs"
43
+ Requires-Dist: beautifulsoup4==4.13.3 ; extra == "docs"
44
44
  Requires-Dist: openpyxl>=3.1.5 ; extra == "docs"
45
45
  Requires-Dist: plotly>=5.22.0 ; extra == "docs"
46
46
  Requires-Dist: python-pptx>=0.6.23 ; extra == "docs"
47
- Requires-Dist: quarto-cli==1.6.39 ; extra == "docs"
47
+ Requires-Dist: quarto-cli==1.6.42 ; extra == "docs"
48
48
  Requires-Dist: pdf2image==1.17.0 ; extra == "docs"
49
49
  Requires-Dist: seaborn>=0.13.2 ; extra == "docs"
50
50
  Requires-Dist: tensorflow>=2.17.0 ; extra == "docs"
@@ -114,8 +114,8 @@ In the upper right corner of the documentation's title bar, there is an option f
114
114
  viewing the documentation for the latest stable release to viewing the documentation for the
115
115
  development version or previously released versions.
116
116
 
117
- You can also `view <https://cheatsheets.docs.pyansys.com/pyfluent_cheat_sheet.png>`_ or
118
- `download <https://cheatsheets.docs.pyansys.com/pyfluent_cheat_sheet.pdf>`_ the
117
+ You can also `view <https://fluent.docs.pyansys.com/version/stable/_static/cheat_sheet.pdf>`_ or
118
+ `download <https://fluent.docs.pyansys.com/version/stable/_static/cheat_sheet.pdf>`_ the
119
119
  PyFluent cheat sheet. This one-page reference provides syntax rules and commands
120
120
  for using PyFluent.
121
121