U
    f»{j=B  ã                
   @   sè  d dl mZ d dlZd dlmZmZmZm	Z	 d dl
Z
d dlmZ d dlZd dlZd dlmZ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mZ d d	lmZ d d
lm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z+ e ,e -e+¡d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¡Z6e ,e.d¡Z7e ,e.d¡Z8e ,e.d¡Z9ej:j;j<dd�Z<e ,e<dd ¡Z=e ,e<dd!¡Z>e ,e<dd"¡Z?e ,e<dd#¡gZ@e@e ,e<dd$¡g7 Z@e@e ,e<dd%¡g7 Z@e@e ,e<dd&¡g7 Z@e ,e<dd'¡ZAed(d)„ ƒZBed*d+„ ƒZCd,d-„ ZDee
jE Fd.e>d/fe?d/fg¡d0d1„ ƒƒZGd2d3„ ZHd4d5„ ZId6d7„ ZJd8d9„ ZKd:d;„ ZLee
jE Fd<e@d  d=d>fe@d? d@dAfe@dB dCdDfe@dE dFdGfg¡dHdI„ ƒƒZMedJdK„ ƒZNdS )Lé    N)Úassert_array_almost_equalÚassert_array_equalÚassert_equalÚassert_allclose)Úlinalg)Ú
pick_typesÚEpochsÚfind_eventsÚread_events)Úrequires_testing_data)Úapply_trans)Úassert_dig_allclose)Úread_raw_fifÚread_raw_kitÚread_epochs_kit)ÚFIFF)Úget_kit_info)Úread_sns)ÚKIT)Ú_test_raw_reader)Ú_get_ico_surface)Ú__file__ZtestsÚdataztest.sqdztest_umd-raw.sqdztest-epoch.rawztest-eve.txtztest_mrk.sqdztest_mrk_pre.sqdztest_mrk_post.sqdztest_elp.txtztest_hsp.txtztest.elpztest.hspF)Údownloadr   ztest_as-raw.conz%ArtificalSignalData_Yokogawa_1khz.conz"ArtificalSignalData_RICOH_1khz.conz)Example_PQA160C_1001-export_anonymyze.conz-Example_RICOH160-1_10020-export_anonymyze.conz-Example_RICOH160-1_10021-export_anonymyze.conz-010409_Motor_task_coregist-export_tiny_1s.conzdata_berlin.conc                    s   t  ttt¡ t  ttt¡ t  ttttt	¡ t  tttdddt
tdddƒƒ¡ t  tttdddt
tdddƒƒddd	¡
 ttttgt	tƒ}|jd
 dksœt‚ttttt	tt
tdddƒƒddd�‰dtˆƒksÐt‚t|jd tjƒ ttˆjd ƒdƒ dtjdtjdtjdtjdifdtjdtjdtjdiff}|D ],\‰ }‡ ‡fdd„| ¡ D ƒ}t||ƒ �q4tttt	tddd�}ˆ||fD ]B‰t ˆjddd	dd�}ˆ| \}}t!j"ˆ #¡ dd �}	t$||	ƒ �q€t ˆjd	dd!�}
t% &t'd"¡}t(|d	d#�}t |jd	d	dd$�}|| \}}ˆ|
 \}}t% &t'd%¡}t)j* +|¡d& }||
 }t,||ƒ t ˆjd	d	ddd'�}
ˆ|
 \}}t,||ƒ ttt-d(d)� tt-ƒ‰ˆjd
 d*k�s˜t‚tˆjd tj.ƒ ttˆjd ƒdƒ |D ],\‰ }‡ ‡fd+d„| ¡ D ƒ}t||ƒ �qÂtt/dd,�‰ˆjd
 d-k�st‚tˆjd tj0ƒ tˆjd d. d/ d0ƒ tˆjd d. d tjƒ tˆjd d. d tjƒ tˆjd d d/ d1ƒ tˆjd d d tjƒ tˆjd d d tjƒ tˆjd d2 d/ d3ƒ tˆjd d2 d tj1ƒ tˆjd d2 d tj2ƒ t$t3ˆƒd4d5dggƒ dS )6zTest reading raw kit files.NéÈ   é¾   éÿÿÿÿé§   éŸ   Ú*é   TÚdescriptionz5NYU 160ch System since Jan24 2009 (34) V2R004 EQ1160Cú+)Úinput_fnameZmrkZelpZhspÚstimÚslopeZ
