1
2
3
4
5
6
7
8
9 """Unit tests for PyMVPA IO helpers"""
10
11 import os
12 import unittest
13 from tempfile import mkstemp
14 import numpy as N
15
16 from mvpa import pymvpa_dataroot
17 from mvpa.misc.io import *
18 from mvpa.misc.fsl import FslEV3
19 from mvpa.misc.bv import BrainVoyagerRTC
20
21
23
25 ex1 = """eins zwei drei
26 0 1 2
27 3 4 5
28 """
29 file, fpath = mkstemp('mvpa', 'test')
30 file = open(fpath, 'w')
31 file.write(ex1)
32 file.close()
33
34
35 d = ColumnData(fpath, header=True)
36
37
38 self.failUnless(sorted(d.keys()) == ['drei','eins','zwei'])
39
40 self.failUnless(d['eins'] == [0, 3])
41 self.failUnless(d['zwei'] == [1, 4])
42 self.failUnless(d['drei'] == [2, 5])
43
44
45 d2 = ColumnData(d)
46
47
48 self.failUnless(sorted(d2.keys()) == ['drei','eins','zwei'])
49 self.failUnless(d2['eins'] == [0, 3])
50 self.failUnless(d2['zwei'] == [1, 4])
51 self.failUnless(d2['drei'] == [2, 5])
52
53
54 d += d2
55
56
57 self.failUnless(sorted(d.keys()) == ['drei','eins','zwei'])
58
59
60 self.failUnlessEqual(d['eins'], [0, 3, 0, 3])
61 self.failUnlessEqual(d['zwei'], [1, 4, 1, 4])
62 self.failUnlessEqual(d['drei'], [2, 5, 2, 5])
63
64
65
66 header_order = ['drei', 'zwei', 'eins']
67 d.tofile(fpath, header_order=header_order)
68
69
70 dsel = d.selectSamples([0, 2])
71 self.failUnlessEqual(dsel['eins'], [0, 0])
72 self.failUnlessEqual(dsel['zwei'], [1, 1])
73 self.failUnlessEqual(dsel['drei'], [2, 2])
74
75
76 d3 = ColumnData(fpath)
77 self.failUnlessEqual(d3._header_order, header_order)
78
79
80
81 d3['four'] = [0.1] * len(d3['eins'])
82 d3.tofile(fpath)
83
84 d4 = ColumnData(fpath)
85 self.failUnlessEqual(d4._header_order, header_order + ['four'])
86
87
88 try:
89 os.remove(fpath)
90 except WindowsError:
91 pass
92
93
95 ex1 = """0.0 2.0 1
96 13.89 2 1
97 16 2.0 0.5
98 """
99 file, fpath = mkstemp('mvpa', 'test')
100 file = open(fpath, 'w')
101 file.write(ex1)
102 file.close()
103
104
105 d = FslEV3(fpath)
106
107
108 self.failUnless(sorted(d.keys()) == \
109 ['durations','intensities','onsets'])
110
111 self.failUnless(d['onsets'] == [0.0, 13.89, 16.0])
112 self.failUnless(d['durations'] == [2.0, 2.0, 2.0])
113 self.failUnless(d['intensities'] == [1.0, 1.0, 0.5])
114
115 self.failUnless(d.getNEVs() == 3)
116 self.failUnless(d.getEV(1) == (13.89, 2.0, 1.0))
117
118 try:
119 os.remove(fpath)
120 except WindowsError:
121 pass
122
123 d = FslEV3(os.path.join(pymvpa_dataroot, 'fslev3.txt'))
124 ev = d.toEvents()
125 self.failUnless(len(ev) == 3)
126 self.failUnless([e['duration'] for e in ev] == [9] * 3)
127 self.failUnless([e['onset'] for e in ev] == [6, 21, 35])
128 self.failUnless([e['features'] for e in ev] == [[1],[1],[1]])
129
130 ev = d.toEvents(label='face', chunk=0, crap=True)
131 ev[0]['label'] = 'house'
132 self.failUnless(len(ev) == 3)
133 self.failUnless([e['duration'] for e in ev] == [9] * 3)
134 self.failUnless([e['onset'] for e in ev] == [6, 21, 35])
135 self.failUnless([e['features'] for e in ev] == [[1],[1],[1]])
136 self.failUnless([e['label'] for e in ev] == ['house', 'face', 'face'])
137 self.failUnless([e['chunk'] for e in ev] == [0]*3)
138 self.failUnless([e['crap'] for e in ev] == [True]*3)
139
140
149
151 """Simple testing of reading RTC files from BrainVoyager"""
152
153 attr = BrainVoyagerRTC(os.path.join(pymvpa_dataroot, 'bv', 'smpl_model.rtc'))
154 self.failUnlessEqual(attr.ncolumns, 4, "We must have 4 colums")
155 self.failUnlessEqual(attr.nrows, 147, "We must have 147 rows")
156
157 self.failUnlessEqual(attr._header_order,
158 ['l_60 B', 'r_60 B', 'l_80 B', 'r_80 B'],
159 "We must got column names correctly")
160 self.failUnless(len(attr.r_60_B) == attr.nrows,
161 "We must have got access to column by property")
162 self.failUnless(attr.toarray() != None,
163 "We must have got access to column by property")
164
166 """Simple testing of helper Design2Labels"""
167
168 attr = BrainVoyagerRTC(os.path.join(pymvpa_dataroot, 'bv', 'smpl_model.rtc'))
169 labels0 = design2labels(attr, baseline_label='silence')
170 labels = design2labels(attr, baseline_label='silence',
171 func=lambda x:x>0.5)
172 Nsilence = lambda x:len(N.where(N.array(x) == 'silence')[0])
173
174 nsilence0 = Nsilence(labels0)
175 nsilence = Nsilence(labels)
176 self.failUnless(nsilence0 < nsilence,
177 "We must have more silence if thr is higher")
178 self.failUnlessEqual(len(labels), attr.nrows,
179 "We must have the same number of labels as rows")
180 self.failUnlessRaises(ValueError, design2labels, attr,
181 baseline_label='silence', func=lambda x:x>-1.0)
182
183
195
196
202
203
204
207
208
209 if __name__ == '__main__':
210 import runner
211