U
    f»{jŒ  ã                   @   s  d dl mZ d dlmZ d dlZd dlZd dlm	Z	 d dl
mZmZmZmZ 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 d dlmZmZmZ d dlmZ d dl m!Z! d d	l"m#Z#m$Z$ e %e &e'¡d
ddd¡Z(e %e(d¡Z)e %e(d¡Z*e %e(d¡Z+e %e(d¡Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0dd„ Z1ej2 3de1ƒ ¡dd„ ƒZ4ej2j5dd „ ƒZ6d!d"„ Z7d#d$„ Z8d%d&„ Z9d'd(„ Z:d)d*„ Z;e#d+d,„ ƒZ<e#ej2 3d-d.¡d/d0„ ƒƒZ=d1d2„ Z>d3d4„ Z?d5d6„ Z@d7d8„ ZAd9d:„ ZBd;d<„ ZCd=d>„ ZDd?d@„ ZEdAdB„ ZFdCdD„ ZGdEdF„ ZHdGdH„ ZIdS )Ié    )ÚdeepcopyN)Úfftpack)Úassert_array_almost_equalÚassert_equalÚassert_array_equalÚassert_allclose)	Úequalize_channelsÚ
pick_typesÚread_evokedsÚwrite_evokedsÚcombine_evokedÚcreate_infoÚread_eventsÚEpochsÚEpochsArray)Ú	_get_peakÚEvokedÚEvokedArray)Úread_raw_fif)ÚFIFF)Úrequires_pandasÚgrand_averagez..ÚioZtestsÚdataútest-ave.fifztest-ave.fif.gzztest_raw.fifztest-eve.fifc               	   C   sH  t tdƒ} |  ¡ }| j}t||ƒ t dd„ |  ¡ D ƒ¡}t| j| | jdd�ƒ | jdd�}t |j	d | jj	d t 
| jdk¡d  k¡s’t‚| jddd�jdksªt‚tjtd	d
�� | jdgdd� W 5 Q R X tjtdd
�� | jdt d¡d� W 5 Q R X | jddd�}| jddd�}t||ƒ | jddd�}t|d |ƒ dS )z$Test the get_data method for Evoked.r   c                 S   s   g | ]}|d k‘qS )Úeeg© ©Ú.0Úir   r   úT/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/tests/test_evoked.pyÚ
<listcomp>(   s     z!test_get_data.<locals>.<listcomp>r   )Úpicks©Útminé   )r$   Útmaxztmin .* float, None©Úmatchztmax .* float, Noneé   N)r"   ZunitsÚVu   ÂµVg    €„.A)r
   ÚfnameÚget_datar   r   ÚnpÚarrayZget_channel_typesÚallÚshapeZnonzeroÚtimesÚAssertionErrorÚsizeÚpytestÚraisesÚ	TypeErrorZones)ÚevokedZd1Zd2Zeeg_idxsZd3r   r   r    Útest_get_data!   s2    


þ
ÿÿ

r8   c               	   C   s0  t j d¡} d\}}d\}}|| }d}|| }|  ||¡}t||dƒ}	|	 ¡ � |t|ƒ |	d< W 5 Q R X t||	dd�}
|
j 	¡  
d¡}|
 ¡  |¡}|
 ¡ j|d	d
