o
    i8                     @   s<  d Z 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
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mZ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"de!j#_$de"j#_$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 v rqe&(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 Z0ej)*d#d3d' e&D d4d5 Z1ej)*d#e&d6d7 Z2d8d9 Z3d:d; Z4ej)*d#e&d<d= Z5ej)*d#e&d>d? Z6d@dA Z7ej)*d#e&dBdC Z8ej)*d#e&dDdE Z9ej)*d#e&dFdG Z:dHdI Z;dS )Jz+Testing for kernels for Gaussian processes.    )	signatureN)clone)RBFCompoundKernelConstantKernel
DotProductExponentiationExpSineSquaredKernelOperatorMaternPairwiseKernelRationalQuadraticWhiteKernel_approx_fprime)PAIRWISE_KERNEL_FUNCTIONSeuclidean_distancespairwise_kernels)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal   )      )   r   F       @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    tdd\}}|jd tjd ksJ |jd tjd ks$J |jd  jjd ks1J  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+    e/home/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/gaussian_process/tests/test_kernels.pyeval_kernel_for_thetaT   s   
z3test_kernel_gradient.<locals>.eval_kernel_for_theta绽|=   )r   r-   shaper.   r   r   )r+   r/   
K_gradientr3   ZK_gradient_approxr1   r0   r2   test_kernel_gradientJ   s   r8   c                 C   s   g | ]}t |ttfs|qS r1   )
isinstancer
   r   .0r+   r1   r1   r2   
<listcomp>`   s    r<   c                 C   s4  t | } | j}| tdd\}}t| jjj }dd |D }tdd t	dd |}t
dd	 | jD t
|ks;J t| jD ]\}}|| tt| |jksSJ q@t| jD ]\}}|  }	d
|	|jd < | j}
|
di |	}|tdd\}}|jd |jjd d ksJ |jd |jd d ksJ |dkr|d | |jd | ksJ t|dd |f |dd |f  |d t| jk r||d d  |j|d  ksJ t|d|d d f |d|d f  qYt| jD ])\}}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<   o   s    z%test_kernel_theta.<locals>.<listcomp>c                 S   s   | dt d  S )Nr   _bounds)lensr1   r1   r2   <lambda>q   s    z#test_kernel_theta.<locals>.<lambda>c                 S   s
   |  dS )NrA   )endswithrC   r1   r1   r2   rE   q   s   
 c                 s   s    | ]}|j V  qd S Nr>   )r;   hyperparameterr1   r1   r2   	<genexpr>s   s    z$test_kernel_theta.<locals>.<genexpr>r"   rA   r   r   r   .*   +   r1   )r   r.   r-   r   	__class____init__
parametersvaluesmapfiltersethyperparameters	enumeratenploggetattrr?   
get_paramsr6   r   rB   r   setattr)r+   r.   _r7   Z	init_signargsZ
theta_varsirH   paramsZkernel_classZ
new_kernelZK_gradient_newr1   r1   r2   test_kernel_theta^   sF   
 ""&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}t||d d S Nr   )r   r-   r   )r+   ZK_autoZK_crossr1   r1   r2   test_auto_vs_cross   s   

ra   c                 C   s0   t | } t| t}| t}t||d d S r`   )r   rU   diagr-   r   )r+   ZK_call_diagZK_diagr1   r1   r2   test_kernel_diag   s   
rc   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   "&rd   c                  C   s   dt ddg } | t}t }|d d df  d9  < dt d| }t|| t }|d d df  d  < dt d| }t|| | jtd | _t| jtg d t| jj	d	d
g d S )Nr   r    r   r   r5   r   r   )g      @r(   r&   r(   r&   )
r   r-   copyr   r.   rU   rV   r   k2r   )r+   r/   ZX1K1ZX2K2r1   r1   r2   test_kernel_anisotropic   s   

ri   c                 C   s   g | ]}|  r|qS r1   )Zis_stationaryr:   r1   r1   r2   r<      s    c                 C   s.   t | } | ttd }t|d t| d S )Nr   )r   r   )r   r-   r   rU   rb   )r+   r/   r1   r1   r2   test_kernel_stationary   s   rj   c                 C   sP   t | } t| tr| j| jjksJ t| tr$| j| jjp | jjks&J d S d S rG   )r   r9   r   requires_vector_inputr+   r
   Zk1rf   r0   r1   r1   r2   test_kernel_input_type   s   

rl   c                  C   s@   t tddg} | jrJ t tddtddg} | jsJ d S )Nr   r   r   r   )r   r   rk   r   r0   r1   r1   r2   test_compound_kernel_input_type   s   
rm   c                 C   sH   t t| t| D ]}|dr!t| |}t||}||ks!J q
d S )NZhyperparameter_)rR   dir
startswithrW   )Zkernel1Zkernel2attrZattr_value1Zattr_value2r1   r1   r2   check_hyperparameters_equal   s   


rq   c                 C   sR   t | } t | }| |ksJ t| t|ksJ |  | ks"J t| | d S rG   )r   idrX   rq   )r+   kernel_clonedr1   r1   r2   test_kernel_clone   s   rt   c                 C   s   t | } d}t | }|  }ttf}d|v rct| |se|d }t|r/|d |d< ||d< n|gd |d< |d |d< |jdi | t |}| | ksRJ t|t|ks\J t	|| d S d S d S )N)gh㈵>g     j@r   r   r!   r   r1   )
r   rX   r	   r   r9   rU   iterable
set_paramsrr   rq   )r+   boundsrs   r]   Zisotropic_kernelsr   Zkernel_cloned_cloner1   r1   r2   "test_kernel_clone_after_set_params
  s$   

rx   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 ]}t |ddt}t || ddt}t|| qLd}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   rU   rb   Zonesr6   expr   r   infr   )r/   ZK_absexpZK_rbfZtinyr#   rg   rh   Zlarger1   r1   r2   test_matern_kernel(  s$   


r}   c                 C   sT   t | } | tkr| t}tt| d}t|| | tt}ttt| d}t|| d S )N)r*   )r   r_   r-   r   r   Y)r+   rg   rh   r1   r1   r2   test_kernel_versus_pairwiseE  s   

r   c                 C   s\  t | } d}|  }| jD ]@}tdt|jr|jdkrq|j}|dkr;tt	| j
|||  ||j  ||7 }qtt	| j
| ||j  |d7 }qd}d}| jD ]V}tdt|jre|jdkreqU|j}|dkr| jdi |j|g| i tt	| j
|||  |g|  ||7 }qU| jdi |j|i tt	| j
| | |d7 }qUd S )Nr   stringr"   r   
   r1   )r   rX   rS   r9   typerw   Z
n_elementsr   rU   r{   r.   r?   rv   )r+   indexr]   rH   sizevaluer1   r1   r2   test_set_get_paramsX  sD   







r   c                 C   s   t | } t|  d S rG   )r   reprr0   r1   r1   r2   test_repr_kernels  s   r   c                  C   sN   t ddgd} d}tjt|d | t W d    d S 1 s w   Y  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__inspectr   numpyrU   r   Zsklearn.baser   Z sklearn.gaussian_process.kernelsr   r   r   r   r   r	   r
   r   r   r   r   r   Zsklearn.metrics.pairwiser   r   r   Zsklearn.utils._testingr   r   r   r   randomZRandomStatenormalr-   r~   flagsZ	writeabler_   Zkernelsr*   appendmarkZparametrizer8   r^   ra   rc   rd   ri   rj   rl   rm   rq   rt   rx   r}   r   r   r   r   r1   r1   r1   r2   <module>   s    8





	2
	
	

	



*
