U
    f»{j­X  ã                   @   s†  d dl mZ d dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZmZmZ d dlmZmZ e e e¡d	d	d
dd¡Ze ed¡Ze ed¡Z d\Z!Z"e#ddd�Z$dZ%dd„ Z&edd„ ƒZ'dd„ Z(ej)j*ej) +de%¡edd„ ƒƒƒZ,ej) +de%¡dd„ ƒZ-ej) +de%¡edd „ ƒƒZ.ej) +de%¡ed!d"„ ƒƒZ/d#d$„ Z0ed%d&„ ƒZ1ed'd(„ ƒZ2dS ))é    N)Úeinsum)ÚrfftÚirfft)Úassert_array_equalÚassert_allcloseÚassert_equal)Úrequires_sklearn)ÚReceptiveFieldÚTimeDelayingRidge)Ú_delay_time_seriesÚ_SCORERSÚ_times_to_delaysÚ_delays_to_slice)Ú_compute_reg_neighborsÚ_compute_corrsz..ÚioZtestsÚdataztest_raw.fifztest-eve.fif)çš™™™™™¹¿ç      à?é   é   )Zaud_lZvis_l)r   Úcudac                  C   sf   dD ]\} dD ]R\}}dD ]D}t ||| d|d�}t ||| d|d�}t||dd| ||ff d	� qqqd
S )z/Test fast calculation of laplacian regularizer.))Úridger   )r   Ú	laplacian)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   )TFÚdirect)ÚnormedZcsgraphçH¯¼šò×z>z%s: %s©ÚatolÚerr_msgN)r   r   )Úreg_typeÚn_ch_xÚn_delaysr"   Z
reg_directZreg_csgraph© r*   úf/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/decoding/tests/test_receptive_field.pyÚtest_compute_reg_neighbors    s.        ÿ    ÿ  þr,   c                  C   s  ddl m}  d}d}d\}}d}tj d¡}| |d¡}|d9 }t|dd	�}d||d
 d…< t|dd	�}t |d ¡}|| 	¡  }tj
tjd||dd�}	|	|j|	jŽ d 7 }	| |ƒ|fD ]^}
t||||
dd�}| ||	¡ | |¡}t|	j|jƒ t |	 ¡ | ¡ ¡d }|dks¸t‚q¸dS )z%Test signals that are rank deficient.r   ©ÚRidgeé   ç      ð?)iÎÿÿÿéd   çš™™™™™¹?r   r1   ©Zaxisr   Né   Úsame)ÚmodeT©Ú	estimatorÚpatterns©r   r   g×£p=
×ï?)Úsklearn.linear_modelr.   ÚnpÚrandomÚRandomStateÚrandnr   r   ZhanningÚmeanZapply_along_axisÚconvolveÚshaper	   ÚfitÚpredictr   ÚcorrcoefÚravelÚAssertionError)r.   ÚNÚfsÚtminÚtmaxÚregÚrngZeegÚwinÚyZestÚrfÚpredZcorrr*   r*   r+   Útest_rank_deficiency7   s,    
rR   c                  C   sÔ  t j d¡ dd¡} | dk ¡ dks(t‚dddddd	d
dddddddddg}|D �]|\\}}}tjtdd�� t	| ||dgd� W 5 Q R X tjtdd�� t	| t  
|¡|dƒ W 5 Q R X tt|| ƒƒtt|| ƒƒd  }}|| }t	| |||ƒ}t|jdd|fƒ t|||ƒ}	t|	t  ||¡ƒ t|	ƒ}
t  |dk d¡ d¡¡d }t  t|ƒ¡|
 }t||ƒ ||
 jd dk�s~t‚||
 dk ¡ dk�s˜t‚tt| | ƒƒ}tddƒD �]}|| }d|||||f }d|  k�rò|jd k �r´n nÔ|dk�r"t|dd…dd…|f | |d� n¨|dk �r|t|d|…dd…|f | | d…dd…f |d� t||d…dd…|f dƒ nNt||d…dd…|f | d| …dd…f |d� t|d|…dd…|f dƒ �q´qPdS )z<Test that time-delaying w/ times and samples works properly.r   éè  r   )r   r   )r   r   )©r   r   r   )r:   r   ))r   r   r   ))éÿÿÿÿr   r   )©rU   r   r   ))rU   r   r   ))rU   rU   r   ))éþÿÿÿr   r   ))rW   r   r   ))rW   r   r   )©rW   rU   r   ))r   çš™™™™™É?é
   ))r   r2   rZ   z`sfreq` must be an instance of©Úmatchr   )Zsfreqz.*complex.*rU   rW   r   z[%s,%s] (%s): %s %sN)r&   ç        )r<   r=   r>   r?   ÚsumrG   ÚpytestÚraisesÚ	TypeErrorr   Z
