U
    f»{j|A  ã                
   @   sH  d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZ e j dd	d
dddde jjd�Zeejdd�ƒZed d Zej ddef¡ej dd¡dd„ ƒƒZej ddef¡ej dd¡dd„ ƒƒZej ddef¡ej dd¡dd„ ƒƒZejdd„ ƒZdd „ Zd!d"„ Z dS )#é    N)ÚPath)Úcreate_info)ÚAnnotations)Útesting)ÚRawArrayÚread_raw_fif)Úannotate_amplitudeiå  é   é
   é   é4   é   i9/ )ÚtzinfoF)ÚdownloadÚmisczintervalrecording_raw.fifÚ	meas_dateÚ
first_samp)r   i'  c              	   C   sÆ  d\}}t j d¡ ||¡}t j|dd�dk ¡ r6t‚t|ddƒ}t|||d�}|j	d g|j
d< | | ¡ t d	d
¡D �]”\}}t||d�}	| ¡ }
d|
jd< t|
fdddœ|	—Ž\}}t|ƒdksÊt‚|dgksØt‚| ¡ }
d|
jd< d|
jd< t|
fdddœ|	—Ž\}}t|ƒdk�s t‚|ddgk�s2t‚| ¡ }
t  d|jjd d¡|
jd< t|
fdddœ|	—Ž\}}t|ƒdk�s‚t‚|dgk�s’t‚| ¡ }
t  d|jjd d¡|
jd< t  d|jjd d¡|
jd< t|
fdddœ|	—Ž\}}t|ƒdk�sþt‚|ddgksxt‚qxttd| ƒƒ}| ¡ }
d|
jd|d…f< dD ]<}t|
dd|d�\}}t|ƒdk�sht‚|dgk�s>t‚�q>t|
dddd�\}}t|ƒdk�s¢t‚t|ƒdk�s´t‚|d d dk�sÊt‚t|
|d | ||dƒ | ¡ }
d|
jddd…f< d|
jddd…f< t  ddd¡|
jddd…f< |
jddd…f  |
jd  7  < t  dd!d¡|
jd"d#d$…f< |
jd"d$d…f  |
jd% 7  < d&D ]B}t|
dd|d�\}}t|ƒdk�s²t‚|dd'dd(gk�sˆt‚�qˆd)D ] }t|
dd|d�\}}t|ƒdk�sút‚|ddgk�st‚td*d+„ |D ƒƒ�s$t‚|D ]D}|d d,k�r>d#nd}|d d,k�rTd-nd.}t|
|| |||ƒ �q(�qÐt|
dddd�\}}t|ƒdk�s˜t‚t|ƒdk�sªt‚td/d+„ |D ƒƒ�sÂt‚|D ]D}|d d,k�rÜdnd}|d d,k�ròd0nd}t|
|| |||ƒ �qÆ| ¡ }
d|
jddd…f< t|
dddd�\}}t|ƒdk�sLt‚t|ƒdk�s^t‚| ¡ }
t  d|jjd d¡|
jddd…f< t|
dddd�\}}t|ƒdk�s°t‚t|ƒdk�sÂt‚dS )1zCTest automatic annotation for segments based on peak-to-peak value.©é   éè  r   éÿÿÿÿ©Zaxisç     @�@Úeeg©r   Úbads)é   gš™™™™ùX@ç      Y@)g{®Gázt?gffffffî?g®Gáz®ï?)Úbad_percentÚmin_durationç        N©ÚpeakÚflatÚ0é   Ú2r
   r   gš™™™™™é?)r   é   ©r"   r#   r   gš™™™™4@é   ÚdescriptionÚBAD_flaté   iR  i¶  éÐ  éÈ   )r%   éÇ   r   é   é2   é–   )r0   é•   )r   r
   Ú1Ú3)g333333$@r'   c                 s   s   | ]}|d  dkV  qdS ©r*   )r+   ÚBAD_peakN© ©Ú.0Úannotr8   r8   ún/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/preprocessing/tests/test_annotate_amplitude.pyÚ	<genexpr>n   s   ÿz*test_annotate_amplitude.<locals>.<genexpr>r7   r3   iµ  c                 s   s   | ]}|d  dkV  qdS r6   r8   r9   r8   r8   r<   r=   y   s   ÿr/   )ÚnpÚrandomÚRandomStateÚrandnÚdiffÚanyÚAssertionErrorr   r   Úch_namesÚinfoÚset_meas_dateÚ	itertoolsÚproductÚdictÚcopyÚ_datar   ÚlenÚarangeÚtimesÚsizeÚintÚroundÚ_check_annotationÚall)r   r   Ún_chÚn_timesÚdatarF   ÚrawÚpercZdurÚkwargsÚraw_Úannotsr   Zn_good_timesr;   Ú	start_idxÚstop_idxr8   r8   r<   Útest_annotate_amplitude   sÂ    



