U
    f»{j&w  ã                	   @   sÌ  d dl mZ d dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZmZ d dlZd dl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 d dlm Z m!Z!m"Z"m#Z# d	Z$d
d„ Z%dd„ Z&dd„ Z'dd„ Z(dd„ Z)dd„ Z*ej+ ,deeedd�g¡dd„ ƒZ-e"dd„ ƒZ.ej+ ,ddej/e0ddd �d!d"�g¡ej+ ,d#d$¡d%d&„ ƒƒZ1e"d'd(„ ƒZ2e"d)d*„ ƒZ3d+d,„ Z4ej+ ,d#d-¡d.d/„ ƒZ5d0d1„ Z6d2d3„ Z7ej+ ,d4d5¡ej+ ,d6d7¡ej+ ,d8d9¡d:d;„ ƒƒƒZ8dS )<é    )ÚpartialN)ÚsparseÚlinalgÚstats)Úassert_equalÚassert_array_equalÚassert_array_almost_equalÚassert_allclose)ÚSourceEstimateÚVolSourceEstimateÚMixedSourceEstimateÚSourceSpaces)Úttest_ind_no_pÚcombine_adjacency)Úpermutation_cluster_testÚf_onewayÚpermutation_cluster_1samp_testÚspatio_temporal_cluster_testÚ"spatio_temporal_cluster_1samp_testÚttest_1samp_no_pÚsummarize_clusters_stc)Úcatch_loggingÚcheck_versionÚrequires_sklearnÚ_record_warningsé2   c                  C   s,  d} d}d}t  d¡ ¡ }t j d¡}| |t¡|  }|D ]&}t j|t  d¡dd�| |d d …< q:| |t¡|  }|D ]&}t j|t  d¡dd�| |d d …< qvdt  d¡d d d …f  }|d d …dd …f  |7  < |d d …dd …f  |8  < |d d …d d …t jf }	|d d …d d …t jf }
|||	|
fS )Né   é   é*   Zsame)Úmodeé
   é   )	ÚnpZhanningÚsumÚrandomÚRandomStateÚrandnÚn_spaceZconvolveZnewaxis)Znoise_levelZn_time_1Zn_time_2Z
normfactorÚrngÚcondition1_1dÚcÚcondition2_1dZ	pseudoekpÚcondition1_2dÚcondition2_2d© r.   úa/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/stats/tests/test_cluster_level.pyÚ_get_conditions   s"    $$r0   c           
   
   C   s  t j d¡}| ddd¡d }tj dt|ƒd ¡ }dt |dd…ddf d¡d   k rddk sjn t	‚t
tƒ}tƒ �2}tjtd	d
�� t||dddd�}W 5 Q R X W 5 Q R X | ¡ }t|ƒdd… |ksÐt	‚t|d ƒdksät	‚t|d ddd� | ddd¡}| ddd¡d }|||g}tj ddtdd„ |D ƒƒt|ƒ ¡}tj|Ž d }	d|	  k �rldk �srn t	‚t
tƒ}tƒ �4}tjtd	d
�� t|d|dddd�}W 5 Q R X W 5 Q R X | ¡ }t|ƒdd… |k�sÜt	‚t|d ƒdk�sòt	‚t|d ddd� tjtdd
�� t|ddd� W 5 Q R X t j|d ddd�}d|dd…df< tjtdd
�� t|dtddd�dd�}W 5 Q R X |d dk  ¡ �s˜t	‚|d dk  ¡ �r®t	‚d|dd…df< tjtd d
��8 t jd!d"��  t|dtddd�ddd#� W 5 Q R X W 5 Q R X dS )$z&Test automatic threshold calculations.r   r    é   g{®Gáz´?gš™™™™™™?g¸…ëQ¸ž?Nçš™™™™™©?zthreshold is only valid©ÚmatchTÚmask)Ústat_funÚseedÚverboseÚout_typeé   é   gÓBÎûÿ ?ç�íµ ÷Æ°>©Zatolgffffffæ?gffffffî?c                 s   s   | ]}t |ƒV  qd S ©N©Úlen©Ú.0Úar.   r.   r/   Ú	<genexpr>I   s     z"test_thresholds.<locals>.<genexpr>)Útailr6   r7   r8   r9   g¼#cµù¥?zIgnoring argument "tail")rE   r9   ©Úaxiszinvalid valueçš™™™™™¹?©ÚstartÚstep)r7   Ú	thresholdr9   ZfiniteÚignore)Úinvalid)r7   rL   Úbuffer_sizer9   )r"   r$   r%   r&   r   ÚtZppfr@   Úttest_1sampÚAssertionErrorr   r   r   ÚpytestÚwarnsÚRuntimeWarningr   ÚgetvalueÚstrr	   Úfr#   r   r   ÚrepeatÚdictÚanyÚallÚraisesÚRuntimeErrorZerrstate)
Únumba_conditionalr(   ÚXZwant_threshZmy_funÚlogÚoutÚYÚZÚpr.   r.   r/   Útest_thresholds5   sv    4    ÿ
& þ  
 ÿ  
 þrf   c           
      C   s(  t | ƒ}t dd¡}t dd¡}tj d¡}| ddd¡}z¬dtjd< |tjd< tƒ �}t	|ddd	dt
