Skip to content

Commit e83d8e7

Browse files
committed
Different tests AsciiSignalIO
1 parent e6ec5cf commit e83d8e7

File tree

2 files changed

+206
-1
lines changed

2 files changed

+206
-1
lines changed

neo/io/asciisignalio.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,16 @@ def read_segment(self, lazy=False):
196196
usecols=self.usecols,
197197
skip_header=self.skiprows,
198198
dtype='f',
199+
filling_values=None,
200+
comments='""',
201+
names=None,
202+
loose=True,
199203
invalid_raise=False)
204+
205+
nan = np.isnan(sig[:])
206+
for i in nan:
207+
if i.all()==True:
208+
sig = np.delete(sig, np.isnan(sig[:]))
200209
if len(sig.shape) == 1:
201210
sig = sig[:, np.newaxis]
202211
elif self.method == 'csv':

neo/test/iotest/test_asciisignalio.py

Lines changed: 197 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ def test_csv_expect_success(self):
7878

7979
os.remove(filename)
8080
# test_csv_expect_failure
81-
# test_homemade_expect_success
8281

8382
def test_homemade_expect_success(self):
8483
filename = 'test_homemade_expect_success.txt'
@@ -152,6 +151,13 @@ def test_skiprows(self):
152151
self.assertEqual(len(block.segments[0].analogsignals), 5)
153152
self.assertEqual(len(block.segments[0].analogsignals[0]), 4)
154153
self.assertEqual(signal.units, pq.V)
154+
assert_array_equal(signal.times, [0., 1., 2., 3.] * pq.s)
155+
assert_array_equal(signal.times.magnitude, [0., 1., 2., 3.])
156+
assert_array_equal(signal[0].magnitude, -64.8)
157+
assert_array_equal(signal[1].magnitude, -64.6)
158+
assert_array_equal(signal[2].magnitude, -64.3)
159+
assert_array_equal(signal[3].magnitude, -66)
160+
assert_array_almost_equal(np.asarray(signal).flatten(), np.array([-64.8, -64.6, -64.3, -66]), decimal=5)
155161

156162
os.remove(filename)
157163

@@ -174,9 +180,67 @@ def test_usecols(self):
174180
self.assertEqual(len(block.segments[0].analogsignals[0]), 5)
175181
self.assertEqual(len(block.segments[0].analogsignals), 1)
176182
self.assertEqual(signal.units, pq.V)
183+
assert_array_equal(signal.times, [0., 1., 2., 3., 4.] * pq.s)
184+
assert_array_equal(signal.times.magnitude, [0., 1., 2., 3., 4.])
185+
assert_array_equal(signal[0].magnitude, 0.5)
186+
assert_array_equal(signal[1].magnitude, 0.6)
187+
assert_array_equal(signal[2].magnitude, 0.7)
188+
assert_array_equal(signal[3].magnitude, 0.8)
189+
assert_array_equal(signal[4].magnitude, 1.4)
190+
assert_array_almost_equal(np.asarray(signal).flatten(), np.array([0.5, 0.6, 0.7, 0.8, 1.4]), decimal=5)
177191

178192
os.remove(filename)
179193

194+
# test skip comments
195+
def test_skip_comments(self):
196+
197+
sample_data = [
198+
("INFORMATION"),
199+
("20170119_cell1_CA"),
200+
(""),
201+
(""),
202+
(""),
203+
(""),
204+
(""),
205+
(),
206+
("Waveform"),
207+
("Unit"),
208+
(),
209+
(-0.02121),
210+
(-0.01740),
211+
(-0.00671),
212+
(-0.00885),
213+
(-0.00092),
214+
(-0.01373),
215+
(-0.01175),
216+
(-0.00504),
217+
(-0.01358),
218+
(-0.01526),
219+
(-0.00244),
220+
(2.26852),
221+
("CHANNEL" "5"),
222+
("Evt+-"),
223+
(""),
224+
(""),
225+
]
226+
sampling_rate = 1 * pq.kHz
227+
filename='test_skip_comments.txt'
228+
with open(filename, 'w') as datafile:
229+
for row in sample_data:
230+
datafile.write(str(float))
231+
232+
io = AsciiSignalIO(filename, sampling_rate=sampling_rate, delimiter=' ',
233+
units='mV', method='genfromtxt')
234+
block = io.read_block()
235+
signal1 = block.segments[0].analogsignals[0]
236+
237+
self.assertEqual(len(block.segments[0].analogsignals), 1)
238+
self.assertEqual(signal1.units, pq.mV)
239+
self.assertEqual(signal1.shape, (0, 1))
240+
self.assertEqual(len(block.segments[0].analogsignals), 1)
241+
self.assertEqual(len(block.segments[0].analogsignals[0]), 0)
242+
243+
os.remove(filename)
180244

181245
def test_timecolumn(self):
182246
sample_data = np.random.uniform(size=(200, 3))
@@ -266,8 +330,140 @@ def test_multichannel_with_negative_timecolumn(self):
266330
os.remove(filename)
267331

