U
    f»{j½~  ã                   @   sZ  d Z ddlmZ ddlZddlZddlZddlm	Z	m
Z
mZmZ ddlZddlZddlmZmZ ddlmZmZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lm Z  e !e "e#¡d¡Z$e !e$d¡Z%e !e$d¡Z&e !e$d¡Z'e !e$d¡Z(e !e$d¡Z)e !e$d¡Z*e !e$d¡Z+e !e$d¡Z,e !e$d¡Z-e !e$d¡Z.e !e$d¡Z/e !e$d¡Z0e !e$d¡Z1e !e$d¡Z2e !e$d¡Z3ej4dd�Z4e !e4dd¡Z5ej4dd�Z4e !e4dd¡Z6e !e$d¡Z7e !e$d ¡Z8e !e$d!¡Z9d"d#d$gZ:e !e$d%¡Z;d&d'„ Z<ej=d(d)d*gd+fd,d-d.gd/fd0d-d.gd/fd1d2d3d4ge >d5d6d7ge?e?d8gd9œ¡d:�Z@ejAd;d<�d=d>„ ƒZBejAd;d?d@„ e@D ƒdA�dBdC„ ƒZCdDdE„ ZDdFdG„ ZEejF GdHdIdJdKdLg¡dMdN„ ƒZHejF GdOdP¡dQdR„ ƒZIdSdT„ ZJdUdV„ ZKdWdX„ ZLdYdZ„ ZMd[d\„ ZNd]d^„ ZOd_d`„ ZPdadb„ ZQejRdcdd„ ƒZSejRdedf„ ƒZTejRdgdh„ ƒZUejRdidj„ ƒZVejRdkdl„ ƒZWdmdn„ ZXejRdodp„ ƒZYdS )qz#Test reading of BrainVision format.é    N)Úassert_array_almost_equalÚassert_array_equalÚassert_allcloseÚassert_equal)Ú_stamp_to_dtÚobject_diff)Ú
pick_typesÚread_annotationsÚconcatenate_raws)ÚFIFF)Úread_raw_fifÚread_raw_brainvision)Ú_test_raw_reader)Útesting)Úevents_from_annotationsÚdataú	test.vhdrú	test.vmrkútest.eegz&test_partially_disabled_hw_filter.vhdrz+test_old_layout_latin1_software_filter.vhdrz4test_old_layout_latin1_software_filter_longname.vhdrztestv2.vhdrztest_highpass.vhdrztest_mixed_highpass.vhdrztest_highpass_hz.vhdrztest_mixed_highpass_hz.vhdrztest_mixed_lowpass.vhdrztest_lowpass_s.vhdrztest_mixed_lowpass_s.vhdrF)ÚdownloadZBrainvisionztest_NO.vhdrztest_VAmp.ahdrztest_units.vhdrztest_bad_date.vhdrztest_bin_raw.fifÚHLÚHRÚVbz	test.hptsc                 C   sÌ   t tƒ}|j}t|ƒdkst‚|d dks.t‚|d dks>t‚|d dksNt‚tdd„ | ¡ D ƒƒdk |d	 d
ksxt‚|d dksˆt‚|d d
ks˜t‚|d d
ks¨t‚|d dks¸t‚|d dksÈt‚dS )z(Test exposure of original channel units.é    ÚFP1õ   ÂµVÚFP2ÚF3c                 S   s   g | ]}|d k‘qS )r   © )Ú.0Úvr   r   úh/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/io/brainvision/tests/test_brainvision.pyÚ
<listcomp>X   s     z#test_orig_units.<locals>.<listcomp>é   ÚCP5zn/aÚCP6u   ÂµSr   r   r   ÚSÚReRefÚCN)r   Ú	vhdr_pathZ_orig_unitsÚlenÚAssertionErrorÚsumÚvalues)ZrecwarnÚrawZ
orig_unitsr   r   r!   Útest_orig_unitsM   s    r/   z,Mk1=New Segment,,1,1,0,20131113161403794232
éK¥ƒRéx z2013-11-13 16:14:03 UTCzXMk1=New Segment,,1,1,0,20070716122240937454
Mk2=New Segment,,2,1,0,20070716122240937455
ic›FiîM z2007-07-16 12:22:40 UTCzDMk1=New Segment,,1,1,0,
Mk2=New Segment,,2,1,0,20070716122240937454
)zMk1=STATUS,,1,1,0
NÚunspecified)zMk1=New Segment,,1,1,0,
Nr2   )zMk1=New Segment,,1,1,0
Nr2   )z+Mk1=New Segment,,1,1,0,00000000000304125000Nr2   ÚcontentÚ	meas_dateÚmeas_date_reprZU22)ÚnamesÚformats)ÚdtypeÚsession)Úscopec              	      s|   t |  d¡ƒ‰ ‡ fdd„tttfD ƒ\}}}tttg||gƒD ]\}}t ||¡ q>ttdƒ�}| 	¡ }W 5 Q R X |||fS )z0Prepare files for mocked_meas_date_file fixture.Zbrainvision_mocked_meas_datec                    s   g | ]}t  ˆ t  |¡¡‘qS r   )ÚopÚjoinÚbasename)r   Úff©Útmp_pathr   r!   r"   €   s   ÿz*_mocked_meas_date_data.<locals>.<listcomp>Úr)
ÚstrÚmktempr)   Ú	vmrk_pathÚeeg_pathÚzipÚshutilÚcopyfileÚopenÚ	readlines)Ztmp_path_factoryÚ
vhdr_fnameÚ
vmrk_fnameZ	eeg_fnameÚorigÚdestÚfinÚlinesr   r?   r!   Ú_mocked_meas_date_data{   s    
þrQ   c                 C   s   g | ]}|‘qS r   r   )r   Úttr   r   r!   r"   Ž   s     r"   )r:   Úparamsc              	   c   sl   d}| \}}}|j d ||< t|dƒ�}| |¡ W 5 Q R X |j d }|dk	rVt|ƒ}|||j d fV  dS )z.Prepare a generator for use in test_meas_date.é   r3   Úwr4   Nr5   )ÚparamrI   Ú
writelinesr   )rQ   ÚrequestZMEAS_DATE_LINErK   rL   rP   Úfoutr4   r   r   r!   Úmocked_meas_date_fileŽ   s    

