@@ -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