U
    f»{j•å  ã                   @   sÐ  d dl mZ d dlZd dlmZ d dlZd dlZd dl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 d dlmZ d dl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&m'Z'm(Z(m)Z) d d	l*m+Z+m,Z,m-Z-m.Z.m/Z/ d d
l0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z>m?Z?m@Z@mAZA d dlBmCZC d dlDmEZE e Fe GeH¡ddddd¡ZIe FeId¡ZJe FeId¡ZKe FeId¡ZLeCjMdd�ZNe FeNdd¡ZOe FeNddd¡ZPe FeNdd ¡ZQe FeNdd!¡ZRe FeNdd"¡ZSd#\ZTZUZVd$\ZWZXd%d&gZYejZj[eAd'ƒ d(d)�Z\d*d+„ Z%d,d-„ Z]e?ejZ ^d.d/d0g¡d1d2„ ƒƒZ_ejZ ^d.d/d0g¡d3d4„ ƒZ`d5d6„ Zae?ejZ ^d7d8¡ejZ ^d9d:d;d<d=g¡ejZ bd>¡d?d@„ ƒƒƒƒZce?ejZ ^dAdBdCdDg¡dEdF„ ƒƒZde?ejZ ^d.dGd/d0g¡dHdI„ ƒƒZee?ejZ ^d.d/d0g¡dJdK„ ƒƒZfejZ ^d9dL¡ejZ ^dMdN¡ejZ ^dOdP¡ejZ ^dQdR¡ejZ ^dSdP¡dTdU„ ƒƒƒƒƒZge?ejZ ^d.d/d0g¡dVdW„ ƒƒZhe?ejZ ^d.d/d0g¡ejZ ^d7dX¡ejZ ^dYdP¡ejZ ^d9dZg¡d[d\„ ƒƒƒƒƒZiejjd]d^„ ƒZke?ejZjlejZ ^d.d0d/g¡d_d`„ ƒƒƒZme?ejZjlejZ ^dadbd0eLfdcg¡ddde„ ƒƒƒZne?ejZ ^d.d/d0g¡dfdg„ ƒƒZoe?ejZ ^d.d/d0g¡dhdi„ ƒƒZpe?ejZ ^d.d/d0dGg¡djdk„ ƒƒZqejZ ^dldmdndoerdpdq�fdrerdsdq�ff¡dtdu„ ƒZse?ejZ ^d.d/d0g¡ejZ ^dvdwdg¡dxdy„ ƒƒƒZte?ejZ ^d.d/d0g¡dzd{„ ƒƒZue?ejZ ^d.d/d0g¡d|d}„ ƒƒZvejZjle?eCjwd~d„ ƒƒƒZxe?eCjwd€d�„ ƒƒZye?eCjwejZ ^d‚ePdfejzeQde\dƒ�eSd feSd„fg¡d…d†„ ƒƒƒZ{e\eCjwd‡dˆ„ ƒƒZ|e\eCjwd‰dŠ„ ƒƒZ}d“dŒd�„Z~ejZ ^dŽd�d�g¡d‘d’„ ƒZdS )”é    )ÚnullcontextN)Úassert_array_almost_equalÚassert_array_equalÚassert_allcloseÚassert_equal)ÚstatsÚlinalg)ÚloadmatÚsavemat)	ÚEpochsÚread_eventsÚ
pick_typesÚcreate_infoÚEpochsArrayÚEvokedArrayÚAnnotationsÚpick_channels_regexpÚmake_ad_hoc_cov)Úread_cov)ÚICAÚica_find_ecg_eventsÚica_find_eog_eventsÚread_ica)Úget_score_funcsÚcorrmapÚ_sort_componentsÚ_ica_explained_varianceÚread_ica_eeglab)Úread_raw_fifÚInfoÚRawArrayÚread_raw_ctfÚread_raw_eeglab)Ú_DATA_CH_TYPES_SPLITÚget_channel_type_constants)Ú_check_load_mat)Ú_compute_rank_int)Úcatch_loggingÚrequires_sklearnÚ_record_warningsÚcheck_version)Útesting)Úmake_fixed_length_eventsz..ÚioZtestsÚdataztest_raw.fifztest-eve.fifztest-cov.fifF)ÚdownloadZCTFztestdata_ctf.dsZMEGÚsamplezsample_audvis_trunc_raw.fifÚEEGLABútest_raw.setztest_chans.locszcatch-alp-good-f.ds)é   çš™™™™™É¿çš™™™™™É?)r   é   ZpointbiserialrZansariZpymatreaderzRequires pymatreader)Úreasonc                  O   s   d|krd|d< t | |ŽS )zFix the random state in tests.Úrandom_stater   )Ú_ICA)ÚargsÚkwargs© r<   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/preprocessing/tests/test_ica.pyr   ;   s    r   c              
   C   sL   | dkrHzdd l }W n2 tk
rF } zt d|f ¡ W 5 d }~X Y nX d S )NÚpicardr   zPicard is not installed (%s).)r>   Ú	ExceptionÚpytestÚskip)Úmethodr>   Úexpr<   r<   r=   Ú_skip_check_picardB   s
    rD   rB   Úfasticar>   c                 C   s&  t | ƒ ttƒ dt¡ ¡ }|j ¡ � g |jd< W 5 Q R X tt	ƒ}t
|jdddddd�dd… }t||dd	… ttt|ddd
�}| ¡ }d}|jd|…  ¡ }| ¡ }|j}	| tdgdgdgƒ¡ | g}
|
D �]*} d|dfd|d dfg}|D �]\}}}t|d| dd�}tg |d�}tt|ƒƒ}tjtdd�� |j||d� W 5 Q R X t|| |¡ƒ |j| ¡ f|Ž}|�ršt |d|… |jd|… ddd� n4t! "|d|… |jd|…  ¡}t! #|¡dk�sÎt$‚t|| dd�}t%ƒ � |j||d� W 5 Q R X t|| |¡ƒ |j| ¡ f|Ž}| ¡ dd…d|…f }|�r^t |dd…d|…f |ddd� n2t! "|dd…d|…f | ¡}t! #|¡dk�s�t$‚|j| ¡ f|Ž}|jd|… }|�rÐt |	d|… |ddd� qòt! "|jd|… | ¡}t! #|¡dksòt$‚qòqÐtj&t'dd�� tdd� W 5 Q R X dS )z6Test recovery of full data when no source is rejected.ç      à?ÚprojsTFÚbads©ÚmegZstimÚecgÚeogÚexcludeNé
   é   ©ÚpicksÚbaselineÚpreloadé   ÚBADé   r   r3   )Ún_componentsr8   rB   Úmax_iter)rM   Ún_pca_components©Úmatch©rQ   g»½×Ùß|Û=gVçž¯Ò<©ÚrtolÚatolg›+¡†›„=)rW   rB   r8   úInvalid valuezpizza-decomposision©rB   )(rD   r   Ú	raw_fnameÚcropÚstopÚ	load_dataÚinfoÚ_unlockr   Ú
event_namer   r   Úevent_idÚtminÚtmaxÚaverageÚ_dataÚcopyÚget_datar.   Úset_annotationsr   r   ÚdictÚlistÚranger@   ÚwarnsÚUserWarningÚfitÚ_assert_ica_attributesÚapplyr   ÚnpÚabsÚmaxÚAssertionErrorr)   ÚraisesÚ
ValueError)rB   ÚrawÚeventsrQ   ÚepochsÚevokedZ
n_channelsr.   Zdata_epochsZdata_evokedÚmethodsÚstuffrW   rY   ÚokÚicar;   Zraw2ÚdiffZepochs2Zdata2Zevoked2r<   r<   r=   Útest_ica_full_data_recoveryJ   sˆ     ÿÿ ÿ
 ÿ ÿ ÿ ÿ ÿrˆ   c              	   C   s   | dkr4zddl }W n tk
