ansys-fluent-core 0.28.2__py3-none-any.whl → 0.29.0__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 (221) hide show
  1. ansys/fluent/core/__init__.py +26 -1
  2. ansys/fluent/core/_stand_alone_datamodel_client/_datamodel_client.py +22 -0
  3. ansys/fluent/core/_version.py +24 -2
  4. ansys/fluent/core/codegen/__init__.py +22 -0
  5. ansys/fluent/core/codegen/allapigen.py +38 -5
  6. ansys/fluent/core/codegen/builtin_settingsgen.py +22 -0
  7. ansys/fluent/core/codegen/data/__init__.py +21 -0
  8. ansys/fluent/core/codegen/data/fluent_gui_help_patch.py +22 -0
  9. ansys/fluent/core/codegen/data/meshing_utilities_examples.py +22 -0
  10. ansys/fluent/core/codegen/datamodelgen.py +40 -4
  11. ansys/fluent/core/codegen/print_fluent_version.py +22 -0
  12. ansys/fluent/core/codegen/settingsgen.py +67 -4
  13. ansys/fluent/core/codegen/tuigen.py +44 -6
  14. ansys/fluent/core/codegen/walk_api.py +67 -18
  15. ansys/fluent/core/codegen/write_settings_yaml.py +22 -0
  16. ansys/fluent/core/data_model_cache.py +22 -0
  17. ansys/fluent/core/examples/__init__.py +22 -0
  18. ansys/fluent/core/examples/downloads.py +22 -0
  19. ansys/fluent/core/exceptions.py +22 -0
  20. ansys/fluent/core/file_session.py +22 -0
  21. ansys/fluent/core/filereader/__init__.py +21 -0
  22. ansys/fluent/core/filereader/case_file.py +22 -0
  23. ansys/fluent/core/filereader/casereader.py +22 -0
  24. ansys/fluent/core/filereader/data_file.py +22 -0
  25. ansys/fluent/core/filereader/lispy.py +22 -0
  26. ansys/fluent/core/fluent_connection.py +23 -1
  27. ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
  28. ansys/fluent/core/generated/datamodel_252/meshing.py +32 -0
  29. ansys/fluent/core/generated/fluent_version_252.py +3 -3
  30. ansys/fluent/core/generated/solver/settings_222.py +0 -72
  31. ansys/fluent/core/generated/solver/settings_222.pyi +0 -307
  32. ansys/fluent/core/generated/solver/settings_231.py +0 -574
  33. ansys/fluent/core/generated/solver/settings_231.pyi +0 -561
  34. ansys/fluent/core/generated/solver/settings_232.py +0 -527
  35. ansys/fluent/core/generated/solver/settings_232.pyi +0 -2803
  36. ansys/fluent/core/generated/solver/settings_241.py +0 -478
  37. ansys/fluent/core/generated/solver/settings_241.pyi +0 -522
  38. ansys/fluent/core/generated/solver/settings_242.py +0 -361
  39. ansys/fluent/core/generated/solver/settings_242.pyi +0 -591
  40. ansys/fluent/core/generated/solver/settings_251.py +0 -399
  41. ansys/fluent/core/generated/solver/settings_251.pyi +0 -629
  42. ansys/fluent/core/generated/solver/settings_252.py +7794 -4185
  43. ansys/fluent/core/generated/solver/settings_252.pyi +6986 -3213
  44. ansys/fluent/core/generated/solver/tui_252.py +537 -181
  45. ansys/fluent/core/get_build_details.py +22 -0
  46. ansys/fluent/core/journaling.py +38 -0
  47. ansys/fluent/core/launcher/__init__.py +22 -0
  48. ansys/fluent/core/launcher/container_launcher.py +65 -56
  49. ansys/fluent/core/launcher/error_handler.py +30 -0
  50. ansys/fluent/core/launcher/fluent_container.py +45 -20
  51. ansys/fluent/core/launcher/launcher.py +53 -5
  52. ansys/fluent/core/launcher/launcher_utils.py +22 -0
  53. ansys/fluent/core/launcher/pim_launcher.py +120 -86
  54. ansys/fluent/core/launcher/process_launch_string.py +22 -0
  55. ansys/fluent/core/launcher/pyfluent_enums.py +22 -0
  56. ansys/fluent/core/launcher/server_info.py +45 -3
  57. ansys/fluent/core/launcher/slurm_launcher.py +25 -3
  58. ansys/fluent/core/launcher/standalone_launcher.py +68 -63
  59. ansys/fluent/core/launcher/watchdog.py +22 -0
  60. ansys/fluent/core/logging.py +24 -0
  61. ansys/fluent/core/logging_config.yaml +3 -0
  62. ansys/fluent/core/meshing/meshing_workflow.py +22 -0
  63. ansys/fluent/core/parametric.py +22 -0
  64. ansys/fluent/core/post_objects/__init__.py +21 -0
  65. ansys/fluent/core/post_objects/check_in_notebook.py +22 -0
  66. ansys/fluent/core/post_objects/meta.py +22 -0
  67. ansys/fluent/core/post_objects/post_helper.py +22 -0
  68. ansys/fluent/core/post_objects/post_object_definitions.py +22 -0
  69. ansys/fluent/core/post_objects/post_objects_container.py +22 -0
  70. ansys/fluent/core/post_objects/singleton_meta.py +22 -0
  71. ansys/fluent/core/post_objects/timing_decorator.py +22 -0
  72. ansys/fluent/core/report.py +77 -0
  73. ansys/fluent/core/rpvars.py +22 -0
  74. ansys/fluent/core/scheduler/__init__.py +22 -0
  75. ansys/fluent/core/scheduler/load_machines.py +22 -0
  76. ansys/fluent/core/scheduler/machine_list.py +22 -0
  77. ansys/fluent/core/search.py +22 -0
  78. ansys/fluent/core/services/__init__.py +22 -0
  79. ansys/fluent/core/services/api_upgrade.py +22 -0
  80. ansys/fluent/core/services/app_utilities.py +38 -0
  81. ansys/fluent/core/services/batch_ops.py +22 -0
  82. ansys/fluent/core/services/datamodel_se.py +26 -1
  83. ansys/fluent/core/services/datamodel_tui.py +22 -0
  84. ansys/fluent/core/services/deprecated_field_data.py +23 -1
  85. ansys/fluent/core/services/events.py +22 -0
  86. ansys/fluent/core/services/field_data.py +285 -2
  87. ansys/fluent/core/services/health_check.py +22 -0
  88. ansys/fluent/core/services/interceptors.py +50 -2
  89. ansys/fluent/core/services/monitor.py +22 -0
  90. ansys/fluent/core/services/reduction.py +22 -0
  91. ansys/fluent/core/services/scheme_eval.py +22 -0
  92. ansys/fluent/core/services/settings.py +22 -0
  93. ansys/fluent/core/services/solution_variables.py +22 -0
  94. ansys/fluent/core/services/streaming.py +22 -0
  95. ansys/fluent/core/services/transcript.py +22 -0
  96. ansys/fluent/core/session.py +39 -2
  97. ansys/fluent/core/session_base_meshing.py +22 -0
  98. ansys/fluent/core/session_meshing.py +22 -0
  99. ansys/fluent/core/session_meshing.pyi +22 -0
  100. ansys/fluent/core/session_pure_meshing.py +22 -0
  101. ansys/fluent/core/session_pure_meshing.pyi +22 -0
  102. ansys/fluent/core/session_shared.py +22 -0
  103. ansys/fluent/core/session_solver.py +43 -0
  104. ansys/fluent/core/session_solver.pyi +22 -0
  105. ansys/fluent/core/session_solver_aero.py +22 -0
  106. ansys/fluent/core/session_solver_icing.py +22 -0
  107. ansys/fluent/core/session_solver_lite.py +22 -0
  108. ansys/fluent/core/solver/__init__.py +22 -0
  109. ansys/fluent/core/solver/error_message.py +22 -0
  110. ansys/fluent/core/solver/flobject.py +22 -0
  111. ansys/fluent/core/solver/flunits.py +22 -0
  112. ansys/fluent/core/solver/function/__init__.py +22 -0
  113. ansys/fluent/core/solver/function/reduction.py +22 -0
  114. ansys/fluent/core/solver/settings_builtin_bases.py +22 -0
  115. ansys/fluent/core/solver/settings_builtin_data.py +22 -0
  116. ansys/fluent/core/solver/settings_external.py +22 -0
  117. ansys/fluent/core/streaming_services/__init__.py +21 -0
  118. ansys/fluent/core/streaming_services/datamodel_event_streaming.py +22 -0
  119. ansys/fluent/core/streaming_services/datamodel_streaming.py +22 -0
  120. ansys/fluent/core/streaming_services/events_streaming.py +22 -0
  121. ansys/fluent/core/streaming_services/field_data_streaming.py +22 -0
  122. ansys/fluent/core/streaming_services/monitor_streaming.py +23 -1
  123. ansys/fluent/core/streaming_services/streaming.py +22 -0
  124. ansys/fluent/core/streaming_services/transcript_streaming.py +22 -0
  125. ansys/fluent/core/systemcoupling.py +22 -0
  126. ansys/fluent/core/utils/__init__.py +22 -0
  127. ansys/fluent/core/utils/data_transfer.py +22 -0
  128. ansys/fluent/core/utils/deprecate.py +24 -1
  129. ansys/fluent/core/utils/dictionary_operations.py +22 -0
  130. ansys/fluent/core/utils/dump_session_data.py +22 -0
  131. ansys/fluent/core/utils/event_loop.py +22 -0
  132. ansys/fluent/core/utils/execution.py +22 -0
  133. ansys/fluent/core/utils/file_transfer_service.py +22 -0
  134. ansys/fluent/core/utils/fix_doc.py +22 -0
  135. ansys/fluent/core/utils/fldoc.py +22 -0
  136. ansys/fluent/core/utils/fluent_version.py +22 -0
  137. ansys/fluent/core/utils/networking.py +22 -0
  138. ansys/fluent/core/utils/setup_for_fluent.py +22 -0
  139. ansys/fluent/core/warnings.py +22 -0
  140. ansys/fluent/core/workflow.py +22 -0
  141. {ansys_fluent_core-0.28.2.dist-info → ansys_fluent_core-0.29.0.dist-info}/LICENSE +8 -8
  142. {ansys_fluent_core-0.28.2.dist-info → ansys_fluent_core-0.29.0.dist-info}/METADATA +56 -33
  143. ansys_fluent_core-0.29.0.dist-info/RECORD +219 -0
  144. {ansys_fluent_core-0.28.2.dist-info → ansys_fluent_core-0.29.0.dist-info}/WHEEL +1 -1
  145. ansys/fluent/core/docs/README.rst +0 -155
  146. ansys/fluent/tests/conftest.py +0 -415
  147. ansys/fluent/tests/fluent_fixtures.py +0 -195
  148. ansys/fluent/tests/integration/test_optislang/test_optislang_integration.py +0 -263
  149. ansys/fluent/tests/parametric/test_local_parametric_run.py +0 -36
  150. ansys/fluent/tests/parametric/test_local_parametric_setup.py +0 -34
  151. ansys/fluent/tests/parametric/test_parametric_workflow.py +0 -279
  152. ansys/fluent/tests/test_aero_session.py +0 -88
  153. ansys/fluent/tests/test_batch_ops.py +0 -39
  154. ansys/fluent/tests/test_builtin_settings.py +0 -761
  155. ansys/fluent/tests/test_cad_to_post_ftm.py +0 -525
  156. ansys/fluent/tests/test_cad_to_post_wtm.py +0 -250
  157. ansys/fluent/tests/test_casereader.py +0 -324
  158. ansys/fluent/tests/test_codegen.py +0 -783
  159. ansys/fluent/tests/test_creatable.py +0 -31
  160. ansys/fluent/tests/test_data_model_cache.py +0 -434
  161. ansys/fluent/tests/test_datamodel_api.py +0 -429
  162. ansys/fluent/tests/test_datamodel_service.py +0 -814
  163. ansys/fluent/tests/test_datareader.py +0 -103
  164. ansys/fluent/tests/test_error_handling.py +0 -24
  165. ansys/fluent/tests/test_events_manager.py +0 -214
  166. ansys/fluent/tests/test_field_data.py +0 -466
  167. ansys/fluent/tests/test_file_session.py +0 -355
  168. ansys/fluent/tests/test_file_transfer_service.py +0 -165
  169. ansys/fluent/tests/test_fix_doc.py +0 -29
  170. ansys/fluent/tests/test_flobject.py +0 -1235
  171. ansys/fluent/tests/test_fluent_fixes.py +0 -106
  172. ansys/fluent/tests/test_fluent_session.py +0 -270
  173. ansys/fluent/tests/test_fluent_version.py +0 -66
  174. ansys/fluent/tests/test_fluent_version_marker.py +0 -65
  175. ansys/fluent/tests/test_icing_session.py +0 -9
  176. ansys/fluent/tests/test_launcher.py +0 -529
  177. ansys/fluent/tests/test_launcher_remote.py +0 -272
  178. ansys/fluent/tests/test_lispy.py +0 -40
  179. ansys/fluent/tests/test_logging.py +0 -16
  180. ansys/fluent/tests/test_mapped_api.py +0 -766
  181. ansys/fluent/tests/test_meshing_utilities.py +0 -2436
  182. ansys/fluent/tests/test_meshing_workflow.py +0 -421
  183. ansys/fluent/tests/test_meshingmode/test_meshing_launch.py +0 -168
  184. ansys/fluent/tests/test_new_meshing_workflow.py +0 -1801
  185. ansys/fluent/tests/test_preferences.py +0 -89
  186. ansys/fluent/tests/test_pure_mesh_vs_mesh_workflow.py +0 -101
  187. ansys/fluent/tests/test_reduction.py +0 -484
  188. ansys/fluent/tests/test_rp_vars.py +0 -77
  189. ansys/fluent/tests/test_scheduler.py +0 -471
  190. ansys/fluent/tests/test_scheme_eval_222.py +0 -338
  191. ansys/fluent/tests/test_scheme_eval_231.py +0 -243
  192. ansys/fluent/tests/test_search.py +0 -344
  193. ansys/fluent/tests/test_session.py +0 -594
  194. ansys/fluent/tests/test_settings_api.py +0 -606
  195. ansys/fluent/tests/test_settings_reader.py +0 -85
  196. ansys/fluent/tests/test_slurm_future.py +0 -67
  197. ansys/fluent/tests/test_solution_variables.py +0 -241
  198. ansys/fluent/tests/test_solver_monitors.py +0 -83
  199. ansys/fluent/tests/test_solvermode/boundaries_periodic_expDict +0 -1712
  200. ansys/fluent/tests/test_solvermode/test_boundaries.py +0 -127
  201. ansys/fluent/tests/test_solvermode/test_calculationactivities.py +0 -20
  202. ansys/fluent/tests/test_solvermode/test_controls.py +0 -131
  203. ansys/fluent/tests/test_solvermode/test_general.py +0 -109
  204. ansys/fluent/tests/test_solvermode/test_initialization.py +0 -83
  205. ansys/fluent/tests/test_solvermode/test_materials.py +0 -40
  206. ansys/fluent/tests/test_solvermode/test_methods.py +0 -65
  207. ansys/fluent/tests/test_solvermode/test_models.py +0 -99
  208. ansys/fluent/tests/test_solvermode/test_named_expressions.py +0 -35
  209. ansys/fluent/tests/test_solvermode/test_post_vector.py +0 -22
  210. ansys/fluent/tests/test_solvermode/test_species_model.py +0 -67
  211. ansys/fluent/tests/test_streaming_services.py +0 -52
  212. ansys/fluent/tests/test_systemcoupling.py +0 -44
  213. ansys/fluent/tests/test_topy.py +0 -179
  214. ansys/fluent/tests/test_tui_api.py +0 -70
  215. ansys/fluent/tests/test_type_stub.py +0 -37
  216. ansys/fluent/tests/test_utils.py +0 -82
  217. ansys/fluent/tests/util/__init__.py +0 -36
  218. ansys/fluent/tests/util/meshing_workflow.py +0 -33
  219. ansys/fluent/tests/util/solver.py +0 -72
  220. ansys_fluent_core-0.28.2.dist-info/AUTHORS +0 -12
  221. ansys_fluent_core-0.28.2.dist-info/RECORD +0 -294
