a
    h&                     @   sZ  d Z ddlZddlZddlZddlm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 ddlmZ dd	lmZmZ d
d ZeedddjZeg djZejee dkedZee Z ej!ej"edZ#de#e dk < de#e dke dk @ < de#e dk< edddZ$edde$edddeddeddd gZ%dd e%D Z&ej'(de%dd Z)d d! Z*ej'(de&d"d# Z+ej'(de%d$d% Z,ej'(de%d&d' Z-ej'(de&d(d) Z.ej'(de%d*d+ Z/d,d- Z0ej'(de&d.d/ Z1ej'(de%d0d1 Z2ej'(de%d2d3 Z3d4d5 Z4ej'(d6dedie5d7fgd8d9 Z6dS ):z+Testing for Gaussian process classification    N)approx_fprime)ConvergenceWarning)GaussianProcessClassifier)RBFCompoundKernelWhiteKernel)ConstantKernel)MiniSeqKernel)assert_almost_equalassert_array_equalc                 C   s
   t | S )N)npsin)x r   c/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/gaussian_process/tests/test_gpc.pyf   s    r   
      )       @g      @g      @g      @g      @Zdtypegffffffֿ   gffffff?         ?fixedlength_scalelength_scale_boundsg?)r   )MbP?     @@g{Gz?      Y@c                 C   s   g | ]}|t kr|qS r   )fixed_kernel).0kernelr   r   r   
<listcomp>/       r$   r#   c                 C   s<   t | dtt}t|t|td d df dk d S )Nr#   r         ?)r   fitXyr   predictpredict_probar#   gpcr   r   r   test_predict_consistent2   s    r/   c                  C   s\   g d} t g d}tdd}t|d| |}t|| || d d df dk d S )N)AZABB)TFTr   )Zbaseline_similarity_boundsr&   r   r'   )r   arrayr	   r   r(   r   r+   r,   )r)   r*   r#   r.   r   r   r   "test_predict_consistent_structured9   s
    
r3   c                 C   s4   t | dtt}||jj|| jks0J d S )Nr&   )r   r(   r)   r*   log_marginal_likelihoodkernel_thetar-   r   r   r   test_lml_improvingB   s    r7   c                 C   s0   t | dtt}t||jj| d d S )Nr&      )r   r(   r)   r*   r
   r4   r5   r6   r-   r   r   r   test_lml_precomputedK   s    r9   c                 C   sJ   t | dtt}tj|jjjtj	d}|j
|dd t|jj|d d S )Nr&   r   F)Zclone_kernelr8   )r   r(   r)   r*   r   Zonesr5   r6   shapeZfloat64r4   r
   )r#   r.   Zinput_thetar   r   r   test_lml_without_cloning_kernelT   s    r;   c                 C   sz   t | dtt}||jjd\}}tt	|dk |jj|jj
d d df kB |jj|jj
d d df kB svJ d S )Nr&   T-C6?r   r   )r   r(   r)   r*   r4   r5   r6   r   allabsbounds)r#   r.   lmllml_gradientr   r   r   test_converged_to_local_maximum^   s    rB   c                    sJ   t | dtt  | jd\}}t| j fddd}t||d d S )Nr&   Tc                    s     | dS )NF)r4   )r6   r.   r   r   <lambda>s   r%   z#test_lml_gradient.<locals>.<lambda>g|=   )r   r(   r)   r*   r4   r6   r   r
   )r#   r@   rA   Zlml_gradient_approxr   rC   r   test_lml_gradientl   s    rF   c                 C   s   d\}}t j| }|||d d }t |jddt d| jdd dk}tddtd	g| d
