U
    f»{j˜ ã                   @   sÖ  d dl mZ d dlmZmZmZ d dlmZ d dlZd dlm	Z
 d dlZd dlmZ d dlmZmZmZmZ d dlZd dlZd dlmZmZmZmZ d dlmZmZ d d	lmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d d
l%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z, d dl-m.Z. e
 /e.j0dd�dd¡Z1e
 /e
 2e3¡ddddd¡Z4ej5 6dd¡Z7e.j0dd�Z0e
 /e0dd¡Z8e
 /e0dd¡Z9ej5j:e#dƒ dd�Z;G dd„ deƒZ<ej=d d!�d"d#„ ƒZ>d$d%„ Z?d&d'„ Z@d(d)„ ZAd*d+„ ZBe7d,d-„ ƒZCd.d/„ ZDd0d1„ ZEe.jFd2d3„ ƒZGe.jFej5 6d4e9d5fe8d6fg¡d7d8„ ƒƒZHe7d9d:„ ƒZIe7d;d<„ ƒZJe7d=d>„ ƒZKd?d@„ ZLdAdB„ ZMdCdD„ ZNe.jFdEdF„ ƒZOdGdH„ ZPd°dIdJ„ZQdKdL„ ZRdMdN„ ZSd±dOdP„ZTe UdQejV¡ZWej=d dRdS�dTdU„ ƒZXej5 6dVdW¡ej5 6dXejYdYe;dZ�d[d\g¡d]d^„ ƒƒZZedƒd_d`„ ƒZ[ej=d dadS�dbdc„ ƒZ\ej5 6dVdW¡ddde„ ƒZ]ej5 6dfejYdgddhdi�ejYdddjdi�ejYdkdldmdi�ejYdndndodi�ejYdpdndqdi�ejYdrdQdsdi�ejYdtddudi�g¡dvdw„ ƒZ^dxdy„ Z_dzd{„ Z`d|d}„ Zad~d„ Zbed€d�ƒd‚dƒ„ ƒZcd„d…„ Zdd†d‡„ Zedˆd‰„ ZfdŠd‹„ ZgdŒd�„ ZhdŽd�„ Zid�d‘„ Zje.jFd’d“„ ƒZkd”d•„ Zled–d—„ ƒZmd˜d™„ Zndšd›„ Zodœd�„ Zpej5 6dždŸ¡ej5 6d d¡¡ej5 6dd¢¡d£d¤„ ƒƒƒZqej5 6d¥d¡¡ej5 6džd¦¡ej5 6d§d¨¡ej5 6d©dª¡d«d¬„ ƒƒƒƒZrej5 6dd¡ej5 6džd­¡d®d¯„ ƒƒZsdS )²é    )ÚOrderedDict)ÚdatetimeÚtimezoneÚ	timedelta)ÚrepeatN)Úapprox)Úassert_equalÚassert_array_equalÚassert_array_almost_equalÚassert_allclose)Úcreate_infoÚread_annotationsÚannotations_from_eventsÚevents_from_annotations)ÚEpochsÚAnnotations)	Úrequires_versionÚcatch_loggingÚrequires_pandasÚ assert_and_remove_boundary_annotÚ
_raw_annotÚ_dt_to_stampÚ_stamp_to_dtÚcheck_versionÚ_record_warnings)Úread_raw_fifÚRawArrayÚconcatenate_raws)Ú_sync_onsetÚ_handle_meas_dateÚ"_read_annotations_txt_parse_header)ÚtestingF)ÚdownloadZMEGÚsamplez..ÚioZtestsÚdataútest_raw.fifÚ
first_samp)r   é'  ZEDFztest_reduced.edfzSC4001EC-Hypnogram.edfZpandaszNeeds pandas)Úreasonc                   @   s   e Zd Zeddd„ƒZdS )Ú_windows_datetimeNc                 C   s   |dk rt dƒ‚t ||¡S )Nr   z[Errno 22] Invalid argument)ÚOSErrorr   Úfromtimestamp)ÚclsÚ	timestampÚtzinfo© r0   úY/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/tests/test_annotations.pyr,   3   s    z_windows_datetime.fromtimestamp)N)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr,   r0   r0   r0   r1   r*   2   s   r*   Úfunction)Úscopec                 c   s"   t j d¡s|  dt¡ dV  dS )z.Ensure datetime.fromtimestamp is Windows-like.Úwinzmne.annotations.datetimeN)ÚsysÚplatformÚ
startswithÚsetattrr*   )Zmonkeypatchr0   r0   r1   Úwindows_like_datetime:   s    r=   c               	   C   sZ  t tƒ} | jdk	st‚t| jjƒdks*t‚t tt	t¡ t
 tdƒ¡}t
 d¡}t
 dd¡}| jd }t|tƒstt‚t|ƒ}d||d |fD ]L}t||||ƒ}|dkr¶|jdksØt‚qŒt|jtƒsÆt‚|jjtjksŒt‚qŒt tt|||dd… ¡ t tt|dg||¡ t tt||dg|¡ |  ¡ }| jd d	| jd
   }	|d |d d  |j }tt|jd ƒƒ}
|
d |
d d  }
||
 }
t|
| jƒ t||||ƒ}|jdk	�s²t‚dt|ƒk�sÄt‚| |¡ t|jj||
 ƒ |j|k	�sðt‚|jjdk	�st‚t | |gƒ t!| ƒ t||
 |	 | jjdd� t"|j#| jj#ƒ t"| jj$t
 dd¡ƒ dS )zTest annotation class.Nr   é
   ÚtestÚ	meas_dateé	   é   éÿÿÿÿç      ð?Úsfreqç�íµ ÷Æ°>z	 segmentsçñhãˆµøä>)Úrtol)%r   Ú	fif_fnameÚannotationsÚAssertionErrorÚlenÚonsetÚpytestÚraisesÚIOErrorr   ÚnpÚarrayÚrangeÚonesr   ÚinfoÚ
isinstancer   r   r   Ú	orig_timer/   r   ÚutcÚ
ValueErrorÚcopyÚtimesÚ_first_timer   r   ÚreprÚset_annotationsr   r   r	   ÚdurationÚdescription)ÚrawrM   r_   r`   ÚdtÚstamprW   ÚannotÚraw2ÚdeltaÚoffsetr0   r0   r1   Útest_basicsB   sL    


rh   c              	   C   sf   t dgdgdgƒ}| d }| |¡ t|ƒ}t||ƒ tjtdd�� t dgdgdgƒ W 5 Q R X dS )	zTest description sanitizing.r   rB   za;:bzcustom-annot.fifzin description not supported©Úmatchz	a{COLON}bN)r   Úsaver   Ú_assert_annotations_equalrN   rO   rY   )Útmp_pathrd   ÚfnameÚ
annot_readr0   r0   r1   Útest_annot_sanitizingq   s    

rp   c               	   C   s~  t j dd¡d } d}tddgdgd |d�}tt jƒ}| ¡ � ||d	< W 5 Q R X g }d
D ]J}t|  ¡ ||d�}t	ddgddgdt j||  ƒ}| 
|¡ | |¡ q\t|d jjddgƒ t|  ¡ |ƒ}t|jƒrÚt‚| 
t	dgdgddƒ¡ t|jjdgƒ | |¡ t|dd�}|jd	 |jj  k�r:|k�s@n t‚t|dƒ t|jjdddddddgƒ |j d¡ t|jjddddddgƒ |j ddd ¡ t|jjd!ddddddgƒ t|jjdddddddgƒ t|jjd ddddddgƒ t|jd	 ƒ}t|ƒ}	t	g g g |ƒt	g g g |	ƒt	g g g dƒdfD ]H}
| 
|
¡ t|jt	ƒ�sPt‚t|jƒdk�sdt‚|jj|	k�s0t‚�q0dS )"z,Test combining with RawArray and orig_times.é   éè  g•dyáý¥=ç      Y@ZMEG1ZMEG2Zgrad©Úch_namesÚch_typesrE   r@   )i0  éd   é   ©r'   rD   ç       @ç      à?Úxr   é|   é}   NÚdebug©Úverboseé   g      _@g     @_@g     À`@g     à`@g      b@g      b@g     @c@é   ç      ø?Úyg      @)rQ   ÚrandomÚrandnr   r   ÚpiÚ_unlockr   rZ   r   r^   Úappendr   rJ   rM   rL   rK   r   rU   rW   r   r	   Údeleter_   r`   r   rV   )r%   rE   rU   r@   Úrawsr'   ra   Zantsrc   rW   Zempty_annotr0   r0   r1   Útest_raw_array_orig_times~   sl    ÿ

 

