U
    3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qe$&ed!e%d" qe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+    O/tmp/pip-unpacked-wheel-zrfo1fqw/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stt|d|d d f |d|d f  qt| j
D ]T\}}td||< || _ tt| |jd t| |jd t| j | td qd 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rt| |s|d }t|rV|d |d< ||d< n|gd |d< |d |d< |jf | t |}| | kstt	|t	|kstt
|| d S )N)gh㈵>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|| qd}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rq|j}|dkr| jf |j
|g| i tt| j	|||  |g|  ||7 }q| jf |j
|i tt| j	| | |d7 }qd 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   Z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	

	 


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