U
    ½mœd,5  ã                   @   s:  d Z ddlZddlZddlmZ ddlmZ ddlm	Z	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mZmZ ddlmZ ddlmZmZmZmZ ej d¡  dd	d
¡Z!ej d¡  dd	d¡Z"edd�edd� Z#edd�edd�edd�deddd� dedd� e#deddgd� deddd� deddd� deddd� deddd� deddgdd� deddgdd� deddgdd� eddd�eddd�edd�edd�d edgd�edgd�gZ$e	D ]&Z%e%d k�rà�qÎe$ &ed!e%d"�¡ �qÎej' (d#e$¡d$d%„ ƒZ)ej' (d#d&d'„ e$D ƒ¡d(d)„ ƒZ*ej' (d#d*d'„ e$D ƒ¡d+d,„ ƒZ+ej' (d#e$¡d-d.„ ƒZ,d/d0„ Z-d1d2„ Z.ej' (d#d3d'„ e$D ƒ¡d4d5„ ƒZ/ej' (d#e$¡d6d7„ ƒZ0d8d9„ Z1d:d;„ Z2ej' (d#e$¡d<d=„ ƒZ3ej' (d#e$¡d>d?„ ƒZ4d@dA„ Z5ej' (d#e$¡dBdC„ ƒZ6ej' (d#e$¡dDdE„ ƒZ7ej' (d#e$¡dFdG„ ƒZ8dHdI„ Z9dS )Jz+Testing for kernels for Gaussian processes.é    N)Ú	signature)Ú_approx_fprime)ÚPAIRWISE_KERNEL_FUNCTIONSÚeuclidean_distancesÚpairwise_kernels)ÚRBFÚMaternÚRationalQuadraticÚExpSineSquaredÚ
DotProductÚConstantKernelÚWhiteKernelÚPairwiseKernelÚKernelOperatorÚExponentiationÚCompoundKernel)Úclone)Úassert_almost_equalÚassert_array_equalÚassert_array_almost_equalÚassert_allcloseé   )é   é   )é   r   ç       @©Úlength_scaleç      @©Znoise_level)ç      à?r   )Úlength_scale_boundsg      $@)Zconstant_valueg…ëQ¸Õ?Úfixed)r   r!   r    )r   Únuç      ø?ç      @ç      @)r   Úalpha)r   Zperiodicity)Zsigma_0r   )Zadditive_chi2Zchi2ç      ð?)ÚgammaÚmetricÚkernelc                    s„   ˆ t dd�\}}|jd t jd ks(t‚|jd t jd ks@t‚|jd ˆ jjd ksZt‚‡ fdd„}tˆ j|dƒ}t||d	ƒ d S )
NT©Zeval_gradientr   r   r   c                    s   ˆ   | ¡}|tdd�}|S )NFr,   )Zclone_with_thetaÚX)ÚthetaZkernel_cloneÚK©r+   © úd/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/gaussian_process/tests/test_kernels.pyÚeval_kernel_for_thetaQ   s    
z3test_kernel_gradient.<locals>.eval_kernel_for_thetaç»½×Ùß|Û=é   )r-   ÚshapeÚAssertionErrorr.   r   r   )r+   r/   Ú
K_gradientr3   ZK_gradient_approxr1   r0   r2   Útest_kernel_gradientH   s    r9   c                 C   s   g | ]}t |ttfƒs|‘qS r1   )Ú
isinstancer   r   ©Ú.0r+   r1   r1   r2   Ú
<listcomp>]   s   ýr=   c                 C   s6  | j }| tdd�\}}t| jjƒj ¡ }dd„ |D ƒ}tdd„ tdd„ |ƒƒ}t	dd	„ | j
D ƒƒt	|ƒksnt‚t| j
ƒD ]&\}}|| t t| |jƒ¡ksxt‚qxt| j
ƒD �]$\}}|  ¡ }	d
|	|jd < | j}
|
f |	Ž}|tdd�\}}|jd |j jd d k�s
t‚|jd |jd d k�s(t‚|dk�rt|d |… |j d |… k�sRt‚t|dd |…f |dd |…f ƒ |d t| j
ƒk rª||d d … |j |d … k�sªt‚t|d|d d …f |d|d …f ƒ qªt| j
ƒD ]T\}}t d¡||< || _ tt| |jƒdƒ t| |jdƒ t| j | t d¡ƒ �qÜd S )NTr,   c                 S   s   g | ]}|j d kr|j ‘qS )Úself©Úname)r<   Úpr1   r1   r2   r=   k   s     
 z%test_kernel_theta.<locals>.<listcomp>c                 S   s   | dt dƒ … S )Nr   Ú_bounds)Úlen©Úsr1   r1   r2   Ú<lambda>m   ó    z#test_kernel_theta.<locals>.<lambda>c                 S   s
   |   d¡S )NrB   )ÚendswithrD   r1   r1   r2   rF   m   rG   c                 s   s   | ]}|j V  qd S ©Nr?   )r<   Úhyperparameterr1   r1   r2   Ú	<genexpr>o   s     z$test_kernel_theta.<locals>.<genexpr>r"   rB   r   r   r   .é*   é+   )r.   r-   r   Ú	__class__Ú__init__Ú
