From f46b597685127f4b4b29aaf105d4fb193d1d37fe Mon Sep 17 00:00:00 2001 From: Michael Kuron <mkuron@icp.uni-stuttgart.de> Date: Thu, 23 Jan 2020 17:07:32 +0100 Subject: [PATCH] restore fixed interpolation test --- pystencils_tests/test_interpolation.py | 94 +++++++++++++------------- 1 file changed, 48 insertions(+), 46 deletions(-) diff --git a/pystencils_tests/test_interpolation.py b/pystencils_tests/test_interpolation.py index db27f9fdf..477765bb3 100644 --- a/pystencils_tests/test_interpolation.py +++ b/pystencils_tests/test_interpolation.py @@ -14,8 +14,6 @@ import numpy as np import pytest import sympy -import pytest - import pystencils from pystencils.interpolation_astnodes import LinearInterpolator from pystencils.spatial_coordinates import x_, y_ @@ -51,7 +49,7 @@ def test_interpolation(): print(assignments) ast = pystencils.create_kernel(assignments) print(ast) - pystencils.show_code(ast) + print(pystencils.show_code(ast)) kernel = ast.compile() pyconrad.imshow(lenna) @@ -71,7 +69,7 @@ def test_scale_interpolation(): print(assignments) ast = pystencils.create_kernel(assignments) print(ast) - pystencils.show_code(ast) + print(pystencils.show_code(ast)) kernel = ast.compile() out = np.zeros_like(lenna) @@ -83,9 +81,9 @@ def test_scale_interpolation(): ['border', 'clamp', pytest.param('warp', marks=pytest.mark.xfail( - reason="Fails on newer SymPy version due to complex conjugate()")), + reason="requires interpolation-refactoring branch")), pytest.param('mirror', marks=pytest.mark.xfail( - reason="Fails on newer SymPy version due to complex conjugate()")), + reason="requires interpolation-refactoring branch")), ]) def test_rotate_interpolation(address_mode): """ @@ -102,7 +100,7 @@ def test_rotate_interpolation(address_mode): print(assignments) ast = pystencils.create_kernel(assignments) print(ast) - pystencils.show_code(ast) + print(pystencils.show_code(ast)) kernel = ast.compile() out = np.zeros_like(lenna) @@ -114,10 +112,10 @@ def test_rotate_interpolation(address_mode): @pytest.mark.parametrize('address_mode', ('border', 'wrap', 'clamp', 'mirror')) @pytest.mark.parametrize('use_textures', ('use_textures', False)) def test_rotate_interpolation_gpu(dtype, address_mode, use_textures): - pytest.importorskip("pycuda") - import pycuda.autoinit # NOQA - import pycuda.gpuarray as gpuarray + pytest.importorskip('pycuda') + import pycuda.gpuarray as gpuarray + import pycuda.autoinit # noqa rotation_angle = sympy.pi / 5 scale = 1 @@ -144,52 +142,56 @@ def test_rotate_interpolation_gpu(dtype, address_mode, use_textures): kernel(x=lenna_gpu, y=out) pyconrad.imshow(out, f"out {address_mode} texture:{use_textures} {type_map[dtype]}") - skimage.io.imsave(f"/tmp/out {address_mode} texture:{use_textures} {type_map[dtype]}.tif", - np.ascontiguousarray(out.get(), np.float32)) -@pytest.mark.parametrize('address_mode', ['border', 'wrap', 'clamp', 'mirror']) +@pytest.mark.parametrize('address_mode', ['border', 'wrap', + pytest.param('warp', marks=pytest.mark.xfail( + reason="% printed as fmod on old sympy")), + pytest.param('mirror', marks=pytest.mark.xfail( + reason="% printed as fmod on old sympy")), + ]) @pytest.mark.parametrize('dtype', [np.float64, np.float32, np.int32]) @pytest.mark.parametrize('use_textures', ('use_textures', False,)) def test_shift_interpolation_gpu(address_mode, dtype, use_textures): - pytest.importorskip("pycuda") - import pycuda.autoinit # NOQA + sver = sympy.__version__.split(".") + if (int(sver[0]) == 1 and int(sver[1]) < 2) and address_mode in ['mirror', 'warp']: + pytest.skip() + pytest.importorskip('pycuda') + import pycuda.gpuarray as gpuarray + import pycuda.autoinit # noqa rotation_angle = 0 # sympy.pi / 5 scale = 1 # shift = - sympy.Matrix([1.5, 1.5]) shift = sympy.Matrix((0.0, 0.0)) - for dtype in [np.float64, np.float32, np.int32]: - if dtype == np.int32: - lenna_gpu = gpuarray.to_gpu( - np.ascontiguousarray(lenna * 255, dtype)) - else: - lenna_gpu = gpuarray.to_gpu( - np.ascontiguousarray(lenna, dtype)) - for use_textures in [True, False]: - x_f, y_f = pystencils.fields('x,y: %s [2d]' % type_map[dtype], ghost_layers=0) - - if use_textures: - transformed = scale * sympy.rot_axis3(rotation_angle)[:2, :2] * sympy.Matrix((x_, y_)) + shift - else: - transformed = scale * sympy.rot_axis3(rotation_angle)[:2, :2] * sympy.Matrix((x_, y_)) + shift - assignments = pystencils.AssignmentCollection({ - y_f.center(): LinearInterpolator(x_f, address_mode=address_mode).at(transformed) - }) - # print(assignments) - ast = pystencils.create_kernel(assignments, target='gpu', use_textures_for_interpolation=use_textures) - # print(ast) - pystencils.show_code(ast) - kernel = ast.compile() - - out = gpuarray.zeros_like(lenna_gpu) - kernel(x=lenna_gpu, y=out) - pyconrad.imshow(out, - f"out {address_mode} texture:{use_textures} {type_map[dtype]}") - skimage.io.imsave(f"/tmp/out {address_mode} texture:{use_textures} {type_map[dtype]}.tif", - np.ascontiguousarray(out.get(), np.float32)) + if dtype == np.int32: + lenna_gpu = gpuarray.to_gpu( + np.ascontiguousarray(lenna * 255, dtype)) + else: + lenna_gpu = gpuarray.to_gpu( + np.ascontiguousarray(lenna, dtype)) + + x_f, y_f = pystencils.fields('x,y: %s [2d]' % type_map[dtype], ghost_layers=0) + + if use_textures: + transformed = scale * sympy.rot_axis3(rotation_angle)[:2, :2] * sympy.Matrix((x_, y_)) + shift + else: + transformed = scale * sympy.rot_axis3(rotation_angle)[:2, :2] * sympy.Matrix((x_, y_)) + shift + assignments = pystencils.AssignmentCollection({ + y_f.center(): LinearInterpolator(x_f, address_mode=address_mode).at(transformed) + }) + # print(assignments) + ast = pystencils.create_kernel(assignments, target='gpu', use_textures_for_interpolation=use_textures) + # print(ast) + print(pystencils.show_code(ast)) + kernel = ast.compile() + + out = gpuarray.zeros_like(lenna_gpu) + kernel(x=lenna_gpu, y=out) + pyconrad.imshow(out, + f"out {address_mode} texture:{use_textures} {type_map[dtype]}") @pytest.mark.parametrize('address_mode', ['border', 'clamp']) @@ -208,7 +210,7 @@ def test_rotate_interpolation_size_change(address_mode): print(assignments) ast = pystencils.create_kernel(assignments) print(ast) - pystencils.show_code(ast) + print(pystencils.show_code(ast)) kernel = ast.compile() out = np.zeros((100, 150), np.float64) @@ -227,7 +229,7 @@ def test_field_interpolated(address_mode, target): print(assignments) ast = pystencils.create_kernel(assignments, target=target) print(ast) - pystencils.show_code(ast) + print(pystencils.show_code(ast)) kernel = ast.compile() out = np.zeros_like(lenna) -- GitLab