d
dd� W 5 Q R X d| ¡ ksŠt‚tt
dd�}tddƒr®tj d¡}	nd}	tjtdd�� t	|ddd	|	|d
dd� W 5 Q R X W 5 |dk	rü|tjd< ntjd= |dk	�r|tjd< ntjd= X dS )zTest use of cache dir.ZMNE_CACHE_DIRNZMNE_MEMMAP_MIN_SIZEr   é	   r;   r    Z1Kr1   Fr5   )rO   Ún_jobsÚn_permutationsr7   r6   r8   r9   Zindependentlyçü©ñÒMbP?©ÚsigmaÚnumpyz1.17r3   )rW   ÚosÚgetenvr"   r$   r%   r&   Úenvironr   r   r   rV   rR   r   r   Zdefault_rngrS   rT   rU   )
Ztmp_pathr_   ÚtempdirZorig_dirZ	orig_sizer(   r`   Zlog_filer6   Zrandom_stater.   r.   r/   Útest_cache_diri   sR    

      þ
     ý
rr   c                 C   sŒ   t j d¡ dd¡d }dD ]j}|dkr,dnd}|D ]P}t|d|… d	|d
d�d }|jdksbt‚tt  |¡ƒd|dk 	¡  ks4t‚q4qdS )z-Test that non-replacement works with large N.r   éH   r1   )é   rs   r   ©r   r1   ©r   Ng-Cëâ6?r5   )rL   rE   r9   éÿÿÿÿ)é   rx   )
r"   r$   r%   r&   r   ÚshaperR   r@   Úuniquer#   )r_   r`   Z	n_samplesÚtailsrE   ÚH0r.   r.   r/   Ú test_permutation_large_n_samples�   s    
   ÿÿr}   c                 C   s"  t j d¡}| ddd¡}|dd…dd…dd…f  d7  < |dd…ddd…f  d7  < d}t||d	d
d�\}}}}t||dd
d�\}}}}tt  |dk ¡dƒ t  |¡}	t|	ddd� t||dd
d�\}}}
}tt  |
dk ¡dƒ t  	||
k¡søt
‚|
|
dk|
dk @  d }t|ddd� dS )z1Test cluster level permutations with step_down_p.r   rg   r;   r    Nr1   é   ç      à?ç      ð?r5   )rL   Ústep_down_pr9   ç        r2   gQúBÈyÿo?r<   r=   gü©ñÒMbp?g      �?)r"   r$   r%   r&   r   r   r#   Úminr	   r\   rR   )r_   r(   r`   ÚthreshrP   Úclustersre   r|   Zp_oldÚp_minZp_newZp_nextr.   r.   r/   Útest_permutation_step_down_p›   s6    " ÿÿ
 ÿÿ

 ÿÿ
r‡   c              
   C   sê   t ƒ \}}}}t||f||fƒD ]Ž\}}t||gdddddd�\}}}	}