268332
# test write without timecolumn
333+
def test_write_without_timecolumn(self):
334+
sample_data = np.random.uniform(size=(2, 3))
335+
sampling_period = 1
336+
time_data = sampling_period * np.arange(sample_data.shape[0])
337+
combined_data = np.hstack((time_data[:, np.newaxis], sample_data))
338+
filename = "test_write_without_timecolumn.txt"
339+
np.savetxt(filename, combined_data, delimiter=' ')
340+
341+
signal1 = AnalogSignal(sample_data, units="V", sampling_rate=1 * pq.Hz)
342+
seg1 = Segment()
343+
block1 = Block()
344+
seg1.analogsignals.append(signal1)
345+
seg1.block = block1
346+
block1.segments.append(seg1)
347+
348+
iow = AsciiSignalIO(filename,
349+
method='genfromtxt',
350+
time_units='ms',
351+
signal_group_mode='all-in-one'
352+
)
353+
iow.write_block(block1)
354+
355+
ior = AsciiSignalIO(filename)
356+
block2 = ior.read_block()
357+
358+
assert len(block2.segments[0].analogsignals) == 3
359+
signal2 = block2.segments[0].analogsignals[1]
360+
361+
assert_array_almost_equal(signal1.magnitude[:, 1], signal2.magnitude.reshape(-1),
362+
decimal=7)
363+
self.assertEqual(signal1.units, signal2.units)
364+
self.assertEqual(signal1.sampling_rate, signal2.sampling_rate)
365+
assert_array_equal(signal1.times, signal2.times)
366+
367+
assert_array_almost_equal(signal2.magnitude.reshape(-1), sample_data[:, 1],
368+
decimal=6)
369+
370+
self.assertEqual(signal2.sampling_period, sampling_period * pq.s)
371+
self.assertEqual(len(block2.segments[0].analogsignals), 3)
372+
self.assertEqual(signal2.t_stop, sample_data.shape[0] * sampling_period * pq.s)
373+
self.assertEqual(signal2.units, pq.V)
374+
375+
os.remove(filename)
376+
269377
# test write with timecolumn
378+
def test_write_with_timecolumn(self):
379+
sample_data = np.random.uniform(size=(200, 3))
380+
sampling_period = 1
381+
time_data = sampling_period * np.arange(sample_data.shape[0])
382+
combined_data = np.hstack((time_data[:, np.newaxis], sample_data))
383+
filename = "test_write_with_timecolumn.txt"
384+
np.savetxt(filename, combined_data, delimiter=' ')
385+
386+
signal1 = AnalogSignal(sample_data, units="V", sampling_rate=1 * pq.Hz)
387+
seg1 = Segment()
388+
block1 = Block()
389+
seg1.analogsignals.append(signal1)
390+
seg1.block = block1
391+
block1.segments.append(seg1)
392+
393+
iow = AsciiSignalIO(filename,
394+
method='genfromtxt',
395+
timecolumn=0,
396+
time_units='ms',
397+
signal_group_mode='all-in-one'
398+
)
399+
iow.write_block(block1)
400+
401+
ior = AsciiSignalIO(filename)
402+
block2 = ior.read_block()
403+
404+
assert len(block2.segments[0].analogsignals) == 4
405+
signal2 = block2.segments[0].analogsignals[1]
406+
407+
assert_array_almost_equal(signal1.magnitude[:, 0], signal2.magnitude.reshape(-1),
408+
decimal=7)
409+
self.assertEqual(signal1.units, signal2.units)
410+
self.assertEqual(signal1.sampling_rate, signal2.sampling_rate)
411+
assert_array_equal(signal1.times, signal2.times)
412+
assert_array_almost_equal(signal2.magnitude[:, 0], sample_data[:, 0],
413+
decimal=6)
414+
self.assertEqual(signal2.sampling_period, sampling_period * pq.s)
415+
self.assertEqual(len(block2.segments[0].analogsignals), 4)
416+
self.assertEqual(signal2.t_stop, sample_data.shape[0] * sampling_period * pq.s)
417+
self.assertEqual(signal2.units, pq.V)
418+
419+
os.remove(filename)
420+
270421
# test write with units/timeunits different from those of signal
422+
def test_write_with_timeunits_different_from_those_of_signal(self):
423+
sample_data = np.random.uniform(size=(3, 3))
424+
sampling_period = 1
425+
time_data = sampling_period * np.arange(sample_data.shape[0])
426+
combined_data = np.hstack((time_data[:, np.newaxis], sample_data))
427+
filename = "test_write_with_timeunits_different_from_those_of_signal.txt"
428+
np.savetxt(filename, combined_data, delimiter=' ')
429+
430+
signal1 = AnalogSignal(sample_data, units="A", sampling_rate=2 * pq.Hz, sampling_period=0.5)
431+
seg1 = Segment()
432+
block1 = Block()
433+
seg1.analogsignals.append(signal1)
434+
seg1.block = block1
435+
block1.segments.append(seg1)
436+
437+
iow = AsciiSignalIO(filename,
438+
method='genfromtxt',
439+
timecolumn=0,
440+
units='mV',
441+
time_units='ms',
442+
signal_group_mode='all-in-one'
443+
)
444+
def_units = iow.units
445+
def_time_units = iow.time_units
446+
iow.write_block(block1)
447+
448+
ior = AsciiSignalIO(filename)
449+
block2 = ior.read_block()
450+
451+
assert len(block2.segments[0].analogsignals) == 4
452+
signal2 = block2.segments[0].analogsignals[1]
453+
454+
self.assertTrue(signal1.units, def_units)
455+
self.assertEqual(signal1.units, pq.A)
456+
self.assertEqual(iow.units, pq.A)
457+
self.assertEqual(signal1.units, iow.units)
458+
self.assertTrue(def_units, iow.units)
459+
460+
self.assertTrue(signal1.units, ior.time_units)
461+
self.assertEqual(iow.time_units, ior.time_units)
462+
self.assertTrue(def_time_units, iow.time_units)
463+
self.assertEqual(iow.time_units, pq.s)
464+
self.assertEqual(ior.time_units, pq.s)
465+
466+
os.remove(filename)
271467

272468
def test_read_with_json_metadata(self):
273469
sample_data = np.random.uniform(size=(200, 3))

0 commit comments

Comments
 (0)