U
    f»{jœ ã                   @   sL  d dl m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 d dlZd dlZd dlmZmZmZmZmZ d dlZd dlmZmZ d dl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) d d	l*m+Z+ d d
l,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@ d dlAmBZB d dlCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZM d dlNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZV e/jWdd�ZWe XeWddd¡ZYe XeWdd¡ZZe XeWdd¡Z[e XeWdd¡Z\e Xe ]e^¡ddd d!¡Z_e Xe_d"¡Z`e Xe_d#¡Zae Xe_d$¡Zbd%\ZcZdZee fd&¡Zgejh id'¡Zjd(d)„ Zkd*d+„ Zld,d-„ Zm�dd.d/„Zneod0d1d2d3d4�Zpeod5d5d6�Zqd7d8„ Zrd9d:„ Zsejtjue/jvd;d<„ ƒƒZwd=d>„ Zxd?d@„ ZydAdB„ ZzdCdD„ Z{dEdF„ Z|dGdH„ Z}dIdJ„ Z~dKdL„ ZdMdN„ Z€dOdP„ Z�dQdR„ Z‚dSdT„ Zƒejt „dUdV¡dWdX„ ƒZ…dYdZ„ Z†d[d\„ Z‡d]d^„ Zˆd_d`„ Z‰dadb„ ZŠejt „dcej‹ddejtjude�ej‹dfejtjude�dg¡dgdh„ ƒZŒejtjuejt „dUdi¡djdk„ ƒƒZ�ejt „dldmdng¡ejt „dodej‹ddejtjŽeUdpƒ dqdr�de�g¡ejt „dsdi¡dtdu„ ƒƒƒZ�ejtjudvdw„ ƒZ�dxdy„ Z‘dzd{„ Z’d|d}„ Z“d~d„ Z”d€d�„ Z•d‚dƒ„ Z–d„d…„ Z—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jt „dUdV¡d–d—„ ƒZ d˜d™„ Z¡dšd›„ Z¢dœd�„ Z£ejtjueOdždŸ„ ƒƒZ¤eOejt „d d¡d¢d¡d£gd£d¡gd¡d£gdf¡d¤d¥„ ƒƒZ¥eOejt „d¦d§¡d¨d©„ ƒƒZ¦dªd«„ Z§d¬d­„ Z¨d®d¯„ Z©ejt „dUdV¡d°d±„ ƒZª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jtjudÂdÃ„ ƒZ³dÄdÅ„ Z´dÆdÇ„ ZµdÈdÉ„ Z¶eOdÊdË„ ƒZ·dÌdÍ„ Z¸ejt „dÎdÏd&dÐdÑdÒdÓœdddfdÏd&dÔœdddfeoƒ dddfdÏd&dÐdÑdÒdÓœdÕdÖd×fg¡eOdØdÙ„ ƒƒZ¹dÚdÛ„ ZºdÜdÝ„ Z»ejt „dUdV¡ejt „dÞdV¡ejt „dßdàdág¡dâdã„ ƒƒƒZ¼dädå„ Z½dædç„ Z¾dèdé„ Z¿dêdë„ ZÀejt „dìdV¡dídî„ ƒZÁejt „dUdV¡dïdð„ ƒZÂe/jvejt „dUdV¡ejt „dñeYe`f¡dòdó„ ƒƒƒZÃejt „dôdõ¡ejt „dUdV¡död÷„ ƒƒZÄejt „dUdV¡dødù„ ƒZÅdúdû„ ZÆe/jvdüdý„ ƒZÇdþdÿ„ ZÈ�d �d„ ZÉ�d�d„ ZÊ�d�d„ ZË�d�d„ ZÌ�d�d	„ ZÍe/jv�d
�d„ ƒZÎeOejt „�dd �dg¡ejt „�dddgejÏdgejÏedÏ�d�gg¡�d�d„ ƒƒƒZÐ�d�d„ ZÑejt „�d�d¡ejt „�d�d¡ejt „�d�d¡�d�d„ ƒƒƒZÒeO�d�d„ ƒZÓdS (  é    )Údeepcopy)Ú	timedelta)Úpartial)ÚBytesION)Úassert_array_equalÚassert_array_almost_equalÚassert_allcloseÚassert_equalÚassert_array_less)ÚrfftÚrfftfreq)ÚEpochsÚAnnotationsÚread_eventsÚpick_eventsÚread_epochsÚequalize_channelsÚ
pick_typesÚpick_channelsÚread_evokedsÚwrite_evokedsÚcreate_infoÚmake_fixed_length_eventsÚmake_fixed_length_epochsÚcombine_evoked)Ú_handle_meas_date)Úrescale)Útesting)Úread_head_posÚhead_pos_to_trans_rot_t)Úmerge_events)ÚRawArrayÚread_raw_fif)ÚFIFF)Ú_has_eeg_average_ref_proj)Ú	write_intÚ	INT32_MAXÚ_get_split_sizeÚwrite_float)Úmaxwell_filter)
Ú	bootstrapÚequalize_epoch_countsÚcombine_event_idsÚadd_channels_epochsÚEpochsArrayÚconcatenate_epochsÚ
BaseEpochsÚaverage_movementsÚ_handle_event_repeatedÚmake_metadata)Úrequires_pandasÚobject_diffÚuse_log_levelÚcatch_loggingÚ_FakeNoPandasÚassert_meg_snrÚcheck_versionÚ_dt_to_stampF)ÚdownloadZMEGÚsamplezsample_audvis_trunc_raw.fifZSSSztest_move_anon_raw.fifz#test_move_anon_movecomp_raw_sss.fifztest_move_anon_raw.posz..ÚioÚtestsÚdataztest_raw.fifztest-eve.fifztest-nf-ave.fif)é   çš™™™™™É¿ç      à?é   é*   c                  C   s¦   t  dd¡} d}tdgdg|d�}t| |ƒ}tjdtd�}t d	d
dg¡|  t¡|dd…df< ddddddddg}t	t
|Ž Ž }| |¡ t||dddd�}|||fS )z/Create test dataset of Epochs with Annotations.rA   éX  ç      Y@ÚMEG1Úgrad©Úch_namesÚch_typesÚsfreq)é   rN   ©ÚdtyperC   ç      @g      @Nr   )ç333333Ó?ç        Ú
no_overlap)çš™™™™™Ù?çš™™™™™¹?Úcoincident_onset)rU   çš™™™™™É?Ústraddles_onset)gffffffö?rX   Ústraddles_offset)ç      ø?rS   Úcoincident_offset)çÍÌÌÌÌÌ@rS   Úwithin_epoch)gš™™™™™@ç333333ó?Úsurround_epoch)g333333@r_   Úmultiple©ÚeventsÚtminÚtmaxÚbaseline)ÚrngÚrandnr   r!   ÚnpÚzerosÚintÚarrayÚastyper   ÚzipÚset_annotationsr   )r@   rM   ÚinfoÚrawrc   ZannotsÚepochs© rs   úT/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/tests/test_epochs.pyÚ_create_epochs_with_annotations@   s&    
&ù
ru   c                  C   sº   d} d}dd„ t |ƒD ƒ}tj|dd�}t || f¡}tj ||¡}t ddd	gdddgg¡}tj||d
d�}|j	dks|t
‚t|jdgƒ tj||dd�}|j	dks¨t
‚t|jdgƒ dS )z/Test epochs takes into account repeated events.éd   rD   c                 S   s   g | ]}d | ‘qS )zchan%irs   ©Ú.0Úirs   rs   rt   Ú
<listcomp>`   s     z'test_event_repeated.<locals>.<listcomp>ç     @�@)rK   rM   é
   r   rA   Údrop)Úevent_repeated)rs   ©zDROP DUPLICATEÚmerge)rs   ©zMERGE DUPLICATEN)ÚrangeÚmner   ri   rj   r>   r!   rl   r   Údrop_logÚAssertionErrorr   Ú	selection)Z	n_samplesÚ
n_channelsrK   rp   r@   rq   rc   rr   rs   rs   rt   Útest_event_repeated\   s    rˆ   c                     s   ddddœ} t  dddgdddgdddgdddgdddgdddgdddgdddgg¡}t  t|ƒ¡}dt|ƒ }tjtd	d
�� t|| d||d� W 5 Q R X t|| d||ƒ\}}}‰ t|dddgdddgdddgdddggƒ t||| ƒ t  	||¡}t
‡ fdd„|D ƒƒ�st‚|dddœk�s(t‚t|| d||ƒ\}}}‰ t|d d |d d ƒ t|dddgdddgdddgdddggƒ t|dd…dd…f || dd…dd…f ƒ t  	||¡}t
‡ fdd„|D ƒƒ�sÚt‚t| ¡ ƒtdddgƒk�sút‚|d dk�st‚t  dddgdddgg¡}t|| dddg|ƒ\}}}‰ || k�sPt‚t|ddgƒ ˆ |k�slt‚t||ƒ ~t  dddgdddgg¡}	t|	| dddgt|ƒƒ\}}}‰ t| ¡ ƒtdgƒk�sÎt‚|d dk�sàt‚t|dgƒ ˆ d dk�sþt‚t|t  dddgg¡ƒ ~	t  dddgdddgdddgdddgg¡}
t|
| dddddgt|ƒƒ\}}}‰ t| ¡ ƒtdddgƒk�s†t‚t|t  dddgdddgdddgg¡ƒ t|dddgƒ ˆ d dk�sÐt‚~
t  dddgdddgg¡}t|| dddgt|ƒƒ\}}}‰ t|t  dddgg¡ƒ t|dgƒ ˆ d dk�sBt‚t| ¡ ƒtdgƒk�s^t‚dD ]˜\}}t  dt¡}||dd…df< dd „ |dd…df D ƒ}t  t|ƒ¡}d!d"„ tt|ƒƒD ƒ‰ t||d|ˆ ƒ\}}}‰ t  dd|gg¡}t||ƒ �qbdS )#z!Test handling of repeated events.rA   rD   rN   )ÚaudÚvisÚfoor   é   é   ©rs   z Event time samples were not uniq©ÚmatchÚerror)r~   r†   r„   r}   c                 3   s   | ]}ˆ | d kV  qdS )r   Nrs   ©rx   Úk©r„   rs   rt   Ú	<genexpr>‚   s     z-test_handle_event_repeated.<locals>.<genexpr>)r‰   rŠ   r€   éÿÿÿÿé   Nc                 3   s   | ]}ˆ | d kV  qdS )r�   Nrs   r’   r”   rs   rt   r•   ‹   s     r‰   zaud/viszaud/foo/visÚnor�   éc   rŠ   ))©rA   rN   rD   )©rD   rN   rA   )©rA   rD   rN   r›   c                 S   s   i | ]}t |ƒ|“qS rs   ©Ústr)rx   Úvrs   rs   rt   Ú
<dictcomp>À   s      z.test_handle_event_repeated.<locals>.<dictcomp>c                 S   s   g | ]
}t ƒ ‘qS rs   )Útuple©rx   Ú_rs   rs   rt   rz   Â   s     z.test_handle_event_repeated.<locals>.<listcomp>)ri   rl   ÚarangeÚlenÚpytestÚraisesÚRuntimeErrorr2   r   Ú	setdiff1dÚallr…   ÚsetÚkeysr   rj   rk   r‚   )ZEVENT_IDZEVENTSZ	SELECTIONZDROP_LOGrc   Úevent_idr†   ZunselectionZfine_eventsZheterogeneous_eventsZhomogeneous_eventsZequal_eventsÚvalsÚwantrs   r”   rt   Útest_handle_event_repeatedn   sà       ýþ    ÿ*    ÿ*.     ÿ
    ÿ ÿ   
þ (    ÿ    ÿr°   c              
   C   s<   t t| dd�}ttƒ}t|jddddddgdd�}|||fS )z	Get data.Úwarning)ÚpreloadÚverboseTzSTI 014Úbads)ÚmegÚeegÚstimÚecgÚeogÚincludeÚexclude)r"   Ú	raw_fnamer   Ú
event_namer   rp   )r²   rq   rc   Úpicksrs   rs   rt   Ú	_get_dataÉ   s      þr¿   g•Ö&è.>çê-�™—‘=çñhãˆµø?ça2U0*©#?©rI   Úmagr¶   r¹   çVçž¯Ò<©rI   rÄ   c               	   C   s  t ƒ \} }}dddddœ}t| ||dd�}|jdd	d
�}|jddd
�}t||ƒ tjtdd�� |jddd
� W 5 Q R X tjtdd�� |jddgdd
� W 5 Q R X |jdddgddid�}|jd dksÎt‚t	 
dd„ | ¡ D ƒ¡}t	 
dd„ | ¡ D ƒ¡}	t|d	d	…|d	d	…f |jddddgd�d ƒ t|d	d	…|	d	d	…f |jddddg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 d	S ) zTest the .get_data() method.rA   rD   rN   r—   ©úa/1úa/2úb/1úb/2T©r²   r¶   N)r¾   ÚunitsÚVzis not a valid unit for eegr�   Ú zcannot be str if there is morerµ   rI   zfT/cm)ÚitemrÍ   r   c                 S   s   g | ]}|d k‘qS ©rI   rs   rw   rs   rs   rt   rz   î   s     z!test_get_data.<locals>.<listcomp>c                 S   s   g | ]}|d k‘qS ©r¶   rs   rw   rs   rs   rt   rz   ï   s     ©rÐ   ç  @åœ0¢B©rd   r–   ©rd   re   ztmin .* float, Noneztmax .* float, NonerŒ   )r¿   r   Úget_datar   r¦   r§   Ú
ValueErrorÚshaper…   ri   rl   Úget_channel_typesrª   Ú_dataZnonzeroÚtimesÚsizeÚ	TypeErrorÚones)rq   rc   r¾   r­   rr   Úd1Úd2Zd3Z	grad_idxsZeeg_idxsr@   rs   rs   rt   Útest_get_data×   sB    
þþ
ÿÿrâ   c                  C   s  t ƒ \} }}dddddœ}t| ||dd�}|d }|d	 }|d
 }|d }|d }	tt|	ƒt|ƒt|ƒ ƒ |d }
tt|
ƒt|ƒt|ƒ ƒ |d }tt|ƒt|ƒt|ƒ ƒ |d }tt|ƒt|ƒt|ƒ ƒ |d }tt|ƒt|ƒƒ t| ¡ | ¡ ƒ dS )zTest hierarchical access.rA   rD   rN   r—   rÇ   TrÌ   rÈ   rÉ   rÊ   rË   ÚaÚbÚ1Ú2©rå   ræ   N)r¿   r   r	   r¥   r   r×   )rq   rc   r¾   r­   rr   Z	epochs_a1Z	epochs_a2Z	epochs_b1Z	epochs_b2Zepochs_aZepochs_bÚepochs_1Úepochs_2Z
epochs_allrs   rs   rt   Útest_hierarchical  s$    rê   c               
   C   sº  d} d}t tdd�}|jd  dg7  < |j| Ž  ¡  |jddd	d
� t|tƒ}t|jddddddd�}t	||tt
t|ddd�}t	||dd… tt
t|ddd�}t||ddd�}~t	||tt
t|dd�}| ¡ }	~~ttƒ}
|jd d }t |dd…df g¡t |dd…dd…f g¡t dg¡f}t tt|d¡ t||
d|d�}t||
d|d�}t||d|d�}| ¡ }|||fD ](}t|j|jƒ tt|jd ƒdƒ �qz||fD ](}t||ddƒ t tt||dd¡ �q¬t|jddd�}t|j| |j| dd� t tƒ}|j| Ž  ¡  |jddd	d
� t|jddddddd�}t||ƒ t	||tt
t|dd�}| ¡ }t|j|jƒ t tt||dd¡ t||dd ƒ t||d!d"ƒ t|	j|jdd� t|jd ƒ}t |
d ƒ}|d |jd d dd…dd…f< |d |jd d dd…df< t tt|jd d |d ¡ t||
d#d… ||d$�}t|j|jdd� t|jd d |d ƒ |d% |d&< tjt!t||
||d'� tjttd(|
d)� tjt!t||
d)� dS )*z"Test movement averaging algorithm.)rS   ç      $@)rS   rS   g{®Gáz¤?Úyes)Zallow_maxshieldr´   ZMEG2443Né   Zfirwin)Z
fir_designTrs   )rµ   r¶   r·   r¸   r¹   r»   F©r¾   Úprojr²   rA   Úignore)ÚoriginZ
regularizeZbad_condition©r¾   rï   Ú
dev_head_tÚtransrN   rS   )Úhead_posZ
weight_allrñ   r   rV   ç      ð?©rµ   r»   ç#B’¡œÇ;©Úatolg{®Gáz”?r]   çš™™™™™©?gš™™™™™	@rD   )rõ   rñ   ÚdestinationÚfromÚto)rñ   rü   r‹   )rõ   )"r"   Úfname_raw_moverp   ÚcropÚ	load_dataÚfilterr   r­   r   r   rd   re   r)   Úaverager   Úfname_raw_move_posri   rl   r¦   r§   rÞ   r1   r	   Únaver¥   r9   r…   r   r@   Úfname_raw_movecomp_sssr   r   r   r¨   )r   rñ   rq   rc   r¾   rr   Úepochs_projZraw_sss_statZepochs_sss_statZevoked_sss_statrõ   rô   Zhead_pos_statZevoked_move_nonZevoked_move_allZevoked_stat_allZ
evoked_stdÚevZ	meg_picksZraw_sssZ	picks_sssZ
epochs_sssZ
evoked_sssrü   ÚxZevoked_missrs   rs   rt   Útest_average_movements  sè    
  ÿÿ ÿÿ ÿ
þ ÿ ÿ ÿ   ÿ
 ÿ  ÿ
 ÿ   ÿ"þ ÿ
ÿÿ ÿ
ÿr
  c                 C   sN   d}t | tƒstdƒ‚tdd„ | D ƒƒs0tdƒ‚tdd„ | D ƒƒsJtdƒ‚d S )NTzdrop_log should be tuplec                 s   s   | ]}t |tƒV  qd S ©N)Ú
isinstancer¡   ©rx   Úlogrs   rs   rt   r•     s     z)_assert_drop_log_types.<locals>.<genexpr>zdrop_log[ii] should be tuplec                 s   s"   | ]}|D ]}t |tƒV  q
qd S r  )r  rž   )rx   r  Úsrs   rs   rt   r•   �  s       zdrop_log[ii][jj] should be str)r  r¡   r…   rª   )r„   Ú__tracebackhide__rs   rs   rt   Ú_assert_drop_log_types|  s    ÿÿr  c                     sz  t ƒ \‰ } }ˆ jddd… }d|ks(t‚ˆ  |¡ ¡  dˆ ksBt‚ˆ j ¡  t t	ˆ jƒ¡}| | dd…df t
kdd…f } t	| ƒdksŒt‚t d¡}d}t|ƒ t ttˆ ¡ tˆ jd	d
d�}tjttˆ | t
tt|d
dd�
 tjttˆ | t
tt|d
tdd�d�
 tˆ | t
tt|d
ttjd�d� dD ]@}dD ]4}tjttˆ | t
ttf|d
dœ|t|d�i—Ž �q.�q&tjttˆ | t
tt|d
tdd�d�
 tƒ }	dddg}
dD �]Ò}dD �]>}tˆ | t
tt||d�}t|jƒ tjt|jdd� | ¡  tt	|ƒt	| ƒƒ t|jt t	| ƒ¡ƒ |jdk�s"t‚||	k�r8| ¡ |	|< t| ¡ |	| ƒ tˆ | t
tt|t|d�}t|jƒ | ¡  t|jƒ tt	|ƒt	| ƒd ƒ t|j|ƒ |j|k�s°t‚t| ¡ |	| |
 ƒ tˆ | t
tt||d�}| ¡  tt	|ƒt	| ƒƒ t| ¡ |	| ƒ | t¡ tt	|ƒt	| ƒd ƒ tt	|ƒt	| ¡ ƒƒ t|j|ƒ |j|k�sZt‚t| ¡ |	| |
 ƒ tdddd d!�}tˆ | t
tt|||d�}| ¡  tt	|ƒt	| ƒd ƒ | t¡ tt	|ƒt	| ƒd ƒ t|j|ƒ |j|k�sòt‚t| ¡ |	| |
 ƒ t t|j|¡ tt	|ƒt	| ƒd ƒ t| ¡ |	| |
 ƒ |jtdd"�d#� tt	|ƒdƒ tjt|jtd$d"�d#� tdddd d!�}tˆ | t
tt|d|d�}|dd%… }|jtd� tt	|ƒt	| ƒd ƒ t| ¡ |	| |
 ƒ �qªˆ jd& ‰‡ ‡fd'd(„| ddd… dd… D ƒ}|d t d) |d< |d t d* |d< tˆ jd+ ƒ}|d |d d,  ˆ jˆ  }d|fD ]š}t |d-d-d-gd.|ƒ}ˆ  !|¡ tˆ | t
ttdgd|d�}| ¡  tt	| ƒd t	|j"ƒƒ t|jd d d.ƒ t|jd d d.ƒ t|jd d d.ƒ �qxˆ  !d¡ tˆ | t
ttdgddd
ddd/�}t#ƒ �}|jd0d1� W 5 Q R X | $¡ }d2|k�s t‚�q dS )3zTest epochs rejection.NrŒ   úMEG 2443r¹   rD   r�   rN   ©rs   rs   rs   ©r  r  r  r  TF©rµ   r¶   r‹   )r¾   r²   Úrejectrö   rÒ   )Nr–   ©r  Úflat©r¾   r²   rÑ   )r‹   r   rA   ©TF©TFÚdelayed©r  )rs   rs   rs   rs   rs   rs   rs   ©r¾   r  r²   r—   gpRÄåÙå>rÀ   rÁ   rÂ   rÃ   )rÄ   ©r  rS   r–   rM   c                    s   g | ]}|d  ˆ j  ˆ ‘qS ©r   ©Ú
first_samp)rx   Úevent©rq   rM   rs   rt   rz   î  s     ztest_reject.<locals>.<listcomp>gV-²�ïß?çü©ñÒMbP?Ú	meas_dateg�íµ ÷Æ°>rC   ÚBAD)r¾   r  r  Úreject_by_annotationÚreject_tminÚreject_tmaxÚdebug©r³   z	is a noop)%r¿   rK   r…   Úpickr  rp   Únormalize_projri   r¤   r¥   r­   r  r¦   r§   rÞ   r   r   rd   re   rØ   ÚdictÚinfÚKeyErrorr„   Údrop_badr	   r   r†   r×   r  r;   r"  r   ro   rc   r7   Úgetvalue)rc   r£   Únamesr¾   r†   r„   Ú	picks_megÚvalÚkwargZdata_7Zkeep_idxr²   rï   rr   Zreject_partZonsetsZstampZ
first_timeÚ	orig_timeÚannotr  rs   r$  rt   Útest_reject…  s    
 
  ÿ  ÿ 
ÿ ÿ ÿþ  ÿ


ÿ

 ÿ

ÿ
 ÿ

ÿ ÿ
ÿ
 ÿ
   þr:  c               	   C   sæ   t jdgddd�} t jjt t ddd¡¡| d�}t d	dd
gg¡}| t  	d
dd¡¡ t j
||dd
ddd�}t|ƒdks~t‚t j
||dd
dddd�}t|ƒd
ks¦t‚| t  	ddd¡¡ t j
||dd
dddd�}t|ƒd
ksât‚dS )zDTest reject_by_annotations with reject_tmin and reject_tmax defined.Ztest_aéè  r¶   ©rK   rM   rL   r   r|   r%  )rp   éÐ  rA   rC   r'  r–   T)rd   re   r²   r(  rB   )rd   re   r)  r²   r(  rQ   rU   )rd   re   r*  r²   r(  N)rƒ   r   r>   r!   ri   Z
atleast_2dr¤   rl   ro   r   r   r¥   r…   )rp   rq   rc   rr   rs   rs   rt   Ú2test_reject_by_annotations_reject_tmin_reject_tmax
  s(      ÿ ÿ ÿr>  c                  C   s~  t ƒ dd… \} }d}|d|… }tj| |dd�}|jjd sBt‚|jjd sRt‚|jdd	d
� t|ƒ|jjd   kr†t|j	ƒksŒn t‚t|ƒ|ksœt‚|jjd r¬t‚|j
tdd�d� t|ƒ}d|  k rÚ|k sàn t‚t|ƒ|jjd   k�r
t|j	ƒk�sn t‚| ¡  |jd g¡}| |jd di¡ | |g¡ |j
tdd�d� dt|ƒ  k �rt|k �szn t‚dS )z)Test for epochs data ownership (gh-5346).NrD   r|   TrÌ   ZC_CONTIGUOUSZOWNDATAçš™™™™™¹¿rU   rÖ   r   g�íµ ÷Æà>rÒ   r  rŒ   Zgoodçñhãˆµøä>rA   )r¿   rƒ   r   rÛ   Úflagsr…   r   r¥   rÙ   rc   r2  r/  Úcopyr   rK   Úrename_channelsÚadd_channels)rq   rc   Ún_epochsrr   Zn_nowZ	good_chanrs   rs   rt   Útest_own_data$  s&    ,0rF  c               
      sÖ  d\} }| | }d\}}}d}|| }t  |||¡}t t |¡dg| dg| g¡j}	t||dƒ}
|
 ¡ � |t|ƒ |
d< W 5 Q R X t	||
|	ƒ}| 
¡  |¡ ¡ }| 
¡ j|dd� ¡ }| | ¡ |¡ ¡ }t||d	d	…d	d	…d	d	|…f ƒ t||d	d	…d	d	…dd	|…f ƒ t||ƒ tƒ \‰ }	}|	|	d	d	…d
f dk d	d
… }	ˆ  ¡  ‡ fdd„|d	d	d… D ƒ¡ ˆ j ¡  ~ˆ jd | }ˆ j ¡ � |d ˆ jd< W 5 Q R X t t|jd¡ tjt|jd
dd� tjt|jd
d
d� t|ƒD ]ú}tˆ |	t| ˆ jd  td	d�}t |¡| }tt |¡|ƒD ]´\}}|j|d	|… }| ¡ d	d	…d	d	…|d	|…f }|t|jd ƒ }t ||¡ ¡ �s�t‚| 
¡  ||¡}t ||j¡ ¡ �s¸t‚t|j|ƒ t| ¡ |ƒ t |jd |ƒ �q0�qîtˆ |	tt!tƒ}| ¡ d	d	…d	d	…d	d	|…f }|jd	d	|… }dD �] }tˆ |	tt!t||d�}t| ¡ |ƒ t| ¡ |ƒ t |jd |ƒ t|j|ƒ tˆ |	tt!t| |d� |¡}t| ¡ |ƒ t| ¡ |ƒ t |jd |ƒ t|j|ƒ tˆ |	tt!t||d� | ¡}t| ¡ |ƒ t| ¡ |ƒ t |jd |ƒ t|j|ƒ tˆ |	tt!t| |d�}| ¡  | |¡}t| ¡ |ƒ t| ¡ |ƒ t |jd |ƒ t|j|ƒ tˆ |	tt!t||d�}| ¡  | | ¡}t| ¡ |ƒ t| ¡ |ƒ t |jd |ƒ t|j|ƒ tˆ |	tt!t|d� |¡}t| ¡ |ƒ t| ¡ |ƒ t |jd |ƒ t|j|ƒ tˆ |	tt!t|d�}| ¡  | |¡ t| ¡ |ƒ t| ¡ |ƒ t |jd |ƒ t|j|ƒ dddg}|j|d�}| ¡ d	d	…|f }t||ƒ �q.d	S )zTest epochs decimation.r›   ©rŒ   r|   rí   r{   r   rA   r¶   Úlowpass)ÚoffsetNrD   c                    s   g | ]}ˆ j | ‘qS rs   ©rK   ©rx   r-  ©rq   rs   rt   rz   W  s     ztest_decim.<locals>.<listcomp>é   rM   g      (@r–   )rd   re   rf   r  )Údecimr²   rÌ   rN   r—   r�   ©r¾   )"rg   rh   ri   rl   r¤   ÚTr   Ú_unlockÚfloatr.   rB  Údecimater×   r   r¿   r  r   rp   r.  r¦   r§   rØ   r‚   r   r­   re   rn   rÜ   ÚiscloseÚanyr…   r   r	   rd   )Zdec_1Zdec_2rN  rE  r‡   Ún_timesrM   Ú	sfreq_newr@   rc   rp   rr   Údata_epochsZdata_epochs_2Zdata_epochs_3r¾   Zthis_offsetZidx_offsetsrI  Z
idx_offsetZexpected_timesÚexpected_dataZ	must_haveZep_decimr²   rà   rá   rs   rL  rt   Ú
test_decim?  sà    
$
""
 &
 þ  
ÿÿÿÿÿÿ
ÿ
ÿÿ

rZ  c               	   C   sÜ   t ƒ d } t| jdt dt¡tttƒ}t	 
t|j¡ t	j
tdd��" t| jdt dt¡tttƒ W 5 Q R X t	j
tdd��" t| jdt dt¡tttƒ W 5 Q R X t	j
tdd��$ t| jdt dt¡dd	ifƒ W 5 Q R X dS )
zTest base epochs class.r   Nrš   úevents should be a NumPy arrayr�   zevents must be of shape)rA   rN   rD   r‹   rA   )r¿   r0   rp   ri   rß   rk   r­   rd   re   r¦   r§   ÚNotImplementedErrorr×   rÞ   rR  rØ   )rq   rr   rs   rs   rt   Útest_base_epochsµ  s&    
  ÿ ÿ ÿr]  c            	      C   sH  d} t ƒ dd… \}}t||tttƒ}t t|jd¡ t||tttdd�}|j	dd� t
t|jƒd	|jd
  ƒ}t t| ¡ ƒ¡}|| d d k}|| d d k}| | ¡ t t| ¡ ƒ¡}tt |dd…dd…|f d¡t |dd…dd…|f d¡ddd� t |dd…dd…|f ¡t |dd…dd…|f ¡d k�sDt‚dS )zTest savgol filtering.g      4@NrD   rë   TrÌ   rI   ©rµ   rö   rM   ç       @ç      @r   ç{®Gáz„?g¬CÒÑ]r2<©Úrtolrú   rŒ   )r¿   r   r­   rd   re   r¦   r§   r¨   Úsavgol_filterr   r   r¥   rÜ   rp   ri   Úabsr   r×   r   Úmeanr…   )	Úh_freqrq   rc   rr   Úfreqsr@   Ú	pass_maskÚ	stop_maskÚ	data_filtrs   rs   rt   Útest_savgol_filterÈ  s(    
 þÿrl  c                 C   sÄ  d}t ƒ dd… \}}t||tttƒ}t|jd ƒdks<t‚t 	t
|jd¡ t||tttdd�}|jd	d
� tt|jƒd|jd  ƒ}t t| ¡ ƒ¡}||d d k}||d d k}| ¡ }	| d|¡ |jd |ksÞt‚| ¡ }
t t|
ƒ¡}tt |dd…dd…|f d¡t |dd…dd…|f d¡ddd� t |dd…dd…|f ¡t |dd…dd…|f ¡d k�szt‚t t| ƒd¡}|	j|dd� t |¡}| d|¡ t| ¡ |
dd� dS )zTest filtering.ç      D@NrD   rH  é¬   rë   TrÌ   rI   r^  rö   rM   r_  r`  r   rû   ç¼‰Ø—²Òœ<rb  r|   útest-epo.fif©Ú	overwriteç—ÔFFõg<rù   )r¿   r   r­   rd   re   Úroundrp   r…   r¦   r§   r¨   rd  r   r   r¥   rÜ   ri   re  r   r×   rB  r  r   rf  ÚopÚjoinrž   Úsaverƒ   r   )Útmp_pathrg  rq   rc   rr   rh  Zdata_fftri  rj  Úepochs_origrk  Zdata_filt_fftÚ
temp_fnamers   rs   rt   Útest_filterß  s:     þÿ