rZ   c                 C   sV   | \}}}t |ƒ}|t|jƒks$t‚|dkr@|jd dksRt‚n|jd |ksRt‚dS )z/Test successful extraction of measurement date.Nr4   )r   ÚreprÚinfor+   )rZ   Zvhdr_fZexpected_measZexpected_meas_reprr.   r   r   r!   Útest_meas_datež   s    
r]   c              
   C   sP  t tƒ}|dd… \}}t| ƒ}t |t t¡d ¡}t |t t¡d ¡}t |t t¡d ¡}t 	t|¡ t
|dƒ�>}t
tdƒ�(}	|	D ]}
|
 d¡rœd}
| |
¡ qŠW 5 Q R X W 5 Q R X t
|dƒ�>}t
tdƒ�(}	|	D ]}
|
 d¡rêd}
| |
¡ qØW 5 Q R X W 5 Q R X t |ƒ}|dd… \}}t|j|jƒ t||dd� t||dd� dS )	z#Test BV reading with ANSI codepage.NéÿÿÿÿÚwbÚrbs   Codepages   Codepage=ANSI
çVçž¯Ò<©Zatol)r   r)   rB   r;   r<   ÚsplitrD   rE   rG   ÚcopyrI   Ú
startswithÚwriter   Úch_namesr   )r@   Úraw_initÚdata_expectedÚtimes_expectedÚtempdirZansi_vhdr_pathZansi_vmrk_pathZansi_eeg_pathrY   rO   Úliner.   Údata_newÚ	times_newr   r   r!   Útest_vhdr_codepage_ansi©   s0    
 
 ro   Úheaders.   BrainVision Data Exchange %s File Version 1.0
s5   Brain Vision Core Data Exchange %s File, Version 2.0
s5   Brain Vision Core Data Exchange %s File, Version 3.0
ó   
c              
   C   s´  t tƒ}|dd… \}}t | t t¡d ¡}t | t t¡d ¡}t | t t¡d ¡}t t|¡ t	|dƒ�P}t	tdƒ�:}	|	D ].}
|
 
d¡r¦|dkr¢|d }
n|}
| |
¡ q‚W 5 Q R X W 5 Q R X t	|dƒ�T}t	tdƒ�>}	|	D ]2}
|
 
