Skip to content

Commit 2244c44

Browse files
authored
Merge pull request #714 from mrava87/test-patchslide
Test: more tests for patching/sliding ops
2 parents bd032bf + 940e263 commit 2244c44

2 files changed

Lines changed: 350 additions & 6 deletions

File tree

pytests/test_patching.py

Lines changed: 249 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ def test_Patch2D(par):
139139
"""Dot-test and inverse for Patch2D operator"""
140140
Op = MatrixMult(np.ones((par["nwiny"] * par["nwint"], par["ny"] * par["nt"])))
141141

142-
nwins, dims, mwin_inends, dwin_inends = patch2d_design(
142+
nwins, dims, _, _ = patch2d_design(
143143
(par["npy"], par["npt"]),
144144
(par["nwiny"], par["nwint"]),
145145
(par["novery"], par["novert"]),
@@ -161,7 +161,7 @@ def test_Patch2D(par):
161161
par["ny"] * par["nt"] * nwins[0] * nwins[1],
162162
backend=backend,
163163
)
164-
x = np.ones((par["ny"] * nwins[0], par["nt"] * nwins[1]))
164+
x = np.ones((par["ny"] * nwins[0] * par["nt"] * nwins[1]))
165165
y = Pop * x.ravel()
166166

167167
xinv = Pop / y
@@ -174,7 +174,7 @@ def test_Patch2D_scalings(par):
174174
Op = MatrixMult(np.ones((par["nwiny"] * par["nwint"], par["ny"] * par["nt"])))
175175
scalings = np.arange(par["nwiny"] * par["nwint"]) + 1.0
176176

177-
nwins, dims, mwin_inends, dwin_inends = patch2d_design(
177+
nwins, dims, _, _ = patch2d_design(
178178
(par["npy"], par["npt"]),
179179
(par["nwiny"], par["nwint"]),
180180
(par["novery"], par["novert"]),
@@ -197,7 +197,78 @@ def test_Patch2D_scalings(par):
197197
par["ny"] * par["nt"] * nwins[0] * nwins[1],
198198
backend=backend,
199199
)
200-
x = np.ones((par["ny"] * nwins[0], par["nt"] * nwins[1]))
200+
x = np.ones((par["ny"] * nwins[0] * par["nt"] * nwins[1]))
201+
y = Pop * x.ravel()
202+
203+
xinv = Pop / y
204+
assert_array_almost_equal(x.ravel(), xinv)
205+
206+
207+
@pytest.mark.parametrize("par", [(par1), (par4)])
208+
def test_Patch2D_singlepatch1(par):
209+
"""Dot-test and inverse for Patch2D operator with single patch in fist dimension"""
210+
Op = MatrixMult(np.ones((par["npy"] * par["nwint"], par["npy"] * par["nt"])))
211+
212+
nwins, dims, _, _ = patch2d_design(
213+
(par["npy"], par["npt"]),
214+
(par["npy"], par["nwint"]),
215+
(0, par["novert"]),
216+
(par["npy"], par["nt"]),
217+
)
218+
219+
Pop = Patch2D(
220+
Op,
221+
dims=dims,
222+
dimsd=(par["npy"], par["npt"]),
223+
nwin=(par["npy"], par["nwint"]),
224+
nover=(0, par["novert"]),
225+
nop=(par["npy"], par["nt"]),
226+
tapertype=par["tapertype"],
227+
savetaper=par["savetaper"],
228+
)
229+
assert nwins[0] == 1
230+
assert dottest(
231+
Pop,
232+
par["npy"] * par["npt"],
233+
par["npy"] * par["nt"] * nwins[0] * nwins[1],
234+
backend=backend,
235+
)
236+
x = np.ones((par["npy"] * nwins[0] * par["nt"] * nwins[1]))
237+
y = Pop * x.ravel()
238+
239+
xinv = Pop / y
240+
assert_array_almost_equal(x.ravel(), xinv)
241+
242+
243+
@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)])
244+
def test_Patch2D_singlepatch2(par):
245+
"""Dot-test and inverse for Patch2D operator with single patch in second dimension"""
246+
Op = MatrixMult(np.ones((par["nwiny"] * par["npt"], par["ny"] * par["npt"])))
247+
248+
nwins, dims, _, _ = patch2d_design(
249+
(par["npy"], par["npt"]),
250+
(par["nwiny"], par["npt"]),
251+
(par["novery"], 0),
252+
(par["ny"], par["npt"]),
253+
)
254+
Pop = Patch2D(
255+
Op,
256+
dims=dims,
257+
dimsd=(par["npy"], par["npt"]),
258+
nwin=(par["nwiny"], par["npt"]),
259+
nover=(par["novery"], 0),
260+
nop=(par["ny"], par["npt"]),
261+
tapertype=par["tapertype"],
262+
savetaper=par["savetaper"],
263+
)
264+
assert nwins[1] == 1
265+
assert dottest(
266+
Pop,
267+
par["npy"] * par["npt"],
268+
par["ny"] * par["npt"] * nwins[0] * nwins[1],
269+
backend=backend,
270+
)
271+
x = np.ones((par["ny"] * nwins[0] * par["npt"] * nwins[1]))
201272
y = Pop * x.ravel()
202273

