U
    f»{jY  ã                	   @   s|  d dl mZ d dlZd dlmZmZmZm	Z	 d dl
Z
d dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d dlmZ d dlm Z m!Z! d d	l"m#Z#m$Z$ ej%d
d�Z%e &e%ddd¡Z'e &e (e)¡dddddd¡Z*e &e (e)¡dddddd¡Z+e &e (e)¡dddddd¡Z,ej-dd„ ƒZ.e
j/ 0d¡e
j/ 0d¡e
j/ 0d¡dd„ ƒƒƒZ1dd„ Z2ej-dd „ ƒZ3dS )!é    N)Úassert_array_almost_equalÚassert_array_equalÚassert_equalÚassert_allclose)	Úread_covÚread_forward_solutionÚconvert_forward_solutionÚpick_types_forwardÚread_evokedsÚ
pick_typesÚEpochsArrayÚcompute_covarianceÚcompute_raw_covariance)Útesting)Úsimulate_sparse_stcÚsimulate_evokedÚ	add_noise)Úread_raw_fif)Úpick_channels_cov)Ú
regularizeÚwhiten_evoked)Úcatch_loggingÚcheck_versionF)ÚdownloadZMEGÚsamplez)sample_audvis_trunc-meg-eeg-oct-6-fwd.fifz..ÚioZtestsÚdataztest_raw.fifztest-ave.fifztest-cov.fifc               	   C   s(  t tƒ} ttƒ}t|ddd�}t|dd| jd d�}ttƒ}t	t
ddd�}|jdd| jd d� t||jƒ}|j}d	}d
}d| }d}t ||||  |¡}	t|d d|	dd�}
ddg}t||
|j|||d�}t|j|
jƒ t|jƒt|d d ƒksút‚t|j|ƒ t|jd ƒt|d ƒk�s&t‚t||ƒ}t|jdd…df  ¡ d ƒdk �sXt‚|
 ¡ }t |d d d |d d d  ¡}|d |jd d< t t t|||j|¡ t||
|j|tj!d�}t||
|j|tj!d�}t"|j|jƒ |j#dd… |d< tjt$dd�� t||
|j|ƒ W 5 Q R X dS )zTest simulation of evoked data.TF©Zforce_fixedZuse_cpsÚbads©ÚmegÚeegÚexcluder   N)Ú	conditionÚbaselinegš™™™™™¹¿ç     @�@g      ð?iX  Úsrcé   é*   )Z	n_dipolesÚtimesÚrandom_stateé   gÍÌÌÌÌÌì¿)Ú
iir_filterÚnaveZsolr   Úprojsgš™™™™™¹?ZvertnoZinuse©r-   éþÿÿÿÚnameszNot all channels present©Úmatch)%r   Ú	raw_fnamer   Ú	fwd_fnamer   r	   Úinfor   Ú	cov_fnamer
   Ú	ave_fnamer   r   r-   ÚnpZlinspacer   r   r   r)   Úlenr   ÚAssertionErrorr   r   ÚabsZstdÚcopyÚmaxZverticesÚpytestÚraisesÚ
ValueErrorÚinfr   Úch_namesÚRuntimeError)ÚrawÚfwdÚcovZevoked_templater-   ZtminZsfreqZtstepZ	n_samplesr)   Ústcr,   ÚevokedZevoked_whiteZstc_badÚmvZevoked_1Zevoked_2© rK   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/simulation/tests/test_evoked.pyÚtest_simulate_evoked!   sZ    ÿ ÿ 
(& ÿÿÿrM   z'ignore:No average EEG reference presentzignore:Too few samplesz(ignore:Epochs are not baseline correctedc               
   C   sX  t ddƒrtj d¡} ntj d¡} ttƒ}| ¡  t|j	dddd�}t
||d�}tjtdd	�� t||ƒ W 5 Q R X | dd
¡ ¡  tjtdd	�� td|ƒ W 5 Q R X tjtdd	�� t|dƒ W 5 Q R X |dd… d }| ¡ }|d  d¡ t||ƒ |dd… d }t||dd� d|jdd…< tt d
t|jƒdf¡|j	 ¡ ƒ}g |j	d< |jt t|jƒ¡d�}|||fD ]Ú}	tƒ �}
t|	|| dd� W 5 Q R X |
 ¡ }
