summaryrefslogtreecommitdiff
path: root/doc/swig/test/testSuperTensor.py
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2013-07-29 18:26:55 -0600
committerCharles Harris <charlesr.harris@gmail.com>2013-07-29 18:26:55 -0600
commitb307a8a5729e5e18fa8a7ff56892947fc2d2eb79 (patch)
treecf1bb60e0b31b8a1b01b93af112056473503341b /doc/swig/test/testSuperTensor.py
parent32206dd79cafdce87cfb0db91903084c2fe2e473 (diff)
parentf70632f74f7b0feb9d78aff62eb9eebbb6a502ba (diff)
downloadnumpy-b307a8a5729e5e18fa8a7ff56892947fc2d2eb79.tar.gz
Merge branch 'numpy-swig' into gh-3451
* numpy-swig: Added more mentions of the SuperTensor tests and corrected the number of typemaps and tests (currently 1427 unit tests passed with 'make test': 372+324+324+324+40+19+24) Added mention of the SuperTensor tests in the README file Removed 'static' keyword from pyfragments.swg altoghether. I've had the following errors In function ‘SWIG_AsVal_long’: error: initialiser element is not constant In function ‘SWIG_AsVal_unsigned_SS_long’: error: initialiser element is not constant, BOTH in Windows/MinGW and Linux when compiling with gcc Added tests for 4D tensors. Now using a consistant cubes,slices,rows,columns index order everywhere. cleaned-up loop indexes in Tensor.cxx cosmetic changes to numpy.i Fixed the capsule / cobject memory destructor. Added types to deal with lists of arrays and lists of tensors as input and inplace types. removed the note about testResize1 failing in testArray.py fixed the testResize1 test in testArray.py -- Changed order of the resize arguments in Array2.h and replaced len(XXXnumpyarray) with XXXnumpyarray.size Minor adjustments to numpy.i Updated numpy.i testing documentation Updated the numpy.i documentation Initialize all DATA_TYPE* data_temp variables to NULL Added Egor's ARGOUTVIEWM_ARRAY3 typemaps Re-instated a Python 3 fix Removed doc from list of sub-directories Upgrade numpy.i Got rid of a unit test Conflicts: doc/sphinxext doc/swig/test/testFortran.py
Diffstat (limited to 'doc/swig/test/testSuperTensor.py')
-rw-r--r--doc/swig/test/testSuperTensor.py388
1 files changed, 388 insertions, 0 deletions
diff --git a/doc/swig/test/testSuperTensor.py b/doc/swig/test/testSuperTensor.py
new file mode 100644
index 000000000..f4ae09e76
--- /dev/null
+++ b/doc/swig/test/testSuperTensor.py
@@ -0,0 +1,388 @@
+#! /usr/bin/env python
+from __future__ import division
+
+# System imports
+from distutils.util import get_platform
+from math import sqrt
+import os
+import sys
+import unittest
+
+# Import NumPy
+import numpy as np
+major, minor = [ int(d) for d in np.__version__.split(".")[:2] ]
+if major == 0: BadListError = TypeError
+else: BadListError = ValueError
+
+import SuperTensor
+
+######################################################################
+
+class SuperTensorTestCase(unittest.TestCase):
+
+ def __init__(self, methodName="runTests"):
+ unittest.TestCase.__init__(self, methodName)
+ self.typeStr = "double"
+ self.typeCode = "d"
+
+ # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
+ def testNorm(self):
+ "Test norm function"
+ print >>sys.stderr, self.typeStr, "... ",
+ norm = SuperTensor.__dict__[self.typeStr + "Norm"]
+ supertensor = np.arange(2*2*2*2,dtype=self.typeCode).reshape((2,2,2,2))
+ #Note: cludge to get an answer of the same type as supertensor.
+ #Answer is simply sqrt(sum(supertensor*supertensor)/16)
+ answer = np.array([np.sqrt(np.sum(supertensor.astype('d')*supertensor)/16.)],dtype=self.typeCode)[0]
+ self.assertAlmostEqual(norm(supertensor), answer, 6)
+
+ # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
+ def testNormBadList(self):
+ "Test norm function with bad list"
+ print >>sys.stderr, self.typeStr, "... ",
+ norm = SuperTensor.__dict__[self.typeStr + "Norm"]
+ supertensor = [[[[0,"one"],[2,3]], [[3,"two"],[1,0]]],[[[0,"one"],[2,3]], [[3,"two"],[1,0]]]]
+ self.assertRaises(BadListError, norm, supertensor)
+
+ # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
+ def testNormWrongDim(self):
+ "Test norm function with wrong dimensions"
+ print >>sys.stderr, self.typeStr, "... ",
+ norm = SuperTensor.__dict__[self.typeStr + "Norm"]
+ supertensor = np.arange(2*2*2,dtype=self.typeCode).reshape((2,2,2))
+ self.assertRaises(TypeError, norm, supertensor)
+
+ # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
+ def testNormWrongSize(self):
+ "Test norm function with wrong size"
+ print >>sys.stderr, self.typeStr, "... ",
+ norm = SuperTensor.__dict__[self.typeStr + "Norm"]
+ supertensor = np.arange(3*2*2,dtype=self.typeCode).reshape((3,2,2))
+ self.assertRaises(TypeError, norm, supertensor)
+
+ # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
+ def testNormNonContainer(self):
+ "Test norm function with non-container"
+ print >>sys.stderr, self.typeStr, "... ",
+ norm = SuperTensor.__dict__[self.typeStr + "Norm"]
+ self.assertRaises(TypeError, norm, None)
+
+ # Test (type* IN_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
+ def testMax(self):
+ "Test max function"
+ print >>sys.stderr, self.typeStr, "... ",
+ max = SuperTensor.__dict__[self.typeStr + "Max"]
+ supertensor = [[[[1,2], [3,4]], [[5,6], [7,8]]],[[[1,2], [3,4]], [[5,6], [7,8]]]]
+ self.assertEquals(max(supertensor), 8)
+
+ # Test (type* IN_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
+ def testMaxBadList(self):
+ "Test max function with bad list"
+ print >>sys.stderr, self.typeStr, "... ",
+ max = SuperTensor.__dict__[self.typeStr + "Max"]
+ supertensor = [[[[1,"two"], [3,4]], [[5,"six"], [7,8]]],[[[1,"two"], [3,4]], [[5,"six"], [7,8]]]]
+ self.assertRaises(BadListError, max, supertensor)
+
+ # Test (type* IN_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
+ def testMaxNonContainer(self):
+ "Test max function with non-container"
+ print >>sys.stderr, self.typeStr, "... ",
+ max = SuperTensor.__dict__[self.typeStr + "Max"]
+ self.assertRaises(TypeError, max, None)
+
+ # Test (type* IN_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
+ def testMaxWrongDim(self):
+ "Test max function with wrong dimensions"
+ print >>sys.stderr, self.typeStr, "... ",
+ max = SuperTensor.__dict__[self.typeStr + "Max"]
+ self.assertRaises(TypeError, max, [0, -1, 2, -3])
+
+ # Test (int DIM1, int DIM2, int DIM3, type* IN_ARRAY3) typemap
+ def testMin(self):
+ "Test min function"
+ print >>sys.stderr, self.typeStr, "... ",
+ min = SuperTensor.__dict__[self.typeStr + "Min"]
+ supertensor = [[[[9,8], [7,6]], [[5,4], [3,2]]],[[[9,8], [7,6]], [[5,4], [3,2]]]]
+ self.assertEquals(min(supertensor), 2)
+
+ # Test (int DIM1, int DIM2, int DIM3, type* IN_ARRAY3) typemap
+ def testMinBadList(self):
+ "Test min function with bad list"
+ print >>sys.stderr, self.typeStr, "... ",
+ min = SuperTensor.__dict__[self.typeStr + "Min"]
+ supertensor = [[[["nine",8], [7,6]], [["five",4], [3,2]]],[[["nine",8], [7,6]], [["five",4], [3,2]]]]
+ self.assertRaises(BadListError, min, supertensor)
+
+ # Test (int DIM1, int DIM2, int DIM3, type* IN_ARRAY3) typemap
+ def testMinNonContainer(self):
+ "Test min function with non-container"
+ print >>sys.stderr, self.typeStr, "... ",
+ min = SuperTensor.__dict__[self.typeStr + "Min"]
+ self.assertRaises(TypeError, min, True)
+
+ # Test (int DIM1, int DIM2, int DIM3, type* IN_ARRAY3) typemap
+ def testMinWrongDim(self):
+ "Test min function with wrong dimensions"
+ print >>sys.stderr, self.typeStr, "... ",
+ min = SuperTensor.__dict__[self.typeStr + "Min"]
+ self.assertRaises(TypeError, min, [[1,3],[5,7]])
+
+ # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
+ def testScale(self):
+ "Test scale function"
+ print >>sys.stderr, self.typeStr, "... ",
+ scale = SuperTensor.__dict__[self.typeStr + "Scale"]
+ supertensor = np.arange(3*3*3*3,dtype=self.typeCode).reshape((3,3,3,3))
+ answer = supertensor.copy()*4
+ scale(supertensor,4)
+ self.assertEquals((supertensor == answer).all(), True)
+
+ # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
+ def testScaleWrongType(self):
+ "Test scale function with wrong type"
+ print >>sys.stderr, self.typeStr, "... ",
+ scale = SuperTensor.__dict__[self.typeStr + "Scale"]
+ supertensor = np.array([[[1,0,1], [0,1,0], [1,0,1]],
+ [[0,1,0], [1,0,1], [0,1,0]],
+ [[1,0,1], [0,1,0], [1,0,1]]],'c')
+ self.assertRaises(TypeError, scale, supertensor)
+
+ # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
+ def testScaleWrongDim(self):
+ "Test scale function with wrong dimensions"
+ print >>sys.stderr, self.typeStr, "... ",
+ scale = SuperTensor.__dict__[self.typeStr + "Scale"]
+ supertensor = np.array([[1,0,1], [0,1,0], [1,0,1],
+ [0,1,0], [1,0,1], [0,1,0]],self.typeCode)
+ self.assertRaises(TypeError, scale, supertensor)
+
+ # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
+ def testScaleWrongSize(self):
+ "Test scale function with wrong size"
+ print >>sys.stderr, self.typeStr, "... ",
+ scale = SuperTensor.__dict__[self.typeStr + "Scale"]
+ supertensor = np.array([[[1,0], [0,1], [1,0]],
+ [[0,1], [1,0], [0,1]],
+ [[1,0], [0,1], [1,0]]],self.typeCode)
+ self.assertRaises(TypeError, scale, supertensor)
+
+ # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
+ def testScaleNonArray(self):
+ "Test scale function with non-array"
+ print >>sys.stderr, self.typeStr, "... ",
+ scale = SuperTensor.__dict__[self.typeStr + "Scale"]
+ self.assertRaises(TypeError, scale, True)
+
+ # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
+ def testFloor(self):
+ "Test floor function"
+ print >>sys.stderr, self.typeStr, "... ",
+ supertensor = np.arange(2*2*2*2,dtype=self.typeCode).reshape((2,2,2,2))
+ answer = supertensor.copy()
+ answer[answer < 4] = 4
+
+ floor = SuperTensor.__dict__[self.typeStr + "Floor"]
+ floor(supertensor,4)
+ np.testing.assert_array_equal(supertensor, answer)
+
+ # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
+ def testFloorWrongType(self):
+ "Test floor function with wrong type"
+ print >>sys.stderr, self.typeStr, "... ",
+ floor = SuperTensor.__dict__[self.typeStr + "Floor"]
+ supertensor = np.ones(2*2*2*2,dtype='c').reshape((2,2,2,2))
+ self.assertRaises(TypeError, floor, supertensor)
+
+ # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
+ def testFloorWrongDim(self):
+ "Test floor function with wrong type"
+ print >>sys.stderr, self.typeStr, "... ",
+ floor = SuperTensor.__dict__[self.typeStr + "Floor"]
+ supertensor = np.arange(2*2*2,dtype=self.typeCode).reshape((2,2,2))
+ self.assertRaises(TypeError, floor, supertensor)
+
+ # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
+ def testFloorNonArray(self):
+ "Test floor function with non-array"
+ print >>sys.stderr, self.typeStr, "... ",
+ floor = SuperTensor.__dict__[self.typeStr + "Floor"]
+ self.assertRaises(TypeError, floor, object)
+
+ # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
+ def testCeil(self):
+ "Test ceil function"
+ print >>sys.stderr, self.typeStr, "... ",
+ supertensor = np.arange(2*2*2*2,dtype=self.typeCode).reshape((2,2,2,2))
+ answer = supertensor.copy()
+ answer[answer > 5] = 5
+ ceil = SuperTensor.__dict__[self.typeStr + "Ceil"]
+ ceil(supertensor,5)
+ np.testing.assert_array_equal(supertensor, answer)
+
+ # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
+ def testCeilWrongType(self):
+ "Test ceil function with wrong type"
+ print >>sys.stderr, self.typeStr, "... ",
+ ceil = SuperTensor.__dict__[self.typeStr + "Ceil"]
+ supertensor = np.ones(2*2*2*2,'c').reshape((2,2,2,2))
+ self.assertRaises(TypeError, ceil, supertensor)
+
+ # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
+ def testCeilWrongDim(self):
+ "Test ceil function with wrong dimensions"
+ print >>sys.stderr, self.typeStr, "... ",
+ ceil = SuperTensor.__dict__[self.typeStr + "Ceil"]
+ supertensor = np.arange(2*2*2,dtype=self.typeCode).reshape((2,2,2))
+ self.assertRaises(TypeError, ceil, supertensor)
+
+ # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
+ def testCeilNonArray(self):
+ "Test ceil function with non-array"
+ print >>sys.stderr, self.typeStr, "... ",
+ ceil = SuperTensor.__dict__[self.typeStr + "Ceil"]
+ supertensor = np.arange(2*2*2*2,dtype=self.typeCode).reshape((2,2,2,2)).tolist()
+ self.assertRaises(TypeError, ceil, supertensor)
+
+ # Test (type ARGOUT_ARRAY3[ANY][ANY][ANY]) typemap
+ def testLUSplit(self):
+ "Test luSplit function"
+ print >>sys.stderr, self.typeStr, "... ",
+ luSplit = SuperTensor.__dict__[self.typeStr + "LUSplit"]
+ supertensor = np.ones(2*2*2*2,dtype=self.typeCode).reshape((2,2,2,2))
+ answer_upper = [[[[0, 0], [0, 1]], [[0, 1], [1, 1]]], [[[0, 1], [1, 1]], [[1, 1], [1, 1]]]]
+ answer_lower = [[[[1, 1], [1, 0]], [[1, 0], [0, 0]]], [[[1, 0], [0, 0]], [[0, 0], [0, 0]]]]
+ lower, upper = luSplit(supertensor)
+ self.assertEquals((lower == answer_lower).all(), True)
+ self.assertEquals((upper == answer_upper).all(), True)
+
+######################################################################
+
+class scharTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "schar"
+ self.typeCode = "b"
+ #self.result = int(self.result)
+
+######################################################################
+
+class ucharTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "uchar"
+ self.typeCode = "B"
+ #self.result = int(self.result)
+
+######################################################################
+
+class shortTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "short"
+ self.typeCode = "h"
+ #self.result = int(self.result)
+
+######################################################################
+
+class ushortTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "ushort"
+ self.typeCode = "H"
+ #self.result = int(self.result)
+
+######################################################################
+
+class intTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "int"
+ self.typeCode = "i"
+ #self.result = int(self.result)
+
+######################################################################
+
+class uintTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "uint"
+ self.typeCode = "I"
+ #self.result = int(self.result)
+
+######################################################################
+
+class longTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "long"
+ self.typeCode = "l"
+ #self.result = int(self.result)
+
+######################################################################
+
+class ulongTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "ulong"
+ self.typeCode = "L"
+ #self.result = int(self.result)
+
+######################################################################
+
+class longLongTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "longLong"
+ self.typeCode = "q"
+ #self.result = int(self.result)
+
+######################################################################
+
+class ulongLongTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "ulongLong"
+ self.typeCode = "Q"
+ #self.result = int(self.result)
+
+######################################################################
+
+class floatTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "float"
+ self.typeCode = "f"
+
+######################################################################
+
+class doubleTestCase(SuperTensorTestCase):
+ def __init__(self, methodName="runTest"):
+ SuperTensorTestCase.__init__(self, methodName)
+ self.typeStr = "double"
+ self.typeCode = "d"
+
+######################################################################
+
+if __name__ == "__main__":
+
+ # Build the test suite
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite( scharTestCase))
+ suite.addTest(unittest.makeSuite( ucharTestCase))
+ suite.addTest(unittest.makeSuite( shortTestCase))
+ suite.addTest(unittest.makeSuite( ushortTestCase))
+ suite.addTest(unittest.makeSuite( intTestCase))
+ suite.addTest(unittest.makeSuite( uintTestCase))
+ suite.addTest(unittest.makeSuite( longTestCase))
+ suite.addTest(unittest.makeSuite( ulongTestCase))
+ suite.addTest(unittest.makeSuite( longLongTestCase))
+ suite.addTest(unittest.makeSuite(ulongLongTestCase))
+ suite.addTest(unittest.makeSuite( floatTestCase))
+ suite.addTest(unittest.makeSuite( doubleTestCase))
+
+ # Execute the test suite
+ print "Testing 4D Functions of Module SuperTensor"
+ print "NumPy version", np.__version__
+ print
+ result = unittest.TextTestRunner(verbosity=2).run(suite)
+ sys.exit(len(result.errors) + len(result.failures))