ÿ
ÿ
  ÿ
ÿ
ÿÿÿÿ$r_   c                 C   s�  d\}}t j d¡ ||¡}t j|dd�dk ¡ r6t‚t|ddƒ}t|||d�}|j	d g|j
d< | | ¡ | ¡ }d	|jdd
d…f< t  ddd¡|jddd…f< |jddd…f  |jd 7  < t|dddd�\}}	t|ƒdksæt‚t|	ƒdksöt‚tdd„ |D ƒƒ�st‚|D ]D}
|
d dk�r(dnd
}|
d dk�r>dnd}t||
| |||ƒ �q| ¡ }t  ddd¡|jddd…f< t  ddd¡|jdd
d…f< t|dddd�\}}	t|ƒdk�s¾t‚t|	ƒdk�sÐt‚|d d dk�sæt‚t||d | |ddƒ | ¡ }d	|jddd…f< d	|jdd
d…f< t|dddd�\}}	t|ƒdk�sNt‚t|	ƒdk�s`t‚|d d dk�svt‚t||d | |ddƒ dS ) z,Test cases with overlap between annotations.r   r   r   r   r   r   r   r   r    r,   Nr-   r
   r)   é¼  i„  )r)   éƒ  r   é   r(   r%   c                 s   s   | ]}|d  dkV  qdS r6   r8   r9   r8   r8   r<   r=   ¦   s   ÿz7test_annotate_amplitude_with_overlap.<locals>.<genexpr>r*   r7   ra   r   i¸  r1   g{®Gáz„?r+   ©r>   r?   r@   rA   rB   rC   rD   r   r   rE   rF   rG   rK   rL   rN   r   rM   rT   rS   ©r   r   rU   rV   rW   rF   rX   r[   r\   r   r;   r]   r^   r8   r8   r<   Ú$test_annotate_amplitude_with_overlap�   sR    
 ÿÿÿ
re   c                 C   sü  d\}}t j d¡ ||¡}t j|dd�dk ¡ r6t‚t|ddgd dgd	  d
gd  dgd	  ƒ}t|||d�}|j	d g|j
d< | | ¡ | ¡ }d|jddd…f< t  ddd¡|jddd…f< |jddd…f  |jd 7  < t|dddd�\}}	t|ƒd	k�st‚t|	ƒdk�st‚tdd„ |D ƒƒ�s6t‚|D ]D}
|
d dk�rPdnd}|
d dk�rfdnd}t||
| |||ƒ �q:| ¡ }d|jddd…f< t  ddd¡|jddd…f< |jddd…f  |jd 7  < t|ddddd�\}}	t|ƒdk�sþt‚t|	ƒdk�st‚t||d | |ddƒ |d d dk�s<t‚| ¡ }d|jddd…f< t  ddd¡|jddd…f< |jddd…f  |jd 7  < t|dddd
d�\}}	t|ƒdk�sºt‚t|	ƒdk�sÌt‚t||d | |ddƒ |d d dk�søt‚dS ) z&Test cases with several channel types.r   r   r   r   r   r   r0   Úmagr%   Zgradé   r   r   r    r)   r,   Nr-   r
   r   r.   )r   r/   r1   r(   c                 s   s   | ]}|d  dkV  qdS r6   r8   r9   r8   r8   r<   r=   Ý   s   ÿz<test_annotate_amplitude_multiple_ch_types.<locals>.<genexpr>r*   r7   r/   )r"   r#   r   Zpicksr+   rc   rd   r8   r8   r<   Ú)test_annotate_amplitude_multiple_ch_typesÆ   s^    &ÿ
 ÿÿ 
ÿ
 
ÿ
rh   c            	      C   sn  t tdd�} t| dd�\}}t|ƒdks,t‚|dd„ d ¡ D ƒksFt‚d\}}tj d¡ 	||¡}tj
|d	d
�dk ¡ r|t‚t|ddƒ}t||dd�} | jd	 g| jd< tdgdgdgdd�}|  |¡ |  ¡ }d|jddd…f< t|dddd�\}}t|ƒdk�st‚t|ƒdk�st‚|d d dk�s0t‚t||d ddddƒ |  ¡ }d|jddd…f< t|dddd�\}}t|ƒdk�s†t‚t|ƒdk�s˜t‚|d d dk�s®t‚t||d ddddƒ |  ¡ }d|jdd d…f< t|ddd!d�\}}t|ƒd"k�st‚t|ƒdk�st‚t|d#d$„ d%�}td&d'„ |D ƒƒ�s>t‚t||d ddd d(ƒ t||d ddddƒ dS ))z1Test that acquisition skips are handled properly.T)Zpreloadr   )r#   c                 S   s   g | ]}d t |ƒf ‘qS )zMEG%04d)rQ   )r:   Únumr8   r8   r<   Ú
<listcomp>  s    z*test_flat_bad_acq_skip.<locals>.<listcomp>zb141 331 421 431 611 641 1011 1021 1031 1241 1421 1741 1841 2011 2131 2141 2241 2531 2541 2611 2621r   r   r   r   r   r   r   g      à?gš™™™™™É?Úbad_acq_skipN)Ú	orig_timer    i�  iX  rb   r(   r)   r*   r+   ió  r,   r`   i  r.   é)   r%   c                 S   s   | d S )NÚonsetr8   )Úxr8   r8   r<   Ú<lambda>0  ó    z(test_flat_bad_acq_skip.<locals>.<lambda>)Úkeyc                 s   s   | ]}|d  dkV  qdS )r*   r+   Nr8   r9   r8   r8   r<   r=   1  s     z)test_flat_bad_acq_skip.<locals>.<genexpr>iô  )r   Ú
skip_fnamer   rM   rD   Úsplitr>   r?   r@   rA   rB   rC   r   r   rE   rF   r   Zset_annotationsrK   rL   rS   ÚsortedrT   )	rX   r\   r   rU   rV   rW   rF   rk   r[   r8   r8   r<   Útest_flat_bad_acq_skip   sJ    þ
rv   c                 C   s¼   ||d kst ‚|dkr^tj| j| |d dd�s6t ‚tj| j| |d |d  dd�s¸t ‚nZ|| jd  }tj| j| |d | dd�sŽt ‚tj| j| |d |d  | dd�s¸t ‚dS )z%Util function to check an annotation.rl   Nrn   g-Cëâ6?)ZatolÚdurationZsfreq)rD   r>   ÚiscloserO   rF   )rX   r;   r   r   r]   r^   Z
first_timer8   r8   r<   rS   6  s&      ÿ 
 ÿ
