From 8cb163bfcaba837519f42dc2797681c32c34b728 Mon Sep 17 00:00:00 2001
From: Henry <henry.korb@geo.uu.se>
Date: Thu, 2 Feb 2023 14:43:17 +0100
Subject: [PATCH] some reformatting of type stubs change inclusion of type
 stubs in setup.py

---
 pythonbindings/pyfluids-stubs/__init__.pyi    |   2 +-
 .../pyfluids-stubs/bindings/__init__.pyi      |   1 +
 .../pyfluids-stubs/bindings/gpu/__init__.pyi  | 113 +++++++++++-------
 .../bindings/gpu/grid_generator.pyi           |  15 ++-
 .../pyfluids-stubs/bindings/gpu/probes.pyi    |   4 +-
 .../pyfluids-stubs/bindings/logger.pyi        |   2 +
 setup.py                                      |  31 +++--
 7 files changed, 109 insertions(+), 59 deletions(-)

diff --git a/pythonbindings/pyfluids-stubs/__init__.pyi b/pythonbindings/pyfluids-stubs/__init__.pyi
index a8f52226f..4dc4ea07b 100644
--- a/pythonbindings/pyfluids-stubs/__init__.pyi
+++ b/pythonbindings/pyfluids-stubs/__init__.pyi
@@ -1 +1 @@
-from . import bindings
\ No newline at end of file
+from . import bindings as bindings
diff --git a/pythonbindings/pyfluids-stubs/bindings/__init__.pyi b/pythonbindings/pyfluids-stubs/bindings/__init__.pyi
index b0a9b3c57..337d26e6b 100644
--- a/pythonbindings/pyfluids-stubs/bindings/__init__.pyi
+++ b/pythonbindings/pyfluids-stubs/bindings/__init__.pyi
@@ -34,6 +34,7 @@ r"""
 """
 from . import basics as basics, gpu as gpu, lbm as lbm, logger as logger
 
+
 class ostream_redirect:
     def __init__(self, stdout: bool = ..., stderr: bool = ...) -> None: ...
     def __enter__(self) -> None: ...
diff --git a/pythonbindings/pyfluids-stubs/bindings/gpu/__init__.pyi b/pythonbindings/pyfluids-stubs/bindings/gpu/__init__.pyi
index cd93dfe38..12965332f 100644
--- a/pythonbindings/pyfluids-stubs/bindings/gpu/__init__.pyi
+++ b/pythonbindings/pyfluids-stubs/bindings/gpu/__init__.pyi
@@ -32,77 +32,88 @@ r"""
 ! \author Henry Korb
 =======================================================================================
 """
-from typing import Any, Callable, ClassVar, List, Optional
+from __future__ import annotations
+from typing import Callable, ClassVar, List, Optional
 
 from typing import overload
-import numpy
+import numpy as np
+import numpy.typing as npt
 import pyfluids.bindings.basics
 from . import grid_generator as grid_generator, probes as probes
 
+
+class PreCollisionInteractor:
+    def __init__(self, *args, **kwargs) -> None: ...
+
+
+class FileCollection:
+    def __init__(self, *args, **kwargs) -> None: ...
+
+
 class ActuatorFarm(PreCollisionInteractor):
     def __init__(self, number_of_blades_per_turbine: int, density: float, number_of_nodes_per_blade: int, epsilon: float, level: int, delta_t: float, delta_x: float, use_host_arrays: bool) -> None: ...
     def add_turbine(self, posX: float, posY: float, posZ: float, diameter: float, omega: float, azimuth: float, yaw: float, bladeRadii: List[float]) -> None: ...
     def calc_blade_forces(self) -> None: ...
