U
    f»{j—C  ã                   @   s–  d dl mZ d dlZd dlZd dlmZm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 d dlmZmZmZ d dlmZmZmZ d dlmZm Z  d dl!m"Z" e #e $e%¡d	d	d
dd¡Z&e #e&d¡Z'e #e&d¡Z(e #e&d¡Z)e #e&d¡Z*d\Z+Z,Z-e #e&d¡Z.d*dd„Z/dd„ Z0dd„ Z1dd„ Z2edd„ ƒZ3e	j4j5edd„ ƒƒZ6ed d!„ ƒZ7e	j4j5ed"d#„ ƒƒZ8d$d%„ Z9ed&d'„ ƒZ:ed(d)„ ƒZ;dS )+é    N)Úassert_equalÚassert_array_equal)Úread_eventsÚEpochsÚread_covÚ
pick_typesÚAnnotationsÚmake_fixed_length_events)Úread_raw_fif)ÚICAÚcreate_ecg_epochsÚcreate_eog_epochs)Úrequires_sklearnÚcatch_loggingÚ_record_warnings)Ú_create_properties_layoutÚplot_ica_properties)Ú_fake_clickz..ÚioZtestsÚdataztest-ave.fifztest_raw.fifztest-cov.fifztest-eve.fif)é   çš™™™™™¹¿çš™™™™™É?ztest_ctf_raw.fifFc                 C   s   t t| d�S )zGet raw data.©Úpreload)r
   Ú	raw_fnamer   © r   úU/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/viz/tests/test_ica.pyÚ_get_raw   s    r   c                   C   s   t tƒS )zGet events.)r   Ú
event_namer   r   r   r   Ú_get_events$   s    r    c              	   C   s   ddddddddd	g	S )
z
Get picks.r   r   é   é   é   é   é   é   é   r   ©Úrawr   r   r   Ú
_get_picks)   s    r*   c               	   C   sN   t ƒ } tƒ }t| ƒ}tjtdd��" t| |dd… ttt	|d�}W 5 Q R X |S )zGet epochs.Ú
projection©ÚmatchNé
   ©Úpicks)
r   r    r*   ÚpytestÚwarnsÚRuntimeWarningr   Úevent_idÚtminÚtmax)r)   Úeventsr0   Úepochsr   r   r   Ú_get_epochs.   s    &r9   c               	   C   s8  d} | dddœ}t ƒ }tttƒdd�}t|ƒ}tjtdd�� |j||d	� W 5 Q R X ddgdd
gdd
gd dfD ]}|j	|fdddœ|—Ž qrt
 d¡ tƒ � }|j	dd
gd|dddd� W 5 Q R X | ¡ }d|ksÚt‚d|ksæt‚t
 ¡ }|jd
  ¡ }t|dd… ƒ}	dd„ |jD ƒ}
|
d
  ¡ j d¡jdd�}t||jd
 |dd� |	|jk�s^t‚t||jd
 |dd� |	|jk�s„t‚t||jd
 ddd� t
 ¡ }dd„ |jD ƒ}d D ]}||k�s¶t‚�q¶|j| d!¡ }| ¡ }| d"¡d | d"¡d k�st‚d|_tjtd#d�� |j	d
d$d%� W 5 Q R X dS )&zTest plotting of ICA solutions.r$   r   F©ÚresZcontoursZsensorsr!   ©Ú	noise_covÚn_componentsr+   r,   r/   r   NZcubicT)Úimage_interpÚcolorbarÚallé   ÚdebugÚgrad)r?   Úinstr;   ÚverboseÚch_typez	grad dataú extrapolation mode local to meanéýÿÿÿc                 S   s   g | ]
}|j ‘qS r   ©Útitle©Ú.0Úaxr   r   r   Ú
<listcomp>U   s     z,test_plot_ica_components.<locals>.<listcomp>©r!   r!   )ZaxisZpix©Zxform)ç        rR   r   c                 S   s   g | ]}|  ¡ ‘qS r   ©Ú	get_labelrL   r   r   r   rO   d   s     )ÚtopomapÚimageZerpÚspectrumZvariancerU   ú zfit the ICAÚmag)rG   )r   r   r   Ú	cov_fnamer*   r1   r2   r3   ÚfitZplot_componentsÚpltÚcloser   ÚgetvalueÚAssertionErrorZgcfÚaxesrT   ÚintZget_window_extentZextentsZreshapeZmeanr   ÚexcludeÚindexÚ	get_titleÚsplitÚinfoÚraisesÚRuntimeError)r;   Z	fast_testr)   ÚicaÚ	ica_picksÚ
componentsÚlogÚfigZlblZica_idxÚtitlesZtitle_pos_midpointZc_figÚlabelsÚlabelZ
topomap_axrK   r   r   r   Útest_plot_ica_components8   s\     
ÿÿ
 ÿÿÿ"rq   c                     s˜  t dd� dd¡‰ ˆ jg dd� ˆ j ¡ � dˆ jd< W 5 Q R X tˆ ƒ} tˆ ƒdd	… }‡ fd