d t|d ƒt|jƒ¡}||
k�sÎt‚|	|k�rìt|	j tj! |	j	ƒ}	|	|k�rt
|	|d�}nt"|	ƒ}|d |d k�s"t‚t #|d  $¡ |d  $¡ ¡d }|dk�sxt‚�qxdS )zTest noise addition.Únumpyz1.17r   TrK   r   )Úpickszto be loadedr2   r+   zRaw, Epochs, or Evokedg        Z
CovarianceNr   g ÂëþKH´9)Zatoléd   r   )r*   Úverbosezto {0}/{1} channels ({0}r1   ©r   r+   g®Gáz®ï?)%r   r9   ÚrandomZdefault_rngZRandomStater   r4   Zdel_projr   r6   r   r?   r@   rD   r   ÚcropZ	load_dataÚ	TypeErrorr=   Úfillr   Ú_datar   Zzerosr:   rC   ZaverageÚaranger   ÚgetvalueÚformatr;   r   Únewaxisr   ÚcorrcoefÚravel)ÚrngrE   rO   rG   Z	orig_dataZzero_covZnew_dataZepochsrI   ÚinstÚlogZwantÚcov_newÚrrK   rK   rL   Útest_add_noiseY   sV    

ÿ

 ÿ

 rc   c               	      s   t tddd�‰ dgˆ jd< ˆ j ¡ � dˆ jd< W 5 Q R X tˆ jdd	d
�} | ddd… } ˆ  ‡ fdd„| D ƒ¡ ˆ j ¡  ttƒ}g |d< t	|ˆ jdd�}t
|ˆ jƒ}dˆ jdd…< tˆ |ƒ ttˆ jtj ˆ jƒdd�}|d |d ksît‚t |d  ¡ |d  ¡ ¡d }|dk�st‚dS )z?Test adding noise from M/EEG float32 (I/O) cov with projectors.r   )Nr   )r$   zMEG 2443r   é   ZlowpassTF©r    r!   Né   c                    s   g | ]}ˆ j | ‘qS rK   ©rC   ©Ú.0Úpick©rI   rK   rL   Ú
<listcomp>•   s     z(test_rank_deficiency.<locals>.<listcomp>r.   )ZrankÚerror)rQ   r1   r   rR   g\�Âõ(\ï?)r
   r8   r6   Z_unlockr   Zpick_channelsZnormalize_projr   r7   r   r   rC   r   r   r   r   r9   r[   r;   r\   r]   )rO   rG   ra   rb   rK   rk   rL   Útest_rank_deficiencyŒ   s*    

 ÿ rn   c            	         sþ   t tƒ} t| ddd�} ttƒd jddd�‰ dˆ ks8t‚dˆ ksDt‚tˆ jdd�}tˆ jdd	�}|| ¡ k 	¡ stt‚t
 d
¡d }t| d d|dd�}t| |ˆ jt
jd�}t
 ||g¡}ˆ  ‡ fdd„|D ƒ¡ t| |ˆ jt
jd�}|j| }t|j|ƒ dS )z Test that order does not matter.TFr   r   re   r    r!   )r    )r!   é
   r%   r&   r+   )r)   r*   r/   c                    s   g | ]}ˆ j | ‘qS rK   rg   rh   rk   rK   rL   rl   ´   s     ztest_order.<locals>.<listcomp>N)r   r5   r   r
   r8   r   r;   r6   r>   Úallr9   rX   r   r   rB   ZconcatenateZreorder_channelsr   r   )	rF   Z	meg_picksZ	eeg_picksr)   rH   Z
evoked_simZreorderZevoked_sim_2Z	want_datarK   rk   rL   Ú
test_order¤   s     
rq   )4Úos.pathÚpathÚoprN   r9   Znumpy.testingr   r   r   r   r?   Zmner   r   r   r	   r
   r   r   r   r   Zmne.datasetsr   Zmne.simulationr   r   r   Zmne.ior   Zmne.io.pickr   Zmne.covr   r   Z	mne.utilsr   r   Z	data_pathÚjoinr5   ÚdirnameÚ__file__r4   r8   r7   Zrequires_testing_datarM   ÚmarkÚfilterwarningsrc   rn   rq   rK   rK   rK   rL   Ú<module>   sF   ,
ÿ ÿ ÿ ÿ
7


0