Skip to content

Commit 270bfa2

Browse files
authored
Merge pull request #10 from mrava87/master
Finalize test_FirstDerivative
2 parents d129290 + 6fc2e33 commit 270bfa2

File tree

1 file changed

+42
-50
lines changed

1 file changed

+42
-50
lines changed

pytests/test_derivative.py

Lines changed: 42 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
def test_FirstDerivative(par):
3434
"""Dot-test and comparison with Pylops for FirstDerivative operator
3535
"""
36-
np.random.seed(10)
36+
np.random.seed(0)
3737

3838
# 1d
3939
dD1op = dFirstDerivative(par['nx'], sampling=par['dx'],
@@ -116,14 +116,14 @@ def test_FirstDerivative(par):
116116
par['nx'] // 2 + 1))
117117
dy = dD1op * x.ravel()
118118
y = D1op * x.compute().ravel()
119-
assert_array_almost_equal(y.reshape(par['nz'], par['ny'], par['nx'])[1:-1, 1:-1],
120-
dy.reshape(par['nz'], par['ny'], par['nx'])[1:-1, 1:-1],
119+
assert_array_almost_equal(y.reshape(par['nz'], par['ny'], par['nx'])[1:-1, :, :],
120+
dy.reshape(par['nz'], par['ny'], par['nx'])[1:-1, :, :],
121121
decimal=1)
122122

123123
# 3d - derivative on 2nd direction
124124
dD1op = dFirstDerivative(par['nz'] * par['ny'] * par['nx'],
125125
dims=(par['nz'], par['ny'], par['nx']),
126-
dir=1, sampling=par['dz'], compute=(True, True),
126+
dir=1, sampling=par['dy'], compute=(True, True),
127127
dtype='float32')
128128
D1op = FirstDerivative(par['nz'] * par['ny'] * par['nx'],
129129
dims=(par['nz'], par['ny'], par['nx']),
@@ -138,29 +138,57 @@ def test_FirstDerivative(par):
138138
(par['ny'] // 2 + 1) *
139139
(par['nx'] // 2 + 1)), tol=1e-3)
140140

141-
x = np.outer((par['dz'] * np.arange(par['nz'])) ** 2,
142-
np.ones((par['ny'], par['nx']))).reshape(par['nz'],
143-
par['ny'],
144-
par['nx'])
141+
x = np.outer(np.outer(np.ones(par['nz']),
142+
par['dy'] * np.arange(par['ny']) ** 2),
143+
np.ones(par['nx'])).reshape(par['nz'], par['ny'], par['nx'])
145144
x = da.from_array(x, chunks=(par['nz'] // 2 + 1,
146145
par['ny'] // 2 + 1,
147146
par['nx'] // 2 + 1))
148147
dy = dD1op * x.ravel()
149148
y = D1op * x.compute().ravel()
150-
assert_array_almost_equal(y.reshape(par['nz'], par['ny'], par['nx'])[1:-1, 1:-1],
151-
dy.reshape(par['nz'], par['ny'], par['nx'])[1:-1, 1:-1],
149+
assert_array_almost_equal(y.reshape(par['nz'], par['ny'], par['nx'])[:, 1:-1, :],
150+
dy.reshape(par['nz'], par['ny'], par['nx'])[:, 1:-1, :],
152151
decimal=1)
153152

154153
# 3d - derivative on 3rd direction
155-
# to do...
154+
dD1op = dFirstDerivative(par['nz'] * par['ny'] * par['nx'],
155+
dims=(par['nz'], par['ny'], par['nx']),
156+
dir=2, sampling=par['dx'], compute=(True, True),
157+
dtype='float32')
158+
D1op = FirstDerivative(par['nz'] * par['ny'] * par['nx'],
159+
dims=(par['nz'], par['ny'], par['nx']),
160+
dir=2, sampling=par['dx'], edge=False,
161+
dtype='float32')
162+
assert dottest(dD1op, par['nz'] * par['ny'] * par['nx'],
163+
par['nz'] * par['ny'] * par['nx'],
164+
chunks=((par['nz'] // 2 + 1) *
165+
(par['ny'] // 2 + 1) *
166+
(par['nx'] // 2 + 1),
167+
(par['nz'] // 2 + 1) *
168+
(par['ny'] // 2 + 1) *
169+
(par['nx'] // 2 + 1)), tol=1e-3)
170+
171+
x = np.outer(np.ones((par['nz'], par['ny'])),
172+
(par['dx'] * np.arange(par['nx'])) ** 2).reshape(par['nz'],
173+
par['ny'],
174+
par['nx'])
175+
x = da.from_array(x, chunks=(par['nz'] // 2 + 1,
176+
par['ny'] // 2 + 1,
177+
par['nx'] // 2 + 1))
178+
dy = dD1op * x.ravel()
179+
y = D1op * x.compute().ravel()
180+
assert_array_almost_equal(
181+
y.reshape(par['nz'], par['ny'], par['nx'])[:, :, 1:-1],
182+
dy.reshape(par['nz'], par['ny'], par['nx'])[:, :, 1:-1],
183+
decimal=1)
156184

157185

158186
@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4),
159187
(par1e), (par2e), (par3e), (par4e)])
160188
def test_SecondDerivative(par):
161189
"""Dot-test and comparison with Pylops for SecondDerivative operator
162190
"""
163-
np.random.seed(10)
191+
np.random.seed(0)
164192

165193
x = par['dx'] * np.arange(par['nx'])
166194
y = par['dy'] * np.arange(par['ny'])
@@ -182,7 +210,6 @@ def test_SecondDerivative(par):
182210
y = D2op * x.compute()
183211
assert_array_almost_equal(y[1:-1], dy[1:-1], decimal=1)
184212

185-
186213
# 2d - derivative on 1st direction
187214
dD2op = dSecondDerivative(par['ny'] * par['nx'],
188215
dims=(par['ny'], par['nx']),
@@ -250,41 +277,6 @@ def test_SecondDerivative(par):
250277
par['nx'] // 2 + 1))
251278
dy = dD2op * xxx.ravel()
252279
y = D2op * xxx.compute().ravel()
253-
assert_array_almost_equal(y.reshape(par['nz'], par['ny'], par['nx'])[1:-1, 1:-1, 1:-1],
254-
dy.reshape(par['nz'], par['ny'], par['nx'])[1:-1, 1:-1, 1:-1],
280+
assert_array_almost_equal(y.reshape(par['nz'], par['ny'], par['nx'])[1:-1],
281+
dy.reshape(par['nz'], par['ny'], par['nx'])[1:-1],
255282
decimal=1)
256-
"""
257-
# 3d - derivative on 2nd direction
258-
D2op = SecondDerivative(par['nz'] * par['ny'] * par['nx'],
259-
dims=(par['ny'], par['nx'], par['nz']),
260-
dir=1, sampling=par['dx'],
261-
edge=par['edge'], dtype='float32')
262-
263-
assert dottest(D2op, par['nz'] * par['ny'] * par['nx'],
264-
par['nz'] * par['ny'] * par['nx'], tol=1e-3)
265-
266-
# polynomial f(x,y,z) = x^3, f_{xx}(x,y,z) = 6x
267-
f = xxx**3
268-
dfana = 6*xxx
269-
df = D2op * f.flatten()
270-
df = df.reshape(par['ny'], par['nx'], par['nz'])
271-
272-
assert_array_almost_equal(df[:,1:-1,:], dfana[:,1:-1,:], decimal=1)
273-
274-
# 3d - derivative on 3rd direction
275-
D2op = SecondDerivative(par['nz'] * par['ny'] * par['nx'],
276-
dims=(par['ny'], par['nx'], par['nz']),
277-
dir=2, sampling=par['dz'],
278-
edge=par['edge'], dtype='float32')
279-
280-
assert dottest(D2op, par['nz'] * par['ny'] * par['nx'],
281-
par['ny'] * par['nx'] * par['nz'], tol=1e-3)
282-
283-
# polynomial f(x,y,z) = z^3, f_{zz}(x,y,z) = 6z
284-
f = zzz**3
285-
dfana = 6*zzz
286-
df = D2op * f.flatten()
287-
df = df.reshape(par['ny'], par['nx'], par['nz'])
288-
289-
assert_array_almost_equal(df[:,:,1:-1], dfana[:,:,1:-1], decimal=1)
290-
"""

0 commit comments

Comments
 (0)