complex128ÚintÚroundr   rB   r   r   Úaranger   ÚwhereÚallÚlenÚrange)ÚXZ
test_tlimsrJ   rK   ZisfreqÚstartÚstopr)   Z	X_delayedZdelaysZkeepÚexpectedÚgotZdel_zeroÚiiÚidxr&   r*   r*   r+   Útest_time_delayT   sl    ð&
"
ÿ
*ÿ*ÿrp   Ún_jobsc              
   C   s  ddl m} |ƒ }tj d¡}d\}}d}tj d¡}| d|¡}| t|| d ƒ| ¡}tjt|||dƒ 	d	dd¡dd
�}	t 
|	|¡}
dd„ dD ƒ}t||d||dd�}| ||
¡ t|jt ||d ¡ƒ | |¡}t|
|j ||j dd� | ||
¡}|dk�st‚t|jj ¡ |dd� | |dd…tjd…f |
dd…tjf ¡ | ||
dd…tjf ¡ tjtdd�� | |dtjf |
¡ W 5 Q R X tjtdd�� | |dd…df |
¡ W 5 Q R X tjtdd��@ | |dd…tjf t |
dd…tjtjf dd	dg¡¡ W 5 Q R X tjtdd�� | ||
dd… ¡ W 5 Q R X tjtdd��" | |dd…dd…f |
¡ W 5 Q R X dd„ dD ƒ}t||d||d�}t|j|ƒ t||d|d�}| ||
¡ t|jdƒ t||dd d!d"gdd�}t|ƒ | ||
¡ t |j!t"ƒ�st‚t|ƒ t||dd gdd�}| |dd…dgf |
¡ t|ƒ 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g¡d� ||
¡ W 5 Q R X tjtd%d�� td&d'dƒ ||
¡ W 5 Q R X t$ %¡ D ]¤\}}t||dd gd|dd(�}| |dd…dgf |
¡ | |dd…dgf ¡j ¡ dd…tjf }t||
dd…tjf |d)d*�| |dd…dgf |
¡dd+� �qú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 dS )0zTest model prep and fitting.r   r-   i9  )g      $Àr   r   i'  r   r0   r   r3   c                 S   s   g | ]}d | ‘qS )z
feature_%ir*   ©Ú.0rn   r*   r*   r+   Ú
<listcomp>ª   s     z.test_receptive_field_basic.<locals>.<listcomp>)r   r   r   Tr7   ç{®Gáz„?©r%   g®Gáz®ï?çü©ñÒMbP?Nz If X has 3 .* y must have 2 or 3r[   .zX must be shapez"X and y do not have the same n_epoz"X and y do not have the same n_timrW   zn_features in X does not matchc                 S   s   g | ]}d | ‘qS )z
feature_%sr*   rr   r*   r*   r+   rt   Ä   s     )r8   Úfeature_names©r8   ÚoneÚtwoÚthreez`estimator` must be a float orÚfooztmin .* must be at most tmaxr   r   )r8   Úscoringr9   Z
raw_values)Zmultioutput)Úrtolzinputs must be shaperE   zscoring must be one of)r~   )&r;   r.   r<   r=   r>   r?   rb   Úconcatenater   Ú	transposeÚdotr	   rC   r   Údelays_rd   rD   r   Úvalid_samples_ÚscorerG   Úcoef_ÚTrF   Únewaxisr_   r`   Ú
ValueErrorZtiler   rx   ÚstrÚ
isinstanceÚ
estimator_r
   Úarrayr   Úitems)rq   r.   ÚmodrM   rJ   rK   Ún_featsri   ÚwÚX_delrO   rx   rP   Úy_predZscoresÚkeyÚvalr*   r*   r+   Útest_receptive_field_basic’   sœ     ÿÿ
, ",ÿ&
ÿ".  ÿ,ÿ þ
 r–   c                 C   s8  t  dddgdddgg¡j}d\}}t|||dƒ}|jd	 d
f|_t  d	ddgd	d	dgd	ddgd	d	dgg¡j}t||ƒ t  |j|¡}ddddgddddgddddgddddgg}t||ƒ t|t  |jd	 df¡||d ƒd	 }t||ƒ d\}}t|||dƒ}|jd	 d
f|_t  dd	d	gddd	gdd	d	gddd	gg¡j}t||ƒ t  |j|¡}ddddgddddgddddgddddgg}t||ƒ t|t  |jd	 df¡||d ƒd	 }t||ƒ d\}}t|||dƒ}|jd	 d
f|_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g¡j}t||ƒ t  |j|¡}ddddddgdddd d!dgddddd dgdd ddd"d#gdd!d d"d$d"gdddd#d"dgg}t||ƒ t|t  |jd	 df¡||d ƒd	 }t||ƒ t  ddddgg¡j}d%\}}t|||dƒ}|jd	 d
f|_t  ddddgd	dddgd	d	ddgd	d	d	dgg¡j}t||ƒ t  |j|¡}d&d'ddgd'dddgddddgddddgg}t||ƒ t|t  |jd	 df¡||d ƒd	 }t||ƒ t  dddgdddgg¡j}d(\}}t|||dƒ}|jd	 d
f|_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g¡j}t||ƒ t  |j|¡}t  dddd!ddgdddd ddgddddddgd!d dd$d"d#gdddd"ddgdddd#ddgg¡}t||ƒ t|t  |jd	 df¡||d ƒd	 }t||ƒ t j	 
d	¡}| dd¡}t  d)¡}	d*}
|
D �]"}|
D �]}||k�r,�qt|jd ƒD ]V}| || d ¡}|t  |¡8 }t  |d+d+…|f |d,¡|	d+d+…||	jd
  f< �q:t||	||d ƒ\}}}}}t|||dd-d.�}td/||	ƒ}t  ||jd	 d
f¡j}t||d0||fd1� |jd	 d
f|_t  |j|¡j}t||d0||fd1� �q�qd+S )2z)Test time delaying and fast calculations.r   r   r   r   é   é   r   r0   r   rU   é   rZ   éJ   é#   é   rX   r    é   é!   é   é   é   é/   éy   éM   éª   rV   r4   é   é   é   é   é4   ép   é7   éÃ   )r   r   é'   é   rT   )rœ   r   )r   rU   r   rW   r   iõÿÿÿr˜   Nr5   F)Z	fill_meanztfd,to->ofdr#   r$   )r<   r�   r‡   r   rB   r   r‚   r   Úzerosr=   r>   r?   Úemptyrh   r@   rA   r   Úreshape)rq   ri   ÚsminÚsmaxr’   rl   ZXt_XZx_xtrM   rO   Úvalsrn   ZkernelZx_ytr(   Ú_Z	x_yt_trueZ	x_xt_truer*   r*   r+   Útest_time_delaying_fast_calcë   sÆ    ,
,
&
,

 
ÿ
&
  ÿ
û
&

 
ÿ
,
&
  ÿ
û
&




4r·   c                 C   sh  ddl m} tj d¡}| dd¡}tddƒD �]2}t d¡}dg}|dkrf|dd…df |dd…< nR|dk r”|| d…df |d|…< |d	g7 }n$|d| …df ||d…< |d
g7 }d
D �]¢}|jd fd|d   |_|D �]|}|\}	}
t	|	|
dddd| d�}|dd�|dd�dd|fD �]<}dD �].}t
|	|
d|| d�}|| }| ||¡ ||k�rb�q(t|jj| dd� t|jt |	|
d ¡ƒ |j|k t¡}|tj }|jdk�r¾|tj }t|jj|d ƒ t|j|dd� |jj�pìd}t|ƒ|jj�p d }|| dk�st‚t| |¡|j ||j dd� t | ||¡¡}|dk�s(t‚�q(�qqàq¼q.dS )z,Test that the fast solving works like Ridge.r   r-   iô  r   rW   r   )rW   r   N)éüÿÿÿrU   r   )r   r0   r2   r   F©Úfit_interceptrq   r]   ©Úalpha)iœÿÿÿr   r1   )r8   rq   rv   r   rw   iï  ru   ç§èH.ÿï?) r;   r.   r<   r=   r>   r?   rh   r°   rB   r
   r	   rC   r   rŒ   Ú
intercept_r   rƒ   rd   ZastypeÚfloatrˆ   Úndimr   r†   r„   rj   rg   rk   rG   rD   r@   r…   )rq   r.   rM   ÚxÚdelayrO   ZslimsrÀ   Úslimr³   r´   Zlapr8   ÚoffsetÚmodelZuse_xrl   rj   rk   r…   r*   r*   r+   Útest_receptive_field_1dQ  sn    



 ÿÿ

þ
ÿÿ

 þrÆ   c              	   C   sb  ddl m} tj d¡}| dd¡}t d¡}d\}}tddƒD ]>}||d	…|d
 f  d| | |d	| …|d f  7  < q@|tj|dd�8 }|tj|dd�8 }|d }ddddddgddddddgddd
dddggddddddgddddddgddddddggg}	t	||ddd| d�}
t	||dd| dd�}t
|dd�dd|
|fdƒD ]N\}}t||d|d�}| ||¡ t|jt ||d ¡ƒ t|j|	|d� �qJt	||ddd| d�}t||d|d�}tjtdd�� | ||¡ W 5 Q R X t	||dddg| d�}t||d|d�}tjtd d�� | ||¡ W 5 Q R X t||d|dd!�}tjtd"d�� | ||¡ W 5 Q R X t	||dd| d�}t	||ddd| d#�}|dd�||ddd$�|fD �]²}t||d|d�}| ||¡ t|jjdd%t|ƒd&� t|j|	d't|ƒd&� | |¡}t||j ||j dt|ƒd&� t | ||¡¡}|d(k�sBt‚| ||¡ |j�rhd)d*g}d+}d,}nd }}d-}t|jj||t|ƒd&� t|j|	||t|ƒd.� |j�r¶d}d/}nd0}d1}| |¡|j }t|||j |t|ƒd&� t | ||¡¡}||k�st|ƒ‚t||ddd2�}| ||¡ t|jjdd%d� t | ||¡¡}|d1k�s¨t‚�q¨d	S )3zTest multidimensional support.r   r-   r   rS   )rS   r   )r   r   r   r   Nr   rU   r3   g     @�@r   éýÿÿÿr0   r2   r   )rq   F)rq   Zedge_correctionr]   r»   ru   )rw   rw   rw   g{®Gázt?gš™™™™™©?ry   rv   r}   )r'   rq   zreg_type entries must be one ofr[   zreg_type must have two elements)r8   rº   rº   r¹   )r¼   rº   r#   r$   rw   r½   i�èÿÿi   r   gü©ñÒMb@?g       @)r%   r   r&   gé!çýÿï?rZ   g333333ã?)rº   )r;   r.   r<   r=   r>   r?   r°   rh   r@   r
   Úzipr	   rC   r   rƒ   rd   r   r†   r_   r`   r‰   rŒ   r¾   ÚreprrD   r„   r…   rG   rº   )rq   r.   rM   rÁ   rO   r³   r´   rn   Zx_offrl   Ztdr_lZtdr_ncr8   r%   rÅ   ÚtdrZtdr_nor“   r…   r•   ZitolZctolZptolZstolr*   r*   r+   Útest_receptive_field_nd‡  sÎ    
