U
    f»{j- ã                   @   s”  d dl mZ d dlm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mZ d dlmZmZmZmZmZ d dlZd dlmZ d dlmZ d d	lmZ d dl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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF d dlGmHZH d dlImJZJmKZK d dlLmMZM d dlNmOZOmPZPmQZQ d dlRmSZSmTZTmUZUmVZV d dlWmXZXmYZY d dlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z` d dlCmaZa e@jbdd�Zbe cebd¡Zde cebddd¡Zee cebddd¡Zfe cebddd¡Zge cebddd¡Zhe cebddd ¡Zie cebddd!¡Zje cebddd"d#¡Zke cebdd$d"d#¡Zle cebddd"d%¡Zme cebddd&¡Zne cebdd$d'd(¡Zoe cebddd'¡Zpe cepd)¡Zqe cepd*¡Zre cebddd+¡Zse cebddd,¡Zte cebddd-¡Zue cebddd.¡Zve cebd/d0d1¡Zwejx yd ¡Zze@j{d2d3„ ƒZ|e@j{d4d5„ ƒZ}ej~je@j{e_d6ƒd7d8„ ƒƒƒZ€e^ƒ e@j{d9d:„ ƒƒZ�e@j{e^ƒ d;d<„ ƒƒZ‚e@j{d=d>„ ƒZƒd´d@dA„Z„dµdBdC„Z…e@j{dDdE„ ƒZ†dFdG„ Z‡dHdI„ Zˆe_d6ƒej~ ‰dJdK¡ej~ ‰dLdK¡dMdN„ ƒƒƒZŠdOdP„ Z‹dQdR„ ZŒej~je@j{dSdT„ ƒƒZ�e@j{dUdV„ ƒZŽe@j{ej~ ‰dWdX¡ej~ ‰dLdY¡dZd[„ ƒƒƒZ�e@j{ej~ ‰d\e�dddd]d^fe�dde�d"d_fe�dd`e‘d"d_fe�d`ddd"d_fe’d`ddd"d_fe“d`ddd"d_fg¡dadb„ ƒƒZ”dcdd„ Z•e@j{dedf„ ƒZ–dgdh„ Z—didj„ Z˜dkdl„ Z™e\dmdn„ ƒZše@j{dodp„ ƒZ›e[dqdr„ ƒZœe[ej~ ‰dsdtdtdugdf¡dvdw„ ƒƒZ�ej~ ‰dWdx¡ej~ ‰dLdY¡ej~ ‰dydz¡d{d|„ ƒƒƒZže_d6ƒe@j{d}d~„ ƒƒZŸe_d6ƒej~ ‰ded€fe4d�fe4d‚fe7dƒfg¡ej~ ‰d„ej ej¡ej¢ej£g¡d…d†„ ƒƒƒZ¤ej~ ‰d‡dK¡dˆd‰„ ƒZ¥e@j{dŠd‹„ ƒZ¦ej§dŒe@ ¨¡ gd��dŽd�„ ƒZ©ejªd�ej~j«e¬d‘�d’�Z­ej~ ‰d“dd�dLg¡d”d•„ ƒZ®ej~ ‰d“dd�dLg¡d–d—„ ƒZ¯ej~ ‰d“d˜¡d™dš„ ƒZ°e@j{d›dœ„ ƒZ±e\e@j{d�dž„ ƒƒZ²e@j{dŸd „ ƒZ³e\e^ƒ e@j{d¡d¢„ ƒƒƒZ´e@j{d£d¤„ ƒZµe_d¥ƒe@j{d¦d§„ ƒƒZ¶d¨d©„ Z·e^ƒ e@j{ej~ ‰dWejªdªe_d«ƒej~jgd’�d¬f¡ej~ ‰d­d®¡d¯d°„ ƒƒƒƒZ¸e@j{ej~ ‰dWd¬ejªdªej~je_d±ƒgd’�g¡d²d³„ ƒƒZ¹dS )¶é    )Únullcontext)ÚdeepcopyN)Úcopyfile)Úfft)Úassert_array_almost_equalÚassert_array_equalÚassert_allcloseÚassert_equalÚassert_array_less)Úsparse)Úfmin_cobyla)Úcdist)"ÚstatsÚSourceEstimateÚVectorSourceEstimateÚVolSourceEstimateÚLabelÚread_source_spacesÚread_evokedsÚMixedSourceEstimateÚfind_eventsÚEpochsÚread_source_estimateÚextract_label_time_courseÚspatio_temporal_tris_adjacencyÚstc_near_sensorsÚspatio_temporal_src_adjacencyÚread_covÚEvokedArrayÚspatial_inter_hemi_adjacencyÚread_forward_solutionÚspatial_src_adjacencyÚspatial_tris_adjacencyÚ	pick_infoÚSourceSpacesÚVolVectorSourceEstimateÚ
read_transÚ
pick_typesÚMixedVectorSourceEstimateÚsetup_volume_source_spaceÚconvert_forward_solutionÚpick_types_forwardÚcompute_source_morphÚlabels_to_stcÚ	scale_mriÚwrite_source_spaces)Útesting)Ú_get_img_fdata)Ú	read_info)ÚFIFF©Ú_make_morph_map_hemi)Úgrade_to_trisÚ_get_vol_mask©Ú_get_src_nn)Úapply_transÚinvert_transformÚtransform_surface_to)Úread_inverse_operatorÚapply_inverseÚapply_inverse_epochsÚmake_inverse_operator)Úread_labels_from_annotÚlabel_sign_flip)Úrequires_pandasÚrequires_sklearnÚcatch_loggingÚrequires_nibabelÚrequires_versionÚ_record_warnings)Úread_raw_fifF)ÚdownloadZsubjectsZMEGÚsamplez-sample_audvis_trunc-meg-eeg-oct-6-meg-inv.fifz3sample_audvis_trunc-meg-eeg-oct-4-meg-fixed-inv.fifz)sample_audvis_trunc-meg-eeg-oct-4-fwd.fifzsample_audvis_trunc-cov.fifzsample_audvis_trunc-ave.fifzsample_audvis_trunc_raw.fifÚmrizT1.mgzÚ	fsaverageúaseg.mgzz)sample_audvis_trunc-meg-eeg-oct-6-fwd.fifÚbemzfsaverage-ico-5-src.fifzsample-oct-4-src.fifzsample-volume-7mm-src.fifzsample_audvis_trunc-megz0sample_audvis_trunc-grad-vol-7-fwd-sensmap-vol.wz%sample_audvis_trunc-meg-vol-7-fwd.fifz)sample_audvis_trunc-meg-vol-7-meg-inv.fifZNIRxZnirscoutZnirx_15_0_recordingc                  C   sÌ   t tƒt tdƒg} ddg}| D ]¨}|j}|D ]˜\}}|j||fd�}|pP|jd }|p^|jd }t || ¡ ¡ }t || ¡ ¡ d }	|jdd…||	…f }
|
j	dd	�}t 
|jd ¡}t||ƒ q,qdS )
z5Test baseline correction for source estimate objects.rK   )ç        çš™™™™™¹?)NN©Úbaseliner   éÿÿÿÿé   N©Úaxis)r   Ú	fname_stcÚ	fname_volÚtimesÚapply_baselineÚnpÚabsZargminÚdataÚmeanÚzerosÚshaper   )ÚstcsZ	baselinesÚstcrZ   ÚstartÚstopÚt0Út1ZiminZimaxZ	data_baseZ	mean_baseZ
zero_array© rh   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/tests/test_source_estimate.pyÚtest_stc_baseline_correctionU   s     ÿrj   c            
         sÖ  t tdƒ} t| jjdƒ t tdƒ} t| jjt | j¡d ƒ ttƒ}t |dƒ} |  	¡ } | jd }|d | jj  k r€|d k s†n t
‚t| d|d d	 …d|d d	 …f jjdƒ t| |d
 d	  d…|d
 d	  d…f jjdƒ | j|  d |  }| ¡  t|jjdƒ | d|d d	 …|d d	 d…f  ¡ }t| ¡ |  ¡ d ƒ ddddg}tdƒD ]p\}}|| d t tj|d
| d�¡d  ‰ tdd|td�}‡ fdd„|D ƒ}	t|	ƒt|ƒ tƒ k�s`t
‚�q`dS )z+Test spatial adjacency between hemispheres.gñhãˆµøÔ>r   g    ÐSAé   ç{®Gáz„?g{®Gáz”?rQ   NÚnuserU   ç       @ZS_pericallosalÚUnknownzG_and_S_cingul-Mid-PostZG_cuneus©ÚlhÚrhÚvertnorV   rK   zaparc.a2009s©Úsubjects_dirc                    s,   g | ]$}t  |jˆ ¡ ¡ r|jd d… ‘qS )Néýÿÿÿ)r\   Úin1dÚverticesÚanyÚname©Ú.0Úlabel©Zhas_neighborsrh   ri   Ú
<listcomp>�   s    ÿz5test_spatial_inter_hemi_adjacency.<locals>.<listcomp>)r   Úfname_src_3r	   r^   Úsizer\   Úprodra   r   ÚtocsrÚAssertionErrorÚTZeliminate_zerosÚtoarrayÚsumÚ	enumerateÚwherery   rA   ru   Úset)
ÚconnÚsrcÚn_srcÚcZupper_rightZgood_labelsÚhiÚhemiÚlabelsZ
use_labelsrh   r~   ri   Ú!test_spatial_inter_hemi_adjacencyr   s<    



