FifTests.setupEvokedsFile()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
c 2
b 0
f 0
dl 0
loc 6
rs 9.4285
1
from datetime import datetime
2
3
import numpy
4
from mock import Mock
5
from tests.test_basefile import BaseFileTests
6
7
8
class FifTests(BaseFileTests):
9
    def setUp(self):
10
        super(FifTests, self).setUp()
11
        self.libs = Mock()
12
        self.libs.hasDependency.return_value = True
13
        self.libs.mne.io.read_raw_fif.side_effect = ValueError
14
        self.libs.mne.read_cov.side_effect = ValueError
15
        self.libs.mne.read_epochs.side_effect = ValueError
16
        self.libs.mne.read_evokeds.side_effect = ValueError
17
        self.libs.mne.read_forward_solution.side_effect = ValueError
18
        self.libs.mne.read_trans.side_effect = ValueError
19
        self.libs.mne.read_proj.side_effect = ValueError
20
        self.dependencies.getLibraries.return_value = self.libs
21
        from niprov.fif import FifFile
22
        self.constructor = FifFile
23
        self.file = FifFile(self.path, dependencies=self.dependencies)
24
25
    def test_Gets_basic_info_from_mne_and_returns_it(self):
26
        self.setupRawFile()
27
        out = self.file.inspect()
28
        self.assertEqual(out['subject'], 'John Doeish')
29
        self.assertEqual(out['project'], 'worlddom')
30
        self.assertEqual(out['acquired'], self.acquired)
31
32
    def test_Gets_dimensions(self):
33
        self.setupRawFile()
34
        out = self.file.inspect()
35
        self.assertEqual(out['dimensions'], [123, 91])
36
        self.assertEqual(out['sampling-frequency'], 200)
37
        self.assertEqual(out['duration'], 91 / 200.)
38
39
    def test_Attach_method(self):
40
        self.setupRawFile()
41
        self.file.inspect()
42
        self.file.getProvenance = Mock()
43
        self.file.getProvenance.return_value = 'serial prov'
44
        self.file.attach('json')
45
        self.file.getProvenance.assert_called_with('json')
46
        self.assertIn('existing bla bla ',  # original string+added space
47
                      self.img.info['description'])
48
        self.assertIn('NIPROV:' + 'serial prov',
49
                      self.img.info['description'])
50
        self.libs.mne.io.write_info.assert_called_with(self.file.path,
51
                                                       self.img.info)
52
53
    def test_Attach_method_doesnt_do_anything_on_non_raw_files(self):
54
        self.setupEpochsFile()
55
        self.file.getProvenance = Mock()
56
        self.file.attach('json')
57
        assert not self.libs.mne.io.read_info.called
58
        assert not self.file.getProvenance.called
59
        assert not self.libs.mne.io.write_info.called
60
61
    def test_Determines_modality(self):
62
        out = self.file.inspect()
63
        self.assertEqual(out['modality'], 'MEG')
64
65
    def test_Preserves_modality_if_inherited(self):
66
        pass  # Doesn't have to preserve
67
68
    def test_Tries_different_mne_access_functions_or_fails_silently(self):
69
        out = self.file.inspect()
70
        self.libs.mne.io.read_raw_fif.assert_called_with(self.path,
71
                                                         allow_maxshield=True)
72
        self.libs.mne.read_cov.assert_called_with(self.path)
73
        self.libs.mne.read_epochs.assert_called_with(self.path)
74
        self.libs.mne.read_evokeds.assert_called_with(self.path)
75
        self.libs.mne.read_forward_solution.assert_called_with(self.path)
76
        self.libs.mne.read_trans.assert_called_with(self.path)
77
        self.libs.mne.read_proj.assert_called_with(self.path)
78
        self.assertEqual(out['fif-type'], 'other')
79
80
    def test_epochs(self):
81
        self.setupEpochsFile()
82
        out = self.file.inspect()
83
        self.assertEqual(out['fif-type'], 'epo')
84
        self.assertEqual(out['lowpass'], 40.0)
85
        self.assertEqual(out['highpass'], 0.10000000149)
