Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ dependencies = [
"pandas>=1.1.0,<3.0.0",
"pyansys-tools-report>=0.8.1",
"pyyaml>=6.0",
"typing-extensions>=4.12"
]
dynamic = ["version"]

Expand Down Expand Up @@ -233,3 +234,8 @@ skips = [
"B604",
"B607",
]

[tool.basedpyright]
reportUnknownMemberType = false
reportExplicitAny = false
reportPrivateUsage = false
8 changes: 6 additions & 2 deletions src/ansys/fluent/core/examples/downloads.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from pathlib import Path
import re
import shutil
from typing import TypeAlias
import zipfile

import ansys.fluent.core as pyfluent
Expand Down Expand Up @@ -71,10 +72,13 @@ def _get_file_url(file_name: str, directory: str | None = None) -> str:
return f"https://github.com/ansys/example-data/raw/main/{file_name}"


PathType: TypeAlias = "os.PathLike[str | bytes] | str | bytes"


def _retrieve_file(
url: str,
file_name: str,
save_path: str | None = None,
save_path: PathType | None = None,
return_without_path: bool | None = False,
) -> str:
"""Download specified file from specified URL."""
Expand Down Expand Up @@ -121,7 +125,7 @@ def _retrieve_file(
def download_file(
file_name: str,
directory: str | None = None,
save_path: str | None = None,
save_path: PathType | None = None,
return_without_path: bool | None = None,
) -> str:
"""Download specified example file from the Ansys example data repository.
Expand Down
80 changes: 46 additions & 34 deletions src/ansys/fluent/core/launcher/container_launcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,12 @@
>>> container_solver_session = container_solver_launcher()
"""

import inspect
import logging
import os
import time
from typing import Any
from typing import Any, TypedDict

from typing_extensions import Unpack

from ansys.fluent.core.fluent_connection import FluentConnection
from ansys.fluent.core.launcher.fluent_container import (
Expand All @@ -64,6 +65,37 @@
from ansys.fluent.core.session import _parse_server_info_file
from ansys.fluent.core.utils.fluent_version import FluentVersion


class ContainerArgsWithoutDryRun(
TypedDict, total=False
): # pylint: disable=missing-class-docstring
ui_mode: UIMode | str | None
graphics_driver: (
FluentWindowsGraphicsDriver | FluentLinuxGraphicsDriver | str | None
)
product_version: FluentVersion | str | float | int | None
dimension: Dimension | int | None
precision: Precision | str | None
processor_count: int | None
start_timeout: int
additional_arguments: str
container_dict: dict[str, Any] | None
cleanup_on_exit: bool
start_transcript: bool
py: bool | None
gpu: bool | None
start_watchdog: bool | None
file_transfer_service: Any | None
use_docker_compose: bool | None
use_podman_compose: bool | None


class ContainerArgs(
ContainerArgsWithoutDryRun, total=False
): # pylint: disable=missing-class-docstring
dry_run: bool


_THIS_DIR = os.path.dirname(__file__)
_OPTIONS_FILE = os.path.join(_THIS_DIR, "fluent_launcher_options.json")
logger = logging.getLogger("pyfluent.launcher")
Expand All @@ -89,27 +121,8 @@ class DockerLauncher:

def __init__(
self,
mode: FluentMode | str | None = None,
ui_mode: UIMode | str | None = None,
graphics_driver: (
FluentWindowsGraphicsDriver | FluentLinuxGraphicsDriver | str | None
) = None,
product_version: FluentVersion | str | float | int | None = None,
dimension: Dimension | int | None = None,
precision: Precision | str | None = None,
processor_count: int | None = None,
start_timeout: int = 60,
additional_arguments: str = "",
container_dict: dict | None = None,
dry_run: bool = False,
cleanup_on_exit: bool = True,
start_transcript: bool = True,
py: bool | None = None,
gpu: bool | None = None,
start_watchdog: bool | None = None,
file_transfer_service: Any | None = None,
use_docker_compose: bool | None = None,
use_podman_compose: bool | None = None,
mode: FluentMode | str,
**kwargs: Unpack[ContainerArgs],
):
"""
Launch a Fluent session in container mode.
Expand Down Expand Up @@ -183,31 +196,30 @@ def __init__(
In job scheduler environments (e.g., SLURM, LSF, PBS), resources and compute nodes are allocated,
and core counts are queried from these environments before being passed to Fluent.
"""
locals_ = locals().copy()
argvals = {
arg: locals_.get(arg)
for arg in inspect.getargvalues(inspect.currentframe()).args
}
self.argvals, self.new_session = _get_argvals_and_session(argvals)
if self.argvals["start_timeout"] is None:
self.argvals, self.new_session = _get_argvals_and_session(
{**kwargs, mode: mode}
)
if self.argvals.get("start_timeout") is None:
self.argvals["start_timeout"] = 60
self.file_transfer_service = file_transfer_service
self.file_transfer_service = kwargs.get("file_transfer_service")
if self.argvals["mode"] == FluentMode.SOLVER_ICING:
self.argvals["fluent_icing"] = True
if self.argvals["container_dict"] is None:
if self.argvals.get("container_dict") is None:
self.argvals["container_dict"] = {}
if self.argvals["product_version"]:
if "product_version" in self.argvals:
self.argvals["container_dict"][
"image_tag"
] = f"v{FluentVersion(self.argvals['product_version']).value}"

self._args = _build_fluent_launch_args_string(**self.argvals).split()
if FluentMode.is_meshing(self.argvals["mode"]):
self._args.append(" -meshing")

use_docker_compose = kwargs.get("use_docker_compose")
use_podman_compose = kwargs.get("use_podman_compose")
self._compose_config = ComposeConfig(use_docker_compose, use_podman_compose)

def __call__(self):

if self.argvals["dry_run"]:
config_dict, *_ = configure_container_dict(
self._args,
Expand Down
Loading
Loading