handle infinite loop
This commit is contained in:
parent
1b98597bb1
commit
ff8ce3840b
2
PRIVATE
2
PRIVATE
|
@ -1 +1 @@
|
||||||
Subproject commit 7f0594060779d9a8a4e774d558134309ab77b96e
|
Subproject commit ab64793bb04c506d815ebc850672ed0f2d013e67
|
|
@ -71,18 +71,25 @@ def from_Poisson_disc(size,N_seeds,N_candidates,distance,periodic=True,rng_seed=
|
||||||
coords = _np.empty((N_seeds,3))
|
coords = _np.empty((N_seeds,3))
|
||||||
coords[0] = rng.random(3) * size
|
coords[0] = rng.random(3) * size
|
||||||
|
|
||||||
i = 1
|
s = 1
|
||||||
|
i = 0
|
||||||
progress = util._ProgressBar(N_seeds+1,'',50)
|
progress = util._ProgressBar(N_seeds+1,'',50)
|
||||||
while i < N_seeds:
|
while s < N_seeds:
|
||||||
candidates = rng.random((N_candidates,3))*_np.broadcast_to(size,(N_candidates,3))
|
candidates = rng.random((N_candidates,3))*_np.broadcast_to(size,(N_candidates,3))
|
||||||
tree = _spatial.cKDTree(coords[:i],boxsize=size) if periodic else \
|
tree = _spatial.cKDTree(coords[:s],boxsize=size) if periodic else \
|
||||||
_spatial.cKDTree(coords[:i])
|
_spatial.cKDTree(coords[:s])
|
||||||
distances, dev_null = tree.query(candidates)
|
distances, dev_null = tree.query(candidates)
|
||||||
best = distances.argmax()
|
best = distances.argmax()
|
||||||
if distances[best] > distance: # require minimum separation
|
if distances[best] > distance: # require minimum separation
|
||||||
coords[i] = candidates[best] # maximum separation to existing point cloud
|
coords[s] = candidates[best] # maximum separation to existing point cloud
|
||||||
|
s += 1
|
||||||
|
progress.update(s)
|
||||||
|
i = 0
|
||||||
|
else:
|
||||||
i += 1
|
i += 1
|
||||||
progress.update(i)
|
|
||||||
|
if i == 100:
|
||||||
|
raise ValueError('Seeding not possible')
|
||||||
|
|
||||||
return coords
|
return coords
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import re
|
||||||
|
|
||||||
# https://www.python.org/dev/peps/pep-0440
|
# https://www.python.org/dev/peps/pep-0440
|
||||||
with open(Path(__file__).parent/'damask/VERSION') as f:
|
with open(Path(__file__).parent/'damask/VERSION') as f:
|
||||||
version = re.sub(r'(-([^-]*)).*$',r'.\2',re.sub(r'^v(\d+\.\d+(\.\d+)?)',r'\1',f.readline().strip()))
|
version = re.sub(r'(-([^-]*)).*$',r'.\2',re.sub(r'^v(\d+\.\d+(\.\d+)?)',r'\1',f.readline().strip()))
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name='damask',
|
name='damask',
|
||||||
|
|
|
@ -26,6 +26,15 @@ class TestSeeds:
|
||||||
cKDTree(coords).query(coords, 2)
|
cKDTree(coords).query(coords, 2)
|
||||||
assert (0<= coords).all() and (coords<size).all() and np.min(min_dists[:,1])>=distance
|
assert (0<= coords).all() and (coords<size).all() and np.min(min_dists[:,1])>=distance
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('periodic',[True,False])
|
||||||
|
def test_from_Poisson_disc_invalid(self,periodic):
|
||||||
|
N_seeds = np.random.randint(30,300)
|
||||||
|
N_candidates = N_seeds//15
|
||||||
|
distance = np.random.random()
|
||||||
|
size = np.ones(3)*distance
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
seeds.from_Poisson_disc(size,N_seeds,N_candidates,distance,periodic=periodic)
|
||||||
|
|
||||||
def test_from_grid_reconstruct(self):
|
def test_from_grid_reconstruct(self):
|
||||||
cells = np.random.randint(10,20,3)
|
cells = np.random.randint(10,20,3)
|
||||||
N_seeds = np.random.randint(30,300)
|
N_seeds = np.random.randint(30,300)
|
||||||
|
|
Loading…
Reference in New Issue