diff --git a/cyprecice/__init__.pyi b/cyprecice/__init__.pyi new file mode 100644 index 00000000..408f0e45 --- /dev/null +++ b/cyprecice/__init__.pyi @@ -0,0 +1,117 @@ +from typing import Any, Optional +import numpy as np +from numpy.typing import ArrayLike + +def check_array_like( + argument: object, argument_name: str, function_name: str +) -> None: ... + +class Participant: + def __init__( + self, + solver_name: str, + configuration_file_name: str, + solver_process_index: int, + solver_process_size: int, + communicator: Optional[Any] = None, + ) -> None: ... + + # Steering + def initialize(self) -> None: ... + def advance(self, computed_timestep_length: float) -> None: ... + def finalize(self) -> None: ... + + # Status queries + def get_mesh_dimensions(self, mesh_name: str) -> int: ... + def get_data_dimensions(self, mesh_name: str, data_name: str) -> int: ... + def is_coupling_ongoing(self) -> bool: ... + def is_time_window_complete(self) -> bool: ... + def get_max_time_step_size(self) -> float: ... + def requires_initial_data(self) -> bool: ... + def requires_writing_checkpoint(self) -> bool: ... + def requires_reading_checkpoint(self) -> bool: ... + + # Mesh access + def requires_mesh_connectivity_for(self, mesh_name: str) -> bool: ... + def set_mesh_vertex(self, mesh_name: str, position: ArrayLike) -> int: ... + def get_mesh_vertex_size(self, mesh_name: str) -> int: ... + def set_mesh_vertices(self, mesh_name: str, positions: ArrayLike) -> np.ndarray: ... + def set_mesh_edge( + self, mesh_name: str, first_vertex_id: int, second_vertex_id: int + ) -> None: ... + def set_mesh_edges(self, mesh_name: str, vertices: ArrayLike) -> None: ... + def set_mesh_triangle( + self, + mesh_name: str, + first_vertex_id: int, + second_vertex_id: int, + third_vertex_id: int, + ) -> None: ... + def set_mesh_triangles(self, mesh_name: str, vertices: ArrayLike) -> None: ... + def set_mesh_quad( + self, + mesh_name: str, + first_vertex_id: int, + second_vertex_id: int, + third_vertex_id: int, + fourth_vertex_id: int, + ) -> None: ... + def set_mesh_quads(self, mesh_name: str, vertices: ArrayLike) -> None: ... + def set_mesh_tetrahedron( + self, + mesh_name: str, + first_vertex_id: int, + second_vertex_id: int, + third_vertex_id: int, + fourth_vertex_id: int, + ) -> None: ... + def set_mesh_tetrahedra(self, mesh_name: str, vertices: ArrayLike) -> None: ... + + # Remeshing + def reset_mesh(self, mesh_name: str) -> None: ... + + # Data access + def write_data( + self, mesh_name: str, data_name: str, vertex_ids: ArrayLike, values: ArrayLike + ) -> None: ... + def read_data( + self, + mesh_name: str, + data_name: str, + vertex_ids: ArrayLike, + relative_read_time: float, + ) -> np.ndarray: ... + def write_and_map_data( + self, mesh_name: str, data_name: str, coordinates: ArrayLike, values: ArrayLike + ) -> None: ... + def map_and_read_data( + self, + mesh_name: str, + data_name: str, + coordinates: ArrayLike, + relative_read_time: float, + ) -> np.ndarray: ... + + # Gradient data + def write_gradient_data( + self, + mesh_name: str, + data_name: str, + vertex_ids: ArrayLike, + gradients: ArrayLike, + ) -> None: ... + def requires_gradient_data_for(self, mesh_name: str, data_name: str) -> bool: ... + + # Direct access + def set_mesh_access_region( + self, mesh_name: str, bounding_box: ArrayLike + ) -> None: ... + def get_mesh_vertex_ids_and_coordinates( + self, mesh_name: str + ) -> tuple[np.ndarray, np.ndarray]: ... + + # Profiling + def start_profiling_section(self, event_name: str) -> None: ... + def stop_last_profiling_section(self) -> None: ... + +def get_version_information() -> bytes: ... diff --git a/cyprecice/cyprecice.pyi b/cyprecice/cyprecice.pyi new file mode 100644 index 00000000..408f0e45 --- /dev/null +++ b/cyprecice/cyprecice.pyi @@ -0,0 +1,117 @@ +from typing import Any, Optional +import numpy as np +from numpy.typing import ArrayLike + +def check_array_like( + argument: object, argument_name: str, function_name: str +) -> None: ... + +class Participant: + def __init__( + self, + solver_name: str, + configuration_file_name: str, + solver_process_index: int, + solver_process_size: int, + communicator: Optional[Any] = None, + ) -> None: ... + + # Steering + def initialize(self) -> None: ... + def advance(self, computed_timestep_length: float) -> None: ... + def finalize(self) -> None: ... + + # Status queries + def get_mesh_dimensions(self, mesh_name: str) -> int: ... + def get_data_dimensions(self, mesh_name: str, data_name: str) -> int: ... + def is_coupling_ongoing(self) -> bool: ... + def is_time_window_complete(self) -> bool: ... + def get_max_time_step_size(self) -> float: ... + def requires_initial_data(self) -> bool: ... + def requires_writing_checkpoint(self) -> bool: ... + def requires_reading_checkpoint(self) -> bool: ... + + # Mesh access + def requires_mesh_connectivity_for(self, mesh_name: str) -> bool: ... + def set_mesh_vertex(self, mesh_name: str, position: ArrayLike) -> int: ... + def get_mesh_vertex_size(self, mesh_name: str) -> int: ... + def set_mesh_vertices(self, mesh_name: str, positions: ArrayLike) -> np.ndarray: ... + def set_mesh_edge( + self, mesh_name: str, first_vertex_id: int, second_vertex_id: int + ) -> None: ... + def set_mesh_edges(self, mesh_name: str, vertices: ArrayLike) -> None: ... + def set_mesh_triangle( + self, + mesh_name: str, + first_vertex_id: int, + second_vertex_id: int, + third_vertex_id: int, + ) -> None: ... + def set_mesh_triangles(self, mesh_name: str, vertices: ArrayLike) -> None: ... + def set_mesh_quad( + self, + mesh_name: str, + first_vertex_id: int, + second_vertex_id: int, + third_vertex_id: int, + fourth_vertex_id: int, + ) -> None: ... + def set_mesh_quads(self, mesh_name: str, vertices: ArrayLike) -> None: ... + def set_mesh_tetrahedron( + self, + mesh_name: str, + first_vertex_id: int, + second_vertex_id: int, + third_vertex_id: int, + fourth_vertex_id: int, + ) -> None: ... + def set_mesh_tetrahedra(self, mesh_name: str, vertices: ArrayLike) -> None: ... + + # Remeshing + def reset_mesh(self, mesh_name: str) -> None: ... + + # Data access + def write_data( + self, mesh_name: str, data_name: str, vertex_ids: ArrayLike, values: ArrayLike + ) -> None: ... + def read_data( + self, + mesh_name: str, + data_name: str, + vertex_ids: ArrayLike, + relative_read_time: float, + ) -> np.ndarray: ... + def write_and_map_data( + self, mesh_name: str, data_name: str, coordinates: ArrayLike, values: ArrayLike + ) -> None: ... + def map_and_read_data( + self, + mesh_name: str, + data_name: str, + coordinates: ArrayLike, + relative_read_time: float, + ) -> np.ndarray: ... + + # Gradient data + def write_gradient_data( + self, + mesh_name: str, + data_name: str, + vertex_ids: ArrayLike, + gradients: ArrayLike, + ) -> None: ... + def requires_gradient_data_for(self, mesh_name: str, data_name: str) -> bool: ... + + # Direct access + def set_mesh_access_region( + self, mesh_name: str, bounding_box: ArrayLike + ) -> None: ... + def get_mesh_vertex_ids_and_coordinates( + self, mesh_name: str + ) -> tuple[np.ndarray, np.ndarray]: ... + + # Profiling + def start_profiling_section(self, event_name: str) -> None: ... + def stop_last_profiling_section(self) -> None: ... + +def get_version_information() -> bytes: ... diff --git a/cyprecice/py.typed b/cyprecice/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/mypy.ini b/mypy.ini new file mode 100644 index 00000000..fe971c98 --- /dev/null +++ b/mypy.ini @@ -0,0 +1,6 @@ +[mypy] +python_version = 3.9 +warn_return_any = true +warn_unused_configs = true +mypy_path = . +ignore_missing_imports = true