t |	¡}tt |	dk ¡dƒ t|ddd	� |jd d
 }t||gdddd|dd�\}}}}
t	|	|ƒ q dd„ }t
jtdd�� t||gd|dd� W 5 Q R X dS )z&Test cluster level permutations tests.éd   r1   Nr5   )ri   rE   r7   rO   r9   r2   ç{®Gáz„?r<   r=   r    r;   )ri   rE   r7   rh   rO   r9   c                 S   s   t  | |¡d S )Nr   )r   r   )r`   rc   r.   r.   r/   r6   Î   s    z/test_cluster_permutation_test.<locals>.stat_funzis only validr3   )ri   r6   r9   )r0   Úzipr   r"   rƒ   r   r#   r	   ry   r   rS   rT   rU   )r_   r)   r+   r,   r-   Ú
condition1Z
condition2ÚT_obsr…   Úcluster_p_valuesÚhistr†   rO   Zcluster_p_values_buffr6   r.   r.   r/   Útest_cluster_permutation_test¸   sB    ÿ
ÿ    þ
   ýÿ

 ÿr�   r6   rH   rk   c                    sŽ  t ƒ \}}}}|df|dffD �]h\}}t|dddddd�\}}	}
}tt |
dk ¡dƒ t |
¡}t||d	d
� t|ddddˆ ddd�\}}}}t| ddddˆ ddd�\}}}}t|| ƒ t|dk |dk ƒ |jd d }t	ƒ �* t| ddddddˆ |d�	\}}}}W 5 Q R X t||ƒ t||ƒ t
jtdd�� t|ddd„ dd� W 5 Q R X t
jtdd�� t|d‡ fdd„dd� W 5 Q R X qdS )z'Test cluster level permutations T-test.r‰   rˆ   r   r1   r5   N)ri   rE   r7   r9   rO   r2   r<   r=   ç¸…ëQ¸ú?)ri   rE   rL   r7   r6   r9   rO   rw   g¸…ëQ¸ú¿)ri   rE   rL   r7   r6   rO   r9   r    r;   )ri   rE   r9   rL   r7   rh   r6   rO   zmust be .* ndarrayr3   c                 S   s   d S r>   r.   ©Úxr.   r.   r/   Ú<lambda>	  ó    z1test_cluster_permutation_t_test.<locals>.<lambda>)rL   r6   r9   únot compatiblec                    s   ˆ | ƒd d… S ©Nrw   r.   r‘   ©r6   r.   r/   r“     r”   )r0   r   r   r"   r#   rƒ   r	   r   ry   r   rS   r]   Ú	TypeErrorÚ
ValueError)r_   r6   r)   r+   r,   r-   r‹   re   rŒ   r…   r�   rŽ   r†   Z	T_obs_posZc_1Zcluster_p_values_posÚ_Z	T_obs_negZcluster_p_values_negrO   ZT_obs_neg_buffZcluster_p_values_neg_buffr.   r—   r/   Útest_cluster_permutation_t_testÖ   s†    ÿ
ÿ  þÿ

   ýÿ
   ýÿ
ÿ      ýÿ

  þ  
þr›   c                    sþ  ddl m} tƒ \}}}}|jd ‰ tdddddddddd	�	}d}||ttf||g||gttffD �]”\}	}
}}||	f|Ž‰|dˆ ƒ}||	fd
|i|—Ž}t	ˆd |d ƒ t
|d ˆd ƒD ]4\}}t	ˆd | ˆd | ƒ t || ¡s¾t‚q¾t t | ¡  ¡ | ¡  ¡ ¡¡}tt d¡|ƒ}t	| ¡  t¡| ¡  t¡ƒ t|	tƒ�r`dd„ |	D ƒ}ntj|	|	fdd�}||fd
|i|—Ž‰tˆd ƒ}t	ˆd ˆd d|… ƒ t	ˆd ˆd |d… ƒ tˆd ƒ}tˆd ƒd| k�sìt‚‡ ‡fdd„ˆd D ƒ}‡fdd„ˆd dd… D ƒ}t| |¡ƒt|ƒk�s>t‚t|	tƒ�rZdd„ |D ƒ}nt |ddtf¡}||d|dddd�‰tˆd ƒ}t	ˆd ˆd d ƒ t	ˆd ˆd d ƒ tˆd ƒd| k�sÒt‚‡ ‡fdd„ˆd D ƒ}‡fdd„ˆd D ƒ}t| |¡ƒt|ƒk�st‚||d|ddd�‰||d|ddd�}‡fdd„ˆd D ƒ}‡fdd„|d D ƒ}t  |¡}t  |¡}t!||ƒ |j"ddd� t#j$t%dd�� ||d|dddd � W 5 Q R X t#j$t&d!d�� |||td"d#�d$� W 5 Q R X t'ƒ �}|||td%dd&�d$� W 5 Q R X |�s8t|ƒdk�s4t‚d}t#j$t%d'd�� |||dtddd&�d(� W 5 Q R X t#j(t)d)d�� |||dtd*dd&�d(� W 5 Q R X | ¡ }t#j$t%d+d�� ||d|ddd� W 5 Q R X | *¡ dd…dd…f  +¡ }t#j$t%d,d�� ||d|ddd� W 5 Q R X t#j$t,d-d�� |||g d$� W 5 Q R X t#j$t%d.d��& t'ƒ � |||dd/� W 5 Q R X W 5 Q R X ||d|dtddd&�d�}t -|d ¡d0k �s¬t‚t#j$t%d1d��8 t#j(t)d2d�� ||d|d3d4d5„ dd6� W 5 Q R X W 5 Q R X qbdS )7z6Test cluster level permutations with adjacency matrix.r   ©Úgrid_to_graphr1   Nr5   r�   Fr   )	r7   Úmax_stepÚexcluder9   r�   Zt_powerrL   Úcheck_disjointri   Ú	adjacencyr;   c                 S   s   g | ]}t j||fd d�‘qS )r1   rF   )r"   Úconcatenate©rB   r’   r.   r.   r/   Ú
<listcomp>9  s     z;test_cluster_permutation_with_adjacency.<locals>.<listcomp>rF   c                    s&   h | ]}t  ˆd  |dˆ …  ¡’qS ©r   N©r"   r#   ©rB   Úb©Ún_ptsrb   r.   r/   Ú	<setcomp>H  s     z:test_cluster_permutation_with_adjacency.<locals>.<setcomp>c                    s   h | ]}t  ˆ d  | ¡’qS rv   r¦   rA   )Úout_adjacency_2r.   r/   r«   I  s     c                 S   s   g | ]}t  |d dtf¡‘qS )rw   r;   )r"   Úreshaper'   r£   r.   r.   r/   r¤   O  s     rw   T)ri   r¡   rž   rL   r    c                    s&   h | ]}t  ˆd  |dˆ …  ¡’qS r¥   r¦   r§   r©   r.   r/   r«   _  s     c                    s*   h | ]"}t  ˆ d  |d  |d f ¡’qS ru   r¦   rA   )Úout_adjacency_3r.   r/   r«   `  s     )ri   r¡   rž   rL   c                    s   g | ]}t  ˆ d  | ¡‘qS rv   r¦   rA   ©Úout_adjacency_4r.   r/   r¤   m  s   ÿc                    s   g | ]}t  ˆ d  | ¡‘qS rv   r¦   rA   r¯   r.   r/   r¤   o  s   ÿZMNE_FORCE_SERIAL)Zraisingzmust not be lessr3   iüÿÿ)ri   r¡   rž   rL   rh   zthreshold, if dict, must haveZhello)Úme)r¡   rL   r    rI   zthreshold.*<= 0 for tail == -1)r¡   rE   rL   zthreshold.* is more extremerˆ   zmust be a SciPy sparse matrixzadjacency.*the correct sizez	must be azInvalid value for the 'tail')r¡   rE   r2   r•   zNo clustersrj   c                  W   s   t | Ž d d… S r–   )r   r‘   r.   r.   r/   r“   ­  r”   z9test_cluster_permutation_with_adjacency.<locals>.<lambda>)ri   r¡   rL   r6   rO   ).Ú sklearn.feature_extraction.imager�   r0   ry   rZ   r   r   r   r   r   rŠ   r"   r\   rR   r   Z
coo_matrixr   Z
block_diagZasfptypeZtodenser   ÚeyeZtoarrayZastypeÚboolÚ
isinstanceÚlistr¢   r@   Úintersectionr­   r'   Úsortr   ZdelenvrS   r]   r™   ÚKeyErrorr   rT   rU   ZtocsrZtocoor˜   rƒ   )r_   Zmonkeypatchr�   r)   r+   r,   r-   ÚargsZdid_warnZX1dZX2dÚfuncZspatio_temporal_funcr¡   Zout_adjacencyrC   r¨   Zadjacency_2Zadjacency_2aZX1d_2ÚsplitZn_clust_origZdata_1Zdata_2ZX1d_3Zout_adjacency_5Zsums_4Zsums_5ÚwZbad_conZout_adjacency_6r.   )rª   rb   r¬   r®   r°   r/   Ú'test_cluster_permutation_with_adjacency  sl   ÿ


   þþýýÿ