&.2(ÿÿÿÿr’   Úh5ioc                 C   s´  ddl m} d}t |¡dd…tjf }||t d¡dd…tjf t d¡ ddd¡g}t |¡}||dd…tjf t d¡dd…tjf t d¡g}||t d¡t d¡g}t|||ƒD �]
\}}}|jd	krêt||gddƒ}	d
}
t}n&|jdksøt	‚t
||gddƒ}	d}
t
}| d|
  }|	}|
dk�r.dnd}t|ƒD ]Š}|dk �rX|j|dd� n4|t|ƒt|	jd |	j|	j|	j|	j|	jd�ddd� t|ƒ}t||ƒ�s¤t	‚t||jd ƒ t|	j|jƒ �q:qºttdƒ}	t|	tƒ�sât	‚dt|	ƒk�sôt	‚dt|	ƒk�st	‚|	}| d }tjtdd�� |	jtddd� W 5 Q R X dD ]n}tdƒD ]^}| d|  }|j||dd� t|ƒ}t|tƒ�s„t	‚t|	jd |jd ƒ t|	j|jƒ �qL�q@dS )zTest volume STCs.r   )Ú
write_hdf5éd   Nrk   é   é   rU   )rU   rk   rc   Úh5ztemp-vl.T)Ú	overwrite)rx   r^   ÚtminÚtstepÚsubjectZsrc_typeZ	mnepython)Útitler™   rK   z kBztemp-vl.stcz'ftype' parameter©ÚmatchZwhatever©Úftyper™   )Úwr˜   ztemp-vol.%s)r“   r”   r\   ÚarangeÚnewaxisZreshapeÚzipÚndimr   r„   r%   ÚrangeÚsaveÚstrÚdictrx   r^   rš   r›   rœ   Z	_src_typer   Ú
isinstancer   r   rY   ÚreprÚpytestÚraisesÚ
ValueError)Útmp_pathr”   ÚNr^   Zdatasrs   ZvertnosZvertno_readsZvertno_readrc   ÚextÚklassZ
fname_tempÚstc_newÚnÚiir¡   Ú_rh   rh   ri   Útest_volume_stc”   s~    ý
ý

    ý û
r¸   c               	   C   sì   ddl } ttƒ}ttdƒ}|j|d ddd�}|  t¡}t|| j	ƒsHt
‚|j ¡ dd… |j ¡ dd… kspt
‚|j|d d	d
�}t|| j	ƒs’t
‚|jdd… |d d d dd… ks¼t
‚tjtdd�� |j|d dd� W 5 Q R X dS )z+Test previous volume source estimate morph.r   NrK   rŒ   TZ42)Úmri_resolutionÚdestr—   F©r¹   ra   zInvalid value.*output.*rž   )Úformat)Únibabelr=   Úfname_inv_volr   rY   Ú	as_volumeÚloadÚfname_t1r«   ZNifti1Imager„   ÚheaderZ	get_zoomsra   r­   r®   r¯   )ÚnibZinverse_operator_volÚstc_volÚimgÚt1_imgrh   rh   ri   Útest_stc_as_volumeÙ   s    
ÿ
(*rÇ   c              	   C   sÂ  ddl }ttƒ}| d }ttdƒ}t|tƒs0t‚|j||ddd� t	ƒ � | 
t|ƒ¡}W 5 Q R X |j|d d t|jƒf ks„t‚t	ƒ � | 
t¡}W 5 Q R X |j||d	d
d
d� t	ƒ � | 
t|ƒ¡}W 5 Q R X |j|jt|jƒf ksðt‚t|j|jdd� |j|d	d
d�}|j|jt|jƒf k�s0t‚t|j|jdd� t|d |d gƒ}ttj|j|jf |jd |jd g|j|jdd�}|j|d	dd�}|j|d d t|jƒf k�s¾t‚dS )z(Save the stc as a nifti file and export.r   Nz
stc.nii.gzrK   ÚsurfF)rº   r¹   ra   rL   T)rº   r¹   r™   çñhãˆµøä>©Úatol)rš   r›   rœ   )r½   r   Ú
fname_vsrcr   rY   r«   r   r„   Zsave_as_volumerH   rÀ   r©   ra   ÚlenrZ   rÁ   r   Úaffiner¿   r$   r\   Zr_r^   rx   rš   r›   )r°   rÃ   rŒ   Z	vol_fnamerc   rÅ   rÆ   rh   rh   ri   Útest_save_vol_stc_as_niftió   sB    
 ÿ"ÿ  þrÏ   c               	   C   s  t tdƒ} tt | jjd d| jjd f¡| j| j| j	| j
ƒ}| |fD ]Â}dt|ƒksZt‚tdddtd�}|d |d  }| |¡}| ¡ }|j d¡ |dd	… D ]}|| |¡ |j¡7 }q¤t t|j|jd ¡ t t|j|jd g¡ t t|j| |d ¡¡ qFdS )
zTest stc expansion.rK   r   r—   rU   Úaparcrq   rt   Nrk   )r   rX   r   r\   r`   r^   ra   rx   rš   r›   rœ   r¬   r„   rA   ru   Úin_labelÚcopyÚfillÚexpandr­   r®   Ú	TypeErrorr¯   Ú__add__)Ústc_Úvec_stc_rc   Ú	labels_lhÚ	new_labelZstc_limitedr´   r}   rh   rh   ri   Útest_expand  s.    

ÿ  ýÿ
rÛ   é
   c                 C   sL   t j d¡ t  d¡t  d¡g}t j d| ¡}|r<| t¡ t||dddƒS )Né   rÜ   éZ   r•   r   rQ   Úfoo)r\   ÚrandomÚseedr£   ÚrandÚastypeÚcomplexr   ©Ún_timeÚ
is_complexÚvertsr^   rh   rh   ri   Ú	_fake_stc4  s    
ré   c                 C   sN   t j d¡ t  d¡t  d¡g}t j dd| ¡}|r>| t¡ t||dddƒS )	NrÝ   rÜ   rÞ   r•   r—   r   rQ   rß   )r\   rà   rá   r£   râ   rã   rä   r   rå   rh   rh   ri   Ú_fake_vec_stc=  s    

ÿrê   c               	   C   sú   t tƒ} ttƒ}ttƒ}ttdd�d  dd¡}t	|| ƒ}|j
dk  ¡ sLt‚tjtdd�� | |j||¡ W 5 Q R X tjtdd�� t|ƒ |j||¡ W 5 Q R X t	|| dd	�}| |j||¡}t|j|jƒ |j
}| ¡ d
k sæt‚| ¡ dksöt‚dS )zTest computing SNR from a STC.©Nr   rR   r   rl   ZnAmrž   zfree oriÚMNE)ÚmethodiöÿÿÿiˆÿÿÿN)r=   Úfname_inv_fixedr    Ú	fname_fwdr   Ú	fname_covr   Úfname_evokedÚcropr>   r^   ry   r„   r­   ÚwarnsÚRuntimeWarningZestimate_snrÚinfor]   r   rZ   ÚmaxÚmin)ÚinvÚfwdZcovÚevokedrc   Úsnrrh   rh   ri   Útest_stc_snrG  s     
rü   c                  C   s‚  t dd�} tdd�}t| jƒ}t| jjd |ƒ t| j| jt	 
|¡| j  ƒ t| jdddddd	d
dddg
ƒ dd„ }dd„ }t t|| ¡ t t|| ddg¡ d| _t| jƒtks¸t‚t| jddddddddddg
ƒ d| _t| jƒtksðt‚t| jdddd d!d"d#d$d%d&g
ƒ t t|| d'd(¡ t t|| d'd¡ t	j d)d*¡| _t| jdddd d!gƒ t t|| d+dgg¡ t t|| d+d,¡ t t|| d+t	 
d)¡¡ t t||d+t	 
d)¡g¡ t t||d+t	 
d)¡ggg¡ t	 d-¡| _t	 d.¡| _d,| _t| jd.ƒ t ƒ } | jd,d,…t	jd,d,…f }tjtd/d0�� t|| jd(dƒ W 5 Q R X t|d,d,…d(d(f | jd(dƒ} | jjt|ƒdfk�s~t‚d,S )1zTest STC attributes.rÜ   ©ræ   rT   rP   rQ   çš™™™™™É?g333333Ó?çš™™™™™Ù?ç      à?ç333333ã?çffffffæ?çš™™™™™é?çÍÌÌÌÌÌì?c                 S   s   |  j d8  _ d S )NrU   )rZ   )rc   rh   rh   ri   Úattempt_times_mutationg  s    z3test_stc_attributes.<locals>.attempt_times_mutationc                 S   s   t | ||ƒ d S ©N)Úsetattr)rc   ÚattrÚvalrh   rh   ri   Úattempt_assignmentj  s    z/test_stc_attributes.<locals>.attempt_assignmentrZ   rU   ç      ð?gš™™™™™ñ?ç333333ó?çÍÌÌÌÌÌô?gffffffö?g      ø?gš™™™™™ù?ç333333û?gÍÌÌÌÌÌü?gffffffþ?rn   ç      @g      @g      @g      @g      @g       @g      "@g      $@r›   r   r•   é   r^   N)rk   rk   )rk   r—   z2 dimensions for SourceEstimaterž   )ré   rê   rÍ   rZ   r	   Ú_datara   r   rš   r\   r£   r›   r   r­   r®   r¯   ÚtypeÚfloatr„   rà   râ   r^   r`   Z_kernelZ
_sens_datar¤   r   rx   )rc   Úvec_stcÚn_timesr  r
  r^   rh   rh   ri   Útest_stc_attributes\  sf    


 ÿ ÿ ÿ ÿ