�}|
 |¡ |¡}|| }t|j|dd…|d|…f ƒ t|j|dd…|d	 d|…f ƒ |jdk�st‚|jd	k�s"t‚t|jdddgƒ |jdk�sDt‚|jd	k�sTt‚t|jdddgƒ |jdk�svt‚|jd	k�s†t‚t|jdddgƒ |||fD ]j}t  t  t  |j|j¡¡¡}t  t  |j¡t  t  |j¡¡k¡d }||k�søt‚t|ƒdk�s¢t‚�q¢ttƒ}ttƒ}|jd | }|j ¡ � |d |jd< W 5 Q R X t|jdddd�}t||d	dd|dd�}dD ]®}| ¡  ||¡ ¡ }| ¡  ||¡}|j|d|… }t |j|ƒ t |j|ƒ | !¡ dd…dd…|d|…f j"dd�}t |j|ƒ t |j|ƒ t#|jd |ƒ t|j|ƒ �q|dS )zTest evoked decimation.r   )é
   é   )é   é   ç      $@r   Úlowpasséÿÿÿÿr#   r%   )ÚoffsetNg333333ã¿ç        g333333ã?g      à¿çš™™™™™¹?gffffffæ?)r%   r;   Úsfreqg      @Tr   ©Úmegr   Úexcludeçš™™™™™É¿ç      à?)r"   Zpreload©r   r%   ©Zaxis)$r-   ÚrandomÚRandomStateÚrandnr   Ú_unlockÚfloatr   r1   ÚtolistÚindexÚcopyZdecimater   r   Úfirstr2   ÚlastZargminÚabsÚarangeÚwhereÚminÚlenr   Ú	raw_fnamer   Ú
event_nameÚinfor	   r   Úaverager   r,   Úmeanr   )ÚrngZ
n_channelsÚn_timesZdec_1Zdec_2ZdecimrC   Z	sfreq_newr   r\   r7   Zzero_idxZ
evoked_decZevoked_dec_2Zevoked_dec_3Z
start_sampÚevZlowest_indexZidxs_of_times_nearest_zeroÚrawÚeventsr"   Úepochsr@   Zev_ep_decimZev_decimZexpected_timesZexpected_datar   r   r    Ú
test_decimH   sf    
"&ÿ(re   c                  C   s0  d} t tdƒ}t t|jƒd|jd  ¡}t t 	|j
¡¡}t |dk|| d k¡}t || d k|dk ¡}t t|j|jd ¡ | ¡  | ¡}t t 	|j
¡¡}tt |dd…|f d¡t |dd…|f d¡d	d
d� t |dd…|f ¡t |dd…|f ¡d k�st‚t|t t 	|j
¡¡dd� dS )zTest savgol filtering.r=   r   ç      ð?rC   ç       @r;   ç      I@Ng-Cëâ6?ç{®Gáz„?©ÚrtolÚatolr)   ç¼‰Ø—²Òœ<©rl   )r
   r+   r   ZfftfreqrY   r1   r\   r-   rU   Zfftr   Úlogical_andr4   r5   Ú
ValueErrorZsavgol_filterrR   r   r^   r2   )Zh_freqr7   Zfreqsr   Z
match_maskZmismatch_maskZ	evoked_sgZ	data_filtr   r   r    Útest_savgol_filter‡   s$    
 þÿ
rq   c                  C   sv   t tdƒ} t tdƒ}t| ƒt|ƒks(t‚| |ks4t‚t | ¡t |¡ksLt‚|jd  d8  < t| ƒt|ƒksrt‚dS )zTest evoked hashing.r   )r   r   r%   N)r
   r+   Úhashr2   ÚpickleÚdumpsr   )ÚaveÚave_2r   r   r    Útest_hash_evoked�   s    

rw   c                  C   s4   t ƒ } tD ]$}| d¡sq
|  ttt|ƒƒ¡ q
| S )zYield evoked aspect kinds.ZFIFFV_ASPECT_)Úlistr   Ú
startswithÚappendÚgetattrÚstr)ÚkindsÚkeyr   r   r    Ú_aspect_kindsª   s    
r   Úaspect_kindc                 C   sh   t tdƒ}| |_dt|ƒks t‚t t|ƒd¡}| |¡ t |dd�}t	|j
|j
ƒ |j|jksdt‚dS )z Test handling of evoked aspects.r   r   r   ©Ú	conditionN)r
   r+   Ú_aspect_kindÚreprr2   ÚopÚjoinr|   Úsaver   r   Úkind)r€   Útmp_pathru   Z
temp_fnamerv   r   r   r    Útest_evoked_aspects´   s    