ÿÿÿ
ÿ    þ
ÿ   þ   þ
ÿ
ÿ


    þ  ÿ
ÿ  
þ  
þ   þ   þ  ÿ  ÿ   
þ   ýr¾   rL   r‚   r   rI   ZTFCE)ÚidÚkind)Ú1sampÚindc                 C   sŒ  t  ddgddggddgddggdd	gddgggt¡}t  t j|dd
�¡}d}|dkrdt}t}|}n0|dkspt‚t}t	}|t j
 d¡j|jŽ d g}|||| d|dd�\}}	}
}t  |jdd… ¡}t  |jdd… ¡}t|	ƒt|
ƒksìt‚t|	|
ƒD ]Z\}}||  ¡ �rt‚tt  t  || ¡¡ƒdk�s2t‚t  || ¡d ||< d||< qö| ¡ �s`t‚| ¡ �snt‚tt  |¡|ƒ t||ƒ dS )zTest cluster signs.iöÿÿÿr~   éþÿÿÿiùÿÿÿéüÿÿÿiøÿÿÿr   iúÿÿÿé   rF   r1   rÁ   rÂ   rH   r5   )ri   rL   rE   r6   r9   NT)r"   ÚarrayÚfloatÚsignÚmeanr   r   rR   r   r   r$   r%   r&   ry   Úzerosr@   rŠ   r[   rz   r\   r   )rL   rÀ   r`   Z
want_signsri   r»   r6   Zuse_XZtobsÚcluZclu_pvaluesrš   Z	clu_signsÚusedr*   re   r.   r.   r/   Útest_permutation_cluster_signs±  sH    þþ    þ"
rÍ   c                     sÎ  ddl m} tj d¡}d}d}| d||¡}|dd…dd…dd…f  d7  < |dd…dd	f  d
7  < dddddg}d|||ƒ|d|ƒ|d|ƒdg}d}ddddtddd�g}	dddddg}
ttdd�}d}d}t	|	|
||ƒD �]ä\}}}}t
|||d||ddd�\}‰ }}tˆ d tjƒ�s&t‚ˆ d jtk�s:t‚tˆ d j|jdd… ƒ t |dk ¡d }tt|ƒ|ƒ t|| ddd� t|tƒ�r¸ttˆ ƒ|| ƒ t |dk¡sât‚qâ‡ fdd„|D ƒ}|| }tj||ftd�}t|ƒD ]p\}}t|tƒ�rRt ||ft¡}t	|d |d ƒD ]"\}}d|||f< d|||f< �q"|||< |}d||< �qì|dk�rp|}|}|dk�r~|}t||ƒ t|ƒt|ƒk�sžt‚t	||ƒD ]\}}t||ƒ �q¨t||ƒ qâdS )z;Test cluster level permutations with and without adjacency.r   rœ   r;   é   r:   Nr    r1   rÅ   r   r‰   r€   rI   r~   rj   rk   r5   )rL   r¡   rh   rž   r6   r7   r9   r2   g       ?r<   r=   c                    s   g | ]}ˆ | ‘qS r.   r.   )rB   Úii©r…   r.   r/   r¤     s     z4test_permutation_adjacency_equiv.<locals>.<listcomp>)ÚdtypeT)r²   r�   r"   r$   r%   r&   rZ   r   r   rŠ   r   rµ   ÚndarrayrR   rÑ   r´   r   ry   Úwherer   r@   r	   r\   rÊ   Ú	enumerateÚtuple) r_   r�   r(   Zn_timer'   r`   Z	max_stepsZadjsZstat_mapZ
thresholdsZ
sig_countsr6   ÚcsZpsr„   Úcountrž   ÚadjrP   re   r|   ZindsZthis_csZthis_psZthis_stat_mapÚcir*   Zthis_cr’   ÚyÚc1Úc2r.   rÐ   r/   Ú test_permutation_adjacency_equivØ  s†    "ü ÿ      þÿ



