summaryrefslogtreecommitdiff
path: root/silx/math/test/test_interpolate.py
diff options
context:
space:
mode:
Diffstat (limited to 'silx/math/test/test_interpolate.py')
-rw-r--r--silx/math/test/test_interpolate.py136
1 files changed, 0 insertions, 136 deletions
diff --git a/silx/math/test/test_interpolate.py b/silx/math/test/test_interpolate.py
deleted file mode 100644
index 9989302..0000000
--- a/silx/math/test/test_interpolate.py
+++ /dev/null
@@ -1,136 +0,0 @@
-# coding: utf-8
-# /*##########################################################################
-#
-# Copyright (c) 2019 European Synchrotron Radiation Facility
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-# ############################################################################*/
-"""Test for interpolate module"""
-
-__authors__ = ["T. Vincent"]
-__license__ = "MIT"
-__date__ = "11/07/2019"
-
-
-import unittest
-
-import numpy
-try:
- from scipy.interpolate import interpn
-except ImportError:
- interpn = None
-
-from silx.utils.testutils import ParametricTestCase
-from silx.math import interpolate
-
-
-@unittest.skipUnless(interpn is not None, "scipy missing")
-class TestInterp3d(ParametricTestCase):
- """Test silx.math.interpolate.interp3d"""
-
- @staticmethod
- def ref_interp3d(data, points):
- """Reference implementation of interp3d based on scipy
-
- :param numpy.ndarray data: 3D floating dataset
- :param numpy.ndarray points: Array of points of shape (N, 3)
- """
- return interpn(
- [numpy.arange(dim, dtype=data.dtype) for dim in data.shape],
- data,
- points,
- method='linear')
-
- def test_random_data(self):
- """Test interp3d with random data"""
- size = 32
- npoints = 10
-
- ref_data = numpy.random.random((size, size, size))
- ref_points = numpy.random.random(npoints*3).reshape(npoints, 3) * (size -1)
-
- for dtype in (numpy.float32, numpy.float64):
- data = ref_data.astype(dtype)
- points = ref_points.astype(dtype)
- ref_result = self.ref_interp3d(data, points)
-
- for method in (u'linear', u'linear_omp'):
- with self.subTest(method=method):
- result = interpolate.interp3d(data, points, method=method)
- self.assertTrue(numpy.allclose(ref_result, result))
-
- def test_notfinite_data(self):
- """Test interp3d with NaN and inf"""
- data = numpy.ones((3, 3, 3), dtype=numpy.float64)
- data[0, 0, 0] = numpy.nan
- data[2, 2, 2] = numpy.inf
- points = numpy.array([(0.5, 0.5, 0.5),
- (1.5, 1.5, 1.5)])
-
- for method in (u'linear', u'linear_omp'):
- with self.subTest(method=method):
- result = interpolate.interp3d(
- data, points, method=method)
- self.assertTrue(numpy.isnan(result[0]))
- self.assertTrue(result[1] == numpy.inf)
-
- def test_points_outside(self):
- """Test interp3d with points outside the volume"""
- data = numpy.ones((4, 4, 4), dtype=numpy.float64)
- points = numpy.array([(-0.1, -0.1, -0.1),
- (3.1, 3.1, 3.1),
- (-0.1, 1., 1.),
- (1., 1., 3.1)])
-
- for method in (u'linear', u'linear_omp'):
- for fill_value in (numpy.nan, 0., -1.):
- with self.subTest(method=method):
- result = interpolate.interp3d(
- data, points, method=method, fill_value=fill_value)
- if numpy.isnan(fill_value):
- self.assertTrue(numpy.all(numpy.isnan(result)))
- else:
- self.assertTrue(numpy.all(numpy.equal(result, fill_value)))
-
- def test_integer_points(self):
- """Test interp3d with integer points coord"""
- data = numpy.arange(4**3, dtype=numpy.float64).reshape(4, 4, 4)
- points = numpy.array([(0., 0., 0.),
- (0., 0., 1.),
- (2., 3., 0.),
- (3., 3., 3.)])
-
- ref_result = data[tuple(points.T.astype(numpy.int32))]
-
- for method in (u'linear', u'linear_omp'):
- with self.subTest(method=method):
- result = interpolate.interp3d(data, points, method=method)
- self.assertTrue(numpy.allclose(ref_result, result))
-
-
-def suite():
- test_suite = unittest.TestSuite()
- test_suite.addTest(
- unittest.defaultTestLoader.loadTestsFromTestCase(TestInterp3d))
- return test_suite
-
-
-if __name__ == '__main__':
- unittest.main(defaultTest='suite')