g| d }t j }t	dD ]F}t
||| d||}	|	|	jj}
|
|t t jj ksJ |
}qd S )N)   r   r   r   )ZaxisrE   r   r   r   r   )r<   r    r      )r#   n_restarts_optimizerZrandom_state)r   randomRandomStateZrandnr   sumCr   infranger   r(   r4   r5   r6   ZfinfoZfloat32eps)global_random_seedZ	n_samplesZ
n_featuresrngr)   r*   r#   Zlast_lmlrI   gpr@   r   r   r   test_random_startsy   s&    ,
rT   c                    sF    fdd}t | |d}|tt ||jj|| jksBJ d S )Nc           	         s   t j }|| |dd }}tdD ]\}t |t d|d d df t d|d d df }| |dd}||k r&|| }}q&||fS )NF)Zeval_gradientr   r   r   )r   rJ   rK   rO   Z
atleast_1duniformmaximumminimum)	Zobj_funcZinitial_thetar?   rR   Z	theta_optZfunc_min_r6   r   rQ   r   r   	optimizer   s    
2z(test_custom_optimizer.<locals>.optimizer)r#   r[   )r   r(   r)   y_mcr4   r5   r6   )r#   rQ   r[   r.   r   rZ   r   test_custom_optimizer   s    
r]   c                 C   sP   t | d}|tt |t}t|dd |t}t	t
|d| d S )Nr&   r   )r   r(   r)   r\   r,   X2r
   rL   r+   r   r   Zargmax)r#   r.   y_probZy_predr   r   r   test_multi_class   s    


r`   c                 C   sP   t | d}|tt t | dd}|tt |t}|t}t|| d S )Nr&   r   )r#   Zn_jobs)r   r(   r)   r\   r,   r^   r
   )r#   r.   Zgpc_2r_   Zy_prob_2r   r   r   test_multi_class_n_jobs   s    


ra   c            	      C   s  t ddgd} t| d}d}tjt|d |tt W d    n1 sL0    Y  tddgdt dd	gd }t|d}t	j
d
d}t	d |tt t|dksJ t|d jtsJ |d jjd dksJ t|d jtsJ |d jjd dks
J W d    n1 s 0    Y  ttd}t ddgddgd}t|d}t	j
d
d}t	d ||t t|dksJ t|d jtsJ |d jjd dksJ t|d jtsJ |d jjd dksJ W d    n1 s 0    Y  d S )Ngh㈵>r   )r   r&   zThe optimal value found for dimension 0 of parameter length_scale is close to the specified upper bound 0.001. Increasing the bound and calling fit again may find a better value.match)Znoise_level_boundsr   g     j@T)recordalwaysr   r   zThe optimal value found for dimension 0 of parameter k1__noise_level is close to the specified upper bound 0.001. Increasing the bound and calling fit again may find a better value.r   zThe optimal value found for dimension 0 of parameter k2__length_scale is close to the specified lower bound 1000.0. Decreasing the bound and calling fit again may find a better value.r   r   g      $@r    r   zThe optimal value found for dimension 0 of parameter length_scale is close to the specified upper bound 100.0. Increasing the bound and calling fit again may find a better value.zThe optimal value found for dimension 1 of parameter length_scale is close to the specified upper bound 100.0. Increasing the bound and calling fit again may find a better value.)r   r   pytestZwarnsr   r(   r)   r*   r   warningscatch_warningssimplefilterlen
issubclasscategorymessageargsr   Ztile)	r#   r.   Zwarning_messageZ
kernel_sumZgpc_sumrd   ZX_tileZkernel_dimsZgpc_dimsr   r   r   test_warning_bounds   sB    
*

	(	

	ro   zparams, error_type, err_msgz!kernel cannot be a CompoundKernelc                 C   sL   t f i | }tj||d |tt W d   n1 s>0    Y  dS )z0Check that expected error are raised during fit.rb   N)r   rf   Zraisesr(   r)   r*   )paramsZ
error_typeerr_msgr.   r   r   r   test_gpc_fit_error  s    rr   )7__doc__rg   numpyr   rf   Zscipy.optimizer   Zsklearn.exceptionsr   Zsklearn.gaussian_processr   Z sklearn.gaussian_process.kernelsr   r   r   r   rM   Z4sklearn.gaussian_process.tests._mini_sequence_kernelr	   Zsklearn.utils._testingr
   r   r   Z
atleast_2dZlinspaceTr)   r^   r2   Zravelintr*   ZfXemptyr:   r\   r!   ZkernelsZnon_fixed_kernelsmarkZparametrizer/   r3   r7   r9   r;   rB   rF   rT   r]   r`   ra   ro   
ValueErrorrr   r   r   r   r   <module>   sp   

	


	




I