stimthreshZRawKITÚkit_system_idÚchséÁ   Úkindé�   é   é    Ú	coil_typeé!   c                    s,   i | ]$‰ ˆ t ‡ ‡fd d„ˆjd D ƒƒ“qS )c                 3   s   | ]}|ˆ ˆ kV  qd S ©N© ©Ú.0Úch©Úid_Úlabelr0   úX/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/io/kit/tests/test_kit.pyÚ	<genexpr>X   s     ú'test_data.<locals>.<dictcomp>.<genexpr>r'   ©ÚsumÚinfo©r2   )r6   Úraw_py©r5   r7   Ú
<dictcomp>X   s   ÿ ztest_data.<locals>.<dictcomp>ú<F)r$   ÚpreloadZbads)ÚmegÚref_megr$   Úexcludeé   )Zndmin)rC   rE   útest_bin_raw.fif©rB   )rC   r$   rE   ztest_Ykgw.matr   )rC   r$   rD   rE   Úless)r#   Z	test_rankzbUniversity of Maryland/Kanazawa Institute of Technology/160-channel MEG System (53) V2R004 PQ1160Rc                    s,   i | ]$‰ ˆ t ‡ ‡fd d„ˆjd D ƒƒ“qS )c                 3   s   | ]}|ˆ ˆ kV  qd S r/   r0   r1   r4   r0   r7   r8   ƒ   s     r9   r'   r:   r=   )r6   Úrawr?   r7   r@   ƒ   s   ÿ ©r%   z^Academia Sinica/Institute of Linguistics//Magnetoencephalograph System (261) V2R004 PQ1160R-N2éd   Úch_namezMEG 101zMEG 158é    zEEG 001é[   r   )4ÚpytestÚraisesÚ	TypeErrorr   Úepochs_pathr   Úsqd_pathÚ
ValueErrorÚmrk_pathÚelp_txt_pathÚlistÚrangeÚ	mrk2_pathÚ	mrk3_pathÚhsp_txt_pathr<   ÚAssertionErrorr   Úreprr   r   ZSYSTEM_NYU_2010Úlenr   ZFIFFV_MEG_CHZFIFFV_REF_MEG_CHZFIFFV_MISC_CHZFIFFV_STIM_CHÚFIFFV_COIL_KIT_GRADZFIFFV_COIL_KIT_REF_MAGZFIFFV_COIL_NONEÚkeysr   ÚnpÚarrayZread_stim_chr   ÚopÚjoinÚdata_dirr   ÚscipyÚioZloadmatr   Úsqd_umd_pathZSYSTEM_UMD_2014_12Úsqd_as_pathZSYSTEM_AS_2008ZFIFFV_EEG_CHÚFIFFV_COIL_EEGr	   )Útmp_pathZraw_mrkZkit_channelsÚtargetÚactualZraw_stimZ	stim_pickZstim1Ú_Zstim2Zpy_picksÚraw_binZ	bin_picksZdata_binZdata_pyZ	data_Ykgwr0   )r6   rJ   r>   r7   Ú	test_data:   sÌ    ÿ   ÿÿÿ  ý   ÿ  þþÿ
 ÿ
 ÿ
ÿ
ÿ
ÿÿ
ÿrq   c           	   
   C   s  | t  t¡ }ttdd�\}}|d tj d }t|dƒ�r}ttdƒ�\}| | |¡¡ t	 
