testing new functionality

This commit is contained in:
Martin Diehl 2022-03-04 10:39:02 +01:00
parent 03912b0a03
commit 161e4b6815
3 changed files with 32 additions and 6 deletions

View File

@ -1170,7 +1170,7 @@ class Grid:
offset_ = np.nanmax(self.material)+1 if offset is None else offset offset_ = np.nanmax(self.material)+1 if offset is None else offset
selection_ = util.tbd(selection) if not invert_selection else \ selection_ = util.tbd(selection) if not invert_selection else \
list(set(self.material) - set(util.tbd(selection))) list(set(self.material.flatten()) - set(util.tbd(selection)))
mask = ndimage.filters.generic_filter(self.material, mask = ndimage.filters.generic_filter(self.material,
tainted_neighborhood, tainted_neighborhood,
size=1+2*vicinity, size=1+2*vicinity,

View File

@ -9,7 +9,7 @@ import re
import fractions import fractions
from collections import abc from collections import abc
from functools import reduce from functools import reduce
from typing import Callable, Union, Iterable, Sequence, Dict, List, Tuple, Literal, Any from typing import Callable, Union, Iterable, Sequence, Dict, List, Tuple, Literal, Any, Collection
from pathlib import Path from pathlib import Path
import numpy as np import numpy as np

View File

@ -25,6 +25,14 @@ def default():
np.arange(1,41))).reshape(8,5,4,order='F') np.arange(1,41))).reshape(8,5,4,order='F')
return Grid(x,[8e-6,5e-6,4e-6]) return Grid(x,[8e-6,5e-6,4e-6])
@pytest.fixture
def random():
"""Simple geometry."""
size = (1+np.random.rand(3))*1e-5
cells = np.random.randint(10,20,3)
s = seeds.from_random(size,np.random.randint(5,25),cells)
return Grid.from_Voronoi_tessellation(cells,size,s)
@pytest.fixture @pytest.fixture
def ref_path(ref_path_base): def ref_path(ref_path_base):
"""Directory containing reference results.""" """Directory containing reference results."""
@ -158,7 +166,7 @@ class TestGrid:
@pytest.mark.parametrize('stencil',[1,2,3,4]) @pytest.mark.parametrize('stencil',[1,2,3,4])
@pytest.mark.parametrize('selection',[None,[1],[1,2,3]]) @pytest.mark.parametrize('selection',[None,[1],[1,2,3]])
@pytest.mark.parametrize('periodic',[True,False]) @pytest.mark.parametrize('periodic',[True,False])
def test_clean(self,default,update,ref_path,stencil,selection,periodic): def test_clean_reference(self,default,update,ref_path,stencil,selection,periodic):
current = default.clean(stencil,selection,periodic=periodic) current = default.clean(stencil,selection,periodic=periodic)
reference = ref_path/f'clean_{stencil}_{"+".join(map(str,[None] if selection is None else selection))}_{periodic}.vti' reference = ref_path/f'clean_{stencil}_{"+".join(map(str,[None] if selection is None else selection))}_{periodic}.vti'
if update and stencil > 1: if update and stencil > 1:
@ -167,6 +175,12 @@ class TestGrid:
current current
) )
@pytest.mark.parametrize('selection',[list(np.random.randint(1,20,6)),set(np.random.randint(1,20,6)),np.random.randint(1,20,6)])
@pytest.mark.parametrize('invert',[True,False])
def test_clean_invert(self,random,selection,invert):
selection_inverse = set(random.material.flatten()) - set(selection)
assert random.clean(selection=selection,invert_selection=invert) == \
random.clean(selection=selection_inverse,invert_selection=not invert)
@pytest.mark.parametrize('cells',[ @pytest.mark.parametrize('cells',[
(10,11,10), (10,11,10),
@ -209,6 +223,11 @@ class TestGrid:
modified.substitute(np.arange(default.material.max())+1+offset, modified.substitute(np.arange(default.material.max())+1+offset,
np.arange(default.material.max())+1)) np.arange(default.material.max())+1))
def test_substitute_integer_list(self,random):
f = np.random.randint(30)
t = np.random.randint(30)
assert random.substitute(f,t) == random.substitute([f],[t])
def test_substitute_invariant(self,default): def test_substitute_invariant(self,default):
f = np.unique(default.material.flatten())[:np.random.randint(1,default.material.max())] f = np.unique(default.material.flatten())[:np.random.randint(1,default.material.max())]
t = np.random.permutation(f) t = np.random.permutation(f)
@ -300,7 +319,7 @@ class TestGrid:
assert grid_equal(G_1,G_2) assert grid_equal(G_1,G_2)
@pytest.mark.parametrize('selection',[[1],[]]) @pytest.mark.parametrize('selection',[1,[]])
def test_vicinity_offset(self,selection): def test_vicinity_offset(self,selection):
offset = np.random.randint(2,4) offset = np.random.randint(2,4)
vicinity = np.random.randint(2,4) vicinity = np.random.randint(2,4)
@ -313,13 +332,20 @@ class TestGrid:
for i in [0,1,2]: for i in [0,1,2]:
m2[(np.roll(m,+vicinity,i)-m)!=0] += offset m2[(np.roll(m,+vicinity,i)-m)!=0] += offset
m2[(np.roll(m,-vicinity,i)-m)!=0] += offset m2[(np.roll(m,-vicinity,i)-m)!=0] += offset
if len(selection) > 0: if selection == 1:
m2[m==1] = 1 m2[m==1] = 1
grid = Grid(m,np.random.rand(3)).vicinity_offset(vicinity,offset,selection=selection) grid = Grid(m,np.random.rand(3)).vicinity_offset(vicinity,offset,selection=selection)
assert np.all(m2==grid.material) assert np.all(m2==grid.material)
@pytest.mark.parametrize('selection',[list(np.random.randint(1,20,6)),set(np.random.randint(1,20,6)),np.random.randint(1,20,6)])
@pytest.mark.parametrize('invert',[True,False])
def test_vicinit_offset_invert(self,random,selection,invert):
selection_inverse = set(random.material.flatten()) - set(selection)
assert random.vicinity_offset(selection=selection,invert_selection=invert) == \
random.vicinity_offset(selection=selection_inverse,invert_selection=not invert)
@pytest.mark.parametrize('periodic',[True,False]) @pytest.mark.parametrize('periodic',[True,False])
def test_vicinity_offset_invariant(self,default,periodic): def test_vicinity_offset_invariant(self,default,periodic):