r2   t d¡ Y nX t| ƒ d}d}tj d¡}|j||fd�}| 	||¡}t 
||¡}t|jd d	d
ƒ}t|ƒ}	t|| d|	d�}
tjtdd�� |
 t||ƒ¡ W 5 Q R X |
j|
j | }t tjt |¡dd�tjt |¡dd� d ¡}|dk �st‚dS )z<Test that ICA recovers the unmixing matrix in a simple case.rE   r   Nzscikit-learn not installedé   éè  )Úsizeéþÿÿÿç     @�@Úeeg)rW   rB   r8   Ú	noise_covzNo average EEG.*rZ   r3   ©Zaxisç      ð?çš™™™™™¹?)ÚsklearnÚImportErrorr@   rA   rD   ry   ÚrandomÚRandomStateZlaplaceÚrandnÚdotr   Úshaper   r   rt   ÚRuntimeWarningrv   r    Úunmixing_matrix_Úpca_components_ÚmeanÚsumrz   r{   r|   )rB   r“   rW   Ú	n_samplesÚrngÚSÚAr.   rf   Úcovr†   Z	transformZamari_distancer<   r<   r=   Útest_ica_simple‹   s4    ÿÿÿr¤   c               	   C   s4  t tƒ dd¡ ¡ } ttƒ}t| |ddd�}tddddd	�}|j 	¡ � d
|jd< W 5 Q R X t
jtdd�� | |¡ W 5 Q R X |j 	¡ � d|jd< W 5 Q R X |jdf|_t
jtdd�� | |¡ W 5 Q R X |j 	¡ � d|jd< W 5 Q R X d|_| |¡ |jdf|_t
jtdd�� | |¡ W 5 Q R X dS )z5Test that ICA warns on certain input data conditions.r   rT   NT)r€   rR   rS   rV   r3   Úinfomax©rW   rX   rB   r8   ç        Úhighpasszshould be high-pass filteredrZ   r‘   zepochs.*were baseline-correctedz#consider baseline-correcting.*again)r   rb   rc   re   r   rh   r   r   rf   rg   r@   rt   rš   rv   rj   rR   rx   )r   r€   r�   r†   r<   r<   r=   Útest_warnings¦   s(    
r©   rW   )Nç§èH.ÿï?é   é	   rN   rY   r«   r¬   rª   rN   z-ignore:FastICA did not converge.*:UserWarningc              	   C   s*  t j d¡ dd¡}tdddƒ}t||ƒ}| ¡  |j ¡ � d|jd< W 5 Q R X t j	 
| ¡ ¡dksjt‚t| d	d
�}t| tƒr–t|tƒr–| |kr–dS tf |Ž}||_| dkrÞ|dkrÞtjtdd�� | |¡ W 5 Q R X dS | dk�r|dk�rtjtdd�}d	}	n2| dk�r.|dk�r.tjtdd�}d}	n
d}	tƒ }|� | |¡ W 5 Q R X |jdk�sbt‚|	dk�rpdS | | ¡ ¡}
|dk�sŽ|	�rÀ|j|k�sžt‚t j| ¡ |
 ¡ dd��r¼t‚dS t| ¡ |
 ¡ dd� t||ƒ |d }| |¡ t |ƒ}| | ¡ ¡}
t| ¡ |
 ¡ dd� t|ƒ dS )z?Test that our ICA is stable even with a bad max_pca_components.r   rN   rŠ   r�   rŽ   r‘   r¨   r¬   T)rW   ÚverboseNrª   z.*requires.*PCA.*rZ   z.*unstable.*integer <= 9r«   zrequires 9 PCA values.*butÚexitF©r_   z
Id failure)Úerr_msgztemp-ica.fifzI/O failure)!ry   r•   r–   r—   r   r    Úset_eeg_referencerf   rg   r   Zmatrix_rankro   r|   rq   Ú
isinstanceÚintr   rY   r@   r}   ÚRuntimeErrorrv   rt   rš   r   Z_max_pca_componentsrx   rn   Úallcloser   rw   Úsaver   )rW   rY   Útmp_pathr.   rf   r   r;   r†   ÚctxÚbadÚraw_newÚfnamer<   r<   r=   Útest_ica_noopÆ   s\    

ÿþ



r¼   zmethod, max_iter_default)rE   rŠ   )r¥   éô  )r>   r½   c              	   C   sŒ   t | ƒ td| dd�}|j|ks$t‚td| dd�}|jdks@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 dS )z4Test that ICA.max_iter is set to the right defaults.r‰   Úauto©rW   rB   rX   iÐ  ZInvalidrZ   Úfoo)rX   zmust be an instancer‘   N)rD   r   rX   r|   r@   r}   r~   Ú	TypeError)rB   Zmax_iter_defaultr†   r<   r<   r=   Útest_ica_max_iter_ý   s    rÂ   r¥   c              	   C   sÚ   t | ƒ ttƒ dt¡ ¡ }d}d}t||| dd�}| dkrH| |¡ n$tj	t
dd�� | |¡ W 5 Q R X |j| kszt‚t|j|ƒ |d	 }t|| d
¡dd� | |¡ t|ƒ}|j| ksÂt‚t|ƒ t|j|ƒ dS )z+Test that ICA.n_iter_ is set after fitting.rF   r‰   r3   r   r¦   r¥   údid not convergerZ   útest_ica-ica.fifr.   )rT   én   ©ÚlimitsN)rD   r   rb   rc   rd   re   r   rv   r@   rt   ru   rB   r|   r   Ún_iter_rw   ro   r¶   r   )rB   r·   r   rW   rX   r†   Úoutput_fnamer<   r<   r=   Útest_ica_n_iter_  s(    ÿ
rÊ   c           	   
   C   sî   t | ƒ ttƒ dt¡ ¡ }t|jdddddd�dd… }d}d	D ]¦}tj	t