ÿÿr  c              	   C   s¾   t ƒ }| | d ¡ t| d ƒ}t|j|jƒ t|j|jƒ tt|jƒt|jƒƒ t	|j|jƒD ]\}}t||ƒ q`t|j
|j
ƒ |j tj¡|_tjtdd�� | | d ¡ W 5 Q R X dS )zTest IO for STC files.ztmp.stczCannot save complex-valued STCrž   zcomplex.stcN)ré   r¨   r   r   r^   rš   r	   rÍ   rx   r¥   r›   rã   r\   Ú
complex128r­   r®   r¯   )r°   rc   Zstc2Úv1Úv2rh   rh   ri   Útest_io_stcŸ  s    r  rç   )TFÚvectorc              	   C   sn  |rt |d�}n
t|d�}|r"dnd}tjt|d�� |j| d dd� W 5 Q R X t| d ƒ}|j|d	d� t |d
 ¡s~t	‚tjt
dd�� |j|d	d� W 5 Q R X |j|d	dd� t|ƒ}t|d ƒ}t|d
 ƒ}tjtt|dd� |||fD ]v}	t|	j|jƒ t|	j|jƒ t|	j|jƒ t|	j|jƒ tt|	jƒt|jƒƒ t|	j|jƒD ]\}
}t|
|ƒ �qRqòdS )z!Test IO for STC files using HDF5.)rç   zcan only be writtenzInvalid value for the 'ftyperž   ztmp.h5rß   ©r¡   Útmpr˜   z-stc.h5zDestination file existsTr    z-stcÚbar©rœ   N)rê   ré   r­   r®   r¯   r¨   r©   ÚopÚisfiler„   ÚFileExistsErrorr   ÚRuntimeErrorr	   rœ   r   r^   rš   r›   rÍ   rx   r¥   )r°   rç   r  rc   rŸ   Úout_nameZstc3Zstc4Zstc5r´   r  r  rh   rh   ri   Útest_io_stc_h5±  s4    

ÿr%  c                 C   st   t dd�}| d }|j|dd� t|ƒ}|j| d dd� t| d ƒ}t|j|jƒ t|j|jƒ t|j|jƒ dS )	zTest IO for w files.rU   rý   Zfaker¢   r  r  ztmp-lh.wN)ré   r¨   r   r   r^   Ú	lh_vertnoÚ	rh_vertno)r°   rc   Zw_fnamerŒ   Zsrc2rh   rh   ri   Ú	test_io_wÓ  s    
r(  c            
   
   C   sì  t ƒ } | j ¡ }tƒ }|j ¡ }tƒ }|| ||fD ]Ð}||d  d|  |d d  }||7 }||8 }tjdd�� |d|  }W 5 Q R X || 9 }|d7 }|d8 }|d9 }|d }d| }d| }|
 }t|j|jƒ tjdd�� |dC }W 5 Q R X | |¡ q2t|d |d jƒ t|d |d jƒ t|  	¡ jt 	| j¡ƒ t| 	¡ jt 	|j¡ƒ tt
| ƒjt
| jƒƒ tt
|ƒjt
|jƒƒ |  ¡ }t|j| jjddd	�ƒ |  ¡ }t|j| jjddd	�ƒ | ¡ }	t|	j|jjddd	�ƒ d
S )zTest arithmetic for STC files.r—   rk   Úignore)ÚinvalidrU   rT   r   T)ÚkeepdimsN)ré   r^   rÒ   rê   Úlistr\   Zerrstater   ÚappendÚsqrtr]   r‡   r_   )
rc   r^   r  Zvec_dataÚoutÚaÚbZstc_sumZstc_meanZvec_stc_meanrh   rh   ri   Útest_stc_arithmeticà  sF    

 
r2  c               	   C   s�  t tƒ} | jdd…tjdd…f }t |jd d|jd f¡}tt ||fd¡| j	| j
| j| jƒ}| |fD �]}t|j|jdt|jƒ… ƒ t|j|jt|jƒd… ƒ | d¡}tj|jddt |jd¡…f dd�}t||jd	 ƒ t tƒ}d
|_td
ddtd�d }td
ddtd�d }|| }	|||	fD ]~}
t|jtƒ�rRt|jƒdk�sVt‚| |
¡}|
jdk�r0|
jdk�r„|j	d }n
|j	d }t|
 |¡ƒ}tt|jƒ|ƒ �q0| |¡}t  t!|j|¡ d|_t  t"|j|¡ t#|ƒ}d|j }|j$d| dd� |jjd d|jjd  k�s&t‚|j|jd k�s<t‚|j$|dd� |jjd |jjd k�sht‚|j|jk�szt‚t%|j|jdƒ qjdS )z5Test stc methods lh_data, rh_data, bin(), resample().Nr   rk   rU   ç¸…ëQ¸¾?.rT   rV   ).r   rK   rÐ   rq   rt   rr   Zbothrß   r  )Znpadr  )&r   rX   r^   r\   r¤   r`   ra   r   Úconcatenaterx   rš   r›   rœ   r   Úlh_datarÍ   r&  Zrh_dataÚbinr_   ÚsearchsortedrZ   rA   ru   r«   Útupler„   rÑ   r�   Zget_vertices_usedr	   r­   r®   r¯   r#  r   Zresampler   )r×   ÚxZyzrØ   rc   Zbinnedr0  Zlabel_lhZlabel_rhZ
label_bothr}   Z	stc_labelrè   Zn_vertices_usedZstc_lhr´   Zo_sfreqrh   rh   ri   Útest_stc_methods  sf       þ
&ÿÿÿÿ"



"r:  c                  C   sf   t tƒ} t t| jd¡ d| jdd…< | jdtd�\}}}|dksFt‚t	|dƒ t	t
 |d¡dƒ dS )	z,Test computing the center of mass on an stc.rK   r   Nrt   rU   iwç rk   r3  )r   rX   r­   r®   r¯   Zcenter_of_massr5  ru   r„   r	   r\   Úround)rc   Zvertexr�   Útrh   rh   ri   Útest_center_of_massF  s    
r=  Úkind)ÚsurfaceÚmixed)FTc           #   
      sê  d}d}t tƒd ‰| dkrFt d¡ d}ˆtdd|td	d