|dd¡\}}|dksvt‚d	}t	 ||gd¡ |¡ | | ¡ ¡ W 5 Q R X W 5 Q R X tjtd
d�� t|ƒ W 5 Q R X t t¡�, tjtdd�� t|dd� W 5 Q R X W 5 Q R X dS )z)Test our warning about an unknown format.F)Zallow_unknown_formatÚdirsÚoffsetÚwbÚrbz<i4rF   r    z"SQD file format V1R000 is not offi©ÚmatchzForce loadingTN)rd   ÚbasenameÚ
ricoh_pathr   r   ZDIR_INDEX_SYSTEMÚopenÚwriteÚreadrb   Úfromfiler]   rc   ÚtofilerP   rQ   rU   r   Ú	ExceptionÚwarnsÚRuntimeWarning)	rl   Úfnamero   Zkit_infoZn_beforeZfoutZfinÚversionÚrevisionr0   r0   r7   Útest_unknown_format™   s     "r…   c                 C   sl   d}t  dt j | | ¡| }t  t  | |¡¡}t  dt j | | | ¡| }t| |d|d |d� d S )NTy               @rF   gš™™™™™©?çü©ñÒMbP?)ÚrtolÚatolÚerr_msg)rb   ÚexpÚpiZangleÚdotÚcosr   )r   ÚtÚfreqÚampÚmsgZ__tracebackhide__ZsinusoidZphaser0   r0   r7   Ú_assert_sinusoid°   s
     r’   zfname, descz%Meg160/Analysis (1001) V3R000 PQA160Cc              	      sV  t |dd�}|jd dkst‚t |ddd�}|jd |ks>t‚t|jd	 d
d|jd   ƒ |jd dksnt‚t|jddd�‰ tˆ ƒdksŽt‚t|jd ƒdtˆ ƒ d ks°t‚‡ fdd„t|jd ƒD ƒ}|ddgksÜt‚t	dd„ |jd D ƒƒrøt‚t|jd d ddddgd d!d"d#gd$d%d&d'gd(d(d(dggd)d*� | 
¡ }|jd d d+ tjk�s^t‚t|d |jd,d-d.ƒ t|d/d0… d(d1d*� |jd d2 d+ tjk�s¨t‚t|d0 |jd3d/d4ƒ t|d5d6… d(d7d*� |jd d2 d+ tjk�sòt‚|d2 }t| ¡ d8d)d*� || ¡  }t||jdd9d:ƒ t|d;d	… d(d7d*� t|d	 d<d=d*� d>S )?zBTest reading channel names and dig information from Ricoh systems.T)Ústandardize_namesr   zMEG 001FÚdebug)r“   Úverboser!   r   g      @g      ð?ÚsfreqZLF31)rC   Úeegé-   Údigé   rF   c                    s8   g | ]0\}}|ˆ kr|d  dd… dk  ¡ r|d ‘qS )ÚlocNr+   r   rM   )Úall)r2   Úcir3   ©Z	eeg_picksr0   r7   Ú
<listcomp>È   s     ÿz#test_ricoh_data.<locals>.<listcomp>r'   zEKG+ÚEc                 s   s   | ]}t  |d  d¡V  qdS )Úrç        N)rb   Zallclose)r2   Údr0   r0   r7   r8   Ë   s     z"test_ricoh_data.<locals>.<genexpr>Ú
dev_head_tÚtransgö•é)òï?gXÉÇî%­¿gI€šZ¶Ö‡?g9CqÇ›üV?gq©J[\ã«?g\ðO©’ï?gíŸ§ƒ¤Ã?g/n£¼r?gÛ…æ:�´”¿gCF—7‡Ã¿g¿IÓ hžï?gué_’Ê“?r¢   gñhãˆµøä>)rˆ   r-   é
   gê-�™—q=z1 pT 10 Hz MEGr    rN   g‚vIhÂ%<=éº   é   z1 V 5 Hz analogé¡   é¹   g#B’¡œÇ;g-Cëâ6Z?g-Cëâ6