rÝ   c              	   C   s’  ddl m} tƒ \}}}}tj d¡}| |jd |jd d¡}t t 	||f¡dddg¡}| |jd |jd d¡}	t t 	||	f¡dddg¡}
||jd dƒ}t
ddd�}t||
g|d	dd|d
d�\}}}}|jd }t||
gd	dd|d|d�\}}}}tt |dk ¡t |dk ¡ƒ t||
gd	dd|dd
d�\}}}}t||ƒ tjtt||
gddd� tjtt||
gddd� tjtt||
gddd� d
S )z*Test spatio-temporal cluster permutations.r   rœ   r1   r    r;   rw   g      @rI   r   N)r¡   ri   rE   r7   rL   rO   )ri   rE   r7   rL   rh   rO   r2   g       À)rE   rL   g       @)r²   r�   r0   r"   r$   r%   r&   ry   Z	transposeZdstackrZ   r   Úsizer   r#   r   rS   r]   r™   )r_   r�   r)   r+   r,   r-   r(   Z	noise1_2dZdata1_2dZ	noise2_d2Zdata2_2drØ   rL   rŒ   r…   Zp_values_adjrŽ   rO   Zp_values_no_adjZ	p_values2Zhist2r.   r.   r/   Ú&test_spatio_temporal_cluster_adjacency  sl    ÿ

   þÿ

   ýÿ
   ýÿ

  ÿ  ÿ  ÿrß   c                 C   s   t  | d¡d S )zReturn T-values.r   )r   rQ   )r`   r.   r.   r/   rQ   M  s    rQ   )ÚsurfaceÚvolumeÚmixedc           	   	   C   s²  t dd„ tdƒD ƒƒ}|jdks$t‚t tt d¡dd�gƒ}|jdksJt‚| dkr\|}t}n*| dkrn|}t}n| d	kszt‚|| }t	}t
d
d„ |D ƒƒ}tj d|g¡t dg¡t dddg¡fgt ddg¡t dddg¡f}tƒ }| dk�r8tjtdd�� t|ƒ W 5 Q R X t|ƒdk�s$t‚|d d g|d< n| d	k�rJ||d< t|f|Ž}t||ƒ�sft‚|jjd dk�s|t‚d|d d< tjtdd�� t|f|Ž W 5 Q R X dS )zTest cluster summary stcs.c                 S   s   g | ]}t t d ¡dd�‘qS )i(  Zsurf©ÚvertnoÚtype)rZ   r"   Úarange)rB   rš   r.   r.   r/   r¤   V  s     z+test_summarize_clusters.<locals>.<listcomp>r;   rà   r    Zvolrã   rá   râ   c                 s   s   | ]}t |d  ƒV  qdS )rä   Nr?   )rB   Úsr.   r.   r/   rD   e  s     z*test_summarize_clusters.<locals>.<genexpr>r1   r   rÎ   g{®Gáz”?rH   é   iòÿÿÿé   zdid not matchr3   rä   Zverticesg333333Ó?zNo significantN)r   ÚrangerÀ   rR   rZ   r"   ræ   r
   r   r   r#   r$   rÆ   rS   r]   r™   r   r@   rµ   Údatary   r^   )	rÀ   Zsrc_surfZsrc_volÚsrcÚklassZ
n_verticesrË   ÚkwargsZstc_sumr.   r.   r/   Útest_summarize_clustersR  sJ    ÿÿý

rï   c           
   	   C   s  t j d¡}| ddd¡d }tjtdd�� t|dd	|d
�\}}}}W 5 Q R X tt	|ƒdƒ dD ]B}t|d||d
�\}}}}tt	|ƒt
|dƒƒ t|d tƒsbt‚qbtddƒD ]P\}}	t||	||dd�\}}}}t|d t jƒsæt‚tt	|ƒdd|dk  ƒ q°dS )z2Test that H0 is populated properly during testing.r   é   r    r1   r   zNo clusters foundr3   rˆ   rx   )rL   ri   r7   )rx   éA   é@   é?   rH   rò   )rw   r   r1   )çš™™™™™¹¿rH   rH   r5   )rL   r7   rE   r9   r;   N)r"   r$   r%   ZrandrS   rT   rU   r   r   r@   rƒ   rµ   rÕ   rR   rŠ   rÒ   )
r_   r(   rë   rP   Zclustre   Zh0ri   rE   r„   r.   r.   r/   Útest_permutation_test_H0z  s:       ÿ   ÿ    ÿrõ   c              	   C   s¶   t j d¡}| ddd¡d }tjtdd�� t|dd	tdd
d�d� W 5 Q R X t|dd	tddd�d� tjtdd�� t|dd	tddd�d� W 5 Q R X t|d tddd�d� dS )zTest TFCE thresholds.r   rð   r    r1   r   zmust be < 0 for tail == -1r3   rw   r5   rH   rI   )rE   r9   rL   rô   z must be monotonically increasingg      à¿).r   gš™™™™™É?)r`   rL   N)	r"   r$   r%   r&   rS   r]   r™   r   rZ   )r_   r(   rë   r.   r.   r/   Útest_tfce_thresholds�  s,       
ÿ
ÿ   
ÿ
ÿrö   ry   ))rt   )rt   rÅ   )rt   r1   r;   r9   )r5   Úindicesr¡   )Nr   c                 C   sÜ  t j d¡}d}|j|f| žŽ }||jddd�8 }|dd…dd…f  d7  < |dd…dd	…f  d7  < t  | t¡}d
|dd…< d|dd	…< |dk	rª|dks¢t‚t| Ž }t	|d
||d�d
 }t  
