U
    f»{jË/  ã                   @   s.  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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 d d	lmZ d d
lmZmZm Z m!Z!m"Z" e #e $e%¡dddd¡Z&e #e&d¡Z'e #e&d¡Z(e #e&d¡Z)e #e&d¡Z*e #e&d¡Z+ej,dd�Z-e #e-dd¡Z.e #e-dd¡Z/dd„ Z0e	j1j2e	j1 3de(dfe+dfe*dfe*dff¡e	j1 3dde4d d!d"d#�f¡e	j1 3d$d%d&g¡d'd(„ ƒƒƒƒZ5e	j1j2e	j1 3d)d*¡e	j1 3d+d,d-d.d/g¡d0d1„ ƒƒƒZ6e	j1j2ej7e	j1 3d2e+d3fe/d4ff¡e	j1 3d5d6¡e	j1 3d$d7d8d9g¡d:d;„ ƒƒƒƒƒZ8d<d=„ Z9dS )>é    N)Úassert_array_equal)Úread_evokedsÚread_covÚcompute_raw_covarianceÚ
pick_typesÚ	pick_info)Úprepare_noise_cov)Útesting)Úread_raw_fif)Ú_picks_by_typeÚ_get_channel_types)Ú_has_eeg_average_ref_proj)Úcompute_proj_raw)Úestimate_rankÚcompute_rankÚ_get_rank_sssÚ_compute_rank_intÚ_estimate_rank_rawz..ÚioZtestsÚdataztest-cov.fifztest_raw.fifztest-ave.fifztest_ctf_raw.fifztest_chpi_raw_sss.fifF)ÚdownloadZMEGÚsampleZSSSztest_move_anon_raw_sss.fifc                  C   sR   t  d¡} tt| dd�d t  d¡ƒ d| d< t| ƒdks>t‚t tt| d¡ d	S )
zTest rank estimation.é
   T)Zreturn_singularé   r   )r   r   é	   ÚfooN)	ÚnpÚeyer   r   ZonesÚAssertionErrorÚpytestÚraisesÚ
ValueError)r   © r"   úR/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/tests/test_rank.pyÚtest_estimate_rank!   s    
ÿr$   zfname, ref_megTÚscalingsÚnormg   èvH7Bg    eÍÍAg     jø@©ÚmagÚgradÚeegztol_kind, tol)Úabsoluteg-Cëâ6?)Úrelativeg�íµ ÷Æ°>c                 C   sH  |r*|dkr*|dkr t dd�}n
t dd�}t| ƒ}| dtd|jd ƒ¡ ¡  t|j|d	d
�}d|k}|r||\\}}	\}}
n|\\}}	g }
t|	ƒ}t|
ƒ}t|jd ƒdkr¶|| }nt	|jƒ| }t
|||||d�}||ksât‚d| krø| t|ƒ¡ | ¡  t|jd ƒ}|d| k�rdn| }t
|||||d�}||k�sDt‚dS )zTest raw rank estimation.r&   r,   g      ð?)r(   g$°ˆï�_Fr   g      @éÿÿÿÿT)Úref_megZmeg_combinedr*   Úproc_history)r%   Zwith_ref_megÚtolÚtol_kindZsssÚprojsN)Údictr
   ÚcropÚminÚtimesÚ	load_datar   ÚinfoÚlenr   r   r   Úadd_projr   Ú
apply_proj)Úfnamer.   r%   r1   r0   ÚrawÚoutZhas_eegÚ_Z	picks_megZ	picks_eegÚn_megÚn_eegÚexpected_rankZgot_rankÚn_projZ	want_rankr"   r"   r#   Útest_raw_rank_estimation+   s@    


 ÿ ÿrD   Úmeg)ÚseparateÚcombinedzrank_method, proj)r8   T)r8   F)NT)NFc           !   	      s"  t tdddd�}ttƒ}dd„ |jd D ƒ}t||j|dƒ}|d	 d d
ksPt‚|d	 dd… dk ¡ slt‚tt	ƒ}t
|jd ƒr†t‚ttƒ}t
|jd ƒr t‚| t||d�¡ t|ƒ}t| ¡  ¡ ƒ}	t|ƒ}
t| ¡  ¡ ƒ}t|jddd�}t|jddd�}t|j|ƒ}dt|ddd�fg}|dt|dd�fg7 }|dt|ddd�fg7 }t|j|ƒ}dt|ddd�fg}|dt|dd�fg7 }|dt|ddd�fg7 }tt |||f|	||f|
||f|||fgtdddd�g¡ƒ}|D �]<\\}}}}t|| |||d�}t| ¡ ƒ|d< |D �]\}}t||ƒ‰t‡fdd„|d D ƒƒ}t‡fdd„ˆd D ƒƒ}tˆƒ‰ ‡ fdd„dD ƒ\}}}|| }|dk�oœtˆd ƒdk}|�r¬tˆƒ}|| } | dk�rè|dk�sÎ|�s|�rÞ| |8 } n| |8 } n| d k�söt‚|�r| |8 } || | k�st‚�q�qÞdS )!zTest cov rank estimation.r   )Nr   F)Ú	conditionZbaselineÚprojc                 S   s"   g | ]}d |kr|  d¡r|‘qS )Z053ZEEG)Ú
startswith)Ú.0Úchr"   r"   r#   Ú
<listcomp>h   s     
ÿz,test_cov_rank_estimation.<locals>.<listcomp>Úch_namesNZeiggÙ}ÚõÐò¾:r   g¼‰Ø—²Òœ<r2   ©rE   T©rE   r*   r*   rE   Úallç  4&õkCç  @åœ0¢Bg    €„.Ar'   )rI   c                 3   s:   | ]2}|d  o0t t|d d ƒtˆ d ƒ@ ƒdkV  qdS )Zactiver   Ú	col_namesrN   r   N©r9   Úset©rK   rI   ©Ú	this_infor"   r#   Ú	<genexpr>�   s   ý
ÿÿz+test_cov_rank_estimation.<locals>.<genexpr>c                 3   s2   | ]*}t t|d  d ƒtˆ d ƒ@ ƒdkV  qdS )r   rT   rN   r   NrU   rW   rX   r"   r#   rZ   ¡   s   þ
ÿÿc                    s   g | ]}ˆ   |¡‘qS r"   )Úcount)rK   Úk)Úch_typesr"   r#   rM   §   s     )r*   r(   r)   r/   rG   r8   )r   Ú	ave_fnamer   Ú	cov_fnamer8   r   r   rQ   r
   Ú	raw_fnamer   Úhp_fif_fnamer:   r   r   Úcopyr;   r   r   ÚlistÚittÚproductr3   r   ÚsumÚvaluesr   r9   r   )!Zrank_methodrI   rE   ZevokedZcovrN   Z
