ansys-fluent-core 0.29.dev0__py3-none-any.whl → 0.29.dev1__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 (107) hide show
  1. ansys/fluent/core/__init__.py +1 -1
  2. ansys/fluent/core/_version.py +2 -2
  3. ansys/fluent/core/codegen/tuigen.py +1 -1
  4. ansys/fluent/core/codegen/walk_api.py +45 -18
  5. ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
  6. ansys/fluent/core/generated/datamodel_252/meshing.py +1 -0
  7. ansys/fluent/core/generated/datamodel_252/preferences.py +7 -0
  8. ansys/fluent/core/generated/fluent_version_252.py +3 -3
  9. ansys/fluent/core/generated/meshing/tui_252.py +395 -390
  10. ansys/fluent/core/generated/solver/settings_252.py +782 -306
  11. ansys/fluent/core/generated/solver/settings_252.pyi +442 -133
  12. ansys/fluent/core/generated/solver/tui_252.py +4046 -3737
  13. ansys/fluent/core/launcher/container_launcher.py +4 -3
  14. ansys/fluent/core/launcher/fluent_container.py +22 -19
  15. ansys/fluent/core/launcher/launcher.py +2 -2
  16. ansys/fluent/core/launcher/pim_launcher.py +2 -2
  17. ansys/fluent/core/launcher/slurm_launcher.py +2 -2
  18. ansys/fluent/core/launcher/standalone_launcher.py +2 -2
  19. ansys/fluent/core/logging.py +2 -0
  20. ansys/fluent/core/logging_config.yaml +3 -0
  21. ansys/fluent/core/services/app_utilities.py +2 -1
  22. ansys/fluent/core/services/datamodel_se.py +141 -61
  23. ansys/fluent/core/services/field_data.py +252 -0
  24. ansys/fluent/core/services/interceptors.py +28 -2
  25. ansys/fluent/core/session.py +7 -2
  26. ansys/fluent/core/session_solver.py +21 -0
  27. ansys/fluent/core/streaming_services/datamodel_event_streaming.py +12 -12
  28. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev1.dist-info}/LICENSE +1 -1
  29. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev1.dist-info}/METADATA +53 -31
  30. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev1.dist-info}/RECORD +65 -141
  31. {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev1.dist-info}/WHEEL +1 -1
  32. ansys/fluent/core/docs/README.rst +0 -155
  33. ansys/fluent/tests/conftest.py +0 -415
  34. ansys/fluent/tests/fluent_fixtures.py +0 -195
  35. ansys/fluent/tests/integration/test_optislang/test_optislang_integration.py +0 -263
  36. ansys/fluent/tests/parametric/test_local_parametric_run.py +0 -36
  37. ansys/fluent/tests/parametric/test_local_parametric_setup.py +0 -34
  38. ansys/fluent/tests/parametric/test_parametric_workflow.py +0 -279
  39. ansys/fluent/tests/test_aero_session.py +0 -88
  40. ansys/fluent/tests/test_batch_ops.py +0 -39
  41. ansys/fluent/tests/test_builtin_settings.py +0 -761
  42. ansys/fluent/tests/test_cad_to_post_ftm.py +0 -525
  43. ansys/fluent/tests/test_cad_to_post_wtm.py +0 -250
  44. ansys/fluent/tests/test_casereader.py +0 -324
  45. ansys/fluent/tests/test_codegen.py +0 -783
  46. ansys/fluent/tests/test_creatable.py +0 -31
  47. ansys/fluent/tests/test_data_model_cache.py +0 -434
  48. ansys/fluent/tests/test_datamodel_api.py +0 -449
  49. ansys/fluent/tests/test_datamodel_service.py +0 -814
  50. ansys/fluent/tests/test_datareader.py +0 -103
  51. ansys/fluent/tests/test_error_handling.py +0 -24
  52. ansys/fluent/tests/test_events_manager.py +0 -214
  53. ansys/fluent/tests/test_field_data.py +0 -466
  54. ansys/fluent/tests/test_file_session.py +0 -355
  55. ansys/fluent/tests/test_file_transfer_service.py +0 -165
  56. ansys/fluent/tests/test_fix_doc.py +0 -29
  57. ansys/fluent/tests/test_flobject.py +0 -1235
  58. ansys/fluent/tests/test_fluent_fixes.py +0 -106
  59. ansys/fluent/tests/test_fluent_session.py +0 -270
  60. ansys/fluent/tests/test_fluent_version.py +0 -66
  61. ansys/fluent/tests/test_fluent_version_marker.py +0 -65
  62. ansys/fluent/tests/test_icing_session.py +0 -9
  63. ansys/fluent/tests/test_launcher.py +0 -529
  64. ansys/fluent/tests/test_launcher_remote.py +0 -272
  65. ansys/fluent/tests/test_lispy.py +0 -40
  66. ansys/fluent/tests/test_logging.py +0 -16
  67. ansys/fluent/tests/test_mapped_api.py +0 -774
  68. ansys/fluent/tests/test_meshing_utilities.py +0 -2436
  69. ansys/fluent/tests/test_meshing_workflow.py +0 -421
  70. ansys/fluent/tests/test_meshingmode/test_meshing_launch.py +0 -168
  71. ansys/fluent/tests/test_new_meshing_workflow.py +0 -1801
  72. ansys/fluent/tests/test_preferences.py +0 -89
  73. ansys/fluent/tests/test_pure_mesh_vs_mesh_workflow.py +0 -101
  74. ansys/fluent/tests/test_reduction.py +0 -484
  75. ansys/fluent/tests/test_rp_vars.py +0 -77
  76. ansys/fluent/tests/test_scheduler.py +0 -471
  77. ansys/fluent/tests/test_scheme_eval_222.py +0 -338
  78. ansys/fluent/tests/test_scheme_eval_231.py +0 -243
  79. ansys/fluent/tests/test_search.py +0 -344
  80. ansys/fluent/tests/test_session.py +0 -594
  81. ansys/fluent/tests/test_settings_api.py +0 -606
  82. ansys/fluent/tests/test_settings_reader.py +0 -85
  83. ansys/fluent/tests/test_slurm_future.py +0 -67
  84. ansys/fluent/tests/test_solution_variables.py +0 -241
  85. ansys/fluent/tests/test_solver_monitors.py +0 -83
  86. ansys/fluent/tests/test_solvermode/boundaries_periodic_expDict +0 -1712
  87. ansys/fluent/tests/test_solvermode/test_boundaries.py +0 -127
  88. ansys/fluent/tests/test_solvermode/test_calculationactivities.py +0 -20
  89. ansys/fluent/tests/test_solvermode/test_controls.py +0 -131
  90. ansys/fluent/tests/test_solvermode/test_general.py +0 -109
  91. ansys/fluent/tests/test_solvermode/test_initialization.py +0 -83
  92. ansys/fluent/tests/test_solvermode/test_materials.py +0 -40
  93. ansys/fluent/tests/test_solvermode/test_methods.py +0 -65
  94. ansys/fluent/tests/test_solvermode/test_models.py +0 -99
  95. ansys/fluent/tests/test_solvermode/test_named_expressions.py +0 -35
  96. ansys/fluent/tests/test_solvermode/test_post_vector.py +0 -22
  97. ansys/fluent/tests/test_solvermode/test_species_model.py +0 -67
  98. ansys/fluent/tests/test_streaming_services.py +0 -52
  99. ansys/fluent/tests/test_systemcoupling.py +0 -44
  100. ansys/fluent/tests/test_topy.py +0 -179
  101. ansys/fluent/tests/test_tui_api.py +0 -70
  102. ansys/fluent/tests/test_type_stub.py +0 -37
  103. ansys/fluent/tests/test_utils.py +0 -82
  104. ansys/fluent/tests/util/__init__.py +0 -36
  105. ansys/fluent/tests/util/meshing_workflow.py +0 -33
  106. ansys/fluent/tests/util/solver.py +0 -72
  107. ansys_fluent_core-0.29.dev0.dist-info/AUTHORS +0 -12
@@ -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()