�7 ‰t}nt}|sT|j}dd„ ˆD ƒ}t	 
dd„ |D ƒ¡}t	 ddtˆƒ d¡}t	j|dd…t	jf |dd�}	tddtd�}
tddtd�}tƒ ‰ ˆ  |
dd… ¡ ˆ  |dd… ¡ tˆ ƒ}tt	 |¡dd…df t	 ||f¡ d�}|d |d< t	 |d ¡|d< tˆ ƒD ].\}}|t	 t|ˆdd… ƒ¡ |d |< �qHtƒ }d}t|ƒD �]"}t	 | ¡ |f¡}tˆ ƒD ]„\}}|jdk�rât	 |d |j¡}t	 |d |¡}n:|jdk�rt	 |d |j¡}t|d ƒt	 |d |¡ }|d | ||< �qªtt|ƒƒD ]2}|dd| …  ¡ }|| |||||  …< �q<|�r”t	j|dd…t	jf f|žŽ }|||ddƒ}|  |¡ �qŠ|�r|D ],}t	j|| dd…t	jf f|žŽ ||< �qºt	j|	dd…t	jf f|žŽ }	tj!t"dd�� t#|ˆ ˆd d!� W 5 Q R X ˆ d  $¡ }| jd"7  _tj!t"d#d�� t#||ˆƒ W 5 Q R X tj%t&d#d�� t#||ˆd$d%�}W 5 Q R X |�r¨d|fn|f}|D ]\}|j'dt|ƒ f| k�sÔt(‚t)|dd… t	 d&| ¡ƒ t|ƒ�r²t)|dd… |	ƒ �q²ddd'dd(g}|D �]R‰|�rfˆd)k�rftj!t"d*d�� t#|ˆ ˆˆd!� W 5 Q R X �q"t*ƒ � t#|ˆ ˆˆd!�}W 5 Q R X ‡ ‡‡fd+d„|D ƒ}t|ƒ|k�s°t(‚t|ƒ|k�sÂt(‚t+||ƒD ]¦\}} |j'|t|ƒ f| k�sòt(‚| j'|t|ƒ f| k�st(‚t,|| d,d-d.� ˆd(k�r:|�r4dnd}!nˆ}!|!d/k�r^t-|d|… ||! ƒ t-||d… |	ƒ �qÌ�q"t.ˆd d0 dd… dd1�}t|ˆdd… ƒ}"t|"ƒdk�s¸t(‚t.g dd1�}t|ˆdd… ƒ}"|"j/dk�sæt(‚dS )2zATest extraction of label time courses from (Mixed)SourceEstimate.r—   é2   rŒ   r@  r½   )zLeft-Cerebellum-CortexzRight-Cerebellum-CortexrK   g      4@F)ÚposZvolume_labelru   Zadd_interpolatorc                 S   s   g | ]}|d  ‘qS ©rs   rh   ©r|   Úsrh   rh   ri   r   i  s     z2test_extract_label_time_course.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS rh   )rÍ   ©r|   Úvrh   rh   ri   r   j  s     rT   rU   NrV   rq   )r�   ru   rr   r  é   )r_   r_   rö   Ú	mean_fliprk   ))©r   r   ©rk   r   rJ  Úconstantr   zInvalid value for the 'mode'rž   Znotamode©Úmodei@B zdoes not contain any verticesT)Úallow_empty)rU   Zpca_flipÚauto)r_   rö   rP  zwhen using a vectorc                    s   g | ]}|j ˆ ˆˆd �‘qS )rM  )r   )r|   rc   ©r‘   rN  rŒ   rh   ri   r   ¿  s   þÿg:Œ0âŽyE>g¼‰Ø—²Òœ<©ÚrtolrË   )r_   rö   rI  rs   )rx   r�   )0r=   Ú	fname_invr­   Úimportorskipr)   ru   r(   r   Ú_scalar_classr\   Úarrayr£   rÍ   Úrepeatr¤   rA   r,  Úextendrª   ÚonesZ
zeros_likerˆ   r_   rB   r§   r`   r‡   r�   Zintersect1drx   r7  Úpadr-  r®   r¯   r   rÒ   ró   rô   ra   r„   r   rH   r¥   r   r   r   r�   )#r>  r  Zn_stcsr  Zlabel_namesr³   rx   Ún_vertsZ	vol_meansZvol_means_trÙ   Z	labels_rhÚn_labelsZ	label_tcsÚir}   rb   r[  r^   ÚjÚidxÚoffsetZthis_stcÚkeyZempty_labelZtcÚ	end_shapeZarrÚmodesÚlabel_tcZlabel_tc_methodZtc1Ztc2Zuse_moder9  rh   rQ  ri   Útest_extract_label_time_courseT  sØ    
   þÿÿ"ÿÿ*ÿ

þ

rf  z1label_type, mri_res, vector, test_label, cf, callÚheadÚmethÚfuncTc           *   
      sÐ  | \}}‰d}	|	t |ƒkst‚ttƒ}
|dkrh|
d }|d d tjksLt‚tt|
d ƒ|d d ƒ}n6|dkstt‚tt	ƒ}|d d tj
ks’t‚|d d }|D ]}t|d |d	d
� q¢t |ƒdkrÐ|jdksÔt‚t}|sâ|j}|d d g}t |d d ƒ}d}t d|d ¡ }}|f}|�rHd| }t |dd…tjf dd¡}t |dtjf |d¡}|| t¡|ddƒg‰‡ ‡fdd„}tjtdd�� |t||d� W 5 Q R X t |ƒdk�s¾t‚t|d d t t dd„ |D ƒ¡¡ƒ |d d dk�süt‚|d d dk�st‚t |d d ƒdk�s,t‚td d!„ |D ƒƒdk�sHt‚t|d d d"d#d$gƒ tt t |d d d"d#d$g¡¡d d%d&d'gƒ |�rœg }nd(d)d*d+g}t |ƒ}|t k�rÀt!}nz|t"k�rÔt!|f}nf|t#k�sât‚t!‡fd,d-„|D ƒf}|�st‚t |ƒdk�st‚d.g}d/|d |d < |d7 }|	d7 }	|t |ƒ8 }|dk�r€|�s€tj$t%d0d�� |||d1|d2� W 5 Q R X d3D �]D}t&ƒ �}||||d4|d1d5�}W 5 Q R X | '¡ }t( )d6|¡dk	�sÎt‚t |ƒ�rúd7|k�sæt‚t*|ƒ|k�st‚nd7|k�st‚d8||	f |k�st‚t |ƒdk�s0t‚|d }|j+|	f| k�sNt‚|�r~t|dd…dd9…f d:ƒ |dd…d9f }|j+|	|fk�s’t‚|�r¬|d;k�r¦d<nd=}nd:}t,|ƒD �]n\}}t#tj-tj.d3�| }|t |d d |d ¡ }t |ƒ|d k�st‚|dk�r$|d d>k�r$�q¸|d dk�rBd:} |�rJ�q¸n||ƒ} t|| | d?|d@� |dAk	�r¸|dB dk�r¸|d }!|t/k�r�ˆ|! }!ˆd  0|!t!|¡j1}"|"j+|d f| k�s¾t‚|�rît|"dd…dd9…f d:ƒ |"dd…d9f }"| dk�r|"j+d dk�s&t‚n||"ƒ}"t|"| d?|d@� �q¸|d;k�r„|�s„|t#k�rTtj$t%d7d�}#nt2ƒ }#|#� t3|||dC�}$W 5 Q R X |$j1j+ˆd j1j+k�s’t‚t 4|$j1 5¡ ˆd j1 5¡ ¡dD }%dE|%  k �rÊdFk �sÐn t‚tt6||ƒdGƒ t6|$j1ˆd j1ƒ}&dH|&  k �r
dIk �sn t‚t7ƒ � t8|$|||d1dJ�}'W 5 Q R X |'j+|j+k�sFt‚t 4| 5¡ |' 5¡ ¡dD }%|�rhdKndL\}(})|(|%  k �rˆ|)k �sŽn t‚t6|'|ƒ}&|�r¢dKndM\}(})|(|&  k �rÂ|)k �s„n t‚�q„dS )NzETest extraction of label time courses from Vol(Vector)SourceEstimate.é.   rg  rŒ   r   Úcoord_frameZ
mri_head_tÚrrrL   çH¯¼šò×z>rÊ   rU   Úvolumers   rA  )r—   N)rJ  rK  rL  .rT   c                     s:   ˆ dkrt ˆf| ž|ŽS ˆ dks$t‚ˆd j | |ŽgS d S )Nri  rh  r   )r   r„   )ÚargsÚkwargs)Úcallrb   rh   ri   Úeltc  s    z3test_extract_label_time_course_volume.<locals>.eltczatlas vox_mri_t does not matchrž   r»   c                 S   s   g | ]}|d  ‘qS rC  rh   rD  rh   rh   ri   r     s     z9test_extract_label_time_course_volume.<locals>.<listcomp>Zseg_nameZCC_Anteriorrm   é=  c                 s   s   | ]}|d  V  qdS )rm   Nrh   rD  rh   rh   ri   Ú	<genexpr>  s     z8test_extract_label_time_course_volume.<locals>.<genexpr>iK  i`  im!  ip
  i€
  i³  zLeft-vesselzRight-vesselz5th-Ventricleznon-WM-hypointensitiesc                    s   i | ]}|ˆ | “qS rh   rh   )r|   Úk)Úlutrh   ri   Ú
<dictcomp>)  s      z9test_extract_label_time_course_volume.<locals>.<dictcomp>Zintentionally_badi'  zany verticesT)rO  r¹   )r_   rö   r)  )rN  rO  r¹   Úverbosez^Reading atlas.*aseg\.mgz
zdoes not containz!
%d/%d atlas regions had at leastrk   rP   r_   rþ   r  ro   ç�íµ ÷Æ°>©rË   rS  FrH  ©rŒ   ©r   rU   r  ç)\�Âõ(ä?r  g�Âõ(\�ê?g333333ë?)rŒ   r¹   rO  )ç®Gáz®ï?g+‡ÙÎ÷ï?)çffffffî?ç
×£p=
ï?)r€  r~  )9rÍ   r„   r=   r¾   r3   ÚFIFFV_COORD_HEADr:   r;   r   Úfname_src_volZFIFFV_COORD_MRIr   r>  r%   rV  r\   r£   r[  r¤   rX  rã   r  r­   r®   r#  Úfname_fs_t1r   Úsortr4  r‡   r‰   rw   r©   Ú
fname_asegr,  rª   ró   rô   rE   ÚgetvalueÚreÚsearchr¬   ra   rˆ   r_   rö   ÚintrÑ   r^   r   r-   ÚcorrcoefÚravelÚ_varexprH   r   )*Zsrc_volume_labelsZ
label_typeZmri_resr  Z
test_labelÚcfrq  Z
src_labelsZvolume_labelsZn_totrø   rŒ   rl  rE  r³   rx   r\  r  r^   Zvertex_valuesrc  rr  ÚmissingZn_wantr‘   rN  Úlogre  rS  Úsiri  ZtheseÚwantr}   rÑ   ÚctxZstc_backÚcorrÚveZlabel_tc_rtÚlowerÚupperrh   )rq  rv  rb   ri   Ú%test_extract_label_time_course_volumeÚ  s,   

þ"þÿ





 ÿ

  ÿ