r{  c                  C   s¾   t ƒ dd… \} }t| |tttƒ}t t|j¡ t| |tttdd�}t	t
|ƒt
|ƒƒ t| |tttdd�}t	t
|ƒt
|ƒƒ t |¡t |¡ks”t‚|jd  d8  < t
|ƒt
|ƒksºt‚dS )zTest epoch hashing.NrD   TrÌ   )r   r   r   rA   )r¿   r   r­   rd   re   r¦   r§   r¨   Ú__hash__r	   ÚhashÚpickleÚdumpsr…   rÛ   )rq   rc   rr   ré   rs   rs   rt   Útest_epochs_hash  s    r€  c               
   C   sÂ   t ƒ dd… \} }| ¡ ddd… }t| |tttttd� tj	t
dd�� t| |tttttd� W 5 Q R X |ddg }ddg|dd…df< tjtt| |dd	� ttt| |tdd
�dd�ƒdƒ dS )zTest event order.NrD   r–   r  Zchronologicallyr�   r   rA   ©r­   ©rã   T)r­   r²   )r¿   rB  r   r­   rd   re   r  r  r¦   ÚwarnsÚRuntimeWarningr§   r¨   r	   r¥   r/  )rq   rc   Zevents2rs   rs   rt   Útest_event_ordering  s     ÿr…  c               	   C   sR   t ƒ dd… \} }dddœ}||f}tjtdd�� t| |tttƒ W 5 Q R X dS )zTest type of events.NrD   rA   )ÚAÚBr[  r�   )r¿   r¦   r§   rÞ   r   r­   rd   re   )rq   rc   Z	events_idrs   rs   rt   Útest_events_type!  s
    
rˆ  c                  C   sú   t  ddddgt¡} t  ddddgt¡}d}tt| ||d�}t|d	d
�ddddgƒ t|dd
�| d ƒ t|dd
�t  | d ¡ƒ t|dd
�| d d ƒ t|dd
�| d t  dddg¡ ƒ | d }t  |¡}t  |dd… ¡}t|dd
�|| ƒ dS )zTest rescale.rD   rN   r—   rŒ   r   rA   )r   rD   )r@   rÜ   rf   rf  )Úmoder–   Úratioç      @ZlogratioÚpercentZzscoreNZ	zlogratio)ri   rl   rR  r   r   r   Úlog10Zstd)r@   rÜ   rf   Útesterr	  r  rs   rs   rt   Útest_rescale*  s    $
r�  r²   r  c              	   C   sX  t  ddgddggt¡}tdddƒ}t||ƒ}t  dddgg¡}tj||dddd| d	�}| ¡  | ¡ }| 	¡ }|j
d
ks~t‚| ¡ }	t|d |	ƒ | d¡ ddg|	d< | rÆt|d d |	d ƒ nt|d d |	d ƒ t| 	¡ d |	dd� | d¡ ddg|	d< t| 	¡ d |	ƒ | �r2|jdk�sBt‚n|jdk�sBt‚| d¡ | �rxtjtdd�� | d¡ W 5 Q R X n| d¡ |jdk�s’t‚|d }
| d¡ t| 	d¡ d¡ddd� |jdk�sÎt‚||fD ]|}|j|
dd� tj|
| d�}| d¡ t| 	d¡ d¡ddd� |j|
dd� tj|
| d�}t| 	d¡ d¡ddd� �qÖdS )z>Test baseline and rescaling modes with and without preloading.rD   rN   r{   )r¶   Úmiscr   rA   Nr%  )rf   r²   )rA   rD   rD   ©r   r   çH¯¼šò×z>rù   ©NNç      à¿rC   FTz%You cannot remove baseline correctionr�   rp  r¶   r–   rø   rq  rÌ   )ri   rl   rR  r   r!   rƒ   r   r2  rB  r×   rÙ   r…   r   Úapply_baseliner   Z_do_baseliner¦   r§   r¨   rf   rf  rw  r   )r²   rx  r@   rp   rq   rc   rr   Zepochs_noblÚepochs_dataÚexpectedÚfnameÚeprs   rs   rt   Útest_epochs_baseline_basic;  sZ    
ÿ


ÿ


rš  c               
   C   sN  t ƒ dd… \} }tjtdd�� t| |ddddƒ}W 5 Q R X tjtdd�� t| |ddddƒ}W 5 Q R X t tt| |dddd	¡ t tt| |dd