d
d�� t|| dd�j||d�}W 5 Q R X t| ¡  |¡dd�}t|t|ƒƒ |j| ¡ |d�}t| ¡  |¡dd�}||  k râ|  krâ|ksBn t‚qBdS )z!Test recovery ICA rank reduction.rF   TFrH   rI   NrN   rT   )r6   rN   rÃ   rZ   r3   r¿   r\   )Úproj©rY   )rD   r   rb   rc   rd   re   r   rf   r@   rt   ru   r   rv   r&   rn   Úpickr   Úlenrx   r|   )	rB   r   rQ   rW   rY   r†   Zrank_beforeZ	raw_cleanZ
rank_afterr<   r<   r=   Útest_ica_rank_reduction0  s6     ÿÿ ÿ ÿÿÿrÏ   )Ngé!çýÿï?rË   )TFr£   )FTrJ   )ÚmagTFrŽ   c              	   C   s�  |r|sdS |s|sdS t tƒ dt¡j||d�}| t dt|j	ƒd¡¡ |j
 ¡  dt|j	ƒ  k rpdk svn t‚|r†|jdd	� | ¡  | j|jjd
dd�8  _| ¡ }t|j
d ƒdksÆt‚|jrÐt‚| ¡ }t|râdnddd�}|rø| ¡  | ¡ }	|�r"tj| ¡ |f|Ž�r<t‚ntj| ¡ |f|Ž�s<t‚|j|k�sLt‚|�r^t|j
ƒ}
nd}
td|
ddd�}tƒ � | |¡ W 5 Q R X |�r´|jjt|j	ƒfd k�sÐt‚n|jjt|j	ƒdfk�sÐt‚tƒ �}|j| ¡ | dd�}W 5 Q R X | ¡ }t |ƒ |�rd|k�s*t‚nd|k�s*t‚t!| ¡ |	f|Ž | | ¡ ¡}| ¡ }t!||	f|Ž |�r~tj||f|Ž�rŒt‚nt!||f|Ž dS )z+Test that ICA handles projections properly.NrF   ©rJ   rŽ   r   rT   rN   éK   T)Z
projectionéÿÿÿÿ)ZkeepdimsrG   çê-�™—q=g#B’¡œÇ;ç:Œ0âŽyE>)r_   r^   r3   r¥   )rX   r�   rB   rW   rV   )rY   r­   zApplying projection)"r   rb   rc   rd   r   rÍ   ry   ÚarangerÎ   Úch_namesrf   Únormalize_projr|   r±   re   rm   r�   ro   rË   rn   rq   Z
apply_projrµ   r   r   r)   rv   Úpre_whitener_r™   r'   rx   ÚgetvalueÚprintr   )rY   rË   r£   rJ   rŽ   r   Úraw_dataZraw_fitr;   Zfit_datar�   r†   ÚlogZ	raw_applyZ
apply_datar<   r<   r=   Útest_ica_projsM  sp     ÿ
 
ÿ   ÿrÞ   c              	      sÌ   t | ƒ ttƒ dt¡ ¡ }t|jdddddd�dd… }d}tj	t
d	d
�� td| dd�j||d�‰ W 5 Q R X t‡ fdd„|D ƒƒsŠt‚ˆ jdk	s˜t‚ˆ  ¡  t‡ fdd„|D ƒƒrºt‚ˆ jdk	sÈt‚dS )zTest ICA resetting.rF   TFrH   rI   NrN   )	rÙ   r›   Úmixing_matrix_Ún_components_Ú
n_samples_rœ   Úpca_explained_variance_Ú	pca_mean_rÈ   rÃ   rZ   r‰   r3   r¿   r\   c                 3   s   | ]}t ˆ |ƒV  qd S ©N©Úhasattr©Ú.0Úattr©r†   r<   r=   Ú	<genexpr>¦  s     z!test_ica_reset.<locals>.<genexpr>c                 3   s   | ]}t ˆ |ƒV  qd S rä   rå   rç   rê   r<   r=   rë   ©  s     )rD   r   rb   rc   rd   re   r   rf   r@   rt   ru   r   rv   Úallr|   Úlabels_Ú_resetÚany)rB   r   rQ   Zrun_time_attrsr<   rê   r=   Útest_ica_resetŽ  s.     ÿÿ  ÿ ÿrð   )rV   g333333ã?r�   é   c              	   C   sT  t | ƒ ttƒ dt¡ ¡ }|r2ttƒ}g |d< nd}tt	ƒ}t
|jdddddd�ddd… }| |ddd… ¡ | ¡  ~t||dd… tttddd	�}t||| d
d�}	tjtdd�� d|	k W 5 Q R X t|	ƒ |	 ¡ }
|	 ¡ }|
d| › d�ksøt‚| |k�st‚tjtdd�� |	 |¡ W 5 Q R X tjtdd�� |	 |¡ W 5 Q R X tjtdd�� |	 |dd… ¡ W 5 Q R X tjtdd�� |	 |¡ W 5 Q R X t|	ƒ |	 ¡ }
|	 ¡ }d|
k�sÄt‚|	j › d�|
k�sÚt‚d|k�sèt‚d|k�söt‚d|	k�st‚|	j!}tjtdd�� |	 |¡ W 5 Q R X t"||	j!ƒ |	 |¡}t#|j$dgƒ t|ƒ |j%dd�}t&|j'j(ƒdk�s|t‚|j'j(D ]"}| )¡ }t* +|¡dk �s„t‚�q„|dd…dd…f d }|j,d |	j k�sÖt‚| -¡ }d|_.tjtdd�� |	 /|¡ W 5 Q R X t||| d�}	t0ƒ � |	 |¡ W 5 Q R X t1|	| 2¡ dd� | 2¡ dd…ddd…f }t* 3|j,¡}t#|	j4|ƒ t|	ƒ |	 |¡ 2¡ }|j,d
 |	j k�s¢t‚tjtd d�� |	j5|t* 6d
¡d!� W 5 Q R X | -¡ }d|_.tjtd"d�� |	 /|¡ W 5 Q R X |	j7 -¡ }|j8dd…dd#d…f  d$9  < |	 /| -¡ ¡ t9||	j7ƒ d%|	_:tjtd&d�� |	 |¡ W 5 Q R X d'}tjtd(d�� |	 |¡ W 5 Q R X tjt;d)d�� |	 |¡ W 5 Q R X tjt;d)d�� |	 /|¡ W 5 Q R X d*|	_<d|	_:tjtd+d�� |	j|dd
gd,� W 5 Q R X d|	_<d*|	_:tjtd-d�� |	j|dd
gd,� W 5 Q R X dS ).zTest ICA on raw and epochs.r   rG   NTFrH   rI   rO   )rR   rS   r3   ©r�   rW   rB   rX   zCannot check for channels of trZ   rJ   z!<ICA | no decomposition, method: ú>zNo fit availableznone were foundrÃ   zraw data decompositionz ICA componentszAvailable PCA componentszExplained variancerÐ   )Zclipping)rV   r6   é   zto be loaded©r�   rW   rB   )r5   rñ   rÆ   ztarget do not have the same nu©Útargetzrequires epochs data to be lrN   g   ¢”mBr’   zOne PCA component captures most)r3   rV   r‰   zData input must be of Rawzmust be an instance ofr‰   zpca_components.*is greaterr\   zn_components.*cannot be greater)=rD   r   rb   rc   rd   re   r   Útest_cov_namer   rh   r   rf   rÍ   Údel_projr   ri   rj   rk   r   r@   r}   r~   rÛ   Ú__repr__Z_repr_html_r|   r´   Úget_sourcesrv   rt   ru   Úreprrà   r›   r   r   Ú
_filenamesÚplotrÎ   ÚmneZtracesZ	get_ydatary   Zptpr™   rn   rS   rx   r)   rw   ro   Úprodrá   Úscore_sourcesrÖ   rÙ   rm   r   rW   rÁ   rY   )rB   rW   r�   rY   Zbrowser_backendr   r€   rQ   r�   r†   Úrepr_Z
repr_html_Z	unmixing1Zraw_sourcesZfigÚlineÚyÚsourcesZraw3r.   rŸ   Zepochs3Z_pre_whitenerZoffenderr<   r<   r=   Útest_ica_core­  sÎ    
 ÿÿ ÿ ÿ

 r  c                  C   sä   t tƒ dd¡ ¡ } |  t| jddd… ƒtddddgƒB ¡ d	| ksJt‚|  ¡  |  	t
