diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 83e9f8934..e064cb0af 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -95,7 +95,7 @@ mypy: stage: python script: - cd $DAMASKROOT/python - - mypy damask/tensor.py damask/mechanics.py + - mypy damask/tensor.py damask/mechanics.py damask/seeds.py except: - master - release diff --git a/python/damask/seeds.py b/python/damask/seeds.py index 26aa3084b..2203c9495 100644 --- a/python/damask/seeds.py +++ b/python/damask/seeds.py @@ -1,13 +1,16 @@ """Functionality for generation of seed points for Voronoi or Laguerre tessellation.""" from scipy import spatial as _spatial +from typing import Sequence + import numpy as _np from . import util as _util from . import grid_filters as _grid_filters +from . import _grid -def from_random(size,N_seeds,cells=None,rng_seed=None): +def from_random(size: _np.ndarray, N_seeds: int, cells: _np.ndarray = None, rng_seed=None) -> _np.ndarray: """ Place seeds randomly in space. @@ -41,7 +44,8 @@ def from_random(size,N_seeds,cells=None,rng_seed=None): return coords -def from_Poisson_disc(size,N_seeds,N_candidates,distance,periodic=True,rng_seed=None): +def from_Poisson_disc(size: _np.ndarray, N_seeds: int, N_candidates: int, distance: float, + periodic: bool = True, rng_seed=None) -> _np.ndarray: """ Place seeds according to a Poisson disc distribution. @@ -75,18 +79,17 @@ def from_Poisson_disc(size,N_seeds,N_candidates,distance,periodic=True,rng_seed= i = 0 progress = _util._ProgressBar(N_seeds+1,'',50) while s < N_seeds: + i += 1 candidates = rng.random((N_candidates,3))*_np.broadcast_to(size,(N_candidates,3)) tree = _spatial.cKDTree(coords[:s],boxsize=size) if periodic else \ _spatial.cKDTree(coords[:s]) distances = tree.query(candidates)[0] best = distances.argmax() if distances[best] > distance: # require minimum separation + i = 0 coords[s] = candidates[best] # maximum separation to existing point cloud s += 1 progress.update(s) - i = 0 - else: - i += 1 if i == 100: raise ValueError('Seeding not possible') @@ -94,7 +97,8 @@ def from_Poisson_disc(size,N_seeds,N_candidates,distance,periodic=True,rng_seed= return coords -def from_grid(grid,selection=None,invert=False,average=False,periodic=True): +def from_grid(grid: _grid.Grid, selection: Sequence[int] = None, + invert: bool = False, average: bool = False, periodic: bool = True) -> tuple[_np.ndarray, _np.ndarray]: """ Create seeds from grid description.