d„|D ƒ}ˆ  |¡ tddd�}t	ˆ | dd… t
ttddd�}tttƒdddd�}tjtdd�� | ˆ ¡ W 5 Q R X tƒ \}}tt|ƒdƒ tjtdd�� td|d� W 5 Q R X tddddœd�}tƒ �}	|jˆ fdddœ|—Ž W 5 Q R X |	 ¡ }	ˆ jd d k�slt‚d!|	k�s~t|	ƒ‚|j|fddd"d#œ|—Ž |j|dd$d"iddd%œd&d'iddd(d(g|d)�	d }d*d„ |jD ƒ}
|j|
 d+¡ }|  ¡ d,k�süt‚|j! "d-¡ |  ¡ d.k�st‚|j! "d-¡ |  ¡ d,k�s8t‚|j|
 d/¡ }| #¡ d0k�sZt‚|j! "d1¡ | #¡ d2k�sxt‚|j! "d1¡ | #¡ d0k�s–t‚t$ %d3¡ tjt&d4d�� |j|t'd5ƒd6� W 5 Q R X tjt&d4d�� | |¡ W 5 Q R X tjt&d4d�� | d7g¡ W 5 Q R X tjt&d4d�� t(||ƒ W 5 Q R X tjt&d4d�� |j|d8d9� W 5 Q R X tjt&d4d�� |j|g d:� W 5 Q R X t$ )dd¡\}}| *¡ dd;… }|j|fd|d<œ|—Ž tjt&t(||ddg|d<� tjt|j|d=d>� t$ %d3¡ ˆ jdd?d… ˆ jdd?d…  }t dd� |¡ dd¡‰ ˆ j +¡  tddd@�}tjt,dAd�� | ˆ ¡ W 5 Q R X | ˆ ¡ t$ %d3¡ tddd@�}| |¡ tjt,dAd�� | |¡ W 5 Q R X d|j-d< t.ƒ � |j|f|Ž W 5 Q R X t$ %d3¡ t/dgdgdBgdC�}t dd� 0|¡ ddD¡}| 1t2 3dE¡¡ | 4¡  tjt,dAd�� | |¡ W 5 Q R X |j|fdFddgi|—Ž}tt|ƒdƒ |j|fdGdi|—Ž dS )Hz Test plotting of ICA properties.Tr   r   é   )Zremove_existingç      ð?ÚhighpassNr"   c                    s   g | ]}ˆ j | ‘qS r   ©Úch_names©rM   Úkr(   r   r   rO   |   s     z,test_plot_ica_properties.<locals>.<listcomp>g»½×Ùß|û=gê-�™—‘=)rD   rY   é   ©Nr   )Zbaseliner   r!   r   )r=   r>   Úmax_iterÚrandom_stater+   r,   zspecify both fig and figsizerP   )Úfigsizerm   é   Fr:   )Útopomap_argsrC   )r0   rF   úMEG 0113rH   g      ø?)r0   ÚdBÚplot_stdÚsigma)r;   r@   Zfmaxg     @P@g      @)r0   Z