(
  ÿ ÿÿÿÿü
r�   c                 C   s¬  t tƒ}t |¡}||dd…df dkdf |jd  }t |d¡}dd„ tt|ƒƒD ƒ}tj	||||jd	 d
�}| 
|¡ |jd d d }t|ƒd d }| ¡  d|d|jd   ¡}	t|	jj|jjd|… ƒ t|	jj|jjd|… ƒ t|	jj|jjd|… ƒ | ¡  |d¡}
t|
jj|jj|d… ƒ t|
jj|jj|d… ƒ t|
jj|jj|d… ƒ tj|	|
gdd�}t|j|jƒ t|dd… d |dd… d dd� t|ƒ t|jj|jjƒ dD ]*}tt|j|ƒt|j|ƒd|f d� �qÌ| 
d¡ | ¡ }| 
t	dgdgd|jd	 ƒ¡ | 
t	dgdgddƒ¡ dd|j g}t||gƒ}t|ƒ t|jj|dd� t| ƒ}t |d¡}|j |¡ t|ƒ}dD ]}tt||ƒt|j|ƒƒ �q |j|jjk�sÔt‚t|j|jjƒ t	dddƒ}|j|dd� t  !t"tt¡ t|ƒ}t#|t	ƒ�s$t‚t|ƒdk�s6t‚| ¡  t |d¡}| 
|¡ | |¡ t |ƒ}t#|jt	ƒ�sxt‚t|jƒdk�sŒt‚| 
d¡ |j|dd� t |ƒ}|jdk	�s¼t‚t|jjƒdk�sÒt‚t$d d„ tdƒD ƒd!gd d"d#�}t%t &d$¡|ƒ}t 	d%d&d'gdgd dddg¡}| 
|¡}| ¡  d(d)¡}t |d¡}|j|dd� tj' (t|ƒ¡}dD ]:}tt|j|ƒt|j|ƒƒ tt|j|ƒt|j|ƒƒ �qldS )*zTest cropping with annotations.Nrq   rB   r   rE   r{   c                 S   s   g | ]}d | ‘qS )zbad %dr0   )Ú.0Úkr0   r0   r1   Ú
<listcomp>·   s     ztest_crop.<locals>.<listcomp>r@   ©rW   rC   rz   ç        rD   r   r€   g#B’¡œÇ;©Úatol)rM   r_   zFailed for %s:©Úerr_msgg     €F@r‚   r?   ÚBAD)Údecimalztest-annot.fifr0   T©Ú	overwriter&   c                 S   s   g | ]}d |d › �‘qS )ZEEGrB   r0   )rŽ   Úir0   r0   r1   r�     s     Úeegé2   ©rv   rE   )r‚   rr   é   rx   é   rƒ   é   ))r   rI   ÚmneÚfind_eventsrU   rQ   Ú	full_likerS   rL   r   r^   r[   rZ   Úcropr	   rJ   r`   r   r_   rM   r   r   ÚgetattrÚ
_last_timer
   ÚstrÚopÚjoinrk   r   rW   rK   rN   rO   rP   rV   r   r   Úzerosr$   Zread_raw)rm   ra   ÚeventsrM   r_   r`   rd   Z
split_timeZ	split_idxZraw_cropped_leftZraw_cropped_rightÚ
raw_concatÚattrre   Zexpected_onsetÚtempdirrn   ro   Úraw_readrU   Ú
annotationZ
raw_copiedZ
raw_loadedr0   r0   r1   Ú	test_crop±   sÆ    
&
ÿ
ÿÿÿÿÿÿ
ÿ&ÿ
þ



ÿ


 ÿ 

ÿ
ÿr²   c              	   C   sT  t tjddgtjd�tddd�| d�}|j ¡ � tdƒ|jd< W 5 Q R X | t	ddgdgd	d
�¡ |j
j|jd kszt‚t|j
j| gƒ t tjtdƒdd�¡j}tj|dddd�}tj|dddd�}|d	d	…df  | 7  < t|ddd�\}}t||ƒ t d¡}d|d	d	…df< tjdddd�|  |d	d	…df< t|dd�\}}t||ƒ d	S )zTest chunk_duration.r>   ©ÚdtyperD   ©ru   rE   ©r%   rU   r'   r   r@   ÚfooN©r`   rM   r_   rW   rq   )ZrepeatsrB   ©Zaxisr{   F)Úchunk_durationÚuse_rounding)r‚   r‚   rC   rA   r‚   )Ústepç      @)rº   )r   rQ   ÚemptyÚfloat64r   rU   r‰   r   r^   r   rJ   rW   rK   r   rM   Z
atleast_2dr   rS   ÚTÚinsertr   r	   r«   Úarange)r'   ra   Úexpected_eventsr¬   Z	events_idr0   r0   r1   Útest_chunk_duration  s2    
þ ÿÿ


 rÄ   c                  C   sÂ   d\} }t j d¡ d| | ¡}tjdgdg| d�}tj ||¡}dg}dg}dg}t |||¡}| 	|¡}|j
d	d
� t |¡\}	}
tj||	ddddd�}t| ¡ d |dd…dd…f ƒ dS )zETests events_from_annotation with orig_time None and first_sampe > 0.)rw   r>   é*   rB   ZEEG1rœ   rt   rŸ   Ú0é   )Útminr   NÚwarning)rÈ   ÚtmaxÚbaselineÚ
on_missingi   i…  )rQ   r†   ÚRandomStater‡   r¢   r   r$   r   r   r^   r¥   r   r   r	   Úget_data)rE   Z
duration_sr%   rU   ra   rM   r_   r`   Úannotsr¬   Z	event_idsÚepochsr0   r0   r1   Ú*test_events_from_annotation_orig_time_none3  s(    
     ÿrÑ   c                  C   sž  t j t¡ dd¡ ¡ } tj d¡j	| j
jŽ | j
dd…< t ddddg¡}t dd	d
dg¡}t  ||d¡}|  |¡ t| jƒdks†t‚d| jd  }| j| }t  |  ¡  dd| ¡|  ¡  dd| ¡|  ¡  dd¡g¡}t|j| jƒ t|dd… d | dd… d ƒ |j| jk�st‚t|dƒ t|jƒdk�s:t‚t|jj| jjƒ t| jj|ƒ t|jj|ƒ t| jj|| ƒ t|jj|| d| jd  d� dS )zTest more cropping.r   é   Ng&©+#Þ?g5ç…à]û@g{Ý¿·@gT’ñÿQ"@gIhG�p«ì?g?¯À,ò?g	<¿—ñ?gA¨Fß?r—   é   rD   rE   rŸ   rq   r“   )r¢   r$   r   rI   r¥   Z	load_datarQ   r†   rÍ   r‡   Ú_dataÚshaperR   r   r^   rL   rJ   rK   rU   r'   r   rZ   r   r[   r   r	   r`   r_   rM   )ra   rM   r_   rJ   rf   rg   r­   r0   r0   r1   Útest_crop_moreN  s:     

