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