U
    f»{j0D  ã                   @   s  d dl mZ d dlZd dlZd dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZ dd„ Zdd	„ Zej d
edddd�ddf¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejjdd „ ƒZd!d"„ Zd#d$„ Z d%d&„ Z!ej"d'd(„ ƒZ#ejjej"d)d*„ ƒƒZ$d+d,„ Z%dS )-é    N)ÚEpochsÚcreate_infoÚEpochsArray)Útesting)Úmake_fixed_length_events)Úplot_drop_logc                 C   s(   | j dkst‚|  ¡  | j dks$t‚dS )z#Test plotting non-preloaded epochs.N)Ú_dataÚAssertionErrorÚplot)Úepochs_unloadedÚbrowser_backend© r   úX/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/viz/tests/test_epochs.pyÚtest_plot_epochs_not_preloaded   s    r   c              	   C   sL  t | jƒdkst‚| j ¡ � d| jd< W 5 Q R X | jddd�}| d¡}|dgksXt‚| ¡  t |d	 ƒd
kstt‚|d g ks„t‚| jd g ks–t‚tj	t
dd�� | j|d� W 5 Q R X | ¡  | jd g| jd< tj	t
dd�� | j|d� W 5 Q R X | ¡  | jd g|d< tj	t
dd�� | j|d� W 5 Q R X | ¡  |d	 dd… |d	< |d dd… dd… |d< tj	t
dd�� | j|d� W 5 Q R X | ¡  | d jdddgdd�}| d¡ tjtdd�� | jg d� W 5 Q R X t |ƒdk�sút‚|jd g|jd< | ¡  tjtdd�� |jdd� W 5 Q R X |jddd� dS )zTest epoch plotting.é   g      $@ZlowpassNr   )ÚscalingsÚtitleÚxÚ2Únamesin  ÚbadsZ
projection©Úmatch)Z	noise_covr   i2  Údataé   é   )Úpicksr   ÚescapezNo appropriate channels found)r   é   z#title must be None or a string, got)r   Ú	selectionÚ )Úgroup_byr   )ÚlenÚeventsr	   ÚinfoZ_unlockr
   Ú_get_ticklabelsÚ
_close_allÚpytestÚwarnsÚRuntimeWarningÚch_namesÚ_fake_keypressÚraisesÚ
ValueErrorÚ
readouterrÚ	TypeError)ÚepochsÚepochs_fullZnoise_cov_ioÚcapsysr   ÚfigZticksr   r   r   Útest_plot_epochs_basic   sH    

r4   r   gê-�™—q=g•dyáý¥=Úauto)ÚmagZgradÚstimc                 C   s   | j |d� dS )z$Test the valid options for scalings.)r   N)r
   )r0   r   r   r   r   r   Útest_plot_epochs_scalingsL   s    r8   c              	      s�   ‡ fdd„t tˆ jƒƒD ƒ}ˆ j|d� tjtdd�� ˆ jdgdggd� W 5 Q R X tjtdd�� ˆ jdggd� W 5 Q R X ˆ jdd	� d
S )z5Test epoch_colors, for compatibility with autoreject.c                    s   g | ]}d gt ˆ jƒ ‘qS )Úr)r"   r*   )Ú.0Ú_©r0   r   r   Ú
<listcomp>U   s     z+test_plot_epochs_colors.<locals>.<listcomp>)Úepoch_colorsz!length equal to the number of epor   r9   Úbzepoch colors for epoch \d+ has)Zevent_colorN)Úranger"   r#   r
   r'   r,   r-   )r0   r   r>   r   r<   r   Útest_plot_epochs_colorsS   s    
ÿrA   c                 C   s^   |   ¡ }| ¡ }|jdkr0t|ƒdks*t‚d}n|jdkrNt|ƒdksJt‚d}||ksZt‚dS )zTest scale bar for epochs.Z	pyqtgraphr   )ú800.0 fT/cmú	2000.0 fTÚ
matplotlibé   )rB   ú0.55 secrC   rF   N)r
   Z_get_scale_bar_textsÚnamer"   r	   )r0   r   r3   ZtextsZwantsr   r   r   Útest_plot_epochs_scale_bar`   s    