rŠ   c              	   C   sä  t tdƒ}| ¡ }|jd |_|jd |_t| d ||gƒ t t | d¡ƒ\}}|jd |jksdt‚t	j
|j|jddd�s~t‚t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|ƒsÞt‚t tdƒ}t	j
|j|jddd��st‚d	}tjtt t|d
d� tjtt t|dd� t t|ƒ}t|j|jdƒ t tƒddd… }t tddgƒ}t tddgƒ}t| d |dd� t | d ƒ}	|||	fD ]Œ}
t||
ƒD ]z\}}t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ �q®�q | ¡ }d|j |_t| d ƒ}| |¡ t |ƒd }t|j|jjƒ | d }tjtdd�� t||ƒ W 5 Q R X tjtdd�� t |ƒ W 5 Q R X | d }d	}t t|ƒ}|j dd… |j!d< | ¡ }|j!d ddd… |j!d< t|||gƒ t t"t#t¡ | d }|j!d dk�sFt‚|j! $¡ � d|j!d< W 5 Q R X | |¡ t tt |¡ tjtd d�� t |dd!�}
W 5 Q R X t%d"d#„ |
D ƒƒ�s¼t‚t |d$d!�}
t%d%d#„ |
D ƒƒ�sàt‚dS )&z=Test IO for evoked data (fif + gz) with integer and str args.r   z doubled naver;   úevoked-ave.fifrm   çü©ñÒMbP?©rl   rk   ç:Œ0âŽyE>zLeft AuditoryÚstderr©rˆ   Zstandard_erroré   r%   Nr<   zRight AuditoryzRight visualT©Ú	overwritey              ð?zcomplex-ave.fifztest-bad-name.fifz-ave.fifr'   ztest-bad-order-ave.fifÚbadsr?   r   Ú	maxshieldFZElekta)Zallow_maxshieldc                 s   s   | ]}|j d  dkV  qdS ©r•   TN©r\   ©r   ru   r   r   r    Ú	<genexpr>  s     z!test_io_evoked.<locals>.<genexpr>Úyesc                 s   s   | ]}|j d  dkV  qdS r–   r—   r˜   r   r   r    r™     s     )&r
   r+   rR   ÚcommentÚnaver   r…   r†   r2   r-   Úallcloser   r   r1   r   rƒ   rˆ   rT   rS   r„   Úfname_gzr4   r5   rp   ÚzipÚ_datar|   r‡   r   ÚimagÚwarnsÚRuntimeWarningÚch_namesr\   r6   r   rN   r/   )r‰   ru   Z
ave_doubleZave2r‚   Zave3Zaves1Zaves2Zaves3Zaves4ZavesZav1Zav2Zave_complexÚ
fname_tempZfname2Zfname3Zave4Zave5Zfname_msr   r   r    Útest_io_evokedÃ   sŠ    

ÿ



r¦   c                 C   s&  t | ƒ}ttdƒjddd�}t |d¡}t||ƒ t|dƒ}|jddd� t||dd� t|dƒ}|jddd� t||dd� ttdƒ}t|dƒ}t|j|jdd	d
� t	|j
|j
dƒ t|j|jƒ t|j|jƒ ttdƒ}|jddd� t||dd� t|dƒ}t|j|jdd	d
� t|jtd|jd  ƒƒ d}	ttdƒ}|j
}
| |	¡ t|
|	 |j
ddd
� ttdƒ}t |j|jg¡}| d¡ t|t |j|jg¡ƒ t||dd� t|dƒ}t	|j
|j
dƒ | d|jd  ¡ t|d t |j|jg¡ƒ t||dd� t|dƒ}t	|j
|j
dƒ dS )z Test for shifting of time scale.r   çš™™™™™¹¿T)Úrelativer‹   çš™™™™™É?r’   rm   rŒ   r�   é   g333333Ó¿FrC   ç�íµ ÷Æ°>gê-�™—q=g     €L@é9   N)r|   r
   r+   Z
shift_timer…   r†   r   r   r   r   r1   r   rT   rS   Úintr\   r-   r.   r   )r‰   Útempdirru   r¥   Z
ave_bshiftZ
ave_fshiftÚ
ave_normalZave_relativeZave_absoluteÚshiftr1   Z
first_lastZ
ave_loadedr   r   r    Útest_shift_time_evoked  sN    