203274
xinv = Pop / y
@@ -216,7 +287,7 @@ def test_Patch3D(par):
216287
)
217288
)
218289

219-
nwins, dims, mwin_inends, dwin_inends = patch3d_design(
290+
nwins, dims, _, _ = patch3d_design(
220291
(par["npy"], par["npx"], par["npt"]),
221292
(par["nwiny"], par["nwinx"], par["nwint"]),
222293
(par["novery"], par["noverx"], par["novert"]),
@@ -248,3 +319,176 @@ def test_Patch3D(par):
248319

249320
xinv = Pop / y
250321
assert_array_almost_equal(x.ravel(), xinv)
322+
323+
324+
@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)])
325+
def test_Patch3D_singlepatch1(par):
326+
"""Dot-test and inverse for Patch3D operator with single patch in fist dimension"""
327+
Op = MatrixMult(
328+
np.ones(
329+
(
330+
par["npy"] * par["nwinx"] * par["nwint"],
331+
par["npy"] * par["nx"] * par["nt"],
332+
)
333+
)
334+
)
335+
336+
nwins, dims, _, _ = patch3d_design(
337+
(par["npy"], par["npx"], par["npt"]),
338+
(par["npy"], par["nwinx"], par["nwint"]),
339+
(0, par["noverx"], par["novert"]),
340+
(par["npy"], par["nx"], par["nt"]),
341+
)
342+
343+
Pop = Patch3D(
344+
Op,
345+
dims=dims,
346+
dimsd=(par["npy"], par["npx"], par["npt"]),
347+
nwin=(par["npy"], par["nwinx"], par["nwint"]),
348+
nover=(0, par["noverx"], par["novert"]),
349+
nop=(par["npy"], par["nx"], par["nt"]),
350+
tapertype=par["tapertype"],
351+
savetaper=par["savetaper"],
352+
)
353+
assert nwins[0] == 1
354+
assert dottest(
355+
Pop,
356+
par["npy"] * par["npx"] * par["npt"],
357+
par["npy"] * par["nx"] * par["nt"] * nwins[0] * nwins[1] * nwins[2],
358+
backend=backend,
359+
)
360+
x = np.ones((par["npy"] * nwins[0], par["nx"] * nwins[1], par["nt"] * nwins[2]))
361+
y = Pop * x.ravel()
362+
363+
xinv = Pop / y
364+
assert_array_almost_equal(x.ravel(), xinv)
365+
366+
367+
@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)])
368+
def test_Patch3D_singlepatch2(par):
369+
"""Dot-test and inverse for Patch3D operator with single patch in second dimension"""
370+
Op = MatrixMult(
371+
np.ones(
372+
(
373+
par["nwiny"] * par["npx"] * par["nwint"],
374+
par["ny"] * par["npx"] * par["nt"],
375+
)
376+
)
377+
)
378+
379+
nwins, dims, _, _ = patch3d_design(
380+
(par["npy"], par["npx"], par["npt"]),
381+
(par["nwiny"], par["npx"], par["nwint"]),
382+
(par["novery"], 0, par["novert"]),
383+
(par["ny"], par["npx"], par["nt"]),
384+
)
385+
386+
Pop = Patch3D(
387+
Op,
388+
dims=dims,
389+
dimsd=(par["npy"], par["npx"], par["npt"]),
390+
nwin=(par["nwiny"], par["npx"], par["nwint"]),
391+
nover=(par["novery"], 0, par["novert"]),
392+
nop=(par["ny"], par["npx"], par["nt"]),
393+
tapertype=par["tapertype"],
394+
savetaper=par["savetaper"],
395+
)
396+
assert nwins[1] == 1
397+
assert dottest(
398+
Pop,
399+
par["npy"] * par["npx"] * par["npt"],
400+
par["ny"] * par["npx"] * par["nt"] * nwins[0] * nwins[1] * nwins[2],
401+
backend=backend,
402+
)
403+
x = np.ones((par["ny"] * nwins[0], par["npx"] * nwins[1], par["nt"] * nwins[2]))
404+
y = Pop * x.ravel()
405+
406+
xinv = Pop / y
407+
assert_array_almost_equal(x.ravel(), xinv)
408+
409+
410+
@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)])
411+
def test_Patch3D_singlepatch12(par):
412+
"""Dot-test and inverse for Patch3D operator with single patch in
413+
fist and second dimensions"""
414+
Op = MatrixMult(
415+
np.ones(
416+
(
417+
par["npy"] * par["npx"] * par["nwint"],
418+
par["npy"] * par["npx"] * par["nt"],
419+
)
420+
)
421+
)
422+
423+
nwins, dims, _, _ = patch3d_design(
424+
(par["npy"], par["npx"], par["npt"]),
425+
(par["npy"], par["npx"], par["nwint"]),
426+
(0, 0, par["novert"]),
427+
(par["npy"], par["npx"], par["nt"]),
428+
)
429+
430+
Pop = Patch3D(
431+
Op,
432+
dims=dims,
433+
dimsd=(par["npy"], par["npx"], par["npt"]),
434+
nwin=(par["npy"], par["npx"], par["nwint"]),
435+
nover=(0, 0, par["novert"]),
436+
nop=(par["npy"], par["npx"], par["nt"]),
437+
tapertype=par["tapertype"],
438+
savetaper=par["savetaper"],
439+
)
440+
assert nwins[0] == 1
441+
assert nwins[1] == 1
442+
assert dottest(
443+
Pop,
444+
par["npy"] * par["npx"] * par["npt"],
445+
par["npy"] * par["npx"] * par["nt"] * nwins[0] * nwins[1] * nwins[2],
446+
backend=backend,
447+
)
448+
x = np.ones((par["npy"] * nwins[0], par["npx"] * nwins[1], par["nt"] * nwins[2]))
449+
y = Pop * x.ravel()
450+
451+
xinv = Pop / y
452+
assert_array_almost_equal(x.ravel(), xinv)
453+
454+
455+
@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)])
456+
def test_Patch3D_singlepatch3(par):
457+
"""Dot-test and inverse for Patch3D operator with single patch in third dimension"""
458+
Op = MatrixMult(
459+
np.ones(
460+
(
461+
par["nwiny"] * par["nwinx"] * par["npt"],
462+
par["ny"] * par["nx"] * par["npt"],
463+
)
464+
)
465+
)
466+
467+
nwins, dims, _, _ = patch3d_design(
468+
(par["npy"], par["npx"], par["npt"]),
469+
(par["nwiny"], par["nwinx"], par["npt"]),
470+
(par["novery"], par["noverx"], 0),
471+
(par["ny"], par["nx"], par["npt"]),
472+
)
473+
474+
Pop = Patch3D(
475+
Op,
476+
dims=dims,
477+
dimsd=(par["npy"], par["npx"], par["npt"]),
478+
nwin=(par["nwiny"], par["nwinx"], par["npt"]),
479+
nover=(par["novery"], par["noverx"], 0),
480+
nop=(par["ny"], par["nx"], par["npt"]),
481+
tapertype=par["tapertype"],
482+
savetaper=par["savetaper"],
483+
)
484+
assert dottest(
485+
Pop,
486+
par["npy"] * par["npx"] * par["npt"],
487+
par["ny"] * par["nx"] * par["npt"] * nwins[0] * nwins[1] * nwins[2],
488+
backend=backend,
489+
)
490+
x = np.ones((par["ny"] * nwins[0], par["nx"] * nwins[1], par["npt"] * nwins[2]))
491+
y = Pop * x.ravel()
492+
493+
xinv = Pop / y
494+
assert_array_almost_equal(x.ravel(), xinv)

0 commit comments

Comments
 (0)