-    def get_all_azimuths(self) -> numpy.ndarray[numpy.float32]: ...
-    def get_all_blade_coords_x(self) -> numpy.ndarray[numpy.float32]: ...
+    def get_all_azimuths(self) -> npt.NDArray[np.float32]: ...
+    def get_all_blade_coords_x(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_coords_x_device(self) -> int: ...
-    def get_all_blade_coords_y(self) -> numpy.ndarray[numpy.float32]: ...
+    def get_all_blade_coords_y(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_coords_y_device(self) -> int: ...
-    def get_all_blade_coords_z(self) -> numpy.ndarray[numpy.float32]: ...
+    def get_all_blade_coords_z(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_coords_z_device(self) -> int: ...
-    def get_all_blade_forces_x(self) -> numpy.ndarray[numpy.float32]: ...
+    def get_all_blade_forces_x(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_forces_x_device(self) -> int: ...
-    def get_all_blade_forces_y(self) -> numpy.ndarray[numpy.float32]: ...
+    def get_all_blade_forces_y(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_forces_y_device(self) -> int: ...
-    def get_all_blade_forces_z(self) -> numpy.ndarray[numpy.float32]: ...
+    def get_all_blade_forces_z(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_forces_z_device(self) -> int: ...
-    def get_all_blade_radii(self) -> numpy.ndarray[numpy.float32]: ...
+    def get_all_blade_radii(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_radii_device(self) -> int: ...
-    def get_all_blade_velocities_x(self) -> numpy.ndarray[numpy.float32]: ...
+    def get_all_blade_velocities_x(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_velocities_x_device(self) -> int: ...
-    def get_all_blade_velocities_y(self) -> numpy.ndarray[numpy.float32]: ...
+    def get_all_blade_velocities_y(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_velocities_y_device(self) -> int: ...
-    def get_all_blade_velocities_z(self) -> numpy.ndarray[numpy.float32]: ...
+    def get_all_blade_velocities_z(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_velocities_z_device(self) -> int: ...
-    def get_all_omegas(self) -> numpy.ndarray[numpy.float32]: ...
-    def get_all_turbine_pos_x(self) -> numpy.ndarray[numpy.float32]: ...
-    def get_all_turbine_pos_y(self) -> numpy.ndarray[numpy.float32]: ...
-    def get_all_turbine_pos_z(self) -> numpy.ndarray[numpy.float32]: ...
-    def get_all_yaws(self) -> numpy.ndarray[numpy.float32]: ...
+    def get_all_omegas(self) -> npt.NDArray[np.float32]: ...
+    def get_all_turbine_pos_x(self) -> npt.NDArray[np.float32]: ...
+    def get_all_turbine_pos_y(self) -> npt.NDArray[np.float32]: ...
+    def get_all_turbine_pos_z(self) -> npt.NDArray[np.float32]: ...
+    def get_all_yaws(self) -> npt.NDArray[np.float32]: ...
     def get_turbine_azimuth(self, turbine: int) -> float: ...
-    def get_turbine_blade_coords_x(self, turbine: int) -> numpy.ndarray[numpy.float32]: ...
+    def get_turbine_blade_coords_x(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_coords_x_device(self, turbine: int) -> int: ...
-    def get_turbine_blade_coords_y(self, turbine: int) -> numpy.ndarray[numpy.float32]: ...
+    def get_turbine_blade_coords_y(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_coords_y_device(self, turbine: int) -> int: ...
-    def get_turbine_blade_coords_z(self, turbine: int) -> numpy.ndarray[numpy.float32]: ...
+    def get_turbine_blade_coords_z(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_coords_z_device(self, turbine: int) -> int: ...
-    def get_turbine_blade_forces_x(self, turbine: int) -> numpy.ndarray[numpy.float32]: ...
+    def get_turbine_blade_forces_x(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_forces_x_device(self, turbine: int) -> int: ...
-    def get_turbine_blade_forces_y(self, turbine: int) -> numpy.ndarray[numpy.float32]: ...
+    def get_turbine_blade_forces_y(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_forces_y_device(self, turbine: int) -> int: ...
-    def get_turbine_blade_forces_z(self, turbine: int) -> numpy.ndarray[numpy.float32]: ...
+    def get_turbine_blade_forces_z(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_forces_z_device(self, turbine: int) -> int: ...
-    def get_turbine_blade_radii(self, turbine: int) -> numpy.ndarray[numpy.float32]: ...
+    def get_turbine_blade_radii(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_radii_device(self, turbine: int) -> int: ...
-    def get_turbine_blade_velocities_x(self, turbine: int) -> numpy.ndarray[numpy.float32]: ...
+    def get_turbine_blade_velocities_x(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_velocities_x_device(self, turbine: int) -> int: ...
-    def get_turbine_blade_velocities_y(self, turbine: int) -> numpy.ndarray[numpy.float32]: ...
+    def get_turbine_blade_velocities_y(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_velocities_y_device(self, turbine: int) -> int: ...
-    def get_turbine_blade_velocities_z(self, turbine: int) -> numpy.ndarray[numpy.float32]: ...
+    def get_turbine_blade_velocities_z(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_velocities_z_device(self, turbine: int) -> int: ...
     def get_turbine_omega(self, turbine: int) -> float: ...
-    def get_turbine_pos(self, turbine: int) -> numpy.ndarray[numpy.float32]: ...
+    def get_turbine_pos(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_yaw(self, turbine: int) -> float: ...
-    def set_all_azimuths(self, azimuths: numpy.ndarray[numpy.float32]) -> None: ...
-    def set_all_blade_coords(self, blade_coords_x: numpy.ndarray[numpy.float32], blade_coords_y: numpy.ndarray[numpy.float32], blade_coords_z: numpy.ndarray[numpy.float32]) -> None: ...
-    def set_all_blade_forces(self, blade_forces_x: numpy.ndarray[numpy.float32], blade_forces_y: numpy.ndarray[numpy.float32], blade_forces_z: numpy.ndarray[numpy.float32]) -> None: ...
-    def set_all_blade_velocities(self, blade_velocities_x: numpy.ndarray[numpy.float32], blade_velocities_y: numpy.ndarray[numpy.float32], blade_velocities_z: numpy.ndarray[numpy.float32]) -> None: ...
-    def set_all_omegas(self, omegas: numpy.ndarray[numpy.float32]) -> None: ...
-    def set_all_yaws(self, yaws: numpy.ndarray[numpy.float32]) -> None: ...
+    def set_all_azimuths(self, azimuths: npt.NDArray[np.float32]) -> None: ...
+    def set_all_blade_coords(self, blade_coords_x: npt.NDArray[np.float32], blade_coords_y: npt.NDArray[np.float32], blade_coords_z: npt.NDArray[np.float32]) -> None: ...
+    def set_all_blade_forces(self, blade_forces_x: npt.NDArray[np.float32], blade_forces_y: npt.NDArray[np.float32], blade_forces_z: npt.NDArray[np.float32]) -> None: ...
+    def set_all_blade_velocities(self, blade_velocities_x: npt.NDArray[np.float32], blade_velocities_y: npt.NDArray[np.float32], blade_velocities_z: npt.NDArray[np.float32]) -> None: ...
+    def set_all_omegas(self, omegas: npt.NDArray[np.float32]) -> None: ...
+    def set_all_yaws(self, yaws: npt.NDArray[np.float32]) -> None: ...
     def set_turbine_azimuth(self, turbine: int, azimuth: float) -> None: ...
-    def set_turbine_blade_coords(self, turbine: int, blade_coords_x: numpy.ndarray[numpy.float32], blade_coords_y: numpy.ndarray[numpy.float32], blade_coords_z: numpy.ndarray[numpy.float32]) -> None: ...
-    def set_turbine_blade_forces(self, turbine: int, blade_forces_x: numpy.ndarray[numpy.float32], blade_forces_y: numpy.ndarray[numpy.float32], blade_forces_z: numpy.ndarray[numpy.float32]) -> None: ...
-    def set_turbine_blade_velocities(self, turbine: int, blade_velocities_x: numpy.ndarray[numpy.float32], blade_velocities_y: numpy.ndarray[numpy.float32], blade_velocities_z: numpy.ndarray[numpy.float32]) -> None: ...
+    def set_turbine_blade_coords(self, turbine: int, blade_coords_x: npt.NDArray[np.float32], blade_coords_y: npt.NDArray[np.float32], blade_coords_z: npt.NDArray[np.float32]) -> None: ...
+    def set_turbine_blade_forces(self, turbine: int, blade_forces_x: npt.NDArray[np.float32], blade_forces_y: npt.NDArray[np.float32], blade_forces_z: npt.NDArray[np.float32]) -> None: ...
+    def set_turbine_blade_velocities(self, turbine: int, blade_velocities_x: npt.NDArray[np.float32], blade_velocities_y: npt.NDArray[np.float32], blade_velocities_z: npt.NDArray[np.float32]) -> None: ...
     def set_turbine_omega(self, turbine: int, omega: float) -> None: ...
     def set_turbine_yaw(self, turbine: int, yaw: float) -> None: ...
     @property
@@ -122,6 +133,7 @@ class ActuatorFarm(PreCollisionInteractor):
     @property
     def number_of_turbines(self) -> int: ...
 
+
 class BoundaryConditionFactory:
     def __init__(self) -> None: ...
     def set_geometry_boundary_condition(self, boundary_condition_type) -> None: ...
@@ -132,6 +144,7 @@ class BoundaryConditionFactory:
     def set_stress_boundary_condition(self, boundary_condition_type) -> None: ...
     def set_velocity_boundary_condition(self, boundary_condition_type) -> None: ...
 
+
 class Communicator:
     def __init__(self, *args, **kwargs) -> None: ...
     @staticmethod
@@ -139,9 +152,11 @@ class Communicator:
     def get_number_of_process(self) -> int: ...
     def get_pid(self) -> int: ...
 
+
 class CudaMemoryManager:
     def __init__(self, parameter: Parameter) -> None: ...
 
+
 class FileType:
     __members__: ClassVar[dict] = ...  # read-only
     VTK: ClassVar[FileType] = ...
@@ -157,11 +172,13 @@ class FileType:
     @property
     def name(self) -> str: ...
 
+
 class GridProvider:
     def __init__(self, *args, **kwargs) -> None: ...
     @staticmethod
     def make_grid_generator(builder: grid_generator.GridBuilder, para: Parameter, cuda_memory_manager: CudaMemoryManager, communicator: Communicator) -> GridProvider: ...
 
+
 class GridScaling:
     __members__: ClassVar[dict] = ...  # read-only
     NotSpecified: ClassVar[GridScaling] = ...
@@ -179,10 +196,12 @@ class GridScaling:
     @property
     def name(self) -> str: ...
 
+
 class GridScalingFactory:
     def __init__(self) -> None: ...
     def set_scaling_factory(self, scaling_type) -> None: ...
 
+
 class NoSlipBC:
     __members__: ClassVar[dict] = ...  # read-only
     NoSlip3rdMomentsCompressible: ClassVar[NoSlipBC] = ...
@@ -202,6 +221,7 @@ class NoSlipBC:
     @property
     def name(self) -> str: ...
 
+
 class OutputVariable:
     __members__: ClassVar[dict] = ...  # read-only
     Distributions: ClassVar[OutputVariable] = ...
@@ -218,6 +238,7 @@ class OutputVariable:
     @property
     def name(self) -> str: ...
 
+
 class Parameter:
     @overload
     def __init__(self, number_of_processes: int, my_ID: int, config_data: Optional[pyfluids.bindings.basics.ConfigurationFile]) -> None: ...
@@ -245,7 +266,7 @@ class Parameter:
     def set_diff_on(self, is_diff: bool) -> None: ...
     def set_forcing(self, forcing_x: float, forcing_y: float, forcing_z: float) -> None: ...
     def set_has_wall_model_monitor(self, has_wall_monitor: bool) -> None: ...
-    def set_initial_condition(self, init_func: Callable[[float,float,float],List[float]]) -> None: ...
+    def set_initial_condition(self, init_func: Callable[[float, float, float], List[float]]) -> None: ...
     def set_initial_condition_log_law(self, u_star: float, z0: float, velocity_ratio: float) -> None: ...
     def set_initial_condition_perturbed_log_law(self, u_star: float, z0: float, length_x: float, length_z: float, height: float, velocity_ratio: float) -> None: ...
     def set_initial_condition_uniform(self, velocity_x: float, velocity_y: float, velocity_z: float) -> None: ...
@@ -270,8 +291,6 @@ class Parameter:
     def set_viscosity_LB(self, viscosity: float) -> None: ...
     def set_viscosity_ratio(self, viscosity_ratio: float) -> None: ...
 
-class PreCollisionInteractor:
-    def __init__(self, *args, **kwargs) -> None: ...
 
 class PrecursorBC:
     __members__: ClassVar[dict] = ...  # read-only
@@ -290,9 +309,11 @@ class PrecursorBC:
     @property
     def name(self) -> str: ...
 
+
 class PrecursorWriter(PreCollisionInteractor):
     def __init__(self, filename: str, output_path: str, x_pos: float, y_min: float, y_max: float, z_min: float, z_max: float, t_start_out: int, t_save: int, output_variable: OutputVariable, max_timesteps_per_file: int) -> None: ...
 
+
 class PressureBC:
     __members__: ClassVar[dict] = ...  # read-only
     NotSpecified: ClassVar[PressureBC] = ...
@@ -314,6 +335,7 @@ class PressureBC:
     @property
     def name(self) -> str: ...
 
+
 class SideType:
     __members__: ClassVar[dict] = ...  # read-only
     GEOMETRY: ClassVar[SideType] = ...
@@ -335,6 +357,7 @@ class SideType:
     @property
     def name(self) -> str: ...
 
+
 class Simulation:
     @overload
     def __init__(self, parameter: Parameter, memoryManager: CudaMemoryManager, communicator, gridProvider: GridProvider, bcFactory: BoundaryConditionFactory, gridScalingFactory: GridScalingFactory) -> None: ...
@@ -346,6 +369,7 @@ class Simulation:
     def addKineticEnergyAnalyzer(self, t_analyse: int) -> None: ...
     def run(self) -> None: ...
 
+
 class SlipBC:
     __members__: ClassVar[dict] = ...  # read-only
     NotSpecified: ClassVar[SlipBC] = ...
@@ -366,6 +390,7 @@ class SlipBC:
     @property
     def name(self) -> str: ...
 
+
 class StressBC:
     __members__: ClassVar[dict] = ...  # read-only
     NotSpecified: ClassVar[StressBC] = ...
@@ -384,6 +409,7 @@ class StressBC:
     @property
     def name(self) -> str: ...
 
+
 class TurbulenceModel:
     __members__: ClassVar[dict] = ...  # read-only
     AMD: ClassVar[TurbulenceModel] = ...
@@ -402,15 +428,18 @@ class TurbulenceModel:
     @property
     def name(self) -> str: ...
 
+
 class TurbulenceModelFactory:
     def __init__(self, para: Parameter) -> None: ...
     def read_config_file(self, config_data: pyfluids.bindings.basics.ConfigurationFile) -> None: ...
     def set_model_constant(self, model_constant: float) -> None: ...
     def set_turbulence_model(self, turbulence_model: TurbulenceModel) -> None: ...
 
+
 class VTKFileCollection(FileCollection):
     def __init__(self, prefix: str) -> None: ...
 
+
 class VelocityBC:
     __members__: ClassVar[dict] = ...  # read-only
     NotSpecified: ClassVar[VelocityBC] = ...
@@ -430,7 +459,5 @@ class VelocityBC:
     @property
     def name(self) -> str: ...
 
-class FileCollection:
-    def __init__(self, *args, **kwargs) -> None: ...
 
 def create_file_collection(prefix: str, type: FileType) -> FileCollection: ...
diff --git a/pythonbindings/pyfluids-stubs/bindings/gpu/grid_generator.pyi b/pythonbindings/pyfluids-stubs/bindings/gpu/grid_generator.pyi
index ccdfc1b93..44d1357dc 100644
--- a/pythonbindings/pyfluids-stubs/bindings/gpu/grid_generator.pyi
+++ b/pythonbindings/pyfluids-stubs/bindings/gpu/grid_generator.pyi
@@ -32,7 +32,6 @@ r"""
 ! \author Henry Korb
 =======================================================================================
 """
-
 from __future__ import annotations
 
 from typing import List
@@ -41,12 +40,15 @@ from typing import overload
 import pyfluids.bindings.basics
 import pyfluids.bindings.gpu
 
+
 class BoundingBox:
     def __init__(self, min_x: float, max_x: float, min_y: float, max_y: float, min_z: float, max_z: float) -> None: ...
 
+
 class Object:
     def __init__(self, *args, **kwargs) -> None: ...
 
+
 class Conglomerate(Object):
     def __init__(self, *args, **kwargs) -> None: ...
     def add(self, object: Object) -> None: ...
@@ -54,28 +56,33 @@ class Conglomerate(Object):
     def make_shared() -> Conglomerate: ...
     def subtract(self, object: Object) -> None: ...
 
+
 class Cuboid(Object):
     def __init__(self, min_x1: float, min_x2: float, min_x3: float, max_x1: float, max_x2: float, max_x3: float) -> None: ...
 
+
 class GridBuilder:
     def __init__(self, *args, **kwargs) -> None: ...
     def get_number_of_grid_levels(self) -> int: ...
 
+
 class GridFactory:
     def __init__(self, *args, **kwargs) -> None: ...
     @staticmethod
     def make() -> GridFactory: ...
 
+
 class LevelGridBuilder(GridBuilder):
     def __init__(self, *args, **kwargs) -> None: ...
     def set_no_slip_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType) -> None: ...
     def set_periodic_boundary_condition(self, periodic_x: bool, periodic_y: bool, periodic_z: bool) -> None: ...
-    def set_precursor_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, file_collection: pyfluids.bindings.gpu.VelocityFileCollection, n_t_read: int, velocity_x: float = ..., velocity_y: float = ..., velocity_z: float = ..., file_level_to_grid_level_map: List[int] = ...) -> None: ...
+    def set_precursor_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, file_collection: pyfluids.bindings.gpu.FileCollection, n_t_read: int, velocity_x: float = ..., velocity_y: float = ..., velocity_z: float = ..., file_level_to_grid_level_map: List[int] = ...) -> None: ...
     def set_pressure_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, rho: float) -> None: ...
     def set_slip_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, normal_x: float, normal_y: float, normal_z: float) -> None: ...
-    def set_stress_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, normal_x: float, normal_y: float, normal_z: float, sampling_offset: int, z0: float, dx: float, q: float) -> None: ...
+    def set_stress_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, normal_x: float, normal_y: float, normal_z: float, sampling_offset: int, z0: float, dx: float, q: float = ...) -> None: ...
     def set_velocity_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, vx: float, vy: float, vz: float) -> None: ...
 
+
 class MultipleGridBuilder(LevelGridBuilder):
     def __init__(self, *args, **kwargs) -> None: ...
     def add_coarse_grid(self, start_x: float, start_y: float, start_z: float, end_x: float, end_y: float, end_z: float, delta: float) -> None: ...
@@ -92,11 +99,13 @@ class MultipleGridBuilder(LevelGridBuilder):
     @staticmethod
     def make_shared(grid_factory: GridFactory) -> MultipleGridBuilder: ...
 
+
 class Sphere(Object):
     def __init__(self, *args, **kwargs) -> None: ...
     @staticmethod
     def make_shared() -> Sphere: ...
 
+
 class TriangularMesh(Object):
     def __init__(self, *args, **kwargs) -> None: ...
     @staticmethod
diff --git a/pythonbindings/pyfluids-stubs/bindings/gpu/probes.pyi b/pythonbindings/pyfluids-stubs/bindings/gpu/probes.pyi
index 702e3fbce..c99aec556 100644
--- a/pythonbindings/pyfluids-stubs/bindings/gpu/probes.pyi
+++ b/pythonbindings/pyfluids-stubs/bindings/gpu/probes.pyi
@@ -35,7 +35,7 @@ r"""
 from __future__ import annotations
 from typing import ClassVar, List
 
-import pyfluids.bindings.gpu
+from pyfluids.bindings.gpu import PreCollisionInteractor
 
 
 class Statistic:
@@ -64,7 +64,7 @@ class Statistic:
     def name(self) -> str: ...
 
 
-class Probe(pyfluids.bindings.gpu.PreCollisionInteractor):
+class Probe(PreCollisionInteractor):
     def __init__(self, *args, **kwargs) -> None: ...
     def add_all_available_statistics(self) -> None: ...
     def add_statistic(self, variable: Statistic) -> None: ...
diff --git a/pythonbindings/pyfluids-stubs/bindings/logger.pyi b/pythonbindings/pyfluids-stubs/bindings/logger.pyi
index ce1afc013..91c1346c2 100644
--- a/pythonbindings/pyfluids-stubs/bindings/logger.pyi
+++ b/pythonbindings/pyfluids-stubs/bindings/logger.pyi
@@ -34,12 +34,14 @@ r"""
 """
 from __future__ import annotations
 
+
 class Logger:
     @staticmethod
     def change_log_path(path: str) -> None: ...
     @staticmethod
     def initialize_logger() -> None: ...
 
+
 def vf_log_critical(message: str) -> None: ...
 def vf_log_debug(message: str) -> None: ...
 def vf_log_info(message: str) -> None: ...
diff --git a/setup.py b/setup.py
index 12628591a..b9520b150 100644
--- a/setup.py
+++ b/setup.py
@@ -1,9 +1,3 @@
-import sys
-from pathlib import Path
-
-from setuptools import find_namespace_packages
-import skbuild
-
 """
 Install python wrapper of Virtual Fluids
 install via python:
@@ -16,15 +10,31 @@ or install via pip:
     for pip>21:
         set CMAKE Flags via --config-settings "-DBUILD_VF_GPU=ON"
         example: pip install . --config-settings="-DBUILD_VF_GPU=ON"
-        each option has to be passed in individually i.e --config-settings="-DOPT1=ON" --config-settings="-DOPT2=OFF"
+        each option has to be passed in individually i.e
+        --config-settings="-DOPT1=ON" --config-settings="-DOPT2=OFF"
     for pip <21:
         set CMAKE Flags via --global-option ="-DBUILD_VF_GPU=ON"
         example: pip install . --global-option="-DBUILD_VF_GPU=ON"
 """
+import sys
+from pathlib import Path
+
+from setuptools import find_packages
+import skbuild
 
 package_name = "pyfluids"
 target = "python_bindings"
 src_dir = "pythonbindings"
+stubs_package = package_name+"-stubs"
+stub_dir = Path(src_dir)/stubs_package
+
+
+def find_stub_subpackages(stub_dir: Path):
+    return [str(d.parent.relative_to(stub_dir.parent)) for d in stub_dir.rglob("__init__.pyi")]
+
+
+def find_stub_files(dir: Path):
+    return [str(f.relative_to(dir)) for f in dir.rglob("*.pyi")]
 
 
 # hack to get config-args for installation with pip>21
@@ -40,13 +50,14 @@ cmake_args += [
         "-DBUILD_VF_UNIT_TESTS:BOOL=OFF",
         "-DBUILD_WARNINGS_AS_ERRORS=OFF",
     ]
-
+print(find_stub_subpackages(stub_dir))
+print(find_packages(where=src_dir))
 skbuild.setup(
     name=package_name,
-    packages=find_namespace_packages(src_dir),
+    packages=find_packages()+find_stub_subpackages(stub_dir),
     package_dir={"": src_dir},
     cmake_args=cmake_args,
     cmake_install_target=target,
-    package_data={package_name: ["py.typed"]},
+    package_data={package_name: ["py.typed"], stubs_package: find_stub_files(stub_dir)},
     include_package_data=True,
 )
-- 
GitLab