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