d¡�r
|dk�r|d }
n|}
| |
¡ qâW 5 Q R X W 5 Q R X d	|k�rZtjtd
d�� t |ƒ W 5 Q R X dS |dk�rŠtjtdd�� t |ƒ W 5 Q R X dS t |ƒ}|dd… \}}t||dd� dS )z/Test BV reading with different header variants.Nr^   r_   r`   s   Brainrq   s   Headers   Markers   3.0z3\.0.*Contact MNE-Python©ÚmatchzMissing headerra   rb   )r   r)   r;   r<   rc   rD   rE   rG   rd   rI   re   rf   ÚpytestÚwarnsÚRuntimeWarningr   )r@   rp   rh   ri   rj   Zuse_vhdr_pathZuse_vmrk_pathZuse_eeg_pathrY   rO   rl   r.   rm   Ú_r   r   r!   Útest_vhdr_versionsÌ   sB    

 

 

rx   Údata_sep)ó    ó   ,ó   +c              
   C   s´  t tƒ}t | t t¡d ¡}t t dd¡| dd¡¡ d}t|dƒ�€}ttdƒ�j}|D ]^}| 	d¡rnd}n<| 	d	¡r~d
}n,| 	d¡r˜d}| 
d¡ n|rª| 	d¡rªd}|sZ| 
|¡ qZW 5 Q R X W 5 Q R X |dd… \}}	t| dd¡dƒ�H}
|
 
| dd„ |jD ƒ¡d ¡ |
 
d dd„ |j|j D ƒ¡¡ W 5 Q R X |dk�rntjtdd�� t |ƒ W 5 Q R X dS t |ƒ}t|jtƒ�sˆt‚|dd… \}}t||dd� t||	ƒ dS )zTest ASCII BV reading.r^   z.vhdrz.vmrkFr_   r`   s
   DataFormats   DataFormat=ASCII
s	   DataFile=s   DataFile=test.dat
s   [Binary Infos]Ts9   [ASCII Infos]
DecimalSymbol=.
SkipLines=1
SkipColumns=0

ó   [Nz.datc                 s   s   | ]}|  d ¡V  qdS )ÚASCIIN)Úencode)r   Úch_namer   r   r!   Ú	<genexpr>  s   ÿztest_ascii.<locals>.<genexpr>rq   c                 s   s"   | ]}d   dd„ |D ƒ¡V  qdS )rz   c                 s   s   | ]}d | V  qdS )s   %.3fNr   )r   Úddr   r   r!   r�      s     z'test_ascii.<locals>.<genexpr>.<genexpr>N)r<   )r   Údr   r   r!   r�      s   ÿó   ;zUnknown.*data formatrr   ra   rb   )r   r)   r;   r<   rc   rG   rd   ÚreplacerI   re   rf   rg   ÚTZ_calsrt   ÚraisesÚRuntimeErrorÚ
isinstanceZorig_formatrB   r+   r   )r@   ry   r.   Zascii_vhdr_pathZskippingrY   rO   rl   r   ÚtimesZfidrm   rn   r   r   r!   Ú
test_ascii   sN    
ÿ


 ÿÿ