ÿÿ   þ
r—  c                 C   s6   t dtj |  ¡ | ¡  ¡d tj |¡d   dƒS )NrU   rk   rP   )rö   r\   ÚlinalgÚnormr‹  )Úgotr‘  rh   rh   ri   rŒ  �  s    ÿþrŒ  c               	   C   sø   t ddddtd�} t| ƒdks"t‚| d } ttƒ}ttdd	�d  dd
¡}t	||d| d�}t	||dd�}| 
| ¡}| | |d ¡}| | |d ¡}t||ƒ t g t¡|d d d< t|jd ƒdksÊt‚tjtdd�� | | |d ¡ W 5 Q R X dS )z<Test extraction of label time courses from stc equivalences.rK   rÐ   rq   Ztransv)Úregexpru   rU   r   rë   rR   rl   Únormal)Úpick_orir}   ©r�  rŒ   rs   é   z22/22 left hemisphere.*missingrž   N)rA   ru   rÍ   r„   r=   rT  r   rñ   rò   r>   rÑ   r   r   r\   rW  r‰  rx   r­   r®   r¯   )r}   rø   rú   rc   Zstc_fullÚstc_in_labelr_   Zmean_2rh   rh   ri   Ú$test_extract_label_time_course_equiv“  s"    
ÿ

r¡  c                 C   sF   t | ƒ}tj|dd…dd…df |dd…dd…df gdd�}|dfS )z:FFT that adds an additional dimension by repeating result.Nrk   rV   )r   r\   r4  )r^   Údata_trh   rh   ri   Ú	_my_trans¨  s    6r£  c               	   C   s  d\} }}t  || ¡}t  | |¡}t |¡g}t ||¡}tdt |d |¡gddgddgƒD ]x\}}}	|dkr|tddƒ}
n|}
t||
||	…f ƒ\}}|||ffD ]0}t||ddd�}|j	t|||	d	�}t
||ƒ q¤q^|d
tjf }tjtdd�� t||f|ddƒ W 5 Q R X dS )ú.Test applying linear (time) transform to data.)rÜ   é   rH  Nrk   rU   r—   rP   r  ©rx   rš   r›   ©r`  Útmin_idxÚtmax_idx.zsensor data must have 2rž   r   )ÚrngÚrandnr\   r£   Údotr¥   Úslicer£  r   Útransform_datar   r¤   r­   r®   r¯   )Z	n_sensorsÚ
n_verticesr  ZkernelZ	sens_datarx   r^   r`  r¨  r©  Zidx_useZdata_fr·   Zstc_datarc   Z
stc_data_trh   rh   ri   Útest_transform_data¯  s6    
 ÿÿ ÿþr°  c                  C   sv  d\} }}t  | ¡| t  |¡ g}t | | |¡}t||ddd�}|jtdd�}t|tƒs^t	‚t
