@@ -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'
@@ -133,8 +132,115 @@ def reader(filename, comment_rows):
133132
134133 os .remove (filename )
135134
136- # test usecols
137- # test skiprows
135+ def test_skiprows (self ):
136+ filename = 'test_skiprows.txt'
137+ sample_data = [
138+ (- 65 , - 65 , - 65 , 0.5 ),
139+ (- 64.8 , - 64.5 , - 64.0 , 0.6 ),
140+ (- 64.6 , - 64.2 , - 77.0 , 0.7 ),
141+ (- 64.3 , - 64.0 , - 99.9 , 0.8 ),
142+ (- 66 , - 64.3 , - 61.0 , 1.4 ),
143+ ]
144+ with open (filename , 'w' ) as datafile :
145+ for row in sample_data :
146+ datafile .write ("\t " .join (map (str , row )) + "\t \n " )
147+ io = AsciiSignalIO (filename , skiprows = 1 )
148+ block = io .read_block ()
149+ signal = block .segments [0 ].analogsignals [0 ]
150+ self .assertEqual (signal .shape , (4 , 1 ))
151+ self .assertEqual (len (block .segments [0 ].analogsignals ), 5 )
152+ self .assertEqual (len (block .segments [0 ].analogsignals [0 ]), 4 )
153+ 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 (),
161+ np .array ([- 64.8 , - 64.6 , - 64.3 , - 66 ]), decimal = 5 )
162+
163+ os .remove (filename )
164+
165+ def test_usecols (self ):
166+ filename = 'test_usecols.txt'
167+ sample_data = [
168+ (- 65 , - 65 , - 65 , 0.5 ),
169+ (- 64.8 , - 64.5 , - 64.0 , 0.6 ),
170+ (- 64.6 , - 64.2 , - 77.0 , 0.7 ),
171+ (- 64.3 , - 64.0 , - 99.9 , 0.8 ),
172+ (- 66 , - 64.3 , - 61.0 , 1.4 ),
173+ ]
174+ with open (filename , 'w' ) as datafile :
175+ for row in sample_data :
176+ datafile .write ("\t " .join (map (str , row )) + "\t \n " )
177+ io = AsciiSignalIO (filename , usecols = 3 )
178+ block = io .read_block ()
179+ signal = block .segments [0 ].analogsignals [0 ]
180+ self .assertEqual (signal .shape , (5 , 1 ))
181+ self .assertEqual (len (block .segments [0 ].analogsignals [0 ]), 5 )
182+ self .assertEqual (len (block .segments [0 ].analogsignals ), 1 )
183+ self .assertEqual (signal .units , pq .V )
184+ assert_array_equal (signal .times , [0. , 1. , 2. , 3. , 4. ] * pq .s )
185+ assert_array_equal (signal .times .magnitude , [0. , 1. , 2. , 3. , 4. ])
186+ assert_array_equal (signal [0 ].magnitude , 0.5 )
187+ assert_array_equal (signal [1 ].magnitude , 0.6 )
188+ assert_array_equal (signal [2 ].magnitude , 0.7 )
189+ assert_array_equal (signal [3 ].magnitude , 0.8 )
190+ assert_array_equal (signal [4 ].magnitude , 1.4 )
191+ assert_array_almost_equal (np .asarray (signal ).flatten (),
192+ np .array ([0.5 , 0.6 , 0.7 , 0.8 , 1.4 ]), decimal = 5 )
193+
194+ os .remove (filename )
195+
196+ # test skip comments
197+ def test_skip_comments (self ):
198+
199+ sample_data = [
200+ ("INFORMATION" ),
201+ ("20170119_cell1_CA" ),
202+ ("" ),
203+ ("" ),
204+ ("" ),
205+ ("" ),
206+ ("" ),
207+ (),
208+ ("Waveform" ),
209+ ("Unit" ),
210+ (),
211+ (- 0.02121 ),
212+ (- 0.01740 ),
213+ (- 0.00671 ),
214+ (- 0.00885 ),
215+ (- 0.00092 ),
216+ (- 0.01373 ),
217+ (- 0.01175 ),
218+ (- 0.00504 ),
219+ (- 0.01358 ),
220+ (- 0.01526 ),
221+ (- 0.00244 ),
222+ (2.26852 ),
223+ ("CHANNEL" "5" ),
224+ ("Evt+-" ),
225+ ("" ),
226+ ("" ),
227+ ]
228+ sampling_rate = 1 * pq .kHz
229+ filename = 'test_skip_comments.txt'
230+ with open (filename , 'w' ) as datafile :
231+ for row in sample_data :
232+ datafile .write (str (float ))
233+
234+ io = AsciiSignalIO (filename , sampling_rate = sampling_rate , delimiter = ' ' ,
235+ units = 'mV' , method = 'genfromtxt' )
236+ block = io .read_block ()
237+ signal1 = block .segments [0 ].analogsignals [0 ]
238+
239+ self .assertEqual (len (block .segments [0 ].analogsignals ), 1 )
240+ self .assertEqual (signal1 .units , pq .mV )
241+ self .assertEqual (len (block .segments [0 ].analogsignals ), 1 )
242+
243+ os .remove (filename )
138244
139245 def test_timecolumn (self ):
140246 sample_data = np .random .uniform (size = (200 , 3 ))
@@ -224,8 +330,138 @@ def test_multichannel_with_negative_timecolumn(self):
224330 os .remove (filename )
225331
226332 # 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+ iow .write_block (block1 )
353+
354+ ior = AsciiSignalIO (filename )
355+ block2 = ior .read_block ()
356+
357+ assert len (block2 .segments [0 ].analogsignals ) == 3
358+ signal2 = block2 .segments [0 ].analogsignals [1 ]
359+
360+ assert_array_almost_equal (signal1 .magnitude [:, 1 ], signal2 .magnitude .reshape (- 1 ),
361+ decimal = 7 )
362+ self .assertEqual (signal1 .units , signal2 .units )
363+ self .assertEqual (signal1 .sampling_rate , signal2 .sampling_rate )
364+ assert_array_equal (signal1 .times , signal2 .times )
365+
366+ assert_array_almost_equal (signal2 .magnitude .reshape (- 1 ), sample_data [:, 1 ],
367+ decimal = 6 )
368+
369+ self .assertEqual (signal2 .sampling_period , sampling_period * pq .s )
370+ self .assertEqual (len (block2 .segments [0 ].analogsignals ), 3 )
371+ self .assertEqual (signal2 .t_stop , sample_data .shape [0 ] * sampling_period * pq .s )
372+ self .assertEqual (signal2 .units , pq .V )
373+
374+ os .remove (filename )
375+
227376 # test write with timecolumn
377+ def test_write_with_timecolumn (self ):
378+ sample_data = np .random .uniform (size = (200 , 3 ))
379+ sampling_period = 1
380+ time_data = sampling_period * np .arange (sample_data .shape [0 ])
381+ combined_data = np .hstack ((time_data [:, np .newaxis ], sample_data ))
382+ filename = "test_write_with_timecolumn.txt"
383+ np .savetxt (filename , combined_data , delimiter = ' ' )
384+
385+ signal1 = AnalogSignal (sample_data , units = "V" , sampling_rate = 1 * pq .Hz )
386+ seg1 = Segment ()
387+ block1 = Block ()
388+ seg1 .analogsignals .append (signal1 )
389+ seg1 .block = block1
390+ block1 .segments .append (seg1 )
391+
392+ iow = AsciiSignalIO (filename ,
393+ method = 'genfromtxt' ,
394+ timecolumn = 0 ,
395+ time_units = 'ms' ,
396+ signal_group_mode = 'all-in-one' )
397+ iow .write_block (block1 )
398+
399+ ior = AsciiSignalIO (filename )
400+ block2 = ior .read_block ()
401+
402+ assert len (block2 .segments [0 ].analogsignals ) == 4
403+ signal2 = block2 .segments [0 ].analogsignals [1 ]
404+
405+ assert_array_almost_equal (signal1 .magnitude [:, 0 ], signal2 .magnitude .reshape (- 1 ),
406+ decimal = 7 )
407+ self .assertEqual (signal1 .units , signal2 .units )
408+ self .assertEqual (signal1 .sampling_rate , signal2 .sampling_rate )
409+ assert_array_equal (signal1 .times , signal2 .times )
410+ assert_array_almost_equal (signal2 .magnitude [:, 0 ], sample_data [:, 0 ],
411+ decimal = 6 )
412+ self .assertEqual (signal2 .sampling_period , sampling_period * pq .s )
413+ self .assertEqual (len (block2 .segments [0 ].analogsignals ), 4 )
414+ self .assertEqual (signal2 .t_stop , sample_data .shape [0 ] * sampling_period * pq .s )
415+ self .assertEqual (signal2 .units , pq .V )
416+
417+ os .remove (filename )
418+
228419 # test write with units/timeunits different from those of signal
420+ def test_write_with_timeunits_different_from_those_of_signal (self ):
421+ sample_data = np .random .uniform (size = (3 , 3 ))
422+ sampling_period = 1
423+ time_data = sampling_period * np .arange (sample_data .shape [0 ])
424+ combined_data = np .hstack ((time_data [:, np .newaxis ], sample_data ))
425+ filename = "test_write_with_timeunits_different_from_those_of_signal.txt"
426+ np .savetxt (filename , combined_data , delimiter = ' ' )
427+
428+ signal1 = AnalogSignal (sample_data , units = "A" ,
429+ sampling_rate = 2 * pq .Hz , sampling_period = 0.5 )
430+ seg1 = Segment ()
431+ block1 = Block ()
432+ seg1 .analogsignals .append (signal1 )
433+ seg1 .block = block1
434+ block1 .segments .append (seg1 )
435+
436+ iow = AsciiSignalIO (filename ,
437+ method = 'genfromtxt' ,
438+ timecolumn = 0 ,
439+ units = 'mV' ,
440+ time_units = 'ms' ,
441+ signal_group_mode = 'all-in-one' )
442+ def_units = iow .units
443+ def_time_units = iow .time_units
444+ iow .write_block (block1 )
445+
446+ ior = AsciiSignalIO (filename )
447+ block2 = ior .read_block ()
448+
449+ assert len (block2 .segments [0 ].analogsignals ) == 4
450+ signal2 = block2 .segments [0 ].analogsignals [1 ]
451+
452+ self .assertTrue (signal1 .units , def_units )
453+ self .assertEqual (signal1 .units , pq .A )
454+ self .assertEqual (iow .units , pq .A )
455+ self .assertEqual (signal1 .units , iow .units )
456+ self .assertTrue (def_units , iow .units )
457+
458+ self .assertTrue (signal1 .units , ior .time_units )
459+ self .assertEqual (iow .time_units , ior .time_units )
460+ self .assertTrue (def_time_units , iow .time_units )
461+ self .assertEqual (iow .time_units , pq .s )
462+ self .assertEqual (ior .time_units , pq .s )
463+
464+ os .remove (filename )
229465
230466 def test_read_with_json_metadata (self ):
231467 sample_data = np .random .uniform (size = (200 , 3 ))
0 commit comments