þÿ"
ÿÿrÖ   c                  C   sP   t  td¡} t| ƒ}t|ƒdks$t‚|j ¡ dks6t‚t 	|j
¡jdksLt‚dS )z(Test reading for Brainstorm events file.z events_sample_audvis_raw_bst.matéî   é(   rƒ   N)r©   rª   Údata_dirr   rL   rK   rM   ÚminrQ   Úuniquer`   Úsize)rn   rd   r0   r0   r1   Ú test_read_brainstorm_annotationsk  s
    rÝ   zfname, n_annotéš   rƒ   c                 C   s   t | ƒ}t|ƒ|kst‚dS )zTest reading EDF annotations.N)r   rL   rK   )rn   Zn_annotrd   r0   r0   r1   Útest_read_edf_annotationsu  s    rß   c              	   C   sL  d}t dddddg|dd�}tt d	¡|| d
�}tjtdd��( | tddddgddddgdƒ¡ W 5 Q R X |j	ddddgddddd�\}}t 
t dd¡t dd¡t d d!¡g¡}t t dd¡|¡| }t||ƒ ttƒ}| tt dddgt¡|j dddgd|jd" d#�¡ d$}|jd% |k�s,t‚tt||jd&  ƒƒ}	ttd|jd&  ƒƒ}
t|jƒ|	k�slt‚| 	td'ƒd|	dd¡\}}|jd'|	|
 fk�sžt‚|d% |j|	d  k�sºt‚t|d(d(…d)d(…f |d(d'…|	d |	…f d ƒ | 	td'ƒd|	d*d¡\}}t|jd'|	fƒ |d% |j|	d  k�s2t‚|jddgdd+�\}}t |d(d(…||…f ¡ ¡ �slt‚t |d(d(…d(|…f  ¡ ¡�r�t‚t |d(d(…|d(…f  ¡ ¡�r´t‚t|d(d(…d)d(…f |d(d'…|	d |	…f d ƒ t| 	¡ |d(d(… d ƒ t d'd,d-gt¡}t ||ƒ}t!|||j"|jd&   ƒ t!|t ||dƒƒ d(S ).z,Test raw data getter with annotation reject.rs   ÚaÚbÚcÚdÚerœ   )rv   )rƒ   i˜:  ry   zoutside the data rangeri   rq   rw   éi   é”   rŸ   rƒ   r—   r   rB   r‚   rÓ   iÀ+  ÚomitT)Úreturn_timeséÈ   i�  r(   i0*  i)  iø*  r@   ©rM   r_   r`   rW   g      2@rC   rE   r>   NiœÿÿÿÚNaN)r»   i¨ÿÿÿé¾   )#r   r   rQ   rT   rN   ÚwarnsÚRuntimeWarningr^   r   rÎ   ÚconcatenaterÂ   Z	setdiff1dr   r   rI   rR   Úfloatr\   rU   r[   rK   ÚintÚroundrL   rS   rÕ   r	   Ztime_as_indexÚisnanÚallÚanyr   r
   r'   )r'   rE   rU   ra   r%   r[   Z	bad_timesZexpected_timesZt_stopZn_stopZn_dropZt_1Zt_2Úonsetsr0   r0   r1   Útest_raw_reject€  sb    
 ÿ ÿ


þ
 ý2$$$2

ÿr÷   c              	      sœ  t  d¡‰ tdddƒ‰‡ ‡‡fdd„tdƒD ƒ}tdd	d
d�‰td	dd
d�‰‡fdd„|D ƒ}‡fdd„|D ƒ}tdd„ |D ƒƒ}| ¡  dd„ ¡}t|ƒ}t|ƒ}t|d d |d d dd� t|d d |d d dd� | ¡ j	f ddiˆ—Ž}t|d d |d d dd� | ¡ j	f ddiˆ—Ž}	t|d d |	d d dd� | ¡ }
|
j
 d|
j dd¡ tƒ �}|
j	d	dd
ddd� W 5 Q R X | ¡ }d|k�s¦t‚|
j
 d|
j dd¡ tƒ �}|
j	d	dd
ddd� W 5 Q R X | ¡ }d|k�søt‚t  t  d¡t  d¡t  d¡f¡}|d d d | }t|
d d d |dd� |d  ¡ }
|
 tdgdgd gƒ¡ |
jd!d"d#�\}}t||
jd$d… ƒ |jd%k�s¢t‚|
 ¡ j	f dd&iˆ—Ž}ˆ  ¡ }d|dd…d$d…f< t|dd… d |dd� |d  ¡ }
|
 tdgdgd gƒ¡ |
jd!d"d#�\}}t||
jdd$… ƒ |jd%k�sJt‚|
 ¡ j	f dd&iˆ—Ž}ˆ  ¡ }d|dd…dd$…f< t|dd… d |dd� dS )'z3Test that annotations work properly with filtering.©rB   rr   rB   ç     @�@rœ   c                    s"   g | ]}t ˆ |d   ˆˆd�‘qS )rB   ry   ©r   ©rŽ   Úii)r%   r'   rU   r0   r1   r�   ¹  s   ÿz-test_annotation_filtering.<locals>.<listcomp>rÓ   Ng      I@Zfirwin)Úl_freqÚh_freqÚ
fir_designc                    s   g | ]}|  ¡ jf ˆ Ž‘qS r0   ©rZ   Úfilter©rŽ   ra   )Úkwargs_passr0   r1   r�   ¾  s     c                    s   g | ]}|  ¡ jf ˆ Ž‘qS r0   r   r  )Úkwargs_stopr0   r1   r�   À  s     c                 S   s   g | ]}|  ¡ ‘qS r0   )rZ   r  r0   r0   r1   r�   Â  s     c                 S   s   | d S )Nr   r0   )r|   r0   r0   r1   Ú<lambda>Ã  ó    z+test_annotation_filtering.<locals>.<lambda>r   g›+¡†›„=r“   Úskip_by_annotationÚedgerD   rz   r·   rU   )rý   rþ   rÿ   r  r�   z2 contiguous segmentsrr   éÐ  r’   r{   ZBAD_ACQ_SKIPrç   T)Úreject_by_annotationrè   éô  )rB   r  Zbad_acq_skip)rQ   rT   r   rS   Údictr   rZ   Zapply_functionr   r  rJ   rŠ   r\   r   ÚgetvaluerK   rï   r«   r^   r   rÎ   r[   rÕ   )r'   rŒ   Z	raws_passZ	raws_stopZraws_concatZ	raws_zeroZraws_pass_concatZraws_stop_concatZraws_concat_passZraws_concat_stopra   ÚlogÚmaskZexpected_dataZmy_datar[   Zraw_filtÚexpectedr0   )r%   r'   rU   r  r  r1   Útest_annotation_filtering³  sŠ    
ÿÿÿ
 ÿ
 ÿ"ÿ
ÿÿ
ÿr  c                    s  t  t  d¡dt  d¡ gd¡}tdddƒ}t||| d�‰ ˆ  tdgdgd	gƒ¡ ˆ d
 d
 }tˆ jdd�|ƒ t j	|d
dd…f< tˆ jdd�|ƒ t  ‡ fdd„dD ƒd¡}t||ƒ |dd…t  
|d
 ¡f }tˆ jdd�|ƒ t  ‡ fdd„dD ƒd¡}t||ƒ tjtˆ jdd� dS )z#Test raw.get_data with annotations.rø   rq   rC   rB   rù   rœ   ry   r{   Úbadr   N)r
  r  éÜ  Únanc                    s    g | ]\}}ˆ j ||d d�‘qS )r  ©ÚstartÚstopr
  ©rÎ   ©rŽ   r  r  ©ra   r0   r1   r�   
  s   þÿz(test_annotation_omit.<locals>.<listcomp>))r   rr   )rr   r	  rç   c                    s    g | ]\}}ˆ j ||d d�‘qS )rç   r  r  r  r  r0   r1   r�     s   þÿr·   )rQ   rï   rT   r   r   r^   r   r   rÎ   r  ÚisfiniterN   rO   rY   )r'   r%   rU   r  Úgotr0   r  r1   Útest_annotation_omitþ  s.     þþ