dd¡ t tt| |dddd¡ t| |dd
ddd�}| ¡  t t|jd¡ t t|jd¡ tjdt	d�}tjtt
||dd� t
| ¡ |dd� tjtt
||dd� tjtt
||dd� dS )z8Test Epochs initialization with bad baseline parameters.NrD   z interval.*outside of epochs datar�   r?  rR   )rB   r   )r   rU   )rV   r   rV   ©Nr   g333333Ó¿)r   N©rf   rv   rO   )éþÿÿÿr–   )rÜ   rf   )rD   rD   )rD   rA   )rv   ée   )r¿   r¦   r§   rØ   r   r  r•  ri   r¤   rR  r   rB  )rq   rc   rr   r@   rs   rs   rt   Útest_epochs_bad_baselinew  s"    rŸ  c               
   C   st   t ƒ \} }}t| |dddddddœtt|dd	�}t|ddgd
ƒ}t|ddgdd
iƒ}t|d jdƒ t||j	ƒ dS )z6Test combining event ids in epochs compared to events.rA   rD   rN   r—   rŒ   é    )rã   rä   ÚcÚdÚeÚfFr  é   rã   rä   ÚabN)
r¿   r   rd   re   r    r,   r	   Ú_namer   rc   )rq   rc   r¾   rr   Z
events_newZ
epochs_newrs   rs   rt   Útest_epoch_combine_ids�  s      ÿ   þr¨  c               	   C   sŽ   t ƒ \} }}t| |ddddddœtt|dd�}|d	 }|d
 }|ddg }t|j|jƒ t|j|jƒ t| ¡ | ¡ ƒ t| ¡ | ¡ ƒ dS )z/Test epoch selection via multiple/partial keys.rA   rD   rN   r—   rŒ   )úa/b/aúa/b/bza/czb/dZa_bFr  za/bzb/ar©  rª  N)r¿   r   rd   re   r   rc   r   r×   )rq   rc   r¾   rr   Zepochs_regularZepochs_reverseZepochs_multirs   rs   rt   Útest_epoch_multi_ids�  s"     ÿ   þr«  c               	   C   s$  t ƒ \} }}t| t | jdtgg¡ttt|d�}tj	t
dd�� | ¡ }W 5 Q R X t| t | jdtgg¡ttt|d�}t|ƒs‚t‚| ¡ sŽt‚| ¡  t|ƒs¢t‚| ¡ s®t‚tj	t
dd�� | ¡ }W 5 Q R X t| t | jdtgg¡ttt|d�}tj	t
dd�� | ¡ }W 5 Q R X |�s t‚dS )zDTest epochs when events are at the beginning or the end of the file.r   rO  Úemptyr�   N)r¿   r   ri   rl   r"  r­   rd   re   r¦   rƒ  r„  r  Úreprr…   Ú_repr_html_r2  Z	last_samp)rq   rc   r¾   rr   Úevokedrs   rs   rt   Útest_read_epochs_bad_events¬  s>       ÿ   ÿ   ÿr°  c              
      sR  t dd�\‰ }}d}tˆ |ttt||dd�}| ¡ }| ¡ }tjt	dd�� tˆ |tttdd� W 5 Q R X tˆ t
|td	�dtt|d
�}t|| ¡ ƒ tˆ jdddddd�}‡ fdd„|D ƒ}	| |	¡ t|jd ƒt|jƒ  krô| ¡ jd ksún t‚| ¡ }
|jd |
jd t|ƒ k�s$t‚tjtdd�� tˆ |ttt|dd�}W 5 Q R X |j ¡ � d|jd< W 5 Q R X tjtdd�� | d¡ W 5 Q R X | ¡ }t|dd…dd…|jf |ddd� | ¡ }t|jdd…|jf |jddd� |jjd }|jjd }|d }||  k�r*|d k�s0n t‚|jd |jd d k�sNt‚dS )z/Test epochs from raw files with IO as fif file.TrÌ   r›  ©r¾   rf   r²   z)tmin has to be less than or equal to tmaxr�   Nrœ  )rº   rO  Fr´   ©rµ   r¶   r·   r¹   r»   c                    s   g | ]}ˆ j | ‘qS rs   rJ  r’   rL  rs   rt   rz   Ü  s     z(test_io_epochs_basic.<locals>.<listcomp>ÚchsrA   ÚaliasingrD   )r¾   rN  rH  r’  çê-�™—q=rb  rs  r—   rM   )r¿   r   r­   rd   re   r  r×   r¦   r§   rØ   r   r   r   rp   Údrop_channelsr¥   rK   rÙ   r…   rƒ  r„  rQ  rS  r   Z_decim_slicer@   )rx  rc   r¾   rf   rr   r¯  r@   Zepochs_no_idZ	eog_picksZeog_ch_namesZdata_no_eogZ
epochs_decZdata_decZ
evoked_decÚnZn_decZ	n_dec_minrs   rL  rt   Útest_io_epochs_basicÈ  sj     ÿÿ   ÿ ÿ
ÿ"ÿÿ  ÿ"r¸  rï   T)Zmarksr  c                 C   s´  t ddd�}tƒ \}}}d|ddd…df< d|ddd…df< t ddd�}| d }t|||tt||tt ƒ td	 td	 d
�}t|j|dkrŠ|ndƒ | ¡ }	| 	¡  
¡ }
t|
jdƒ |
 ¡ }t|	|f|Ž |j|dd� t|dd�}t| ¡ | ¡ f|Ž t|d  ¡ |d  ¡ f|Ž t|d  ¡ |d  ¡ f|Ž |jdk	�sBt‚t|jtƒdk�sXt‚|jdk�sht‚|jtd	 k�s|t‚|jtd	 k�s�t‚t|dd�}| 	¡ }~| ¡  ~dS )z Test epochs I/O with projection.r%  rø   ©rú   rc  rA   NrD   ©rã   rä   rp  ra  )r¾   rï   r  r  r)  r*  r  FTrq  rÌ   rã   rä   rÏ   )r/  r¿   r   rd   re   r  r	   rï   r×   rB  Ú
apply_projr   rw  r   r…   r5   r  r)  r*  )rx  rï   Útolsrq   rc   r¾   Z	event_idsrz  rr   Údata1Úepochs2Údata2Úepochs_readZepochs_copyrs   rs   rt   Útest_epochs_io_projý  sT       þ
ÿÿ
ÿÿrÁ  ©FTc                 C   sÎ  t ddd�}t|d�\}}}t| ƒ}t |d¡}t |d¡}d}	tƒ � }
t||ttt	||	ddd	�	}W 5 Q R X |
 
¡ }
d
}|
 |¡dksštd|› d|
› �ƒ‚d}|r¦d}|
 |¡dksÈtd|› d|
› �ƒ‚| ¡ }|j|dd� t||ttt	|ddd�}|jdk�st‚|j|dd� t||d�}|j|dd� t|ƒ}t|ƒ}tjtdd�� |jdddgd� W 5 Q R X | ¡  |	¡}t|tƒ�sˆt‚|j|j|	d fk�s¢t‚|j|	k�s²t‚t|ƒ d¡�sÆt‚| |	¡ t|j|jƒ t| ¡ | ¡ ƒ t| ¡ | ¡ ƒ t|j|jƒ t| ¡ j|jƒ t|j|jƒ |j\}}|dk�rN|jd }|dk�rb|jd }||f}	t|j|	ƒ t|j|jdƒ t|j	|j	dƒ t|j|jƒ |j  d¡ |j !ddi¡ t |d¡}|j|dd� t||d�}t|j|jƒ t|d  ¡ j"dƒ |jd dk �st‚|jd dk�s0t‚| d¡ |jd df}| #d|j$d  d¡ |j|k�snt‚|j|dd� t||d�}t%|j|ƒ t%| ¡ | ¡ d d!� ~~t||ttt	|t&d"�}|j|dd� t||d�}t|j'|j'ƒ | ¡ }|j'j(d |j(d k�st‚| ¡ }t| ¡ |ƒ | )|j¡ |j*ddgd#d$� |j|dd� t||d�}t|j+|j+ƒ tt,|j+ƒt,|j'ƒƒ |j-|j-k�s”t‚|�r®| .|j/dd… ¡ t |d%¡}tj0t1d&d�� |j|dd� W 5 Q R X tj0t1d&d�� t||d� W 5 Q R X t||t dd'd(�tt	|d)d*�}|j|dd� t2|dt3j4ƒ t||d�}t%| ¡ | ¡ f|Ž t|j'|j'ƒ tt5|j 6¡ ƒd+d,„ |j 6¡ D ƒƒ d-}t7|ƒ}| ¡ j8d |k �sºt‚|j||dd.� t2|d|ƒ t||d�}t2|d|ƒ t%| ¡ | ¡ f|Ž t|j'|j'ƒ t|j+|j+ƒ |j-|j-k�s2t‚|jdk	�sBt‚|j}| 9¡  #dd¡ |j|k�sht‚tt,|jƒdƒ t| ¡ j(d dƒ |j|dd� t||d�}tt,|jƒdƒ t| ¡ j(d dƒ dS )/z Test epochs I/O with preloading.r%  rø   r¹  rÌ   rp  ztest_no_bl-epo.fifr›  T)r¾   rf   r²   r³   zNot setting metadatarA   ú

to find:
ú

log:
z:Loading data for 7 events and 421 original time points ...zKUsing data from preloaded Raw for 7 events and 421 original time points ...rq  Nr±  Úinvalidr�   rD   rN   rœ  z<Epochsr   r–   rå   za:azfoo-epo.fifrö   rM   ga2U0*©C?©rc  ©r¾   r  zcan we recover orig ID?©Úreasonztest-bad-name.fif.gzz-epo.fifiç  )r‹   Úbarrð   )r¾   Ú
on_missingc                 S   s   h | ]}t |ƒ’qS rs   r�   ©rx   r	  rs   rs   rt   Ú	<setcomp>±  s     z)test_epochs_io_preload.<locals>.<setcomp>Z7MB©Ú
split_sizerr  ):r/  r¿   rž   ru  rv  r7   r   r­   rd   re   r3  Úcountr…   r  rw  rf   r   r¦   r§   rØ   r•  rB  r  r0   Ú
startswithr   rÜ   r   r×   r@   r	   rï   ÚpopÚupdateÚcommentr   rp   r   r  rc   rÙ   Úequalize_event_countsr}   r†   r¥   r„   r¶  rK   rƒ  r„  Ú_assert_splitsri   r0  r«   r¬   r'   Únbytesr  )rx  r²   r¼  rq   rc   r¾   Útempdirrz  Ztemp_fname_no_blrf   r  rr   ÚmsgÚload_msgr¯  Zepochs_no_blrÀ  Zepochs_no_bl_readZepochs_with_blZbminÚbmaxÚ
fname_tempZbaseline_before_cropZepochs_read3r@   Zepochs_read4Zepochs_read5Zepochs_badnamerÏ  Zsplit_size_bytesrs   rs   rt   Útest_epochs_io_preload.  s     ÿ"" ÿ
ÿ





ÿÿ ÿÿrÝ  z#split_size, n_epochs, n_files, size)z1.5MBé	   é   i   )Ú3MBé   rN   é  0 ÚmetadataÚpandaszRequires PandasrÈ  Úconcatc              
      s®  d}t t||d  ƒƒ}tj tj d¡ d|¡t 	dd¡¡}	t 
|	d¡}
t |	|
¡‰ |dkrn|sf|rn|d7 }|rÈddlm} dd„ tt|
ƒƒD ƒ}||
d	d	…df |	jd
  tt|
ƒƒ|dœƒ}|ˆ _|ròˆ  ¡  t‡ fdd„ttˆ ƒƒD ƒƒ‰ ˆ  ¡ }tˆ ƒ|k�st‚| d }ˆ j||dd� t|ƒ}||k�s:t‚t|||ƒ t t|ƒd	d… › d|d › d�¡�rrt‚dD ]0}tj||d�}t| ¡ |ƒ tˆ j|jƒ �qvt| d ƒ}|  dd|d › d�¡}|  dd|d d›d�¡}ˆ j|ddd� t |¡�st‚t |¡�rt‚dD ]0}t!j"t#dd�� ˆ j||dd� W 5 Q R X �qt$ %|¡ ˆ j|d dd!� t |¡�svt‚t |¡�s†t‚ˆ j|d dddd"� t |¡�sªt‚d	S )#zTest saving split epochs.r{   rA   r   rv   Ú2MB)Ú	DataFramec                 S   s   g | ]}d d ‘qS )Ú*é'  rs   r¢   rs   rs   rt   rz   ê  s     z%test_split_saving.<locals>.<listcomp>NrM   )Z
event_timeZtrial_numberÚjunkc                    s   g | ]}ˆ | ‘qS rs   rs   ©rx   Úii©rr   rs   rt   rz   ò  s     rp  TrÎ  éüÿÿÿú-z.fifr  rÌ   útest_epo.fifzepo.fifzepo-Z_epoz_split-Ú02dÚbids)Úsplit_namingr³   )Zneuromagrò  zDestination filer�   z1.4MB©rÏ  r³   )rÏ  ró  rr  r³   )&rk   rt  rƒ   r>   r!   ri   ÚrandomÚRandomStaterh   r   r   r   rä  rç  r‚   r¥   rp   rã  r2  r/   r×   r…   rw  r'   rÖ  ru  Úisfilerž   r   r   r   rc   Úreplacer¦   r§   ÚFileExistsErrorÚosÚremove)rx  rÏ  rE  Zn_filesrÝ   rã  rå  ÚfsrV  rq   rc   rç  rê  r–  r˜  Zgot_sizer²   r¾  Zsplit_fnameZsplit_fname_neuromag_part1Zsplit_fname_bids_part1ró  rs   rí  rt   Útest_split_savingÒ  sr    
ÿ
ý, ÿ ÿ

 ÿrý  c           	   
   C   sœ  t  d¡}|d jdkst‚t ddd¡}t  t|ƒ¡d }t||d|d	�}t|j	ƒd
ks^t‚t|ƒt|ƒ  kr€t|j
ƒks†n t‚| d }dD ].}tjtdd�� |j||dd� W 5 Q R X q’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|ƒ}t| ¡ | ¡ ƒ |j	|j	k�sBt‚d}t|d|ƒ | d }| ¡  |j||dd� t|d|ƒ t|ƒ}t| ¡ | ¡ ƒ dS )z0Test splitting with many events and using reset.)r;  rA   i   r‘  i    rA   r{   r¶   i † rS   )rd   r†   iˆŠ útemp-epo.fif)z0.5MBZ1MBræ  ztoo small to safelyr�   r+  rô  zwould result in writingz2.27MBzwriting overheadrà  râ  rß  ztemp-reset-epo.fifr—   N)ri   rj   r×  r…   rƒ   r   r¤   r¥   r.   r„   rc   r¦   r§   rØ   rw  rƒ  r„  r   r   r×   rÖ  Zreset_drop_log_selection)	rx  r@   rp   r†   rr   r˜  rÏ  rÀ  Úmbrs   rs   rt   Útest_split_many_reset  s4    
(r   c              
      sô   d}|dkst ‚tˆ ƒg‡ fdd„td|d ƒD ƒ }| d¡}t|d d… ƒD ]†\}}t |¡spt d|› �ƒ‚t|d	ƒ�}| dd¡ | 	¡ }	W 5 Q R X |t
|ƒd k r®d
nd
}
||
 |	  k rÊ|ksPn t |› ƒ‚qPt |¡rðt d|› �ƒ‚d S )NTr   c                    s$   g | ]}t ˆ ƒd d… d|  ‘qS )Nrî  z-%d.fifr�   rë  ©r˜  rs   rt   rz   >  s    z"_assert_splits.<locals>.<listcomp>rA   rD   r–   zMissing file: ÚrrV   zErrantly wrote )r…   rž   r‚   rÒ  Ú	enumerateru  r÷  ÚopenÚseekÚtellr¥   )r˜  r·  rÝ   r  Znext_fnamesZ	bad_fnamerì  Z
this_fnameÚfidÚ	file_sizeZmin_rs   r  rt   rÖ  ;  s    ÿ
&rÖ  c              
   C   sæ  t | ƒ}tƒ \}}}|jd ddg }t|jdddd|d�}t||dd… ttt|dd	�}td