r±   c                  C   s6   t tdƒ} | jd | jkst‚| jd | jks2t‚dS )z?Test that the tmin and tmax attributes return the correct time.r   r?   N)r
   r+   r1   r$   r2   r&   )r7   r   r   r    Útest_tmin_tmax\  s    
r²   c           	      C   sx  t | ƒ}ttdƒ}|jd }|jd }|jd| dd� |jd |ksJt‚t |d¡}t||ƒ t|dƒ}ttdƒ}t|dƒ}|j|dd� |jd |ksžt‚t	|j
|j
dƒ t	|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|jƒdt|jƒ k�s t‚|j
jd d|j
jd  k�sBt‚| d	¡ |jd d
k�s`t‚|jd dk�stt‚dS )zTest resampling evoked data.r   r>   rC   r;   éd   )Znpadr‹   r%   é2   rh   g      9@N)r|   r
   r+   r\   Zresampler2   r…   r†   r   r   r   r1   r   rœ   rƒ   rˆ   rT   rS   rY   r0   )	r‰   r®   ru   Zorig_lpZsfreq_normalr¥   Zave_upr¯   Zave_newr   r   r    Útest_evoked_resamplec  s2    






"
rµ   c                  C   sp   t tdƒjdd�} d| jdd…< t| jd ƒdks6t‚|  ¡ jddd	d
�}|jd dks\t‚t	| jddd� dS )zTest filtering evoked data.r   Úgrad©rE   rf   Nr>   é¬   g      D@Zfirwin)Z
fir_designr«   rn   )
r
   r+   r	   r   Úroundr\   r2   rR   Úfilterr   )ru   Zave_filtr   r   r    Útest_evoked_filterŠ  s    r»   c                  C   sx   t tdƒ} t tdƒ}|  d¡ | jtj|jdd�dd…tjf 8  _t| jdddd�}t	| j| |j| dd	d
� dS )z Test for detrending evoked data.r   r%   rJ   NTr”   rD   rŽ   rm   rj   )
r
   r+   Zdetrendr   r-   r^   Únewaxisr	   r\   r   )ru   r¯   r"   r   r   r    Útest_evoked_detrend•  s    


( ÿr½   c               	   C   s–  t tdƒ} tjtdd�� | jddg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� W 5 Q R X | jdd�}d|j	ks t
‚d|jjks°t
‚|  ¡ }tt | j|j	¡ƒsÐt
‚| jdd�}d}t|ƒt|j	ƒksöt
‚t| jƒt|d ƒk�st
‚t|ƒ| jjk�s(t
‚~~| jdd�}|j	| jk ¡ �sNt
‚t|jdd…df | jd d ƒ t|jdd…df | jd d ƒ dS )zTest evoked Pandas exporter.r   z options. Valid index options arer'   ÚfooÚbar)rQ   z"qux" is not a valid optionZquxz#index must be `None` or a string ori�  ÚtimeT)Zlong_format)rÀ   ÚchannelÚch_typeÚvaluerÁ   Ng  @åœ0¢Br;   g  4&õkC)r
   r+   r4   r5   rp   Úto_data_framer6   r-   rV   Úcolumnsr2   rQ   Únamesr/   Zin1dr¤   ÚsetrY   r   r3   r   Úvalues)ru   ÚdfZdf_wideZdf_longÚexpectedr   r   r    Útest_to_data_frame   s,    
"rË   Útime_format©NÚmsÚ	timedeltac                 C   sR   ddl m} ttdƒ}|j| d�}tjtj|dœ}t|d j	d ||  ƒsNt
‚dS )z/Test time conversion in evoked Pandas exporter.r   )Ú	Timedelta)rÌ   rÍ   rÀ   N)ZpandasrÐ   r
   r+   rÄ   r-   Zfloat64Zint64Ú
isinstanceZilocr2   )rÌ   rÐ   ru   rÉ   Zdtypesr   r   r    Útest_to_data_frame_time_format¿  s
    
rÒ   c                     s2  dD ]ò‰ t tdˆ d�} t‡ fdd„| jd D ƒƒs6t‚ˆ rbt t| jg ddi¡ t t| j	d¡ qt
| jd ƒ}t| jd ƒ}|  	d¡ t| jd ƒ|d	 ks¢t‚| j|d
d� t| jd ƒ|ksÆt‚| j|dd… dd� t| jd ƒ|d	 kst‚qt tdd
d�} | j ¡ }|  ¡  tt | j|¡| jƒ dS )zTest SSP proj operations.)TFr   ©r‚   Úprojc                 3   s   | ]}|d  ˆ kV  qdS )ZactiveNr   )r   Úp©rÔ   r   r    r™   Ï  s     z#test_evoked_proj.<locals>.<genexpr>ÚprojsÚremove_existingTr%   F)rØ   Nr?   )r
   r+   r/   r\   r2   r4   r5   rp   Zadd_projÚdel_projr   rY   r   rR   Z
apply_projr   r-   ÚdotZ
_projector)ru   r×   Zn_projr   r   rÖ   r    Útest_evoked_projË  s(     ÿ

rÛ   c               	   C   sÔ  t tddd�} tjtdd�� | jd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dd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ddd� W 5 Q R X tjtdd�� | jddd� W 5 Q R X | jdd�\}}|| jk�s t‚|| j	k�s0t‚| jdddd�\}}}|t
| j	ƒk �sZt‚t|dƒ t|ddd� tjtdd�� | jddd� W 5 Q R X tjtdd�� | jddd d!� W 5 Q R X | jddd�\}}t|d"ƒ t d#d$d%gd#d&dgg¡}t d'd(d)g¡}t||d*d+�\}}}t|dƒ t|dƒ t|d&ƒ t|d, |d d+�\}}}t|dƒ t|d-ƒ t|d.ƒ t||d/d+�\}}}t|dƒ t|d-ƒ t|d%ƒ |  ¡  dd'¡ d0¡}|  ¡  dd'¡ d0¡}t |j¡|_t |j¡ |_tjtd1d�� |jd d+� W 5 Q R X tjtd2d�� |jd/d+� W 5 Q R X | ¡ }	d3}
|	 |
¡d }|	jdd…|d…f  d,9  < tjtd2d��" |	jd/|
d|	jd4   d5� W 5 Q R X tjtd1d�� |	jd |
d6� W 5 Q R X dS )7zTest peak getter.r   TrÓ   ztmin.*must be <= tmaxr'   Úmagr%   )rÂ   r$   ztmax.*is out of boundsgÍÌÌÌÌÌì?)rÂ   r&   g{®Gáz”?ri   )rÂ   r$   r&   zInvalid.*'mode' parameterr¾   )rÂ   ÚmodezMultiple data channel typesNzChannel type.*not foundÚmisc)rÂ   )rÂ   Útime_as_indexZreturn_amplitudezMEG 1421gmãÞ¬:i=gñhãˆµøä>)rk   zmust be "grad" for merge_grads)rÂ   Úmerge_gradsz"Negative mode.*does not make senser¶   Úneg)rÂ   rà   rÝ   zMEG 244XrA   rf   rg   g      ÀrB   r©   g333333Ó?rU   )rÝ   r?   r;   g       ÀÚposzEEG 001zNo negative valueszNo positive valuesgš™™™™™©?rC   )rÝ   r&   )rÝ   r$   )r
   r+   r4   r5   rp   Zget_peakÚRuntimeErrorr¤   r2   r1   rY   r   r   r-   r.   r   rR   ÚcropÚpickrU   r   rß   r\   )r7   Zch_nameZtime_idxZmax_ampr   r1   Zch_idxZevoked_all_posZevoked_all_negZevoked_neg_and_posZtime_sep_neg_and_posZidx_time_sep_neg_and_posr   r   r    Útest_get_peakç  sˆ    þ

ÿ








ÿþýræ   c                  C   sæ   t tddd�} | jdd… }| jdd… }| j}|  ¡  |¡}t||jƒ t|| jƒ tt|ƒt| jƒƒ |  ¡  |d g¡}t|j|dd… ƒ |  |¡ t|| jƒ tt|ƒt| jƒƒ ddgddgfD ]}t 	t
| j|¡ qÌdS )	z%Test channels-dropping functionality.r   TrÓ   Nr<   r%   r;   Zfake)r
   r+   r¤   rR   Údrop_channelsr   rY   r   r4   r5   rp   )r7   Zdrop_chr¤   Úch_names_origÚdummyZdummy2r   r   r    Útest_drop_channels_mixinG  s    
rê   c                  C   sè   t tddd�} | jdd… }| j}|  ¡  |¡}t||jƒ t|| jƒ tt|ƒt| jƒƒ |  |¡ t|| jƒ tt|ƒt| jƒƒ t tddd�} d| ks t‚d| ks¬t‚| j	ddd	� d| ksÆt‚d| ksÒt‚t| jƒd
ksät‚dS )z#Test channel-picking functionality.r   TrÓ   Nr<   rE   r   F©rE   r   é<   )
r
   r+   r¤   rR   Úpick_channelsr   rY   r   r2   r	   )r7   r¤   rè   ré   r   r   r    Útest_pick_channels_mixin]  s"    
rî   c                  C   sv   t tddd�} |  ¡ }| jdd… }|  | jdd… ¡ | |jdd… ¡ | |g}t|ƒ}|D ]}t||jƒ q`dS )zTest equalization of channels.r   TrÓ   r;   Nr%   )r
   r+   rR   r¤   rç   r   r   )Úevoked1Úevoked2r¤   Zmy_comparisonÚer   r   r    Útest_equalize_channelsu  s    rò   c               	   C   s$  t tdd�} tt | j¡| j| jd dd�}tt | j¡| j| jd dd�}tddd�}t	| | gdd	gd