raw_sampleZraw_sssZ
cov_sampleZcov_sample_projZcov_sssZcov_sss_projZpicks_all_sampleZpicks_all_sssZinfo_sampleZpicks_stack_sampleZinfo_sssZpicks_stack_somatoZ
iter_testsZ
picks_listZ	iter_infor%   ÚrankZch_typeÚpicksZn_projs_appliedZn_projs_inforA   Ún_magÚn_gradr@   Zhas_sssrB   r"   )r]   rY   r#   Útest_cov_rank_estimation\   s�    	ÿÿ
ÿÿýû
ÿ
ýþ
ÿ


rl   zfname, rank_origéx   éC   zn_proj, meg))r   rG   )r   rG   )r   rF   )r+   Úfloat32)r,   ro   )r,   gñhãˆµøä>c              	   C   sŠ  t |ƒ dd¡ ¡ jdd�}|jd g ks.t‚|jd d d }|d d	 |ksTt‚t|d
ƒd |ksjt‚t| ¡  d¡d
ƒd |ksŠt‚t| ¡  d¡d
ƒd |ksªt‚d|dk }|||   }	| dkrâ| 	t
|| | |dd�¡ | ¡  |dd… d }
tjtdd�� t|dd� W 5 Q R X tjtdd�� t|dd� W 5 Q R X |dk�rT|n|	g}|tk�rv| |d d ¡ t||d�}||k�s�t‚t|||d�}|tk�r¾|dk�r¾|dk�r¾n||k�sÌt‚t|tƒ ||d�}||k�sìt‚tddd�}t|d|||dd �}||k�st‚|tk�r6| |d d! ¡ t|d||dd"�}||k�sVt‚~t|d
ƒ}||	k�spt‚t|dd… d |
ƒ dS )#zTest maxfilter rank lookup.r   é   TrO   r2   r/   Zmax_infoZsss_infoZnfreer8   rE   r)   r(   r   rF   )rj   rk   rE   ÚverboseNztol must be)Úmatchr   )r0   zmust be a string or a)r1   )r0   r1   r,   Úauto)r%   r0   r1   rS   rR   )r)   r(   Údebug)r%   r0   r1   rq   é   )r0   r1   rq   )r
   r4   r7   r   r8   r   r   rb   Úpickr:   r   r;   r   r    r!   r   Ú	TypeErrorÚmf_fif_fnameÚappendr3   r   ra   r   )rC   r<   Z	rank_origrE   r1   r0   r=   ÚmfZmultrh   Z	data_origZallowed_rankZrank_newr%   r"   r"   r#   Útest_maxfilter_get_rank¾   s€       ÿ
  ÿ   ÿ    þ
    ÿ
r{   c                  C   s®  t tƒ dd¡ ¡ } | jdddd� tƒ | jd< t| dd�}t|| jd�}|t	d	d
d�ks^t
‚| jd g kspt
‚ddddg| jd< t| dd�}t|| jd�}|t	ddd�ks°t
‚| jd ddddgksÊt
‚t| jddg d�}t| |d�}t|| jd�}|t	d	d
d�k�st
‚| jd ddddgk�s(t
‚t|d |d ƒ |d |d k�sPt
‚tƒ | jd< t| ƒ}|t	d	d
d�k�szt
‚ddddg| jd< t| ƒ}|t	ddd�k�sªt
‚dS )zCTest when bads channels are explicitly passed + default picks=None.r   rp   T)r*   rE   r.   ZbadsN)ri   )r8   i/  é<   rP   zEEG 002zEEG 012zEEG 015zMEG 0122i.  é9   )rE   r*   Úexcluder   Únames)r
   r`   r4   r7   r   rc   r8   r   r   r3   r   r   )r=   Znoise_cov_1rh   Z	noise_covri   Znoise_cov_2r"   r"   r#   Útest_explicit_bads_pick  s2    r€   ):Úos.pathÚpathÚopÚ	itertoolsrd   Znumpy.testingr   Únumpyr   r   Zmner   r   r   r   r   Zmne.covr   Zmne.datasetsr	   Zmne.ior
   Zmne.io.pickr   r   Zmne.io.projr   Zmne.projr   Zmne.rankr   r   r   r   r   ÚjoinÚdirnameÚ__file__Úbase_dirr_   r`   r^   Z	ctf_fnamera   Z	data_pathZtesting_pathÚdata_dirrx   r$   ÚmarkZslowtestZparametrizer3   rD   rl   Zrequires_testing_datar{   r€   r"   r"   r"   r#   Ú<module>   sz   
 ýÿ ÿþ%
ý\ÿýA