|j|d jƒ t|j|d jƒ t j|d jdd…dd…df |d	 jdd…dd…df fd
d�}| t¡}t
||ƒ tjt|jtdd� t|ƒ}|jt jdd�}	t|	tƒ�st	‚t
|j|jƒ t  d|j ¡}
t  t|jƒt|jƒt|jƒ d	¡}|j}t  |
d¡}t  |
d¡}|jt j|||d�}|jt j|dddd� t|tƒ�s®t	‚t|jdƒ t|jd dƒ tt|jd ƒdƒ t|jd	 |ƒ t
|j|ƒ t  d|j ¡}
t  |
d¡t  |
d¡ }}|jt j||d�}|jt jdddd� t|jdƒ t|jd dƒ t
|j|ƒ dS )r¤  )rÜ   rÜ   rÜ   gš™™™™™¹¿rQ   r¦  T©rÒ   r   NrU   rk   rV   Fiè  iõ  r§  iÎÿÿÿéô  )r`  rš   ÚtmaxrÒ   rP   rT   r   éú   )r¨  r©  )rš   r³  rÒ   rþ   )r\   r£   rª  r«  r   Z	transformr£  r«   r,  r„   r   rZ   r	   rx   r4  r^   r®  r­   r®   r¯   r   r]   r;  rÍ   r&  r'  r7  rš   )Z
n_verts_lhZ
n_verts_rhr  rx   r^   rc   Zstcs_tr¢  r  Zstc_trZ   rè   Zverts_rhr¨  r©  rh   rh   ri   Útest_transformÑ  sZ    
ÿÿ

 ÿÿrµ  c                     sÐ   t  dddgdddgg¡} t| dƒ}ddddddddddddg}tj t  |¡|¡}ddddddddddddg}t  |¡‰ ‡ fdd	„t  ˆ ˆ dk ¡D ƒ‰ tˆ ƒt|ƒks®t‚t	|ˆ ƒD ]\}}t
||ƒ q¸d
S )z.Test spatio-temporal adjacency from triangles.r   rU   rk   r—   rH  r  éþÿÿÿc                    s   g | ]}t  ˆ |k¡d  ‘qS )r   )r\   ZnonzerorF  ©Znew_fmtrh   ri   r     s   ÿz7test_spatio_temporal_tris_adjacency.<locals>.<listcomp>N)r\   rW  r   r   Zcluster_levelZ_get_componentsÚuniquerÍ   r„   r¥   r   )ÚtrisÚ	adjacencyr9  Ú
componentsZold_fmtrŽ   rµ   rh   r·  ri   Ú#test_spatio_temporal_tris_adjacency  s    


ÿr¼  c            	   	   C   sè  t  dddgdddgg¡} tƒ tƒ g}t| dƒ ¡ }tt  |¡dƒ t  dddgg¡|d d< t  dddgg¡|d d< t  dddg¡|d d	< t  dddg¡|d d	< d
|d d< d
|d d< t|dƒ}t| ¡ |ƒ t  	d¡t  
d¡ |d d< t  	d¡t  
d¡ |d d< dddg|d d	< dddg|d d	< d
|d d< d
|d d< t|ddd�}t| ¡ |ƒ ttƒ}|d }tjtdd�� t|dd�}W 5 Q R X |jd d }tdd„ |d D ƒƒ}||k�sÐt‚ttdƒjddgƒ dS )z2Test spatio-temporal adjacency from source spaces.r   rU   rk   r—   rH  r  r  Zuse_trisrs   rÈ   r  ©r—   r—   Údist©r¾  rŒ   úwill have holesrž   ©r  c                 S   s   g | ]}|d  ‘qS )rm   rh   rD  rh   rh   ri   r   6  s     z6test_spatio_temporal_src_adjacency.<locals>.<listcomp>i    N)r\   rW  rª   r   Ztodenser   Zdiagr   r   rZ  Úeyer=   rT  r­   ró   rô   ra   r‡   r„   r	   r6   )	r¹  rŒ   rº  Ú
adjacency2Z
adjacency3Zinverse_operatorZsrc_r0  r1  rh   rh   ri   Ú"test_spatio_temporal_src_adjacency  s8    
rÄ  c            
      C   sÌ   d\} }t j| t jd�t jdt jd�g}t | |¡}t||dddd�}t||dd… dddd�}||fD ]^}| ¡ }t	|j
jdd… |jƒ |jd	d
�}t|ƒ|jjks¬t‚d}	t|	ƒt|jƒksht‚qhdS )zTest stc Pandas exporter.©rÜ   r  ©Údtyper   rU   rK   ©rx   rš   r›   rœ   Nrk   T)Zlong_format)rœ   ÚtimeÚsourceÚvalue)r\   r£   Úint64Úemptyrª  r«  r   r   Úto_data_framer   Úvaluesr…   r^   rÍ   r�   r„   rŠ   Úcolumns)
Ún_vertr  rx   r^   Zstc_surfrÄ   rc   ÚdfZdf_longÚexpectedrh   rh   ri   Útest_to_data_frame<  s      
ÿÿrÔ  ÚindexrÉ  rœ   c                 C   s¬   d\}}t j|t jd�t jdt jd�g}t ||¡}t||dddd�}|j| d�}t| t	ƒsb| g} |j
j| ksrt‚t	tdd	gƒt| ƒ ƒ}t|ƒr¨tt  ||j¡ƒs¨t‚d
S )z+Test index creation in stc Pandas exporter.rÅ  rÆ  r   rU   rK   rÈ  )rÕ  rÉ  rœ   N)r\   r£   rÌ  rÍ  rª  r«  r   rÎ  r«   r,  rÕ  Únamesr„   rŠ   rÍ   Úallrw   rÐ  )rÕ  rÑ  r  rx   r^   rc   rÒ  Z	non_indexrh   rh   ri   Útest_to_data_frame_indexQ  s     
ÿ
rØ  )r?  r@  rn  r  )r  rU   c              	   C   sh  d}t  |¡g}| dkr0t}|t  dt¡g7 }n:| dkrZt}|t  dt¡t  dt¡g7 }n| dksft‚t}t  ||f¡}d|d< |r¢t  	|dd…t j
f d	d¡}n|j}|||ddƒ}tjtd
d�� |jdd� W 5 Q R X tjtd
d�� |jdd� W 5 Q R X tjt|dk�rdndd�� |jddd� W 5 Q R X | ¡ \}}	t  |j¡}
||
k�s^t‚|	|jk�snt‚|jddd�\}}	|�r’| ¡ j}n|j}|dk�s¦t‚|	|d k�s¸t‚|t  t  |dd…|	f ¡¡k�sÞt‚|	t  t  ||dd…f ¡¡k�st‚| dk�rd|jdddd�\}}||k�s0t‚||	k�s>t‚tjtdd�� |jdd� W 5 Q R X dS )zTest peak getter.rÜ   r?  r   r@  rn  rU   )rU   rT   Nr—   zout of boundsrž   iœÿÿÿ)rš   rÞ   )r³  z
must be <=zout ofgü©ñÒMb`?çü©ñÒMbP?)rš   r³  T)Úvert_as_indexÚtime_as_indexrq   )rÚ  rÛ  r�   zno verticesrr   )r�   )r\   r£   r   rÍ  r‰  r(   r„   r%   r`   rX  r¤   rV  r­   r®   r¯   Zget_peakr4  rx   rZ   Ú	magnituder^   Zargmaxr]   r#  )r>  r  r  rÑ  rx   r³   r^   rc   Zvert_idxZtime_idxrs   Zdata_idxZuse_dataZ
data_idx_2Z
time_idx_2rh   rh   ri   Útest_get_peake  s\    ÿ&&
  ÿ
rÝ  c           	      C   s´   d}d}d}t  ||¡}|t || ¡g }tjtt|t |¡gd� t||ddƒ}| d }| |¡ t	|ƒ}t
|j|ƒ t
|j|ƒ |jdks”t‚|jdks¢t‚t|tƒs°t‚dS )	z-Test source estimate from mixed source space.rÞ   rk   r—   )r^   rx   r   rU   zmixed-stc.h5N)rª  r«  r\   r£   r­   r®   r¯   r   r¨   r   r   rx   r^   rš   r„   r›   r«   )	r°   r±   r…   ÚSr^   rs   rc   ÚfnameZstc_outrh   rh   ri   Útest_mixed_stc›  s"    

ÿ
rà  zklass, kindrÈ   ÚvolÚdiscreter@  rÇ  c              	   C   s–  t  dddgdddgt  d¡dt  d¡gt  d¡gd gt j¡}t  dddgdddgdddgdddgg|¡dd…dd…t jf }t  dddt  d¡g|¡}| ¡ }t  ddd	t  d¡ t  d¡g|¡}|t jt jfkrî|d
9 }|d
9 }|d
9 }t  dddgdddgdddgdt  d¡ gd g¡}	|dk�r0|nd}
tt	||
d�gƒ}|j
t	dd� |
|
¡k�sdt‚t  d¡g}tt	|dd… dd�t	|dd… dd�gƒ}|j
dk�s¬t‚t  ddg¡t  ddg¡g}|tk�rÜ|}|}n|tk�rî|}|}|tk�rT|| }|| }|j
dk�st‚t  |d¡}t  |d¡}t  |d¡}t  |d¡}t  |	d¡}	|||dddƒ}|dd…t jf }|dd…t jf }t| ¡ j|ƒ |dk�rÎtjtdd�� | d|¡d  W 5 Q R X n(| d|¡d }t|jdd…df |ƒ | d¡\}}t||	ƒ t|j|ƒ | d|¡\}}t  dgdgdgdgg¡}|tk�rZt  |d¡}t||	| ƒ t|j|| ƒ | d }| |¡ t|ƒ}t|j|jƒ t|jƒt|jƒk�sºt‚t|j|jƒD ]\}}t||ƒ �qÈ||dd…dd…df |ddƒ}|jjt|ƒddfk�st‚tjt d d��$ ||dd…dd…f |ddƒ W 5 Q R X |dd…dd…t jf }tjt d!d�� |||ddƒ W 5 Q R X dS )"z!Test (vol)vector source estimate.rU   r   r   gUUUUUUÕ?r—   rk   rv   Ng      Àù              ð?rT   r  )râ  rá  rá  )Únnr  rn  )rá  rH  rÈ   r?  r@  )rk   rU   rU   )rk   rU   rß   )rá  r@  zsurface or discreterž   rœ  Úpcag      ð¿ztemp.h5zmust have shape.*3z3 dimensions for .*VectorSource)!r\   rW  r.  Úfloat32r¤   rÒ   Ú	complex64r  r$   rª   r>  Úgetr„   r£   r%   r   r(   Útiler   rÜ  r^   r­   r®   r#  Úprojectr   r¨   r   rÍ   rx   r¥   ra   r¯   )r°   r³   r>  rÇ  rä  r^   Z
amplitudesZ
magnitudesZnormalsÚ
directionsZvol_kindZvol_srcZ	vol_vertsZsurf_srcZ
surf_vertsrŒ   rè   rc   rœ  Z	projectedZgot_directionsÚflipsr$  Zstc_readr  r  rh   rh   ri   Útest_vec_stc_basic·  s¨    üûüûû$,ÿÿ






 (rí  Úrealc                    s  d\}}t j d¡}| |d|¡‰ | sNˆ d| |d|¡  ‰ ˆ jt jks^t‚nˆ jt jks^t‚t  |df¡}t	|ƒD ]2‰t  
d¡}‡ ‡fdd„}t||ddd	d
�|ˆ< qt|t jj|ddd� }tˆ t  |¡gddƒ}| d¡\}}	t  t j|	| ddd�¡}
|	|
9 }	t|	|dd� dS )ú>Test projecting a source estimate onto direction of max power.)rH  r•   r   r—   rã  c                    s*   | t j | ¡ } t j t  | ˆ ˆ ¡¡ S r  )r\   r˜  r™  r¬  )r9  ©r^   r¶   rh   ri   Ú	objective-  s    z-test_source_estime_project.<locals>.objectiverh   rQ   ry  )ZrhobegZrhoendrU   T)rW   r+  rå  g�íµ ÷ÆÀ>rÊ   N)r\   rà   ÚRandomStater«  rÇ  r  r„   Úfloat64rÍ  r§   rZ  r   r˜  r™  r%   r£   rê  Úsignr‡   r   )rî  r�   r  rª  Zwant_nnZx0rñ  rc   Zstc_maxrë  rì  rh   rð  ri   Útest_source_estime_project  s$    
rõ  c                  C   s¼   t tƒ} t| ddd�} ttdd�d }ttƒ}t|j| |dd�}t	||d	d
�}| 
d| d ¡d }tdddtd�}|d |d  }| |¡}| |¡}	| 
d| d ¡d }
t|	j|
jƒ dS )rï  TF©ÚmegÚeegrë   rR   r   r  ©Úlooser  rž  rå  rŒ   rK   rÐ   rq   rt   rU   N)r    rï   r+   r   rñ   r   rð   r@   rõ   r>   rê  rA   ru   rÑ   r   r^   )rù   rú   Ú	noise_covÚfreeÚstc_freeZstc_pcarÙ   rÚ   r   Zstc_pca_in_labelZstc_in_label_pcarh   rh   ri   Ú test_source_estime_project_label:  s(       ÿÿ

rþ  Úmodule)ÚscopeÚparamsc                  C   s€  t tƒ} t| ddd�} t| dd�}ttdd�d }ttƒ}t|j	| |dd	�}t|j	||dd	�}t|j	| |d
d	�}t|j	| |dd	�}t|j	| |dd	�}t
|d t t | d ¡t d¡¡jdd� t |d |d ¡rØt‚t
|d t t d¡|d df¡dd� ||fD ]}	t
|d |	d dd� �qt
|d ddd… |d dd� t dd„ | d D ƒ¡}
t
|d |
dd� ||||||fS )z%Inverses of various amounts of loose.TFrö  )Zsurf_orirë   rR   r   r  rù  g§èH.ÿï?rP   g-Cëâ6?Z	source_nnZnsourcer—   rm  rÊ   rU   rk   Nc                 S   s   g | ]}t |ƒ‘qS rh   r8   rD  rh   rh   ri   r   q  s     zinvs.<locals>.<listcomp>rŒ   )r    rï   r+   r*   r   rñ   r   rð   r@   rõ   r   r\   ZkronrZ  rÂ  r…   Zallcloser„   ré  r4  )rù   Zfwd_surfrú   rû  rü  Ú	free_surfÚfreeishÚfixedÚfixedishÚotherZexpected_nnrh   rh   ri   ÚinvsS  sl       ÿ   ÿ   ÿ   ÿ   ÿþ ÿ  ÿr  rœ  )r®   )Zmarksr�  c                 C   sB   | \}}}}}}t |||d�}t |||d�}t|j|jdd� dS )z<Test vector STC behavior with two free-orientation inverses.rž  rÉ   rÊ   N©r>   r   r^   )r  r�  rú   rü  r  r·   rý  Zstc_free_surfrh   rh   ri   Útest_vec_stc_inv_freez  s    r	  c                 C   sB   | \}}}}}}t |||d�}t |||d�}t|j|jdd� dS )zATest vector STC behavior with free and free-ish orientation invs.rž  rÙ  rÊ   Nr  )r  r�  rú   r·   r  r  rý  Zstc_freeishrh   rh   ri   Útest_vec_stc_inv_free_surfƒ  s    r
  )Nrœ  r  c           	      C   sÒ   | \}}}}}}t ||ƒ}t ||dd�}t|j| d|d ¡d jƒ t |||d�}|dkržt|j|jdd� tt|ƒj| ¡ jdd� | d|d ¡d }n|dkr°t|ƒ}n|dks¼t‚t|j|jdd� dS )	z9Test vector STC behavior with fixed-orientation inverses.r  rž  rœ  rŒ   r   rl   rÊ   N)r>   r   r^   rê  r]   rÜ  r„   )	r  r�  rú   r·   r  r  Z	stc_fixedZstc_fixed_vectorZstc_fixedishrh   rh   ri   Útest_vec_stc_inv_fixedŒ  s&    
ÿ  ÿ
r  c               
   C   sÊ   t tƒ} t| dd�dd… }tdddd�}t| |dd	d
d|dd�}tt|ƒdƒ |jtt|j	ƒƒd�}t
tƒ}d}d}d|d  }t||||ddd�}	t |	¡}
t||||dd�}t|
j|jdd	d� dS )z:Test vector inverse consistency between evoked and epochs.zSTI 014)Zstim_channelNrk   g»½×Ùß|ë=gê-�™—‘=ga2U0*©#?)ZgradÚmagZeogr   rl   T)rS   ÚrejectZpreload)Úpicksrì   r  r  r  F)rí   r�  Zreturn_generator)rí   r�  g•Ö&è.>rR  )rI   Ú	fname_rawr   rª   r   r	   rÍ   Zaverager§   Úch_namesr=   rT  r?   r\   r_   r>   r   r^   )ÚrawÚeventsr  Zepochsrú   rø   rí   rû   Zlambda2Zstcs_epoZstc_epoZstc_evorh   rh   ri   Útest_epochs_vector_inverse£  s,     ÿ
 ÿ

ÿr  c                  C   s¢   t tƒ} tjtt| dd� t| ƒ}| d d  ¡ }t|j||fƒ t	 
|jdk¡sVt‚t|tjƒsft‚t| dd�}t|jd| d| fƒ t	 
|jdk¡sžt‚dS )	zTest volume adjacency.r  r¿  r   ZinuserU   rk   rÁ  N)r   rÌ   r­   r®   r¯   r!   r‡   r	   ra   r\   r×  r^   r„   r«   r   Z
coo_matrixr   )rá  rº  r¯  rÃ  rh   rh   ri   Útest_vol_adjacencyÁ  s    r  c               	   C   s.  t tƒ} | d d dk	st‚tjtdd�� t| ƒ ¡ }W 5 Q R X t| dd� ¡ }||k ¡ dksft‚t t	ƒ} t| ƒ 
¡ }ttd	ƒƒ 
¡ }|j|jksšt‚t|j|jƒ t|j|jƒ t|j|jƒ t| dd
… ƒ 
¡ }ttd	ƒƒ 
¡ }|dd…dd…f  
¡ }t|j|jƒ t|j|jƒ t|j|jƒ dS )z%Test spatial adjacency functionality.r   r¾  NrÀ  rž   rl   r¿  g      è?r  rU   i(  )r   Ú	fname_srcr„   r­   ró   rô   r!   r†   r_   Úfname_src_fsrƒ   r"   r6   ra   r   r^   ZindptrÚindices)rŒ   ÚconZcon_distZcon_trisZcon_lhZcon_lh_trisrh   rh   ri   Útest_spatial_src_adjacencyÔ  s&    r  c            	      C   sä   t tƒ} t| ƒ}| d d g}t|d ƒ}dt |¡ dd…tjf }t||ddd�}|j| dd	�}t	|ƒdd…dd…dd…df j
}|dk}t|| |dd…df ƒ tt | ¡ ¡d | d d ƒ t||ƒ t|j|jƒ dS )
zTest extraction of volume mask.r   rs   rU   NrP   r  )rš   r›   Fr»   )r   rÌ   r7   rÍ   r\   r£   r¤   r   r¿   r1   r…   r   r‰   r‹  ra   )	rŒ   Úmaskrx   r¯  r^   Zstc_tmprÅ   Zimg_dataZmask_nibrh   rh   ri   Útest_vol_maskï  s    " 
r  c                    s   t tƒ‰ tˆ dddd�}‡ fdd„|D ƒ}tˆ |dd� ˆ  ¡ � g ˆ d< W 5 Q R X g ˆ d	< ˆ d
 dkslt‚tt ˆ d
 ¡ˆ ƒ}t	t
ƒ}|d tjksšt‚t| ƒ}t t |dd¡¡ dD ]2}tt tdd|› d�¡t |dd|› d�¡ƒ qºtd||ddd�}tjtdd�� t|f|Ž W 5 Q R X | dd„ |jD ƒ¡ tƒ �}t|f|Ž}W 5 Q R X | ¡ }d|k�spt‚dt|jd ƒ  k�r’dk�s˜n t‚dt|jd ƒ  k�rºdk�sÀn t‚t|j |j ƒ}	tj!|	dd d!� "d¡ #¡ �sît‚t$t%ƒ}
|
D ]}t&|d"|dd� �qú|
d d# tjk�s*t‚t|fd$|
i|—Ž}t|j ƒd%k�sRt‚tj't(d&d��  t)|ddd'd(td)� *|¡}W 5 Q R X t +|jd |jd ¡}t +|jd |jd ¡}|t|jd ƒ7 }|j t ,||g¡ }|j-|j j-k�sðt‚t .|j  /¡ | /¡ ¡d* }d+|  k �r"d,k �s(n t‚t|fd-d.i|—Ž}t0|j |j d/ ƒ t|j ƒt|j ƒk�sht‚t|j |j ƒ}	tj!|	dd d!� "d¡ #¡ �s–t‚t|fd-d0i|—Ž}t|j ƒt|j ƒk�sÄt‚t|j |j ƒ}	tj!|	dd d!� "d¡ #¡ �sòt‚tj't(d1d�� t||d|dd2d3�}W 5 Q R X |j  "d¡ 1¡ t|jƒd k�sDt‚t$t2ƒ}
tƒ �}t||d|
d(td2dd4�}W 5 Q R X t3|t4ƒ�s†t‚| ¡ }d5|k�sœt‚d(S )6zTest stc_near_sensors.FTrh   )r÷  rø  Úexcludec                    s(   g | ] }ˆ d  | d d dk r|‘qS )ZchsÚlocr   rh   )r|   Úpick©rõ   rh   ri   r   
  s      z)test_stc_near_sensors.<locals>.<listcomp>r±  ZprojsZbadsZnchané!   ÚtorK   rÈ   rp   z.whitez.pialg{®Gázt?)rœ   Útransru   rx  ÚdistanceúNo appropriate channelsrž   c                 S   s   i | ]
}|d “qS )Zecogrh   )r|   Zch_namerh   rh   ri   rw    s      z)test_stc_near_sensors.<locals>.<dictcomp>z+Minimum projected intra-sensor distance: 7.iˆ  r   i   éÈ   rU   r•   rP   ry  rÊ   rg  rk  rŒ   iø  únot includedr  N)ÚsmoothÚspacingru   r|  r  r  rN  ZsinglerÙ  ÚnearestzChannel missing in STC: EEG 060gL7‰A`å ?)ru   rê  r#  )rŒ   r?  ru   r#  rx  z4157 volume vertices)5r2   rñ   r'   r#   Z_unlockr„   r   r\   rÂ  r&   rï   r3   r�  r©   ÚosÚmakedirsr   Újoinr   ru   rª   r­   r®   r¯   r   Zset_channel_typesr  rE   r†  rÍ   rx   r   r^   Úisclosery   r×  r   r  r<   ró   rô   r,   Úapplyr7  r4  ra   rŠ  r‹  r
   r‡   rÌ   r«   r   )r°   r  rú   r"  Zthis_dirr�   rp  r�  rc   ÚdistsrŒ   rE  Zstc_srcZstc_src_fullZlh_idxZrh_idxZsub_datar“  Zstc_wZstc_nrÄ   rh   r  ri   Útest_stc_near_sensors  s¬    
