U
    f»{jÝ>  ã                   @   sè  d dl Z d dlZd dl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 d dlZd dlmZmZmZmZmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d d	l/m0Z0m1Z1 d d
l2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 e 9e :e;¡ddddd¡Z<e 9e<d¡Z=e.j>dd�Z?e 9e?d¡Z@e 9e?dddd¡ZAdFdd„ZBe	jCjDdd„ ƒZEdd„ ZFdd„ ZGdd„ ZHd d!„ ZIe3d"d#„ ƒZJe	jCjDe	jC Kd$eef¡d%d&„ ƒƒZLd'd(„ ZMd)d*„ ZNe	jCjDe	jCjOe.jPd+d,„ ƒƒƒZQd-d.„ ZRe	jCjDe.jPd/d0„ ƒƒZSd1d2„ ZTe	jC Ud3¡e	jCjDe	jCjOe5ƒ e4d4ƒe.jPd5d6„ ƒƒƒƒƒƒZVe	jC Ud7¡e	jCjDe	jCjOe4e.jPd8d9„ ƒƒƒƒƒZWe.jPd:d;„ ƒZXe	jCjDe.jPd<d=„ ƒƒZYe	jCjDe.jPd>d?„ ƒƒZZd@dA„ Z[dBdC„ Z\dDdE„ Z]dS )Gé    N)Úpath)ÚPath)Úassert_equalÚassert_allclose)Úconcatenate_rawsÚread_bem_surfacesÚread_surfaceÚread_source_spacesÚread_bem_solution)ÚConductorModelÚconvert_flash_mris)Úmne_browse_rawÚmne_bti2fiffÚmne_clean_eog_ecgÚmne_compute_proj_ecgÚmne_compute_proj_eogÚ	mne_coregÚmne_kit2fiffÚmne_make_scalp_surfacesÚmne_maxfilterÚ
mne_reportÚmne_surf2bemÚmne_watershed_bemÚmne_compare_fiffÚmne_flash_bemÚmne_show_fiffÚmne_show_infoÚmne_whatÚmne_setup_source_spaceÚmne_setup_forward_modelÚmne_anonymizeÚmne_prepare_bem_modelÚmne_sys_info)Útesting)Úread_raw_fifÚ	read_info)Úrequires_mneÚrequires_freesurferÚrequires_nibabelÚ
ArgvSetterÚ_stamp_to_dtÚ_record_warningsz..ÚioZtestsÚdataztest_raw.fifF)ÚdownloadZsubjectsÚsampleÚbemzsample-320-320-320-bem.fifc              	   C   sX   |rdnd}t |ƒ�:}z|  ¡  W n tk
r6   Y nX d|j ¡ ksJt‚W 5 Q R X dS )zEnsure we print usage.)z--help© zUsage: N)r)   ÚrunÚ
SystemExitÚstdoutÚgetvalueÚAssertionError)ÚmoduleÚ
force_helpÚargsÚoutr1   r1   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/commands/tests/test_commands.pyÚcheck_usage(   s    
r<   c                
   C   s>   t tƒ tdtfƒ�  tƒ � t ¡  W 5 Q R X W 5 Q R X dS )úTest mne browse_raw.z--rawN)r<   r   r)   Ú	raw_fnamer+   r2   r1   r1   r1   r;   Útest_browse_raw3   s    r?   c               	   C   s@   t tƒ ttfƒ�} t ¡  W 5 Q R X d| j ¡  ¡ ks<t	‚dS )r=   ÚrawN)
r<   r   r)   r>   r   r2   r4   r5   Ústripr6   ©r:   r1   r1   r;   Ú	test_what<   s    rC   c                   C   s   t tƒ dS )zTest mne bti2fiff.N)r<   r   r1   r1   r1   r;   Útest_bti2fiffD   s    rD   c                   C   s   t tƒ dS )úTest mne compare_fiff.N)r<   r   r1   r1   r1   r;   Útest_compare_fiffI   s    rF   c                	   C   sJ   t tƒ ttfƒ� t ¡  W 5 Q R X ttdfƒ� t ¡  W 5 Q R X dS )rE   z	--tag=102N)r<   r   r)   r>   r2   r1   r1   r1   r;   Útest_show_fiffN   s
    rG   c              	   C   sª   t tƒ t| ƒ}tdd„ tttfD ƒƒ}dg|jd< t |t t¡¡}| 	|¡ t
