1
2
3
4
5
6
7
8
9 """Unit tests for PyMVPA metrics"""
10
11
12 from mvpa.mappers.metric import *
13 from mvpa.clfs.distance import *
14 import unittest
15 import numpy as N
16
18
26
27
29
30
31 elsize = [-2.5, 1.5]
32 distance = 3
33
34
35 metric = DescreteMetric(elsize)
36
37
38 target = N.array([ [1,2], [2,1], [2,2], [2,3], [3,2] ])
39 self.failUnless( (metric.getNeighbors([2,2], 2.6) == target).all())
40
41
42 for point in metric.getNeighbor([2,2], distance):
43 self.failUnless( cartesianDistance(point, [2,2]) <= distance)
44
45
46 metric = DescreteMetric(elsize, manhattenDistance)
47 for point in metric.getNeighbor([2,2], distance):
48 self.failUnless( manhattenDistance(point, [2,2]) <= distance)
49
50 metric.elementsize = [10, 1.5]
51 """We can reassign element size as a whole"""
52 self.failUnless((metric.elementsize == [10, 1.5]).all())
53
54 try:
55 metric.elementsize[1] = 1
56 self.fail(msg="We should not be able to reassign parts of elementsize")
57 except RuntimeError:
58 pass
59
60 self.failUnless((metric.getNeighbors([2,2], 2.6) ==
61 [t for t in target if t[0]==2]).all())
62 """Check if new elementsize is in effect for getNeighbors"""
63
64
66
67
68 esize = [2, 3.3, 3, 3]
69
70
71 metric = DescreteMetric(esize, compatmask=[0,1,1,1])
72
73
74
75
76 self.failUnless((metric.getNeighbors([0,0,0,0], 1) ==
77 [[-1, 0, 0, 0], [0, 0, 0, 0], [1, 0, 0, 0]]).all())
78
79
80 self.failUnless((metric.getNeighbors([0,0,0,0], [0,4,4,4]) ==
81 [[0,-1,0,0],[0,0,-1,0],[0,0,0,-1],[0,0,0,0],
82 [0,0,0,1],[0,0,1,0],[0,1,0,0]]).all())
83
84
85 self.failUnless((metric.getNeighbors([0,0,0,0], [2,0,0,0]) ==
86 [[-1,0,0,0],[0,0,0,0],[1,0,0,0]]).all())
87
88
89 self.failUnless(len(metric.getNeighbors([0,0,0,0], [7.9,0,0,0])) == 9)
90
91
93 """Test if generator getNeighbor and method getNeighbors
94 return the right thing"""
95
96 class B(Metric):
97 """ Class which overrides only getNeighbor
98 """
99 def getNeighbor(self):
100 for n in [4,5,6]: yield n
101
102 class C(Metric):
103 """ Class which overrides only getNeighbor
104 """
105 def getNeighbors(self):
106 return [1,2,3]
107
108 b = B()
109 self.failUnless(b.getNeighbors() == [4,5,6])
110 c = C()
111 self.failUnless([ x for x in c.getNeighbor()] == [1,2,3])
112
113
116
117
118 if __name__ == '__main__':
119 import runner
120