parametersÚvaluesÚmapÚfilterÚsetÚhyperparametersr7   Ú	enumerateÚnpÚlogÚgetattrr@   Ú
get_paramsr6   r   rC   r   Úsetattr)r+   r.   Ú_r8   Z	init_signÚargsZ
theta_varsÚirJ   ÚparamsZkernel_classZ
new_kernelZK_gradient_newr1   r1   r2   Útest_kernel_theta[   sB     ÿÿ
 
 
 "$(r`   c                 C   s   g | ]}|t kr|‘qS r1   )Úkernel_rbf_plus_whiter;   r1   r1   r2   r=   —   s   ýc                 C   s"   | t ƒ}| t t ƒ}t||dƒ d S ©Nr   )r-   r   )r+   ZK_autoZK_crossr1   r1   r2   Útest_auto_vs_cross•   s    
rc   c                 C   s(   t  | tƒ¡}|  t¡}t||dƒ d S rb   )rW   Údiagr-   r   )r+   ZK_call_diagZK_diagr1   r1   r2   Útest_kernel_diag¥   s    
re   c                   C   sH   t tdƒd tƒdtdƒ tƒƒ t dtdƒ tƒtdƒd tƒƒ d S )Nr   r(   r   )r   r   r-   r1   r1   r1   r2   Ú test_kernel_operator_commutative­   s    "rf   c                  C   sÐ   dt ddgƒ } | tƒ}t t¡}|d d …df  d9  < dt dƒ|ƒ }t||ƒ t t¡}|d d …df  d  < dt dƒ|ƒ }t||ƒ | jt d¡ | _t| jt dd	d
g¡ƒ t| jj	d	d
gƒ d S )Nr   r    r   r   r5   r   r   g      @r(   r&   )
r   r-   rW   Úarrayr   r.   rX   r   Úk2r   )r+   r/   ZX1ÚK1ZX2ÚK2r1   r1   r2   Útest_kernel_anisotropic¶   s    



rk   c                 C   s   g | ]}|  ¡ r|‘qS r1   )Zis_stationaryr;   r1   r1   r2   r=   Ì   s      c                 C   s&   | t t d ƒ}t|d t |¡ƒ d S )Nr   )r   r   )r-   r   rW   rd   )r+   r/   r1   r1   r2   Útest_kernel_stationaryË   s    rl   c                 C   sD   t | tƒr| j| jjkst‚t | tƒr@| j| jjp8| jjks@t‚d S rI   )r:   r   Úrequires_vector_inputr+   r7   r   Zk1rh   r0   r1   r1   r2   Útest_kernel_input_typeÔ   s    

ÿrn   c                  C   s@   t tdd�gƒ} | jrt‚t tdd�tdd�gƒ} | js<t‚d S )Nr   r   r   r   )r   r   rm   r7   r   r0   r1   r1   r2   Útest_compound_kernel_input_typeß   s    
ro   c                 C   sH   t t| ƒt|ƒ ƒD ].}| d¡rt| |ƒ}t||ƒ}||kst‚qd S )NZhyperparameter_)rT   ÚdirÚ
startswithrY   r7   )Zkernel1Zkernel2ÚattrZattr_value1Zattr_value2r1   r1   r2   Úcheck_hyperparameters_equalç   s
    