<þþüÿÿÿÿÿÿÿ

 ÿ
ÿ
ÿ

 þÿÿ ÿrË   c           
      C   sj   t j d¡}| || ¡}| t|| d ƒ|  |¡}t jt|||dƒ ddd¡dd�}t  ||¡}	||	fS )Nr   r   r0   r   r3   )	r<   r=   r>   r?   rb   r€   r   r�   r‚   )
r�   Ú	n_targetsÚ	n_samplesrJ   rK   rM   ri   r‘   r’   rO   r*   r*   r+   Ú
_make_dataí  s     ÿrÎ   c                  C   s&  ddl m}  d\}}d\}}}t|| d ƒ}t|||||ƒ\}}t||dddƒ}	d	d
| d	d�|	fD ]¼}
t||d|
dd�}| ||¡ t||d|
dd�}| ||¡ t|jj	|j
j	|||fƒ t|jj	|j
j	|||fƒ |j ||| ¡}|j
 ||| ¡}tt ||j¡t |j	d ¡dd� qddS )z&Test inverse coefficients computation.r   r-   )r]   g      $@)r   r   rS   r   r0   r2   r   r]   ru   r»   Tr7   rY   rv   N)r;   r.   rb   rÎ   r
   r	   rC   r   r†   rB   Z	patterns_r²   r   r<   r‚   r‡   Úeye)r.   rJ   rK   r�   rÌ   rÍ   r)   ri   rO   rÊ   r8   rP   Zinv_rfZc0Úc1r*   r*   r+   Útest_inverse_coefø  s0    

