""" Test functions for matrix module
"""
from numpy.testing import *
set_package_path()
from numpy import arange,rot90,add,fliplr,flipud,zeros,ones,eye,\
array, diag, histogram2d, tri
import numpy as np
restore_path()
##################################################
def get_mat(n):
data = arange(n)
data = add.outer(data,data)
return data
class TestEye(NumpyTestCase):
def check_basic(self):
assert_equal(eye(4),array([[1,0,0,0],
[0,1,0,0],
[0,0,1,0],
[0,0,0,1]]))
assert_equal(eye(4,dtype='f'),array([[1,0,0,0],
[0,1,0,0],
[0,0,1,0],
[0,0,0,1]],'f'))
assert_equal(eye(3) == 1, eye(3,dtype=bool))
def check_diag(self):
assert_equal(eye(4,k=1),array([[0,1,0,0],
[0,0,1,0],
[0,0,0,1],
[0,0,0,0]]))
assert_equal(eye(4,k=-1),array([[0,0,0,0],
[1,0,0,0],
[0,1,0,0],
[0,0,1,0]]))
def check_2d(self):
assert_equal(eye(4,3),array([[1,0,0],
[0,1,0],
[0,0,1],
[0,0,0]]))
assert_equal(eye(3,4),array([[1,0,0,0],
[0,1,0,0],
[0,0,1,0]]))
def check_diag2d(self):
assert_equal(eye(3,4,k=2),array([[0,0,1,0],
[0,0,0,1],
[0,0,0,0]]))
assert_equal(eye(4,3,k=-2),array([[0,0,0],
[0,0,0],
[1,0,0],
[0,1,0]]))
class TestDiag(NumpyTestCase):
def check_vector(self):
vals = (100*arange(5)).astype('l')
b = zeros((5,5))
for k in range(5):
b[k,k] = vals[k]
assert_equal(diag(vals),b)
b = zeros((7,7))
c = b.copy()
for k in range(5):
b[k,k+2] = vals[k]
c[k+2,k] = vals[k]
assert_equal(diag(vals,k=2), b)
assert_equal(diag(vals,k=-2), c)
def check_matrix(self):
vals = (100*get_mat(5)+1).astype('l')
b = zeros((5,))
for k in range(5):
b[k] = vals[k,k]
assert_equal(diag(vals),b)
b = b*0
for k in range(3):
b[k] = vals[k,k+2]
assert_equal(diag(vals,2),b[:3])
for k in range(3):
b[k] = vals[k+2,k]
assert_equal(diag(vals,-2),b[:3])
class TestFliplr(NumpyTestCase):
def check_basic(self):
self.failUnlessRaises(ValueError, fliplr, ones(4))
a = get_mat(4)
b = a[:,::-1]
assert_equal(fliplr(a),b)
a = [[0,1,2],
[3,4,5]]
b = [[2,1,0],
[5,4,3]]
assert_equal(fliplr(a),b)
class TestFlipud(NumpyTestCase):
def check_basic(self):
a = get_mat(4)
b = a[::-1,:]
assert_equal(flipud(a),b)
a = [[0,1,2],
[3,4,5]]
b = [[3,4,5],
[0,1,2]]
assert_equal(flipud(a),b)
class TestRot90(NumpyTestCase):
def check_basic(self):
self.failUnlessRaises(ValueError, rot90, ones(4))
a = [[0,1,2],
[3,4,5]]
b1 = [[2,5],
[1,4],
[0,3]]
b2 = [[5,4,3],
[2,1,0]]
b3 = [[3,0],
[4,1],
[5,2]]
b4 = [[0,1,2],
[3,4,5]]
for k in range(-3,13,4):
assert_equal(rot90(a,k=k),b1)
for k in range(-2,13,4):
assert_equal(rot90(a,k=k),b2)
for k in range(-1,13,4):
assert_equal(rot90(a,k=k),b3)
for k in range(0,13,4):
assert_equal(rot90(a,k=k),b4)
def check_axes(self):
a = ones((50,40,3))
assert_equal(rot90(a).shape,(40,50,3))
class TestHistogram2d(NumpyTestCase):
def check_simple(self):
x = array([ 0.41702200, 0.72032449, 0.00011437481, 0.302332573, 0.146755891])
y = array([ 0.09233859, 0.18626021, 0.34556073, 0.39676747, 0.53881673])
xedges = np.linspace(0,1,10)
yedges = np.linspace(0,1,10)
H = histogram2d(x, y, (xedges, yedges))[0]
answer = array([[0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]])
assert_array_equal(H.T, answer)
H = histogram2d(x, y, xedges)[0]
assert_array_equal(H.T, answer)
H,xedges,yedges = histogram2d(range(10),range(10))
assert_array_equal(H, eye(10,10))
assert_array_equal(xedges, np.linspace(0,9,11))
assert_array_equal(yedges, np.linspace(0,9,11))
def check_asym(self):
x = array([1, 1, 2, 3, 4, 4, 4, 5])
y = array([1, 3, 2, 0, 1, 2, 3, 4])
H, xed, yed = histogram2d(x,y, (6, 5), range = [[0,6],[0,5]], normed=True)
answer = array([[0.,0,0,0,0],
[0,1,0,1,0],
[0,0,1,0,0],
[1,0,0,0,0],
[0,1,1,1,0],
[0,0,0,0,1]])
assert_array_almost_equal(H, answer/8., 3)
assert_array_equal(xed, np.linspace(0,6,7))
assert_array_equal(yed, np.linspace(0,5,6))
def check_norm(self):
x = array([1,2,3,1,2,3,1,2,3])
y = array([1,1,1,2,2,2,3,3,3])
H, xed, yed = histogram2d(x,y,[[1,2,3,5], [1,2,3,5]], normed=True)
answer=array([[1,1,.5],
[1,1,.5],
[.5,.5,.25]])/9.
assert_array_almost_equal(H, answer, 3)
def check_all_outliers(self):
r = rand(100)+1.
H, xed, yed = histogram2d(r, r, (4, 5), range=([0,1], [0,1]))
assert_array_equal(H, 0)
class TestTri(NumpyTestCase):
def test_dtype(self):
out = array([[1,0,0],
[1,1,0],
[1,1,1]])
assert_array_equal(tri(3),out)
assert_array_equal(tri(3,dtype=bool),out.astype(bool))
if __name__ == "__main__":
NumpyTest().run()
|