d„ |jd D ƒƒsvt	‚| 
¡ }tdd„ |jd D ƒƒsšt	‚| ¡ }	ttƒ ¡ }
t|
|dd… ttt|dd	�}| ¡ }tdd„ |jd D ƒƒsðt	‚| 
¡ }tdd„ |jd D ƒƒ�st	‚|jdk�s&t	‚t|	|dd� t|jdddd|d�}t||dd… ttt|dd	�}|jdd� ¡  t|jd ƒ�sŒt	‚t||dd… ttt|dd	�}t|jd ƒ�r¾t	‚|j ¡ � d|jd< W 5 Q R X t||dd… ttt|dd	�}t|jd ƒ�rt	‚|jd }t||dd… ttt|dd	�}|j ¡ � g |jd< W 5 Q R X | ¡  |¡ ¡  ¡ }	t |d¡}|j|dd� t|ƒ}| |¡ | ¡  | ¡ }t|	|ddd� ttƒ}|jg dd� ddg|jd< t|jdddddd�}t||tttd|dd�}| ddg¡ tt|ƒdƒ t |d¡}|j|dd� dD ]š}t|d|d �}|jdd� ¡  t| ¡ jd!d"�d#dd$� t|d|d �}|jdd� tj t	t| ¡ jd!d"�d%dd$� | ¡  t| ¡ jd!d"�d#dd$� �qFdS )&z:Test handling projection (apply proj in Raw or in Epochs).r´   r  úEEG 053TFr²  Nr—   rò   c                 s   s   | ]}|d  dkV  qdS ©ÚactiveTNrs   ©rx   Úprs   rs   rt   r•   T  s     z#test_epochs_proj.<locals>.<genexpr>Úprojsc                 s   s   | ]}|d  dkV  qdS r
  rs   r  rs   rs   rt   r•   V  s     c                 s   s   | ]}|d  dkV  qdS r
  rs   r  rs   rs   rt   r•   ^  s     c                 s   s   | ]}|d  dkV  qdS r
  rs   r  rs   rs   rt   r•   `  s     é   )Údecimal©Z
projectionZcustom_ref_appliedrþ  rq  rÅ   r%  r¹  ©Úremove_existing)rï   r¾   r²   úEEG 001zEEG 002r�   rp  r  ©rï   r²   rA   ©Úaxisr   rù   rS   )!rž   r¿   rp   r   r   r­   rd   re   rª   r…   r  r×   r"   r¼   r»  rï   r   Úset_eeg_referencer$   rQ  rB  Úadd_projru  rv  rw  r   r   r   r	   r¥   rf  r¦   r§   )rx  rØ  rq   rc   r¾   r»   Z
this_picksrr   r¯  r@   Zraw_projZepochs_no_projZdata_no_projZevoked_no_projrï   Z	fname_eporÀ  Zdata_2rz  r²   rs   rs   rt   Útest_epochs_projK  s¨     ÿÿ ÿ ÿÿÿÿ
ÿ
ÿÿ  ÿr  c            
      C   s¼   t ƒ \} }}t| |dd… ttt|d�}| ¡ }t| |dd… ttt|d�}| ¡ }t| |dd… ttt|d�}| ¡ }t||gdd�}	t|j|	jƒ t|j	|	j	ƒ t
|	j|j|j ƒ dS )zTest arithmetic of evoked data.Nr—   rO  r  r  )Úweights)r¿   r   r­   rd   re   r  r   r   r@   rÜ   r	   r  )
rq   rc   r¾   Úepochs1Zevoked1r¾  Úevoked2rr   r¯  Z
evoked_avgrs   rs   rt   Útest_evoked_arithmetic   s    r  c                 C   s<  t | ƒ}tƒ \}}}|j ¡ � d|jd< W 5 Q R X tƒ �,}t||dd… ttd t|dddd�	}W 5 Q R X | 	¡ }d	}| 
|¡d
ksštd|› d|› �ƒ‚| ¡ }|j ¡ � d|jd< W 5 Q R X t |d¡}	| |	¡ t|	ƒd }
t|
jd dƒ t|j|
jddd� t|j|
jdd
|jd  d� d}t||dd… tdt||dd�}| ¡ }t|j|ƒ |j|	dd� t|	ƒd }
t|j|
jddd� t|j|
jddd� t|j|ƒ d}t||dd… tdt||dd�}| ¡ }| dd¡ t|j|
jddd� t|j|
jddd� t|j|ƒ t|jddd�}t||dd… tdt|ddd�}tjtdd�� | |jd di¡ W 5 Q R X tƒ }dD ]Ž}| |¡}| |¡ |j|	dd� t|	ƒd }
|dk�rÀd
nd}||
fD ]>}|j|j|d… k�sêt‚t|j| ¡   d¡|d… ƒ �qÌ�q€tj!t"d d�� t#|	|dd� W 5 Q R X dS )!z(Test IO of evoked data made from epochs.é(   rH  Nr—   gºI+‡†?rŒ   T)r¾   rN  r²   r³   zPLoading data for 1 events and 415 original time points (prior to decimation) ...rA   rÃ  rÄ  rÏ   Ú	proj_nameúevoked-ave.fifr   ç-Cëâ6?rø   rb  rM   )rV   rX   rV   )r¾   rf   rN  rq  rB   gòÒMbX¹?r  zunit for.*changed fromr�   Zsyst)Nrª   z.*nchan.* must match)$rž   r¿   rp   rQ  r7   r   r­   rd   re   r3  rÐ  r…   r  ru  rv  rw  r   r	   r   r@   rÜ   rf   r   r   r¦   rƒ  r„  Zset_channel_typesrK   ÚlistÚappendr×   rf  r§   rØ   r   )rx  rØ  rq   rc   r¾   r  rr   rÚ  r¯  rÜ  r  rf   ZevokedsÚstartr  rs   rs   rt   Útest_evoked_io_from_epochs¯  sŠ       ÿ"
ÿ  ÿ  ÿ  ÿ

&r&  c                 C   sv  t ƒ \}}}t| ƒ}t||dd… ttt|d�}| ¡ | ¡ g}tt	 
|d¡|ƒ tt	 
|d¡ddgƒ}tt	 
|d¡dƒtt	 
|d¡ddd	�g}||fD ]Ø}	|	d jtjks°t‚|	d jd
ksÂt‚|	d jtjksÖt‚|	d jdksèt‚t||	ƒD ]|\}
}t|
j|jƒ t|
j|jƒ |
j|jk�s(t‚|
j|jk�s:t‚|
j|jk�sLt‚|
j|jk�s^t‚|
j|jksòt‚qòq˜dS )z2Test calculation and read/write of standard error.Nr—   rO  r!  r   rA   rå   Ústandard_error)Úkindr  )r¿   rž   r   r­   rd   re   r  r'  r   ru  rv  r   Z_aspect_kindr#   ZFIFFV_ASPECT_AVERAGEr…   r(  ZFIFFV_ASPECT_STD_ERRrn   r   r@   rÜ   r  ÚlastÚfirst)rx  rq   rc   r¾   rØ  rr   r¯  r  Zevoked3Z
evoked_newZaveZave2rs   rs   rt   Útest_evoked_standard_erroró  s8    ÿÿÿÿr+  c                 C   s¼  t | ƒ}t |d¡}tƒ \}}}||dd…df tk }t||ttttt	d�}t
 tt|¡ t|jƒ}| ¡ }	t|	ƒ}
||
ks‚t‚|
dksŽt‚|jdksœt‚| ¡ }dg|jd< td	d
ddd�}t||ttt|t	d�}| ¡  tdd„ |jD ƒƒsöt‚tdd„ |jD ƒƒ�st‚t
jtt||tttddd�	 t
jtt||ttttd dd�	 t
jtt||tttdtd d�	 t||ttt|tt	ddd�
}| ¡ }	t|	ƒ}
|
dk�s¦t‚t|ƒdk�s¸t‚|j|j d dk�sÒt‚|j|j d dk�sìt‚t||tttƒ}| d¡dk�st‚| t d¡¡dk�s*t‚|d  ¡ d }	| |	¡dk�sNt‚t||tttttd�}|jtk�stt‚|jtk�s„t‚t |j|j¡�sšt‚t |j|j¡�s°t‚|j |dd � t!|ƒ t||ttttt	d�}t ¡ }t	 ¡ }|d!= |d"= |d#= |d$= | ¡ j||d�}|j|jk�s(t‚|j	|j	k�s:t‚|d$  d  < |d!  d9  < | ¡ j||d�}|jt|d$ td! td" td# d%�k�s˜t‚|j	t|d! t	d$ d&�k�s¸t‚dS )'zTest of epochs rejection.rp  NrD   r  rN   r  r  r´   rµ  gVçž¯ò<g:Œ0âŽyu>gvƒôõ!„>rÃ   c                 s   s   | ]}d |kV  qdS )zMEG 2442Nrs   ©rx   r£  rs   rs   rt   r•   ,  s     z%test_reject_epochs.<locals>.<genexpr>c                 s   s   | ]}d |kV  qdS )r  Nrs   r,  rs   rs   rt   r•   -  s     rö   r   )r)  r*  rA   rS   rV   )r¾   r  r  r)  r*  r�   r–   )F)ZNO_DATA)rA   rA   )F)Z	TOO_SHORT)TN©rq   rc   r­   rd   re   r)  r*  Trq  rI   r¶   r¹   rÄ   )rÄ   rI   r¶   r¹   rÆ   )"rž   ru  rv  r¿   r­   r   rd   re   r  r  r¦   r§   r¨   r¥   rc   r×   r…   r„   rB  rp   r/  r2  rª   rØ   rÜ   Z_reject_timeZ_is_good_epochri   rj   rT  r)  r*  rw  r   )rx  rØ  rz  rq   rc   r¾   Úevents1rr   Ún_eventsr@   Zn_clean_epochsZraw_2Zreject_crazyZ
new_rejectZnew_flatZepochs_cleanedrs   rs   rt   Útest_reject_epochs  s°     ÿ
 ÿ ÿ ÿ ÿ   ÿ   ÿ ÿýÿr0  c                  C   s†   t ƒ \} }}t| |dd… ttt|dttd�	}| ¡ }t| |dd… ttt|dttd�	}| ¡ }t||ƒ t	| 
¡ j| 
¡ jdƒ dS )zTest preload of epochs.Né   T©r¾   r²   r  r  Frá  )r¿   r   r­   rd   re   r  r  r×   r   r   r  r@   )rq   rc   r¾   Zepochs_preloadZdata_preloadrr   r@   rs   rs   rt   Útest_preload_epochsn  s&      þ  ÿ

 ÿr3  c                  C   sŠ  t ƒ \} }}t| |dd… ttt|ttd�}| ¡ }|jd }d}|d }|| dksZt	‚dD �]$}t| |dd… ttt||ttd�	}	|s’|	 
¡  |	||… }
|
 ¡ }t||||… ƒ d}t||ƒD ]*}|
|  ¡ }t|d || ƒ |d7 }qÆ|	|jd   ¡ }t|||g ƒ t d|jd d¡}|	|  ¡ }t||| ƒ dg}|	|  ¡ }t||| ƒ ddg}|	|  ¡ }t||| ƒ q^dS )	z(Test of indexing and slicing operations.Nrí   )r¾   r  r  r   rA   r  r2  r|   )r¿   r   r­   rd   re   r  r  r×   rÙ   r…   r2  r   r‚   rg   Úrandint)rq   rc   r¾   rr   Údata_normalZn_good_eventsÚstart_indexZ	end_indexr²   r¾  Zepochs2_slicedZdata_epochs2_slicedÚposÚidxr@   rs   rs   rt   Útest_indexing_slicing~  sN     ÿ

  ÿ
ÿ
r9  c               
   C   s˜   t ƒ dd… \} }ttdd�}t| |tttdddd�}|jdd� ¡  	¡ }t
|j|jƒ}|j}|j| }|j|jksxt‚t||d	ƒ t|j|jd
ƒ dS )z#Test of average obtained vs C code.NrD   r   )Ú	conditionTF)rf   r²   rï   r  r|   r¥  )r¿   r   Úevoked_nf_namer   r­   rd   re   r  r»  r  r   rK   r@   r  r…   r   rÜ   )rq   rc   Zc_evokedrr   r¯  ÚselÚevoked_dataZc_evoked_datars   rs   rt   Útest_comparision_with_cµ  s     ÿ
r>  c                 C   s  t | ƒ}t |d¡}tƒ \}}}t||dd… ttt|dtt	d�	}t
 t|jdd¡ | ¡ }t||dd… ttt|dtt	d�	}t
jtdd	�� | d
d¡ W 5 Q R X td }	td }
|j|	k|j|
k@ }|	tksÔt‚|
tk sàt‚| ¡  |	|
¡}|j|jk�st‚| ¡ }| |	|
¡ | ¡ }t||dd…dd…|f ƒ t||dd…dd…|f ƒ t|jttgdd�dt|jƒd gƒ t|j|	|
gdd�dt|jƒd gƒ tt d¡tdddƒt dt¡dd�}| dd¡ |jd }t
jtdd	�� | d¡ W 5 Q R X t||jd ƒ |jd d|j d   }|jd|jd dd� t|jd |ƒ t||dd… tdd|dtt	d�	}t|jddd� t|jd dd� | ¡  dd¡}t|j|jdd� t
jtd!d	��* t
 t!|jd"d#¡ t
 t!|jdd¡ W 5 Q R X t||dd… tttttd$�}| "¡  | ¡  dd¡}t #|j|j$¡�s>t‚| ¡  dd¡}t #|j|j%¡�sdt‚~| ¡ }|jdd%dd� t|jƒ}t
jtdd	��* |jdd%dd� t|jƒ|k�s¼t‚W 5 Q R X | dd¡ | &|¡ t' (|¡}t #|j|j$¡�süt‚t #|j|j%¡�st‚dS )&zTest of crop of epochs.rp  NrŒ   Fr2  rX   Tztmax is set tor�   iìÿÿÿéÈ   rV   )Zuse_roundingr   rA   ©rA   rA   r;  r{   r¶   rš   rB   rÕ   çffffffæ?r–   r´  r|   rö   rM   )Zinclude_tmaxgˆ* ð¿rµ  rÆ  gˆ* ð?z	is set tor;  r=  r-  rU   ))rž   ru  rv  r¿   r   r­   rd   re   r  r  r¦   r§   r¨   r   r×   rƒ  r„  rÜ   r…   rB  rf   r   Ztime_as_indexr¥   r.   ri   rj   r   rß   rk   rS  r   rp   rØ   r  rT  r)  r*  rw  rƒ   r   )rx  rØ  rz  rq   rc   r¾   rr   r5  r¾  Ztmin_windowZtmax_windowZtmaskÚepochs3Údata3r¿  Z	last_timeZ	want_timeZepochs_cropÚepochs_croppedZ
epoch_croprV  rÀ  rs   rs   rt   Ú	test_cropÅ  s¬      ÿ   ÿÿÿþ
 ÿ
   ÿ   ÿ


rE  c                  C   sÚ  t ƒ \} }}t| |dd… ttt|dttd�	}t t	|j
d¡ t| |dd… ttt|dttd�	}| ¡ }t| ¡ ƒ}t|jƒ}|jd }| ¡ }|j
|d d	d
� t| ¡ ƒ}t|jƒ}	|jd }
|j
|d	d
� t| ¡ ƒ}t|jƒ}|jd }|jd d|jd  k�st‚|
d| k�s t‚||k�s.t‚t|	ƒdt|ƒ k�sHt‚t||dƒ |jd d|jd  k�srt‚t||dƒ | ¡ }|j
|d dd	d� tj||jddd��s´t‚| ¡ }| ¡ j
|d d	d
�}||k	�sàt‚|j
|d d	d
�}||k�s t‚d\}}}}t |||f¡}t |dft¡}t||dƒ}t|t|ƒ|ƒ}t|t|ƒ|ƒ}t||gƒ}|j
|jd d dd
� |j
|jd d dd
� t||gƒ}|||fD ]*}t|jd	 |jƒ t|jd |jƒ �qªd}t|t|ƒ||d�}|j|jfD ]}t|t |¡| | ƒ �qú| 
|d d ¡ |j|jfD ]&}t|t d| ¡|d  | ƒ �q8|  d	d¡ |j|jfD ]&}t|t |d d ¡|d  ƒ �qx| 
|¡ |j|jfD ]}t|t |d ¡| ƒ �q¶dS )zTest of resample of epochs.Nr|   Fr2  rv   TrM   rD   r   )ÚnpadrŒ   )Zn_jobsrF  ç:Œ0âŽyE>ro  rb  )rA   rA   r|   r{   rN   r¶   Úautor–   gü©ñÒMb`¿rÕ   r_  )!r¿   r   r­   rd   re   r  r  r¦   r§   r¨   ÚresamplerB  r   r×   rÜ   rp   rÙ   r…   r¥   r   ri   ÚallcloserÛ   rj   rk   r   r.   r/   r	   Z
_raw_timesr   r¤   r   )rq   rc   r¾   rr   Zepochs_or5  Ztimes_normalZsfreq_normalZdata_upZtimes_upZsfreq_upZdata_newZ	times_newrW  Zepochs_resampledZn_trialZn_chanZn_timerM   r@   rp   r  r¾  r£  Z	this_tminrÜ   rs   rs   rt   Útest_resample  s„      ÿ  ÿ





$$
rK  c                  C   s^  t ƒ \} }}t| |dd… ttt|ddd�}t| |dd… ttt|ddd�}t|jdddd�}| ¡ }| ¡ }| d¡ t	|j
|j
dd	d
� dD ]š}t| |dd… ttt|d|d�}t| |dd… ttt|d|dd�	}| ¡ }	| ¡ }
t	|	dd…|dd…f |
dd…|dd…f dd	d
� t |	|
¡r�t‚q�dD ](}tjtt| |dd… ttt|d� �q0dS )zTest detrending of epochs.Nr—   rA   )r¾   rf   ÚdetrendTr´   ©rµ   r¶   r»   rG  rø   rb  r  r“  r±  r   )r¾   rf   r²   rL  ro  )r‹   rD   FT)rL  )r¿   r   r­   rd   re   r   rp   r  rL  r   r@   r×   ri   rJ  r…   r¦   r§   rØ   )rq   rc   r¾   rè   ré   Z
data_picksZevoked_1Zevoked_2r²   rã   rä   Úvaluers   rs   rt   Útest_detrendi  sN     ÿ ÿ
ÿ
 ÿ  ÿ* ÿ  ÿrO  c                  C   s–   t ƒ \} }}t| |dd… ttt|dttd�	}dg}tddƒrP|tj	 
d¡g7 }|D ]<}t||d�}t|jƒt|jƒks|t‚|jj|jjksTt‚qTdS )	z Test of bootstrapping of epochs.NrŒ   Tr2  r   Únumpyz1.17)Úrandom_state)r¿   r   r­   rd   re   r  r  r:   ri   rõ  Údefault_rngr*   r¥   rc   r…   rÛ   rÙ   )rq   rc   r¾   rr   Zrandom_statesrQ  r¾  rs   rs   rt   Útest_bootstrap�  s      ÿ
rS  c                  C   sŒ   t ƒ \} }}t| |dd… ttt|dttd�	}| ¡ }t|j	|j	ƒ t| |dd… ttt|dttd�	}| ¡ }| 
¡ }| 
¡ }t||ƒ dS )zTest copy epochs.NrŒ   Tr2  F)r¿   r   r­   rd   re   r  r  rB  r   rÛ   r×   )rq   rc   r¾   rr   Úcopiedr@   Zcopied_datars   rs   rt   Útest_epochs_copy›  s"      ÿ  ÿrU  c                  C   sl   t ƒ \} }}t| |dd… ttt|d�}t| ¡ ƒD ]2\}}|j}| ¡ |dd…dd…f }t	||ƒ q4dS )z'Test the iterator for epochs -> evoked.NrŒ   rO  )
r¿   r   r­   rd   re   r  Ziter_evokedr@   r×   r   )rq   rc   r¾   rr   rì  r  r	  Úyrs   rs   rt   Útest_iter_evoked«  s    rW  c              	   C   sº   t ƒ \}}}t||dd… ttt|| d�}t|dƒr8t‚| ¡ }tƒ }t	dƒD ]@}z| 
t|ƒ¡ W n tk
r~   Y  q�Y qNX t|dƒsNt‚qNt|dƒržt‚t |¡}t||dd� dS )zTest iteration over epochs.NrŒ   r  Z_current_detrend_picksr|   rø   rù   )r¿   r   r­   rd   re   Úhasattrr…   r×   r#  r‚   r$  ÚnextÚStopIterationri   rl   r   )r²   rq   rc   r¾   rr   r–  r@   r£   rs   rs   rt   Útest_iter_epochs¶  s,     
     ÿ