ÿ ÿ((     þþ  
 ÿ$      þr0  Zpymatreaderc            	   	   C   s„  t j t¡j} t  t t| d ƒdf¡| ¡}t  	t
¡}t|ddt|ddd�}tjtdd�� tf |Ž W 5 Q R X t t| d ƒ¡}tf d	|i|—Žj}t|ƒd
ks¦t‚|dk ¡ s¶t‚||dk }t|ƒ}d|  k rÞdk sän t‚t |d¡\}}d|  k �rdk �sn t‚d|  k �r*dk �s0n t‚tf |ddœ|—Žj}|dk ¡ �sXt‚||dk }t|ƒ|k�svt‚t|dƒ dS )z'Test using picks with stc_near_sensors.r  rU   rM   NT)rú   rœ   r"  ru   rŒ   r?  rê  r$  rž   r  iP  r   r²  iX  )r  é_   rl   rQ   r  r  Zweighted)r  rN  r  )ÚmneÚioZread_raw_nirxÚ
fname_nirxrõ   r   r\   rZ  rÍ   r   r  rª   ru   r­   r®   r¯   r   r£   r^   r„   r×  Z
percentiler   )	rõ   rú   rŒ   rp  r  r^   Zn_ptsÚlor�   rh   rh   ri   Útest_stc_near_sensors_picks]  s:    
     þr6  c                 C   s   t | | |||ƒS r  r4   )Úsubject_fromÚ