þþ
r  c                     sü   t  d¡‰ tdddƒ‰t‡ ‡fdd„tdƒD ƒƒ} | jdk	s@t‚t| jƒd	ksRt‚t  | jj	d
g¡ 
¡ dkspt‚t  | jj	dg¡ 
¡ dksŽt‚t| jjdƒ t  dd„ dD ƒ¡}t| |ddddd�}tt|jƒt|ƒƒ tt|ƒdƒ tddd	g|jƒ dS )z<Test that annotations work properly with concatenated edges.rø   rB   rù   rœ   c                    s   g | ]}t ˆ ˆƒ‘qS r0   rú   rû   ©r%   rU   r0   r1   r�     s     z,test_annotation_epoching.<locals>.<listcomp>r‚   NrÓ   úBAD boundaryrq   úEDGE boundaryr’   c                 S   s   g | ]}|d dg‘qS )r   rB   r0   ©rŽ   rà   r0   r0   r1   r�   #  s     )r   r  rr   r  r	  r   ç+‡ÙÎ÷ï?T)rÈ   rÊ   rË   Úpreload)rQ   rT   r   r   rS   rJ   rK   rL   Zin1dr`   Úsumr	   r_   rR   r   r   Zdrop_logZ	selection)ra   r¬   rÐ   r0   r  r1   Útest_annotation_epoching  s    
ÿr%  c               	   C   s’  t dddgdddgdddgd	gd
gg gd�} t dddgdddgdddgg dgg gd�}| | }t|jddddddgƒ t|jddddddgƒ t|jddddddgƒ tt| ƒdƒ tt|ƒdƒ tt|ƒdƒ tjddddddgdd�}t|j	|ƒ | |7 } t| jddddddgƒ t| jddddddgƒ t| jddddddgƒ tt| ƒdƒ tt|ƒdƒ t
dƒ|_tjtdd�� | |7 } W 5 Q R X dS )z4Test if two Annotations objects can be concatenated.rB   rq   r‚   rƒ   rŸ   rà   rá   râ   Ú1Ú2©ru   rÒ   rx   é   r|   r…   ÚzÚ3é   )r&  )r'  r0   )r+  ÚOr³   g=,\»öÎAzorig_time should be the sameri   N)r   r	   rM   r_   r`   r   rL   rQ   rR   ru   r   Ú
_orig_timerN   rO   rY   )rà   rá   râ   Z
want_namesr0   r0   r1   Útest_annotation_concat+  s0    ÿ
ÿ
r/  c                  C   s@  t  dd¡} t  | d¡}dg| jd  }t| ||dd�}| ¡ jddd�}t|j|jƒ t|j	|j	ƒ t
ƒ �}| ¡ jdd	d�}W 5 Q R X t|jd
dddgƒ t|j	ddddgƒ t|ƒdksÂt‚t
ƒ �}| ¡ jddd�}W 5 Q R X t|jddgƒ t|j	ddgƒ t|ƒdk�st‚| ¡ jddd�}t|jdddddddddg	ƒ t|j	dddddddddg	ƒ t
ƒ �}| ¡ jddd�}W 5 Q R X t|jg ƒ t|j	g ƒ t|ƒdk�s´t‚tjtdd�� | ¡ jddd� W 5 Q R X tjtdd�� | ¡ jdddd� W 5 Q R X tjtdd�� | ¡ jdddd� W 5 Q R X dS )z,Test basic functionality of annotation crop.rB   r>   Úyyr   rê   iöÿÿÿrÅ   ©rÈ   rÊ   gÍÌÌÌÌÌ@rD   rz   r½   g      @gš™™™™™	@çš™™™™™@g333333ó?çš™™™™™É?gÍÌÌÌÌÌ1@é   rÒ   rx   rw   z!tmax should be greater than.*tminri   zOmitted .* were outsideT)rÈ   rÊ   Zemit_warningzLimited .* expanding outsideN)rQ   rÂ   r¤   rÕ   r   rZ   r¥   r	   rM   r_   r   r   rL   rK   rN   rO   rY   rí   rî   )rM   r_   r`   rà   Za_Úwr0   r0   r1   Útest_annotations_cropM  sF    ýr6  c               	      sˆ  t tƒ} t | ¡}dddddddœ}dd	„ | ¡ D ƒ‰ t| j|d
d
…df | j  t 	t
|ƒ¡‡ fdd„|d
d
…df D ƒd
d�}|  |¡ t| |d
d�\}}t||ƒ t||ƒ t| d
d
d�\}}t|d
d
…df |d
d
…df ƒ t| ¡ ƒt| ¡ ƒk�st‚dd	„ tt| ¡ ƒƒD ƒ}||k�s,t‚t |d
d
…df ¡}	t dt
|ƒd d¡ |	j¡}
t|	|
ƒ t t| ¡ ƒ¡}	t dt
|ƒd d¡ |	j¡}
t|	|
ƒ t| d
dd�\}}dd	„ | ¡ D ƒ}t| ¡ | ¡ ƒ ||d
d
…df dk|d
d
…df dkB  }t|d
d
…df |d
d
…df ƒ t| |dd�\}}dd	„ | ¡ D ƒ}t||ƒ ||d
d
…df dk|d
d
…df dkB  }t||ƒ tjtdd�� t| dd� W 5 Q R X tjtdd�� t| dd� W 5 Q R X t|  ¡ |  ¡ gƒ}t|ƒ\}}t|t ƒ�st‚t
|ƒdk�st‚dD ]:}d| |j!j"k�s8t‚| ¡ D ]}||k�s@t‚�q@�q|  d
¡ t| ƒ\}}t|tj#dt$d�ƒ d
S )z>Test basic functionality of events_fron_annot for raw objects.rB   rq   r‚   rÓ   é    rƒ   )zAuditory/LeftzAuditory/RightzVisual/LeftzVisual/RightzVisual/SmileyzMotor/Buttonc                 S   s   i | ]\}}||“qS r0   r0   ©rŽ   r�   Úvr0   r0   r1   Ú
<dictcomp>�  s      z9test_events_from_annot_in_raw_objects.<locals>.<dictcomp>Nr   c                    s   g | ]}ˆ | ‘qS r0   r0   )rŽ   Zvv©Z	event_mapr0   r1   r�   ’  s     z9test_events_from_annot_in_raw_objects.<locals>.<listcomp>rê   )Úevent_idÚregexpc                 S   s   i | ]\}}||d  “qS )rB   r0   )rŽ   ÚidxÚdescr0   r0   r1   r:  ¢  s     z.*Leftc                 S   s   i | ]\}}d |kr||“qS ©ZLeftr0   r8  r0   r0   r1   r:  ±  s       c                 S   s   i | ]\}}d |kr||“qS r@  r0   r8  r0   r0   r1   r:  º  s       znot find any of the eventsri   Z	not_there)r=  zInvalid type for event_idÚwrong©r<  )r—   ZEDGEz%s boundary)r   r‚   r³   )%r   rI   r¢   r£   Úitemsr   r[   r'   rQ   r«   rL   r^   r   r	   r   ÚsetÚkeysrK   Ú	enumerateÚsortedrÛ   rÂ   Zastyper´   ÚlistÚvaluesrN   rO   rY   r   rZ   rV   r  rJ   r`   r¾   rñ   )ra   r¬   r<  rd   Zevents2Z	event_id2Zevents3Z	event_id3Úexpected_event_idÚfirstÚsecondZevents4Z	event_id4Zexpected_event_id4Zexpected_events4Zevents5Z	event_id5Zexpected_event_id5Zexpected_events5r­   Ú_ÚkindÚkeyZevents7r0   r;  r1   Ú%test_events_from_annot_in_raw_objects‚  sz    
úý
ÿ

ÿ"ÿ

ÿ,"ÿ
,

rP  c                  C   st   t ddd�} | jjtdƒks t‚| jjd dks4t‚| jdksBt‚t| ƒ\}}|d dks^t‚| j|d kspt‚dS )z/Test events and annotations onset are the same.rB   r„   )r@   rW   r   r>   )r   r   N)r   rJ   rW   r   rK   rM   r'   r   )ra   Zevent_latenciesr<  r0   r0   r1   Ú&test_events_from_annot_onset_alingmentÖ  s    rQ  c              	   C   s2  t tjddgtjd�tddd�dd�}| d¡ |j| }tj| |t|ƒd�}tj| |t|ƒd�}t	| |||d�}|dkr t
jtdd	�� | |¡ W 5 Q R X n
| |¡ t|jj|kƒs¾t‚|dkràt|jƒ|jd
  | }	nd}	|jjd }
|
t|	ƒk�st‚t|jj|
kƒ�st‚t|jj| kƒ�s.t‚|S )z»Create a raw object with annotations from descriptions.

    The returning raw object contains as many annotations as description given.
    All starting at `annotation_start_sampl`.
    r>   r³   rù   rµ   r   r¶   r¸   zLimited.*expanding outsideri   rE   )r   rQ   r¾   r¿   r   Úset_meas_dater[   r¤   Útyper   rN   rí   rî   r^   rô   rJ   rM   rK   rL   rU   r_   r   r`   )r`   Úannotation_start_samplr_   rW   ra   rM   Zonset_matching_descZduration_matching_descrd   Zexpected_durationZ	_durationr0   r0   r1   Ú!_create_annotation_based_on_descrè  s8    
þ

ÿý
rU  c                  C   sš   dddddddg} t t| tdd	ƒƒƒ}t d
d
d
d
d
d
d
gdddddddgddd
ddddgg¡j}t| d
d	d�}t|dd�\}}t||ƒ ||ks–t	‚dS )zÄTest[unit_test] for event_id_function default in event_from_annotations.

    The expected behavior is give numeric label for all those annotations not
    present in event_id, starting at 1.
    rà   rá   râ   rã   rä   ÚfÚgrB   rw   r‚   r   rq   rÓ   rƒ   r,  rÇ   )rT  r_   NrB  )