rH   c                 C   s6  | j | jd�}|jjd  ¡ d }|jjd  ¡ d }t| ƒ}|jjjd }|j	||fdd� ||jj
ksnt‚|j	||fdd� ||jj
ks�t‚|j	||fdd� ||jj
ks²t‚| d¡ | ¡  |d t| ƒksØt‚|j dd�}| d	¡d }	|	|jjd
 k�st‚|jddd� |	|jjd
 k�s,t‚|j	d|jjd� |j	d|jjd� | d¡ |jjd  ¡ d }|jjd  ¡ d }|j	||fdd� | d¡ | ¡ \}
}d|
k�s¸t‚d|k�sÆt‚| d¡ | ¡  t|ƒdk�sêt‚|  ¡ }|jddd� t|jjƒdk�st‚| ddd¡ | ddd¡ dS )z#Test plot_epochs mouse interaction.)r#   r   r   r   ©Úxformr   r   ©Ún_epochsÚyr   )Zch_indexÚbutton)ç      à?rO   )ÚaxÚrightéýÿÿÿÚleftzout of boundsé   rO   ç      à¿N)r
   r#   ÚmneÚtracesÚ	get_xdataÚ	get_ydatar"   Úinstr   Ú_fake_clickZ
bad_epochsr	   r+   Z_close_eventr%   r$   Z_click_ch_nameZ
ax_vscrollZ
ax_hscrollr.   Z
child_figsÚ_fake_scroll)r0   r1   r2   r   r3   r   rM   rL   Z	epoch_numZfirst_chÚoutÚerrr   r   r   Útest_plot_epochs_clicksn   sJ    



r_   c                 C   s°   |   tdd�¡ | jdd�}t| jƒd }|jjd  ¡ | }|jjd  ¡ | |jjd  ¡ |  d }|j	||gdd	� d
}|d D ]}| 
|¡ qˆ|j	||gddd� dS )z&Test plot_epochs keypress interaction.gê-�™—‘=)r6   r   rK   r   r   r   r   rI   )ÚpagedownÚdownÚupra   rQ   rS   ú-ú+ú=Údrf   ÚpageupÚhomezshift+rightÚendz
shift+leftÚzrj   Úsrk   ú?ÚhÚjr?   )rJ   rN   N)Údrop_badÚdictr
   r"   ÚtimesrV   rW   rX   rY   r[   r+   )r1   r   r3   Z
sample_idxr   rM   ÚkeysÚkeyr   r   r   Útest_plot_epochs_keypresses    s    ÿÿrt   c                 C   s–   t jdd�}d}tdd|d�}t  ddd	gd
d
d
gdddgf¡}t||d|d�}|j|dd�}| jdkrzt|jj	 
¡ ƒ}nt|jj	ƒ}|dks’t‚dS )z2Test drawing of event lines in overlapping epochs.)r   r   éd   )Úshaperu   )Úar?   )Úmiscrx   )r*   Zch_typesÚsfreqé2   é<   éF   r   r   r   r   rU   )Útminr#   rx   )r#   r   rD   é	   N)ÚnpZzerosr   Zcolumn_stackr   r
   rG   r"   rV   Zevent_linesZget_segmentsr	   )r   r   ry   r$   r#   r0   r3   Zn_event_linesr   r   r   Ú(test_plot_overlapping_epochs_with_events´   s      ÿ"
r€   c                 C   s   |   ¡  dS )zTest sensor plotting.N)Zplot_sensorsr<   r   r   r   Útest_epochs_plot_sensorsÅ   s    r�   c              	   C   sR   t j d¡ ddd¡}tdddƒ}t||ƒ}tjtdd�� | 	¡  W 5 Q R X d	S )
z:Test plotting of epochs when no data channels are present.r   é
   r   iè  g     @�@r7   z!consider passing picks explicitlyr   N)
r   ÚrandomZRandomStateZrandnr   r   r'   r,   r-   r
   )r   r   r$   r0   r   r   r   Útest_plot_epochs_nodataÊ   s
    
r„   c              
   C   s¾  |   ¡ }t|ƒdkst‚tt ¡ ƒdks,t‚|   ¡ }t|ƒdksDt‚tt ¡ ƒdksXt‚| j ddd� | j ddgdtd	d
