U
    9%e5                     @   s2  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"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.d/ Z-d0d1 Z.ej'(d"d2d& e$D d3d4 Z/ej'(d"e$d5d6 Z0d7d8 Z1d9d: Z2ej'(d"e$d;d< Z3ej'(d"e$d=d> Z4d?d@ Z5ej'(d"e$dAdB Z6ej'(d"e$dCdD Z7ej'(d"e$dEdF Z8dGdH Z9dS )Iz+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          @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+    j/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sklearn/gaussian_process/tests/test_kernels.pyeval_kernel_for_thetaO   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_gradientF   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=   i   s     
 z%test_kernel_theta.<locals>.<listcomp>c                 S   s   | dt d  S )Nr   _bounds)lensr1   r1   r2   <lambda>k       z#test_kernel_theta.<locals>.<lambda>c                 S   s
   |  dS )NrB   )endswithrD   r1   r1   r2   rF   k   rG   c                 s   s   | ]}|j V  qd S Nr?   )r<   hyperparameterr1   r1   r2   	<genexpr>m   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_thetaY   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_pairwise9  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_paramsK  sF    

 
 



 
r   c                 C   s   t |  d S rI   )reprr0   r1   r1   r2   test_repr_kernelsu  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__inspectr   numpyrW   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   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   8





	
1	

	 


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