d|dfƒ� t ¡  W 5 Q R X dD ].\}}t t |d| ¡¡}t|ƒ|ksvt‚qvd	S )
zTest mne clean_eog_ecg.c                 S   s   g | ]}t |ƒ‘qS r1   )r$   )Ú.0Úfr1   r1   r;   Ú
<listcomp>\   s   ÿz&test_clean_eog_ecg.<locals>.<listcomp>zMEG 2443Zbadsú-iz--quiet))Zprojé   )z-eveé   z*%s.fifN)r<   r   Ústrr   r>   ÚinfoÚopÚjoinÚbasenameÚsaver)   r2   ÚglobÚlenr6   )Útmp_pathÚtempdirr@   Ú	use_fnameÚkeyÚcountÚfnamesr1   r1   r;   Útest_clean_eog_ecgW   s    ÿ
r\   Úfunc              
   C   sÞ   t |ƒ t| ƒ}t |t t¡¡}t |d¡}t|dƒ�}| d¡ W 5 Q R X t 	t|¡ t
d|d| ddfƒ�  tƒ � | ¡  W 5 Q R X W 5 Q R X t t |d¡¡}t|ƒd	ks¸t‚t t |d
¡¡}t|ƒd	ksÚt‚dS )zTest mne compute_proj_ecg/eog.zbads.txtÚwz	MEG 2443
rK   z--bad=z	--rej-eegZ150z	*proj.fifé   z	*-eve.fifN)r<   rN   rP   rQ   rR   r>   ÚopenÚwriteÚshutilÚcopyfiler)   r+   r2   rT   rU   r6   )rV   r]   rW   rX   Z	bad_fnameZfidr[   r1   r1   r;   Útest_compute_proj_exgh   s"     ÿrd   c                   C   s   t tdƒst‚dS )zTest mne coreg.r2   N)Úhasattrr   r6   r1   r1   r1   r;   Ú
test_coreg}   s    rf   c                   C   s   t tdd� dS )zTest mne kit2fiff.T©r8   N)r<   r   r1   r1   r1   r;   Útest_kit2fiff‚   s    rh   c              
   C   sÊ  t  d¡ t  d¡ ttƒ dtjk}t| ƒ}t t	dd¡}t |dd¡}t 
t |d¡¡ t 
|¡ t |dd¡}t 
|¡ ddd|f}| tjd	d
d„ ¡ t |d¡}t |d¡}	t|ddd��ž | dd¡ t jtdd�� t ¡  W 5 Q R X t t |d¡|¡ | d|¡ t ¡  t |¡�s,t‚t |	¡�s<t‚t jtdd�� t ¡  W 5 Q R X W 5 Q R X t|ƒ}
tt|
ƒdƒ |
d }
tt t	ddd¡ƒd }t|
d |d ƒ |�sÆdtjk�sÆt‚dS )zTest mne make_scalp_surfaces.ÚnibabelZpyvistaZSUBJECTS_DIRr/   Zsurfr0   ú-sz--subjects-dirZdecimate_surfacec                 S   s   | |fS )Nr1   )ZpointsZ	trianglesZn_trianglesr1   r1   r;   Ú<lambda>�   ó    z*test_make_scalp_surfaces.<locals>.<lambda>zsample-head-dense.fifzsample-head-medium.fifF©Zdisable_stdoutZdisable_stderrZFREESURFER_HOMENzThe FreeSurfer environ©Úmatchz
lh.segheadÚ	overwriter_   r   Úrr)ÚpytestÚimportorskipr<   r   ÚosÚenvironrN   rP   rQ   Úsubjects_dirÚmkdirÚsetattrÚmner0   r)   ZdelenvÚraisesÚRuntimeErrorr2   rb   ÚcopyZsetenvÚisfiler6   ÚIOErrorr   r   rU   r   )rV   ZmonkeypatchÚhasrW   Ú	surf_pathZsurf_path_newZsubj_dirÚcmdZdense_fnameZmedium_fnameZhead_pyZhead_cr1   r1   r;   Útest_make_scalp_surfacesˆ   sR    




 þÿÿr‚   c               
   C   s�   t tƒ tdtdddddtfƒ�f} tjtdd��( d	tjd
< zt 	¡  W 5 tjd
= X W 5 Q R X | j
 ¡ } dD ]}|| kslt|ƒ‚qlW 5 Q R X dS )zTest mne maxfilter.rK   z--stz
--movecompz
--linefreqZ60z--transz	Don't usern   ÚtrueZ_MNE_MAXFILTER_TEST)Z	maxfilterz-transz	-movecompN)r<   r   r)   r>   rr   ZwarnsÚRuntimeWarningrt   ru   r2   r4   r5   r6   )r:   Úcheckr1   r1   r;   Útest_maxfilter¶   s     ÿ