r[  c            
   
   C   s  t ƒ \} }}t| |dd… ttt|d�}t t|j| 	|dd… ¡¡ | ¡  | 
¡  t| |dd… ttt|dd�}| 	¡ }| |¡ t| ¡ | ¡ ƒ | 	¡ }|j}t|t |¡dd� t| |dd… ttt|dd	d
�}|jdd	d� ¡ }	| ¡  ¡ }t||	ƒ t| 	¡ jddd� dS )z'Test subtraction of Evoked from Epochs.Nr|   rO  rŒ   Tr  rÅ   rù   r‘   )r¾   rN  r³   r,  rS   rø   )r¿   r   r­   rd   re   r¦   r§   rØ   Zsubtract_evokedr  r»  r   r×   r@   ri   Ú
zeros_likerS  )
rq   rc   r¾   rr   r¾  r¯  Zzero_evokedr@   rB  Zdata_oldrs   rs   rt   Útest_subtract_evokedË  s0    
ÿÿ
 ÿ
r]  c               	      s6  t ƒ \} }}||dd…df tk }t| |ttt|d�}||dd…df tk }t| |ttt|d�}| ¡  ttdd„ |j	D ƒƒt|j
ƒƒ |j	dt|j
ƒ ks¤t‚ttdd„ |j	D ƒƒt|j
ƒƒ |j
jd |j
jd ksàt‚t||gd	d
� t|j
jd |j
jd ƒ t| |ttt|d�}t| |ttt|d�}t||gdd
� t|j
jd |j
jd ƒ t|j
jd |j
jd ƒ t| |dddddœtt|td�‰ ˆ  ¡  ttdd„ ˆ j	D ƒƒtˆ j
ƒƒ tˆ j	ƒ}	‡ fdd„dD ƒ}
ˆ  ddg¡ tdd„ ˆ j	D ƒƒ}t|	|ƒ ttdd„ ˆ j	D ƒƒtˆ j
ƒƒ ‡ fdd„dD ƒ}t|d |d ƒ t|d |d ƒ t|d |d ƒ |}
ˆ  ddgdg¡ ‡ fdd„dD ƒ}t|d |d  |d ƒ t|d |
d ƒ tjtdd�� ˆ  ddg¡ W 5 Q R X |}
ˆ  ddgddgg¡ ‡ fdd„dD ƒ}t|
d |
d  |d |d  ƒ t|d |d  |d |d  ƒ tjtdd�� tˆ ddgd diƒ W 5 Q R X tˆ ddgd t d!¡id"d#� d}d$D ]2}zˆ |  W n tk
�rÜ   |d7 }Y nX �q®t|dƒ t ˆ j
dd…df dk¡�rt‚t ˆ j
dd…df dk¡�r0t‚tˆ ddgd%d&iƒ‰ t t ˆ j
dd…df d!kˆ j
dd…df d&k¡¡�s€t‚tˆ d  j
jd |
d |
d  ƒ tˆ d  j
jd ˆ d% j
jd ƒ t| |ddddd'œtt|td�‰ dd(d)ggd*d+gdg }}‡ fd,d„||fD ƒ}t|d j
dd…df |d j
dd…df ƒ tjtd-d�� ˆ  ddd)gg¡ W 5 Q R X tjtd.d�� ˆ  d*d+gd/g¡ W 5 Q R X tjtd0d�� ˆ  d1dg¡ W 5 Q R X ˆ ddd2g }t|d/ ƒdk�sæt‚t|d3 ƒdk�süt‚| ¡ \}}t|ƒdk�st‚|jd4k�s*t‚ˆ  t d5¡¡ ttˆ d* ƒdƒ tˆ d+ ƒdk�sbt‚ˆ  d*d+g¡ ttˆ d* ƒdƒ ttˆ d+ ƒdƒ t| |dddddœtt|td�‰ ˆ  ¡  ¡ \}}ˆ  ¡  t ˆ jƒ¡\}}t|j
|j
ƒ tjt!d6d�� ˆ  d7¡ W 5 Q R X tjt!d8d�� ˆ  d9¡ W 5 Q R X dS ):z6Test epoch count equalization and condition combining.NrD   rO  c                 S   s   g | ]}|s|‘qS rs   rs   r  rs   rs   rt   rz   û  s      z!test_epoch_eq.<locals>.<listcomp>rŽ   c                 S   s   g | ]}|s|‘qS rs   rs   )rx   Zlgrs   rs   rt   rz   þ  s      r   Zmintime©ÚmethodÚtruncaterA   rN   r—   ©rã   rä   r¡  r¢  rÇ  c                 S   s   g | ]}|s|‘qS rs   rs   r  rs   rs   rt   rz     s      c                    s   g | ]}ˆ | j jd  ‘qS r   ©rc   rÙ   ©rx   Úkeyrí  rs   rt   rz     s     rã   rä   c                 s   s   | ]}|d krdn|V  qdS ))ZEQUALIZED_COUNTrs   Nrs   r  rs   rs   rt   r•     s   ÿz test_epoch_eq.<locals>.<genexpr>c                 S   s   g | ]}|s|‘qS rs   rs   r  rs   rs   rt   rz     s      c                    s   g | ]}ˆ | j jd  ‘qS r   rb  rc  rí  rs   rt   rz     s     r¡  c                    s   g | ]}ˆ | j jd  ‘qS r   rb  rc  rí  rs   rt   rz      s     zkeys must be strings, gotr�   r¢  c                    s   g | ]}ˆ | j jd  ‘qS r   rb  rc  rí  rs   rt   rz   )  s     zvalue must not already existr¦  r¥  F©rB  rº  Úcdé"   )úa/xúb/xúa/yúb/yri  rk  rh  rj  c                    s   g | ]}ˆ   ¡  |¡d  ‘qS r   )rB  rÕ  )rx   r¡  rí  rs   rt   rz   C  s   ÿzmix hierarchical and regularz"overlapping. Provide an orthogonalr	  znot found in the epoch objectz
a/no_matchrŒ   rV  ©rA   r|   zreceived a stringzhello!zlist-like or Noner[   )"r¿   r­   r   rd   re   Ú
event_id_2r2  r	   r¥   r„   rc   r…   rÙ   r+   r  r   rÕ  r¡   r¦   r§   rØ   r,   ri   Zint32r1  rU  rª   Ú
logical_orr   r}   r¤   rB  r#  rÞ   )rq   rc   r¾   Úevents_1rè   Zevents_2ré   Zepochs_3Zepochs_4Z	drop_log1Z
old_shapesZ	drop_log2Z
new_shapesZcaughtrd  Zcond1Zcond2ÚesZepoZepo_Z	drop_indsr£   rs   rí  rt   Útest_epoch_eqò  sê    ÿÿ   ÿÿ
ÿ
ÿ""
""ÿ""   ÿ
ÿ.   ÿrq  c              
   C   s|  t | ƒ}tƒ \}}}tjtt||dddœtt|d� tjtt||dddœtt|d� tjtt||dddœtt|d� tjtt||dtt|d� tjtt||dgtt|d� tdd	d
�}t t	t|||tt¡ tjt	t|||ttdd� tj
tdd�� t|||ttdd� W 5 Q R X t|||ttdd� t||ddgtt|d�}|j ¡ D ]\}}tt|ƒ|ƒ �qJt||dddœtt|d�}t t|jd¡ |d  ¡ }	||dd…df dk }
t|	ƒt|
ƒk�sÈt‚t||dddœtt|dd�}t t|jd¡ t |d¡}|j|dd� t|ƒ}||fD ]@}|d  ¡ }	||dd…df dk }
t|	ƒt|
ƒk�st‚�qt|d j|d jƒ t||dddddœtt|dd�}ttt|d j ¡ ƒƒddgƒ |d }|d }t|j|jƒ t| ¡ | ¡ dƒ |ddg }tt  !|jdd…df dk|jdd…df dk¡ƒ�s.t‚t|j|jƒ t| ¡ | ¡ dƒ t|d j"dƒ t|ddg d j"dƒ dS )zCTest accessing epochs by event name and on_missing for rare events.rE   rœ   rO  ÚspamÚeggs)rã   rD   r‹   rA   éNa¼ ©Zaud_lZdoes_not_exist)rË  zNo matching eventsr�   Úwarnrð   rD   rº  rÊ  rã   NTr  rp  rq  rN   r—   ra  rí   rä   )#rž   r¿   r¦   r§   rÞ   r   rd   re   r/  rØ   rƒ  r„  r­   Úitemsr	   rk   r1  Ú__getitem__r×   r¥   r…   ru  rv  rw  r   r   rc   r#  ÚsortedÚvaluesr   rª   ri   rn  r§  )rx  rØ  rq   rc   r¾   Úevent_id_illegalrr   r“   rŸ   r@   Zevent_arz  r¾  r™  rB  Zepochs4Zepochs5Zepochs6rs   rs   rt   Útest_access_by_namej  s–     ÿ  ÿ  ÿÿÿ ÿ ÿÿ   ÿÿÿr|  c            	   	   C   s²  t ƒ \} }}t| |dddœ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 | ¡ }tt	 |j|j¡ƒsÂt‚tt	 dddg|j¡ƒsÞt‚|jdd�}d}t|ƒt|jƒk�st‚t|jƒt|d ƒk�s"t‚t|ƒ| ¡ jk�s:t‚|jddgd�}~~|jdddgd	�}t	 | ¡ ¡}t|jdd…df |d d ƒ t|jdd…df |d d ƒ dS )zTest epochs Pandas exporter.rA   rD   rº  rO  z options. Valid index options arer�   r‹   rÊ  )Úindexz"qux" is not a valid optionZquxz#index must be `None` or a string oré�  ÚtimeÚepochr:  T)Úlong_format)r:  r€  r  ÚchannelZch_typerN  r‚  )r�  r}  Nr   rÔ   g  4&õkC)r¿   r   rd   re   r¦   r§   rØ   Úto_data_framerÞ   ri   r¤   rª   Úin1drK   Úcolumnsr…   r«   r¥   r×   rÝ   Zhstackr   rz  )	rq   rc   r¾   rr   Zdf_wideZdf_longr—  Údfr@   rs   rs   rt   Útest_to_data_frame´  s,     r‡  r}  r  r:  r€  c                 C   s–   t ƒ \}}}t||dddœtt|d�}|jdddg| d�}t| tƒsJ| g} |jj| ksZt	‚tt
d	d
dgƒt
| ƒ ƒ}t|ƒr’tt ||j¡ƒs’t	‚dS )z.Test index creation in epochs Pandas exporter.rA   rD   rº  rO  é   r¥  é   )r¾   r}  r:  r  r€  N)r¿   r   rd   re   rƒ  r  r#  r}  r4  r…   r«   r¥   rª   ri   r„  r…  )r}  rq   rc   r¾   rr   r†  Z	non_indexrs   rs   rt   Útest_to_data_frame_indexÕ  s    
rŠ  Útime_format©NÚmsr   c                 C   sn   ddl m} tƒ \}}}t||dddœtt|d�}|j| d�}tjtj	|dœ}t
|d	 jd ||  ƒsjt‚d
S )z/Test time conversion in epochs Pandas exporter.r   )Ú	TimedeltarA   rD   rº  rO  )r‹  rŒ  r  N)rä  rŽ  r¿   r   rd   re   rƒ  ri   Úfloat64Úint64r  Úilocr…   )r‹  rŽ  rq   rc   r¾   rr   r†  Zdtypesrs   rs   rt   Útest_to_data_frame_time_formatç  s    r’  c                     s.  t ƒ \} }}dD �]H‰ t| |dd… ttt|ˆ d�}t‡ fdd„|jd D ƒƒsTt‚ˆ rÂ| ¡  t‡ fdd„|jd D ƒƒs€t‚t	 
t|j|jd d	 d
di¡ t	 
t|jd¡ 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	j
tt| |dd… ttt|dd�	 dD ]ú}t| |dd… ttt|d|td�	jdd�}t| |dd… ttt|d|td�	jdd� ¡ }t| |dd… ttt|d|td�	}|jdd� t| ¡  ¡  ¡ | ¡ ddd� t| ¡ | ¡ ddd� t| ¡ | ¡ ƒ t| ¡ | ¡ ƒ t| ¡ | ¡ ƒ �q„| ¡  ¡ }	t dd„ |D ƒ¡}
t|	|
ƒ | ¡  t|j|jƒ t|j| ¡ ƒ t| |dd… ttt|ddd�jdd�}| ¡  ¡ }	| ¡  tt |j|	d	 ¡|jd	 ƒ dS )z+Test SSP proj methods from ProjMixin class.r  Nr—   rò   c                 3   s   | ]}|d  ˆ kV  qdS ©r  Nrs   r  ©rï   rs   rt   r•   û  s     z)test_epochs_proj_mixin.<locals>.<genexpr>r  c                 3   s   | ]}|d  ˆ kV  qdS r“  rs   r  r”  rs   rt   r•    	  s     r   r  Trr  rA   Fr  r–   Zcrazyr  )r¾   rï   r²   r  r  ç»½×Ùß|Û=çÙ}ÚõÐò¾:rb  c                 S   s   g | ]}|‘qS rs   rs   r,  rs   rs   rt   rz   0	  s     z*test_epochs_proj_mixin.<locals>.<listcomp>)r¾   rf   rï   )r¿   r   r­   rd   re   rª   rp   r…   r×   r¦   r§   rØ   r  Zdel_projr   r¥   r  r  r»  r   rB  r   ri   rl   Ú
_projectorrÛ   Údot)rq   rc   r¾   rr   r  Zn_projr²   r  Zepochs_noprojr@   r¿  rs   r”  rt   Útest_epochs_proj_mixinô  s¤    
ÿ  ÿ
 ÿ þþ 
     ýý
  þ  ÿ  ÿ
þþr™  c                     s   t ƒ \‰ } }| dd… } t tˆ jddd�ddd… tˆ jddddd�g¡}t |¡}ˆ  ¡  ‡ fdd	„|D ƒ¡ ˆ j ¡  ~d
}ˆ j 	¡ � dˆ jd< W 5 Q R X dD �]R}t
ˆ | tttdt|d�}|j}| ¡ }t
ˆ | tttdt|d� ¡ }t|j|jƒ t|jd |ƒ dD �]æ}dD �]Ø}tdƒD �]Æ}	t||||	ƒ |dk�rJ|n|}
|	dk�rtt
ˆ | ttt|t||d�	}nŠt t|
ƒdft¡}t t|
ƒ¡|dd…df< d|dd…d
f< t|
ˆ j|d||d�}|j 	¡ � |jd  |  < W 5 Q R X tt|ƒ|ƒ ˆ jdk�st‚|j|dk�r dndk�s,t‚|	dk�r>| ¡  t|jddd�}|j|d�}t|j|t|jƒƒ |dk�r‚| ¡  n|jdk�s’t‚t |j!t "|j!¡| ƒ t#|j$|j$ƒ | ¡ }t#|j%|j&dd�| ddd� t#||
ddd� �q(�q�qq¦dS )z"Test delayed projection on Epochs.Nr|   Tr  é   F©rµ   r¶   r¸   r¹   c                    s   g | ]}ˆ j | ‘qS rs   rJ  rK  rL  rs   rt   rz   I	  s     z'test_delayed_epochs.<locals>.<listcomp>rD   rm  rH  rš   )rï   r  rN  r   r  r  rN   )r   rA   )rï   r  r²   rN  rA   )rd   r­   rc   rï   rM   rO  r  r@  rø   rb  )'r¿   ri   Úconcatenater   rp   Úsortr  r   r.  rQ  r   r­   rd   re   r  r×   r	   rÙ   r‚   Úprintrj   r¥   rk   r¤   r.   rï   r…   r  r  rž   r„   r»  r   rK   rl   r   rÜ   r@   rf  )rc   r¾   rE  rN  Z	proj_dataZuse_tminZnoproj_datar²   rï   rì  Úcomprr   Zfake_eventsZ
picks_datar¯  r–  rs   rL  rt   Útest_delayed_epochsA	  s”    
 ÿÿ


 ÿ ÿ



  þ
 þÿ



ÿ þr   c                     sÐ  t ƒ \} }}t| |ttt|d�‰ ||dd…df tk }t tˆ jt	ˆ j
ƒg¡ t tˆ jt	ˆ j
ƒ d g¡ t tˆ jddgddgg¡ tˆ jt |dd…df tk¡d ƒ tt	ˆ jƒt	|ƒƒ t‡ fdd	„ttt	|ƒƒƒtˆ jƒ D ƒƒsôt‚ˆ j ¡ }t	ˆ j
ƒ}ˆ jddgd
d� tˆ  ¡ d| d ƒ tt	ˆ jƒt	|ƒƒ t‡ fdd„|ddg D ƒd
gd
ggƒ t|ˆ j |dddddg ƒ t|ˆ dd… j |ddg ƒ t|ˆ d j |dddddg ƒ dS )zTest dropping of epochs.rO  NrD   rA   rN   r—   r   c                 3   s   | ]}ˆ j | d kV  qdS )©ÚIGNOREDNr”   r’   rí  rs   rt   r•   �	  s   ÿz#test_drop_epochs.<locals>.<genexpr>r¢  rÈ  r_  rv   c                    s   g | ]}ˆ j | ‘qS rs   r”   r’   rí  rs   rt   rz   ˜	  s   ÿz$test_drop_epochs.<locals>.<listcomp>rŒ   rß  rå   )r¿   r   r­   rd   re   r¦   r§   Ú
IndexErrorr}   r¥   rc   rØ   r   r†   ri   Úwherer	   r„   rª   r«   r‚   r…   rB  Zdrop_log_stats)rq   rc   r¾   r.  r†   r/  rs   rí  rt   Útest_drop_epochs�	  s4    ÿÿ


ÿ
ÿ r¥  c           
   
   C   sp  t ƒ \}}}t|d dddgƒ t||dddœtt|t| d�}t||dditt|t| d�}|d }t|j|jƒ t|j|jƒ | �rZt|j	ƒt|j	ƒksœt