ÿ
r‹   c              	   C   s  dddœ}t tttfdƒD ]\}}t || | ¡ q| d }t|dƒ�}| ¡ }W 5 Q R X g }d}|D ]X}	| ¡ D ]@\}
}t	 
|
|	¡}|dk	rrt	 |
||	¡}| |¡ |d	7 } qfqr| |	¡ qf|t|ƒksÐt‚t|d
ƒ�}| |¡ W 5 Q R X t|ƒ}d|jk�st‚dS )z<Test that channel names containing commas are properly read.zCh4=F4\\1foo,z4     F4,foo )z^Ch4=F4,z^4\s\s\s\s\sF4©r   r   r   r   rA   r   Né   rU   zF4,foo)rF   r)   rD   rE   rG   rH   rI   rJ   ÚitemsÚreÚsearchÚsubÚappendr*   r+   rW   r   rg   )r@   Zreplace_dictÚsrcrN   Z
comma_vhdrrO   rP   Ú	new_linesZnperformed_replacementsrl   Z
to_replaceÚreplacementrs   ÚnewrY   r.   r   r   r!   Útest_ch_names_comma/  s4    þ
ÿ
r—   c               	   C   s–  t tttd�} t| jd ddtj d  ƒ t| jd dƒ tj	t
dd	��}t tttd�} W 5 Q R X d
d„ |D ƒ}dd„ |D ƒ}t||ƒ}tdd„ |D ƒƒs t‚t| jd ddtj d  ƒ t| jd dƒ t tttd�} t| jd dƒ t| jd dƒ tj	t
dd	��}t tttd�} W 5 Q R X dd„ |D ƒ}dd„ |D ƒ}dd„ |D ƒ}t|||ƒ}tdd„ |D ƒƒ�srt‚t| jd dƒ t| jd dƒ dS )zCTest reading raw Brain Vision files with amplifier filter settings.©rK   ÚeogÚhighpassç      ð?é   é
   Úlowpassç     @o@údifferent .*pass filtersrr   c                 S   s   g | ]}d t |jƒk‘qS ©zdifferent lowpass filters©rB   Úmessage©r   Zwwr   r   r!   r"   g  s   ÿz:test_brainvision_data_highpass_filters.<locals>.<listcomp>c                 S   s   g | ]}d t |jƒk‘qS ©zdifferent highpass filtersr¢   r¤   r   r   r!   r"   i  s   ÿc                 s   s   | ]\}}t ||gƒV  qd S ©N©Úany©r   ÚlpÚhpr   r   r!   r�   n  s     z9test_brainvision_data_highpass_filters.<locals>.<genexpr>ç      $@c                 S   s   g | ]}d t |jƒk‘qS ©zwill be droppedr¢   r¤   r   r   r!   r"   �  s   ÿc                 S   s   g | ]}d t |jƒk‘qS r¡   r¢   r¤   r   r   r!   r"   ƒ  s   ÿc                 S   s   g | ]}d t |jƒk‘qS r¥   r¢   r¤   r   r   r!   r"   …  s   ÿc                 s   s"   | ]\}}}t |||gƒV  qd S r¦   r§   ©r   Ztrgrª   r«   r   r   r!   r�   Š  s     g      @N)r   r   Úvhdr_highpass_pathr™   r   r\   ÚnpÚpirt   ru   rv   Úvhdr_mixed_highpass_pathrF   Úallr+   Úvhdr_highpass_hz_pathÚvhdr_mixed_highpass_hz_path)r.   rU   Úlowpass_warningÚhighpass_warningÚexpected_warningsÚtrigger_warningr   r   r!   Ú&test_brainvision_data_highpass_filtersW  sb      ÿ þÿÿ
 þ þÿÿÿrº   c               	   C   s¶  t tttd�} t| jd ddtj d  ƒ t| jd dƒ t 	t
¡�}t tttd�} W 5 Q R X dd	„ |D ƒ}d
d	„ |D ƒ}t||ƒ}tdd„ |D ƒƒsœt‚t| jd ddtj d  ƒ t| jd dƒ t tttd�} t| jd ddtj d  ƒ t| jd ddtj d  ƒ t 	t
¡�}t tttd�} W 5 Q R X dd	„ |D ƒ}dd	„ |D ƒ}t||ƒ}tdd„ |D ƒƒ�svt‚t| jd ddtj d  ƒ t| jd ddtj d  ƒ dS )z-Test files with amplifier LP filter settings.r˜   rš   r›   rœ   r�   rž   rŸ   c                 S   s   g | ]}d t |jƒk‘qS r¡   r¢   r¤   r   r   r!   r"      s   ÿz9test_brainvision_data_lowpass_filters.<locals>.<listcomp>c                 S   s   g | ]}d t |jƒk‘qS r¥   r¢   r¤   r   r   r!   r"   ¢  s   ÿc                 s   s   | ]\}}t ||gƒV  qd S r¦   r§   r©   r   r   r!   r�   §  s     z8test_brainvision_data_lowpass_filters.<locals>.<genexpr>gü©ñÒMbp?c                 S   s   g | ]}d t |jƒk‘qS r¡   r¢   r¤   r   r   r!   r"   º  s   ÿc                 S   s   g | ]}d t |jƒk‘qS r¥   r¢   r¤   r   r   r!   r"   ¼  s   ÿc                 s   s   | ]\}}t ||gƒV  qd S r¦   r§   r©   r   r   r!   r�   Á  s     N)r   r   Úvhdr_lowpass_pathr™   r   r\   r°   r±   rt   ru   rv   Úvhdr_mixed_lowpass_pathrF   r³   r+   Úvhdr_lowpass_s_pathÚvhdr_mixed_lowpass_s_path)r.   rU   r¶   r·   r¸   r   r   r!   Ú%test_brainvision_data_lowpass_filters�  s\      ÿ  ÿÿÿ
  ÿ  ÿÿÿ
