[Scipy-svn] r3771 - in trunk/scipy/io: matlab matlab/tests tests

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Jan 3 14:22:32 EST 2008


Author: stefan
Date: 2008-01-03 13:21:53 -0600 (Thu, 03 Jan 2008)
New Revision: 3771

Added:
   trunk/scipy/io/matlab/tests/
   trunk/scipy/io/matlab/tests/data/
   trunk/scipy/io/matlab/tests/test_mio.py
Removed:
   trunk/scipy/io/tests/data/
   trunk/scipy/io/tests/test_mio.py
Modified:
   trunk/scipy/io/matlab/setup.py
Log:
Restructure io.matlab unittests.


Modified: trunk/scipy/io/matlab/setup.py
===================================================================
--- trunk/scipy/io/matlab/setup.py	2008-01-03 19:05:43 UTC (rev 3770)
+++ trunk/scipy/io/matlab/setup.py	2008-01-03 19:21:53 UTC (rev 3771)
@@ -3,6 +3,7 @@
 def configuration(parent_package='',top_path=None):
     from numpy.distutils.misc_util import Configuration
     config = Configuration('matlab', parent_package, top_path)
+    config.add_data_dir('tests')
     return config
 
 if __name__ == '__main__':

Copied: trunk/scipy/io/matlab/tests/data (from rev 3768, trunk/scipy/io/tests/data)