r  ÚziprS   rQ   rR   rÀ   rU  r   r	   rK   )r`   rJ  rÃ   ra   r¬   r<  r0   r0   r1   Útest_event_id_function_default  s    þþ
rY  c                  C   sz   dd„ } ddddddd	g}t t|td
ƒƒƒ}tjddd
ggt|ƒdd�}t|ƒ}t|| d�\}}t||ƒ ||ksvt‚dS )z6Test [unit_test] arbitrary function to create the ids.c                  _   s   dS )NrÅ   r0   )ÚargsÚkwargsr0   r0   r1   Ú_constant_id,  s    zBtest_event_id_function_using_custom_function.<locals>._constant_idrà   rá   râ   rã   rä   rV  rW  rÅ   r   r¹   rB  N)	r  rX  r   rQ   rL   rU  r   r	   rK   )r\  r`   rJ  rÃ   ra   r¬   r<  r0   r0   r1   Ú,test_event_id_function_using_custom_function*  s    
r]  c                 C   st   d}t | j|jd|dd� t | j|jd|dd� t| j|jdd� t| j|jdd� | j}|j}||ksptd	ƒ‚d S )
NTr   rM   )rH   r”   r–   r_   r`   r•   ru   rW   )r   rM   r_   r	   r`   ru   rW   rK   )rà   rá   ÚtolZ__tracebackhide__Za_orig_timeZb_orig_timer0   r0   r1   rl   <  s(        ÿ    ÿrl   ç=,Ü»öÎA)ru   Úfmt)r7   Úparamsc              	   C   sò   |dkrd}n6|dkrd}n(|dks(t ‚tddgdd	gd
dgtd�}|r¤t|tƒrbd|jdd…< nB| ¡ }|d  d7  < |d  d7  < |d  d7  < d |¡}|  d¡d|› � }t|tƒrät	|dƒ�}| 
|¡ W 5 Q R X n
| |¡ |S )zCreate csv file for testing.Úcsvz`onset,duration,description
2002-12-03 19:01:11.720100,1.0,AA
2002-12-03 19:01:20.720100,2.425,BBÚtxtzp# MNE-Annotations
# orig_time : 2002-12-03 19:01:11.720100
# onset, duration, description
0, 1, AA 
9, 2.425, BBÚfifr   rA   rB   çffffff@ÚAAÚBBr‘   ©r0   ©ZMEG0111ZMEG2563Néýÿÿÿz	,ch_nameséþÿÿÿú,rC   z,MEG0111:MEG2563Ú
r%   úannotations-annot.r5  )rK   r   Ú
_ORIG_TIMErV   ru   Ú
splitlinesrª   Úmktempr¨   ÚopenÚwriterk   )Útmp_path_factoryru   r`  Úcontentrn   rV  r0   r0   r1   Údummy_annotation_fileL  s2       ÿ



rv  ru   )FTr`  rb  )Zmarksrc  rd  c                 C   s¦   t | ƒ}|jtkst‚ttd�}|r,d|d< t|tddgddgdd	gf|Žd
d� |d|› � }| |¡ t |ƒ}t||ƒ d|_|j|dd� t |ƒ}t||ƒ dS )z=Test CSV, TXT, and FIF input/output (which support ch_names).r‘   rh  ru   r’   g      "@rD   re  rf  rg  rF   )r^  rn  NTr™   )	r   rW   ro  rK   r  rl   r   rk   r.  )rv  rm   r`  ru   rd   r[  rn   Úannot2r0   r0   r1   Útest_io_annotationr  s$    
 þ

rx  c              	   C   sR   d}| d }t |dƒ�}| |¡ W 5 Q R X tjtdd�� t|ƒ W 5 Q R X dS )z.Test broken .csv that does not use timestamps.z0onset,duration,description
1.,1.0,AA
3.,2.425,BBzannotations_broken.csvr5  zsave your CSV as a TXTri   N)rr  rs  rN   rí   rî   r   )rm   ru  rn   rV  r0   r0   r1   Útest_broken_csv�  s    ry  r(  c              	   C   st   d}|rB|  ¡ }|d  ¡ d |d< |d  ¡ d |d< d |¡}|  d¡d }t|d	ƒ�}| |¡ W 5 Q R X |S )
zCreate txt file for testing.z3.14, 42, AA 
6.28, 48, BBr   rl  rB   z, MEG0111:MEG2563rm  r%   úannotations.txtr5  )rp  Ústriprª   rq  rr  rs  )rt  ru   ru  rn   rV  r0   r0   r1   Údummy_annotation_txt_file   s    
r|  c                 C   sÔ   t t| ƒƒ}|jdkst‚tƒ }|r0ddg|d< t|tddgddgd	d
gf|Žƒ | d¡d }| |¡ t |ƒ}t||ƒ |jdksŠt‚t	dƒ|_
|jdk	s¢t‚|j|dd� t |ƒ}|jdk	sÆt‚t||ƒ dS )z(Test TXT input/output without meas_date.Nr0   ri  ru   ç…ëQ¸	@g…ëQ¸@ç      E@é0   rf  rg  r%   rz  r_  Tr™   )r   r¨   rW   rK   r  rl   r   rq  rk   r   r.  )r|  rt  ru   rd   r[  rn   rw  r0   r0   r1   Útest_io_annotation_txt±  s(     ÿ


r€  zmeas_date, outZtotozinvalid string)ÚidÚNonerÅ   r~  ZScalarr}  ÚFloat)r‚   ià" zScalar touplez2002-12-03 19:01:11.720100zvalid iso8601 stringz2002-12-03T19:01:11.720100zinvalid iso8601 stringc                 C   s6   |dk	r"|dkst ‚t |tj¡}t| ƒ|ks2t ‚dS )zTest meas date formats.Nr   )rK   r   r,   r   rX   r   )r@   Úoutr0   r0   r1   Útest_handle_meas_dateÍ  s    r…  c              	   C   sR   d}| d }t |dƒ�}| |¡ W 5 Q R X t|ƒ}t dtj¡}||ksNt‚dS )zTest TXT orig_time recovery.zb# A something 
# orig_time : 42
# orig_time : 2002-12-03 19:01:11.720100
# orig_time : 42
# C
Donez
header.txtr5  r_  N)rr  rs  r    r   r,   r   rX   rK   )rm   ru  rn   rV  rW   Úwantr0   r0   r1   Útest_read_annotation_txt_headerß  s    r‡  c              	   C   sL   d}| d }t |dƒ�}| |¡ W 5 Q R X t|ƒ}t|tdddgƒƒ dS )úTest empty TXT input/output.z=# MNE-Annotations
# onset, duration, description
3.14, 42, AAzone-annotations.txtr5  r}  rÅ   rf  N©rr  rs  r   rl   r   ©rm   ru  rn   rV  rd   r0   r0   r1   Ú$test_read_annotation_txt_one_segmentï  s    r‹  c              	   C   sJ   d}| d }t |dƒ�}| |¡ W 5 Q R X t|ƒ}t|tg g g ƒƒ dS )rˆ  z1# MNE-Annotations
# onset, duration, description
zempty-annotations.txtr5  Nr‰  rŠ  r0   r0   r1   Útest_read_annotation_txt_emptyû  s    rŒ  c                  C   sÌ   d} t jt jt jf}dd„ t| ƒD ƒ }}dd„ t| ƒD ƒ}t|||dd�}t|dd… ƒD ]j\}}t|tƒsrt‚||t	|ƒf}t
| ¡ ||ƒD ]4\}	}
}t  |	¡s¨t‚t|	ƒ|
ks¸t‚|	|ks�t‚q�q\dS )úTest indexing Annotations.rƒ   c                 S   s   g | ]}|‘qS r0   r0   ©rŽ   r|   r0   r0   r1   r�   
  s     z5test_annotations_simple_iteration.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r0   ©Ú__repr__rŽ  r0   r0   r1   r�     s     Nrê   rq   )rQ   r¿   Zstr_rS   r   rF  rV   r   rK   r¨   rX  rI  ZisscalarrS  )Ú	NUM_ANNOTZEXPECTED_ELEMENTS_TYPEÚEXPECTED_ONSETSÚEXPECTED_DURATIONSÚEXPECTED_DESCSrd   rü   ÚelementsZexpected_valuesÚelemÚexpected_typeZexpected_valuer0   r0   r1   Ú!test_annotations_simple_iteration  s&    ýþr˜  Únumpyz1.12c                  C   s˜  d} dd„ t | ƒD ƒ }}dd„ t | ƒD ƒ}t|||dd�}d|d d	< d