image_argsr   Úpsd_argsr‚   Z	log_scaler}   Úrejectc                 S   s   g | ]}|  ¡ ‘qS r   rS   rL   r   r   r   rO   œ   s     rU   zICA001 (mag)ÚtzICA001 (grad)rW   rl   ÚlZlinearrA   zmust be an instanceÚabc)r�   r   znot dict)r„   )r‚   éÿÿÿÿ)r0   r`   znot axes)r`   é   )r|   r{   zdid not convergeÚBAD)ZonsetÚdurationÚdescriptionr$   r.   r0   Zreject_by_annotation)5r   ÚcropZadd_projrf   Ú_unlockr	   r*   Úpick_channelsÚdictr   r4   r5   r6   r   r   rZ   r1   r2   r3   r[   r   r   Úlenrg   Ú
ValueErrorr   Zplot_propertiesr^   rv   r_   r`   rc   rd   ZcanvasZkey_press_eventZ
get_xscaler\   r]   Ú	TypeErrorÚlistr   ZsubplotsZravelZnormalize_projÚUserWarningÚ_datar   r   Úset_annotationsÚpickÚnpZarangeZdel_proj)r7   r0   Z
pick_namesr…   r8   ri   rm   rN   Ztopoargsrl   Z	ax_labelsZannotZ	raw_annotr   r(   r   Útest_plot_ica_propertiesr   sÄ    
 ÿÿ
"  üü
ÿ
 





r›   c              
      s’  |   ¡  dd¡‰ tˆ ƒ}tƒ }ˆ  ‡ fdd„|D ƒ¡ tˆ jddddddd�}td	d
�}|jˆ |d� dg|_	t
jdkr„| dd¡ | ˆ ¡}| ¡ dksžt‚| ¡  t|j	dgƒ |jjd |jd gksÐt‚|jjd  ¡ d }|jjd  ¡ d }	|j||	fdd� |jjd g k�s t‚t|j	dgƒ |jddd� |jjd |jd gk�sZt‚t|j	dgƒ | |jj¡ | ¡  | ¡ dk�s�t‚t|j	dgƒ |jˆ dgd� | ¡ dk�sÀt‚| ¡  t |j¡|_|  dd¡}
| |
¡}| ¡ dk�sþt‚| ¡  |jddd� t |jj!ƒdk�s*t‚| ¡ d	k�s<t‚|jd|jj!d d� | ¡ dk�sdt‚| |jj¡ | ¡ dk�s„t‚~
ˆ j"}ˆ  #t$dgdgdƒ¡ | ˆ ¡}|j%dk�rêt |jj&j'ƒdk�sÐt‚t |jj(j'ƒdk�s t‚nt |jj)ƒdk�s t‚ˆ  #|¡ ˆ   ¡  *¡ }| +d¡ t,j-t.dd��, t,j/t0dd�� |j|d� W 5 Q R X W 5 Q R X |  ¡  *¡ }| +d¡ t,j-t.dd��, t,j/t0dd�� |j|d� W 5 Q R X W 5 Q R X ~~| |¡ | | 1¡ ¡ | 1¡ }| |¡}| 2¡ d }|j3d }t||| ¡ d | ¡ d gdƒ t||| 4¡ d | 5¡ d gdƒ dg|_	| |¡ dgdgd œ|_6| |¡ t,j-t7d!d�� | d"¡ W 5 Q R X d#S )$zTest plotting of ICA panel.r   r   c                    s   g | ]}ˆ j | ‘qS r   ru   rw   r(   r   r   rO   ï   s     z)test_plot_ica_sources.<locals>.<listcomp>TFZbads)ÚmegZeegZstimÚecgÚeogrb   r!   ©r>   r/   ÚdarwinZMNE_BROWSE_RAW_SIZEz20,20rr   r   rQ   ©Zch_indexZbuttonry   Úescape©rm   r   çš™™™™™¹?ZTestZ
matplotlibr€   zRaw doesn't match fitted datar,   zcould not be picked©rE   zEpochs don't match fitted data)rž   zeog/0/crazy-channelzmust be of Raw or Epochs typeZmeeowN)8ÚcopyrŽ   r*   r9   r�   r   rf   r   r[   rb   ÚsysÚplatformZsetenvÚplot_sourcesZ_get_n_figsr_   Z_redrawr   ÚmneZ
_ica_namesÚtracesÚ	get_xdataÚ	get_ydatar   Ú_click_ch_nameÚ_fake_keypressZ	close_keyZ_close_eventÚ
_close_allrš   Zint64Zn_components_r’   Z
child_figsÚannotationsr˜   r   ÚnameZax_mainÚcollectionsZ
ax_hscrollZregionsZ	load_dataZdrop_channelsr1   rg   rh   r2   r3   ÚaverageZget_axesÚlinesZget_xlimZget_ylimÚlabels_r“   )Zraw_origÚbrowser_backendZmonkeypatchr0   r8   rj   ri   rm   ÚxÚyZlong_rawZ
orig_annotZraw_Zepochs_ZevokedrN   Úliner   r(   r   Útest_plot_ica_sourcesé   s¶      ÿ






ÿ 
ÿ 


 ÿ ÿ
þ
r»   c               	   C   sØ  t dd�} | j ¡ � d| jd< W 5 Q R X t| ƒ}tttƒddd�}tjt	dd	�� |j
| d
� W 5 Q R X tjtdd	�� |j| |d� W 5 Q R X tjtdd	�� t| |d�}W 5 Q R X | 
| ¡ ¡ tjtdd	�� t| |d�}W 5 Q R X |j
| ¡ dd� t t|j
| dd…dd…f d ¡ tjt|j
| dd� | 
| ¡ t d¡ ttƒ} |  d¡ | j ¡ � d| jd< W 5 Q R X t| jddd�}tdd�}|j| |d� tjtdd	�� t| ƒ}W 5 Q R X | 
| ¡ ¡ dS )zTest plotting of ICA cleaning.Tr   rs   rt   r!   r   )r=   r>   r|   zneed to fitr,   r¥   r+   r/   )Zn_pca_componentsNry   )rb   rA   F)rœ   Zref_megrŸ   zlonger than)r   rf   r�   r*   r   r   rZ   r1   rg   rh   Zplot_overlayr2   r3   r[   r   r´   r   r”   r\   r]   r
   Úraw_ctf_fnameZapply_gradient_compensationr   )r)   r0   ri   Z
ecg_epochsZ
eog_epochsr   r   r   Útest_plot_ica_overlayW  s:    
$



r½   c                 C   s<   z| j d  ¡  ¡ W S  tk
r6   | j d  ¡  Y S X d S rz   )r`   Zget_subplotspecZget_geometryÚAttributeErrorr£   r   r   r   Ú_get_geometry€  s    r¿   c               	   C   s"  t ƒ } t| ƒ}tttƒdd�}tjtdd�� |j| |d� W 5 Q R X |j	ddgdd	gd
d� |j	ddgddggdd	gd� t
ƒ |_d|jd< d|jd< |j	ddgdd	gdd� |j	ddgdd	gdd� d|jd< d|jd< |j	ddgdd	gdd� |j	ddgdd	gdd� |j	ddgdd	gdd� |j	ddgddgddggdd	gd�}dt|ƒd k�s^t‚|j	ddgddggdd	gdd�}dt|ƒd k�s”t‚|j	ddgdd	gdd�}dt|ƒd k�sÂt‚tjtdd��" |j	ddgdd	gddgd� W 5 Q R X tjtdd�� | 	dg¡ W 5 Q R X dS )zTest plotting of ICA scores.r!   r<   r+   r,   r/   g333333Ó?r   r¤   r   )gš™™™™™@gš™™™™™@)Úaxhliner}   )rÀ   r   rž   r   r�   )rÀ   ro   z	eog/0/fooz	ecg/1/barZfoo)rÀ   Zn_colszNeed as manyÚonezone-too-manyzThe length ofN)r   r*   r   r   rZ   r1   r2   r3   r[   Zplot_scoresr‘   r¶   r¿   r_   rg   r“   )r)   r0   ri   rm   r   r   r   Útest_plot_ica_scores‡  sB    