@@ -1,594 +0,0 @@
1
- from concurrent import futures
2
- import os
3
- from pathlib import Path
4
- import tempfile
5
- import time
6
-
7
- import grpc
8
- from grpc_health.v1 import health_pb2, health_pb2_grpc
9
- import pytest
10
-
11
- from ansys.api.fluent.v0 import (
12
- scheme_eval_pb2,
13
- scheme_eval_pb2_grpc,
14
- settings_pb2,
15
- settings_pb2_grpc,
16
- )
17
- from ansys.api.fluent.v0.scheme_pointer_pb2 import SchemePointer
18
- import ansys.fluent.core as pyfluent
19
- from ansys.fluent.core import connect_to_fluent, examples, session
20
- from ansys.fluent.core.fluent_connection import FluentConnection, PortNotProvided
21
- from ansys.fluent.core.launcher.error_handler import LaunchFluentError
22
- from ansys.fluent.core.session import BaseSession
23
- from ansys.fluent.core.utils.execution import timeout_loop
24
- from ansys.fluent.core.utils.file_transfer_service import RemoteFileTransferStrategy
25
- from ansys.fluent.core.utils.fluent_version import FluentVersion
26
- from ansys.fluent.core.utils.networking import get_free_port
27
- from ansys.fluent.core.warnings import PyFluentDeprecationWarning
28
-
29
-
30
- class MockSettingsServicer(settings_pb2_grpc.SettingsServicer):
31
- def GetStaticInfo(
32
- self, request: settings_pb2.GetStaticInfoRequest, context: grpc.ServicerContext
33
- ) -> settings_pb2.GetStaticInfoResponse:
34
- response = settings_pb2.GetStaticInfoResponse()
35
- response.info.type = "Dummy"
36
- return response
37
-
38
- def GetVar(
39
- self,
40
- request: settings_pb2.GetVarRequest,
41
- context: grpc.ServicerContext,
42
- ) -> settings_pb2.GetVarResponse:
43
- response = settings_pb2.GetVarResponse()
44
- response.value.value_map.SetInParent()
45
- return response
46
-
47
-
48
- class MockHealthServicer(health_pb2_grpc.HealthServicer):
49
- def Check(self, request, context: grpc.ServicerContext): # noqa N802
50
- metadata = dict(context.invocation_metadata())
51
- password = metadata.get("password", None)
52
- if password != "12345":
53
- context.set_code(grpc.StatusCode.UNAUTHENTICATED)
54
- return health_pb2.HealthCheckResponse()
55
- return health_pb2.HealthCheckResponse(
56
- status=health_pb2.HealthCheckResponse.ServingStatus.SERVING
57
- )
58
-
59
- def Watch(self, request, context: grpc.ServicerContext): # noqa N802
60
- metadata = dict(context.invocation_metadata())
61
- password = metadata.get("password", None)
62
- if password != "12345":
63
- context.set_code(grpc.StatusCode.UNAUTHENTICATED)
64
- yield health_pb2.HealthCheckResponse()
65
-
66
- c = 0
67
- while c < 2:
68
- time.sleep(1)
69
- c += 1
70
- yield health_pb2.HealthCheckResponse(
71
- status=health_pb2.HealthCheckResponse.ServingStatus.NOT_SERVING
72
- )
73
-
74
- time.sleep(1)
75
- yield health_pb2.HealthCheckResponse(
76
- status=health_pb2.HealthCheckResponse.ServingStatus.SERVING
77
- )
78
-
79
-
80
- class MockSchemeEvalServicer(scheme_eval_pb2_grpc.SchemeEvalServicer):
81
- def StringEval(self, request, context):
82
- if request.input == "(cx-version)":
83
- return scheme_eval_pb2.StringEvalResponse(output="(23 1 0)")
84
-
85
- def SchemeEval(
86
- self,
87
- request,
88
- context: grpc.ServicerContext,
89
- ) -> scheme_eval_pb2.SchemeEvalResponse:
90
- metadata = dict(context.invocation_metadata())
91
- password = metadata.get("password", None)
92
- if password != "12345":
93
- context.set_code(grpc.StatusCode.UNAUTHENTICATED)
94
- return scheme_eval_pb2.SchemeEvalResponse(output=SchemePointer(b=True))
95
-
96
-
97
- def test_download_file():
98
- with pytest.raises(examples.RemoteFileNotFoundError):
99
- examples.download_file(
100
- "mixing_elbow.cas.h5", "pyfluent/examples/DOE-ML-Mixing-Elbow"
101
- )
102
-
103
-
104
- def test_create_mock_session_by_passing_ip_port_password() -> None:
105
- server = grpc.server(futures.ThreadPoolExecutor(max_workers=1))
106
- ip = "127.0.0.1"
107
- port = get_free_port()
108
- server.add_insecure_port(f"{ip}:{port}")
109
- health_pb2_grpc.add_HealthServicer_to_server(MockHealthServicer(), server)
110
- scheme_eval_pb2_grpc.add_SchemeEvalServicer_to_server(
111
- MockSchemeEvalServicer(), server
112
- )
113
- server.start()
114
-
115
- with pytest.raises(PortNotProvided):
116
- fluent_connection = FluentConnection(
117
- ip=ip, password="12345", cleanup_on_exit=False
118
- )
119
- session = BaseSession(
120
- fluent_connection=fluent_connection,
121
- scheme_eval=fluent_connection._connection_interface.scheme_eval,
122
- )
123
-
124
- fluent_connection = FluentConnection(
125
- ip=ip, port=port, password="12345", cleanup_on_exit=False
126
- )
127
- session = BaseSession(
128
- fluent_connection=fluent_connection,
129
- scheme_eval=fluent_connection._connection_interface.scheme_eval,
130
- )
131
- assert session.health_check.is_serving
132
- server.stop(None)
133
- session.exit()
134
- assert not session.health_check.is_serving
135
-
136
-
137
- def test_create_mock_session_by_setting_ip_port_env_var(
138
- monkeypatch: pytest.MonkeyPatch,
139
- ) -> None:
140
- server = grpc.server(futures.ThreadPoolExecutor(max_workers=1))
141
- ip = "127.0.0.1"
142
- port = get_free_port()
143
- server.add_insecure_port(f"{ip}:{port}")
144
- health_pb2_grpc.add_HealthServicer_to_server(MockHealthServicer(), server)
145
- scheme_eval_pb2_grpc.add_SchemeEvalServicer_to_server(
146
- MockSchemeEvalServicer(), server
147
- )
148
- server.start()
149
- monkeypatch.setenv("PYFLUENT_FLUENT_IP", ip)
150
- monkeypatch.setenv("PYFLUENT_FLUENT_PORT", str(port))
151
- fluent_connection = FluentConnection(password="12345", cleanup_on_exit=False)
152
- session = BaseSession(
153
- fluent_connection=fluent_connection,
154
- scheme_eval=fluent_connection._connection_interface.scheme_eval,
155
- )
156
- assert session.health_check.is_serving
157
- server.stop(None)
158
- session.exit()
159
- assert not session.health_check.is_serving
160
-
161
-
162
- def test_create_mock_session_by_passing_grpc_channel() -> None:
163
- server = grpc.server(futures.ThreadPoolExecutor(max_workers=1))
164
- ip = "127.0.0.1"
165
- port = get_free_port()
166
- server.add_insecure_port(f"{ip}:{port}")
167
- health_pb2_grpc.add_HealthServicer_to_server(MockHealthServicer(), server)
168
- scheme_eval_pb2_grpc.add_SchemeEvalServicer_to_server(
169
- MockSchemeEvalServicer(), server
170
- )
171
- server.start()
172
- channel = grpc.insecure_channel(f"{ip}:{port}")
173
- fluent_connection = FluentConnection(
174
- channel=channel, cleanup_on_exit=False, password="12345"
175
- )
176
- session = BaseSession(
177
- fluent_connection=fluent_connection,
178
- scheme_eval=fluent_connection._connection_interface.scheme_eval,
179
- )
180
- assert session.health_check.is_serving
181
- server.stop(None)
182
- session.exit()
183
- assert not session.health_check.is_serving
184
-
185
-
186
- def test_create_mock_session_from_server_info_file(tmp_path: Path) -> None:
187
- server = grpc.server(futures.ThreadPoolExecutor(max_workers=1))
188
- ip = "127.0.0.1"
189
- port = get_free_port()
190
- server.add_insecure_port(f"{ip}:{port}")
191
- health_pb2_grpc.add_HealthServicer_to_server(MockHealthServicer(), server)
192
- scheme_eval_pb2_grpc.add_SchemeEvalServicer_to_server(
193
- MockSchemeEvalServicer(), server
194
- )
195
- server.start()
196
- server_info_file = tmp_path / "server_info.txt"
197
- server_info_file.write_text(f"{ip}:{port}\n12345")
198
- session = BaseSession._create_from_server_info_file(
199
- server_info_file_name=str(server_info_file), cleanup_on_exit=False
200
- )
201
- assert session.health_check.is_serving
202
- server.stop(None)
203
- session.exit()
204
- assert not session.health_check.is_serving
205
-
206
-
207
- def test_create_mock_session_from_server_info_file_with_wrong_password(
208
- tmp_path: Path,
209
- ) -> None:
210
- server = grpc.server(futures.ThreadPoolExecutor(max_workers=1))
211
- ip = "127.0.0.1"
212
- port = get_free_port()
213
- server.add_insecure_port(f"{ip}:{port}")
214
- scheme_eval_pb2_grpc.add_SchemeEvalServicer_to_server(
215
- MockSchemeEvalServicer(), server
216
- )
217
- health_pb2_grpc.add_HealthServicer_to_server(MockHealthServicer(), server)
218
- server.start()
219
- server_info_file = tmp_path / "server_info.txt"
220
- server_info_file.write_text(f"{ip}:{port}\n1234")
221
- with pytest.raises(RuntimeError) as ex:
222
- session = BaseSession._create_from_server_info_file(
223
- server_info_file_name=str(server_info_file),
224
- cleanup_on_exit=False,
225
- )
226
- session.scheme_eval.scheme_eval("")
227
- server.stop(None)
228
- session.exit()
229
- assert ex.value.__context__.code() == grpc.StatusCode.UNAUTHENTICATED
230
-
231
-
232
- def test_create_mock_session_from_launch_fluent_by_passing_ip_port_password() -> None:
233
- server = grpc.server(futures.ThreadPoolExecutor(max_workers=1))
234
- ip = "127.0.0.1"
235
- port = get_free_port()
236
- server.add_insecure_port(f"{ip}:{port}")
237
- health_pb2_grpc.add_HealthServicer_to_server(MockHealthServicer(), server)
238
- scheme_eval_pb2_grpc.add_SchemeEvalServicer_to_server(
239
- MockSchemeEvalServicer(), server
240
- )
241
- settings_pb2_grpc.add_SettingsServicer_to_server(MockSettingsServicer(), server)
242
- server.start()
243
- session = connect_to_fluent(
244
- ip=ip,
245
- port=port,
246
- cleanup_on_exit=False,
247
- password="12345",
248
- )
249
- # check a few dir elements
250
- fields_dir = dir(session.fields)
251
- for attr in ("field_data", "field_info"):
252
- assert attr in fields_dir
253
- assert session.health_check.is_serving
254
- server.stop(None)
255
- session.exit()
256
- assert not session.health_check.is_serving
257
-
258
-
259
- def test_create_mock_session_from_launch_fluent_by_setting_ip_port_env_var(
260
- monkeypatch: pytest.MonkeyPatch,
261
- ) -> None:
262
- server = grpc.server(futures.ThreadPoolExecutor(max_workers=1))
263
- ip = "127.0.0.1"
264
- port = get_free_port()
265
- server.add_insecure_port(f"{ip}:{port}")
266
- health_pb2_grpc.add_HealthServicer_to_server(MockHealthServicer(), server)
267
- scheme_eval_pb2_grpc.add_SchemeEvalServicer_to_server(
268
- MockSchemeEvalServicer(), server
269
- )
270
- settings_pb2_grpc.add_SettingsServicer_to_server(MockSettingsServicer(), server)
271
- server.start()
272
- monkeypatch.setenv("PYFLUENT_FLUENT_IP", ip)
273
- monkeypatch.setenv("PYFLUENT_FLUENT_PORT", str(port))
274
- session = connect_to_fluent(
275
- cleanup_on_exit=False, ip=ip, port=port, password="12345"
276
- )
277
- # check a few dir elements
278
- fields_dir = dir(session.fields)
279
- for attr in ("field_data", "field_info"):
280
- assert attr in fields_dir
281
- assert session.health_check.is_serving
282
- server.stop(None)
283
- session.exit()
284
- assert not session.health_check.is_serving
285
-
286
-
287
- @pytest.mark.parametrize("file_format", ["jou", "py"])
288
- @pytest.mark.fluent_version(">=23.2")
289
- def test_journal_creation(file_format, new_meshing_session):
290
- fd, file_name = tempfile.mkstemp(
291
- suffix=f"-{os.getpid()}.{file_format}",
292
- prefix="pyfluent-",
293
- dir=str(pyfluent.EXAMPLES_PATH),
294
- )
295
- os.close(fd)
296
-
297
- file_name = Path(file_name)
298
-
299
- file_name.touch()
300
- prev_stat = file_name.stat()
301
- prev_mtime = prev_stat.st_mtime
302
- prev_size = prev_stat.st_size
303
- print(f"prev_stat: {prev_stat}")
304
-
305
- session = new_meshing_session
306
- if session.connection_properties.inside_container:
307
- session.journal.start(file_name.name)
308
- else:
309
- session.journal.start(str(file_name))
310
- session = session.switch_to_solver()
311
- session.journal.stop()
312
- new_stat = file_name.stat()
313
- print(f"new_stat: {new_stat}")
314
- assert new_stat.st_mtime > prev_mtime or new_stat.st_size > prev_size
315
-
316
-
317
- @pytest.mark.fluent_version(">=23.2")
318
- def test_start_transcript_file_write(new_meshing_session):
319
- fd, file_name = tempfile.mkstemp(
320
- suffix=f"-{os.getpid()}.trn",
321
- prefix="pyfluent-",
322
- dir=str(pyfluent.EXAMPLES_PATH),
323
- )
324
- os.close(fd)
325
-
326
- file_name = Path(file_name)
327
-
328
- file_name.touch()
329
- # prev_stat = file_name.stat()
330
- # prev_mtime = prev_stat.st_mtime
331
- # prev_size = prev_stat.st_size
332
-
333
- session = new_meshing_session
334
- session.transcript.start(file_name)
335
- session = session.switch_to_solver()
336
- session.transcript.stop()
337
-
338
- # new_stat = file_name.stat()
339
- # this assertion is invalid.
340
- # assert new_stat.st_mtime > prev_mtime or new_stat.st_size > prev_size
341
-
342
-
343
- @pytest.mark.fluent_version(">=23.1")
344
- def test_expected_interfaces_in_solver_session(new_solver_session):
345
- assert all(
346
- intf in dir(new_solver_session) for intf in ("preferences", "tui", "workflow")
347
- )
348
-
349
-
350
- @pytest.mark.fluent_version(">=24.1")
351
- def test_solverworkflow_not_in_solver_session(new_solver_session):
352
- assert "solverworkflow" not in dir(new_solver_session)
353
-
354
-
355
- @pytest.mark.standalone
356
- @pytest.mark.fluent_version(">=23.2")
357
- def test_read_case_using_lightweight_mode():
358
- import_file_name = examples.download_file(
359
- "mixing_elbow.cas.h5", "pyfluent/mixing_elbow"
360
- )
361
- if pyfluent.USE_FILE_TRANSFER_SERVICE:
362
- file_transfer_service = RemoteFileTransferStrategy()
363
- container_dict = {"mount_source": file_transfer_service.MOUNT_SOURCE}
364
- solver = pyfluent.launch_fluent(
365
- case_file_name=import_file_name,
366
- lightweight_mode=True,
367
- container_dict=container_dict,
368
- file_transfer_service=file_transfer_service,
369
- )
370
- else:
371
- solver = pyfluent.launch_fluent(
372
- case_file_name=import_file_name, lightweight_mode=True
373
- )
374
- solver.setup.models.energy.enabled = False
375
- old_fluent_connection_id = id(solver._fluent_connection)
376
- timeout_loop(
377
- id(solver._fluent_connection) != old_fluent_connection_id,
378
- timeout=60,
379
- idle_period=1,
380
- )
381
- timeout_loop(
382
- not solver.setup.models.energy.enabled(),
383
- timeout=60,
384
- idle_period=1,
385
- )
386
- solver.exit()
387
-
388
-
389
- def test_help_does_not_throw(new_solver_session):
390
- help(new_solver_session.file.read)
391
-
392
-
393
- @pytest.fixture
394
- def new_solver_session2(new_solver_session):
395
- return new_solver_session
396
-
397
-
398
- def test_build_from_fluent_connection(new_solver_session, new_solver_session2):
399
- solver1 = new_solver_session
400
- solver2 = new_solver_session2
401
- assert solver1.health_check.is_serving
402
- assert solver2.health_check.is_serving
403
- health_check_service1 = solver1.health_check
404
- cortex_pid2 = solver2._fluent_connection.connection_properties.cortex_pid
405
- # The below hack is performed to check the base class method
406
- # (child class has a method with same name)
407
- solver1.__class__.__bases__[0]._build_from_fluent_connection(
408
- solver1,
409
- fluent_connection=solver2._fluent_connection,
410
- scheme_eval=solver2._fluent_connection._connection_interface.scheme_eval,
411
- )
412
- assert solver1.health_check.is_serving
413
- assert solver2.health_check.is_serving
414
- timeout_loop(
415
- not health_check_service1.is_serving,
416
- timeout=60,
417
- idle_period=1,
418
- )
419
- assert solver1._fluent_connection.connection_properties.cortex_pid == cortex_pid2
420
- assert solver2._fluent_connection.connection_properties.cortex_pid == cortex_pid2
421
-
422
-
423
- @pytest.mark.standalone
424
- def test_recover_grpc_error_from_launch_error(monkeypatch: pytest.MonkeyPatch):
425
- orig_parse_server_info_file = session._parse_server_info_file
426
-
427
- def mock_parse_server_info_file(file_name):
428
- ip, port, password = orig_parse_server_info_file(file_name)
429
- return ip, port - 1, password # provide wrong port
430
-
431
- monkeypatch.setattr(session, "_parse_server_info_file", mock_parse_server_info_file)
432
- with pytest.raises(LaunchFluentError) as ex:
433
- _ = pyfluent.launch_fluent()
434
- # grpc.RpcError -> RuntimeError -> LaunchFluentError
435
- assert ex.value.__context__.__context__.code() == grpc.StatusCode.UNAVAILABLE
436
-
437
-
438
- def test_recover_grpc_error_from_connection_error():
439
- with pytest.raises(RuntimeError) as ex:
440
- pyfluent.connect_to_fluent(ip="127.0.0.1", port=50000, password="abcdefg")
441
- assert ex.value.__context__.code() == grpc.StatusCode.UNAVAILABLE
442
-
443
-
444
- def test_solver_methods(new_solver_session):
445
- solver = new_solver_session
446
-
447
- if solver.get_fluent_version() == FluentVersion.v222:
448
- api_keys = {
449
- "file",
450
- "setup",
451
- "solution",
452
- "results",
453
- "parametric_studies",
454
- "current_parametric_study",
455
- }
456
- assert api_keys.issubset(set(dir(solver)))
457
- if solver.get_fluent_version() == FluentVersion.v232:
458
- api_keys = {
459
- "file",
460
- "mesh",
461
- "server",
462
- "setup",
463
- "solution",
464
- "results",
465
- "parametric_studies",
466
- "current_parametric_study",
467
- "parallel",
468
- "report",
469
- }
470
- assert api_keys.issubset(set(dir(solver)))
471
- if solver.get_fluent_version() >= FluentVersion.v241:
472
- api_keys = {
473
- "file",
474
- "mesh",
475
- "server",
476
- "setup",
477
- "solution",
478
- "results",
479
- "parametric_studies",
480
- "current_parametric_study",
481
- "parallel",
482
- }
483
- if solver.get_fluent_version() >= FluentVersion.v251:
484
- assert api_keys.issubset(set(dir(solver.settings)))
485
- else:
486
- assert api_keys.issubset(set(dir(solver)))
487
-
488
-
489
- @pytest.mark.fluent_version(">=23.2")
490
- def test_get_set_state_on_solver(new_solver_session):
491
- solver = new_solver_session
492
- state = solver.get_state()
493
- assert state
494
- solver.set_state(state)
495
-
496
-
497
- def test_solver_structure(new_solver_session):
498
- solver = new_solver_session
499
- with pytest.warns(PyFluentDeprecationWarning):
500
- solver.field_data
501
- with pytest.warns(PyFluentDeprecationWarning):
502
- solver.svar_data
503
-
504
- assert {
505
- "field_data",
506
- "field_info",
507
- "field_data_streaming",
508
- "solution_variable_data",
509
- "solution_variable_info",
510
- "reduction",
511
- }.issubset(set(dir(solver.fields)))
512
-
513
-
514
- @pytest.mark.fluent_version(">=24.2")
515
- def test_general_exception_behaviour_in_session(new_solver_session):
516
- solver = new_solver_session
517
-
518
- # Read case with non-existent path
519
- with pytest.raises(RuntimeError):
520
- # File not found
521
- solver.settings.file.read(
522
- file_type="case", file_name=r"incorrect_path\incorrect_file.cas.h5"
523
- )
524
-
525
- # Iterate with no case
526
- with pytest.raises(RuntimeError):
527
- # The object is not active
528
- solver.solution.run_calculation.iterate(iter_count=5)
529
-
530
- # Write case without any case loaded or created
531
- with pytest.raises(RuntimeError):
532
- # Uninitialized case
533
- solver.file.write(file_name="sample.cas.h5", file_type="case")
534
-
535
- graphics = solver.results.graphics
536
-
537
- # # Post-process without case
538
- # with pytest.raises(RuntimeError):
539
- # # Does not exist.
540
- # graphics.mesh["mesh-1"] = {"surfaces_list": "*"}
541
- # graphics.mesh["mesh-1"].display()
542
-
543
- case_file = examples.download_file(
544
- "mixing_elbow.cas.h5",
545
- "pyfluent/mixing_elbow",
546
- return_without_path=False,
547
- )
548
- solver.settings.file.read(file_type="case", file_name=case_file)
549
- solver.file.write(file_name="sample.cas.h5", file_type="case")
550
-
551
- graphics.mesh["mesh-1"] = {"surfaces_list": "*"}
552
- graphics.mesh["mesh-1"].display()
553
-
554
- # Post-process without data
555
- with pytest.raises(RuntimeError):
556
- # Invalid result.
557
- graphics.contour["contour-velocity"] = {
558
- "field": "velocity-magnitude",
559
- "surfaces_list": ["wall-elbow"],
560
- }
561
- graphics.contour["contour-velocity"].display()
562
-
563
- solver.solution.run_calculation.iterate(iter_count=5)
564
- graphics.contour["contour-velocity"] = {
565
- "field": "velocity-magnitude",
566
- "surfaces_list": ["wall-elbow"],
567
- }
568
- graphics.contour["contour-velocity"].display()
569
-
570
- examples.download_file(
571
- "sample_2d_mesh.msh.h5",
572
- "pyfluent/surface_mesh",
573
- return_without_path=False,
574
- )
575
-
576
- # Error in server:
577
- # This appears to be a surface mesh.\nSurface meshes cannot be read under the /file/read-case functionality.
578
- # with pytest.raises(RuntimeError):
579
- # solver.settings.file.read(file_type='case', file_name=mesh_file_2d)
580
-
581
-
582
- @pytest.mark.fluent_version(">=23.2")
583
- def test_app_utilities_new_and_old(mixing_elbow_settings_session):
584
- solver = mixing_elbow_settings_session
585
-
586
- assert solver._app_utilities.get_app_mode() == pyfluent.FluentMode.SOLVER
587
-
588
- assert not solver._app_utilities.is_beta_enabled()
589
-
590
- assert not solver._app_utilities.is_wildcard("no")
591
-
592
- assert solver._app_utilities.is_wildcard("yes*")
593
-
594
- assert not solver._app_utilities.is_solution_data_available()