d
gd
gdgƒ¡ |  d¡ t| ƒ}t| jdddd�dd… }t| |dtt|dddd�	}t|ƒdksÀt‚t| |jtttdddd�}| ||fS )zGet small data.r   rT   NrN   úEOG 061úMEG 1531úMEG 1441úMEG 0121rL   rF   rU   éd   TF)rJ   rŽ   rL   rÓ   ©Nr   ©rQ   rR   rS   rË   r‰   ©rJ   rL   rP   )r   rb   rc   re   Úpick_channelsÚsetr×   r|   rù   rp   r   Zresampler,   r   rf   r   rj   rk   rÎ   r€   ri   )r   r€   rQ   r�   Ú
epochs_eogr<   r<   r=   Úshort_raw_epochs<  s,    
ÿ
  ÿ  ÿr  c           6   
   C   sê  t | ƒ |\}}}t d¡}td| dd�}tjtdd�� | |¡ W 5 Q R X t|| 	d¡dd	� t
tƒ}t|d
| d�}|jdks†t‚tjtdd�� |j||d� W 5 Q R X t|| 	t d¡¡dd	� t|jtƒsØt‚|jdk sæt‚td
| dd�}tjtdd�� | d¡ W 5 Q R X tjtdd�� | |t dd¡¡ W 5 Q R X t|| 	t dd¡¡ƒ t| ¡ 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d�� |j|dddd� W 5 Q R X tjtdd�� |j|dd�\}	}
W 5 Q R X tjtdd��  |j||jd dd�\}	}W 5 Q R X |
d |d k�s^t‚| ¡ }| ¡ }t||gddd d!d"d#� tjtd$d�� t||gdd%d&d&d'� W 5 Q R X t||gddd&d&d'� |jd  |jd  k�sæt‚d|jd  k�sút‚| ¡ }|dd…df }t ||jd(d)�j!dgd*d+� t||g|dd d!d"d#� |jd  |jd  k�s`t‚t" #d,¡ | ¡ }d(|j$dd…< tjtd-d��0 t%ƒ �}t||gddd&d&d!d.� W 5 Q R X W 5 Q R X | &¡ }d/|k�sÚt‚t||g|dgd d&d"d#� td%dd0�}tjtdd�� |j|d%d
d1dgd� W 5 Q R X tjtd2d�� t||gdƒ W 5 Q R X |d3 }tjtd4d�� | |¡ W 5 Q R X tjtd4d�� t'|ƒ W 5 Q R X td
| dd�}| ¡ }t(d
ƒD ]}	| )|¡ �qÄ|j*j+d }tjtdd�� |j||d� W 5 Q R X t|ƒ |j*j+d |k�s(t‚tjtd5d�� td6| d7� W 5 Q R X tjtd8d�� td| d7� W 5 Q R X td1| dd�}tjtdd�� | |¡ W 5 Q R X t|ƒ |jd1k�s¾t‚t,||d!d9�}t -|dd:… |dd… k¡�sðt‚dg|_.t/dgdgd;�|_t0|d
d%ddgd!d<�}t1|j.d
gƒ t1|jt/d
gd%gd;�ƒ tjtd=d��* tjtd>d�� | 2|¡ W 5 Q R X W 5 Q R X | 2|¡}|j*d  ¡ }|j3d1d?d@dA� t1|jdB dCƒ t1|jdD dEƒ ||j*d k 4¡ �sät‚|j*d  ¡ }|j5dFgdFdGdH� ||j*d k 4¡ �st‚|dI }d%|_6dJ|_7| |¡ t'|ƒ}|j6|j6k�sTt‚t1|j7|j7ƒ t1|j|jƒ dK}dLdM„ }| 8¡ D ]}t1|||ƒ|||ƒƒ �q„d1|_6d1|_6g |_.|j|d!dN� t'|ƒ}dOD ]}t9t:||ƒt:||ƒƒ �qÎ|j|jk�sþt‚t|jtƒ�st‚| 2|¡dd…dd…f d }| 2|¡dd…dd…f d } t9|| ƒ |j;| ¡ dgdP�}!|j;| ¡ dgdP�}"t9|!dd…dd…f d |"dd…dd…f d ƒ td%| dd�}t<ƒ � |j||d� W 5 Q R X t=ƒ  >¡ D ]@\}#}$|#t?k�rþ�qè|j@|dQ|$ddFdR�}%|jtA|%ƒk�sèt‚�qè|j@|ddStBjCdT�}%tjtdUd�� |j@|t d¡dV� W 5 Q R X | D¡ }&|&jE ¡ }'|dd… d  ¡ }(| 	¡  ¡ })tjtdd��" |j|dWdd|jFjGdX�\}*}%W 5 Q R X t1tA|%ƒ|jƒ tjtdd�� |j|dddY�\}*}%W 5 Q R X t1tA|%ƒ|jƒ tjtdd�� | H|¡\}*}%W 5 Q R X t1tA|%ƒ|jƒ tjtdZd�� |j|dd[d\�\}*}%W 5 Q R X |j|dWd|jFd |jFd: dX�\}*}%t1tA|%ƒ|jƒ tjtd]d�� |j| D¡ dWddY� W 5 Q R X tjtdd�� |j|d^d_� W 5 Q R X tjtdd�� | H|¡\}*}%W 5 Q R X t1tA|%ƒ|jƒ d`|jda |j IdQ¡d  db< tjtdd�� | H|¡\}*}%W 5 Q R X t|%tJƒ�s t‚t1tA|%d ƒ|jƒ |jH|&dcdd�\}*}%t1tA|%ƒ|jƒ tjtdZd�� |j|&dd[d\�\}*}%W 5 Q R X |j|&dddY�\}*}%t1tA|%ƒ|jƒ tK|(|dd… d ƒ tK|)| 	¡ ƒ tK|'|&jEƒ t=ƒ  >¡ D ]<\}#}$|#t?k�rx�qb|j@|dQ|$de�}%|jtA|%ƒk�sbt‚�qb|j@|tBjCdf�}%tjtdUd�� |j@|t d¡dV� W 5 Q R X |j@|dgdhde�}+tjtdd�� tL||t M|+¡ N¡  ƒ},W 5 Q R X |,jOd%k�s0t‚|j@|dQdhde�}-tjtdd�� tP||t M|-¡ N¡  ƒ}.W 5 Q R X |.jOd%k�s‚t‚|jQ|jR d |jSk�sžt‚|jSdik�s®t‚|j2|didjd\�}|jR|jRdi k�sÔt‚|jSdik�sät‚|jQ|jR d dik�sþt‚|j*j+d dik�st‚t1tA|jTƒdƒ dkdl„ |jD ƒ}/|jtA|/ƒk�sHt‚tU VtU WtUjX¡dm¡}t Y|jZ¡|_Z|j|d!dN� t[|d!dn�}0t|j*|0j*dodpdq� |0 #¡  t\ ]|¡ | 2|¡}1|1j^j+|j^j+k�sÊt‚drdl„ |1jD ƒ}/|jtA|/ƒk�sît‚|j|1 	¡ j+d k�st‚|1j_dk�st‚|1j`d!k�s(t‚t adsgd ¡|_bd|_dtd%gdudgddgfD ]"\}2}3| c|2¡}4|4|3k�sVt‚�qVt| d_�}t<ƒ � |j||d� W 5 Q R X t|| 	|¡ƒ tjtdd�� |j|dd� W 5 Q R X |jH|dvdd� tK|(|dd… d ƒ | d|jdd%… ¡ tjtdwd��* tjtdd�� | H|¡ W 5 Q R X W 5 Q R X tjtdwd��. tjtdd�� |j|dd� W 5 Q R X W 5 Q R X | ¡ }|jed!dx� |jd g|jdy< te|jd!g dz�}5td{dd0�}|j||5d!d|� dS )}z"Test additional ICA functionality.rT   Nr3   r¿   rÃ   rZ   r.   )gš™™™™™©?rñ   rÆ   r‰   rõ   rØ   r\   )r3   éZ   zNo fitÚ Zconverger6   rF   zstr or numeric)Ú	thresholdzis longer than the signalg      Ð?r`   ÚcorrelationÚunknownr¾   )rB   Úmeasurer  Zlongerr   )r   r   ZblinksTrÐ   )r  Úlabelrþ   Úch_typezNo component detectedrV   F)r  rþ   Úshowr§   )rj   Ús)Z	time_unitrì   Údivide)r  rþ   r  r­   zNo maps selected)rW   rX   rO   zNot all ICA instances have theztest-bad-name.fif.gzz-ica.fifz.*1.0 \(exclusive\).*r‘   ©rW   rB   zSelecting one component)Ú	normalizerÓ   )ÚblinkZthink)rn   zcould not be pickedzmatch fitted datarñ   Zfirwin2)Ú
fir_designZlowpassg      4@r¨   g      @rN   Zfirwin)Ztrans_bandwidthr!  útest-ica.fifZfakezUmixing_matrix_ unmixing_matrix_ pca_components_ pca_explained_variance_ pre_whitener_c                 S   s   t | |ƒjS rä   )ÚgetattrZdtype)Úxr  r<   r<   r=   Úfñ  s    ztest_ica_additional.<locals>.f©Ú	overwrite)rß   r›   rœ   rã   râ   rÙ   ©rM   r  )r÷   Ú
score_funcÚstartrd   é2   )r*  rd   r)  zSources and target do not haverö   Zctps)rB   r  r*  rd   )rB   r  zinteger .* start and stoprŠ   )r*  rd   zonly Raw and Epochs inputzcrazy-couplingra   éÊ   ÚchsÚkindr	  )Zch_name)r÷   r)  )r)  r  Zpearsonrr  éÈ   c                 S   s   g | ]}d |kr|‘qS ©r   r<   ©rè   Úchr<   r<   r=   Ú
<listcomp>  s      z'test_ica_additional.<locals>.<listcomp>ztest-ica_raw.fif©rS   çñhãˆµøä>g-Cëâ6?r]   c                 S   s   g | ]}d |kr|‘qS r0  r<   r1  r<   r<   r=   r3  Œ  s      r5   ç333333Ó?çÍÌÌÌÌÌì?r
  zmatch fitted©rŽ   rH   )rŽ   rM   ç®Gáz®ï?)rQ   Úreject_by_annotation)frD   ry   rÖ   r   r@   rt   ru   rv   rw   ro   r   rø   rf   r|   rš   r²   r   rà   r}   r´   r¶   ÚWarningr   Z_get_ctps_thresholdrÁ   Úfind_bads_ecgr~   r×   rn   r   rí   Zget_componentsr   Zplot_topomapÚpltÚcloserß   r'   rÚ   r   rs   Úappendrm   r™   r   rì   rM   rq   r   r   rû   Úfilterrï   Znotch_filterrY   rB   Úsplitr   r#  rx   r)   r   ÚitemsÚscore_funcs_unsuitedr  rÎ   r   Zskewrl   r.   Útimesr‹   Úfind_bads_eogÚindexrr   r   r   rz   ZargmaxÚndimr   Z	last_sampZ