�}t	| |  gddgd
�}tj
|jt |j¡dd�s t‚tj
|jt |j¡dd�s¾t‚t	||gdd
�} t 
| j|j|j ¡sèt‚tj
| jt | j¡f|Ž�st‚t	||gddgd
�} t 
| jd¡�s0t‚tj
| j|j|j f|Ž�sPt‚t	||gdd
�} t 
| jd¡�stt‚tj
| jtj|j|jgdd�f|Ž�sžt‚t	||gddgd
�} | j|jk�sÄt‚tj
| j|jf|Ž�sÞt‚|j}d|_t	|| gdd	gd
�} t| j d¡dƒ | jdk�s"t‚||_tjtdd�� t	||gdd
� W 5 Q R X tjtdd�� t	||gdgd
� W 5 Q R X t tddgdd�\}}|jdd… }	dg|jd< | |jdd… ¡ | |jdd… ¡ t||gƒ}
t|
jjt|	ƒ|jjd gƒ t|	|
jƒ t|
jdƒ tjtdd�� td|gƒ W 5 Q R X t||| gƒ}
t|
jt |
jd¡ƒ t tddgdd�\}}|j}|j|j d  }| |jddd	… ¡ t 
||j¡�rºt‚tjtd!d�� t	||gd"d"gd
�}W 5 Q R X t 
|j|¡�süt‚|j|jk�st‚|j|jk�s t‚dS )#zTest evoked arithmetic.r   r�   r:   )rœ   é   g•Ö&è.>rj   r%   r?   )Úweightsg#B’¡œÇ;rn   rœ   g      (@Úequalg      H@rJ   NÚunknownr;   zunknown + unknownzInvalid value for the 'weights'r'   r¾   z weights must be the same size asTrÓ   zEEG 008r”   z#All elements must be an instance ofgUUUUUUÕ?rg   Z
reorderingrH   ) r
   r+   r   r-   Ú	ones_liker   r\   r1   Údictr   r�   Ú