subject_toru   Zreg_fromZreg_torh   rh   ri   Ú_make_morph_map_hemi_samez  s     ÿr9  rn  Údipyr?  Úscale))r  r  r  r  r  c           %      C   sB  t |ƒ}d}d}t t|¡}t ||¡}dD ]}	tjt ||	¡dd� q,dD ]B}
dD ]8\}	}t |	|
› d|› �¡}tt ||¡t ||¡ƒ qTqLd	D ].\}	}t |	|¡}tt ||¡t ||¡ƒ q”~| d
k�r�ttƒ}|d d dksìt	‚|d d dk	�st	‚d |d d< |d d< t
|ƒdk�s,t	‚|d d |d d   k�rTdk�sZn t	‚t}t||d�}t
|ƒ}tt ||d|› d�¡|ƒ n�| dk�sžt	‚t d¡ ttƒ}||d d< t ||dd¡}d}t |¡�sàt	‚t}t
|ƒdk�söt	‚|d d dk�st	‚tt |dd¡|ƒ t||||ddddd� | d
k�rztt ||d|› d�¡ƒ}t||d�}| tjdt¡ n*tt ||d|› d �¡ƒ}t ||dd¡}d!}tj d¡}| ||¡}t | ¡ | |¡ ¡ ¡d" }d#|  k �röd$k �sün t	‚tjt d%d&�� t!|||d'd(� W 5 Q R X t!|||d)�}|j"dk�sDt	‚t#||ƒ�sTt	‚t$|||d*d+�}| d
k�r€t%||d,d,d-� n6t | ¡ | ¡ ¡d" }d.|  k �r°d/k �s¶n t	‚||_"t$|||d*d+�}t%||d,d,d-� ||_"t#|t&ƒ�r| dk�rt'ƒ }d}n(| d
k�r"tj(t)d0d&�}d}n
t'ƒ }d}|� t*||||d1dd2dd3�}W 5 Q R X | dk�r|j+j,}t -d4¡}d5t .|t/¡ | ¡ ddd6… dd7…< t%|dd…dd7…f |dd…dd7…f d8d9� |d: d5k�sÖt	‚tj0 1|dd7…d7f ¡}|d5k�rüd;nd<} || k �st	|ƒ‚|�rº| 2|¡}!t$|!||d*d+�}"| dk�rªt | ¡ |" ¡ ¡d" }t#|t&ƒ�rjd=\}#}$n|dk�r~d>\}#}$nd?\}#}$|#|  k �rž|$k�sºn t	|ƒ‚nt%||"d,d,d@� t!|||d)�}t#||ƒ�sØt	‚t$|||d*d+�}| d
k�rt%||d,d,d-� n:t | ¡ | ¡ ¡d" }d.|  k �r4dAk �s>n t	|ƒ‚dS )Bz?Test label extraction, morphing, and MRI scaling relationships.rK   Zsmall)rL   rÈ   r}   rO   T)Úexist_okrp   ))rÈ   Zsphere)rÈ   Úwhite)rÈ   z
sphere.reg)r}   zaparc.annotÚ.))rL   rN   )rL   z	brain.mgzr?  r   r¾  Nr)  rU   rk   rm   i  rt   rO   z-oct-4-src.fifrn  r:  Úsubject_his_idrL   rN   rj  rs  zsample-vol20-src.fif)ru   ZannotZskip_fiducialsrx  r™   r5   z-vol20-src.fifrA  r|  g¸…ëQ¸®¿g¸…ëQ¸®?rœ   rž   rß   )rŒ   rœ   r{  r_   rM  gê-�™—q=rR  gÃõ(\�Âí?r  r&  rh   g      ,@)r8  Úsrc_toru   Z	niter_sdrr'  Zzoomsrx  rH  r  r  r—   rÿ   rÊ   r½  rn   é   )g=
×£p=â?gq=
×£på?)g
×£p=
ç?gR¸…ëQè?)gq=
×£pÝ?r}  rz  g¸…ëQ¸î?)3r©   r   r,  ru   r*  r+  r   r   r€   r„   rÍ   r   rA   r/   r­   rU  r‚  r!  r   r.   r  r2  Z	morph_mapr9  r\   rà   rò  r«  rŠ  r‹  Zpermutationr®   r¯   r-   rœ   r«   r   r   r8  r   ró   rô   r,   Z
pre_affinerÎ   rÂ  rW  r  r˜  r™  r.  )%r>  r;  Zmonkeypatchr°   Útempdirr7  r8  Ztesting_dirZfrom_dirÚrootr�   rß  Z	use_fnameZsrc_fromr³   Zlabels_fromr]  r@  Z	labels_tor  rª  re  r“  rc   Zlabel_tc_fromZlabel_tc_tor’  Z
test_morphZmorphZ
got_affineZwant_affineÚmoveÚlimitZstc_toZlabel_tc_to_morphZmin_Zmax_rh   rh   ri   Útest_scale_morph_labels€  st   

ÿ
ÿ
. ÿÿÿ
   ÿ ÿ
  þ

ÿÿ ÿ
ÿ
ÿÿ   ÿ
ÿÿ   ÿ
   ÿ
     ý

&.
   ÿ
 ÿÿ


$   ÿ   ÿ
rF  r½   c           	   	   C   s  | dkrŠt tƒ}tdtd�}tdtd�}dd„ |D ƒ}tdd„ |D ƒƒsLt‚td	d„ |D ƒƒsbt‚t|ƒt|ƒ  kr~d
ks„n t‚d
}nH| dks–t‚t tƒ}d|d d d< t 	tddd¡}t 	tddd¡}d}|d }|j
| ksèt‚|jdksöt‚ttƒd  d¡ dd¡}t|jƒdk�s$t‚t||ƒ}|jdk�s>t‚t|||ƒ}d|_tjtdd�� t|||ƒ W 5 Q R X d|_|j|dfk�s�t‚| dk�rÂtjtdd�� t|||ƒ W 5 Q R X nRtjtdd�� t|||ƒ W 5 Q R X d|_tjtdd�� t|||ƒ W 5 Q R X dS )z7Test that label extraction subject is treated properly.r?  rK   rt   rM   c                 S   s   g | ]}|j  d ¡s|‘qS )Úunknown)rz   Ú
startswithr{   rh   rh   ri   r   ;  s    ÿz1test_label_extraction_subject.<locals>.<listcomp>c                 s   s   | ]}|j d kV  qdS )rK   Nr  r{   rh   rh   ri   rt  =  s     z0test_label_extraction_subject.<locals>.<genexpr>c                 s   s   | ]}|j d kV  qdS )rM   Nr  r{   rh   rh   ri   rt  >  s     éD   rn  rŒ   r   r?  rL   rN   rj  rë   rl   rH  z!source spac.*not match.* stc\.subrž   zatlas.*not match.*source spazlabel\.sub.*not match.* stc\.Nzlabel\.sub.*not match.* sourc)r=   rT  rA   ru   r×  r„   rÍ   r¾   r   r,  r>  Z_subjectr   rñ   r[   rò   rZ   r>   rœ   r   r­   r®   r¯   ra   r#  )	r>  rø   r‘   Z	labels_fsr]  rŒ   Zaverc   Zltcrh   rh   ri   Útest_label_extraction_subject-  sT     ÿ ÿ"

rJ  )rÜ   F)rÜ   F)ºÚ
contextlibr   rÒ   r   r*  Úos.pathÚpathr   r‡  Úshutilr   Únumpyr\   Z	numpy.fftr   Znumpy.testingr   r   r   r	   r
   r­   Zscipyr   Zscipy.optimizer   Zscipy.spatial.distancer   r2  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   Zmne.datasetsr0   Z	mne.fixesr1   Zmne.ior2   Zmne.io.constantsr3   Zmne.morph_mapr5   Zmne.source_estimater6   r7   Zmne.source_spacer9   Zmne.transformsr:   r;   r<   Zmne.minimum_normr=   r>   r?   r@   Z	mne.labelrA   rB   Z	mne.utilsrC   rD   rE   rF   rG   rH   rI   Z	data_pathr,  ru   rT  rî   rï   rð   rñ   r  rÁ   rƒ  r…  r  r  Zbem_pathr€   r‚  rX   rY   rÌ   r¾   r4  rà   rò  rª  Zrequires_testing_datarj   r’   ÚmarkZslowtestr¸   rÇ   rÏ   rÛ   ré   rê   rü   r  r  Zparametrizer%  r(  r2  r:  r=  rf  r©   r‰  r,  rª   r—  rŒ  r¡  r£  r°  rµ  r¼  rÄ  rÔ  rØ  rÝ  rà  ræ  ró  rç  r  rí  rõ  rþ  ZfixtureZ_pytest_paramr  ÚparamZxfailr„   Z
bad_normalr	  r
  r  r  r  r  r  r0  r6  r9  rF  rJ  rh   rh   rh   ri   Ú<module>   s¬  � 
ÿ  þ   ÿ   ÿ
ÿ
ÿÿ
ÿ
ÿ
ÿ

!B&

	


C,8
 ú +
"6

#
3ü   ÿ[


" ÿ





Xÿý &ÿþ