Copied: trunk/scipy/io/matlab/tests/test_mio.py (from rev 3770, trunk/scipy/io/tests/test_mio.py)
===================================================================
--- trunk/scipy/io/tests/test_mio.py	2008-01-03 19:05:43 UTC (rev 3770)
+++ trunk/scipy/io/matlab/tests/test_mio.py	2008-01-03 19:21:53 UTC (rev 3771)
@@ -0,0 +1,248 @@
+#!/usr/bin/env python
+
+import os
+from glob import glob
+from cStringIO import StringIO
+from tempfile import mkstemp
+from numpy.testing import set_package_path, restore_path, NumpyTestCase, NumpyTest
+from numpy.testing import assert_equal, assert_array_almost_equal
+from numpy import arange, array, eye, pi, cos, exp, sin, sqrt, ndarray,  \
+     zeros, reshape, transpose, empty
+import scipy.sparse as SP
+
+set_package_path()
+from matlab.mio import loadmat, savemat
+from matlab.mio5 import mat_obj, mat_struct
+restore_path()
+
+try:  # Python 2.3 support
+    from sets import Set as set
+except:
+    pass
+
+test_data_path = os.path.join(os.path.dirname(__file__), './data')
+
+class TestMIOArray(NumpyTestCase):
+    def __init__(self, *args, **kwargs):
+        super(TestMIOArray, self).__init__(*args, **kwargs)
+
+    def _check_level(self, label, expected, actual):
+        """ Check one level of a potentially nested object / list """
+        # object array is returned from cell array in mat file
+        typex = type(expected)
+        typac = type(actual)
+        if isinstance(expected, ndarray) and expected.dtype.hasobject:
+            assert typex is typac, "Different types at %s" % label
+            assert len(expected) == len(actual), "Different list lengths at %s" % label
+            for i, ev in enumerate(expected):
+                level_label = "%s, [%d], " % (label, i)
+                self._check_level(level_label, ev, actual[i])
+            return
+        # object, as container for matlab structs and objects
+        elif isinstance(expected, mat_struct) or isinstance(expected, mat_obj):
+            assert isinstance(actual, typex), \
+                   "Different types %s and %s at %s" % (typex, typac, label)
+            ex_fields = dir(expected)
+            ac_fields = dir(actual)
+            for k in ex_fields:
+                if k.startswith('__') and k.endswith('__'):
+                    continue
+                assert k in ac_fields, "Missing property at %s" % label
+                ev = expected.__dict__[k]
+                v = actual.__dict__[k]
+                level_label = "%s, property %s, " % (label, k)
+                self._check_level(level_label, ev, v)
+            return
+        # hoping this is a single value, which might be an array
+        if SP.issparse(expected):
+            assert SP.issparse(actual), "Expected sparse at %s" % label
+            assert_array_almost_equal(actual.todense(),
+                                      expected.todense(),
+                                      err_msg = label,
+                                      decimal = 5)
+        elif isinstance(expected, ndarray):
+            if expected.shape: # allow scalar and 0d array comparisons
+                assert isinstance(actual, ndarray), "Expected ndarray at %s" % label
+            assert_array_almost_equal(actual, expected, err_msg=label, decimal=5)
+        else:
+            assert isinstance(expected, typac), \
+                   "Types %s and %s do not match at %s" % (typex, typac, label)
+            assert_equal(actual, expected, err_msg=label)
+
+    def _check_case(self, name, files, case):
+        for file_name in files:
+            matdict = loadmat(file_name)
+            label = "test %s; file %s" % (name, file_name)
+            for k, expected in case.items():
+                k_label = "%s, variable %s" % (label, k)
+                assert k in matdict, "Missing key at %s" % k_label
+                self._check_level(k_label, expected, matdict[k])
+
+    # Add the load tests dynamically, with given parameters
+    def _make_check_case(name, files, expected):
+        def cc(self):
+            self._check_case(name, files, expected)
+        cc.__doc__ = "check loadmat case %s" % name
+        return cc
+
+    # Add the round trip tests dynamically, with given parameters
+    def _make_rt_check_case(name, expected, format):
+        def cc(self):
+            mat_stream = StringIO()
+            savemat(mat_stream, expected, format=format)
+            mat_stream.seek(0)
+            self._check_case(name, [mat_stream], expected)
+        cc.__doc__ = "check loadmat case %s" % name
+        return cc
+
+    # Define cases to test
+    theta = pi/4*arange(9,dtype=float)
+    case_table4 = [
+        {'name': 'double',
+         'expected': {'testdouble': theta}
+         }]
+    case_table4.append(
+        {'name': 'string',
+         'expected': {'teststring': u'"Do nine men interpret?" "Nine men," I nod.'},
+         })
+    case_table4.append(
+        {'name': 'complex',
+         'expected': {'testcomplex': cos(theta) + 1j*sin(theta)}
+         })
+    A = zeros((3,5))
+    A[0] = range(1,6)
+    A[:,0] = range(1,4)
+    case_table4.append(
+        {'name': 'matrix',
+         'expected': {'testmatrix': A},
+         })
+    case_table4.append(
+        {'name': 'sparse',
+         'expected': {'testsparse': SP.csc_matrix(A)},
+         })
+    B = A.astype(complex)
+    B[0,0] += 1j
+    case_table4.append(
+        {'name': 'sparsecomplex',
+         'expected': {'testsparsecomplex': SP.csc_matrix(B)},
+         })
+    case_table4.append(
+        {'name': 'multi',
+         'expected': {'theta': theta,
+                      'a': A},
+         })
+    case_table4.append(
+        {'name': 'minus',
+         'expected': {'testminus': array(-1)},
+         })
+    case_table4.append(
+        {'name': 'onechar',
+         'expected': {'testonechar': u'r'},
+         })
+    case_table5 = [
+        {'name': 'cell',
+         'expected': {'testcell':
+                      array([u'This cell contains this string and 3 arrays of '+\
+                             'increasing length',
+                             array(1), array([1,2]), array([1,2,3])],
+                            dtype=object)}
+         }]
+    case_table5.append(
+        {'name': 'emptycell',
+         'expected': {'testemptycell':
+                      array([array(1), array(2), array([]),
+                             array([]), array(3)], dtype=object)}
+         })
+    case_table5.append(
+        {'name': 'stringarray',
+         'expected': {'teststringarray': array(
+        [u'one  ', u'two  ', u'three'], dtype=object)},
+         })
+    case_table5.append(
+        {'name': '3dmatrix',
+         'expected': {'test3dmatrix': transpose(reshape(range(1,25), (4,3,2)))}
+         })
+    case_table5_rt = [
+        {'name': '3dmatrix',
+         'expected': {'test3dmatrix': transpose(reshape(range(1,25), (4,3,2)))}
+         },
+        {'name': 'sparsefloat',
+         'expected': {'testsparsefloat': SP.csc_matrix(array([[1,0,2],[0,-3.5,0]]))},
+         },
+        {'name': 'sparsecomplex',
+         'expected': {'testsparsefloat': SP.csc_matrix(array([[-1+2j,0,2],[0,-3j,0]]))},
+         },
+        ]
+    st = mat_struct()
+    st.stringfield = u'Rats live on no evil star.'
+    st.doublefield = array([sqrt(2),exp(1),pi])
+    st.complexfield = (1+1j)*array([sqrt(2),exp(1),pi])
+    case_table5.append(
+        {'name': 'struct',
+         'expected': {'teststruct': st}
+         })
+    a = array([array(1),
+               array([array(2), array(3),
+                      array([array(4), array(5)],
+                            dtype=object)],
+                     dtype=object)],
+              dtype=object)
+    case_table5.append(
+        {'name': 'cellnest',
+         'expected': {'testcellnest': a},
+         })
+    st = mat_struct()
+    st.one = array(1)
+    st.two = mat_struct()
+    st.two.three = u'number 3'
+    case_table5.append(
+        {'name': 'structnest',
+         'expected': {'teststructnest': st}
+         })
+    a = array([mat_struct(), mat_struct()])
+    a[0].one = array(1)
+    a[0].two = array(2)
+    a[1].one = u'number 1'
+    a[1].two = u'number 2'
+    case_table5.append(
+        {'name': 'structarr',
+         'expected': {'teststructarr': a}
+         })
+    a = mat_obj()
+    a._classname = 'inline'
+    a.expr = u'x'
+    a.inputExpr = u' x = INLINE_INPUTS_{1};'
+    a.args = u'x'
+    a.isEmpty = array(0)
+    a.numArgs = array(1)
+    a.version = array(1)
+    case_table5.append(
+        {'name': 'object',
+         'expected': {'testobject': a}
+         })
+    u_str = file(
+        os.path.join(test_data_path, 'japanese_utf8.txt'),
+        'rb').read().decode('utf-8')
+    case_table5.append(
+        {'name': 'unicode',
+        'expected': {'testunicode': u_str}
+        })
+    # add load tests
+    for case in case_table4 + case_table5:
+        name = case['name']
+        expected = case['expected']
+        filt = os.path.join(test_data_path, 'test%s_*.mat' % name)
+        files = glob(filt)
+        assert files, "No files for test %s using filter %s" % (name, filt)
+        exec 'check_%s = _make_check_case(name, files, expected)' % name
+    # round trip tests
+    for case in case_table4 + case_table5_rt:
+        name = case['name'] + '_round_trip'
+        expected = case['expected']
+        format = case in case_table4 and '4' or '5'
+        exec 'check_%s = _make_rt_check_case(name, expected, format)' \
+             % name
+
+
+if __name__ == "__main__":
+    NumpyTest().run()

