ansys-fluent-core 0.28.dev0__py3-none-any.whl → 0.28.2__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 (63) hide show
  1. ansys/fluent/core/__init__.py +15 -16
  2. ansys/fluent/core/_version.py +1 -1
  3. ansys/fluent/core/codegen/allapigen.py +0 -3
  4. ansys/fluent/core/codegen/builtin_settingsgen.py +5 -20
  5. ansys/fluent/core/codegen/print_fluent_version.py +9 -14
  6. ansys/fluent/core/codegen/walk_api.py +57 -0
  7. ansys/fluent/core/fluent_connection.py +26 -22
  8. ansys/fluent/core/generated/api_tree/api_objects.json +1 -1
  9. ansys/fluent/core/generated/datamodel_252/meshing.py +21 -0
  10. ansys/fluent/core/generated/datamodel_252/preferences.py +14 -0
  11. ansys/fluent/core/generated/fluent_version_252.py +3 -3
  12. ansys/fluent/core/generated/meshing/tui_252.py +1451 -1396
  13. ansys/fluent/core/generated/solver/settings_252.py +9300 -6625
  14. ansys/fluent/core/generated/solver/settings_252.pyi +6625 -5423
  15. ansys/fluent/core/generated/solver/tui_252.py +5898 -5057
  16. ansys/fluent/core/journaling.py +4 -4
  17. ansys/fluent/core/launcher/fluent_container.py +31 -7
  18. ansys/fluent/core/launcher/launcher.py +3 -2
  19. ansys/fluent/core/launcher/launcher_utils.py +9 -0
  20. ansys/fluent/core/launcher/process_launch_string.py +8 -6
  21. ansys/fluent/core/launcher/pyfluent_enums.py +6 -3
  22. ansys/fluent/core/launcher/server_info.py +25 -2
  23. ansys/fluent/core/launcher/slurm_launcher.py +6 -3
  24. ansys/fluent/core/launcher/standalone_launcher.py +11 -9
  25. ansys/fluent/core/post_objects/post_helper.py +16 -10
  26. ansys/fluent/core/services/__init__.py +2 -0
  27. ansys/fluent/core/services/api_upgrade.py +11 -9
  28. ansys/fluent/core/services/app_utilities.py +408 -0
  29. ansys/fluent/core/services/datamodel_se.py +172 -58
  30. ansys/fluent/core/services/datamodel_tui.py +5 -2
  31. ansys/fluent/core/services/field_data.py +1 -0
  32. ansys/fluent/core/services/reduction.py +2 -0
  33. ansys/fluent/core/services/settings.py +5 -2
  34. ansys/fluent/core/session.py +27 -4
  35. ansys/fluent/core/session_pure_meshing.py +1 -1
  36. ansys/fluent/core/session_solver.py +0 -1
  37. ansys/fluent/core/solver/__init__.py +6 -0
  38. ansys/fluent/core/solver/flobject.py +15 -27
  39. ansys/fluent/core/solver/function/reduction.py +3 -0
  40. ansys/fluent/core/solver/settings_builtin_data.py +1 -1
  41. ansys/fluent/core/streaming_services/datamodel_event_streaming.py +13 -13
  42. ansys/fluent/core/streaming_services/events_streaming.py +336 -52
  43. ansys/fluent/tests/conftest.py +30 -0
  44. ansys/fluent/tests/test_builtin_settings.py +1 -1
  45. ansys/fluent/tests/test_codegen.py +0 -410
  46. ansys/fluent/tests/test_datamodel_api.py +429 -0
  47. ansys/fluent/tests/test_datamodel_service.py +64 -64
  48. ansys/fluent/tests/test_events_manager.py +24 -6
  49. ansys/fluent/tests/test_field_data.py +32 -0
  50. ansys/fluent/tests/test_launcher.py +30 -2
  51. ansys/fluent/tests/test_mapped_api.py +766 -0
  52. ansys/fluent/tests/test_reduction.py +30 -0
  53. ansys/fluent/tests/test_session.py +16 -1
  54. ansys/fluent/tests/test_settings_api.py +21 -0
  55. ansys/fluent/tests/test_solution_variables.py +27 -0
  56. ansys/fluent/tests/util/__init__.py +36 -0
  57. {ansys_fluent_core-0.28.dev0.dist-info → ansys_fluent_core-0.28.2.dist-info}/METADATA +4 -3
  58. {ansys_fluent_core-0.28.dev0.dist-info → ansys_fluent_core-0.28.2.dist-info}/RECORD +61 -58
  59. {ansys_fluent_core-0.28.dev0.dist-info → ansys_fluent_core-0.28.2.dist-info}/WHEEL +1 -1
  60. ansys/fluent/core/codegen/settingsgen_old.py +0 -535
  61. ansys/fluent/tests/fluent/test_version/test.py +0 -2
  62. {ansys_fluent_core-0.28.dev0.dist-info → ansys_fluent_core-0.28.2.dist-info}/AUTHORS +0 -0
  63. {ansys_fluent_core-0.28.dev0.dist-info → ansys_fluent_core-0.28.2.dist-info}/LICENSE +0 -0