‚tt|j	|j	ƒƒD ]¨\}\}}t|tƒsÈt
‚t|tƒsÖt
‚d	|› d
|› d|› d
|› �}	d|k�rd|k�st
|	ƒ‚d|k�r>|dk�r>||k�s>|dk�s>t
|	ƒ‚|dkr®|dks®t
|	ƒ‚q®n|j	|j	k�slt
‚dS )z@Test that subselecting epochs or making fewer epochs is similar.r‰  i°ƒ  r   rA   rD   rº  r  rã   z
epochs1.drop_log[z] = z, 
epochs2.drop_log[r¢  rs   r¡  N)r¿   r   r   rd   re   r  rc   r†   r¥   r„   r…   r  rn   r  r¡   )
r²   rq   rc   r¾   r  r¾  Zdirà   rá   rÙ  rs   rs   rt   Útest_drop_epochs_multŸ	  s@       þ   þ
r¦  c               	      s¤  t dƒdd… \} }tt dt| jƒf¡tdg| jd dƒƒ}|j ¡ �  dD ]}| j| |j|< qNW 5 Q R X |  	|g¡ tt dt| jƒf¡td	g| jd d
ƒƒ}|j ¡ �  dD ]}| j| |j|< q´W 5 Q R X |  	|g¡ ddddg}|D ]Ž\\}}}}}t
| j||||d�}	t| |dddœtt|	d�‰ |�r:d}
n|�rFd}
n|�rRd
}
n|}
|
ˆ k�sdt‚t‡ fdd„|D ƒƒrðt‚qðt tˆ jd¡ t tˆ jd¡ dS )zTest membership API.TNrD   rA   zSEEG 001rM   Úseeg)ró   ZhighpassrH  ÚdigÚdescriptionZacq_parsÚexperimenterr   zDBS 001Údbs))rÄ   FFF)rI   r¶   r§  r«  ))rI   FFF)rÄ   r¶   r§  r«  ))FTFF)rI   rÄ   r§  r«  ))FFTF)rI   rÄ   r¶   r«  )rµ   r¶   r§  r«  rº  rO  r¶   c                 3   s   | ]}|ˆ kV  qd S r  rs   )rx   Úorí  rs   rt   r•   é	  s     z test_contains.<locals>.<genexpr>r‹   )r¿   r!   ri   rj   r¥   rÜ   r   rp   rQ  rD  r   r   rd   re   r…   rU  r¦   r§   rØ   Ú__contains__rÞ   )rq   rc   r§  rd  r«  r?   rµ   r¶   ZothersZpicks_containsÚtestrs   rí  rt   Útest_containsÁ	  sL    ÿÿýÿÿr¯  c                  C   s¸   t ƒ dd… \} }t| |tttdd�}|jdd… }|jdd… }|j}| ¡  |¡}t||jƒ t||jƒ tt	|ƒ| 
¡ jd ƒ | |¡ t||jƒ tt	|ƒ| 
¡ jd ƒ dS )z%Test channels-dropping functionality.NrD   TrÌ   rN   rA   )r¿   r   r­   rd   re   rK   rB  r¶  r	   r¥   r×   rÙ   )rq   rc   rr   Zdrop_chrK   Úch_names_origÚdummyrs   rs   rt   Útest_drop_channels_mixinï	  s    
r²  c               
   C   sâ   t ƒ \} }}t| |ttt|dd�}|jdd… }d|_t t	|j
|d g¡ d|_|j}| ¡  |¡}t||jƒ t||jƒ tt|ƒ| ¡ jd ƒ | |¡ t||jƒ tt|ƒ| ¡ jd ƒ tjtt| |tttg d� dS )	z#Test channel-picking functionality.Tr  NrN   Fr   rA   rO  )r¿   r   r­   rd   re   rK   r²   r¦   r§   r¨   r¶  rB  r   r	   r¥   r×   rÙ   rØ   )rq   rc   r¾   rr   rK   r°  r±  rs   rs   rt   Útest_pick_channels_mixin
  s&    ÿ
ÿr³  c               
   C   sŒ   t ƒ \} }}t| |ttt|ddd�}| ¡ }|jdd… }| |jdd… ¡ | |jdd… ¡ ||g}t|ƒ}|D ]}t	||jƒ qvdS )zTest equalization of channels.FTrî   rD   NrA   )
r¿   r   r­   rd   re   rB  rK   r¶  r   r	   )rq   rc   r¾   r  r¾  rK   Zmy_comparisonr£  rs   rs   rt   Útest_equalize_channels
  s     ÿr´  c                  C   s8   t ƒ \} }}tddd�}tjtt| ||tt|dd�	 dS )z$Test handling of invalid events ids.rA   rt  ru  Frò   N)r¿   r/  r¦   r§   rØ   r   rd   re   )rq   rc   r¾   r{  rs   rs   rt   Útest_illegal_event_id)
  s      ÿrµ  c               	      s®  t ƒ \‰‰ } ‡ ‡fdd„}tˆjdddd�} tˆjdddd�}tˆjdddd�}dD �]0}|| |d�}|||d�}|jjd	 r‚t‚|||d�}|j ¡  |j ¡  |j ¡  t||gƒ}tt	|jd
 ƒt	|jd
 ƒƒ tt	|j 
¡ ƒt	|j 
¡ ƒƒ tt	|j 
¡ ƒt	|j 
¡ ƒƒ tt	|j 
¡ ƒt	|j 
¡ ƒƒ | ¡ }	| ¡ }
tjdd„ ||fD ƒdd�}t|	j|
jƒ t|	|dd� t|	|
dd� qT|jjd	 �ršt‚| ¡ }|jjd	 �r´t‚|jjd	 �rÆt‚| d¡ t||gƒ | ¡ }t||gƒ}| ¡ }|jd  d8  < t tt||g¡ t tt||dd… g¡ |jd  d¡ |j ¡  t tt||g¡ | ¡ }|j ¡ � d|jd< W 5 Q R X t tt||g¡ | ¡ }|j ¡ � |jd  d7  < W 5 Q R X t tt||g¡ | ¡ }|j ¡ �" |jd d |jd d d< W 5 Q R X |j ¡  tjtdd�� t tt||g¡ W 5 Q R X | ¡ }|j ¡ � |jd d  d7  < W 5 Q R X t tt||g¡ | ¡ }|j ¡ � |jd d  d7  < W 5 Q R X t tt||g¡ | ¡ }d|jd< t tt||g¡ | ¡ }d|_t tt||g¡ | ¡ }| |jd  ¡ t tt||g¡ | ¡ }| |jd! ¡ |jjd	 �rrt‚t tt||g¡ | ¡ }d|_ t tt||g¡ | ¡ }d|j!d"< t tt||g¡ ||d#d�}t	|jd
 ƒd$k�sìt‚|j"}|dk	�s t‚||d#d�}| #|g¡ ~t	|jd
 ƒd$k�s2t‚|j"}t	|ƒt	|ƒ }}|| }|j|fd k�sht‚t|d|…d|…f |d%d� t||d…|d…f t $|¡d%d� dS )&zTest adding channels.c              
      s   t ˆˆ tttd|| d�S )NT)r²   rï   r¾   )r   r­   rd   re   rò   ©rc   rq   rs   rt   Úmake_epochs6
  s     ÿz-test_add_channels_epochs.<locals>.make_epochsTr´   rM  FrÂ  rò   Z	WRITEABLEr  c                 S   s   g | ]}|  ¡ ‘qS rs   )r×   r,  rs   rs   rt   rz   P
  s     z,test_add_channels_epochs.<locals>.<listcomp>rA   r  r–  rù   r   )rN   rD   NrD   r³  rM   r|   rK   Zch_namez
not uniquer�   ró   rþ   r‹   rª  rU   rC   rä   r  rN   rµ  )%r¿   r   rp   rÜ   rA  r…   Z_check_consistencyr-   r	   r¥   r¬   r×   ri   rœ  r   rÙ   r   rB  Úset_meas_daterc   r¦   r§   rØ   rÒ  Z_update_redundantr¨   rQ  rƒ  r„  r²   Ú
_set_timesr\  rf   r­   r—  rD  Úeye)r¾   r·  r5  Z	picks_eegrï   rr   Z
epochs_megZ
epochs_eegr¾  r½  r¿  rC  Zepochs_meg2Z	meg2_projZnew_projZn_megZn_eegZn_totrs   r¶  rt   Útest_add_channels_epochs2
  sÜ    




ÿÿ
ÿ
&
ÿ  
ÿÿÿ
ÿr»  c                 C   sî  t | ƒ}t d¡}d}dd„ tdƒD ƒ}dgd }t|||ƒ}tjt ddd	¡t d
t	¡ddgd f }t
|||tƒ}	|	jdddœksŠt‚t |	ƒ d¡sœt‚tjtdd�� t
|dd… ||tƒ W 5 Q R X t tt
|||ttdd�¡ tjtt
|||tdgd� t
|||tt t|ƒ¡d d� t |d¡}
|	j|
dd� t|
ƒ}| ¡ }t||ƒ t|	j|jƒ t|	j|jƒ t|	j|jƒ |	d  ¡  tt |	d jdd…df ¡t  dg¡ƒ tt|	dd… ƒdƒ d|d< d|ddd…dd…f< d|d< d|d< t
|||dtdd�td d�d d!d"�}	tt|	ƒt|ƒd ƒ t|	j!d d#gƒ tt|	j!ƒd
ƒ tt|	jƒt|	j"ƒƒ t #d¡}t
|||d$d%d&�}	|	 ¡ }t|t $|¡ƒ t
|dd…dd…dd…f ||d'd(�}	t|	jd'gƒ t|	 ¡ |dd…dd…dd…f ƒ |	j|
dd� t|
ƒ}t|jd'gƒ t| ¡ |dd…dd…dd…f ƒ |dd…df dk}|| }|| }t
|||dd$d)�}	t
||ƒ}	t|	jdd…df t t|ƒ¡ƒ t|	jdd…df t t|ƒt	¡ƒ t|	jdd…df t #t|ƒt	¡ƒ dS )*z Test creating epochs from array.)r|   rí   é,  r{   c                 S   s   g | ]}d |d  ‘qS )zEEG %03drA   rs   rw   rs   rs   rt   rz   ¼
  s     z%test_array_epochs.<locals>.<listcomp>rí   r¶   rA   rF   é<   r|   rD   rŒ   rç   z<EpochsArrayznumber of events must matchr�   Nr–   r‚  )r†   rp  Trq  r   rå   é¸  )r   rŒ   é–   )rD   rŒ   éÒ   )rN   rŒ   i  r;  rÒ   rV   rX   )rc   rd   r  r  r)  r*  zEEG 006rB   r›  )rd   rf   rS   )rc   rd   )rc   r­   rd   )%rž   rg   Zrandom_sampler‚   r   ri   Zc_r¤   rj   rk   r.   rd   r­   r…   rÑ  r¦   r§   rØ   r/  r¥   ru  rv  rw  r   r×   r   rÜ   r	   r   rc   ZplotÚuniquerl   r„   r†   rß   r\  )rx  Zbrowser_backendrØ  r@   rM   rK   Útypesrp   rc   rr   rz  r¾  r¿  Zep_datarÀ  ÚmaskZdata_1ro  rs   rs   rt   Útest_array_epochsµ
  s†    



þ ÿÿ 
*   þ
&$$
"$rÄ  c            	   	   C   sV  t ƒ \} }}t| |ttt|d�}| ¡ }||g}t|ƒ}t|jdd…df t	 
|jdd…df ¡ƒ t| ¡ jƒ}|d  d9  < t|ƒ}t| ¡ j|ƒ t|j|jd ƒ | ¡  ¡ }tjtdd��& t|| ¡  |jdd… ¡gƒ W 5 Q R X | t	 |jd¡¡ tjtdd�� t||gƒ W 5 Q R X t|jdƒ | ¡ }| d	¡ tjtd
d�� t||gƒ W 5 Q R X | ¡ }t||gƒ |jd d dd…df  d7  < tjtdd�� t||gƒ W 5 Q R X tjtdd�� tdƒ W 5 Q R X tjtdd�� t|dgƒ W 5 Q R X d|jd< tjtdd�� t||gƒ W 5 Q R X d|jd< t||gƒ | ¡ }| ¡ }tdd�|_tdd�|_tjtdd�� t||gƒ W 5 Q R X | ¡ dd… }tjt dd�� t||gƒ W 5 Q R X | ¡  ¡ }|jdd…df  t	 !|jdd…df ¡8  < tjt dd�� t||gdd� W 5 Q R X t||gdd� dS )zTest concatenate epochs.©rq   rc   r­   rd   re   r¾   Nr   rD   z epochs\[1\].info\['nchan'\] mustr�   rA   zcould not be broadcast)r?  NzBaseline must be sameró   rô   rN   r"  zinfo\['dev_head_t'\] differszmust be a list or tupler‹   zmust be an instance of Epochsr‚  zidentical keysz	was emptyznot chronologically orderedF)Z
add_offsetT)"r¿   r   r­   rd   re   rB  r/   r   rc   ri   rÁ  r#  r×   rÙ   r¡   r	   r„   r  r¦   r§   rØ   r¶  rK   r¹  ÚdeleterÜ   Ú_rawr•  rp   rÞ   r/  rƒ  r„  Úmin)	rq   rc   r¾   rr   r¾  Úepochs_listZepochs_concZexpected_shaper  rs   rs   rt   Útest_concatenate_epochs  st    
 ÿ ÿÿ
"