r†   c                 C   s¢   t  d¡ ttƒ t| ƒ}t |t t¡¡}t	 
t|¡ td|d|dtddddd	fƒ�  tƒ � t ¡  W 5 Q R X W 5 Q R X t t |d
¡¡}t|ƒdksžt‚dS )zTest mne report.ri   z-prK   ú-drj   r/   z--no-browserz-mZ30z*.htmlr_   N)rr   rs   r<   r   rN   rP   rQ   rR   r>   rb   rc   r)   rv   r+   r2   rT   rU   r6   )rV   rW   rX   r[   r1   r1   r;   Útest_reportÆ   s     
    ÿrˆ   c                   C   s   t tƒ dS )zTest mne surf2bem.N)r<   r   r1   r1   r1   r;   Útest_surf2bem×   s    r‰   i„  Zmri_watershedc              
   C   s   t tƒ t dddgdddgdddgg¡}t dddg¡}t| ƒ}t tdd¡}t |d¡}t |d¡}t 	|¡ t |d	¡}t
 t |d	¡|¡ t |¡j}t |d¡ d
|dddf}	tjtdd��" t|	ƒ� t ¡  W 5 Q R X W 5 Q R X t ||¡ dD ] }
t t |dd|
 ¡¡rþt‚qþt|	ƒ� t ¡  W 5 Q R X tddd�}dD ]®}
tt |dd|
 ¡dd�\}}}tt|ƒdƒ t| ¡ dƒ t|jd | ¡ d ƒ t|d |d f|Ž t|d |d f|Ž t|d |d f|Ž t|d |f|Ž �qLdS )zTest mne watershed bem.éÿÿÿÿr   r_   g³
›.Àg@‡ùò"@gãl:¸I;Àr/   ÚmriúT1.mgzr‡   rj   ú-ozread permissions.*T1\.mgzrn   ©Z
outer_skinZouter_skullZinner_skullr0   ú%s.surfçñhãˆµøä>©ZrtolZatolT)Zread_metadatai P  ZxrasZyrasZzrasrL   ZcrasN)r<   r   ÚnpÚarrayrN   rP   rQ   rv   rt   Úmakedirsrb   rc   ÚstatÚst_modeÚchmodrr   rz   ÚPermissionErrorr)   r2   r}   r6   Údictr   r   rU   ÚminÚshapeÚmaxr   )rV   ZMdcZPxyz_crW   Úmridata_pathÚsubject_path_newÚmridata_path_newZ	new_fnameZold_moder9   ÚsÚkwargsrq   ÚtrisZvol_infor1   r1   r;   Útest_watershed_bemÜ   sF    "



ÿþr£   é´   c                 C   s²  t tdd� tt| ƒƒ}ttƒd d }|d }|d }|d }|jddd� |d }|jddd� t t 	|d¡t 	|d¡¡ t t 	|d	¡t 	|d	¡¡ d
D ]>}|d d|d›d� }|d|d›d� }	t |||	j
 ¡ q dD ] }
t |d |
› d� ¡rät‚qätd|dddddfddd�� t ¡  W 5 Q R X dD ].}
|d |
› d� }| ¡ �s^t‚| ¡  �q:t |d ¡ td|ddd�}||d d k�sžt‚| ¡ �s¬t‚t |d ¡ t |¡ td|ddddt|d d ƒdt|d d ƒf	ddd�� t ¡  W 5 Q R X tddd�}dD ]Œ}
tt 	|dd |
 ¡ƒ\}}tt|ƒd!ƒ t| ¡ d"ƒ t|jd" | ¡ d# ƒ tt 	tddd |
 ¡ƒ\}}t||f|Ž t||f|Ž �q d$S )%zTest mne flash_bem.Trg   r/   r‹   Zflash)ÚparentsÚexist_okr0   rŒ   z	brain.mgz)é   é   ZmefÚ02dz.mgzz_001.mgzrŽ   z.surfr‡   rj   z-nz-rz-3Frm   Zparameter_maps)Úsubjectrv   ÚconvertZunwarpz
flash5.mgzz	mef30.mgzz-5z	mef05.mgzr�   r‘   r�   i   r   r_   N)r<   r   r   rN   rv   rw   rb   rc   rP   rQ   Únamer}   r6   r)   r2   ÚexistsÚunlinkÚrmtreer   r™   r   r   rU   rš   r›   rœ   r   )rV   rW   r�   rž   rŸ   Z
flash_pathZbem_pathÚkindZin_fnameZin_fname_echor    r€   Z
flash5_imgr¡   rq   r¢   Zrr_cZtris_cr1   r1   r;   Útest_flash_bem  s€    
ÿ
ÿ ÿ  þ
  þ ý
