from helper import unittest, PillowTestCase
from distutils.version import LooseVersion
try:
    import numpy as np
    from numpy.testing import assert_equal

    from scipy import misc
    import scipy
    HAS_SCIPY = True
except ImportError:
    HAS_SCIPY = False


class Test_scipy_resize(PillowTestCase):
    """ Tests for scipy regression in Pillow 2.6.0

    Tests from https://github.com/scipy/scipy/blob/master/scipy/misc/pilutil.py
    """

    def setUp(self):
        if not HAS_SCIPY:
            self.skipTest("Scipy Required")

    def test_imresize(self):
        im = np.random.random((10, 20))
        for T in np.sctypes['float'] + [float]:
            # 1.1 rounds to below 1.1 for float16, 1.101 works
            im1 = misc.imresize(im, T(1.101))
            self.assertEqual(im1.shape, (11, 22))

    # this test fails prior to scipy 0.14.0b1
    # https://github.com/scipy/scipy/commit/855ff1fff805fb91840cf36b7082d18565fc8352
    @unittest.skipIf(HAS_SCIPY and
					 (LooseVersion(scipy.__version__) < LooseVersion('0.14.0')),
                     "Test fails on scipy < 0.14.0")
    def test_imresize4(self):
        im = np.array([[1, 2],
                       [3, 4]])
        res = np.array([[1.,   1.25,  1.75,  2.],
                        [1.5,  1.75,  2.25,  2.5],
                        [2.5,  2.75,  3.25,  3.5],
                        [3.,   3.25,  3.75,  4.]], dtype=np.float32)
        # Check that resizing by target size, float and int are the same
        im2 = misc.imresize(im, (4, 4), mode='F')  # output size
        im3 = misc.imresize(im, 2., mode='F')  # fraction
        im4 = misc.imresize(im, 200, mode='F')  # percentage
        assert_equal(im2, res)
        assert_equal(im3, res)
        assert_equal(im4, res)


if __name__ == '__main__':
    unittest.main()