?z50 uV 8 Hz EEGé»   g     Ðo@gR¸…ëQà?N)r   Zch_namesr]   r<   r   Útimesr   r_   Ú	enumerateÚanyÚget_datar   r`   r’   rk   Úmean)rl   r‚   ÚdescrJ   Zbad_digr   Zeeg_datar0   rž   r7   Útest_ricoh_data¸   sF    "



ýûr²   c                  C   sP   t tdd�} ttƒ}t| |ddddd�}| ¡ }tttƒ}| ¡ }t||ƒ dS )zTest reading epoched SQD file.N©r$   r   gòÒMbX¹?)ZtminZtmaxZbaseline)	r   rT   r
   Úevents_pathr   r¯   r   rS   r   )rJ   ÚeventsZ
raw_epochsZdata1ZepochsZdata11r0   r0   r7   Útest_epochså   s    
r¶   c               	   C   sø   ddd„} t tƒ}tt|ddd�| dddddd	ƒƒ t td
d�}tt|ddd�| d	dd	dd	ƒƒ t tdd
d�}tt|ddd�| d	dd	dd	ƒƒ t tdd
dd�}tt|ddd�| d	dd	dd	ƒƒ t ttddƒd
dd�}tt|ddd�| d	dd	dd	ƒƒ dS )z-Test creating stim channel from raw SQD file.Nc                 S   s@   d| |gd||gd||gd||gg}|d k	r<|  d||g¡ |S )Ni  i  i  i  iÐ  )Úappend)ÚaÚbÚcr£   ÚeÚfÚoutr0   r0   r7   Úevtsò   s    $ztest_raw_events.<locals>.evtsÚstepT)ÚoutputZconsecutiveéÿ   éþ   r   r"   rK   r    rA   )r$   r%   é€   Zchannel)r$   r%   Z	stim_coderN   é¢   )N)r   rT   r   r	   rY   )r¾   rJ   r0   r0   r7   Útest_raw_eventsð   s.    
ÿÿÿÿÿÿrÅ   c               	   C   sn  t ttttdd�} tt td¡ƒ}t	 
dd„ | jd d dd	… D ƒ¡}|dd…dd
…f  d9  < tt td¡ƒ}t||dƒ t| jd d |jd d dƒ t| jd |jd ƒD ],\}}|d  d¡r¶t|d |d dd� q¶tttg}t t|ttdd� |j ¡ � |jd dd… |jd< W 5 Q R X | j ¡ � | jd dd… | jd< W 5 Q R X t| j|jƒ dS )zTest raw kit loc.rA   r³   rG   c                 S   s   g | ]}|d  ‘qS )r›   r0   r1   r0   r0   r7   rŸ     s     ztest_ch_loc.<locals>.<listcomp>r   ZchannelsNrN   r+   ç     @�@zsns.txtrF   r¤   r¥   é   r'   rM   ZMEGr›   ©ÚdecimalFrH   r™   rš   )r   rT   rV   rW   r\   r   rd   re   rf   rb   rc   Z_raw_extrasr   r   r<   ÚzipÚ
startswithrZ   r[   Z_unlockr   )r>   rp   Zch_pyZch_snsZpy_chZbin_chZmrksr0   r0   r7   Útest_ch_loc  s0    
ÿ
ÿ ÿ
""rÌ   c                  C   sº   t ttttƒ} t ttttƒ}t dd„ | j	d D ƒ¡}t dd„ |j	d D ƒ¡}t
||dd� | j	d d }|j	d d }t
||dd� tt |¡|ƒ}tt |¡|ƒ}t
||dd� d	S )
z<Test KIT usage of *.elp and *.hsp files against *.txt files.c                 S   s   g | ]}|d  ‘qS ©r¡   r0   ©r2   Z	dig_pointr0   r0   r7   rŸ   3  s     z test_hsp_elp.<locals>.<listcomp>r™   c                 S   s   g | ]}|d  ‘qS rÍ   r0   rÎ   r0   r0   r7   rŸ   4  s     r¨   rÈ   r¤   r¥   N)r   rT   rV   rW   r\   Úelp_pathÚhsp_pathrb   rc   r<   r   r   r   Úinv)Zraw_txtZraw_elpZpts_txtZpts_elpZ	trans_txtZ	trans_elpZpts_txt_in_devZpts_elp_in_devr0   r0   r7   Útest_hsp_elp-  s    rÒ   c              	   C   s  t dƒd d }|d }t| ƒ}t |d¡}t ||¡ tjtdd�� t	t
tt|ƒ}W 5 Q R X t dd	„ |jd
 D ƒ¡dd… }t|ƒdks’t‚t tj|tj|dd� d dd�¡}t tj|tj|dd� d dd�¡}t |¡}	t |¡}
t|	|
dd� dS )z=Test decimation of digitizer headshapes with too many points.r¨   ZrrrL   rÆ   ztest_sphere.txtz)was automatically downsampled .* FastScanrv   c                 S   s   g | ]}|d  ‘qS rÍ   r0   )r2   r™   r0   r0   r7   rŸ   R  s     z!test_decimate.<locals>.<listcomp>r™   rš   Niˆ  r   )ZaxisrF   r    r+   rÈ   )r   Ústrrd   re   rb   ZsavetxtrP   r€   r�   r   rT   rV   rW   rc   r<   r_   r]   Úsqrtr;   r°   r   )rl   Zhsp_mmZhsp_mÚtempdirZsphere_hsp_pathrJ   Zhsp_decÚdistZdist_decZhsp_radZhsp_dec_radr0   r0   r7   Útest_decimateB  s     ÿ"&&

r×   zfname, desc, system_idz%Meg160/Analysis (1001) V2R004 PQA160Cié  r    z*RICOH MEG System (10020) V3R000 RICOH160-1i$'  rF   z*RICOH MEG System (10021) V3R000 RICOH160-1i%'  r+   z`Yokogawa Electric Corporation/MEG device for infants/151-channel MEG System (903) V2R004 PQ1151Ri‡  c                 C   s4   t t| d�}|jd |kst‚|jd |ks0t‚dS )z#Test reading basics and system IDs.)r#   r!   r&   N)r   r   r<   r]   )r‚   r±   Z	system_idrJ   r0   r0   r7   Útest_raw_system_ida  s    rØ   c                  C   sÄ   t tƒ} | jd dkst‚| jd dks,t‚| jd dks>t‚| jd dksPt‚| jd	 d
ksbt‚ttd| jd	  ƒƒ}|  d||d ¡d }t|ddd� |  d||d ¡d }t|ddd� dS )zTest data from Berlin.r!   z\Physikalisch Technische Bundesanstalt, Berlin/128-channel MEG System (124) V2R004 PQ1128R-N2r&   é|   Zhighpassr¢   Zlowpassg      i@r–   g     @@g…ëQ¸Å<@zMEG 003r    )r   r   gl¡ Œ£½r†   )r‡   ZE14gffffffÀN)r   Úberlin_pathr<   r]   ÚintÚroundr¯   r   )rJ   ÚnrC   r—   r0   r0   r7   Útest_berlint  s    rÞ   )OÚos.pathÚpathrd   Únumpyrb   Znumpy.testingr   r   r   r   rP   rg   r   Zscipy.ioZmner   r   r	   r
   Zmne.datasets.testingr   Zmne.transformsr   Z	mne.utilsr   Zmne.ior   r   r   Zmne.io.constantsr   Zmne.io.kit.kitr   Zmne.io.kit.coregr   Zmne.io.kit.constantsr   Zmne.io.tests.test_rawr   Zmne.surfacer   Z
mne.io.kitr   Z_KIT_INIT_FILEre   Údirnamerf   rT   ri   rS   r´   rV   rZ   r[   rW   r\   rÏ   rÐ   ZdatasetsZtestingZ	data_pathrj   Zyokogawa_pathry   Zricoh_systems_pathsrÚ   rq   r…   r’   ÚmarkZparametrizer²   r¶   rÅ   rÌ   rÒ   r×   rØ   rÞ   r0   r0   r0   r7   Ú<module>   sÊ     ÿ  ÿ  ÿ  ÿ  ÿ  ÿ
^
þ( ÿ ÿ ÿþù