ÿ
ÿÿÿrÑ   c               
   C   s|   ddl m}  d\}}}t|||ttƒ\}}d| dd�fD ]>}tttd|d�}tjtt	fdd	�� | 
||¡ W 5 Q R X q8d
S )z@Test that warnings are issued when no regularization is applied.r   r-   )r   é<   é2   r]   r»   r0   ry   z[Singular|scipy.linalg.solve]r[   N)r;   r.   rÎ   rJ   rK   r	   r_   ZwarnsÚRuntimeWarningÚUserWarningrC   )r.   r�   rÌ   rÍ   ri   rO   r8   rP   r*   r*   r+   Útest_linalg_warning  s    

ÿrÖ   )3Úos.pathÚpathÚopr_   Únumpyr<   r   Z	numpy.fftr   r   Znumpy.testingr   r   r   Z	mne.utilsr   Zmne.decodingr	   r
   Zmne.decoding.receptive_fieldr   r   r   r   Z mne.decoding.time_delaying_ridger   r   ÚjoinÚdirnameÚ__file__Údata_dirZ	raw_fnameZ
event_namerJ   rK   ÚdictZevent_idZn_jobs_testr,   rR   rp   ÚmarkZslowtestZparametrizer–   r·   rÆ   rË   rÎ   rÑ   rÖ   r*   r*   r*   r+   Ú<module>   sH   
>V
e4d