�d� | j dgdgdgddd� t d¡ | j dgdgddd� t d¡ | j dgdd„ d� t dd¡\}}| j dg|d� | j dg|d d	d	d� t d¡ | j ddgdd„ d� tj	t
dd�� | j dg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 tdd"�tdd#�d$� W 5 Q R X t d¡ | j td%d&�d'� tjtd(d�� | j tdddgd)�d � W 5 Q R X tjtd*d�� | j dd+d,� W 5 Q R X tjtd-d�� | j t ¡ d.� W 5 Q R X tjtd/d��8 t dd¡\}}| j |tddgd0d1gd2�d3� ~~W 5 Q R X t d¡ tjtd4d��" t dd¡\}}| j |d5� W 5 Q R X dtƒ gdtd	d6�gdtd	d7�gdtd	d	d8�gfD ]l\}}t d|d ¡\}}| j f d|d9|… d:œ|—Ž tjtd;d�� | j f d|d:œ|—Ž W 5 Q R X �qt d¡ tjtd<d�� | j tƒ d5� W 5 Q R X d=}tjt|d��< | j t|d9d… |d9d… d2�tddgd0d1gd2�d>� W 5 Q R X tjtd?d�� | j dd@� W 5 Q R X tjtdAd�� | j dgddBgdC� W 5 Q R X tj	t
dDd�� | j dEgdF� W 5 Q R X tjtdGd�� | j dgddgd� W 5 Q R X t d¡ d9S )Hax  Test plotting of epochs image.

    Note that some of these tests that should pass are triggering MPL
    UserWarnings about tight_layout not being applied ("tight_layout cannot
    make axes width small enough to accommodate all axes decorations"). Calling
    `plt.close('all')` just before the offending test seems to prevent this
    warning, though it's unclear why.
    r   rE   r6   gš™™™™™¹?)r   Úsigmar   r   ZmeanF)Zshow_sensors)r   ÚcombineÚts_argsç{®Gáz„?Útest)r   ÚorderÚoverlay_timesÚvminr   Úallgü©ñÒMbP¿gü©ñÒMbP?)r   r‹   rŒ   Úvmaxc                 S   s   |   ¡ S )N)Úmin)r   r   r   r   Ú<lambda>ë   ó    z(test_plot_epochs_image.<locals>.<lambda>)r   rŒ   r   )r   r3   )r   ÚaxesÚevokedÚcolorbarc                 S   s   t  t|ƒ¡d d d… S )Néÿÿÿÿ)r   Zaranger"   )rq   r   r   r   r   r�   ô   r‘   )r   rŠ   zOnly one channel in groupr   )r   r†   zdict or NoneÚfoo)r!   z Scalings and units must have the)Úhi)Zho)Zunitsr   T)Zinvert_y)r‡   z Cannot combine sensors of differ)r–   zone of "fig" or "axes" must beÚbar)r3   r’   z "fig" must contain . axes, got .)r3   z""group_by" can only have one groupé   rT   )r–   r˜   )r3   r!   z"is a list, can only plot one group)r’   )r“   )r”   )r“   r”   N)r   r’   z"axes" must be length ., got .z!must match the keys in "group_by"z4each value in "axes" must be a list of . axes, got .)r’   r!   z""combine" must be None, a callable)r†   zsize of overlay_times parameterçš™™™™™É?)r   r‹   zfall outsideg     8�@)r‹   z!must match the length of the data)Z
plot_imager"   r	   ÚpltZget_fignumsrp   ÚcloseZsubplotsr'   r(   r)   r,   r/   r-   Zfigure)r0   Zfigsr3   ZaxsÚlengthÚkwargsr   r   r   r   Útest_plot_epochs_imageÓ   s�    
ÿÿ



ÿ$
"
ý$
ÿrŸ   c              
   C   sŒ   t jtdd�� |  ¡  W 5 Q R X |  ¡  |  ¡  tdƒ tdƒ tdƒ g g fdfD ]&}t jtdd�� t|ƒ W 5 Q R X qVt d¡ d	S )
zTest plotting a drop log.zbad epochs have not yet beenr   )©ÚOner   r   )r    )ÚTwor   )r    )r¡   r¢   r   )r   ztuple of tuple of strr�   N)r'   r,   r-   r   ro   r/   r›   rœ   )r   Úargr   r   r   Útest_plot_drop_log4  s    r¤   c              
      s\  | j ddd� | j ddd� | j ddd� tjtdd�� | jdgd� W 5 Q R X t d¡ |  ¡ }t|jƒd	ksvt	‚| jd