ýrS   c               	   C   sÞ  d\} }t j d¡ | |¡}t| ddƒ}t||dd�}tjtdd�� t	|dd	d
� W 5 Q R X tjtdd�� t	|d	dd
� W 5 Q R X tjtdd�� t	|dt
dd	d�d
� W 5 Q R X tjtdd�� t	|t
dd	d�dd
� W 5 Q R X tjtdd�� t	|ddd
� W 5 Q R X tjtdd�� t	|t
dd�dd	d� W 5 Q R X tjtdd�� t	|t
dd�dd	d� W 5 Q R X tjtt d¡d�� t	|t
dd�ddd� W 5 Q R X tjtt d¡d�� t	|t
dd�ddd� W 5 Q R X dS )z0Test error messages raised by invalid arguments.)r%   éd   r   r   r   r   zCArgument 'flat' should define a positive threshold. Provided: '-1'.)ÚmatchNr   r!   zCArgument 'peak' should define a positive threshold. Provided: '-1'.zYArgument 'flat' should define positive thresholds. Provided for channel type 'eog': '-1'.r)   )r   ZeogzYArgument 'peak' should define positive thresholds. Provided for channel type 'eog': '-1'.z@At least one of the arguments 'peak' or 'flat' must not be None.zWArgument 'bad_percent' should define a percentage between 0% and 100%. Provided: -1.0%.)r   r(   z_Argument 'min_duration' should define a positive duration in seconds. Provided: '-1.0' seconds.)r"   r#   r   zŠArgument 'min_duration' should define a positive duration in seconds shorter than the raw duration (1.0 seconds). Provided: '1.0' seconds.g      ð?z‹Argument 'min_duration' should define a positive duration in seconds shorter than the raw duration (1.0 seconds). Provided: '10.0' seconds.r
   )r>   r?   r@   rA   r   r   ÚpytestZraisesÚ
ValueErrorr   rJ   ÚreÚescape)rU   rV   rW   rF   rX   r8   r8   r<   Útest_invalid_argumentsG  sT    ÿÿÿ ÿ ÿÿ ÿ þ þr   )!ÚdatetimerH   Úpathlibr   r}   Únumpyr>   r{   Zmner   Zmne.annotationsr   Zmne.datasetsr   Zmne.ior   r   Zmne.preprocessingr   ÚtimezoneÚutcÚdateZ	data_pathrs   ÚmarkZparametrizer_   re   rh   Zrequires_testing_datarv   rS   r   r8   r8   r8   r<   Ú<module>   s8   ÿt48
5