first_sampZn_timesrý   ÚopÚjoinÚabspathÚcurdirZint32rW   r   ÚosÚremover€   Ú_rawrS   Úarrayrâ   Z_check_n_pca_componentsZdrop_channelsr   )6rB   r·   r  r   r�   r  Z	few_picksr†   Ztest_covÚ_Zscores_1Zscores_2Úica2Zica3Ú
componentsÚtemplateZbad_icarÝ   Zica_different_channelsZica_badnameZraw_rŸ   Zica_varZ
ica_sortedÚica_rawZd1Útest_ica_fnameÚica_readÚattrsr%  ré   r  Zsources2Z_raw1Z_raw2ÚnameÚfuncÚscoresr‚   Zevoked_datarÜ   Zepochs_dataÚidxZ
ecg_scoresZ
ecg_eventsZ
eog_scoresZ
eog_eventsZ	ica_chansZica_raw2Z
ica_epochsZncompsÚexpectedZncomps_rQ   r<   r<   r=   Útest_ica_additionalS  s8   

 ÿ
ÿ$ÿ ÿ
 ÿÿ $ÿ


2

 ÿ

 ÿÿ
þ
ÿ

ÿÿ ÿÿ ÿ



"r]  zmethod, cov)r>   N)rE   Nc              	      sÜ  t | ƒ |\}}}|dk	r"t|ƒ}|d }tdd�}t|d| dd�}	tƒ � |	j|t d¡d	� W 5 Q R X t|	ƒ |	 	|¡ 
¡ }
|	jjd
ks�t‚|	jjd
ks t‚|	jjdks°t‚|
jd |	jksÄt‚g dgt dddg¡fD ]ú}||	_ddgi|	_|	j|dd� t|ƒ}t|	jƒ|jk�st‚t|	j|jƒ |	j| ¡ f|Ž g |	_|	j| ¡ fddgi|—Ž |	jg k�spt‚ddg|	_|	j| ¡ fddgi|—Ž |	jddgk�sªt‚|	 	|¡‰ |	j‡ fdd„ˆ jd D ƒksÜt‚qÜdS )zTest ICA with cov.Nr"  rO   rÌ   rV   r3   rò   rN   r\   )rV   rV   )rN   rN   r   r‰   rÀ   Tr&  rM   c                    s   g | ]}ˆ j  |¡‘qS r<   )r×   rF  )rè   Úe©rT  r<   r=   r3  à  s     z test_ica_cov.<locals>.<listcomp>rH   )rD   r   rq   r   r)   rv   ry   rÖ   rw   rû   ro   rß   r™   r|   r›   rœ   rà   rO  rM   rí   r¶   r   rr   r   rx   rn   rf   )rB   r£   r·   r  r   r�   r  rU  r;   r†   r  rM   rV  r<   r_  r=   Útest_ica_cov³  sB    	