86
        self.assertEqual(out['bad-channels'], ['MEG666', 'ECG999'])
87
        self.assertEqual(out['dimensions'], [7, 455])
88
89
    def test_evokeds(self):
90
        self.setupEvokedsFile()
91
        out = self.file.inspect()
92
        self.assertEqual(out['fif-type'], 'ave')
93
        self.assertEqual(out['dimensions'], [3, 306, 455])
94
95
    def test_covariance(self):
96
        self.setupCovarianceFile()
97
        out = self.file.inspect()
98
        self.assertEqual(out['fif-type'], 'cov')
99
        self.assertEqual(out['dimensions'], [365, 365])
100
101
    def test_forward(self):
102
        self.setupForwardFile()
103
        out = self.file.inspect()
104
        self.assertEqual(out['fif-type'], 'fwd')
105
106
    def test_trans(self):
107
        self.setupTransFile()
108
        out = self.file.inspect()
109
        self.assertEqual(out['fif-type'], 'trans')
110
111
    def test_proj(self):
112
        self.setupProjFile()
113
        out = self.file.inspect()
114
        self.assertEqual(out['fif-type'], 'proj')
115
        self.assertEqual(out['projection-description'], 'Mars')
116
117
    def test_mnepy_read_funcs_throw_ioerror(self):
118
        self.libs.mne.read_trans.side_effect = IOError
119
        out = self.file.inspect()
120
        self.libs.mne.read_trans.assert_called_with(self.path)
121
122
    def test_inspect_right_reader_for_evoked_fiftype(self):
123
        self.libs.mne.read_proj.side_effect = None
124
        self.setupEvokedsFile()
125
        out = self.file.inspect()
126
        self.assertEqual(out['fif-type'], 'ave')
127
128
    def setupRawFile(self):
129
        TS = 1422522595.76096
130
        self.acquired = datetime.fromtimestamp(TS)
131
        self.img = Mock()
132
        self.img.info = {
133
            'meas_date': (TS,),
134
            'proj_name': 'worlddom',
135
            'subject_info': {'first_name': 'John', 'last_name': 'Doeish'},
136
            'nchan': 123,
137
            'sfreq': 200,
138
            'description': 'existing bla bla'}
139
        self.img.first_samp = 10
140
        self.img.last_samp = 100
141
        self.libs.mne.io.read_raw_fif.side_effect = None
142
        self.libs.mne.io.read_raw_fif.return_value = self.img
143
        self.libs.mne.io.read_info.return_value = self.img.info
144
145
    def setupEpochsFile(self):
146
        self.img = Mock()
147
        self.img.info = {
148
            'lowpass': 40.0,
149
            'highpass': 0.10000000149,
150
            'bads': ['MEG666', 'ECG999']}
151
        self.img.events = numpy.zeros((7, 3))
152
        self.img.times = numpy.zeros((455, 1))
153
        self.libs.mne.read_epochs.side_effect = None
154
        self.libs.mne.read_epochs.return_value = self.img
155
156
    def setupEvokedsFile(self):
157
        self.img = Mock()
158
        self.img.info = {}
159
        self.img.data = numpy.zeros((306, 455))
160
        self.libs.mne.read_evokeds.side_effect = None
161
        self.libs.mne.read_evokeds.return_value = [self.img, self.img, self.img]
162
163
    def setupCovarianceFile(self):
164
        self.img = Mock()
165
        self.img.data = numpy.zeros((365, 365))
166
        self.libs.mne.read_cov.side_effect = None
167
        self.libs.mne.read_cov.return_value = self.img
168
169
    def setupForwardFile(self):
170
        self.img = Mock()
171
        self.libs.mne.read_forward_solution.side_effect = None
172
        self.libs.mne.read_forward_solution.return_value = self.img
173
174
    def setupTransFile(self):
175
        self.img = Mock()
176
        self.libs.mne.read_trans.side_effect = None
177
        self.libs.mne.read_trans.return_value = self.img
178
179
    def setupProjFile(self):
180
        self.img = [{'desc': 'Mars'}]
181
        self.libs.mne.read_proj.side_effect = None
182
        self.libs.mne.read_proj.return_value = self.img
183