@@ -0,0 +1,408 @@
1
+ """Wrappers over AppUtilities gRPC service of Fluent."""
2
+
3
+ from enum import Enum
4
+ from typing import List, Tuple
5
+
6
+ import grpc
7
+
8
+ from ansys.api.fluent.v0 import app_utilities_pb2 as AppUtilitiesProtoModule
9
+ from ansys.api.fluent.v0 import app_utilities_pb2_grpc as AppUtilitiesGrpcModule
10
+ from ansys.fluent.core.services.interceptors import (
11
+ BatchInterceptor,
12
+ ErrorStateInterceptor,
13
+ GrpcErrorInterceptor,
14
+ TracingInterceptor,
15
+ )
16
+ from ansys.fluent.core.streaming_services.events_streaming import SolverEvent
17
+
18
+
19
+ class AppUtilitiesService:
20
+ """AppUtilities Service."""
21
+
22
+ def __init__(
23
+ self, channel: grpc.Channel, metadata: List[Tuple[str, str]], fluent_error_state
24
+ ):
25
+ """__init__ method of AppUtilities class."""
26
+ intercept_channel = grpc.intercept_channel(
27
+ channel,
28
+ GrpcErrorInterceptor(),
29
+ ErrorStateInterceptor(fluent_error_state),
30
+ TracingInterceptor(),
31
+ BatchInterceptor(),
32
+ )
33
+ self._stub = AppUtilitiesGrpcModule.AppUtilitiesStub(intercept_channel)
34
+ self._metadata = metadata
35
+
36
+ def get_product_version(
37
+ self, request: AppUtilitiesProtoModule.GetProductVersionRequest
38
+ ) -> AppUtilitiesProtoModule.GetProductVersionResponse:
39
+ """Get product version RPC of AppUtilities service."""
40
+ return self._stub.GetProductVersion(request, metadata=self._metadata)
41
+
42
+ def get_build_info(
43
+ self, request: AppUtilitiesProtoModule.GetBuildInfoRequest
44
+ ) -> AppUtilitiesProtoModule.GetBuildInfoResponse:
45
+ """Get build info RPC of AppUtilities service."""
46
+ return self._stub.GetBuildInfo(request, metadata=self._metadata)
47
+
48
+ def get_controller_process_info(
49
+ self, request: AppUtilitiesProtoModule.GetControllerProcessInfoRequest
50
+ ) -> AppUtilitiesProtoModule.GetControllerProcessInfoResponse:
51
+ """Get controller process info RPC of AppUtilities service."""
52
+ return self._stub.GetControllerProcessInfo(request, metadata=self._metadata)
53
+
54
+ def get_solver_process_info(
55
+ self, request: AppUtilitiesProtoModule.GetSolverProcessInfoRequest
56
+ ) -> AppUtilitiesProtoModule.GetSolverProcessInfoResponse:
57
+ """Get solver process info RPC of AppUtilities service."""
58
+ return self._stub.GetSolverProcessInfo(request, metadata=self._metadata)
59
+
60
+ def get_app_mode(
61
+ self, request: AppUtilitiesProtoModule.GetAppModeRequest
62
+ ) -> AppUtilitiesProtoModule.GetAppModeResponse:
63
+ """Get app mode RPC of AppUtilities service."""
64
+ return self._stub.GetAppMode(request, metadata=self._metadata)
65
+
66
+ def start_python_journal(
67
+ self, request: AppUtilitiesProtoModule.StartPythonJournalRequest
68
+ ) -> AppUtilitiesProtoModule.StartPythonJournalResponse:
69
+ """Start python journal RPC of AppUtilities service."""
70
+ return self._stub.StartPythonJournal(request, metadata=self._metadata)
71
+
72
+ def stop_python_journal(
73
+ self, request: AppUtilitiesProtoModule.StopPythonJournalRequest
74
+ ) -> AppUtilitiesProtoModule.StopPythonJournalResponse:
75
+ """Stop python journal RPC of AppUtilities service."""
76
+ return self._stub.StopPythonJournal(request, metadata=self._metadata)
77
+
78
+ def is_beta_enabled(
79
+ self, request: AppUtilitiesProtoModule.IsBetaEnabledRequest
80
+ ) -> AppUtilitiesProtoModule.IsBetaEnabledResponse:
81
+ """Is beta enabled RPC of AppUtilities service."""
82
+ return self._stub.IsBetaEnabled(request, metadata=self._metadata)
83
+
84
+ def is_wildcard(
85
+ self, request: AppUtilitiesProtoModule.IsWildcardRequest
86
+ ) -> AppUtilitiesProtoModule.IsWildcardResponse:
87
+ """Is wildcard RPC of AppUtilities service."""
88
+ return self._stub.IsWildcard(request, metadata=self._metadata)
89
+
90
+ def is_solution_data_available(
91
+ self, request: AppUtilitiesProtoModule.IsSolutionDataAvailableRequest
92
+ ) -> AppUtilitiesProtoModule.IsSolutionDataAvailableResponse:
93
+ """Is solution data available RPC of AppUtilities service."""
94
+ return self._stub.IsSolutionDataAvailable(request, metadata=self._metadata)
95
+
96
+ def register_pause_on_solution_events(
97
+ self, request: AppUtilitiesProtoModule.RegisterPauseOnSolutionEventsRequest
98
+ ) -> AppUtilitiesProtoModule.RegisterPauseOnSolutionEventsResponse:
99
+ """Register on pause solution events RPC of AppUtilities service."""
100
+ return self._stub.RegisterPauseOnSolutionEvents(
101
+ request, metadata=self._metadata
102
+ )
103
+
104
+ def resume_on_solution_event(
105
+ self, request: AppUtilitiesProtoModule.ResumeOnSolutionEventRequest
106
+ ) -> AppUtilitiesProtoModule.ResumeOnSolutionEventResponse:
107
+ """Resume on solution event RPC of AppUtilities service."""
108
+ return self._stub.ResumeOnSolutionEvent(request, metadata=self._metadata)
109
+
110
+ def unregister_pause_on_solution_events(
111
+ self, request: AppUtilitiesProtoModule.UnregisterPauseOnSolutionEventsRequest
112
+ ) -> AppUtilitiesProtoModule.UnregisterPauseOnSolutionEventsResponse:
113
+ """Unregister on pause solution events RPC of AppUtilities service."""
114
+ return self._stub.UnregisterPauseOnSolutionEvents(
115
+ request, metadata=self._metadata
116
+ )
117
+
118
+ def exit(
119
+ self, request: AppUtilitiesProtoModule.ExitRequest
120
+ ) -> AppUtilitiesProtoModule.ExitResponse:
121
+ """Exit RPC of AppUtilities service."""
122
+ return self._stub.Exit(request, metadata=self._metadata)
123
+
124
+
125
+ class AppUtilitiesOld:
126
+ """AppUtilitiesOld."""
127
+
128
+ def __init__(self, scheme_eval):
129
+ """__init__ method of AppUtilitiesOld class."""
130
+ self.scheme_eval = scheme_eval
131
+
132
+ def get_product_version(self) -> str:
133
+ """Get product version."""
134
+ return self.scheme_eval.version
135
+
136
+ def get_build_info(self) -> dict:
137
+ """Get build info."""
138
+ build_time = self.scheme_eval.scheme_eval("(inquire-build-time)")
139
+ build_id = self.scheme_eval.scheme_eval("(inquire-build-id)")
140
+ vcs_revision = self.scheme_eval.scheme_eval("(inquire-src-vcs-id)")
141
+ vcs_branch = self.scheme_eval.scheme_eval("(inquire-src-vcs-branch)")
142
+ return {
143
+ "build_time": build_time,
144
+ "build_id": build_id,
145
+ "vcs_revision": vcs_revision,
146
+ "vcs_branch": vcs_branch,
147
+ }
148
+
149
+ def get_controller_process_info(self) -> dict:
150
+ """Get controller process info."""
151
+ cortex_host = self.scheme_eval.scheme_eval("(cx-cortex-host)")
152
+ cortex_pid = self.scheme_eval.scheme_eval("(cx-cortex-id)")
153
+ cortex_pwd = self.scheme_eval.scheme_eval("(cortex-pwd)")
154
+ return {
155
+ "hostname": cortex_host,
156
+ "process_id": cortex_pid,
157
+ "working_directory": cortex_pwd,
158
+ }
159
+
160
+ def get_solver_process_info(self) -> dict:
161
+ """Get solver process info."""
162
+ fluent_host = self.scheme_eval.scheme_eval("(cx-client-host)")
163
+ fluent_pid = self.scheme_eval.scheme_eval("(cx-client-id)")
164
+ fluent_pwd = self.scheme_eval.scheme_eval("(cx-send '(cx-client-pwd))")
165
+ return {
166
+ "hostname": fluent_host,
167
+ "process_id": fluent_pid,
168
+ "working_directory": fluent_pwd,
169
+ }
170
+
171
+ def get_app_mode(self) -> Enum:
172
+ """Get app mode."""
173
+ from ansys.fluent.core import FluentMode
174
+
175
+ if self.scheme_eval.scheme_eval("(cx-solver-mode?)"):
176
+ mode_str = self.scheme_eval.scheme_eval('(getenv "PRJAPP_APP")')
177
+ if mode_str == "flaero_server":
178
+ return FluentMode.SOLVER_AERO
179
+ elif mode_str == "flicing":
180
+ return FluentMode.SOLVER_ICING
181
+ else:
182
+ return FluentMode.SOLVER
183
+ else:
184
+ return FluentMode.MESHING
185
+
186
+ def start_python_journal(self, journal_name: str | None = None) -> int:
187
+ """Start python journal."""
188
+ if journal_name:
189
+ self.scheme_eval.exec([f'(api-start-python-journal "{journal_name}")'])
190
+ else:
191
+ self.scheme_eval.scheme_eval(
192
+ "(define pyfluent-journal-str-port (open-output-string))"
193
+ )
194
+ self.scheme_eval.scheme_eval(
195
+ "(api-echo-python-port pyfluent-journal-str-port)"
196
+ )
197
+ return "1"
198
+
199
+ def stop_python_journal(self, journal_id: str | None = None) -> str:
200
+ """Stop python journal."""
201
+ if journal_id:
202
+ self.scheme_eval.scheme_eval(
203
+ "(api-unecho-python-port pyfluent-journal-str-port)"
204
+ )
205
+ journal_str = self.scheme_eval.scheme_eval(
206
+ "(close-output-port pyfluent-journal-str-port)"
207
+ )
208
+ return journal_str
209
+ else:
210
+ self.scheme_eval.exec(["(api-stop-python-journal)"])
211
+
212
+ def is_beta_enabled(self) -> bool:
213
+ """Is beta enabled."""
214
+ return self.scheme_eval.scheme_eval("(is-beta-feature-available?)")
215
+
216
+ def is_wildcard(self, input: str | None = None) -> bool:
217
+ """Is wildcard."""
218
+ return self.scheme_eval.scheme_eval(f'(has-fnmatch-wild-card? "{input}")')
219
+
220
+ def is_solution_data_available(self) -> bool:
221
+ """Is solution data available."""
222
+ return self.scheme_eval.scheme_eval("(data-valid?)")
223
+
224
+ def register_pause_on_solution_events(self, solution_event: SolverEvent) -> int:
225
+ """Register pause on solution events."""
226
+ unique_id: int = self.scheme_eval.scheme_eval(
227
+ f"""
228
+ (let
229
+ ((ids
230
+ (let loop ((i 1))
231
+ (define next-id (string->symbol (format #f "pyfluent-~d" i)))
232
+ (if (check-monitor-existence next-id)
233
+ (loop (1+ i))
234
+ (list i next-id)
235
+ )
236
+ )
237
+ ))
238
+ (register-solution-monitor
239
+ (cadr ids)
240
+ (lambda (niter time)
241
+ (if (integer? niter)
242
+ (begin
243
+ (events/transmit 'auto-pause (cons (car ids) niter))
244
+ (grpcserver/auto-pause (is-server-running?) (cadr ids))
245
+ )
246
+ )
247
+ ()
248
+ )
249
+ {'#t' if solution_event == SolverEvent.TIMESTEP_ENDED else '#f'}
250
+ )
251
+ (car ids)
252
+ )
253
+ """
254
+ )
255
+ return unique_id
256
+
257
+ def resume_on_solution_event(self, registration_id: int) -> None:
258
+ """Resume on solution event."""
259
+ self.scheme_eval.scheme_eval(
260
+ f"(grpcserver/auto-resume (is-server-running?) 'pyfluent-{registration_id})"
261
+ )
262
+
263
+ def unregister_pause_on_solution_events(self, registration_id: int) -> None:
264
+ """Unregister pause on solution events."""
265
+ self.scheme_eval.scheme_eval(
266
+ f"(cancel-solution-monitor 'pyfluent-{registration_id})"
267
+ )
268
+
269
+ def exit(self) -> None:
270
+ """Exit."""
271
+ self.scheme_eval.exec(("(exit-server)",))
272
+
273
+
274
+ class AppUtilities:
275
+ """AppUtilities."""
276
+
277
+ def __init__(self, service: AppUtilitiesService):
278
+ """__init__ method of AppUtilities class."""
279
+ self.service = service
280
+
281
+ def get_product_version(self) -> str:
282
+ """Get product version."""
283
+ request = AppUtilitiesProtoModule.GetProductVersionRequest()
284
+ response = self.service.get_product_version(request)
285
+ return f"{response.major}.{response.minor}.{response.patch}"
286
+
287
+ def get_build_info(self) -> dict:
288
+ """Get build info."""
289
+ request = AppUtilitiesProtoModule.GetBuildInfoRequest()
290
+ response = self.service.get_build_info(request)
291
+ return {
292
+ "build_time": response.build_time,
293
+ "build_id": response.build_id,
294
+ "vcs_revision": response.vcs_revision,
295
+ "vcs_branch": response.vcs_branch,
296
+ }
297
+
298
+ def get_controller_process_info(self) -> dict:
299
+ """Get controller process info."""
300
+ request = AppUtilitiesProtoModule.GetControllerProcessInfoRequest()
301
+ response = self.service.get_controller_process_info(request)
302
+ return {
303
+ "hostname": response.hostname,
304
+ "process_id": response.process_id,
305
+ "working_directory": response.working_directory,
306
+ }
307
+
308
+ def get_solver_process_info(self) -> dict:
309
+ """Get solver process info."""
310
+ request = AppUtilitiesProtoModule.GetSolverProcessInfoRequest()
311
+ response = self.service.get_solver_process_info(request)
312
+ return {
313
+ "hostname": response.hostname,
314
+ "process_id": response.process_id,
315
+ "working_directory": response.working_directory,
316
+ }
317
+
318
+ def get_app_mode(self) -> Enum:
319
+ """Get app mode.
320
+
321
+ Raises
322
+ ------
323
+ ValueError
324
+ If app mode is unknown.
325
+ """
326
+ import ansys.fluent.core as pyfluent
327
+
328
+ request = AppUtilitiesProtoModule.GetAppModeRequest()
329
+ response = self.service.get_app_mode(request)
330
+ match response.app_mode:
331
+ case AppUtilitiesProtoModule.APP_MODE_UNKNOWN:
332
+ raise ValueError("Unknown app mode.")
333
+ case AppUtilitiesProtoModule.APP_MODE_MESHING:
334
+ return pyfluent.FluentMode.MESHING
335
+ case AppUtilitiesProtoModule.APP_MODE_SOLVER:
336
+ return pyfluent.FluentMode.SOLVER
337
+ case AppUtilitiesProtoModule.APP_MODE_SOLVER_ICING:
338
+ return pyfluent.FluentMode.SOLVER_ICING
339
+ case AppUtilitiesProtoModule.APP_MODE_SOLVER_AERO:
340
+ return pyfluent.FluentMode.SOLVER_AERO
341
+
342
+ def start_python_journal(self, journal_name: str | None = None) -> int:
343
+ """Start python journal."""
344
+ request = AppUtilitiesProtoModule.StartPythonJournalRequest()
345
+ if journal_name:
346
+ request.journal_name = journal_name
347
+ response = self.service.start_python_journal(request)
348
+ return response.journal_id
349
+
350
+ def stop_python_journal(self, journal_id: str | None = None) -> str:
351
+ """Stop python journal."""
352
+ request = AppUtilitiesProtoModule.StopPythonJournalRequest()
353
+ if journal_id:
354
+ request.journal_id = journal_id
355
+ response = self.service.stop_python_journal(request)
356
+ return response.journal_str
357
+
358
+ def is_beta_enabled(self) -> bool:
359
+ """Is beta enabled."""
360
+ request = AppUtilitiesProtoModule.IsBetaEnabledRequest()
361
+ response = self.service.is_beta_enabled(request)
362
+ return response.is_beta_enabled
363
+
364
+ def is_wildcard(self, input: str | None = None) -> bool:
365
+ """Is wildcard."""
366
+ request = AppUtilitiesProtoModule.IsWildcardRequest()
367
+ request.input = input
368
+ response = self.service.is_wildcard(request)
369
+ return response.is_wildcard
370
+
371
+ def is_solution_data_available(self) -> bool:
372
+ """Is solution data available."""
373
+ request = AppUtilitiesProtoModule.IsSolutionDataAvailableRequest()
374
+ response = self.service.is_solution_data_available(request)
375
+ return response.is_solution_data_available
376
+
377
+ def register_pause_on_solution_events(self, solution_event: SolverEvent) -> int:
378
+ """Register pause on solution events."""
379
+ request = AppUtilitiesProtoModule.RegisterPauseOnSolutionEventsRequest()
380
+ request.solution_event = AppUtilitiesProtoModule.SOLUTION_EVENT_UNKNOWN
381
+ match solution_event:
382
+ case SolverEvent.ITERATION_ENDED:
383
+ request.solution_event = (
384
+ AppUtilitiesProtoModule.SOLUTION_EVENT_ITERATION
385
+ )
386
+ case SolverEvent.TIMESTEP_ENDED:
387
+ request.solution_event = (
388
+ AppUtilitiesProtoModule.SOLUTION_EVENT_TIME_STEP
389
+ )
390
+ response = self.service.register_pause_on_solution_events(request)
391
+ return response.registration_id
392
+
393
+ def resume_on_solution_event(self, registration_id: int) -> None:
394
+ """Resume on solution event."""
395
+ request = AppUtilitiesProtoModule.ResumeOnSolutionEventRequest()
396
+ request.registration_id = registration_id
397
+ self.service.resume_on_solution_event(request)
398
+
399
+ def unregister_pause_on_solution_events(self, registration_id: int) -> None:
400
+ """Unregister pause on solution events."""
401
+ request = AppUtilitiesProtoModule.UnregisterPauseOnSolutionEventsRequest()
402
+ request.registration_id = registration_id
403
+ self.service.unregister_pause_on_solution_events(request)
404
+
405
+ def exit(self) -> None:
406
+ """Exit."""
407
+ request = AppUtilitiesProtoModule.ExitRequest()
408
+ self.service.exit(request)