r¿   c               	   C   s”   t  t¡�} ttttd�}W 5 Q R X dd„ | D ƒ}dd„ | D ƒ}dd„ | D ƒ}t|||ƒ}tdd„ |D ƒƒspt	‚t
|jd d	ƒ t
|jd
 dƒ dS )z@Test heterogeneous filter settings including non-numeric values.r˜   c                 S   s   g | ]}d t |jƒk‘qS r­   r¢   r¤   r   r   r!   r"   Ï  s   ÿzGtest_brainvision_data_partially_disabled_hw_filters.<locals>.<listcomp>c                 S   s   g | ]}d t |jƒk‘qS r¡   r¢   r¤   r   r   r!   r"   Ñ  s   ÿc                 S   s   g | ]}d t |jƒk‘qS r¥   r¢   r¤   r   r   r!   r"   Ó  s   ÿc                 s   s"   | ]\}}}t |||gƒV  qd S r¦   r§   r®   r   r   r!   r�   Ø  s     zFtest_brainvision_data_partially_disabled_hw_filters.<locals>.<genexpr>rš   ç        rž   g     @@N)rt   ru   rv   r   r   Ú&vhdr_partially_disabled_hw_filter_pathr™   rF   r³   r+   r   r\   )rU   r.   r¹   r¶   r·   r¸   r   r   r!   Ú3test_brainvision_data_partially_disabled_hw_filtersÇ  s&     þÿÿÿrÂ   c               	   C   s´   t jtdd�� tttddd�} W 5 Q R X t| jd ddtj	 d	  ƒ t| jd
 dƒ t jtdd�� ttt
ddd�} W 5 Q R X t| jd ddtj	 d	  ƒ t| jd
 dƒ dS )ú$Test reading raw Brain Vision files.úsoftware filterrr   )ZVEOGoZVEOGuZHEOGliZHEOGre)ÚA2©rK   r™   Úmiscrš   r›   rœ   gÍÌÌÌÌÌì?rž   g      I@N)rt   ru   rv   r   r   Úvhdr_old_pathr   r\   r°   r±   Úvhdr_old_longname_path©r.   r   r   r!   Ú:test_brainvision_data_software_filters_latin1_global_unitsÞ  s$      þ  þrË   c                  C   sÞ  t  ttt¡ t jtttddd� ttttdd�} dt	| ƒksBt
‚t| jd dƒ t| jd	 d
ƒ t| jdddd�}| | \}}ttdd�}t| jdddd�}|| \}}t||ƒ t||ƒ | jd D ]è}|d tkrêt|d tjƒ qÈ|d dk�r
t|d tjƒ qÈ|d dk�r:t|d tjƒ t|d tjƒ qÈ|d dk�rjt|d tjƒ t|d tjƒ qÈ|d | jd k�r t|d tjƒ t|d tjƒ qÈtd|d  ƒ‚qÈtttddd� ttttdd�}t|jd d d dƒ t|jd d d tjƒ |d \}	}
t|ddd…f |	 ¡ ƒ t|jd d d dƒ t|jd d d tjƒ |d \}	}
t|ddd…f |	 ¡ ƒ t|jd d d d ƒ t|jd d d tjƒ |d \}	}
t|ddd…f |	 ¡ ƒ dS )!rÃ   TZfoo)ÚpreloadÚscaleÚautorÆ   ZRawBrainVisionrš   rÀ   rž   rŸ   FZbads)ZmegZeegÚexclude©rÌ   Úchsr€   ÚkindzSTI 014)r$   r%   Úunitr'   rg   zUnknown Channel: %sÚerror)r™   rÌ   Úverboser   r   Nr�   r   rœ   r   )rt   r‡   ÚIOErrorr   rD   Ú
ValueErrorr)   r   r™   r[   r+   r   r\   r   r   Úeeg_binr   r   ZFIFFV_EOG_CHZFIFFV_STIM_CHZFIFFV_MISC_CHZFIFF_UNIT_NONEZFIFF_UNIT_CELZFIFFV_EEG_CHZFIFF_UNIT_Vrˆ   Úvhdr_v2_pathÚvhdr_units_pathZsqueeze)Zraw_pyZpicksZdata_pyZtimes_pyZraw_binZdata_binZ	times_binÚchZ	raw_unitsZ
data_unitsrw   r   r   r!   Útest_brainvision_dataò  sr    
 ÿ   ÿ