|d d< d|d d< d|dd… jd< d
|dd… jd< d|dd… jd< |D ]2}|| ttd	dddg||t|ƒdgƒƒksšt‚qš|t	dddƒ |dd„ t t
|ƒƒD ƒ |dd… |dddg |d |t dddg¡ |ddd… fD ],}t|tƒ�sFt‚t
|ƒt
|ƒk�s2t‚�q2t
|ƒddfD ]$}t t¡� ||  W 5 Q R X �qndS )r�  rƒ   c                 S   s   g | ]}|‘qS r0   r0   rŽ  r0   r0   r1   r�   !  s     z+test_annotations_slices.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r0   r�  rŽ  r0   r0   r1   r�   "  s     Nrê   rÅ   r   rM   r}  r_   Zfoobarr`   rB   rW   rq   c                 S   s   g | ]}t |d  ƒ‘qS )rq   )Úboolrû   r0   r0   r1   r�   :  s     )r   rq   rq   r·   )rS   r   rM   r_   r`   r  rX  r¨   rK   ÚslicerL   rQ   rR   rV   rN   rO   Ú
IndexError)r‘  r’  r“  r”  rd   rü   ÚcurrentZbad_iir0   r0   r1   Útest_annotations_slices  sD    ý ÿþ
úrž  c                  C   sÐ   t dddgdddgdƒ} |  dd	d
dgdd¡ ttdddƒƒ}t| jƒ}t| j|ƒ t| j|ƒ |  ddgddgd¡ | d¡}| |d¡ | |d d¡ | |d¡ | |d¡ t| j|ƒ t| j|ƒ dS )zTest annotation sorting.r>   é   é   rB   rq   r‚   r—   rƒ   r    é   é#   r{   é$   çš™™™™™¹?rA   N)	r   rŠ   rH  rS   r_   r	   rM   ÚindexrÁ   )rd   rM   r_   Zwant_beforer0   r0   r1   Útest_sortingI  s    

r¦  c           
      C   sš   d}d}t j ||f¡}dd„ t|ƒD ƒ}dg| }t||dd�}|d d	ksRt‚t||d
�}t t	| ƒd¡}| 
|¡ t|dd�}	|	jd d	ks–t‚d	S )z%Test that DATE_NONE is used properly.é‹   rŸ  c                 S   s   g | ]}d   |¡‘qS )zE{}©ÚformatrŽ  r0   r0   r1   r�   b  s     z"test_date_none.<locals>.<listcomp>rœ   i   rt   r@   Nr  ztest-raw.fifT)r#  )rQ   r†   Zrandom_samplerS   r   rK   r   r©   rª   r¨   rk   r   rU   )
rm   Zn_chansZn_sampsr%   ru   rv   rU   ra   rn   r°   r0   r0   r1   Útest_date_none\  s    

rª  c                 C   sl   t tjdtjd�tddd�d�}| d¡ | tdd	gd	gd
d�¡ t|ƒ\}}|d
d
…d	f d	ksht	‚d
S )z Test meas_date previous to 1970.)rB   rB   r³   rB   rD   rµ   r  )i®ÞÉiý r·   r   Nr¸   )
r   rQ   r¾   r¿   r   rR  r^   r   r   rK   )r=   ra   r¬   rM  r0   r0   r1   Útest_negative_meas_datesm  s    
ÿ
 ÿr«  c                    sø   d‰ t dt ddd¡dgˆ d�}t|jƒ}t|d |d d  ˆ ƒ |d |d d  }|ˆ ksdt‚t|ƒd	kstt‚|jd
d� t|ƒd	ks�t‚‡ fdd„dD ƒ\}}|dk r¶|dk sºt‚|j||d�}t|j	dddddgƒ t
|ƒ}|j|ksôt‚dS )z=Test cropping with orig_time, tmin and tmax previous to 1970.gKs�(þËÁr·   r   r"  r¤  r¸   rB   rF   r>   r   r€   c                    s   g | ]}ˆ | ‘qS r0   r0   )rŽ   Út©Úorig_time_stampr0   r1   r�   Š  s     z5test_crop_when_negative_orig_time.<locals>.<listcomp>)g      Ð?g      è?r1  ç333333Ó?gš™™™™™Ù?r{   ç333333ã?gffffffæ?N)r   rQ   rÂ   r   rW   r   rK   rL   r¥   rM   r   )r=   rd   rc   r¬  rÈ   rÊ   Z
crop_annotZorig_dtr0   r­  r1   Ú!test_crop_when_negative_orig_timey  s$     ÿ
r±  c                 C   sd   d}t dt ddd¡dg|d�}|jddd� t|ƒdks>t‚|jd	| dd� t|ƒd
ks`t‚dS )z%Test cropping with None in arguments.rw   r·   rƒ   r>   rB   r¸   Nr1  ç      @r‚   ©r   rQ   rÂ   r¥   rL   rK   ©r=   r®  rd   r0   r0   r1   Útest_crop_with_none’  s     ÿrµ  c                 C   sD   d}t dt ddd¡dg|d�}|jddd	d
� t|ƒdks@t‚dS )z Test cropping without orig_time.rw   r·   rƒ   r>   rB   r¸   r²  NF)rÈ   rÊ   Zuse_orig_timer‚   r³  r´  r0   r0   r1   Útest_crop_wo_orig_time�  s     ÿr¶  c               	   C   sª   t tjddgtjd�tddd�dd�} |  d¡ dd	d
dg}tjddtjg}dgd }tj|td�}tj|td�}t	j
|||d�}tjtdd�� |  |¡ W 5 Q R X dS )z:Deal with "n/a" strings in BIDS events with nan durations.rq   r>   r³   rD   rµ   r   r¶   rB   rz   g      .@g      1@r{   ÚArÓ   ©rM   r_   r`   zOmitted 2 annotationri   N)r   rQ   r¾   r¿   r   rR  r  Zasarrayrð   r¢   r   rN   rí   rî   r^   )ra   ZonsZdusZdescriptionsrö   Ú	durationsrd   r0   r0   r1   Útest_allow_nan_durations¦  s     
þ

þrº  c               	   C   sŠ  t tƒ} t | ¡}t|| jd | jdd�}t|ƒ|jd ks@t	‚|  
|¡ t| td�\}}t||ƒ ddddd	œ}t|| jd || jdd
�}t dd„ |jD ƒ¡s¦t	‚t|ƒ||dd…df dk jd ksÐt	‚dddg}t|| jd || jdd
�}t dd„ |jD ƒ¡�st	‚t|ƒ||dd…df dk jd k�s<t	‚dd„ }t|| jd || jdd
�}t dd„ |jD ƒ¡�szt	‚t|ƒ|jd k�s’t	‚t dddgdddgg¡}tjtdd��  t|| jd || jdd
�}W 5 Q R X tjtdd��  t|| jd d| jdd
�}W 5 Q R X t dddg¡}t|| jd || jdd
�}t dd„ |jD ƒ¡�sZt	‚t|ƒ||dd…df dk jd k�s†t	‚dS )z&Test events to annotations conversion.rE   N)r'   rW   r   rB  ÚoneÚtwoÚthree)rB   rq   r‚   r7  )rE   Ú
event_descr'   rW   c                 S   s   g | ]}|d k‘qS ))r»  r¼  r½  r0   r!  r0   r0   r1   r�   Ó  s     z0test_annotations_from_events.<locals>.<listcomp>rq   r‚   rB   c                 S   s   g | ]}|d k‘qS ©)r&  r'  r+  r0   r!  r0   r0   r1   r�   Þ  s     c                 S   s
   d  | ¡S )Nzevent{}r¨  )rã   r0   r0   r1   r  ã  r  z.test_annotations_from_events.<locals>.<lambda>c                 S   s   g | ]}d |k‘qS )Úeventr0   r!  r0   r0   r1   r�   é  s     zevent_desc must be 1Dri   zInvalid type for event_descc                 S   s   g | ]}|d k‘qS r¿  r0   r!  r0   r0   r1   r�      s     )r   rI   r¢   r£   r   rU   r'   rL   rÕ   rK   r^   r   rñ   r	   rQ   rô   r`   rR   rN   rO   rY   )ra   r¬   rÏ   Z