.rÊ  c               	      s  t ƒ \} }}t| |ttt|dd�‰ ‡ fdd„tdƒD ƒ}t|ƒ}tdƒD ]d}|j|tˆ ƒ |d tˆ ƒ … }|| jdd…df |dd…df  }t	||d  ƒdksHt
‚qH‡ fd	d„td
ƒD ƒ}t|ƒ}	dt ˆ jdd…df ¡ }
t |	jdd…df ¡|
k �s
t
‚dS )z(Test concatenating epochs on large data.T©rq   rc   r­   rd   re   r¾   r²   c                    s   g | ]}ˆ   ¡ ‘qS rs   re  rë  rí  rs   rt   rz   X  s     z1test_concatenate_epochs_large.<locals>.<listcomp>rN   rA   Nr   c                    s   g | ]}ˆ   ¡ ‘qS rs   re  rë  rí  rs   rt   rz   `  s     r½  g      R@)r¿   r   r­   rd   re   r‚   r/   rc   r¥   Úsumr…   ri   Úmax)rq   rc   r¾   rÉ  Z
epochs_catrì  ZevsZrel_posZlong_epochs_listZmany_epochs_catZmax_expected_sample_indexrs   rí  rt   Útest_concatenate_epochs_largeP  s     
  ÿ"&rÎ  c            
   	      sœ  t ƒ \} }}t| |ttt|d�}t| |ttt|dd�}| ¡ 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 ƒƒ�st
‚| ¡ }	|	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|g¡ t t|j|	¡ dS )z2Test epoch splitting / re-appending channel types.rÅ  TrË  Fr  r^  )rµ   r·   c                 3   s   | ]}|ˆ j kV  qd S r  rJ  ©rx   Úch©Z	epoch_newrs   rt   r•   t  s   ÿz$test_add_channels.<locals>.<genexpr>c                 3   s   | ]}|ˆ j kV  qd S r  rJ  rÏ  rÑ  rs   rt   r•   x  s     c                 3   s   | ]}|ˆ j kV  qd S r  rJ  rÏ  rÑ  rs   rt   r•   z  s   ÿg—Ñ~Zû!	@rM   r?  rV   N)r¿   r   r­   rd   re   rB  r   rD  rª   rK   r…   r   rÛ   rp   rQ  r   r  r¦   r§   r¨   rØ   rÞ   )
rq   rc   r¾   Zepoch_noprer€  Z	epoch_eegZ	epoch_megZ
epoch_stimZepoch_eeg_megZepoch_badsfrs   rÑ  rt   Útest_add_channelsf  sT        þ     þ
ÿÿrÒ  c                  C   s¢   d\} }}}t  | ||f¡}t  t  | ¡dg|  dg|  g¡j}tdg d�}dD ]L}t|||ƒ}t|||ƒ}	| |di¡ t	|	j
f|Ž}
||= tt|
ƒ|ƒ qPdS )	zDTest compatibility of the Epoch object with SEEG, DBS and ECoG data.)rŒ   r|   rí   r{   r   rA   Fr÷   )r§  r«  ZecogTN)ri   rß   rl   r¤   rP  r/  r   r.   rÓ  r   rp   r	   r¥   )rE  r‡   rV  rM   r@   rc   Z	pick_dictrd  rp   rr   r¾   rs   rs   rt   Útest_seeg_ecog‹  s    $rÓ  c                  C   sX   t ƒ dd… \} }t| |dd… dd�}t| |dd… dddd�}tt|ƒt|ƒƒ dS )	z>Test default event_id, tmax tmin values are working correctly.NrD   rA   TrÌ   rB   rC   )rd   re   r²   )r¿   r   r	   r}  )rq   rc   Zepoch_1Zepoch_2rs   rs   rt   Útest_default_valuesš  s    rÔ  c              
   C   s”	  ddl m}m}m} tj ddd¡}ddg}t|dƒ}tjd	gd
 dgd
  dgd dgd  dgd  dgd  gdd�j	}||ddgd�}t |d t
¡|d< t |jd ¡}t |t t|ƒdg¡g¡ t¡}d|d
d…df< dddœ}	tƒ �}
t|||||	dd�}W 5 Q R X |
 ¡ }
d}|
 |¡dk�sDtd|› d|
› �ƒ‚tdƒ� tƒ �}
||_W 5 Q R X W 5 Q R X |
 ¡  ¡ }
|
dk�s�t|
› ƒ‚t t|ƒ¡}t|jj|ƒ t|ddg jƒt|ddg jƒk�sÖt‚t|ddg jj|ddg ƒ t|d ƒd
k�s
t‚t t¡�, t|j |j!|jdd… d|j"|jd�}W 5 Q R X t t¡� t|||j#dd… d �}W 5 Q R X |j$|d fD ]*}t t¡� t|||d �}W 5 Q R X �q‚t t¡�& | %¡ }tj|d!< t|||d �}W 5 Q R X t|d" ƒd
k�sút‚t|d# ƒdk�st‚t|d$ ƒdk�s&t‚t|d# ƒt|d# jƒk�sFt‚t t&¡� |d%  W 5 Q R X t|j'|ƒ | (d¡ t|j'|dd… ƒ t|jj|dd… ƒ | (ddg¡ t|j'|dd… ƒ t|jj|dd… ƒ tt|ƒd&ƒ t)| ƒ}t* +|d'¡}t* +|d(¡}tƒ �}
|j,|ddd)� W 5 Q R X |
 ¡ d*k�s>t‚t-|dd+�}t.|j|jƒ t|j |j!|jd|j"|j|j'd,�}t.|j|jƒ t t/¡� t dg¡|_W 5 Q R X |d }|j,|dd-� t-|ƒ}t.|j|jƒ t0ƒ ��X t-|ƒ}t1|jt2ƒ�süt‚t1|jd t3ƒ�st‚|jd
 d dk�s*t‚t-|ƒ}t1|jt2ƒ�sDt‚t1|jd t3ƒ�sZt‚|jd d dk�srt‚|d }|jd
 d dk�s’t‚|jd d dk�sªt‚t.|j|jƒ |j,|dd-� t t&¡�}|d"  | 4d.¡ W 5 Q R X d|_t t&¡�}|d"  | 4d/¡ W 5 Q R X ~t-|ƒ}t.|j|jƒ W 5 Q R X t-|ƒ}t.|j|jƒ tj dd¡}t5 dd0¡}t5j6 7||¡}dddgd1ddgd2ddgd3ddgg}|d4d5„ t8t|ƒƒD ƒƒ}t5j9||d6d7|d8�}| :¡  t|ƒt|jƒk�sît‚d|jd9< t|d:  ;¡ | ;¡ ƒ |jj(|jjd dd;� t|jƒt|ƒd k�sBt‚tjtd<d=�� |d:  W 5 Q R X tj dd>¡}t5 dd0¡}t5j6 7||¡}t3|dd?dd@�}dddgdddgg}||dAdBdCgd�}t9f |d|dDœ|—Ž}| :¡  t|ƒdk�sòt‚t|jƒdk�st‚tjtdEd=��& t9f |d|j#dd… dDœ|—Ž W 5 Q R X dFD ] }dddgdddgg}t9f ||dGœ|—Ž}| :¡  t|ƒdk�sŠt‚dddgdddgg}t9f |||dHœ|—Ž}| :¡  t|ƒdk�sÎt‚t|jƒdk�sDt‚�qD|dI|ddddJdJ|gdKd�iƒ}tj <¡ }t5j|j=dLdM�t5 dNdOdP¡dIdi|dQ�}t|dI ƒdRk�	sNt‚t|dS ƒdk�	sdt‚t|dT ƒdk�	szt‚t|dU ƒdk�	s�t‚dS )Vz"Test metadata support with pandas.r   )rç  ÚSeriesÚNAr|   rD   r=  rã   rä   r;  rö   rŒ   r‹  rN   r¡  õ   ÂµÚobjectrO   ÚnumÚletter)r…  rA   Nr–   )ÚzeroÚoneT)rã  rc   r­   r³   zAdding metadata with 2 columnsrÃ  rÄ  z*Replacing existing metadata with 2 columnsrÜ  )rd   r­   rã  )rã  r‹   znum < 2znum < 5zletter == "b"zblah == "yo"r�   ztmp-epo.fifztmp-one-epo.fif)r³   rr  rÏ   rÌ   )rd   r­   rã  r†   rq  z'.*Pandas query could not be performed.*z^((?!Pandas).)*$r{   rv   r?  r¼  c                 S   s   g | ]}t |d �‘qS ))r8  )r/  )rx   r8  rs   rs   rt   rz   2  s     z!test_metadata.<locals>.<listcomp>gš™™™™™©¿rV   )rc   rd   re   rã  Znew_keyznew_key == 1)Zinplacez-metadata must have the same number of rows .*r�   ré  r%  )rq   rd   re   rf   ÚonsetÚdurationrN  )rc   r­   rã  zsame number of rows)r}   r€   )rc   r~   )rc   r~   rã  r†  FÚboolean)rß  r  iô  )rÝ   r  éú   r¶   )r@   rp   r­   rã  rß  z	A == Trueznot AzA.isna())>rä  rç  rÕ  rÖ  ri   rõ  rh   r   rl   rP  rR  r¤   rÙ   Zcolumn_stackrj   r¥   rm   rk   r7   r.   r3  rÐ  r…   r6   rã  Ústripr   r}  rc   r¦   r§   rØ   rÛ   rp   r­   r‘  rz  rB  r1  r†   r}   rž   ru  rv  rw  r   Úassert_metadata_equalrÞ   r8   r  r#  r/  r�   rƒ   r>   r!   r‚   r   r2  r×   rR  Zstandard_normal)rx  rç  rÕ  rÖ  r@   r³  rp   Úmetarc   r­   r  rr   rÙ  ÚindicesZ
epochs_arrZtmp_metarØ  rz  Ztemp_one_fnamerÀ  Z
epochs_oneZepochs_one_readZepochs_one_nopandasÚexcinfoZepochs_one_nopandas_readÚraw_datarq   rã  ÚoptsZerrg   rs   rs   rt   Útest_metadata¢  sd   
&ÿþ"
  ÿ$
* þ"
 
 ý
ÿÿÿ$ÿ
ÿÿ*  ÿÿÿ

ürè  c                 C   s  |dkr| dksþt ‚nèt|tƒr¦t| tƒs.t ‚t| ƒt|ƒksBt ‚tt| |ƒƒD ](\}\}}t| ¡ ƒt| ¡ ƒksPt ‚qP| ¡ D ] }|| || ks‚t ||fƒ‚q‚nXddl}t||jƒs¾t ‚t| |jƒsÎt ‚t	| j
ƒt	|j
ƒksæt ‚| |k}| ¡  ¡ sþt ‚dS )zAssert metadata are equal.Nr   )r…   r  r#  r¥   r  rn   r¬   rä  rç  r«   r…  rª   )ÚgotÚexprì  Úgr£  rd  rä  Úcheckrs   rs   rt   râ  p  s    
 râ  )Úall_event_idÚ
row_eventsÚ
keep_firstÚ	keep_lastrA   rN   r—   r   )rÈ   rÉ   rÊ   rË   r¡  )rÈ   rÉ   rÇ   rº  r¡  c              
   C   s¶  t ƒ \}}}d\}}|jd }	t|| ||||||	d�}
|
d sftjtdd�� tf |
Ž W 5 Q R X dS tf |
Ž\}}}t|ƒt|ƒksŠt‚|r¨t	|d ƒt	|ƒksÄt‚nt	|d ƒt	| 
¡ ƒksÄt‚|dkrÐg n|}|dkràg n|}tt	| 
¡ ƒt	|ƒB t	|ƒB ƒ}|D ]}||jk�st‚�q| ¡ D ](\}}|d }t || d	¡�s(t‚�q(| ¡ D �]B\}}tt	| 
¡ ƒt	|ƒB t	|ƒt	|d ƒ B ƒ}|D �]}||k�s®||k�rt|| tƒ�sÂt‚|d
k�rÖ|dk�s|dk�rê|dk�s|dk�rþ|dk�st || ¡�rt‚||k�rV|| k�rV|d|› � dk�s˜t|d|› � tƒ�s˜t‚nB||k�r”|| k�r”|d|› � dk�s”t|d|› � tƒ�s”t‚�q”�qZt||||dd� dS )zTest that make_metadata works.)r”  r[   rM   )rc   r­   rî  rï  rð  rd   re   rM   r­   zmust contain at least oner�   Nr½   r   rã   rM  rä   r‰  r¡  r1  Zfirst_Zlast_r±   )rc   r­   rã  r³   )r¿   rp   r/  r¦   r§   rØ   r3   r¥   r…   r«   r¬   ry  r…  Ziterrowsri   rT  r  rR  Úisnanrž   r   )rí  rî  rï  rð  rq   Z
all_eventsr£   rd   re   rM   Úkwargsrã  rc   r­   Zevent_namesr½   ÚrowZrow_idxrs   rs   rt   Útest_make_metadata„  st    
  üÿÿ
ÿÿþþÿ
ÿ
ÿrô  c                  C   st   dddgdddgdddgg} t jt j tj dd¡t  dd¡¡| d	�}t|j	t 
| ¡ƒ t|ƒsdt‚| ¡ spt‚d
S )zTest that events can be a list.rv   r   rA   r?  r¼  r|   r;  r{   )rc   N)rƒ   r   r>   r!   ri   rõ  rh   r   r   rc   rl   r­  r…   r®  )rc   rr   rs   rs   rt   Útest_events_listÎ  s    
ÿþrõ  c              	   C   sô   t | ƒ}tj tj d¡ dd¡t dd¡¡}t 	|d¡}t 
||¡}t |d¡}|j|dd� t |¡snt‚tjtd	d
�� |j|dd� W 5 Q R X t |d¡}|j|dd� t |¡s¾t‚tjtdd
�� | |¡ W 5 Q R X |j|dd� dS )z)Test saving with overwrite functionality.r   rv   ré  r{   rA   ztest_v1-epo.fifFrq  zDestination file exists.r�   ztest_v2-epo.fifTÚexistsN)rž   rƒ   r>   r!   ri   rõ  rö  rh   r   r   r   ru  rv  rw  r÷  r…   r¦   r§   ÚIOError)rx  rØ  rq   rc   rr   Zfname1Zfname2rs   rs   rt   Útest_save_overwriteÙ  s"    
ÿrø  Ú
is_complexz	fmt, rtol)Úsingleg�íµ ÷ÆÀ>)Údoubler•  c                 C   sØ   t ƒ dd… \}}| ¡  |r,|jddd� t||dd… dd�d }t t| ƒd	¡}|j||d
� | ¡  	¡ }	t
|d|d�}
|
 ¡ }|r�tjntj}|	j|ks¤t‚|j|ks²t‚|dkrÆ|sÆ|sÆd}t||	|d� dS )z=Test whether epochs of hilbert-transformed data can be saved.NrD   F)ÚenvelopeZn_fftrA   TrÌ   r   rp  )Úfmtr  rú  g-Cëâ6*?rÆ  )r¿   r  Zapply_hilbertr   ru  rv  rž   rw  r×   rB  r   ri   Z
complex128r�  rP   r…   r   )rx  r²   rù  rý  rc  rq   rc   rr   rz  r@   rÀ  Z	data_readZ
want_dtypers   rs   rt   Útest_save_complex_dataÿ  s     rþ  c              	   C   sØ   t ƒ dd… \}}tdddd�}ddg|jd	< tj|||d
�}|jt t| ƒd¡dd� d|j	ksft
‚t|ƒdksvt
‚g |jd	< tj|||d
�}tjtdd��  |jt t| ƒd¡dd� W 5 Q R X t|ƒdksÔt
‚dS )z<Test that having the first epoch bad does not break writing.NrD   ç»½×Ùß|û=rÀ   rÂ   )rI   rÄ   r¹   r  r	  r´   r  zsample-epo.fifTrq  r   zno datar�   )r¿   r/  rp   rƒ   r   rw  ru  rv  rž   r†   r…   r¥   r¦   rƒ  r„  )rx  rq   rc   r  rr   rs   rs   rt   Útest_no_epochs  s    
$r   c               	   C   s¤   t ƒ dd… \} }t| |dd… dd�}tjtdd�� | jd7  _W 5 Q R X tjtdd�� | jd7  _W 5 Q R X tjtdd�� d|jdd…< W 5 Q R X dS )	z*Test that the times property is read only.NrD   rA   TrÌ   z	read-onlyr�   rS   )r¿   r   r¦   r§   rØ   Z_times_readonlyrÜ   )rq   rc   rr   rs   rs   rt   Útest_readonly_times*  s    r  c               	   C   sh   t ƒ dd… \} }t| |dd… dd�}| ¡ }t|ƒt|jƒksFt‚tt |dddd	d
g¡ƒsdt‚dS )zTest channel types mixin.NrD   rA   TrÌ   rÄ   rI   r¶   r¹   r·   )	r¿   r   rÚ   r¥   rK   r…   rª   ri   r„  )rq   rc   rr   rL   rs   rs   rt   Útest_channel_types_mixin6  s
    r  c                  C   sJ  d\} }}d}t  | ||¡}t t | ¡dg|  dg|  g¡j}d|dd…df< tddd�}t||d	ƒ}t||||d
�}dD ]B}	|	dkr’dd„ }
n|	dkr¢dd„ }
|j	|	d�j
}t||
|ƒƒ q||j	dd�}t|ƒdksÜt‚|d jdksît‚t|d j
tj|dd… dd�ƒ |d jdk�s$t‚t|d j
tj|dd… dd�ƒ dS )zTest average methods.rG  r{   r   rA   rD   r�  N)r*  Úsecondr¶   r�  )rf  Úmedianrf  c                 S   s   t j| dd�S ©Nr   r  )ri   rf  ©r@   rs   rs   rt   ÚfunO  s    z!test_average_methods.<locals>.funr  c                 S   s   t j| dd�S r  )ri   r  r  rs   rs   rt   r  R  s    r^  T)Zby_event_typer*  r  r  )rg   rh   ri   rl   r¤   rP  r/  r   r.   r  r@   r   r¥   r…   rÔ  rf  )rE  r‡   rV  rM   r@   rc   r­   rp   rr   r_  r  r=  r  rs   rs   rt   Útest_average_methods?  s*    
$
"r  Úrelativec                 C   sŽ   d}t ƒ dd… \}}t||dd… ddd�}| ¡ j|| d�}|j|| d� ¡ }t|j|jƒ t|j|jƒ t|j|jƒ t|j	|j	ƒ dS )zTest the timeshift method.çÙÎ÷Sã¥‹?NrD   rA   T©r²   rf   )r	  )
r¿   r   r  Ú
shift_timer   rÜ   r	   r*  r)  r@   )r	  Ú	timeshiftrq   rc   rr   ÚavgZavg2rs   rs   rt   Útest_shift_timea  s    r  c                 C   sR   d}t ƒ dd… \}}t||dd… | dd�}| sDt t|j|¡ n
| |¡ dS )zDTest whether shift_time throws an exception when data is not loaded.r
  NrD   rA   r  )r¿   r   r¦   r§   r¨   r  )r²   r  rq   rc   rr   rs   rs   rt   Ú&test_shift_time_raises_when_not_loadedo  s    r  r˜  c                    s�  t | dd�}dg|jd< tj|dddd�}t|ƒd	ks:t‚td
dddd�}tddd�}d|jd< d‰ ˆ t 	dt|ƒd ¡ }||jd|dd…df |j
 d f< ‡ fdd„}tj||fd|i|—Ž}|sÐ| ¡  t|ƒt|ƒksät‚||ƒ}	tt 	t|ƒ¡|	ƒ t|j|	ƒ tj||f||dœ|—Ž}|�s4| ¡  dt|ƒ  k �rTt|ƒk �sZn t‚||ƒ}	t|	|jƒ |	}
tj||fd|i|—Ž}|�s˜| ¡  t|ƒt|ƒk�s®t‚|j|dd� t|j|
ƒ ||ƒ}	t|	|jƒ tj||fd|i|—Ž}|�s| ¡  t|jt 	t|ƒ¡ƒ ddg}t t 	t|ƒ¡|¡}| |¡ t|j|ƒ t | ¡ dd…df jdd�ˆ  ¡}	|	 t¡d }	t|	|jƒ dS )zTest epochs drop and selection.TrÌ   r  r´   rA   rC   rö   )Úidr%  rÞ  r|   rB   Fr›  )rd   re   rï   rf   rÀ   rÿ  )rÄ   rI   rS   r   g‚vIhÂ%<=Nc                    s4   t  |  ¡ dd…df jdd�ˆ  ¡}| t¡d S )z3Get the desired selection from our modified epochs.Nr   r–   r  rA   )ri   rt  r×   rÍ  rm   rk   )rr   r†   ©Úscalers   rt   Ú_get_selection�  s    &z2test_epochs_drop_selection.<locals>._get_selectionr²   )r²   r  r—   )r  r³   rN   r–   r  )r"   rp   rƒ   r   r¥   r…   r/  rÛ   ri   r¤   r"  r   r2  r   r†   r©   r}   rt  r×   rÍ  rm   rk   )r˜  r²   rq   rc   rò  r  r®   r  rr   r†   Zgood_selectionZdrop_idxZwant_selectionrs   r  rt   Útest_epochs_drop_selection{  sX    
$&
&r  r(  )ÚfileÚbytesc           
   
   C   sî   t |ƒ}tj tj d¡ dd¡t dd¡¡}t 	|d¡}tj
|||d�}t |d¡}|j|dd	� t|d
ƒ�l}| dkr„t| ¡ ƒn|}	|	jr’t‚|jrœt‚tjtdd�� t|	dd� W 5 Q R X |	jrÌt‚|jrÖt‚W 5 Q R X |jsêt‚dS )z%Test handling with file-like objects.r   rv   ré  r{   rA   rÌ   rp  Trq  Úrbr  zpreload must be used with filer�   FN)rž   rƒ   r>   r!   ri   rõ  rö  rh   r   r   r   ru  rv  rw  r  r   ÚreadÚclosedr…   r¦   r§   rØ   r   )
r(  r²   rx  rØ  rq   rc   rr   r˜  Zfile_fidr  rs   rs   rt   Útest_file_like¼  s"    
ÿ


r  c              	   C   s€   t ƒ \}}}t||dd… ttt| d�}| sZtjtdd�� |jdd� W 5 Q R X | 	¡  |jdd�}|d }t
|| ¡ ƒ dS )zTest epochs.get_data(item=...).Nr|   rÌ   zitem must be Noner�   r   rÓ   )r¿   r   r­   rd   re   r¦   r§   rØ   r×   r2  r   )r²   rq   rc   r£   rr   Zone_dataZone_epors   rs   rt   Útest_epochs_get_data_itemÓ  s    r  c                  C   sâ   t ƒ \} }}dddddœ}t| jddddd�}t| ||d|tddd	d	d
�tddddd
�d�}t|j ¡ ƒddddgkszt‚t|j	 ¡ ƒddddgks˜t‚|jddddd� t|j ¡ ƒddgksÄt‚t|j	 ¡ ƒddgksÞt‚dS )z:Test that epochs.pick_types removes keys from reject/flat.rA   rD   rN   r—   rÇ   Tr›  r•  r%  rÃ   ro  )r²   r¾   r  r  r¶   r¹   rI   rÄ   FN)
r¿   r   rp   r   r/  ry  r  r¬   r…   r  )rq   rc   r£   r­   r¾   rr   rs   rs   rt   Ú test_pick_types_reject_flat_keysá  s    þr  c               	   C   s`  t tdd�} t| ddd�}tdgdgdgd�}|  |¡}t|d	dd�}t|ƒd
ksVt‚t|ƒd
ksft‚t|ƒt|ƒkszt‚t| dd�}t|jƒd
ks˜t‚t| ddd�}t|jƒdks¸t‚t| ddd�}t|jƒdksØt‚t|jdd…df t	 
|jdd…df ¡ƒ tjtdd�� t| ddd� W 5 Q R X t| dddd�}d|jk�rXt|jƒdk�s\t‚dS )z;Test dividing raw data into equal-sized consecutive epochs.TrÌ   rA   )rÞ  r²   r   rŒ   r'  )rÝ  rÞ  r©  rö   r|   )rÞ  rC   ©rÞ  Zoverlaprí   gÍÌÌÌÌÌì?rv   Nzoverlap must ber�   çš™™™™™ñ?rD   )rÞ  r²   r  ræ   )r"   r¼   r   r   ro   r¥   r…   rc   r   ri   rÁ  r¦   r§   rØ   r­   )rq   rr   r9  Z	raw_annotZepochs_annotZ	epochs_olZepochs_ol_2rs   rs   rt   Útest_make_fixed_length_epochsñ  s.    
ÿÿr   c              	   C   s¼   t  d¡}tdddƒ}t  dddgt j¡}tjtdd�� t|||ƒ W 5 Q R X |t j	 }tjtd	d�� t|||ƒ W 5 Q R X t||ƒ}||_
tjtd
d�� | | d ¡ W 5 Q R X dS )z2Test epochs with event numbers that are too large.r@  rA   r{   r¶   r   l        zshape \(N, 3\)r�   zmust not exceedzexceeds maximumrþ  N)ri   rj   r   rl   r�  r¦   r§   rØ   r.   Únewaxisrc   rÞ   rw  )rx  r@   rp   rc   rr   rs   rs   rt   Útest_epochs_huge_events  s    


