U
    f»{j@   ã                   @   s4  d dl mZ d dlZd dlmZ d dlZd dlm	Z	m
Z
 d dlmZmZ d dlmZmZ d dlmZ d dlmZ e e e¡ddd	d
d¡Ze ed¡ZdZe ddddg¡Ze ejdd�dd¡Ze ¡ dd„ ƒZej  !dd¡dd„ ƒZ"ej  !dddg¡dd„ ƒZ#ej j$dd „ ƒZ%d!d"„ Z&ej j$ej'd#d$„ ƒƒZ(dS )%é    N)Úassert_array_almost_equal)Úread_raw_fifÚread_raw_ctf)Úmake_projectorÚactivate_proj)Úcompute_proj_ecgÚcompute_proj_eog)Útesting)Ú
pick_typesz..ÚioZtestsÚdataztest_raw.fifg      @ç      à?gffffff@gÍÌÌÌÌÌ@g      -@F)ÚdownloadZCTFztestdata_ctf.dsc                  C   sR   t tƒ dd¡jdddd�} |  | jddd… | jdd…  ¡ ¡  | j ¡  | S )z$Create a short, picked raw instance.r   é   T)ÚmegÚeegÚeogNi2  é
   )	r   Ú	raw_fnameÚcropr
   ÚpickÚch_namesZ	load_dataÚinfoZnormalize_proj)Úraw© r   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/preprocessing/tests/test_ssp.pyÚ	short_raw   s      ÿ(
r   Úaverage)TFc                 C   sv  | }t jtdd��2 t|dddddg|dddddtdd	d
�\}}W 5 Q R X t|ƒdksZt‚|jd dt kr~|jd dt k s‚t‚dd„ |D ƒ}dd„ |D ƒ}d\}}}|D ]\}	d|	d krÎ|	d |ksÌt‚q¬d|	d krì|	d |ksêt‚q¬d|	d kr¬|	d |ks¬t‚q¬t jtdd��0 t|ddddg |ddddtddd�\}}}
W 5 Q R X |g k�s\t‚t|ƒt|
ƒk�srt‚dS )z'Test computation of ECG SSP projectors.ÚAttenuation©Úmatché   zMEG 1531úMEG 2443TNr   éè  )Ún_magÚn_gradÚn_eegÚch_nameÚbadsr   Úavg_refÚno_projÚl_freqÚh_freqÚrejectÚtmaxÚqrs_thresholdÚfilter_lengthr   r   é   c                 S   s   g | ]}|d    d¡r|‘qS )ÚdescZECG©Ú
startswith©Ú.0Úprojr   r   r   Ú
<listcomp>0   s      z)test_compute_proj_ecg.<locals>.<listcomp>c                 S   s   g | ]}d |d kr|‘qS ©zPCA-01r2   r   r5   r   r   r   r8   2   s      ©gÍÌÌÌÌÌì?g333333Ó?gš™™™™™¹?Úplanarr2   Úexplained_varÚaxialr   zNo good epochs foundgVçž¯Ò<)r$   r%   r&   r'   r(   r   r)   r*   r+   r,   r.   Zreturn_drop_logr/   )ÚpytestÚwarnsÚRuntimeWarningr   Údur_useÚlenÚAssertionErrorÚshape)r   r   r   ÚprojsÚeventsZssp_ecgÚ
thresh_eegÚthresh_axialÚthresh_planarr7   Zdrop_logr   r   r   Útest_compute_proj_ecg    sh               üÿ
          ùrJ   Tc                 C   s®  |}t |jd ƒ}tjtdd��. t|ddddg| dddddtd	d