ÿ   ÿrÜ   c                   C   s  t jtdd�� ttdd�} W 5 Q R X t| jjdƒ t 	ddgdd	gd
dgddgddgddgddgddgddgddgddgddgddgdd gd!d"gd#d$gd%d&gd'd(gd)d*gd+d,gd-d.gd/d0gd1d2gd1d3gd4d5gd6d7gd8d9gd:d;gd<d=gg¡}t
| jd>d>…d>d?…f |ƒ d>S )@z9Test reading BrainVision data files with vectorized data.rÄ   rr   TrÐ   )é   éû   gÙ¥<²îäÕ>g®[NSdÕ>gÓ‹5·�Á>gZÓ½É
Ã>gü�7_6K³>g–˜§|NP¶>gH¯¼šò×š>g5(uàjÉ¾g;Èkpç§Ç¾gS‹G®»Æ>g3vx¾U�Ä>gäÚ�ˆo7Ä>g'è%¾ÌÃ>gÜˆ�ÖÝ±>g'è%¾Ì³>g	…ˆ‰A{¶¾gñhãˆµø´¾gkN¹uÏÅ¾g¡ÍûRÏ¢Ä¾gDÅÛ'Ñ¦>gH¯¼šò×ª>gI);�Ô¸>gx5
H€ÿ¸>g$^ÃÃå»>g0“šfU¹>g{mÄ³À(¨>gúœUXÛ¬>gvƒôõ!”¾g¶˜çŽye¾gï¶æ4+€¾g$ls4+p>gd¿ƒ«>g.\?xœ°>g­P)Põ²>g³ÑçŽyµ>g2z”�²>g	…ˆ‰A{¶>g“E‚$‡�>g�Á6C £>gçå‹¿ƒ›¾g¶˜çŽye>g©AÄr¡>ghíÒÆ‰Š¯>giœ¼Éêñ°>g£ø¦Y€¹>gÎÉæ3º>gŠcS¦Íý·¾g ï06C ³¾gï7¸PžÎ>g­E2Ê³Î>gI9ÄrÑ>gh1ú�öÊÏ>gœ7[Ëpã>g?f£ ]Êâ>g¬ —Z½ÞÞ¾gP‹uwÞ¾Nrœ   )rt   ru   rv   r   rÈ   r   Ú_dataÚshaper°   Úarrayr   )r.   Zfirst_two_samples_all_chsr   r   r!   Ú test_brainvision_vectorized_data5  sD    
ärâ   c               	   C   s    t jtdd�� ttƒ} W 5 Q R X | jd dk	s4t‚| jd }t dd„ |D ƒ¡}t	| j
ƒd df}|j|ksrt‚| ¡ d	k s‚t‚ttƒ}|jd dksœt‚dS )
z1Test reading of [Coordinates] section if present.zcoordinate informationrr   ÚdigNc                 S   s   g | ]}|d  ‘qS )rA   r   )r   rã   r   r   r!   r"   g  s     z.test_coodinates_extraction.<locals>.<listcomp>é   é   gš™™™™™É?)rt   ru   rv   r   rÙ   r\   r+   r°   rá   r*   rg   rà   Úmaxr)   )r.   ZdiglistZcoordsZEXPECTED_SHAPEZraw2r   r   r!   Útest_coodinates_extraction^  s    
þrç   c                  C   sJ   t tdd�} | jd dkst‚t| jd ƒdks4t‚| jd dksFt‚dS )	z4Test Brainvision file exported with neuroone system.rÔ   )rÕ   r4   NrÑ   éA   Úsfreqg     ˆ³@)r   Úneuroone_vhdrr\   r+   r*   rÊ   r   r   r!   Ú test_brainvision_neuroone_exportw  s    rë   c              	      st   d}t tƒ�‰ ‡ fdd„tdƒD ƒ}W 5 Q R X | d }t t|ƒdƒ�}|D ]}| |¡ qJW 5 Q R X t||d� dS )	z"Test load brainvision annotations.ç     @�@c                    s   g | ]}t ˆ ƒ‘qS r   )Únext)r   Úx©Zmyfiler   r!   r"   ˆ  s     z.test_read_vmrk_annotations.<locals>.<listcomp>é   z	temp.vmrkrU   ©ré   N)rI   rD   ÚrangerB   rf   r	   )r@   ré   ÚheadÚfnameÚtempÚitemr   rï   r!   Útest_read_vmrk_annotations€  s    
 r÷   c                 C   s0  t tttfdƒD ]\}}t || | ¡ qt| d dƒ�}| d¡ W 5 Q R X d}tdƒ}t	 