Deleted: trunk/scipy/io/tests/test_mio.py
===================================================================
--- trunk/scipy/io/tests/test_mio.py	2008-01-03 19:05:43 UTC (rev 3770)
+++ trunk/scipy/io/tests/test_mio.py	2008-01-03 19:21:53 UTC (rev 3771)
@@ -1,248 +0,0 @@
-#!/usr/bin/env python
-
-import os
-from glob import glob
-from cStringIO import StringIO
-from tempfile import mkstemp
-from numpy.testing import set_package_path, restore_path, NumpyTestCase, NumpyTest
-from numpy.testing import assert_equal, assert_array_almost_equal
-from numpy import arange, array, eye, pi, cos, exp, sin, sqrt, ndarray,  \
-     zeros, reshape, transpose, empty
-import scipy.sparse as SP
-
-set_package_path()
-from io.matlab.mio import loadmat, savemat
-from io.matlab.mio5 import mat_obj, mat_struct
-restore_path()
-
-try:  # Python 2.3 support
-    from sets import Set as set
-except:
-    pass
-
-test_data_path = os.path.join(os.path.dirname(__file__), './data')
-
-class TestMIOArray(NumpyTestCase):
-    def __init__(self, *args, **kwargs):
-        super(TestMIOArray, self).__init__(*args, **kwargs)
-
-    def _check_level(self, label, expected, actual):
-        """ Check one level of a potentially nested object / list """
-        # object array is returned from cell array in mat file
-        typex = type(expected)
-        typac = type(actual)
-        if isinstance(expected, ndarray) and expected.dtype.hasobject:
-            assert typex is typac, "Different types at %s" % label
-            assert len(expected) == len(actual), "Different list lengths at %s" % label
-            for i, ev in enumerate(expected):
-                level_label = "%s, [%d], " % (label, i)
-                self._check_level(level_label, ev, actual[i])
-            return
-        # object, as container for matlab structs and objects
-        elif isinstance(expected, mat_struct) or isinstance(expected, mat_obj):
-            assert isinstance(actual, typex), \
-                   "Different types %s and %s at %s" % (typex, typac, label)
-            ex_fields = dir(expected)
-            ac_fields = dir(actual)
-            for k in ex_fields:
-                if k.startswith('__') and k.endswith('__'):
-                    continue
-                assert k in ac_fields, "Missing property at %s" % label
-                ev = expected.__dict__[k]
-                v = actual.__dict__[k]
-                level_label = "%s, property %s, " % (label, k)
-                self._check_level(level_label, ev, v)
-            return
-        # hoping this is a single value, which might be an array
-        if SP.issparse(expected):
-            assert SP.issparse(actual), "Expected sparse at %s" % label
-            assert_array_almost_equal(actual.todense(),
-                                      expected.todense(),
-                                      err_msg = label,
-                                      decimal = 5)
-        elif isinstance(expected, ndarray):
-            if expected.shape: # allow scalar and 0d array comparisons
-                assert isinstance(actual, ndarray), "Expected ndarray at %s" % label
-            assert_array_almost_equal(actual, expected, err_msg=label, decimal=5)
-        else:
-            assert isinstance(expected, typac), \
-                   "Types %s and %s do not match at %s" % (typex, typac, label)
-            assert_equal(actual, expected, err_msg=label)
-
-    def _check_case(self, name, files, case):
-        for file_name in files:
-            matdict = loadmat(file_name)
-            label = "test %s; file %s" % (name, file_name)
-            for k, expected in case.items():
-                k_label = "%s, variable %s" % (label, k)
-                assert k in matdict, "Missing key at %s" % k_label
-                self._check_level(k_label, expected, matdict[k])
-
-    # Add the load tests dynamically, with given parameters
-    def _make_check_case(name, files, expected):
-        def cc(self):
-            self._check_case(name, files, expected)
-        cc.__doc__ = "check loadmat case %s" % name
-        return cc
-
-    # Add the round trip tests dynamically, with given parameters
-    def _make_rt_check_case(name, expected, format):
-        def cc(self):
-            mat_stream = StringIO()
-            savemat(mat_stream, expected, format=format)
-            mat_stream.seek(0)
-            self._check_case(name, [mat_stream], expected)
-        cc.__doc__ = "check loadmat case %s" % name
-        return cc
-
-    # Define cases to test
-    theta = pi/4*arange(9,dtype=float)
-    case_table4 = [
-        {'name': 'double',
-         'expected': {'testdouble': theta}
-         }]
-    case_table4.append(
-        {'name': 'string',
-         'expected': {'teststring': u'"Do nine men interpret?" "Nine men," I nod.'},
-         })
-    case_table4.append(
-        {'name': 'complex',
-         'expected': {'testcomplex': cos(theta) + 1j*sin(theta)}
-         })
-    A = zeros((3,5))
-    A[0] = range(1,6)
-    A[:,0] = range(1,4)
-    case_table4.append(
-        {'name': 'matrix',
-         'expected': {'testmatrix': A},
-         })
-    case_table4.append(
-        {'name': 'sparse',
-         'expected': {'testsparse': SP.csc_matrix(A)},
-         })
-    B = A.astype(complex)
-    B[0,0] += 1j
-    case_table4.append(
-        {'name': 'sparsecomplex',
-         'expected': {'testsparsecomplex': SP.csc_matrix(B)},
-         })
-    case_table4.append(
-        {'name': 'multi',
-         'expected': {'theta': theta,
-                      'a': A},
-         })
-    case_table4.append(
-        {'name': 'minus',
-         'expected': {'testminus': array(-1)},
-         })
-    case_table4.append(
-        {'name': 'onechar',
-         'expected': {'testonechar': u'r'},
-         })
-    case_table5 = [
-        {'name': 'cell',
-         'expected': {'testcell':
-                      array([u'This cell contains this string and 3 arrays of '+\
-                             'increasing length',
-                             array(1), array([1,2]), array([1,2,3])],
-                            dtype=object)}
-         }]
-    case_table5.append(
-        {'name': 'emptycell',
-         'expected': {'testemptycell':
-                      array([array(1), array(2), array([]),
-                             array([]), array(3)], dtype=object)}
-         })
-    case_table5.append(
-        {'name': 'stringarray',
-         'expected': {'teststringarray': array(
-        [u'one  ', u'two  ', u'three'], dtype=object)},
-         })
-    case_table5.append(
-        {'name': '3dmatrix',
-         'expected': {'test3dmatrix': transpose(reshape(range(1,25), (4,3,2)))}
-         })
-    case_table5_rt = [
-        {'name': '3dmatrix',
-         'expected': {'test3dmatrix': transpose(reshape(range(1,25), (4,3,2)))}
-         },
-        {'name': 'sparsefloat',
-         'expected': {'testsparsefloat': SP.csc_matrix(array([[1,0,2],[0,-3.5,0]]))},
-         },
-        {'name': 'sparsecomplex',
-         'expected': {'testsparsefloat': SP.csc_matrix(array([[-1+2j,0,2],[0,-3j,0]]))},
-         },
-        ]
-    st = mat_struct()
-    st.stringfield = u'Rats live on no evil star.'
-    st.doublefield = array([sqrt(2),exp(1),pi])
-    st.complexfield = (1+1j)*array([sqrt(2),exp(1),pi])
-    case_table5.append(
-        {'name': 'struct',
-         'expected': {'teststruct': st}
-         })
-    a = array([array(1),
-               array([array(2), array(3),
-                      array([array(4), array(5)],
-                            dtype=object)],
-                     dtype=object)],
-              dtype=object)
-    case_table5.append(
-        {'name': 'cellnest',
-         'expected': {'testcellnest': a},
-         })
-    st = mat_struct()
-    st.one = array(1)
-    st.two = mat_struct()
-    st.two.three = u'number 3'
-    case_table5.append(
-        {'name': 'structnest',
-         'expected': {'teststructnest': st}
-         })
-    a = array([mat_struct(), mat_struct()])
-    a[0].one = array(1)
-    a[0].two = array(2)
-    a[1].one = u'number 1'
-    a[1].two = u'number 2'
-    case_table5.append(
-        {'name': 'structarr',
-         'expected': {'teststructarr': a}
-         })
-    a = mat_obj()
-    a._classname = 'inline'
-    a.expr = u'x'
-    a.inputExpr = u' x = INLINE_INPUTS_{1};'
-    a.args = u'x'
-    a.isEmpty = array(0)
-    a.numArgs = array(1)
-    a.version = array(1)
-    case_table5.append(
-        {'name': 'object',
-         'expected': {'testobject': a}
-         })
-    u_str = file(
-        os.path.join(test_data_path, 'japanese_utf8.txt'),
-        'rb').read().decode('utf-8')
-    case_table5.append(
-        {'name': 'unicode',
-        'expected': {'testunicode': u_str}
-        })
-    # add load tests
-    for case in case_table4 + case_table5:
-        name = case['name']
-        expected = case['expected']
-        filt = os.path.join(test_data_path, 'test%s_*.mat' % name)
-        files = glob(filt)
-        assert files, "No files for test %s using filter %s" % (name, filt)
-        exec 'check_%s = _make_check_case(name, files, expected)' % name
-    # round trip tests
-    for case in case_table4 + case_table5_rt:
-        name = case['name'] + '_round_trip'
-        expected = case['expected']
-        format = case in case_table4 and '4' or '5'
-        exec 'check_%s = _make_rt_check_case(name, expected, format)' \
-             % name
-
-
-if __name__ == "__main__":
-    NumpyTest().run()




More information about the Scipy-svn mailing list