�\}}W 5 Q R X t |ƒd| ksht‚t 	|j
d t t tt¡¡ ¡dks’t‚dd„ |D ƒ}dd„ |D ƒ}d\}}}	|D ]\}
d|
d krÞ|
d |	ksÜt‚q¼d|
d krü|
d |ksút‚q¼d|
d kr¼|
d |ks¼t‚q¼tjtdd��( t|ddd| g ddddtd�\}}W 5 Q R X |g k�sdt‚d|j|j d¡dd…f< tjtdd�� t|tdd�\}}W 5 Q R X dS )z'Test computation of EOG SSP projectors.rE   r   r   r!   r"   TFNr#   )r$   r%   r&   r(   r   r)   r*   r+   r,   r-   r.   r0   r   r   é   c                 S   s   g | ]}|d    d¡r|‘qS )r2   ZEOGr3   r5   r   r   r   r8   Y   s      z)test_compute_proj_eog.<locals>.<listcomp>c                 S   s   g | ]}d |d kr|‘qS r9   r   r5   r   r   r   r8   [   s      r:   r;   r2   r<   r=   r   Zlonger)
r$   r%   r&   r   r(   r)   r*   r+   r,   r.   g      ð?zEOG 061zfilter.*longer than the signal)r   r.   r'   )rB   r   r>   r?   r@   r   rA   rC   ÚnpÚabsrD   ÚsumÚlessÚ	eog_timesÚ_datar   Úindex)r   r   r   Ún_projs_initrE   rF   Zssp_eogrG   rH   rI   r7   r   r   r   Útest_compute_proj_eogK   sl              ýÿÿ
        ýÿrT   c                 C   s  |   ¡  d¡ d¡} |   ¡ }tjtdd��4 t|d|jdd… dddd	d	d	d	tdd
�\}}W 5 Q R X |   ¡ }tjtdd��4 t|d|jdd… ddddd	d	d	tdd
�\}}W 5 Q R X t	|ƒ}t	|ƒ}t
||jd dgd�\}}}t
||jd dgd�\}}}t||dƒ d	S )z9Test computation of ExG projectors using parallelization.)r   r   éd   r   r   r!   rK   FTN)r&   r(   r   r)   r*   Zn_jobsr+   r,   r-   r.   r0   r   r"   )r(   r   )Úcopyr   Zresampler>   r?   r@   r   r   rA   r   r   r   r   )r   r   rE   Ú_Zraw_2Zprojs_2r   r   r   Útest_compute_proj_parallels   sT             ý        üÿÿrX   c                 C   sŠ   | d k	st ‚| D ]t}d|d kr:t|d d ƒ|ks„t ‚qd|d kr`t|d d ƒ|ks„t ‚qd|d krt|d d ƒ|kst ‚qd S )Nr;   r2   r   Z	col_namesr=   r   )rC   rB   )rE   Ún_magsÚn_gradsÚn_eegsÚpr   r   r   Ú"_check_projs_for_expected_channels�   s    r]   c                  C   sž  t tdd�} t| jdddd�ddd… }t|ƒ}t| jd	ddd�ddd… }t|ƒ}t| jddddd
�ddd… }t|ƒ}t| jddd�}|  t t ||||g¡¡¡ ~~~~|  	d¡ t| jd ƒ}t
jtdd��, t| ddddddddddtdd�\}	}
W 5 Q R X t|	|||ƒ t|	ƒd| k�s,t‚|  	d¡ t
jtdd��, t| ddddddddddtdd�\}	}
W 5 Q R X t|	|||ƒ t|	ƒd| k�sšt‚dS )z7Test to show that projector code completes on CTF data.T)ZpreloadÚmagFr(   )r   Úref_megÚexcludeNr   Zgrad)r   r   r_   r`   r!   r1   )r   r_   r   rE   r   r   ZEEG059r#   )r$   r%   r&   r   r'   r)   r*   r+   r,   r-   r.   r0   é   rK   é   )r   Ú	ctf_fnamer
   r   rB   r   rL   ÚsortZconcatenateZapply_gradient_compensationr>   r?   r@   r   rA   r]   rC   r   )r   Z	mag_picksrY   Z
grad_picksrZ   Z	eeg_picksr[   Z	ref_picksrS   rE   rW   r   r   r   Útest_compute_proj_ctf˜   sˆ       ÿÿ
ÿÿÿÿÿ
ÿ
          ý
          ýre   ))Úos.pathÚpathÚopr>   Znumpy.testingr   ÚnumpyrL   Zmne.ior   r   Zmne.io.projr   r   Zmne.preprocessing.sspr   r   Zmne.datasetsr	   Zmner
   ÚjoinÚdirnameÚ__file__Z	data_pathr   rA   ÚarrayrP   rc   Zfixturer   ÚmarkZparametrizerJ   rT   ZslowtestrX   r]   Zrequires_testing_datare   r   r   r   r   Ú<module>   s6   ÿ
	
*
'