rs   c                 C   sJ   t | ƒ}| |kst‚t| ƒt|ƒks(t‚|  ¡ | ¡ ks<t‚t| |ƒ d S rI   )r   r7   ÚidrZ   rs   )r+   Úkernel_clonedr1   r1   r2   Útest_kernel_cloneð   s
    rv   c                 C   sº   d}t | ƒ}|  ¡ }ttf}d|kr¶t| |ƒs¶|d }t |¡rV|d |d< ||d< n|gd |d< |d |d< |jf |Ž t |ƒ}| ¡ | ¡ ks˜t‚t	|ƒt	|ƒks¬t‚t
||ƒ d S )N)gñhãˆµøä>g     jø@r   r   r!   r   )r   rZ   r
   r	   r:   rW   ÚiterableÚ
set_paramsr7   rt   rs   )r+   Úboundsru   r_   Zisotropic_kernelsr   Zkernel_cloned_cloner1   r1   r2   Ú"test_kernel_clone_after_set_params  s     

rz   c                  C   s   t ddd�tƒ} tt | ¡t tjd ¡ƒ t tttdd� ¡}t ddd�tƒ} t| |ƒ t	dd�tƒ}t tj
dd�tƒ} t| |ƒ t| |ƒ d	}d
D ]2}t |dd�tƒ}t || dd�tƒ}t||ƒ q˜d}t |dd�tƒ}t	dd�tƒ}t||dd� d S )Nr$   r(   )r#   r   r   F)Zsquaredr    r   r4   )r    r$   r%   éd   r   )Údecimal)r   r-   r   rW   rd   Zonesr6   Úexpr   r   Úinfr   )r/   ZK_absexpZK_rbfZtinyr#   ri   rj   Zlarger1   r1   r2   Útest_matern_kernel  s$    


r   c                 C   sL   | t kr&| tƒ}tt| d�}t||ƒ | ttƒ}ttt| d�}t||ƒ d S )N)r*   )ra   r-   r   r   ÚY)r+   ri   rj   r1   r1   r2   Útest_kernel_versus_pairwise;  s    

r�   c                 C   sN  d}|   ¡ }| jD ]€}tdt|jƒƒr2|jdkr2q|j}|dkrntt | j	||| … ¡||j
 ƒ ||7 }qtt | j	| ¡||j
 ƒ |d7 }qd}d}| jD ]¦}tdt|jƒƒrÂ|jdkrÂq¢|j}|dk�r| jf |j
|g| iŽ tt | j	||| … ¡|g| ƒ ||7 }q¢| jf |j
|iŽ tt | j	| ¡|ƒ |d7 }q¢d S )Nr   Ústringr"   r   é
   )rZ   rU   r:   Útypery   Z
n_elementsr   rW   r}   r.   r@   rx   )r+   Úindexr_   rJ   ÚsizeÚvaluer1   r1   r2   Útest_set_get_paramsM  sF    

 ÿ
 ÿ



 ÿ
rˆ   c                 C   s   t | ƒ d S rI   )Úreprr0   r1   r1   r2   Útest_repr_kernelsw  s    rŠ   c               	   C   s8   t ddgd�} d}tjt|d�� | tƒ W 5 Q R X d S )Nr(   r   zeRationalQuadratic kernel only supports isotropic version, please use a single scalar for length_scale)Úmatch)r	   ÚpytestZraisesÚAttributeErrorr-   )r+   Úmessager1   r1   r2   Útest_rational_quadratic_kernel~  s
    ÿr�   ):Ú__doc__rŒ   ÚnumpyrW   Úinspectr   Z sklearn.gaussian_process.kernelsr   Zsklearn.metrics.pairwiser   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Zsklearn.baser   Zsklearn.utils._testingr   r   r   r   ÚrandomZRandomStateÚnormalr-   r€   ra   Zkernelsr*   ÚappendÚmarkZparametrizer9   r`   rc   re   rf   rk   rl   rn   ro   rs   rv   rz   r   r�   rˆ   rŠ   r�   r1   r1   r1   r2   Ú<module>   sš   4



ì

þþ	
1þþ	

	 ÿ


	



)