events_outrM  r¾  r0   r0   r1   Útest_annotations_from_events¹  sn    
þ

ý*
ý,ýýýýrÁ  c                  C   st   t ttdƒdgd tdƒƒƒ} | dks*t‚t ttdƒdgd tdƒƒƒ} | dksTt‚t tg g g ƒƒ} | dkspt‚d	S )
zTest repr of Annotations.r‚   r   Úabcz/<Annotations | 3 segments: a (1), b (1), c (1)>é   ZabcdefghijklmnzL<Annotations | 14 segments: a (1), b (1), c (1), d (1), e (1), f (1), g ...>z<Annotations | 0 segments>N)r]   r   rS   rH  rK   )Úrr0   r0   r1   Ú	test_repr  s    rÅ  c                  C   sº   t  dd¡} t  | dddddddddg	¡}dg| jd  }t| ||dd�}| ¡ }d	D ]}||jksVt‚qV|jd dks|t‚|j	d |j	d  j
dksšt‚| d
¡ ¡ j	d dks¶t‚dS )z/Test annotation class to data frame conversion.rB   r>   rÓ   rƒ   r,  r0  r   rê   r¸  r`   rA   N)rQ   rÂ   r¤   rÕ   r   Zto_data_frameÚcolumnsrK   r`   rM   ÚsecondsÚgroupbyÚcount)rM   r¹  r`   rà   ZdfÚcolr0   r0   r1   Útest_annotation_to_data_frame  s    ýrË  c               	      s"  t dddƒ} tt d¡| ƒ‰ dddg}ddd	g}d
ddg}g ˆ jdd… ˆ jdd… g}t||||d�}ˆ  |¡ dd„ ˆ jD ƒ}ˆ  ¡  |¡‰t	ˆj
j|jƒD ]p\}}t‡fdd„|D ƒƒsÂt‚t‡ fdd„|D ƒƒsÜt‚t‡ fdd„|D ƒƒröt‚t‡fdd„|D ƒƒr t‚q ˆ dd„ | ¡ D ƒ¡ tˆ j
ˆj
ƒ ˆ ˆ jdd… ¡ ˆj
}	tˆj
ƒdk�sft‚ˆj
jd tˆ jdd… ƒk�sŠt‚ˆj
jD ]"}
t‡fdd„|
D ƒƒ�s’t‚�q’tjtdd�� ˆ |¡ W 5 Q R X tjtd d�� ˆj|d!d"� W 5 Q R X ˆj
|	k	�st‚tˆj
|	ƒ dS )#z.Test annotation ch_names updating and pruning.r>   rù   rœ   )r>   rr   r¤  r¯  r°  gš™™™™™©?r3  rK  rL  ÚthirdrÓ   r,  rƒ   rÇ   r(  c                 S   s   i | ]}||d  “qS )Únewr0   ©rŽ   Únamer0   r0   r1   r:  3  s      z,test_annotation_ch_names.<locals>.<dictcomp>c                 3   s   | ]}|ˆ j kV  qd S ©Nr(  rÎ  ©Úraw_2r0   r1   Ú	<genexpr>6  s     z+test_annotation_ch_names.<locals>.<genexpr>c                 3   s   | ]}|ˆ j kV  qd S rÐ  r(  rÎ  r  r0   r1   rÓ  7  s     c                 3   s   | ]}|ˆ j kV  qd S rÐ  r(  rÎ  r  r0   r1   rÓ  8  s     c                 3   s   | ]}|ˆ j kV  qd S rÐ  r(  rÎ  rÑ  r0   r1   rÓ  9  s     c                 S   s   i | ]\}}||“qS r0   r0   )rŽ   rO  Úvalr0   r0   r1   r:  :  s      Nrq   rB   c                 3   s   | ]}|ˆ j kV  qd S rÐ  r(  rÎ  rÑ  r0   r1   rÓ  B  s     z"channel name in annotations missinri   zchannel name in annotations misÚwarn)rÌ   )r   r   rQ   r«   ru   r   r^   rZ   Zrename_channelsrX  rJ   rô   rK   rõ   rC  rl   Zdrop_channelsrL   ÚtuplerN   rO   rY   rí   rî   )rU   rM   r_   r`   ru   rd   ÚrenameZ	ch_renameÚchZannot_prunedZch_dropr0   )ra   rÒ  r1   Útest_annotation_ch_names(  s:    



$ rÙ  c               	   C   sÄ  t dddgdddgdddgƒ} t| jtjƒs0t‚t| ƒdks@t‚d| jksNt‚d| jks\t‚d| jksjt‚d	| jksxt‚t dddgdddgdddgƒ} |  dd	i¡ t| jtjƒs¶t‚t| ƒdksÆt‚d| jksÔt‚d	| jksât‚t d
d„ | jD ƒ¡d dk�st‚t dddgdddgdddgƒ} |  d	ddœ¡ t| ƒdk�sFt‚d| jk�sVt‚d	| jk�sft‚d| jk�svt‚d| jk�s†t‚t dd„ | jD ƒ¡d dk�sªt‚t dd„ | jD ƒ¡d dk�sÎt‚t dddgdddgdddgƒ} |  d	ddœ¡ t| jtjƒ�st‚t| ƒdk�s"t‚d| jk�s2t‚d	| jk�sBt‚d| jk�sRt‚d| jk�sbt‚d| jk�srt‚t dd„ | jD ƒ¡d dk�s–t‚t dd„ | jD ƒ¡d dk�sºt‚tt dd„ | jD ƒ¡d ƒdk�sât‚t dddgdddgdddgƒ} t	j
tdd�� |  ddi¡ W 5 Q R X t	j
tdd�� |  ddi¡ W 5 Q R X t	j
tdd�� |  d¡ W 5 Q R X t	j
tdd�� |  dg¡ W 5 Q R X t	j
tdd�� |  dh¡ W 5 Q R X d S )!zTest annotation renaming works.rB   rq   r‚   rƒ   rŸ   rà   rá   râ   Únew_namec                 S   s   g | ]}|d k‘qS ©rÚ  r0   ©rŽ   rã   r0   r0   r1   r�   [  s     z*test_annotation_rename.<locals>.<listcomp>r   ú
new name b©rà   rá   c                 S   s   g | ]}|d k‘qS rÛ  r0   rÜ  r0   r0   r1   r�   d  s     c                 S   s   g | ]}|d k‘qS ©rÝ  r0   rÜ  r0   r0   r1   r�   e  s     ú
new name c)rá   râ   c                 S   s   g | ]}|d k‘qS rÛ  r0   rÜ  r0   r0   r1   r�   p  s     c                 S   s   g | ]}|d k‘qS )rà  r0   rÜ  r0   r0   r1   r�   q  s     c                 S   s   g | ]}|d k‘qS rß  r0   rÜ  r0   r0   r1   r�   r  s     únot present in datari   Úaaazdoes not existz[' a']z azdict, got <class 'str'> insteadrA  z dict, got <class 'list'> insteadzdict, got <class 'set'> insteadN)r   rV   r`   rQ   ÚndarrayrK   rL   r×  ÚwhererN   rO   rY   Ú	TypeError©rà   r0   r0   r1   Útest_annotation_renameK  s\    $$$$$(rç  c               	   C   s  t dddgdddgdddgƒ} t| jtjƒs0t‚t| ƒdks@t‚| jd	 dksRt‚| jd dksdt‚|  ddi¡ | jd	 dks„t‚| jd dks–t‚|  d
ddœ¡ | jd	 d
ks¸t‚| jd dksÊt‚|  dddœ¡ | jd	 dksìt‚| jd dksþt‚t dddgdddgdddgƒ} t| ƒdk�s.t‚| jd	 dk�sBt‚| jd dk�sVt‚|  d¡ t| jtjƒ�stt‚| jd	 dk�sˆt‚| jd dk�sœt‚|  d¡ | jd	 dk�sºt‚tj	t
dd�� |  ddi¡ W 5 Q R X tj	tdd�� |  ddh¡ W 5 Q R X dS )z'Test annotation duration setting works.rB   rq   r‚   rƒ   rŸ   rà   rá   râ   r   i9  r¡   )rà   râ   r)  rÞ  gÍÌÌÌÌÌ@rá  ri   râ  r2  z got <class 'set'> insteadN)r   rV   r_   rQ   rã  rK   rL   Zset_durationsrN   rO   rY   rå  ræ  r0   r0   r1   Ú test_annotation_duration_setting�  s8    

rè  r@   )NrB   rR  )ÚbeforeÚafter)r   rw   é¸  c              	   C   s  d}t d|dƒ}d}tƒ }|dkr^| ¡ � t| ƒ|d< W 5 Q R X | dk	rV||| 7 }| |d< tt d	¡||d
�}t|ddf|Ž}|j|dd� |dkr¢| 	| ¡ |j
}	| dkrÀ|	 j|j8  _|j|	dd� |j
}
|	jd }| dkrð||j }t|
jd |ƒ dS )z.Show some unintuitive behavior of annotations.rù   rB   rœ   r{   ré  r@   NrW   )rB   r	  ry   r¤  r  r   r€   rê  r   )r   r  r‰   r   r   rQ   r«   r   r^   rR  rJ   rM   Ú
first_timer   )r@   r'   rR  rE   rU   rM   Zannot_kwargsra   rd   Zfirst_annotZsecond_annotr†  r0   r0   r1   Útest_annot_noop£  s0    



rí  Úsetting)rK  rL  ÚbothNÚfirst_samp_2)r   i@  Úfirst_samp_1)é    r   c           #   	      sü  d}d}d‰ d }}| dks t ‚| dkr@tdddd	d	d	tjd
�}| dkr`tdddd	d	d	tjd
�}~ ‡ fdd„}t ttdƒƒd d g| ¡d d }	t dddddg¡}
dddddg}||	||
||||ƒ}t|j	j
|
||  ƒ t dgt|d ƒ d	gt|d ƒ  d g| ¡}t ddddg¡}ddddg}||||||||ƒ}t|j	j
|||  ƒ t |
t |t|jƒ|  d¡g¡}|d	 dk�s”t ‚t|j	j
d	 d||  ƒ t |||  d¡}tj|ˆ || |d�}t| ¡ gƒ}t|j	j
d	 d||  ƒ t||gƒ}|j|j  k�r(|k�s.n t ‚~~t|j	j
d	 d||  ƒ |jd |k�s`t ‚t|ƒ}t|j	j||d … ƒd d!gk�sŽt ‚|j	 ||d g¡ t |j	jdk¡d	 }t |j	jdk¡d	 }|j	j
| }|j	j
| }||j8 }||j8 }t|ƒt|ƒ  k�rdk�s n t ‚|jd |k�s4t ‚t|j	|ƒ |dk�r\| j
|| 8  _
| |¡ |dk�r‚| j
|| 7  _
t|j	|ƒ tƒ }t||ƒD ](\}}| t|j	j||d … ƒ¡ �qžt|||ƒD �] \}}}| ¡ } t| j	|j	ƒ t| j	|ƒ |dk	�rˆ|jd }!td"|!› �ƒ |!t|j d#� }!td$|!› �ƒ |!t|d#� }!td%|!› �ƒ |jd t|j	j
d d#� }!td&|!› �ƒ | j|k�s˜t ‚| j!||d'd(� |tt|| ƒƒ }"| j|"k�sÌt ‚| j	j"|k�sÞt ‚t| j	jƒ|k�sÔt ‚�qÔdS ))z1Test that annotation and cropping works properly.rq   rò  r¤  N)NrK  rL  rï  )rK  rï  iæ  rB   r   )r/   )rL  rï  c                    s¢   t j| jd d|d�}t jj| ||d�}|dkrTt  |ˆ |¡}	| |	¡}| |¡ nJ|dks`t‚| |¡ |d k	rz|| nd}
t j||
 ˆ ||d�}	| |	¡}|S )Nr   rœ   rž   ry   ré  rê  r‘   )	r¢   r   rÕ   r$   r   r   r^   rR  rK   )rœ   rE   rM   r`   r@   r'   rî  rU   ra   rd   rf   ©r_   r0   r1   Ú_create_rawÔ  s"    

   ÿ
z+test_annot_concat_crop.<locals>._create_rawrØ   rÓ   r>   rƒ   gH¯¼šò×z>ç      @r,  rÇ   rŸ   rx   ÚonÚoffrG   r„   gš™™™™™@r‚   rê   r@   r  r   z
meas_info set to         )rÇ  zData starts at           zCropping data to         zSecond annot at          r   r€   )#rK   r   r   rX   rQ   rR   rH  rS   r   rJ   rM   rñ   rï   rò   rL   r[   r¢   r   r   rZ   r'   rU   r`   r‹   rä  rì  rl   r^   rX  rŠ   Úprintr   r\   r¥   rW   )#r@   rñ  rð  rî  Zn_chrE   Zmeas_date_1Zmeas_date_2rô  Zdata_1Zonset_1Zdescription_1Zraw_1Zdata_2Zonset_2Zdescription_2rÒ  rM   Z
want_annotZraw_copyra   Zgap_idxZ	start_idxZend_idxZtminsZtmaxsZ
want_descsr  r  rÈ   rÊ   ZdescsÚsessÚmdZwant_first_sampr0   ró  r1   Útest_annot_concat_cropÃ  sÄ    ÿÿÿ ÿ,ÿ ÿÿ  þ"ÿ


