Skip to content

feat: Updates for the client side dm-api. #3748

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 14 commits into
base: main
Choose a base branch
from
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
5 changes: 5 additions & 0 deletions codegen/allapigen.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
gt_222 = FluentVersion(version) > FluentVersion.v222
ge_231 = FluentVersion(version) >= FluentVersion.v231
ge_242 = FluentVersion(version) >= FluentVersion.v242
ge_261 = FluentVersion(version) >= FluentVersion.v261

static_infos = {
StaticInfoType.DATAMODEL_WORKFLOW: meshing._datamodel_service_se.get_static_info(
Expand All @@ -39,6 +40,10 @@
static_infos[StaticInfoType.DATAMODEL_MESHING_UTILITIES] = (
meshing._datamodel_service_se.get_static_info("MeshingUtilities")
)
if ge_261:
static_infos[StaticInfoType.DATAMODEL_MESHING_WORKFLOW] = (
meshing._datamodel_service_se.get_static_info("meshing_workflow")
)
meshing.exit()

solver = launch_fluent(
Expand Down
1 change: 1 addition & 0 deletions doc/changelog.d/3748.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Updates for the client side dm-api.
1 change: 1 addition & 0 deletions doc/datamodel_rstgen.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ def generate_meshing_datamodels():
"pm_file_management",
"preferences",
"workflow",
"meshing_workflow",
]
for meshing_datamodel in meshing_datamodels:
try:
Expand Down
1 change: 1 addition & 0 deletions src/ansys/fluent/core/codegen/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class StaticInfoType(Enum):
TUI_SOLVER = auto()
TUI_MESHING = auto()
DATAMODEL_WORKFLOW = auto()
DATAMODEL_MESHING_WORKFLOW = auto()
DATAMODEL_MESHING = auto()
DATAMODEL_PART_MANAGEMENT = auto()
DATAMODEL_PM_FILE_MANAGEMENT = auto()
Expand Down
12 changes: 12 additions & 0 deletions src/ansys/fluent/core/codegen/datamodelgen.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ def _build_command_query_docstring(
"MeshingUtilities": "meshing_utilities",
"flicing": "flicing",
"solverworkflow": "solver_workflow",
"meshing_workflow": "meshing_workflow",
}


Expand Down Expand Up @@ -242,6 +243,13 @@ def __init__(self, version, static_infos: dict, verbose: bool = False):
),
self.version,
)
if StaticInfoType.DATAMODEL_MESHING_WORKFLOW in static_infos:
self._static_info["meshing_workflow"] = DataModelStaticInfo(
StaticInfoType.DATAMODEL_MESHING_WORKFLOW,
"meshing_workflow",
("meshing",),
self.version,
)
if StaticInfoType.DATAMODEL_MESHING in static_infos:
self._static_info["meshing"] = DataModelStaticInfo(
StaticInfoType.DATAMODEL_MESHING, "meshing", ("meshing",), self.version
Expand Down Expand Up @@ -623,6 +631,10 @@ def generate(version, static_infos: dict, verbose: bool = False):
static_infos[StaticInfoType.DATAMODEL_MESHING_UTILITIES] = (
meshing._datamodel_service_se.get_static_info("MeshingUtilities")
)
if FluentVersion(version) >= FluentVersion.v261:
static_infos[StaticInfoType.DATAMODEL_MESHING_WORKFLOW] = (
meshing._datamodel_service_se.get_static_info("meshing_workflow")
)
parser = argparse.ArgumentParser(
description="A script to write Fluent API files with an optional verbose output."
)
Expand Down
86 changes: 86 additions & 0 deletions src/ansys/fluent/core/session_base_meshing.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ def __init__(
self._fluent_version = fluent_version
self._meshing_utilities = None
self._old_workflow = None
self._meshing_workflow = None
self._part_management = None
self._pm_file_management = None
self._preferences = None
Expand Down Expand Up @@ -127,6 +128,13 @@ def workflow(self):
self._old_workflow = _make_datamodel_module(self, "workflow")
return self._old_workflow

@property
def meshing_workflow(self):
"""Full API to meshing and meshing_workflow."""
if self._meshing_workflow is None:
self._meshing_workflow = _make_datamodel_module(self, "meshing_workflow")
return self._meshing_workflow

def watertight_workflow(self, initialize: bool = True):
"""Datamodel root of workflow."""
self._current_workflow = WorkflowMode.WATERTIGHT_MESHING_MODE.value(
Expand Down Expand Up @@ -248,3 +256,81 @@ def preferences(self):
if self._preferences is None:
self._preferences = _make_datamodel_module(self, "preferences")
return self._preferences


# class WorkflowWrapper:
# def __init__(self, workflow):
# self.workflow = workflow
#
# def __getattr__(self, name):
# try:
# return getattr(self.workflow, name)
# except AttributeError as ex:
# _task_object = self.workflow.task_object.get(name)
# if _task_object:
# return TaskWrapper(_task_object)
# else:
# raise ex
#
#
# class TaskWrapper:
# def __init__(self, task):
# self.task = task
#
# def __getattr__(self, name):
# try:
# return getattr(self.task, name)
# except AttributeError as ex:
# if name in self.task.arguments():
# return ArgumentWrapper(self.task, name, self.task.arguments().get(name))
# else:
# raise ex
#
# def __call__(self, *args, **kwargs):
# self.task.execute()
#
#
# class ArgumentWrapper:
# def __init__(self, task, arg_name, arg_state):
# self.__dict__.update(
# dict(
# tash=task,
# arg_name=arg_name,
# arg_state=arg_state,
# )
# )
#
# def __getattr__(self, name):
# # try:
# # return getattr(self.task.arguments()[self.arg_name], name)
# # except AttributeError as ex:
# try:
# if type(self.arg_state) is dict:
# return ArgumentWrapper(self.task, name, self.arg_state[name])
# else:
# return self.arg_state[name]
# except KeyError:
# raise AttributeError(f"{self.arg_name} has no object named {name}.")
#
# def __setattr__(self, name, value):
# try:
# # if type(self.arg_state) is dict:
# # ArgumentWrapper(self.task, self.arg_state[name])
# # else:
# self.task.arguments.update_dict(dict(name=value))
# except KeyError as ex:
# raise AttributeError(f"No object named {name}.") from ex
#
# def __call__(self, *args, **kwargs):
# return self.arg_state
#
#
# class SubArgumentWrapper:
# def __init__(self, arg_state):
# self.arg_state = arg_state
#
# def __getattr__(self, name):
# if type(self.arg_state[name]) is dict:
# return SubArgumentWrapper(self.arg_state[name])
# else:
# return self.arg_state[name]
5 changes: 5 additions & 0 deletions src/ansys/fluent/core/session_meshing.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,11 @@ def workflow(self):
"""Workflow datamodel root."""
return super(Meshing, self).workflow

@property
def meshing_workflow(self):
"""Full API to meshing and meshing_workflow."""
return super(Meshing, self).meshing_workflow

@property
def PartManagement(self):
"""Part management datamodel root."""
Expand Down
6 changes: 6 additions & 0 deletions src/ansys/fluent/core/session_pure_meshing.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class PureMeshing(BaseSession):

_rules = [
"workflow",
"meshing_workflow",
"meshing",
"MeshingUtilities",
"PartManagement",
Expand Down Expand Up @@ -146,6 +147,11 @@ def workflow(self):
"""Datamodel root of workflow."""
return self._base_meshing.workflow

@property
def meshing_workflow(self):
"""Full API to meshing and meshing_workflow."""
return self._base_meshing.meshing_workflow

def watertight(self):
"""Get a new watertight workflow."""
return self._base_meshing.watertight_workflow()
Expand Down
5 changes: 5 additions & 0 deletions src/ansys/fluent/core/session_pure_meshing.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ from ansys.fluent.core.generated.datamodel_252.preferences import (
Root as preferences_root,
)
from ansys.fluent.core.generated.datamodel_252.workflow import Root as workflow_root
from ansys.fluent.core.generated.datamodel_261.meshing_workflow import (
Root as meshing_workflow_root,
)
from ansys.fluent.core.generated.meshing.tui_252 import main_menu

class PureMeshing:
Expand All @@ -45,6 +48,8 @@ class PureMeshing:
def meshing_utilities(self) -> meshing_utilities_root: ...
@property
def workflow(self) -> workflow_root: ...
@property
def meshing_workflow(self) -> meshing_workflow_root: ...
def watertight(self): ...
def fault_tolerant(self): ...
def two_dimensional_meshing(self): ...
Expand Down
2 changes: 2 additions & 0 deletions tests/test_codegen.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ def test_codegen_with_tui_solver_static_info(mode, monkeypatch):

_static_info_type_by_rules = {
"workflow": StaticInfoType.DATAMODEL_WORKFLOW,
"meshing_workflow": StaticInfoType.DATAMODEL_MESHING_WORKFLOW,
"meshing": StaticInfoType.DATAMODEL_MESHING,
"PartManagement": StaticInfoType.DATAMODEL_PART_MANAGEMENT,
"PMFileManagement": StaticInfoType.DATAMODEL_PM_FILE_MANAGEMENT,
Expand Down Expand Up @@ -411,6 +412,7 @@ def test_codegen_with_datamodel_static_info(monkeypatch, rules):
api_tree_expected = {"<meshing_session>": {}, "<solver_session>": {}}
if rules in [
"workflow",
"meshing_workflow",
"meshing",
"PartManagement",
"PMFileManagement",
Expand Down
Loading
Loading