ÿÿÿrÂ   c           
   	   C   sL  t ƒ }t|ƒ}tttƒdd�}tjtdd�� |j||d� W 5 Q R X dg|_	|j
|dd�}d	}|D ]}| |¡ qd|jjd  ¡ d }|jjd  ¡ d }|j||fd
d� |jddd� | d¡ |  ¡  tƒ }	|j
|	dd�}|D ]}| |¡ qæ|jjd  ¡ d }|jjd  ¡ d }|j||fd
d� |jddd� | d¡ dS )z;Test plotting of components as instances of raw and epochs.r!   r<   r+   r,   r/   r   Z
ComponentsrJ   )ÚhomerÃ   ÚendZdownÚupÚrightÚleftú-ú+ú=ÚdrË   ZpageupZpagedownÚzrÌ   ÚsrÍ   Úbr   rQ   r   r¡   r¢   N)r   r*   r   r   rZ   r1   r2   r3   r[   rb   r©   r¯   rª   r«   r¬   r­   r   r®   r°   r9   )
r·   r)   r0   ri   rm   ÚkeysÚkeyr¸   r¹   r8   r   r   r   Útest_plot_instance_components±  s2    
rÑ   )F)<Úos.pathÚpathÚopr§   Únumpyrš   Znumpy.testingr   r   r1   Zmatplotlib.pyplotZpyplotr\   rª   r   r   r   r   r   r	   Zmne.ior
   Zmne.preprocessingr   r   r   Z	mne.utilsr   r   r   Zmne.viz.icar   r   Zmne.viz.utilsr   ÚjoinÚdirnameÚ__file__Úbase_dirZevoked_fnamer   rZ   r   r4   r5   r6   r¼   r   r    r*   r9   rq   ÚmarkZslowtestr›   r»   r½   r¿   rÂ   rÑ   r   r   r   r   Ú<module>   sJ    



9u
m'
)