r"  c                 C   s&   |t jkr| ¡ }d|d< t| ||ƒS )Niüÿÿ)r   r–   )r#   ZFIFF_MNE_EVENT_LISTrB  r%   )r  r(  Zarrrs   rs   rt   Ú_old_bad_write   s    
r#  c           	   	   C   sT  t  d¡}t  dddgtddgg¡}t ddd¡}t |||¡}t |||¡}tjt	dd	�� t 
||f¡}W 5 Q R X td|jd
d
…df ƒ | d }| |¡ t|ƒ}td|jd
d
…df ƒ t|jd
d
…df td ƒ | tjdt¡ |j|dd� tjt	dd	�� t|ƒ}W 5 Q R X td|jd
d
…df ƒ t|jd
d
…df td ƒ d
S )z#Test overflow events during concat.)rD   r|   r;  r   rA   rD   r|   r{   r¶   zconsecutive increasingr�   Nrþ  r%   Trq  zIncorrect events)ri   rj   rl   r&   rƒ   r   r.   r¦   rƒ  r„  r/   r
   rc   rw  r   Úsetattrrr   r#  )	rx  Úmonkeypatchr@   rc   rp   rè   ré   rr   r˜  rs   rs   rt   Útest_concat_overflow'  s&    

r&  c                 C   s°  d}d| }t  dd| |¡}tj dt j d | d¡ dd¡d	 d	 }d
g}dg}tj|||d�}tj	 
||¡}tdd�}	t  dd|	d gg¡}
tj||
|	dddd�}d}d}| ¡ d||d …f }|dd… }|| ¡ 8 }| ddd¡}t| ¡ |ƒ ~~~~| ¡  ¡ jddd�}t|j|jƒ dt|ƒk�s<t‚t| ¡  ¡ | ¡  ¡ dd… ƒ | d }| |¡ t |¡}t|j|jƒ dt|ƒk�sšt‚t| ¡ | ¡ ƒ dS )zBEpochs.baseline should be retained if baseline period was cropped.r;  rö   r   rD   g      Ð?rC   rA   r–   g-Cëâ6
?r  r¶   r<  )r#  r#  rB   rX   )r?  rV   )rq   rc   r­   rd   re   rf   i   i°  rv   i-  NrÖ   zbaseline period was croppedr?  ztemp-cropped-epo.fif)ri   r¤   ÚscipyÚsignalZsawtoothÚpiÚreshaperƒ   r   r>   r!   r/  rl   r   rB  rf  r	   r×   r  r   rf   rž   r…   Zsqueezerw  r   r   )rx  rM   ZtsteprÜ   r@   rK   rL   rp   rq   r­   rc   ry  Zsamp_minZsamp_maxrY  rf   rD  Zepochs_fnameZepochs_cropped_readrs   rs   rt   Ú#test_epochs_baseline_after_cropping?  sT     ÿÿÿ

  ÿÿ

r+  c                  C   s2   t dddƒ} d}d\}}}t| dd||||ƒ dS )z$Test empty constructor for RtEpochs.rA   r{   r¶   )rB   rC   NN)r   r0   )rp   r­   rd   re   rf   rs   rs   rt   Útest_empty_constructorp  s    
r,  c                  C   s  d} t  d|  d ¡ d| d¡}t  dddgtddgg¡}t | dd¡}t |||¡}| ¡ }dd	„ }|d
d
…d
d
d…f }|j	|dd� ¡ }t
||ƒ t  d¡}	t  d| ¡}
dd	„ }|j	||	dd�}| |	¡jddd�}t  | |	¡|k¡sòt‚t
| |
¡| |
¡ƒ d
S )z%Test apply function to epoch objects.r|   rD   r;  r   rA   r{   r¶   c                 S   s   t  | jd ¡ddd… |  S )z.Reverse channel order without changing values.rA   Nr–   )ri   rº  rÙ   r  rs   rs   rt   r  ‚  s    z test_apply_function.<locals>.funNr–   F)Úchannel_wiserN   c                 S   s   t  | |  ¡ ¡S r  )ri   Z	full_likerf  r  rs   rs   rt   r  Ž  s    T)r¾   r-  )r  Zkeepdims)ri   r¤   r*  rl   r&   rƒ   r   r.   r×   Zapply_functionr   rf  rª   r…   )r‡   r@   rc   rp   rr   rX  r  r¯   ré  r¾   Z	non_picksÚoutr—  rs   rs   rt   Útest_apply_functionx  s"    

r/  c                  C   s’   t jjtdd�} |  dddg¡ | j ¡  t j| ddd�}t j| |ddd	d
ddd
d	d�
}| 	¡ }| 	¡  
dd„ ¡}|j|gd
d� | |j¡ dS )z2Check that add_channels properly deals with picks.Fr,  rD   rN   i6  r¾  r   )r  r%  rA   TN)r­   rd   re   rï   rf   r  r²   rN  c                 S   s   | d S )NZ_bisrs   )rÐ  rs   rs   rt   Ú<lambda>¤  ó    z)test_add_channels_picks.<locals>.<lambda>)Zforce_update_info)rƒ   r>   r"   r¼   r-  rp   r.  r   r   rB  rC  rD  r¶  rK   )rq   rc   rr   Zepochs_finalZ
epochs_bisrs   rs   rt   Útest_add_channels_picks—  s    
   þr2  r"  r|   zmeas_date, orig_date)Úsecondsc              	      sà  ddl m} tj dd¡d }tddgdd	d
�}t| ¡ || d�‰ t|ƒ}ˆ  	|¡ |dk	rd|| }d}t
dddg|||gdddg|d�}ˆ  |¡ tˆ ddd�}	|	 ¡  |	j}
d|
jks¾t‚d|
jksÌt‚d|
jksÚt‚t t|ƒd¡}|	 |¡ t |¡}t|	j|jƒ tˆ jj|	jjƒ tˆ jj|	jjƒ tˆ jj|	jjƒ |	 ¡ }|dk�r˜g d|dgd|dggd|dgd|dggd|dggd|dggg g g}nBg g g d|dgd|dggd|dgd|dggd|dggd|dggg}t|ƒt|ƒk�sðt‚t||ƒD ]’\}}|dk	�r0t dd „ |D ƒ‡ fd!d „|D ƒƒ nt d"d „ |D ƒd#d „ |D ƒƒ td$d „ |D ƒd%d „ |D ƒƒ td&d „ |D ƒd'd „ |D ƒƒ �qú|	 !¡  |	jd(d)� |	j ¡ }
|	 "|	j#d* d+ ¡ |	jd(d)� |	j}||
|ƒ dS ),zçTest Epoch Annotations from RawArray with dates.

    Tests the following cases crossed with each other:
    - with and without first_samp
    - with and without meas_date
    - with and without an orig_time set in Annotations
    r   )Úassert_frame_equalrD   r~  g•dyáý¥=rH   ZMEG2rI   rG   rJ   r!  NrV   r  r_   gÍÌÌÌÌÌ @r	  rV  Úz)rÝ  rÞ  r©  r8  rA   rC   r  Zannot_onsetZannot_durationZannot_descriptionrp  g333333ã?rA  rX   c                 S   s   g | ]}|d  ‘qS r   rs   ©rx   Z_xrs   rs   rt   rz     s     z*test_epoch_annotations.<locals>.<listcomp>c                    s   g | ]}|d  ˆ j  ‘qS r   )Z_first_time©rx   Z_yrL  rs   rt   rz     s    c                 S   s   g | ]}|d  ‘qS r   rs   r6  rs   rs   rt   rz   
  s     c                 S   s   g | ]}|d  ‘qS r   rs   r7  rs   rs   rt   rz   
  s     c                 S   s   g | ]}|d  ‘qS rl  rs   r6  rs   rs   rt   rz     s     c                 S   s   g | ]}|d  ‘qS rl  rs   r7  rs   rs   rt   rz     s     c                 S   s   g | ]}|d  ‘qS ©rD   rs   r6  rs   rs   rt   rz     s     c                 S   s   g | ]}|d  ‘qS r8  rs   r7  rs   rs   rt   rz     s     Trq  rM   r[   )$Zpandas.testingr4  ri   rõ  rh   r   r!   rB  r   r¸  r   ro   r   Úadd_annotations_to_metadatarã  r…  r…   ru  rv  rž   rw  rƒ   r   râ  r   ÚannotationsrÝ  rÞ  r©  Úget_annotations_per_epochr¥   rn   r   r  rI  rp   )r"  r&  Z	orig_daterx  r4  r@   rp   Zant_durZantsrr   rã  rz  rÀ  Ú
epoch_antsZexpected_annot_timesr	  rV  Znew_metadatars   rL  rt   Útest_epoch_annotations©  s�    
ÿ
ü


þÿÿ


ù

ù	
ÿ
"
r=  c               	      sæ  t ƒ \} }}|  ¡ }tdd„ |D ƒƒs*t‚tdd„ |D ƒƒs@t‚t |d ¡‰ t‡ fdd„dD ƒƒsht‚tdd„ |dd	… D ƒƒs†t‚t |d ¡}t |d
 ¡}d|ks®t‚dˆ ksºt‚tdd„ |d
d	… D ƒƒsØt‚d|ksät‚tdd„ |d	d… D ƒƒ�st‚dˆ k�st‚d|k�s t‚d|k�s.t‚t||ddd	d�} |  d¡} |  ¡ }tdd„ |D ƒƒ�sjt‚t |d ¡‰ t |d ¡}dˆ k�s”t‚d|k�s¢t‚|  ¡ }t	j
tdd�� t| |gƒ W 5 Q R X | j|jk�sât‚d	S )aŸ  Test Epoch Annotations different cases.

    Here, we test the following cases crossed:
    - annotation start is before/after epoch start
    - annotation end is before/after epoch end
    - 1 annotation that is fully outside all epochs (make sure it is dropped)
    - 1 annotation that spans multiple epochs (make sure it shows up in both)

    In addition, tests functionality when Epochs are loaded vs not.
    c                 s   s   | ]}d t  |¡kV  qdS )rT   N©ri   rl   ©rx   Úsublistrs   rs   rt   r•   ,  s     z/test_epoch_annotations_cases.<locals>.<genexpr>c                 s   s   | ]}d t  |¡kV  qdS )rW   Nr>  r?  rs   rs   rt   r•   /  s   ÿr   c                 3   s   | ]}|ˆ kV  qd S r  rs   rÌ  ©Zfirst_epoch_antrs   rt   r•   4  s     ©r\   rY   rZ   c                 s   s&   | ]}d D ]}|t  |¡kV  q
qdS ©rB  Nr>  ©rx   r@  r	  rs   rs   rt   r•   7  s    þrA   NrD   r^   c                 s   s   | ]}d t  |¡kV  qdS )r^   Nr>  r?  rs   rs   rt   r•   B  s   ÿr`   c                 s   s   | ]}d t  |¡kV  qdS )r`   Nr>  r?  rs   rs   rt   r•   G  s   ÿr–   ra   rb   c                 s   s&   | ]}d D ]}|t  |¡kV  q
qdS rC  r>  rD  rs   rs   rt   r•   T  s       r   r�   )ru   r;  rª   r…   ri   rl   r   r}   rB  r¦   rƒ  r„  r/   r:  )rr   rq   rc   r<  Zsecond_epoch_antZthird_epoch_antZ
old_epochsrs   rA  rt   Útest_epoch_annotations_cases  sJ    ÿ
ÿ
ÿ
ÿ
rE  r&  )Nrœ   )r   ré  rN  rœ   c              	   C   sä  dd„ }|   tjd|¡ d\}}t dd|t|ƒ ¡tj }tdd|d�}	|	 ¡ � d	|	d
< W 5 Q R X t	||	|ƒ}
|
 
|¡ tdddƒ}|
 |¡ |
j}t|
ƒ}t|
|ddd	|  |ddd�}t|ƒ|ksÎt‚|d }| |¡ t|ƒ}|jd |jksüt‚|jd |
jd k�st‚t|jd |
jd | ƒ dd„ | ¡ D ƒ}dg| }|dk�r^d|d< ||k�slt‚| d¡ dd„ | ¡ D ƒ}|dg| k�sœt‚tjtdd�� | |¡ W 5 Q R X dd„ | ¡ D ƒ}||k�sàt‚dS )zCTest backwards compatibility with Epochs saved without annotations.c                 S   s   |t jkrd S t| ||ƒS r  )r#   ZFIFF_MNE_EPOCHS_RAW_SFREQr(   )rã   rä   r¡  rs   rs   rt   Úno_sfreq_write_floatm  s    
zFtest_epochs_annotations_backwards_compat.<locals>.no_sfreq_write_floatr(   )rë   r—   r   rA   r¶   rJ   rö   rH  r  gš™™™™™é?Z1_less_t_less_2NT)rd   re   rN  rf   r²   rð  rM   r&  c                 S   s   g | ]}t |ƒ‘qS rs   ©r¥   ©rx   Úannrs   rs   rt   rz   �  s     z<test_epochs_annotations_backwards_compat.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS rs   rG  rH  rs   rs   rt   rz   œ  s     zincorrect resultsr�   c                 S   s   g | ]}t |ƒ‘qS rs   rG  rH  rs   rs   rt   rz      s     )r$  rƒ   rr   ri   Zlinspacerk   r!  r   rQ  r!   r¸  r   ro   r:  r   r   r¥   r…   rw  r   rp   Ú
_raw_sfreqr   r;  r¦   rƒ  r„  )r%  rx  r&  r"  rN  rF  rM   rE  r@   rp   rq   r9  rc   rr   r˜  ZlensZ	want_lensrs   rs   rt   Ú(test_epochs_annotations_backwards_compatf  sH    


 ÿ



rK  c              	   C   s:  t ƒ \}}}|j}| d }| |¡ t|ƒ}|j|jks<t‚| ¡  tjt	dd�� | ¡  W 5 Q R X |jdd� t
|jƒt
|jƒksŠt‚t|jj|jjƒ t|jj|jjƒ t|jj|jjƒ | ¡ j}t |¡}t||ƒ}|j|d ksðt‚|jdksþt‚|j|dd� t|ƒ}|j|jk�s&t‚|jdk�s6t‚dS )z,Test Epochs save correctly with Annotations.rð  z$Metadata for Epochs already containsr�   Trq  rM   N)ru   rp   rw  r   rJ  r…   r9  r¦   r§   r¨   r¥   r:  r   rÝ  rÞ  r   r©  r×   rÙ   rg   rõ  r.   )rx  rr   r£   rp   r˜  Zloaded_epochsZ
epoch_sizer@   rs   rs   rt   Ú#test_epochs_saving_with_annotations¤  s@    
þþþ


rL  )F)ÔrB  r   Údatetimer   Ú	functoolsr   r>   r   rú  Úos.pathÚpathru  r~  r¦   Znumpy.testingr   r   r   r	   r
   rP  ri   Z	numpy.fftr   r   Zscipy.signalr'  rƒ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zmne.annotationsr   Zmne.baseliner   Zmne.datasetsr   Zmne.chpir   r   Z	mne.eventr    Zmne.ior!   r"   Zmne.io.constantsr#   Zmne.io.projr$   Zmne.io.writer%   r&   r'   r(   Zmne.preprocessingr)   Z
mne.epochsr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   Z	mne.utilsr4   r5   r6   r7   r8   r9   r:   r;   Z	data_pathrv  Zfname_raw_testingrÿ   r  r  ÚdirnameÚ__file__Úbase_dirr¼   r½   r;  r­   rd   re   r�  rm  rõ  rö  rg   ru   rˆ   r°   r¿   r/  r  r  râ   rê   ÚmarkZslowtestZrequires_testing_datar
  r  r:  r>  rF  rZ  r]  rl  r{  r€  r…  rˆ  r�  Zparametrizerš  rŸ  r¨  r«  r°  r¸  ÚparamrÁ  rÝ  Zskipifrý  r   rÖ  r  r  r&  r+  r0  r3  r9  r>  rE  rK  rO  rS  rU  rW  r[  r]  rq  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  r  r  r   r"  r#  r&  r+  r,  r/  r2  r)  r=  rE  rK  rL  rs   rs   rs   rt   Ú<module>   sÈ  @0(
ÿ  ÿ

[
1\	 v"	
;5ý
, #þ ÿþ?
UD_7YK$
'xJ  ÿM@
!.	 RI
%
 N  ÿ  ÿ  ÿûþ
?&	"

>

1ýÿjJ;