ansys-fluent-core 0.29.dev0__py3-none-any.whl → 0.29.dev2__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.
- ansys/fluent/core/__init__.py +1 -1
- ansys/fluent/core/_version.py +2 -2
- ansys/fluent/core/codegen/tuigen.py +1 -1
- ansys/fluent/core/codegen/walk_api.py +45 -18
- ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
- ansys/fluent/core/generated/datamodel_252/meshing.py +1 -0
- ansys/fluent/core/generated/datamodel_252/preferences.py +7 -0
- ansys/fluent/core/generated/fluent_version_252.py +3 -3
- ansys/fluent/core/generated/meshing/tui_252.py +395 -390
- ansys/fluent/core/generated/solver/settings_252.py +782 -306
- ansys/fluent/core/generated/solver/settings_252.pyi +442 -133
- ansys/fluent/core/generated/solver/tui_252.py +4046 -3737
- ansys/fluent/core/launcher/container_launcher.py +4 -3
- ansys/fluent/core/launcher/fluent_container.py +22 -19
- ansys/fluent/core/launcher/launcher.py +2 -2
- ansys/fluent/core/launcher/pim_launcher.py +2 -2
- ansys/fluent/core/launcher/slurm_launcher.py +2 -2
- ansys/fluent/core/launcher/standalone_launcher.py +2 -2
- ansys/fluent/core/logging.py +2 -0
- ansys/fluent/core/logging_config.yaml +3 -0
- ansys/fluent/core/services/app_utilities.py +2 -1
- ansys/fluent/core/services/datamodel_se.py +141 -61
- ansys/fluent/core/services/field_data.py +252 -0
- ansys/fluent/core/services/interceptors.py +28 -2
- ansys/fluent/core/session.py +7 -2
- ansys/fluent/core/session_solver.py +21 -0
- ansys/fluent/core/streaming_services/datamodel_event_streaming.py +12 -12
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/LICENSE +1 -1
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/METADATA +53 -31
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/RECORD +65 -141
- {ansys_fluent_core-0.29.dev0.dist-info → ansys_fluent_core-0.29.dev2.dist-info}/WHEEL +1 -1
- ansys/fluent/core/docs/README.rst +0 -155
- ansys/fluent/tests/conftest.py +0 -415
- ansys/fluent/tests/fluent_fixtures.py +0 -195
- ansys/fluent/tests/integration/test_optislang/test_optislang_integration.py +0 -263
- ansys/fluent/tests/parametric/test_local_parametric_run.py +0 -36
- ansys/fluent/tests/parametric/test_local_parametric_setup.py +0 -34
- ansys/fluent/tests/parametric/test_parametric_workflow.py +0 -279
- ansys/fluent/tests/test_aero_session.py +0 -88
- ansys/fluent/tests/test_batch_ops.py +0 -39
- ansys/fluent/tests/test_builtin_settings.py +0 -761
- ansys/fluent/tests/test_cad_to_post_ftm.py +0 -525
- ansys/fluent/tests/test_cad_to_post_wtm.py +0 -250
- ansys/fluent/tests/test_casereader.py +0 -324
- ansys/fluent/tests/test_codegen.py +0 -783
- ansys/fluent/tests/test_creatable.py +0 -31
- ansys/fluent/tests/test_data_model_cache.py +0 -434
- ansys/fluent/tests/test_datamodel_api.py +0 -449
- ansys/fluent/tests/test_datamodel_service.py +0 -814
- ansys/fluent/tests/test_datareader.py +0 -103
- ansys/fluent/tests/test_error_handling.py +0 -24
- ansys/fluent/tests/test_events_manager.py +0 -214
- ansys/fluent/tests/test_field_data.py +0 -466
- ansys/fluent/tests/test_file_session.py +0 -355
- ansys/fluent/tests/test_file_transfer_service.py +0 -165
- ansys/fluent/tests/test_fix_doc.py +0 -29
- ansys/fluent/tests/test_flobject.py +0 -1235
- ansys/fluent/tests/test_fluent_fixes.py +0 -106
- ansys/fluent/tests/test_fluent_session.py +0 -270
- ansys/fluent/tests/test_fluent_version.py +0 -66
- ansys/fluent/tests/test_fluent_version_marker.py +0 -65
- ansys/fluent/tests/test_icing_session.py +0 -9
- ansys/fluent/tests/test_launcher.py +0 -529
- ansys/fluent/tests/test_launcher_remote.py +0 -272
- ansys/fluent/tests/test_lispy.py +0 -40
- ansys/fluent/tests/test_logging.py +0 -16
- ansys/fluent/tests/test_mapped_api.py +0 -774
- ansys/fluent/tests/test_meshing_utilities.py +0 -2436
- ansys/fluent/tests/test_meshing_workflow.py +0 -421
- ansys/fluent/tests/test_meshingmode/test_meshing_launch.py +0 -168
- ansys/fluent/tests/test_new_meshing_workflow.py +0 -1801
- ansys/fluent/tests/test_preferences.py +0 -89
- ansys/fluent/tests/test_pure_mesh_vs_mesh_workflow.py +0 -101
- ansys/fluent/tests/test_reduction.py +0 -484
- ansys/fluent/tests/test_rp_vars.py +0 -77
- ansys/fluent/tests/test_scheduler.py +0 -471
- ansys/fluent/tests/test_scheme_eval_222.py +0 -338
- ansys/fluent/tests/test_scheme_eval_231.py +0 -243
- ansys/fluent/tests/test_search.py +0 -344
- ansys/fluent/tests/test_session.py +0 -594
- ansys/fluent/tests/test_settings_api.py +0 -606
- ansys/fluent/tests/test_settings_reader.py +0 -85
- ansys/fluent/tests/test_slurm_future.py +0 -67
- ansys/fluent/tests/test_solution_variables.py +0 -241
- ansys/fluent/tests/test_solver_monitors.py +0 -83
- ansys/fluent/tests/test_solvermode/boundaries_periodic_expDict +0 -1712
- ansys/fluent/tests/test_solvermode/test_boundaries.py +0 -127
- ansys/fluent/tests/test_solvermode/test_calculationactivities.py +0 -20
- ansys/fluent/tests/test_solvermode/test_controls.py +0 -131
- ansys/fluent/tests/test_solvermode/test_general.py +0 -109
- ansys/fluent/tests/test_solvermode/test_initialization.py +0 -83
- ansys/fluent/tests/test_solvermode/test_materials.py +0 -40
- ansys/fluent/tests/test_solvermode/test_methods.py +0 -65
- ansys/fluent/tests/test_solvermode/test_models.py +0 -99
- ansys/fluent/tests/test_solvermode/test_named_expressions.py +0 -35
- ansys/fluent/tests/test_solvermode/test_post_vector.py +0 -22
- ansys/fluent/tests/test_solvermode/test_species_model.py +0 -67
- ansys/fluent/tests/test_streaming_services.py +0 -52
- ansys/fluent/tests/test_systemcoupling.py +0 -44
- ansys/fluent/tests/test_topy.py +0 -179
- ansys/fluent/tests/test_tui_api.py +0 -70
- ansys/fluent/tests/test_type_stub.py +0 -37
- ansys/fluent/tests/test_utils.py +0 -82
- ansys/fluent/tests/util/__init__.py +0 -36
- ansys/fluent/tests/util/meshing_workflow.py +0 -33
- ansys/fluent/tests/util/solver.py +0 -72
- 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()
|