U
    f»{j=N  ã                   @   sp  d dl mZ d dlmZ d dlZd dlZd dlmZmZ d dl	Z
d dlmZmZ d dlZd dlmZ d dlmZmZmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ d dl m!Z!m"Z" d dl#m$Z$m%Z% e &e 'e (e)¡¡d¡Z*e &e*d¡Z+e &e*d¡Z,e$dd�Z-e &e-d¡Z.e &e.d¡Z/e &e.d¡Z0e &e.d¡Z1e &e.d¡Z2e &e.d¡Z3e &e.d¡Z4e &e.d¡Z5e &e.d¡Z6ddddgdd d!d"d#gd$d%d&d'gd(d)d*d+gd,œZ7d-d.gZ8d/d d0d1gd2d3d4d5d6gd7d8d9d:gd;d<d=d>gd,œZ9d?gZ:dZ;d@dAgZ<e%ej= >dBe1e8e7fe2e:e9fe3e<e;fg¡dCdD„ ƒƒZ?e%ej= >dEe1e2e3g¡dFdG„ ƒƒZ@e%dHdI„ ƒZAdJdK„ ZBe%dLdM„ ƒZCe%ej= >dNdO¡dPdQ„ ƒƒZDe%dRdS„ ƒZEej= FdT¡e!dUdVƒe%ej= >dWd dXdYe5dZd[d\d]d^gfd_d`dae6dbdcgfg¡ddde„ ƒƒƒƒZGej= FdT¡e!dUdVƒe%dfdg„ ƒƒƒZHe%dhdi„ ƒZIe%ej= >dje/dkdlfe0dmdlfe2dndofe3dpdqfg¡drds„ ƒƒZJe%ej= >dte/dufe0dvfg¡dwdx„ ƒƒZKdS )yé    )ÚPathN)ÚdatetimeÚtimezone)Úassert_array_equalÚassert_allclose)Úio)Úfind_eventsÚ
pick_typesÚpick_channels)Úread_raw_egiÚread_evokeds_mffÚread_raw_fif)ÚFIFF)Ú_combine_triggers)Ú_test_raw_reader)Úrequires_versionÚobject_diff)Ú	data_pathÚrequires_testing_dataÚdataztest_egi.rawztest_egi.txtF)ÚdownloadÚEGIztest_egi.mffztest_egi_pns.mffztest_egi_multiepoch_paused.mffztest_egi_multiepoch_eprime.mffzw1337_20191014_105416.mffztest_egi_evoked.mffztest_egi_evoked_cat1.txtztest_egi_evoked_cat2.txtgL7‰A`å@gB`åÐ"Û'@gú~j¼tÓ,@g+‡Ù0@g–C‹lç{@g‘í|?5Þ @g°rh‘í¼*@gáz®G¡/@gòÒMb2@gfffffæ@gÏ÷Sã¥Û%@g‡ÙÎ÷Ó*@g¦›Ä °²/@g¼t“– @gX9´Èvþ)@gX9´Èö.@g^ºIë1@)ZAM40ZbginzFIX+zITI+)g    Àå3Ag    à	;A)g    „„`Ag    èsgAgV-2@g¬Zd;ß%@g1¬Z¤*@gÏ÷Sã¥›@g /Ý$†@gZd;ßOÍ#@gð§ÆK7‰(@g°rh‘í<-@g333333@g=
×£p½@g9´Èv¾ß#@g¾Ÿ/Ý¤(@g=
×£p½@g¨ÆK7‰#@gÃõ(\�(@gÕxé&1È,@)g     ‚4Ag    à†;A)g    ZðtAg    IƒA)g    z�Ag   €dL•Azfname, skip_times, event_timesc              	   C   s   | t krt| ƒ ¡ }n*tjtdd�� tt| ddd�}W 5 Q R X |jd dksRt‚t	|j
ƒt	|ƒksht‚|dkr”tjtd	d�� t|ƒ W 5 Q R X n\t|ƒ}| ¡ D ]J}t t || ¡|jd  ¡}t||dd…d
f |j| kdf |ƒ q¤t|jdddd�}t t t	|jƒ¡|¡}t|j
ƒD ]Ö\}	}
|
d dk�s>t‚| |
d |
d |
d  g¡\}}|dd…||…f \}}t|| dƒ |dk	�rº|jd dk�s¤t‚t || d¡�rºt‚|d |jd  d |d |jd  d f}|||	 k�s$t‚�q$dS )zTest EGI MFF with pauses.úAcquisition skips detected©ÚmatchFÚless)Úinput_fnameÚtest_scalingÚ	test_rankÚsfreqç     @o@NzConsider using .*events_fromé   r   T© )ZmegZstimÚexcludeÚdescriptionZBAD_ACQ_SKIPÚonsetÚdurationç        éÿÿÿÿúSTI 014é   g    €„.A)Úegi_pause_w1337_fnamer   Ú	load_dataÚpytestÚwarnsÚRuntimeWarningr   ÚinfoÚAssertionErrorÚlenÚannotationsÚraisesÚ
ValueErrorr   ÚkeysÚnpÚfloorÚarrayr   Úevent_idr	   Ú	setdiff1dZarangeÚch_namesÚ	enumerateZtime_as_indexZarray_equal)ÚfnameZ
skip_timesZevent_timesÚrawÚeventsZ
event_typeZ
ns_samplesZ
stim_picksZother_picksÚiiZannotÚstartÚstopr   Ú_Úskipr"   r"   úX/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/io/egi/tests/test_egi.pyÚtest_egi_mff_pause9   sJ    þÿ þÿ
ÿrG   r>   c              	   C   s`   |d }t | dd� ¡ }t | ƒ}tjtdd�� | |¡ W 5 Q R X ~t|ƒ ¡ }t||ƒ dS )z:Test that on-demand of all short segments works (via I/O).ztest_raw.fifT©Úpreloadr   r   N)r   Úget_datar-   r.   r/   Úsaver   r   )r>   Útmp_pathZ
fname_tempÚraw_datar?   Z
raw_data_2r"   r"   rF   Útest_egi_mff_pause_chunksm   s    rN   c               	   C   s(  d} d}d}t tdd�}dt|ƒks(t‚|jdks6t‚dd	d
dddg}tt t|ddd�}|jd dksjt‚t|jd ƒ|| |  ksˆt‚|jd d d tj	ks¤t‚|jd d d tj
ksÀt‚|jd d d tjksÜt‚|jd d d dksöt‚|jd tjk�st‚|jd d d }t|jdd�}t|ƒ||  k�sBt‚t|jd dgƒ}t ||¡}|D ]R}|jd | d  }	|	dd…  ¡ �sœt|	dd… ƒ‚t|	dd!… ||› d"� �qd|jd# d$ d%k�sÐt‚d&|k�sÞt‚d'd(„ |jD ƒ}
t|
ƒ|k�s t‚d)|jk�st‚t|d)d*�}t|ƒd+k�s.t‚t |dd…df ¡d dk�sRt‚t |dd…df ¡d dk�svt‚t |dd…d,f ¡d dk�sšt‚tjtd-d.�� t td/gd� W 5 Q R X tjtd-d.�� t td0gd1� W 5 Q R X t|dƒD ].\}}||jk�st‚|j| |k�sôt‚�qôdS )2z+Test importing EGI MFF simple binary files.r*   é€   é   N©ÚincludeÚRawMffÚsingleZDIN1ZDIN2ZDIN3ZDIN4ZDIN5ZDIN7úEEG %03dF)r   rR   Úchannel_namingr   r   g     @�@Údigr   ÚidentÚkindr(   é�   Úcustom_ref_appliedÚrT©Úeegr<   ÚVREFÚchsÚlocé   )Úerr_msgÚdevice_infoÚtypezHydroCel GSN 128 1.0r^   c                 S   s   g | ]}d |kr|‘qS )ZEEGr"   ©Ú.0Úcr"   r"   rF   Ú
<listcomp>¥   s      z#test_io_egi_mff.<locals>.<listcomp>r)   ©Zstim_channelé   r!   zCould not find eventr   ÚFooÚBar)r#   )r   Úegi_mff_fnameÚreprr1   Úorig_formatr   r0   r2   r   ÚFIFFV_POINT_LPAÚFIFFV_POINT_CARDINALÚFIFFV_POINT_EEGZFIFFV_MNE_CUSTOM_REF_ONr	   r
   r7   r;   Úanyr   r<   r   Úuniquer-   r4   r5   r=   r:   )Ún_refÚn_eegÚn_cardr?   rR   Zref_locZ	eeg_picksZref_pickÚira   Úeeg_chanr@   rA   Úkr"   r"   rF   Útest_io_egi_mff   sZ     þ"$$$r|   c               	   C   s¦  t tƒ�} t | ¡}W 5 Q R X |d }|dd… }|d9 }tjtdd�� ttdd�}W 5 Q R X tjtdd�� tt	tƒdd�}W 5 Q R X dt
|ƒksšt‚|dd	… \}}t||ƒ t||d
d� ddg}ttt|ddd�}d|ksèt‚|jdksöt‚dd„ |jD ƒ}t|ƒd	k�st‚t|jdd�}t|ƒd	k�s8t‚d|jk�sHt‚t|dd�}	t|	ƒdk�sft‚t |	dd…df ¡d dk�sŠt‚t |	dd…df ¡d dk�s®t‚t |	dd…df ¡d dk�sÒt‚t ddddgddddgg¡}
t ddddgddddgg¡}
ddg}t|
|ƒ}tt |¡t dddg¡ƒ tjtttdgdd� tjtttdgdd� t|dƒD ].\}}||jk�sŠt‚|j| |k�srt‚�qrdS ) z'Test importing EGI simple binary files.r   r*   Nç�íµ ÷Æ°>zDid not find any event coder   rQ   ZRawEGIé   g»½×Ùß|Û=©ÚatolZTRSPZXXX1r   F)r   rR   r   r   r^   rT   c                 S   s   g | ]}|  d ¡r|‘qS )ÚE)Ú
startswithrf   r"   r"   rF   ri   Õ   s     
 ztest_io_egi.<locals>.<listcomp>Tr]   r)   rj   r!   é   é   rl   )rR   rI   rm   )r#   rI   )ÚopenÚegi_txt_fnamer7   Úloadtxtr-   r.   r/   r   Ú	egi_fnamer   ro   r1   r   r   rp   r<   r2   r	   r0   r   ru   r9   r   r   r4   r5   r=   r:   )Zfidr   Útr?   Z	data_readZt_readrR   rz   Zpicksr@   ÚtriggersZ
events_idsZnew_triggerrA   r{   r"   r"   rF   Útest_io_egi¸   sZ    

 þ$$$
ÿÿr‹   c              	      s’  t tdddd�‰dtˆƒks t‚tˆjdddd�}t|ƒdksBt‚‡fdd	„|D ƒ}d
ddddddg}tt tddddd� ||ks†t‚dddddddg}t 	t
dd¡}t |¡}t|||ƒD ]f\}}‰ td |¡ƒ ‡ fdd	„| ¡ D ƒd }	ˆjd  | d! }
||	 |
 }ˆ| d }t||ƒ q¼| d" }t t|¡ t |dd#� t t 	|d$¡¡ t t 	|d%¡¡ tjtd&d'�� t |dd#� W 5 Q R X dS )(z%Test importing EGI MFF with PNS data.NTÚerror©rR   rI   ÚverboserS   ©ÚecgZbioÚemgé   c                    s   g | ]}ˆ j | ‘qS r"   )r<   ©rg   Úx)r?   r"   rF   ri   ù   s     z'test_io_egi_pns_mff.<locals>.<listcomp>úResp. TemperatureúResp. PressureÚECGúBody PositionúResp. Effort ChestúResp. Effort AbdomenúEMG-LegrU   r   F)r   rV   rŽ   r   r   ÚResp_TemperatureÚResp_PressureÚBody_PositionÚResp_Effort_ChestÚResp_Effort_AbdomenÚEMGLegr   útest_egi_pns.matú
Testing {}c                    s   g | ]}ˆ |kr|‘qS r"   r"   r“   ©Úmat_namer"   rF   ri     s      r   r`   Úcalztemp.mff©rŽ   z	info1.xmlzsignal1.binzCould not find any EEGr   )r   Úegi_mff_pns_fnamero   r1   r	   r0   r2   r   ÚopÚjoinÚtesting_pathÚsioÚloadmatÚzipÚprintÚformatr6   r   ÚshutilÚcopytreeÚosÚremover-   r4   ÚFileNotFoundError)rL   Ú	pns_chansÚnamesÚ	pns_namesÚ	mat_namesÚegi_fname_matÚmcÚch_nameÚch_idxÚmc_keyr¦   Úmat_datarM   Znew_mffr"   )r¥   r?   rF   Útest_io_egi_pns_mffñ   s\    ÿú ýù	
rÀ   rI   )TFc              	      sp  t  tdd¡}tjtdd�� t|d| dd�}W 5 Q R X t|jƒdksJt	‚t
|jjd	gƒ t
|jjd
gƒ t  tdd¡}t |¡}t|jdd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g}t|||ƒD ]v\}}	‰ td |¡ƒ ‡ fdd„| ¡ D ƒd }
|jd  |	 d! }||
 | }d|dd…d"f< ||	 d }t||ƒ qôdS )#z+Test importing EGI MFF with PNS data (BUG).r   ztest_egi_pns_bug.mffzEGI PSG sample bugr   NÚwarningr�   r*   gü©ñÒMbp?gL7‰A`å+@r¢   Tr�   r•   é   r–   r—   r˜   r™   rš   r›   rœ   r�   rž   rŸ   r    r¡   r£   c                    s   g | ]}ˆ |kr|‘qS r"   r"   r“   r¤   r"   rF   ri   E  s      z+test_io_egi_pns_mff_bug.<locals>.<listcomp>r   r`   r¦   r(   )r©   rª   r«   r-   r.   r/   r   r2   r3   r1   r   r&   r%   r¬   r­   r	   r0   r®   r¯   r°   r6   r   )rI   Zegi_fname_mffr?   rº   r»   r¶   r¸   r¹   r¼   r½   r¾   r¦   r¿   rM   r"   r¤   rF   Útest_io_egi_pns_mff_bug$  sF    ÿ



ú


ù
rÃ   c                  C   sR   t tdd�} |  dd¡ |  ¡  t tdd�}| dd¡ | ¡  t| j|jƒ dS )z+Test crop non-preloaded EGI MFF data (BUG).FrH   g     €1@g     €4@TN)r   rn   Úcropr,   r   Ú_data)r?   Zraw_preloadr"   r"   rF   Útest_io_egi_crop_no_preloadM  s    rÆ   zignore::FutureWarningZmffpyz0.5.7zidx, cond, tmax, signals, badsz
Category 1gü©ñÒMb�?ZE8ZE11ZE17ZE28r—   r*   z
Category 2r'   r_   ÚEMGc              	   C   sÒ  d}d}d}d}t tƒ}	t|	ƒdks(t‚t tddgd�}	t|	ƒdksHt‚t t¡�}
t tdd� W 5 Q R X d}t|
jƒ|ks€t‚t t¡�}
t tdd� W 5 Q R X d	}t|
jƒ|ks¸t‚t t	¡�}
t td
d� W 5 Q R X d}t|
jƒ|ksðt‚t t|d�}t t| d�}||fD ]F}|j
|k�s$t‚|jdk�s4t‚|jdk�sDt‚|j|k�st‚�qtj|dd�jd }t|j|dd� t|j|dd� t|j|jƒdk�s¤t‚|jd |k�s¸t‚|jd |k�sÌt‚t|jd ƒ|| | k�sìt‚d|jd k�s t‚d|jd k�st‚d|k�s"t‚d|k�s0t‚t|jdg d�}t|ƒ|| k�sVt‚|jd || | k�srt‚|jd dk�s†t‚|jd �r–t‚t|jd ƒ|| | k�s¶t‚|jd  d! d"k�sÎt‚d#S )$zTest reading evoked MFF file.r~   r*   rP   r!   r   )Ú	conditionzInvalid Conditionz�Invalid value for the 'condition' parameter provided as category name. Allowed values are 'Category 1' and 'Category 2', but got 'Invalid Condition' instead.z]"condition" parameter (2), provided as epoch index, is out of range for available epochs (2).g333333ó?z0"condition" parameter must be either int or str.r'   )Zndminr}   gê-�™—q=r   Ú r$   Úbadsr<   r—   rÇ   r�   r‘   T)r^   r#   Znchanr   r    r[   rW   rd   re   zHydroCel GSN 256 1.0N)r   Úegi_mff_evoked_fnamer2   r1   r-   r4   r5   ÚstrÚvalueÚ	TypeErrorÚcommentZnaveZtminÚtmaxr7   r‡   ÚTr   r   r   r0   r	   )ÚidxZcondrÐ   ZsignalsrÊ   rw   rv   rx   Zn_pnsZevokedsÚexc_infoÚmessageZevoked_condZ
evoked_idxZevokedr   Zpick_eegr"   r"   rF   Útest_io_egi_evokeds_mffY  sZ      rÕ   c               	   C   sr   t  t¡�} ttƒ W 5 Q R X d}t| jƒ|ks4t‚t  t¡�} ttƒ W 5 Q R X t› d�}t| jƒ|ksnt‚dS )z7Test errors are thrown when reading invalid input file.z0fname must be an MFF file with extension ".mff".zJ is a continuous MFF file. fname must be the path to an averaged MFF file.N)	r-   r4   r5   r   rˆ   rÌ   rÍ   r1   rn   )rÓ   rÔ   r"   r"   rF   Útest_read_evokeds_mff_bad_inputž  s    
rÖ   c                  C   sj  t tƒj} tjtjtjf}t|ƒD �]\}}| d | }|d tjksJt	‚|d |ksZt	‚|d }|dkr¨d|d    k r„dk sŽn t	dƒ‚t
|d	d
… dddd� q"|d	krîd|d	   k rÈdk sÒn t	dƒ‚t
|d
d
d… dddd� q"|dksút	‚d|d   k �rdk �s n t	dƒ‚t
|d	d
… dddd� q"| d dd
… D ]}|d tjk�sJt	‚�qJd
S )z2Test that EGI coordinate frame is changed to head.rW   rY   rX   r\   r   gš™™™™™©?gš™™™™™¹?ZLPAr*   NgH¯¼šò×z>)r€   rc   g)\�Âõ(¼?ZNasionr!   ZRPArP   )r   rn   r0   r   rq   ZFIFFV_POINT_NASIONZFIFFV_POINT_RPAr=   rr   r1   r   rs   )r0   Zwant_identsrA   ZwantÚdra   r"   r"   rF   Útest_egi_coord_frame°  s*    
ý$"&rØ   zfname, timestamp, utc_offsetz 2017-02-23T11:35:13.220824+01:00z+0100z 2017-09-20T09:55:44.072000+01:00z 2018-07-30T10:46:09.621673-04:00z-0400z 2019-10-14T10:54:27.395210-07:00z-0700c           	      C   sŽ   t | dd�}t |d¡}| tj¡}t| d¡ƒ}t|jd  d¡ƒ}|| }|jd |ks`t	‚|jd |ksrt	‚|t|dd… ƒksŠt	‚dS )	zTest meas date conversion.rÁ   r§   z%Y-%m-%dT%H:%M:%S.%f%zz%HZ	meas_dateÚ
utc_offsetNéþÿÿÿ)
r   r   ÚstrptimeÚ
astimezoner   ÚutcÚintÚstrftimer0   r1   )	r>   Ú	timestamprÙ   r?   ÚdtZmeasdateZ
hour_localZhour_utcZlocal_utc_diffr"   r"   rF   Útest_meas_dateÌ  s    	râ   zfname, standard_montagezGSN-HydroCel-129zGSN-HydroCel-257c                 C   sH   t | dd�}|jd }|j|ddd� |jd }t|ƒt|ƒksDt‚dS )z Test setting a standard montage.rÁ   r§   rW   TÚignore)Zmatch_aliasZ
on_missingN)r   r0   Zset_montager2   r1   )r>   Zstandard_montager?   Zdig_before_monZdig_after_monr"   r"   rF   Útest_set_standard_montageà  s
    

rä   )LÚpathlibr   Úos.pathÚpathr©   r³   r±   r   r   Únumpyr7   Znumpy.testingr   r   r-   Zscipyr   r¬   Zmner   r	   r
   Zmne.ior   r   r   Zmne.io.constantsr   Zmne.io.egi.egir   Zmne.io.tests.test_rawr   Z	mne.utilsr   r   Zmne.datasets.testingr   r   rª   ÚdirnameÚabspathÚ__file__Úbase_dirrˆ   r†   r«   Zegi_pathrn   r¨   Zegi_pause_fnameZegi_eprime_pause_fnamer+   rË   Zegi_txt_evoked_cat1_fnameZegi_txt_evoked_cat2_fnameZegi_pause_eventsZegi_pause_skipsZegi_eprime_pause_eventsZegi_eprime_pause_skipsZegi_pause_w1337_eventsZegi_pause_w1337_skipsÚmarkZparametrizerG   rN   r|   r‹   rÀ   rÃ   rÆ   ÚfilterwarningsrÕ   rÖ   rØ   râ   rä   r"   r"   r"   rF   Ú<module>   sÄ   



ý


ýý.ý
89
2'

ÿÿý<

üþ