ddd	d
dddddddddddg¡}dddddddddddddddg}t	 |t	 |¡ddd d!d d!d dd d"d!d d#d$d%gg¡ d&¡j}ddd d!d"d#d$d%d'œ}	t| d( td)�}
|
jj|k�st‚t|
jj|| ƒ t|
jj|ƒ t|
ƒ\}}t||ƒ ||	k�s\t‚d*d+„ tt| ¡ ƒƒD ƒ}t|
d,d-�\}}||k�s”t‚d.}|
j d/d0d1gd2d3|d4g¡ |	jd5d6d7� d2|	|< t|
ƒ\}}||	k�sät‚tjt d8d9�� t!|
 "¡ |
 "¡ gƒ}W 5 Q R X t|ƒ\}}||	k�s,t‚d,S ):z;Test load brainvision annotations and parse them to events.rŒ   r   Úaz)Mk15=Comma\1Type,CommaValue\11,7800,1,0\nrì   )r0   r1   r   g     `~@g      @g     ¤›@g     Ì›@g     h©@g     |©@g     G³@g     Q³@g     o·@g     Û¹@g     å¹@g     Í½@g     ¾@g     w¾@úNew Segment/úStimulus/S253úStimulus/S255ú	Event/254úResponse/R255úSyncStatus/Sync Onú
Optic/O  1úComma,Type/CommaValue,1iŸ† éý   éÿ   éþ   iç  iž† iÑ  i'  Zint64)rù   rú   rû   rü   rý   rþ   rÿ   r   r   ©r™   c                 S   s   i | ]\}}||d  “qS )r�   r   )r   ÚidxÚdescr   r   r!   Ú
<dictcomp>À  s      z9test_read_vhdr_annotations_and_events.<locals>.<dictcomp>N)Úevent_idzStimulus/S 10r�   rœ   rå   r�   ÚZZZÚYYYi'  i'  )r
  r	  zexpanding outsiderr   )#rF   r)   rD   rE   rG   rH   rI   rf   r   r°   rá   ÚstackZ
zeros_likeZastyper†   r   r™   ÚannotationsZ	orig_timer+   r   Zonsetr   Údescriptionr   Ú	enumerateÚsortedÚkeysr’   Úupdatert   ru   rv   r
   rd   )r@   r“   rN   rY   ré   Zexpected_orig_timeZexpected_onset_latencyZexpected_annot_descriptionZexpected_eventsZexpected_event_idr.   Úeventsr  Zexpected_none_event_idZs_10rw   Z
raw_concatr   r   r!   Ú%test_read_vhdr_annotations_and_events�  s�    
ÿ   ÿÿ           ü ÿýû   ý

