Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error when testing SciPy

Tags:

python

scipy

When testing scipy using the nose package using scipy.test(), the test fails under Ubuntu 12.04 with all the vanilla packages installed. Do I have to worry, and if yes how can I fix this?

In [8]: scipy.test()
Running unit tests for scipy
NumPy version 1.5.1
NumPy is installed in /usr/lib/python2.7/dist-packages/numpy
SciPy version 0.9.0
SciPy is installed in /usr/lib/python2.7/dist-packages/scipy
Python version 2.7.2+ (default, Jan 21 2012, 23:31:34) [GCC 4.6.2]
nose version 1.1.2

[................]

======================================================================
FAIL: test_io.test_imread
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/usr/lib/python2.7/dist-packages/numpy/testing/decorators.py", line 146, in skipper_func
    return f(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/scipy/ndimage/tests/test_io.py", line 16, in test_imread
    assert_array_equal(img.shape, (300, 420, 3))
  File "/usr/lib/python2.7/dist-packages/numpy/testing/utils.py", line 686, in assert_array_equal
    verbose=verbose, header='Arrays are not equal')
  File "/usr/lib/python2.7/dist-packages/numpy/testing/utils.py", line 579, in assert_array_compare
    raise AssertionError(msg)
AssertionError: 
Arrays are not equal

(shapes (2,), (3,) mismatch)
 x: array([300, 420])
 y: array([300, 420,   3])

----------------------------------------------------------------------
Ran 3780 tests in 32.328s

FAILED (KNOWNFAIL=11, SKIP=20, failures=1)
like image 878
Ingo Avatar asked Feb 11 '12 11:02

Ingo


People also ask

How do you handle exceptions in unit test Python?

assertRaises(exception, callable, *args, **kwds) Test that an exception (first argument) is raised when a function is called with any positional or keyword arguments. The test passes if the expected exception is raised, is an error if another exception is raised, or fails if no exception is raised.

How do you check if a function raises an error in Python?

There are two ways you can use assertRaises: using keyword arguments. Just pass the exception, the callable function and the parameters of the callable function as keyword arguments that will elicit the exception. Make a function call that should raise the exception with a context.

How do you check exceptions in Python?

In Python, exceptions can be handled using a try statement. The critical operation which can raise an exception is placed inside the try clause. The code that handles the exceptions is written in the except clause. We can thus choose what operations to perform once we have caught the exception.

What does Ttest_ind return?

Calculates the T-test for the means of TWO INDEPENDENT samples of scores. This is a two-sided test for the null hypothesis that 2 independent samples have identical average (expected) values. This test assumes that the populations have identical variances.


1 Answers

If you take a look inside /usr/lib/python2.7/dist-packages/scipy/ndimage/tests/test_io.py you should see:

def test_imread():
    lp = os.path.join(os.path.dirname(__file__), 'dots.png')
    img = ndi.imread(lp)
    assert_array_equal(img.shape, (300, 420, 3))

    img = ndi.imread(lp, flatten=True)
    assert_array_equal(img.shape, (300, 420))

This test seems to be testing if flatten=True converts an RGB image into a 1-bit greyscale image.

On my Ubuntu 11.10 system, however, dots.png is already a 1-bit image file:

% file /usr/share/pyshared/scipy/ndimage/tests/dots.png
/usr/share/pyshared/scipy/ndimage/tests/dots.png: PNG image data, 420 x 300, 1-bit colormap, non-interlaced

If I perform the test (manually) on a RGBA image, then the test works:

In [18]: z = ndi.imread('image.png')

In [20]: z.shape
Out[20]: (250, 250, 4)

In [24]: w = ndi.imread('image.png', flatten = True)

In [25]: w.shape
Out[25]: (250, 250)

So I don't think there is anything seriously wrong here, just that perhaps the dots.png file that was shipped should have been an RGB image instead of a greyscale one.

like image 55
unutbu Avatar answered Oct 13 '22 12:10

unutbu