zeros_liker2   rœ   r^   r›   r   Úcountr4   r5   rp   r¤   rç   r   r0   rY   r6   r   Z	full_likeZreorder_channelsr¢   r£   )ra   Zev20Zev30ZtolZsub1Zsub2Zold_comment1rï   rð   r¤   ZgaveÚdata2r   Úevoked3r   r   r    Útest_arithmetic‚  sj        *rý   c              	   C   sð  t | ƒ}tj d¡}| dd¡}d}dd„ tdƒD ƒ}dgd }t|||ƒ}t||dd	�}t 	|d
¡}	| 
|	¡ t|	ƒd }
|
j}t||ƒ t|j|
jdƒ t|j|
jƒ t|j|
jƒ t|j|
jƒ t|j|
jƒ |tjdd…dd…f }tjd }t|||dd� ¡ }t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ tjtdd�� t||ddd� W 5 Q R X tjtdd�� t||dd� W 5 Q R X dd„ tdƒD ƒ}dgd }t|||ƒ}tjtt||dd	� dS )z Test creating evoked from array.é*   r:   rì   ç     @�@c                 S   s   g | ]}d |d  ‘qS ©zEEG %03dr%   r   r   r   r   r    r!   Ó  s     z%test_array_epochs.<locals>.<listcomp>r   g{®Gáz„¿r#   zevkdary-ave.fifr   rª   N)r9   r   r%   )rc   r$   zInvalid valuer'   r%   )r$   rˆ   r^   r�   c                 S   s   g | ]}d |d  ‘qS r   r   r   r   r   r    r!   ö  s     r‘   )r|   r-   rK   rL   rM   Úranger   r   r…   r†   r‡   r
   r   r   r   r1   r   rS   rT   rˆ   rœ   r¼   Zc_r   r]   r4   r5   rp   )r‰   r®   r_   Zdata1rC   r¤   Útypesr\   rï   Ú	tmp_fnamerð   rû   Zdata3rc   rü   r   r   r    Útest_array_epochsË  sF    