&


"

ÿrû  )Ni€Q c                 C   sÈ  d}t  d|d¡}t jjtj d¡ dd¡||d�}| | ¡ t 	dddgt
¡}| dk	rd||| 7 }t j|d	d
dgdddg|jd d�}t|ƒdks˜t‚| |¡ t|jƒdks´t‚| ¡ jdddd�}t|jƒdksÚt‚t|jj|jdd… ƒ t|jj|jdd… ƒ | ¡ jdddd�}| ¡  dd¡ dd¡}t| ¡ | ¡ ƒ |j|jk�sZt‚|dd… }	| dk�rz|	|j }	||fD ]@}
t|
jƒdk�sšt‚t|
jj|	ƒ t|
jj|jdd… ƒ �q‚dS )z.Test yet another meas_date / first_samp issue.rù   rB   rœ   r   rë  ry   rq   Nr¤  r3  r¯  rà   rá   râ   r@   rê   r‚   r„   r   r€   rõ  )r¢   r   r$   r   rQ   r†   rÍ   r‡   rR  rR   rð   r   rU   rL   rK   r^   rJ   rZ   r¥   r	   r`   r_   r   rÎ   r'   rì  rM   )r@   r'   rE   rU   ra   rM   rd   Zraw_cropZ
raw_crop_2Z
want_onsetZthis_rawr0   r0   r1   Ú$test_annot_meas_date_first_samp_crop4  sF      ÿ
ü


rü  )r   r   r   )r   )tÚcollectionsr   r   r   r   Ú	itertoolsr   r9   Úos.pathÚpathr©   rN   r   Znumpy.testingr   r	   r
   r   r™  rQ   r¢   r   r   r   r   r   r   Z	mne.utilsr   r   r   r   r   r   r   r   r   Zmne.ior   r   r   Zmne.annotationsr   r   r    Zmne.datasetsr!   rª   Z	data_pathrÙ   ÚdirnameÚ__file__rI   ÚmarkZparametrizeZfirst_sampsZedf_reducedZedf_annot_onlyZskipifZneeds_pandasr*   Zfixturer=   rh   rp   r�   r²   rÄ   rÑ   rÖ   Zrequires_testing_datarÝ   rß   r÷   r  r  r%  r/  r6  rP  rQ  rU  rY  r]  rl   r,   rX   ro  rv  Úparamrx  ry  r|  r€  r…  r‡  r‹  rŒ  r˜  rž  r¦  rª  r«  r±  rµ  r¶  rº  rÁ  rÅ  rË  rÙ  rç  rè  rí  rû  rü  r0   r0   r0   r1   Ú<module>   s   ,ÿ ÿ

/3a
 
	þ
2
J
"5
S    ÿ
,

%ý


ÿÿø


+	
J
#6"m