Skip to content

Commit 6074b35

Browse files
committed
WIP WIP
1 parent 0e247a4 commit 6074b35

1 file changed

Lines changed: 30 additions & 3 deletions

File tree

‎tests/test_subdomains.py‎

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1940,16 +1940,22 @@ class TestSubDomainArguments:
19401940
def _make_operator(left_shift=0, right_shift=0, grid=None, middle=False):
19411941
grid = grid or Grid(shape=(8, 32))
19421942
y = grid.dimensions[-1]
1943+
19431944
yl = SubDimension.left('yl', y, 8)
19441945
yr = SubDimension.right('yr', y, 8)
19451946
if middle:
19461947
yl = yr = SubDimension.middle('ym', y, 8, 8)
1948+
19471949
u = TimeFunction(name='u', grid=grid, space_order=8)
19481950
v = TimeFunction(name='v', grid=grid, space_order=8)
1949-
op = Operator([
1951+
1952+
eqs = [
19501953
Eq(u.forward.subs(y, y + left_shift), 1).subs(y, yl),
19511954
Eq(v.forward, u.forward.subs(y, y + right_shift) + 1).subs(y, yr)
1952-
], name='subdomain_arguments')
1955+
]
1956+
1957+
op = Operator(eqs, name='subdomain_arguments')
1958+
19531959
return op, (u, v)
19541960

19551961
@pytest.mark.parametrize('middle', [False, True])
@@ -1960,9 +1966,11 @@ def _make_operator(left_shift=0, right_shift=0, grid=None, middle=False):
19601966
@pytest.mark.parametrize('override', ['function', 'bounds', 'thickness'])
19611967
def test_stencil_gap(self, middle, left_shift, right_shift, margin, override):
19621968
op, (u, v) = self._make_operator(left_shift, right_shift, middle=middle)
1969+
19631970
size = 16 + 8 + margin
19641971
if override == 'function':
19651972
grid = Grid(shape=(8, size))
1973+
19661974
kwargs = {f.name: TimeFunction(name=f'runtime_{f.name}', grid=grid,
19671975
space_order=8) for f in (u, v)}
19681976
elif override == 'bounds':
@@ -1983,10 +1991,13 @@ def test_stencil_gap(self, middle, left_shift, right_shift, margin, override):
19831991
def test_runtime_space_order(self, middle, space_order, margin):
19841992
"""Override metadata does not change the compiled stencil order."""
19851993
op, fields = self._make_operator(middle=middle)
1994+
19861995
required = 8
19871996
grid = Grid(shape=(8, 16 + required + margin))
1997+
19881998
kwargs = {f.name: TimeFunction(name=f'runtime_{f.name}', grid=grid,
19891999
space_order=space_order) for f in fields}
2000+
19902001
if middle and margin < 0:
19912002
with pytest.raises(InvalidArgument,
19922003
match=f'at least {required} interior points'):
@@ -1997,6 +2008,7 @@ def test_runtime_space_order(self, middle, space_order, margin):
19972008
@pytest.mark.parametrize('side', ['left', 'right'])
19982009
def test_empty_slab(self, side):
19992010
op, _ = self._make_operator(right_shift=-4)
2011+
20002012
d, = [d for d in op.dimensions if d.is_Sub and getattr(d, f'is_{side}')]
20012013
thickness = d.ltkn if side == 'left' else d.rtkn
20022014

@@ -2005,23 +2017,29 @@ def test_empty_slab(self, side):
20052017

20062018
def test_before_autotuning(self):
20072019
op, _ = self._make_operator(right_shift=-4, middle=True)
2020+
20082021
with pytest.raises(InvalidArgument, match='interior points'):
20092022
op.arguments(time_M=0, y_M=22, autotune=True)
2023+
20102024
assert 'autotuning' not in op._state
20112025

20122026
op.arguments(time_M=0, y_M=23, autotune=True)
2027+
20132028
assert len(op._state['autotuning']) == 1
20142029

20152030
@pytest.mark.parametrize('left', [15, 16, 17, 25])
20162031
@pytest.mark.parallel(mode=[(2, 'basic')])
20172032
def test_distributed_middle(self, left, mode):
20182033
grid = Grid(shape=(16, 32), topology=(1, 2))
2034+
20192035
op, _ = self._make_operator(grid=grid, middle=True)
2036+
20202037
d, = [d for d in op.dimensions if d.is_Sub]
20212038

20222039
# Rank 0 has one point or an empty middle (possibly with inverted bounds).
20232040
# Only the global size determines whether the middle is large enough
20242041
kwargs = {d.ltkn.name: left, d.rtkn.name: 0}
2042+
20252043
if left == 25:
20262044
with pytest.raises(InvalidArgument, match='at least 8 interior points'):
20272045
op.arguments(time_M=0, **kwargs)
@@ -2031,7 +2049,9 @@ def test_distributed_middle(self, left, mode):
20312049
@pytest.mark.parallel(mode=[(2, 'basic')])
20322050
def test_collective_rejection(self, mode):
20332051
grid = Grid(shape=(32, 32), topology=(2, 1))
2052+
20342053
op, _ = self._make_operator(right_shift=-4, grid=grid, middle=True)
2054+
20352055
dl, = [d for d in op.dimensions if d.is_Sub and d.is_middle]
20362056
left = 24 if grid.distributor.myrank == 0 else 0
20372057

@@ -2047,14 +2067,21 @@ def define(self, dimensions):
20472067
return {x: x, y: ('middle', 8, 8)}
20482068

20492069
grid = Grid(shape=(16, 32))
2070+
20502071
f = Function(name='f', grid=Interior(grid=grid), space_order=8)
20512072
original = f.dimensions[-1]
2052-
op = Operator(Eq(f, f + 1), name='subdomain_function_arguments')
2073+
2074+
eq = Eq(f, f + 1)
2075+
2076+
op = Operator(eq, name='subdomain_function_arguments')
2077+
20532078
concrete, = [d for d in op.dimensions if d.is_Sub]
20542079

20552080
# Function validation visits `original`; Operator validation visits `concrete`
20562081
assert original not in op.dimensions
2082+
20572083
args = op.arguments()
2084+
20582085
assert original.ltkn.name not in args
20592086
assert concrete.ltkn.name in args
20602087

0 commit comments

Comments
 (0)