ÿ
r  c                   C   s   t ttdd�ttdd�ƒ dS )z3Test proper sfreq inference by checking the onsets.rÎ   rñ   rì   N)r   r	   rD   r   r   r   r!   Ú"test_automatic_vmrk_sfreq_recovery×  s    
ÿr  c                 C   sX   | d }t ttd�}t|ƒ\}}| |¡ t|ƒ}t|ƒ\}}||ksJt‚t||ƒ dS )z@Test load events from brainvision annotations when read_raw_fif.z
bv-raw.fifr  N)r   r)   r™   r   Úsaver   r+   r   )r@   rô   r.   Zoriginal_eventsZoriginal_event_idr  r  r   r   r!   Ú0test_event_id_stability_when_save_and_fif_reloadÞ  s    
r  c               "      s®  t j ddddddt jjd�‰d‰d	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*g"} t| ƒ}tjg|d+  d,d-g ‰d,‰ d.g|d+  d/d/g ‰‡ ‡‡‡‡fd0d1„t| ƒD ƒ}ttt	d2�}t
||jƒd3ksàt‚ˆjd4d5d+d6�‰|  d$¡}| d7|… d8d9d:d;d<d=d>d(d)d*g
 } t| ƒ}tjg|d?  d@dAdBdCdDd-d,dCdEg	 ‰‡‡‡fdFd1„t| ƒD ƒ}tjtdGdH�� ttdIdJgdKgdL�}W 5 Q R X t
||jƒd3k�sªt‚d7S )Mz1Test case for parsing the impedances from header.iÝ  rT   é   é   é   é   )ÚtzinfoZkOhmr   r   r   ZF4ZC3ZC4ZP3ZP4ZO1ZO2ZF7ZF8ZP7ZP8ZFzZFCzZCzZCPzZPzZPOzZFC1ZFC2ZCP1ZCP2ZFC5ZFC6r$   r%   r   r   r   r'   ZRefZGndrœ   rÀ   g      @g      Y@r¬   c              
      s,   i | ]$\}}|ˆ| ˆˆˆ ˆ| ˆd œ“qS ))ÚimpÚimp_unitÚimp_meas_timeZimp_lower_boundZimp_upper_boundZimp_range_unitr   ©r   ÚiZelec©Zexpected_imp_lower_boundÚexpected_imp_meas_timeÚexpected_imp_unitZexpected_imp_upper_boundÚexpected_impsr   r!   r  ý  s   ùúz(test_parse_impedance.<locals>.<dictcomp>r  Ú r�   é   )ÚhourÚminuteÚsecondNzCP 6zECG+zECG-zHEOG+zHEOG-zVEOG+zVEOG-é	   g     €A@g      G@g      @g       @g      @g      @c                    s"   i | ]\}}|ˆ| ˆˆ d œ“qS ))r  r  r  r   r  )r"  r#  r$  r   r!   r    s   üýr    rr   ZHEOGZVEOGZECG)r™   rÇ   )ÚdatetimeÚtimezoneÚutcr*   r°   Únanr  r   r)   r™   r   Z
impedancesr+   r…   Úindexrt   ru   rv   r¼   )Zexpected_electrodesZn_electrodesZexpected_impedancesr.   Ztmpidxr   r!  r!   Útest_parse_impedanceí  s¬    ÿ                              üù	þ

        þ        ÿü ÿr0  c                  C   sN   d} d}d}t tƒ}|jd | ks&t‚|jd |ks8t‚|jd |ksJt‚dS )z*Test case for parsing data in ahdr format.rð   rÀ   rŸ   Znchanrš   rž   N)r   Ú	vamp_ahdrr\   r+   )Zexpected_num_channelsZexpected_hpZexpected_lpr.   r   r   r!   Útest_ahdr_format"  s    r2  )ZÚ__doc__Úos.pathÚpathr;   r�   rG   Únumpyr°   Znumpy.testingr   r   r   r   rt   r+  Z	mne.utilsr   r   Zmner   r	   r
   Zmne.io.constantsr   Zmne.ior   r   Zmne.io.tests.test_rawr   Zmne.datasetsr   Zmne.annotationsr   r<   ÚdirnameÚ__file__Údata_dirr)   rD   rE   rÁ   rÈ   rÉ   rÙ   r¯   r²   r´   rµ   r»   r¼   r½   r¾   Z	data_pathrê   r1  rÚ   Zvhdr_bad_daterØ   r™   Zmontager/   rá   r8   ÚobjectZDATE_TEST_CASESZfixturerQ   rZ   r]   ro   ÚmarkZparametrizerx   r‹   r—   rº   r¿   rÂ   rË   rÜ   râ   rç   Zrequires_testing_datarë   r÷   r  r  r  r0  r2  r   r   r   r!   Ú<module>   sÖ   ÿ ÿ ÿ
þýþïþí


#ù	
+
.(97C)


F

5