U
    f»{j‰Œ  ã                	   @   s  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Zd dlZd dlmZ d dlmZmZmZmZ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& d dl'm(Z( d dl)m*Z* d dl+m,Z, d d	l-m.Z.m/Z/m0Z0m1Z1 d d
l2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z= e >e ?e@¡dddd¡ZAe >eAd¡ZBe >eAd¡ZCe >eAd¡ZDe >eAd¡ZEe >eAd¡ZFe >eAd¡ZGe >eAd¡ZHe >e*jIdd�dd¡ZJejK Ldd¡ejK Ldd ¡d!d"„ ƒƒZMd#d$„ ZNd%d&„ ZOd'd(„ ZPd)d*„ ZQd+d,„ ZRejK Ld-dd.ejSd/ejKjTd0�g¡d1d2„ ƒZUejKjTe:d3d4„ ƒƒZVd[d7d8„ZWejKjTejK Ld9d:¡d;d<„ ƒƒZXd=d>„ ZYd?d@„ ZZdAdB„ Z[dCdD„ Z\e:dEdF„ ƒZ]ejKjTejK Ld9dG¡e:dHdI„ ƒƒƒZ^d\dJdK„Z_ej`dLdM�dNdO„ ƒZae:ejK Ld9dP¡dQdR„ ƒƒZbe:dSdT„ ƒZce*jde:dUdV„ ƒƒZedWdX„ ZfdYdZ„ ZgdS )]é    N)Úassert_array_almost_equalÚassert_array_equalÚassert_equalÚassert_allclose)Úlinalg)Ú
regularizeÚwhiten_evokedÚ_auto_low_rank_modelÚprepare_noise_covÚcompute_whitenerÚ_regularized_covariance)Úread_covÚ	write_covÚEpochsÚmerge_eventsÚfind_eventsÚcompute_raw_covarianceÚcompute_covarianceÚread_evokedsÚcompute_proj_rawÚpick_channels_covÚ
pick_typesÚmake_ad_hoc_covÚmake_fixed_length_eventsÚcreate_infoÚcompute_rank)Úequalize_channels)Útesting)Ú	_get_args)Úread_raw_fifÚRawArrayÚread_raw_ctfÚ	read_info)Ú_DATA_CH_TYPES_SPLITÚ	pick_info)Úmaxwell_filter)Ú_compute_rank_int)Úrequires_sklearnÚcatch_loggingÚ
assert_snrÚ_record_warningsz..ÚioZtestsÚdataútest-cov.fifútest-cov.fif.gzztest-km-cov.fifztest_raw.fifztest-ave.fifztest_erm-cov.fifztest_chpi_raw_sss.fifF)ÚdownloadZCTFztestdata_ctf.dsÚproj)TFÚpca)TÚwhiteFc              	   C   sÖ  t tƒ dd¡ ¡ }|jdddd� | r2| ¡  n| ¡  tjt	dd�� t
|ƒ}W 5 Q R X |d |jksnt‚t||j|dd	d
�\}}}t|jƒ}t|jƒ}|t|jd ƒ }	|dkrº|	n|}|j|jddd…   krä||fksên t‚t ||¡}
|dk�rt|
t |¡dd� nV|dk�rJt|
|	 d…|	 d…f t |	¡dd� n"|dk�sXt‚t|
t |¡dd� |jd g|jd< t|jddg d�}tjt	dd�� t
||d�}t
|dd�}W 5 Q R X t|d dd…dd…f |d ƒ t||j|d|d	d�\}}}t||j|ddd	d�\}}}tj d¡�r.dnd}t|||d� t|||d� t|jƒt|jd ƒ }t|jƒt|jd ƒ }|t|jd ƒ }	|dk�rž|	n|}|j|jddd…   k�rÌ||fk�sÒn t‚dS )z$Test properties of compute_whitener.r   é   T© )ÚmegÚeegÚexcludeúToo few samples©ÚmatchÚnamesÚerror)r1   Úreturn_colorerÚverboseÚprojsNéÿÿÿÿçH¯¼šò×z>©Zatolr2   Fçš™™™™™©?Úbads)Úpicksr,   é   )r1   r=   rE   r>   Úwinçü©ñÒMbP?g•dyáý¥=©Úrtol)r   Ú	raw_fnameÚcropÚ	load_datar   Z
apply_projZdel_projÚpytestÚwarnsÚRuntimeWarningr   Úch_namesÚAssertionErrorr   ÚinfoÚlenÚshapeÚnpÚdotr   ÚeyeÚsysÚplatformÚ
startswith)r0   r1   ÚrawÚcovÚWÚ_ÚCZ
n_channelsZ	n_reducedÚrankZ
round_triprE   Úcov2Úcov3ZW2ZC2ZW3ZC3rJ   r4   r4   úQ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/tests/test_cov.pyÚtest_compute_whitener1   s`    
ÿ

,

 ÿ" ÿ ÿre   c               
   C   sD  t tƒ dd¡ ¡ } t| dd�}|  | jdd… ¡ | jg dd� t| |ddd	dd
�}dD ]À}| 	¡ }t
||gƒ |dkrž|jd d dd…df  d7  < n
d|jd< t tt
||g¡ t
||gdd� tjtdd�� t
||gdd� W 5 Q R X tjtdd�� t
|dd� W 5 Q R X qZd|jd< d|jd< t
||gdd� dS )z)Test estimation with MEG<->Head mismatch.r   é   úSTI 014©Zstim_channelNT)Zremove_existingçš™™™™™É¿ç        ©ÚtminÚtmaxÚpreload)ÚshiftÚNonero   Z
dev_head_tZtransr3   rH   Úignore)Zon_mismatchztransform mismatchr9   ÚwarnzInvalid valueÚx©Úmethod)r   rK   rL   rM   r   Úpick_channelsrQ   Úadd_projr   Úcopyr   rS   rN   ÚraisesÚ
ValueErrorrO   rP   )r\   ÚeventsÚepochsÚkindZepochs_2r4   r4   rd   Útest_cov_mismatchf   s(    $


r~   c               	      s�  t tƒ} | jdd� | j‰ˆd  dg7  < ‡fdd„tˆddd�D ƒ}ttƒ‰ tˆ ˆ|d	d
� ˆ  ¡ }t	j
 d¡ t	 tˆ jƒ¡¡}‡ fdd„|D ƒ|d< ˆ d | dd…|f |d< t|ˆ |ƒ 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 tjtdd�� tˆ ˆdd� W 5 Q R X tˆ ˆdd�}t|ˆdd�}t|||ƒ tˆ ˆ|ƒ}tˆ ˆ|ƒ}t||t	 t|d ƒ¡d� tˆ ˆdd�\}}	}
|jd |jd k�sÆt‚t|ˆdd�\}}}t||	ƒ t||dd� |
|k�s t‚|
|jd k �st‚tˆ ˆddd�\}}}t||	ƒ ||
k�sBt‚|j|t|	ƒfk�sZt‚ttƒd }t|ˆ ƒ}t||ƒ}t|j|jdd� dS )zTest covariance ordering.T©Z
projectionrD   zMEG 0113c                    s   g | ]}ˆ d  | ‘qS ©rQ   r4   ©Ú.0Úpick©rS   r4   rd   Ú
<listcomp>‰   s   ÿz"test_cov_order.<locals>.<listcomp>F©r5   r6   r<   )r>   r   c                    s   g | ]}ˆ d  | ‘qS ©r;   r4   ©r‚   Úii)r]   r4   rd   r…   ‘   s     r;   r,   Nzrank, if strr9   Úfoo)ra   zrank must beç      ð?Úfull)Úorder)Úreturn_rankrF   g�íµ ÷Æ°>rI   )r1   rŽ   rA   rB   )r   rK   Úset_eeg_referencerS   r   r   Ú	cov_fnamer
   rx   rV   ÚrandomÚRandomStateZpermutationZarangerT   rQ   Ú_assert_reorderrN   ry   rz   r   Ú	TypeErrorr   rU   rR   r   r   r   Ú	ave_fnamer   r,   )r\   rQ   Zcov_reorderr�   Zcov_regZcov_reg_reorderZcov_prepZcov_prep_reorderZwhitenerZ
w_ch_namesZn_nzeroZ
whitener_2Zw_ch_names_2Z	n_nzero_2Zwhitener_pcaZw_ch_names_pcaZn_nzero_pcaÚevokedÚevoked_whiteZevoked_white_2r4   )r]   rS   rd   Útest_cov_order�   sp    
ÿÿ  ÿ  ÿ
   ÿ


r˜   c                    sP   t  |¡}t‡ fdd„|D ƒ|d ƒ tˆ d | dd…|f |d dd� dS )z3Check that we get the same result under reordering.c                    s   g | ]}ˆ d  | ‘qS r‡   r4   rˆ   ©Úcov_newr4   rd   r…   ¿   s     z#_assert_reorder.<locals>.<listcomp>r;   r,   Nç#B’¡œÇ;rB   )rV   Zargsortr   r   )rš   Zcov_origr�   Z	inv_orderr4   r™   rd   r“   ¼   s    
ÿ ÿr“   c              	   C   s   | d }t tƒd }t|jƒ}| |¡ dt|ƒks8t‚t|ƒ}t|d |d ƒ t	dddd�}t|j|ƒ}|j|d	d
� dt|ƒksŠt‚t|ƒ}t|d |d ƒ t
 |d ¡|d< tjtdd�� | ¡  W 5 Q R X d|d< | ¡  t
 |d ¡|d< tjtdd�� | ¡  W 5 Q R X dS )z!Test ad hoc cov creation and I/O.r-   r   Ú
Covariancer,   g‚vIhÂ%L=ç›+¡†›„=rA   )ÚgradÚmagr6   T©Ú	overwritezattributes inconsistentr9   FÚdiagN)r   r•   r   rS   ÚsaveÚreprrR   r   r   ÚdictrV   r¢   rN   ry   ÚRuntimeErrorZ_get_square)Útmp_pathZ	out_fnamer–   r]   rb   Zstdr4   r4   rd   Útest_ad_hoc_covÅ   s*    

r¨   c              	   C   sº  t tƒ}d|d< tj |d< | | d ¡ t | d ƒ}t|j|jƒ t|d |d ƒ t|d |d ƒ dt|ƒksxt	‚t t
ƒ}t|j|jƒ | | d ¡ t | d ƒ}t|j|jƒ dg|d< t||d d	�}|d
 t|d ƒt|d ƒ ksôt	‚|d j|d
 |d
 fk�st	‚|j| d dd� t t
ƒ}t|j|jƒ |j| d dd� t | d ƒ}t|j|jƒ | d }tjtdd�� t||ƒ W 5 Q R X tjtdd�� t |ƒ W 5 Q R X dS )z&Test IO for noise covariance matrices.Ú	empiricalru   Úloglikr-   rœ   r.   zEEG 039rD   )r7   Údimr,   Tr    ztest-bad-name.fif.gzz-cov.fifr9   N)r   r�   rV   Úinfr£   r   r,   r   r¤   rR   Úcov_gz_fnamer   rT   rU   rN   rO   rP   r   )r§   r]   rb   Zcov_selZcov_badnamer4   r4   rd   Útest_io_covÞ   s:    
$ r®   ru   r©   Úshrunk)Zmarksc              
   C   s$  | dkrHzddl }W n2 tk
rF } zt d|f ¡ W 5 d}~X Y nX ttdd�}ttƒ}ttdgd�d�}t	ƒ � t
|d| d	|d
�}W 5 Q R X t|j|jƒ t|j|jƒ t|j|jdƒ tj| ¡  |d ¡ ¡ dd�}| dkrøt |jd ¡}	nt tt|jddd�ƒ¡}	||fD ]J}
tt |¡t |
j¡dd� t||	 |
j|	 dd� t|j|
jdƒ �qt	ƒ � t
|| d	|d�}W 5 Q R X t|j|jd ƒ t|j|jdƒ | |d ¡ t|d ƒ}|j|jk�sÖt‚|j|jk�sèt‚t|j|jƒ | ¡  |jdd… ¡}|j ¡  t
|d| d	|d
�}|jdd… |jk�sDt‚t|j|jdd…dd…f dƒ t
|| d	|d�}t|j|jdd…dd…f dƒ ttƒ  dd¡}tj!t"dd�� t
|| |d�}W 5 Q R X tj#t$t
|ddtdd �d!� t	ƒ �, t
| ¡   dd"¡d| td#d �|d$d%�}W 5 Q R X dS )&z0Test estimation from raw (typically empty room).r¯   r   Nzsklearn is required, got %sT©rn   )Ú	shrinkage)r¯   rŒ   )Útstepru   ra   Úmethod_paramsg    €„.Ar;   rF   )Zddofr4   )r5   r7   gñhãˆµøÔ>rI   gü©ñÒMbp?)ru   ra   r³   éx   éª   r-   rf   g    ÐSAéZ   r8   r9   )ru   r³   r©   g-Cëâ6*?)Úeog)r²   ru   Úrejectç      $@rH   r<   )r²   ru   r¸   r³   r>   )%ÚsklearnÚ	ExceptionrN   Úskipr   rK   r   Úerm_cov_fnamer¥   r*   r   r   rQ   Únfreer)   r,   rV   r]   rx   rv   Úget_dataZtriu_indicesrU   rT   r   rS   r   r¢   r£   rR   r   Únormalize_projrL   rO   rP   ry   rz   )ru   r§   rº   Úexpr\   Úcov_mner³   r]   Zcov_npZoff_diagÚotherÚcov_readZraw_pickZraw_2r4   r4   rd   Útest_cov_estimation_on_raw  sŒ    "   þ ÿ
ÿ
 ÿ ÿ ÿ ÿ   ýrÅ   c               	   C   sœ   t tdd�} | j ¡ � | jd  d  < W 5 Q R X t| jdd…ddd…f  ¡ | jƒ} ttƒ}t	j
tdd�� t| d	d
d�}W 5 Q R X t|j|jdƒ dS )z-Test estimation from raw with regularization.Tr°   Úsfreqr¹   Né
   r8   r9   g      @Údiagonal_fixed)r²   ru   rf   )r   rK   rS   Ú_unlockr    Ú_datarx   r   r½   rN   rO   rP   r   r)   r,   )r\   rÂ   r]   r4   r4   rd   Útest_cov_estimation_on_raw_regU  s    $rË   ç{®Gázt?Tc                 C   sb   t | j|jƒ tj| j|j dd�tj| jdd� }||k sLtd||f ƒ‚|r^t | j|jƒ d S )NÚfro©Úordz%s >= %s)r   rQ   r   Únormr,   rR   r¾   )r]   Zcov_desiredZtolr¾   Úerrr4   r4   rd   Ú_assert_covd  s    ÿrÒ   ra   )rŒ   Nc                    s   t tƒ‰ˆjdd� ¡  tˆdd�‰ ddddg}td	d
ddd�‰tˆ |dƒ}tˆ|dddddˆdd�	}t|dd�}t	t
ƒ}|d  d8  < t||ƒ t|ddd�}t |j|jk¡s¸t‚tj|j|j dd�tj|jdd� }|dk sêt‚‡ ‡‡fdd„|D ƒ}t|dd�}	t|j|	jƒ |j|	jk�s,t‚t|dd�}|j|jk�sJt‚t|t	tƒdd� dd dii}
tjtt|d|
d!� tjtt|dd"| d#� | |d$ ¡ t	|d$ ƒ}t||d%ƒ tˆˆ d&d… d&ddddd'�tˆˆ d&d… d&ddddd'�g}t tt|¡ tjtt|d&d(� tjtd)d*�� t||d jd+ d(�}W 5 Q R X tjtd)d*�� t|g d(�}W 5 Q R X tˆˆ tddddd,�dddˆdd-�}tjtd)d*�� t|ƒ W 5 Q R X tjtd)d*�� t|g d(� W 5 Q R X tjtt|d.d(� tjtt|d.gd(� d&S )/z'Test estimation from raw with triggers.Tr   rg   rh   rF   é   r3   é   g•Ö&è.>çê-�™—‘=gñhãˆµø?ga2U0*©#?)rž   rŸ   r6   r·   éÒ  ri   r   ©ri   gš™™™™™¹¿©rl   rm   Úbaseliner0   r¸   rn   )Úkeep_sample_meanr¾   gR¸…ëQÈ¿g{®Gáz„¿)rl   rm   rÍ   rÎ   rC   c                    s$   g | ]}t ˆˆ |d dddˆd�‘qS )ri   r   r×   T)rl   rm   rÙ   r0   r¸   )r   )r‚   Zev_id©r{   r\   r¸   r4   rd   r…   ‹  s   þ  ÿz5test_cov_estimation_with_triggers.<locals>.<listcomp>F)r¾   r©   Zassume_centered)rÚ   r³   r¯   )rÚ   ru   ra   r-   gñhãˆµøä>N)rl   rm   rÙ   r0   )r?   r8   r9   r?   )ÚaÚbÚcÚd)rl   rm   r0   r¸   rn   rŠ   )r   rK   r�   rM   r   r¥   r   r   r   r   Úcov_km_fnamerÒ   rV   Úallr,   rR   r   rÐ   r   rQ   r¾   r�   rN   ry   rz   r£   rO   rP   rS   r”   )ra   r§   Ú	event_idsÚevents_mergedr|   r]   Zcov_kmZcov_tmin_tmaxrÑ   rb   r³   rÄ   r4   rÛ   rd   Ú!test_cov_estimation_with_triggersm  sŒ      þ
ÿþ
 ÿ
  ÿ ÿ ÿþ   ÿrä   c                  C   s|   t tƒ} | |  }td| j |jƒ td| j |jƒ | j|jksDt‚| | 7 } t|j| jƒ t|j| jƒ |j| jksxt‚dS )z/Test arithmetic with noise covariance matrices.rÓ   N)r   r�   r   r¾   r,   rQ   rR   )r]   Zcov_sumr4   r4   rd   Útest_arithmetic_cov»  s    rå   c               
   C   s¬   t tƒ} | jd  | jd ¡ ttƒ}t|| jddddddd�}|d |d ksTt‚|d j	|d j	kslt‚t
 |d |d k ¡d	k sŠt‚ttƒtttƒƒ tƒ ks¨t‚d
S )zTest cov regularization.rD   r   çš™™™™™¹?TrŒ   )rŸ   rž   r6   r0   r7   ra   r«   r,   g{®Gáz´?N)r   rK   rS   ÚappendrQ   r   r�   r   rR   rU   rV   ÚmeanÚsetr#   r   )r\   Ú	noise_covZreg_noise_covr4   r4   rd   Útest_regularize_covÉ  s        þrë   c               	   C   sÔ   t tdddd�} ttƒ}t| jddddd�}t|| jddddd	d
�}t| ||dd�}|j| dd…| j	dk f }t
jt
 |¡dd�}t
 |dk ¡s–t‚t
 |dk¡s¨t‚t|| jdd… d�}t tt| ||¡ dS )zTest whitening of evoked data.r   ©Nr   T©Ú	conditionrÙ   r0   FrD   )r5   r6   Úref_megr7   ræ   rŒ   )rž   rŸ   r6   r7   ra   )r¢   NrF   )Zaxisr‹   çš™™™™™É?rÇ   )Úinclude)r   r•   r   r�   r   rS   r   r   r,   ÚtimesrV   rè   Úabsrá   rR   r   rQ   rN   ry   r¦   )r–   r]   rE   rê   r—   Zwhiten_baseline_dataZmean_baselineZcov_badr4   r4   rd   Útest_whiten_evokedÙ  s$    ÿÿ ÿrô   c                  C   s6   t tdddd�} | j ¡ }t|ƒ t|| jdd� dS )z0Test unchanged data with regularized_covariance.r   rì   Trí   r›   rB   N)r   r•   r,   rx   r   r   )r–   r,   r4   r4   rd   Útest_regularized_covarianceò  s    ÿ
rõ   c               	   C   sÎ   d\} }}d}dd„ }|| |||d�}dddd	gi}d
}d}d}	d}
||
9 }t ||	|||d�\}}t|d |ƒ || |||d�}d|d gi}d|d |f }tjt|d�� t ||	|||d� W 5 Q R X dS )z'Test probabilistic low rank estimators.)i�  rÇ   rf   ræ   c           
      S   s„   t j d¡}| ||¡}| | |¡}t | ¡ ¡\}}}t  ||d d …d |…f j¡}|| 	|¡ |d  }	|| | |¡|	 7 }|S )Né*   ç       @)
rV   r‘   r’   Zrandnr   Zsvdrx   rW   ÚTZrand)
Ú	n_samplesÚ
n_featuresra   ÚsigmaÚrngr^   ÚXÚUr_   Zsigmasr4   r4   rd   r¿     s    z$test_auto_low_rank.<locals>.get_data)rù   rú   ra   rû   Úiter_n_componentsrÔ   rf   é   r3   rF   Úfactor_analysisg    „×—A)ÚmodeÚn_jobsr³   ÚcvÚbestzDYou are trying to estimate %i components on matrix with %i features.r9   N)r	   r   rN   rO   rP   )rù   rú   ra   rû   r¿   rý   r³   r  r  r  ZrescaleZestrS   Úmsgr4   r4   rd   Útest_auto_low_rankü  s:    
ÿþ
ÿ
ÿ ÿr  )rŒ   NrS   c                    sø  t tdd�‰ ˆ jddd� tˆ dd�}dd	d
dg}tdd�}t||dƒ}tˆ jddd�dd… }ˆ  ‡ fdd„|D ƒ¡ ˆ j 	¡  t
ˆ |ddddd|dd�	}| dd¡dd… }ttd
gd�td
gd�d�}t|d|d| d�}t t|jƒ¡ t¡}	t |	¡}
t |d	¡D ]¼\}}|d dk�r||d d k�r|| d!k�r|t |d" |	 |d" |	 k¡�r\t‚t|d" |
 |d" |
 d#d$� nHt |d" |	 |d" |	 k¡�r t‚t |d" |	 |d" |	 k¡�r
t‚�q
d%d„ |D ƒ}t |¡ ¡ dk�sît‚d d&d'd(d)g}| d!k�r| d*d+g¡ tƒ �}t|||dd| dd,�}W 5 Q R X | ¡  d-¡}| dk�rrd.|k�sbt‚d/|k�s€t‚nd0|k�s€t‚d1d„ |D ƒ}d2d3g}| d!k�r¨d4d2gn|}t|ƒd d(h D ]>}||  |¡ d5 }|d |  k �rò|d k �s¼n t‚�q¼||  d(¡ d5 }|d |  k �r.|d k �s4n t‚||  d ¡ d5 }| d!k�rXd6d7gn|}|d |  k �r||d k �s‚n t‚t!d8d9„ |D ƒt|ƒƒ t|||dd| d:�}|d d |d k�sÈt‚t"j#t$t|d;d<� t"j#t$t|d(td=d>�d?� dS )@zTest automated regularization.Tr°   éd   Úauto)Znpadrg   rh   rF   rÓ   r3   rÔ   rÕ   )rŸ   rÖ   rŸ   Fr†   NrÇ   c                    s   g | ]}ˆ j | ‘qS r4   r€   r�   ©r\   r4   rd   r…   3  s     z4test_compute_covariance_auto_reg.<locals>.<listcomp>ri   r   r×   rØ   rf   )rÿ   )r  r1   )ru   r³   Úreturn_estimatorsra   ru   rÈ   r©   rŒ   r,   gê-�™—q=rI   c                 S   s   g | ]}|d  ‘qS )rª   r4   ©r‚   rÞ   r4   r4   rd   r…   W  s     Zledoit_wolfÚoasr¯   r±   r  r1   )ru   r³   r?   r  ra   r>   Ú
z7    Setting small MAG eigenvalues to zero (without PCA)zReducing data rank from 10 -> 7ZReducingc                 S   s   g | ]}|d  ‘qS rt   r4   )r‚   r]   r4   r4   rd   r…   h  s     iÓÿÿÿiÝÿÿÿiÉÿÿÿrª   i’ÿÿÿiœÿÿÿc                 S   s   h | ]}|d  ’qS rt   r4   r  r4   r4   rd   Ú	<setcomp>t  s     z3test_compute_covariance_auto_reg.<locals>.<setcomp>)ru   r³   r?   r  ra   Úpizzart   é{   )Úmisc)ru   Zscalings)%r   rK   Zresampler   r¥   r   r   rS   rv   rÀ   r   rL   r   rV   rX   rT   rQ   ZastypeÚboolÚinvertÚittÚcombinationsÚanyrR   r   ÚdiffÚmaxÚextendr(   ÚgetvalueÚsplitré   Úindexr   rN   ry   rz   )ra   r{   râ   r¸   rã   rE   r|   r³   ÚcovsZ	diag_maskZoff_diag_maskZcov_aZcov_bZlogliksÚmethodsÚlogrc   Zmethod_namesZbest_boundsÚboundsru   Zthis_likZcov4r4   r
  rd   Ú test_compute_covariance_auto_reg$  s¶    

       þ
ÿ þ

þþ
ÿ
 ÿ
ÿ
ÿ
  ý
*&&  þÿr"  c              
   C   s,   t ƒ � t| ||d�W  5 Q R £ S Q R X d S )N)rS   r0   )r*   r&   )r]   rS   r0   r4   r4   rd   Ú	_cov_rankƒ  s    r#  Úmodule)Úscopec                  C   sZ   t tƒjdd� dd¡} t| dd�} | jd g ks6t‚t| ƒ}t| |dddd	�}| ||fS )
z)Create raw, epochs, and events for tests.Tr   r   r3   N)r   rD   ri   rk   )	r   rK   r�   rL   r%   rS   rR   r   r   )r\   r{   r|   r4   r4   rd   Úraw_epochs_events‹  s    r&  )NrŒ   rS   c              	   C   sü   |d }d}d}d}t dddd�t dd	d
d�t dddd�dœ}tjtdd�� t||d| dd�}W 5 Q R X |D ]ˆ}|d }	|t| ƒ |	 }
t||j| dkd�}| dkr¼|	dkr¼||ksÈt‚n||ksÈt‚|
d |d   k rè|
d k snn t| |	fƒ‚qndS )z+Test low-rank covariance matrix estimation.rF   é‹   én  )r©   rÈ   r  )ihÅÿÿixìÿÿ)i$úÿÿiþÿÿ)iDýÿÿi¨ýÿÿ)i°¹ÿÿiÀàÿÿ)i0øÿÿéÀùÿÿ)r)  iüÿÿ)rp   rŒ   rS   r8   r9   T)ru   r  ra   r>   ru   rŒ   )r0   r©   r   rª   N)	r¥   rN   rO   rP   r   Ústrr#  rS   rR   )ra   r&  r|   Ússs_proj_rankÚn_chr  r!  r  r]   ru   Zthese_boundsZ	this_rankr4   r4   rd   Útest_low_rank_methods–  sF    þþþù   þ$ÿr-  c              	   C   sî  | \}}}d}d}d}t jtdd�� t|ƒ}W 5 Q R X t jtdd�� t||jddd	d
� W 5 Q R X t||jƒ|kszt	‚t||jddd�}t||jƒ|ks t	‚t jtdd�� t
||jd� W 5 Q R X ~tƒ �}	t||jdddd�}
W 5 Q R X |	 ¡ }	d|	k�st	‚t|
|jƒ|k�st	‚t||jddd�}t||jƒ|k�sDt	‚t|d |
d ƒ ~~
| ¡ jdd�}t|jƒdk�s~t	‚|j ¡ � |jjg g d� W 5 Q R X t|dddd�}t||jƒdk�sÊt	‚t jtdd�� t|dtdd�d�}W 5 Q R X t||jƒdk�st	‚t|d |d ƒ t|dtdd�dd�}t||jƒdk�sLt	‚t|d |d ƒ | ¡ jddd�}d}| t||d�¡ t|jƒ}|| d }t|jd  ƒd!k�s´t	‚t||d"d#dd$�}t|jƒ|k�sÚt	‚t|ddd%�}t||jƒ|k�sþt	‚t||jddd�}t||jƒ|k�s&t	‚t||jddd�}
t|
|jƒ|k�sNt	‚t|dd&dd'�}t||jƒ|k�stt	‚t|d |d ƒ | |jdd(… ¡ t jtd)d�� t|dd*d+� W 5 Q R X t jtd)d�� t|dd,d+� W 5 Q R X dS )-z4Test additional properties of low rank computations.r'  r(  im  r8   r9   zare dependent.*must equalNræ   rð   )ra   rŸ   rž   TrŒ   )r0   ra   zexceeds the theoreticalr„   )r0   ra   r>   ZjointlyFr,   ©r5   é2  )rD   r?   r  r<   )ru   ra   r>   zfew samples)ru   ra   r†   rÓ   )Zn_eegrF   r?   r3   ri   r   rk   )ra   r>   rÈ   )ra   ru   r>   ég   z"can.*only be used with rank="full"r1   )ra   ru   r  )rN   rO   rP   r   ry   rz   r   rS   r#  rR   r&   r(   r  r   rx   r   rT   rQ   rÉ   Úupdater¥   rw   r   r   rv   )r&  r\   r|   r{   r+  r,  Z	proj_rankZemp_covZreg_covr   Z	reg_r_covZreg_r_only_covZ
epochs_megZcov_fullZcov_dictZn_projra   Zdia_covr4   r4   rd   Útest_low_rank_cov¹  sŒ    
ÿ ÿÿ ÿ
ÿr2  c               
      s&  t tƒ dd¡ ¡ ‰ tˆ dƒ} t| ƒdks.t‚‡ fdd„tˆ jdddd	�D ƒ}d
D ]Z}ˆ  	|¡ t
ˆ | ddddd�}tjtdd�� t|ddgd�}W 5 Q R X t|ˆ j|ƒ qRˆ  	d¡ t
ˆ | ddddd�}tjtdd�� t|ddgd�}W 5 Q R X ˆ  	d¡ t|ˆ j|ƒ ˆ jd �s"tdƒ‚dS )zATest basic cov computation on ctf data with/without compensation.rj   r÷   iŸ† rÓ   c                    s   g | ]}ˆ j d  | ‘qS r€   r„   r�   r
  r4   rd   r…   
  s   ÿz test_cov_ctf.<locals>.<listcomp>TF)r5   r6   rï   )r   rF   Nri   rð   r°   r8   r9   r©   )rm   ru   r   rF   ÚcompszComps matrices removed)r!   Ú	ctf_fnamerL   rM   r   rT   rR   r   rS   Zapply_gradient_compensationr   rN   rO   rP   r   r
   )r{   rQ   Úcompr|   rê   r4   r
  rd   Útest_cov_ctf  s.    


ÿÿ
ÿ

r6  c                  C   sj   t tddddgddd�ƒ} t tdddgddd�ƒ}t| |gƒ\} }| jddgksTt‚|jddgksft‚d	S )
z:Test equalization of channels for instances of Covariance.ZCH1ZCH2ZCH3ZCH4r‹   r6   )rÆ   Zch_typesZCH5N)r   r   r   rQ   rR   )Zcov1rb   r4   r4   rd   Útest_equalize_channels#  s    ÿÿr7  c               	   C   s.  t tƒ} t| t| dd�ƒ} |  ¡ � g | d< W 5 Q R X t| ƒ ¡ }t|d ƒdksVt‚t	|| ddd�\}}}|dksxt‚t
|| dd�t|d�ks”t‚|d	 d
  d9  < t	|| ddd�\}}}|dksÊt‚t
|| dd�t|d�ksæt‚tjtdd��" t	|| tdd�dd�\}}}W 5 Q R X |dk�s*t‚dS )zTest risky rank options.Tr.  r?   r;   r/  N)ra   rŽ   )rS   r>   r,   r@   r�   i1  zexceeds the estimatedr9   )r"   r•   r$   r   rÉ   r   Z
_as_squarerT   rR   r   r   r¥   rN   rO   rP   )rS   r]   r_   ra   r4   r4   rd   Útest_compute_whitener_rank.  s$    
ÿr8  )rÌ   T)T)hÚos.pathÚpathÚopÚ	itertoolsr  rY   Znumpy.testingr   r   r   r   rN   ÚnumpyrV   Zscipyr   Zmne.covr   r   r	   r
   r   r   Zmner   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zmne.channelsr   Zmne.datasetsr   Z	mne.fixesr   Zmne.ior   r    r!   r"   Zmne.io.pickr#   r$   Zmne.preprocessingr%   Zmne.rankr&   Z	mne.utilsr'   r(   r)   r*   ÚjoinÚdirnameÚ__file__Úbase_dirr�   r­   rà   rK   r•   r½   Zhp_fif_fnameZ	data_pathr4  ÚmarkZparametrizere   r~   r˜   r“   r¨   r®   ÚparamZslowtestrÅ   rË   rÒ   rä   rå   rë   rô   rõ   r  r"  r#  Zfixturer&  r-  r2  Zrequires_testing_datar6  r7  r8  r4   r4   r4   rd   Ú<module>   sŽ    Dÿ3;	&ý
L
	L

'\



!
I