ÿ
ÿ
r±   c                 C   sN  t tdd� t | d¡}td|dtddddd	d
dddfƒ� t ¡  W 5 Q R X t|ƒ}t|ƒdksft	‚t
 t¡�: td|dtddddddf
ƒ� t ¡ sœt	‚W 5 Q R X W 5 Q R X t
 t¡�: td|dtddddddf
ƒ� t ¡ sæt	‚W 5 Q R X W 5 Q R X t
 t¡�@ td|dtddddddddfƒ� t ¡ �s6t	‚W 5 Q R X W 5 Q R X dS )úTest mne setup_source_space.Trg   zsources-src.fifz--srcr‡   rj   r/   z--morphz
--add-distÚFalseú--icoÚ3ú	--verboserL   z--octz	--spacingÚ10N)r<   r   rP   rQ   r)   rv   r2   r	   rU   r6   rr   rz   Ú	Exception)rV   rX   Úsrcr1   r1   r;   Útest_setup_source_spaceS  s`    
       þ
     ÿ 
     ÿ 
      þrº   c                 C   s~   t tdd� t | d¡}td|dtdddd	d
df
ƒ� t ¡  W 5 Q R X t|ƒ}t|ƒdks`t	‚t 
|¡d d }t|ƒ dS )zTest mne setup_forward_model.Trg   zmodel-bem.fifz--modelr‡   z--homogrj   r/   r´   rµ   r¶   r_   r   z-sol.fifN)r<   r   rP   rQ   r)   rv   r2   r   rU   r6   Úsplitextr
   )rV   rX   ÚmodelZ	sol_fnamer1   r1   r;   Útest_setup_forward_modelo  s        ÿr½   c              	   C   sX   t tdd� t | d¡}tdtd|dfƒ� t ¡  W 5 Q R X t|ƒ}t|t	ƒsTt
‚dS )r²   Trg   zbem_solution-bem-sol.fifz--bemz--solr¶   N)r<   r!   rP   rQ   r)   Úbem_model_fnamer2   r
   Ú
isinstancer   r6   )rV   Zbem_solution_fnameZbem_solutionr1   r1   r;   Útest_mne_prepare_bem_model€  s    
ÿrÀ   c                	   C   s*   t tƒ ttfƒ� t ¡  W 5 Q R X dS )úTest mne show_info.N)r<   r   r)   r>   r2   r1   r1   r1   r;   Útest_show_info�  s    rÂ   c               
   C   st   t tdd� ttfƒ�( tjtdd�� t ¡  W 5 Q R X W 5 Q R X tƒ �} t ¡  W 5 Q R X d| j 	¡ kspt
‚dS )rÁ   Trg   Ú1rn   ÚnumpyN)r<   r"   r)   r>   rr   rz   r3   r2   r4   r5   r6   rB   r1   r1   r;   Útest_sys_info–  s    rÅ   c              	   C   sf   t tƒ t | d¡}tdtd|fƒ� t ¡  W 5 Q R X t|ƒ}t |¡sNt	‚|d t
dƒksbt	‚dS )zTest mne anonymize.zanon_test_raw.fifz-fr�   Z	meas_date)i€Cm8r   N)r<   r    rP   rQ   r)   r>   r2   r%   r­   r6   r*   )rV   Z	out_fnamerO   r1   r1   r;   Útest_anonymize¡  s    rÆ   )F)^rT   rt   r   rP   rb   Úpathlibr   rÄ   r’   rr   Znumpy.testingr   r   ry   r   r   r   r	   r
   Zmne.bemr   r   Zmne.commandsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   Zmne.datasetsr#   Zmne.ior$   r%   Z	mne.utilsr&   r'   r(   r)   r*   r+   rQ   ÚdirnameÚ__file__Úbase_dirr>   Z	data_pathZtesting_pathrv   r¾   r<   ÚmarkZslowtestr?   rC   rD   rF   rG   r\   Zparametrizerd   rf   rh   ZultraslowtestZrequires_testing_datar‚   r†   rˆ   r‰   Útimeoutr£   r±   rº   r½   rÀ   rÂ   rÅ   rÆ   r1   r1   r1   r;   Ú<module>   sŒ   `	   ÿ

	
+
)
C