d�}|jd j
d jj‰|jd j
d jj‰ t‡fdd„|jdd… D ƒƒsÎt	‚t‡ fdd„|jdd… D ƒƒsòt	‚| jddgd�}d| jd  }d|  ¡ dddd…f< dD ],}tjt|d�� | j |d� W 5 Q R X �q*dS )z$Test plotting epochs psd (+topomap).TF)ÚaverageÚspatial_colorszNo frequencies in bandr   ©r   rˆ   r–   ©Úbandsr�   r‚   Zjoint)Zvlimr   c                 3   s    | ]}ˆ |j d  jjkV  qdS ©r   N)ÚimagesÚnormrŒ   ©r:   rP   )Úvmin_0r   r   Ú	<genexpr>S  s     z'test_plot_psd_epochs.<locals>.<genexpr>r   r™   c                 3   s    | ]}ˆ |j d  jjkV  qdS rª   )r«   r¬   rŽ   r­   )Úvmax_0r   r   r¯   T  s     )é   z20 Hz)é   é   z15-25 Hzzfor channel %sr   N©TF©ÚdB)Úplot_psdr'   r,   ÚRuntimeErrorÚplot_psd_topomapr›   rœ   r"   r’   r	   r«   r¬   rŒ   rŽ   r�   r*   Úget_datar(   ÚUserWarning)r0   r3   Zerr_strr¶   r   )r°   r®   r   Útest_plot_psd_epochsC  s&    
$$r¼   c                 C   s,   dddg}| j |d�}t|jƒdks(t‚dS )z.Test plotting of PSD topography for nirs data.)rš   z0.2 Hz)gš™™™™™Ù?z0.4 Hz)gš™™™™™é?z0.8 Hzr¨   rT   N)r¹   r"   r’   r	   )Zfnirs_epochsr©   r3   r   r   r   Útest_plot_psdtopo_nirs_  s    
r½   c              
   C   s˜   |   ddddddddg¡ t| ƒ}t| |dd	�}| ¡  | ¡  |jdd
�}d}|D ]}| |¡ qT| ddd¡ | ddd¡ | d¡ | d¡ dS )zTest of basic CTF plotting.ZUDIO001ZUPPT001z
SCLK01-177zBG1-4304z
MLC11-4304ZEEG058zUADC007-4302T©Úpreload)Ú	butterfly)r?   r?   r`   ra   rb   ra   rQ   rS   rc   rd   re   rf   rf   rg   rh   ri   rj   rj   rk   rk   rl   rm   rn   rO   rU   r   r   N)Zpick_channelsr   r   r
   r&   r+   r\   Z_resize_by_factor)Úraw_ctfr   Úevtsr0   r3   rr   rs   r   r   r   Útest_plot_epochs_ctff  s&    
   þ
rÃ   c              
   C   s€   t | ƒ}t| |dd�}tjt|jdgd� | ¡  dD ]*}tjtdd�� |j|d� W 5 Q R X q6| 	d	g¡ |jd
d
d� dS )z(Test plotting CTF epochs psd (+topomap).Tr¾   r§   r¨   r´   zfor channel EEG060r   rµ   ZEEG060F)r¦   r¥   N)
r   r   r'   r,   r¸   r¹   r(   r»   r·   Zdrop_channels)rÁ   rÂ   r0   r¶   r   r   r   Útest_plot_psd_epochs_ctf  s    
ÿrÄ   c                 C   sF   t | ƒdd… }t| |ddddd�}t|ƒdks4t‚|jddd� dS )	z.Test that using selection and butterfly works.Nr   r   rO   T)r}   Ztmaxr¿   Zbaseliner   )r!   rÀ   )r   r   r"   r	   r
   )Úrawr   r#   r0   r   r   r   Ú$test_plot_epochs_selection_butterfly‘  s    rÆ   )&Zmatplotlib.pyplotZpyplotr›   Únumpyr   r'   rV   r   r   r   Zmne.datasetsr   Z	mne.eventr   Zmne.vizr   r   r4   ÚmarkZparametrizerp   r8   rA   rH   r_   rt   r€   r�   r„   ZslowtestrŸ   r¤   r¼   r½   Zrequires_testing_datarÃ   rÄ   rÆ   r   r   r   r   Ú<module>
   s>   1 ÿ
2	
`