r  c               	   C   sò   d\} }t tdd� | |¡}d|jd  }d| }t|jddg | |g|d� t|jd	d
gdd�dt|jƒd gƒ |j|j	|j
dd� t|jƒ}tjtdd�� |j| |dd� W 5 Q R X t|jƒ|ksÎt‚t|jddg | || g|d� dS )z Test time as index and cropping.)r§   rB   r   r�   rf   rC   rH   r?   rn   r§   rB   T)Zuse_roundingr%   F)Zinclude_tmaxztmax is set tor'   N)r
   r+   rä   r\   r   r1   r   rß   rY   r$   r&   r4   r¢   r£   r2   )r$   r&   r7   Údeltarl   r`   r   r   r    Útest_time_as_index_and_cropü  s    ÿ
r  c               	      s´  t tdd�} dg idt ddddg¡idt ddddg¡ig}| j ¡ � t|dd�| jd< W 5 Q R X |  ¡ jd	d
d�}|  ¡ jd
d�}|  ¡ jd	d
d�}|  ¡ jd
d
d�}| ¡  	||g¡‰ t
‡ fdd„|j|j D ƒƒsàt‚| ¡  	|g¡‰ ‡ fdd„| jD ƒ�s
t‚tˆ j|jƒ t
‡ fdd„|jD ƒƒ�s6t‚| ¡ }|j ¡ � d|jd< W 5 Q R X | dd¡}t t|j	|g¡ t t|j	|g¡ t t|j	|g¡ t t|j	|¡ dS )z3Test evoked splitting / re-appending channel types.r   r�   Z
event_bitsé   i   r;   )Ú	hpi_coilsZncoilZhpi_subsystemFTrë   r·   )rE   Zstimc                 3   s   | ]}|ˆ j kV  qd S ©N©r¤   ©r   Úch©Z
evoked_newr   r    r™     s   ÿz$test_add_channels.<locals>.<genexpr>c                 3   s   | ]}|ˆ j kV  qd S r	  r
  r  r  r   r    r™     s     c                 3   s   | ]}|ˆ j kV  qd S r	  r
  r  r  r   r    r™      s   ÿg—Ñ~Zû!	@rC   r§   rB   N)r
   r+   r-   r.   r\   rN   rø   rR   r	   Zadd_channelsr/   r¤   r2   r   r   rä   r4   r5   rã   rp   r6   )r7   r  Z
evoked_eegZ
evoked_megZevoked_stimZevoked_eeg_megZevoked_badsfr   r  r    Útest_add_channels  s:    þ
ÿÿr  c              	   C   sŽ  t tddd�}tt |j¡|j|jd ƒ}|jdks8t	‚tt |j¡|j|jd dd�}t
|j|jdfƒ ~d}| |¡ t
|j|j|jfƒ t
|jt |j¡ƒ d}| |¡ t
|j|jdfƒ t tdd�}|jdksÜt	‚d}t td|d�}t
|j|ƒ t tdd�}d}| |¡ t
|j|ƒ | d	 }| |¡ t |dd�}t
|j|jƒ t tdd�}d}| |¡ tjtd
d�� | d¡ W 5 Q R X dS )zTest evoked baseline.r   N)r‚   Úbaseline)Nr   )r  )NNr�   )rG   r§   r   zalready been baseline-correctedr'   )r
   r+   r   r-   r÷   r   r\   r1   r  r2   r   r$   Zapply_baseliner&   rù   r‡   r4   r5   rp   )r‰   r7   Zevoked_baselinedr  r  Zevoked_readr   r   r    Útest_evoked_baseline/  sH    ÿ ÿ




r  c               	   C   s  t tƒ ¡ } |  ¡  |  | jdd… ¡ ttƒ}t| |ƒ}t	j
tdd�� | ¡  W 5 Q R X | ¡  | ¡ }|  ¡ }| ¡ }| ¡  ¡ }| ¡  d¡}t|j|ƒ t||ƒ ¡ }t t |j ¡ ¡t |j ¡ ¡¡d }	d|	  k rìdk sòn t‚|jd	d
�}
t|
jt |j¡ƒ dS )z(Test hilbert on raw, epochs, and evoked.Nr;   zrequires epochs data to be loadr'   r   rI   g¸…ëQ¸î?g\�Âõ(\ï?T)Úenvelope)r   rZ   Z	load_datarÙ   rí   r¤   r   r[   r   r4   r5   rã   Zapply_hilbertr]   rR   r,   r^   r   r   r-   ZcorrcoefrU   Zravelr2   )rb   rc   rd   r7   Zraw_hilbZepochs_hilbZevoked_hilbZevoked_hilb_2_dataZevoked_hilb_3ZcorrZevoked_hilb_envr   r   r    Útest_hilberth  s.    
ÿÿr  c                  C   s‚   t j dd¡} tdddƒ}t| |ƒ}|j ¡ }dd„ }d}|j|d|d	�}t  |j¡t  |¡ksdt	‚t  
|j|| ¡ ¡ s~t	‚dS )
z0Check the apply_function method for evoked data.r9   iè  rÿ   r   c                 S   s   | | S r	  r   )r   Ú
multiplierr   r   r    Úfun‹  s    z$test_apply_function_evk.<locals>.funr?   N)Zn_jobsr  )r-   rK   Zrandr   r   r   rR   Zapply_functionr0   r2   rõ   r/   )r   r\   r7   Zevoked_datar  ZmultZappliedr   r   r    Útest_apply_function_evk‚  s    

r  )JrR   r   Úos.pathÚpathr…   rs   Únumpyr-   Zscipyr   Znumpy.testingr   r   r   r   r4   Zmner   r	   r
   r   r   r   r   r   r   Z
mne.evokedr   r   r   Zmne.ior   Zmne.io.constantsr   Z	mne.utilsr   r   r†   ÚdirnameÚ__file__Úbase_dirr+   rž   rZ   r[   r8   re   rq   rw   r   ÚmarkZparametrizerŠ   Zslowtestr¦   r±   r²   rµ   r»   r½   rË   rÒ   rÛ   ræ   rê   rî   rò   rý   r  r  r  r  r  r  r   r   r   r    Ú<module>   s^   ,'?


[='

`I1"9