ÿr`  c              
   C   sæ   t | ƒ ttƒ dt¡ ¡ }t|jdddddd�}d|jddd	…f< t	d
| d�}t
ƒ �X}|j||dd… tdd�ddddd� |jdd…ddd…f jd d |jksªt‚W 5 Q R X dd„ | ¡  d¡D ƒ}tt|ƒdƒ t|ƒ dS )z#Test ICA data raw buffer rejection.ç      ø?TFrH   rI   g•dyáý•=rV   rŠ   ií  r‰   r  NrT   g•dyáý…=)rÐ   ç{®Gáz„?)ÚrejectÚdecimZtstepr­   r:  r3   rO   c                 S   s   g | ]}d |kr|‘qS )Zdetectedr<   )rè   r  r<   r<   r=   r3  ò  s    ÿz*test_ica_reject_buffer.<locals>.<listcomp>Ú
)rD   r   rb   rc   rd   re   r   rf   rm   r   r'   rv   rq   r™   rá   r|   rÚ   rA  r   rÎ   rw   )rB   r   rQ   r†   Zdrop_logrÝ   r<   r<   r=   Útest_ica_reject_bufferä  s$     ÿ  ÿ6rf  c           	   	   C   sØ   t | ƒ ttƒ dt¡ ¡ }| |jddd… ¡ t|j	ddd�}d}d}| d	krXt
}nt}t|| d
�}|ƒ � |j||dd� W 5 Q R X |j||d�}t|| d
�}|ƒ � |j||dd� W 5 Q R X t|j|jƒ dS )zTest running ICA twice.ra  NrN   ZgradrH   )rJ   rM   r9  rª   rE   r  r‰   )rQ   rd  rÌ   )rD   r   rb   rc   rd   re   rÍ   r×   r   rf   r)   r   r   rv   rx   r   rà   )	rB   r   rQ   rW   rY   r¸   Zica1rº   rQ  r<   r<   r=   Útest_ica_twiceø  s"    rg  c           	   	   C   sØ   t | ƒ i }t|| d� |i ks$t‚| dkrÔt|ƒ}t |d¡}ttƒ dt	¡ 
¡ }d}d}tdd�}t|||| d	�}|j}| d
kr�| |¡ n$tjtdd�� | |¡ W 5 Q R X | |¡ t|ƒ}|j|ksÔt‚dS )zTest fit_params for ICA.)Ú
fit_paramsrB   )r>   r¥   rÄ   rF   r‰   r3   T)Úextended)rh  rW   rX   rB   r¥   rÃ   rZ   N)rD   r   r|   ÚstrrH  rI  r   rb   rc   rd   re   rq   rh  rv   r@   rt   ru   r¶   r   )	rB   r·   rh  rÉ   r   rW   rX   r†   Zfit_params_after_instantiationr<   r<   r=   Útest_fit_methods  s.    
 ÿ
rk  )Ú
param_nameÚ	param_val)r*  r   )rd   r½   rc  gü©ñÒMb@?r8  Zflatç�íµ ÷Æ°>c           
   	   C   sz   d}d}d}t tƒjddd�}ttƒ}t||d�}t|||d�}| |i}	tjt	d	d
�� |j
f d|i|	—Ž W 5 Q R X dS )zECheck that we get a warning when passing parameters that get ignored.r¥   r‰   r3   FTrÑ   )r€   ©rW   rX   rB   zparameters.*will be ignoredrZ   ÚinstN)r   rb   r   r   rh   r   r   r@   rt   rš   rv   )
rl  rm  rB   rW   rX   r   r€   r�   r†   rh  r<   r<   r=   Útest_fit_params_epochs_vs_raw6  s    rq  Úallow_ref_megTc                 C   sâ  t | ƒ ttƒ ƒ}tt|ƒd|ƒ}tj d¡}| t|ƒd¡}t	||ƒ}| dt|ƒd¡}t
||ƒ}|j ¡ � d|jd< W 5 Q R X |j ¡ � d|jd< W 5 Q R X d}ttd ƒ}	|rÂ|	 d	¡ tt|ƒt|	ƒ ƒ}
t|| |d
�}||fD ]ð}|
D ]¾}|�r@t|jfdddœt|ƒdi—Ž}t|jfdddœt|ƒdi—Ž}n<t|jfddit|ƒdi—Ž}t|jfddit|ƒdi—Ž}tjtdd��" |j||d� |j||d� W 5 Q R X qôtjtdd�� |j|g d� W 5 Q R X qìdS )z2Test exception when unsupported channels are used.r½   r   r+  r  r‘   r¨   r7  )rL   Úref_meg)rW   rB   rr  F©rJ   rs  TrJ   zInvalid channel typerZ   r\   zNo appropriate channels foundN)rD   rr   r$   r   rÎ   ry   r•   r–   Zrandr    r   rf   rg   r#   r?  r  r   r   rj  r@   r}   r~   rv   )rB   rr  r-  rf   r    r.   r   r�   rW   Zdata_chsZchs_badr†   rp  r2  Z
picks_bad1Z
picks_bad2r<   r<   r=   Útest_bad_channelsO  sX    



ÿ
ÿ
þ
ÿ
þ
ÿ
ÿru  c                 C   sB  t | ƒ ttdd�}ttƒ}t|jdddddd�}t||tt	t
|dddd�	}d}t|| d	�}||fD ]~}t|jdddddd�dd
… }t|jdddddd�}	t ||	¡}
|j||
d� tdd„ |jD ƒƒsÎt‚t|| |
¡dd� qd||fD ]P}t|jdddddd�dd… }
|j||
d� t|ƒ tdd„ |jD ƒƒrìt‚qìdS )z6Test that EOG channel is included when performing ICA.Tr4  FrH   rI   Nr  r7  r  rO   r\   c                 s   s   | ]}d |kV  qdS ©ZEOGNr<   r1  r<   r<   r=   rë   ™  s     z#test_eog_channel.<locals>.<genexpr>)gš™™™™™é?iX  rÆ   rT   c                 s   s   | ]}d |kV  qdS rv  r<   r1  r<   r<   r=   rë   ¡  s     )rD   r   rb   r   rh   r   rf   r   ri   rj   rk   r   ry   r?  rv   rï   r×   r|   rw   ro   )rB   r   r€   rQ   r�   rW   r†   rp  Zpicks1aZpicks1bZpicks1r<   r<   r=   Útest_eog_channel„  sN     ÿ  ÿ ÿÿ ÿ ÿÿrw  c           
   
   C   sä   t | ƒ ttƒ dt¡ ¡ }ttƒ}t|j	ddd�ddd… }t
||ttt|ddd�}d}d	}|d
 }t| ||d�}	tƒ � |	 |¡ W 5 Q R X t|	ƒ |	 |¡ t|ƒ}	t|	ƒ |	jdksÀt‚|	jdksÎt‚|	jt|ƒksàt‚dS )zTest n_components=None.ra  TF)rŽ   rJ   NrT   r  rP   i90  rÄ   )rB   rW   r8   )rD   r   rb   rc   rd   re   r   rh   r   rf   r   ri   rj   rk   r   r)   rv   rw   r¶   r   rY   r|   rW   rà   rÎ   )
rB   r·   r   r€   rQ   r�   rW   r8   rÉ   r†   r<   r<   r=   Útest_n_components_none¤  s.     ÿÿ
rx  c            	      C   s´  d} t tƒ dd¡ ¡ }tttdt|jƒdƒƒtt	|j
dd�ƒB ƒ}| |¡ t|dƒ}dD ]’}| |¡ t||d	d
ddd�}| ¡ }||fD ]6}tdd| d�}tƒ � | |¡ W 5 Q R X t|ƒ qŽ|||fD ]}| | ¡ ¡ | |¡ qÐq\| d¡ tdd| d�}tƒ � | |¡ W 5 Q R X t|ƒ | d¡ t||d	d
ddd�}| ¡ }|||fD ]R}tjtdd�� | | ¡ ¡ W 5 Q R X tjtdd�� | |¡ W 5 Q R X �q\dS )z?Test run ICA computation on ctf data with/without compensation.rE   r   r‰   rN   T)rs  éŸ† )r   r3   r4   r5   N)r€   rj   rk   rR   rS   rV   ro  r3   zCompensation grade of ICArZ   )r!   Ú	ctf_fnamerc   re   Úsortedr  rs   rÎ   r×   r   rf   rÍ   r,   Úapply_gradient_compensationr   rl   r   r)   rv   rw   rx   rn   rû   r@   r}   r´   )	rB   r   rQ   r€   Úcompr�   r‚   rp  r†   r<   r<   r=   Útest_ica_ctfÁ  sH    ÿ


ÿ


ÿr~  c            
   	   C   s4  t tdd�} |  | jddd… | jdd…  ¡ ddddœ}|D ]}|| jks@t‚q@|  |¡ td	d
ddd�}tjt	dd�� | 
| ¡ W 5 Q R X t|ƒ |j| ddd� tt| jddd�ƒ}t|ƒD ]&\}}d d|| j| ¡|jksÆt‚qÆd|jksüt‚dD ]}||jk�s t‚�q |j| ddddd� tt| jddd�ƒ}t|ƒD ]*\}}d d|| j| ¡|jk�sHt‚�qHdD ]}||jk�sxt‚�qxdD ]}||jk�s”t‚�q”td
d
dd�}tjt	dd�� | 
|  ¡ jddd�¡ W 5 Q R X | | ¡}| dd„ |jD ƒ¡ |  |g¡ |j| dddd� t| jd ƒ}t|ƒD ]*\}}d d!|| j| ¡|jk�s>t‚�q>|j| ddd"d� d!|jk�sŒt‚d#D ]}||jk�s�t‚�q�d$|jk�s¸t‚|j| dddd%� d&D ]}||jk�sÎt‚�qÎ| | ¡d' }	d(|jk�st‚|jd( d)gk�st‚t|	d*d+d,d-gd,d.� dS )/zTest ICA labels.Tr4  Ni,  rN   rL   rK   )ZEEG057ZEEG058ZEEG059rO   rV   rE   )rW   rX   rB   rr  rÃ   rZ   )Úl_freqÚh_freqFr  z{}/{}/{})rK   rs  úecg/ECG-MAGr  r¾   )r  r€  rB   r  )rJ   rK   )rK   rL   )rs  r�  )rW   rX   rr  rt  c                 S   s   i | ]}|d | “qS )ZREF_r<   )rè   Úcr<   r<   r=   Ú
<dictcomp>  s      z#test_ica_labels.<locals>.<dictcomp>Zseparate)r  r€  rB   zREF_ICA*rs  Ztogether)rK   rL   rs  r�  )r  r€  r  )rK   rL   rs  r�  r3   Úmuscler   gìQ¸…ëá?rb  g¸…ëQ¸ž?r§   r¯   )r!   rz  r  r×   r|   Zset_channel_typesr   r@   rt   ru   rv   rw   rE  rr   r   rf   Ú	enumerateÚformatrí   r<  rn   rû   Zrename_channelsZadd_channelsZfind_bads_refr   Zfind_bads_muscler   )
r   ÚrenameÚkeyr†   rQ   r[  r2  Zica_rfZicacompsrZ  r<   r<   r=   Útest_ica_labelsï  sj    $
 ÿ$"
ÿÿr‰  zfname, grade)Úmarksr3   c                 C   sÀ  d}|   d¡r<ttƒ}| |jddd… ¡ ¡  |j ¡  nb|   d¡rTtt	dd�}nJt
jtdd	�� ttƒ}W 5 Q R X | |jdd
… |jd
dd…  ¡ ¡  |dk	r°| |¡ t|ddddd�}t|jdddd�dd… }t|jddd�dd… }g }| |¡ | |¡ t||dddddd�}| ¡ }	|||fD ]†}
t|
ƒdk�rJ�q4||fD ]>}tdd|d�}tƒ � |j||
dd� W 5 Q R X t|ƒ �qR|||	fD ]}| |¡ | |¡ �qœ�q4dS )zTest ICA on EEG.rE   z.fifNrT   z.setT)Zinput_fnamerS   zMISC channelrZ   é   rN   ry  r   r6  r’   ©r*  rd   ÚdurationF)rJ   rŽ   rs  rV   rÑ   çš™™™™™¹¿©r€   rj   rk   rR   rS   rË   ro  )rQ   r­   )Úendswithr   Ú	fif_fnamerÍ   r×   re   rf   rØ   r"   Úeeglab_fnamer@   rt   rš   r!   Ú
ctf_fname2r|  r,   r   Úextendr   rl   rÎ   r   r)   rv   rw   rx   rû   )r»   ZgraderB   r   r€   Z	picks_megZ	picks_eegZ	picks_allr�   r‚   rQ   rp  r†   r<   r<   r=   Útest_ica_eeg3  sH    


(

ÿ

 ÿ
r•  c            	         sâ   t  tdd¡} t  tdd¡}t| dd�}t| dƒ}t|dd�}dg‰ |jd }t|d	 jƒd
kr’‡ fdd„t|d	 |d ƒD ƒ}t	 
t	 |¡¡}nt	 |d	 ¡d }t| ƒ}t|ƒ |j| ¡ |d�}t| ¡ | ¡ ddd� dS )zTest read_ica_eeglab function.r1   r2   ztest_raw.cleaned.setTr4  NZmanualÚ	comp_infoÚflagsr3   c                    s&   g | ]\}}|ˆ krt  |¡d  ‘qS )r   )ry   Úwhere)rè   r—  r  ©Zmark_to_remover<   r=   r3  w  s   ýz(test_read_ica_eeglab.<locals>.<listcomp>r  r   r(  r5  rÕ   r]   )rH  rI  Útest_base_dirr"   r%   rŠ  rÎ   r™   Úzipry   ÚuniqueZconcatenater˜  r   rw   rx   rn   r   ro   )	r»   Zfname_cleaned_matlabr   Zraw_eegZraw_cleaned_matlabr–  Zind_comp_to_dropr†   Zraw_cleanedr<   r™  r=   Útest_read_ica_eeglabf  s4    ÿ
ÿ

ÿÿ ÿr�  c              	   C   sf  t  tdd¡}t  |¡dd… }t |dd… d | |d  ¡ | | }t|ƒ}|d d d d }tj 	d¡j
|jŽ |dd…< tt|ƒ|d	d
� t  |¡s t‚tjtdd�� t|ƒ}W 5 Q R X t|ƒ t|ƒ}dd„ t|ƒD ƒ}d|ksðt‚d|ksüt‚|j|j  k�ri k�sn t‚| | d¡¡ |D ].}	t||	ƒt||	ƒ }
}t|
|dd|	d� �q2dS )z7Test read_ica_eeglab function when there is a mismatch.r1   r2   NéýÿÿÿZfdtZEEGZ
icaweightsr   F)Z	appendmatzMismatch.*removal.*icawinv.*rZ   c                 S   s$   g | ]}|  d ¡r| d ¡s|‘qS )rP  )r�  Ú
startswithrç   r<   r<   r=   r3  ˜  s    
 
ÿz1test_read_ica_eeglab_mismatch.<locals>.<listcomp>rß   r›   rí   rÔ   )r^   r_   r°   )rH  rI  rš  ÚbasenameÚshutilÚcopyfiler	   ry   r•   r–   r—   r™   r
   rj  Úisfiler|   r@   rt   rš   r   rw   Údirrí   ÚpoprF  r#  r   )r·   Z
fname_origÚbaser»   r.   Úwr†   Zica_correctrW  ré   ÚaÚbr<   r<   r=   Útest_read_ica_eeglab_mismatch‡  s*     "rª  ©r‘   éF   c                 C   sì  d}t | jƒ}| jj|| jdk	r$|ndfks0t‚| jjd }| jj||fksTtdƒ‚tt 	| j| jj
¡t |¡ddd� | jj|fksŠt‚| jj| jfd	 ks¦td
ƒ‚| jj| jfd	 ksÂtdƒ‚t 	| j| j¡}t | j¡}t |ƒ||d d k ¡  }t | j¡}	d|	d|…< t||	ddd� | jjd | jjd k�s@t‚tjj| jdd�}
t|
dƒ |dk	�rè|jdk�rŽ| ddd	¡ |jd d¡}|  t|| jƒdd¡}tjj|dd�}
|
 ¡ |d k�sÎtdƒ‚|
 ¡ |d k �sètdƒ‚dS )z&Assert some attributes of ICA objects.TNr3   r   z	PCA shapern  zPCA orthogonality)r_   r°   rV   zUnmixing shapezMixing shaperÔ   zMixing as pinvr�   r‘   r‰   rÓ   zNot roughly unity)rÎ   r×   rÙ   r™   r�   r|   rœ   r   ry   r˜   ÚTÚeyerã   r›   rà   rß   r   Zsvdvalsrž   râ   ZnormrG  Z	transposeZreshapeZ_transform_rawr    rf   Úminr{   )r†   r.   rÇ   Z__tracebackhide__Zn_chZn_pcaZ	mix_unmixr  ZnzZwantZnormsr<   r<   r=   rw   £  sL    
 ÿ
  ÿÿÿ

ÿ


rw   r  ZdbsZseegc           
   
   C   sÊ   t j d¡ dd¡}tdd| ƒ}t||ƒ}t|ddddd�}t||d	dd
ddd�}| ¡ }d}||fD ]:}t	dd|d�}	t
ƒ � |	j|dd� W 5 Q R X t|	ƒ qf|||fD ]}|	 |¡ |	 |¡ q¬d
S )z&Test ica with different channel types.r   rN   rŠ   r�   ry  r6  r’   rŒ  rŽ  NTFr�  r¥   rV   ro  )r­   )ry   r•   r–   r—   r   r    r,   r   rl   r   r)   rv   rw   rx   rû   )
r  r.   rf   r   r€   r�   r‚   rB   rp  r†   r<   r<   r=   Útest_ica_ch_typesÑ  s(    

ÿ ÿ

r°  )Nr«  )€Ú
contextlibr   rL  Úos.pathÚpathrH  r¡  r@   Únumpyry   Znumpy.testingr   r   r   r   Zscipyr   r   Zscipy.ior	   r
   Zmatplotlib.pyplotZpyplotr=  rÿ   r   r   r   r   r   r   r   r   r   Zmne.covr   Zmne.preprocessingr   r9   r   r   r   Zmne.preprocessing.icar   r   r   r   r   Zmne.ior   r   r    r!   r"   Zmne.io.pickr#   r$   Zmne.io.eeglab.eeglabr%   Zmne.rankr&   Z	mne.utilsr'   r(   r)   r*   Zmne.datasetsr+   Z	mne.eventr,   rI  ÚdirnameÚ__file__Údata_dirrb   rh   rø   Z	data_pathrš  rz  r‘  r’  Zeeglab_montager“  ri   rj   rk   r*  rd   rC  ÚmarkZskipifZpymatreader_markrD   Zparametrizerˆ   r¤   r©   Úfilterwarningsr¼   rÂ   rÊ   rÏ   rÞ   rð   r  Zfixturer  Zslowtestr]  r`  rf  rg  rk  rq   rq  ru  rw  rx  Zrequires_testing_datar~  r‰  Úparamr•  r�  rª  rw   r°  r<   r<   r<   r=   Ú<module>   s*  ,
ÿ
 ÿ?
 
3
þ< 
  _ý*#üþ	
2+Bü+
.