|¡}t|d
ƒD ]ú\}	}
|dk�rpt| ƒd
k�r4|dk�r4t|
tƒ�st‚t|
ƒd
k�st‚t|
d tƒ�sft‚n2t|
t jƒ�sFt‚|
jtk�sVt‚|
j| k�sft‚|	||
< qÒt|
tƒ�s€t‚|
D ]*}t|t jƒ�sšt‚|jjdk�s„t‚�q„|dk�s¾t‚|	|t j|
Ž < qÒt||ƒ dS )z!Test equivalence of output types.r   r    T)rG   ZkeepdimsNr;   rÎ   r:   rg   r1   r   )r`   ri   r¡   r9   r5   Úir÷   )r"   r$   r%   r&   rÉ   rÊ   ÚintrR   r   r   Z
zeros_likerÔ   r@   rµ   rÕ   ÚslicerÒ   rÑ   r´   ry   rÀ   Zix_r   )ry   r9   r¡   r(   Z
n_subjectsrë   Z	want_maskr…   Zgot_maskÚnrË   r*   r.   r.   r/   Útest_output_equiv¨  sL       ÿÿ


rü   )9Ú	functoolsr   rn   rm   r"   Zscipyr   r   r   Znumpy.testingr   r   r   r	   rS   Zmner
   r   r   r   Z	mne.statsr   r   Zmne.stats.cluster_levelr   r   r   r   r   r   r   Z	mne.utilsr   r   r   r   r'   r0   rf   rr   r}   r‡   r�   ÚmarkZparametrizer›   r¾   ÚparamrZ   rÍ   rÝ   rß   rQ   rï   rõ   rö   rü   r.   r.   r.   r/   Ú<module>   sV   $4&
þ
7
  þ"
F
-
'