U
    _»{j$'  ã                   @   s`  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 dddddg¡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/d0d1„ Z0ej' (d!e&¡d2d3„ ƒZ1ej' (d!e%¡d4d5„ ƒZ2ej' (d!e%¡d6d7„ ƒZ3d8d9„ Z4ej' (d:d!edƒie5d;fg¡d<d=„ ƒ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   úf/var/www/html/bwave/python/venv/lib/python3.8/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{®Gáz„?ç      Y@c                 C   s   g | ]}|t kr|‘qS r   )Úfixed_kernel)Ú.0Úkernelr   r   r   Ú
<listcomp>/   s      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`   dddg} t  dddg¡}tdd�}t|d� | |¡}t| | ¡| | ¡d d …d	f d
kƒ d S )NÚAZABÚBTFr   )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
    

r2   c                 C   s4   t | d� tt¡}| |jj¡| | j¡ks0t‚d S )Nr%   )r   r'   r(   r)   Úlog_marginal_likelihoodÚkernel_ÚthetaÚAssertionErrorr,   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
   r3   r4   r5   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onesr4   r5   ÚshapeZfloat64r3   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 ¡svt‚d S )Nr%   Tç-Cëâ6?r   r   )r   r'   r(   r)   r3   r4   r5   r   ÚallÚabsÚboundsr6   )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)r3   )r5   ©r-   r   r   Ú<lambda>s   ó    z#test_lml_gradient.<locals>.<lambda>g»½×Ùß|Û=é   )r   r'   r(   r)   r3   r5   r   r
   )r#   r@   rA   Zlml_gradient_approxr   rC   r   Útest_lml_gradientl   s     
 ÿrG   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sÈt‚|
}q†d S )N)é   r   r   r   )ZaxisrF   r   r   r   r   )r<   r    r   é   )r#   Ún_restarts_optimizerZrandom_state)r   ÚrandomÚRandomStateZrandnr   ÚsumÚCr   ÚinfÚranger   r'   r3   r4   r5   ZfinfoZfloat32Úepsr6   )Úglobal_random_seedZ	n_samplesZ
n_featuresÚrngr(   r)   r#   Zlast_lmlrJ   Úgpr@   r   r   r   Útest_random_startsy   s*    ,
 ÿý ürU   c                    sF   ‡ fdd„}t | |d�}| tt¡ | |jj¡| | j¡ksBt‚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   rK   rL   rP   Z
atleast_1dÚuniformÚmaximumÚminimum)	Zobj_funcZinitial_thetar?   rS   Z	theta_optZfunc_minÚ_r5   r   ©rR   r   r   Ú	optimizer”   s     ÿ
2ÿz(test_custom_optimizer.<locals>.optimizer)r#   r\   )r   r'   r(   Úy_mcr3   r4   r5   r6   )r#   rR   r\   r-   r   r[   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
   rM   r*   r   r   Zargmax)r#   r-   Úy_probZy_predr   r   r   Útest_multi_classª   s    


ra   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    


rb   c            	   	   C   sÌ  t ddgd�} t| d�}d}tjt|d�� | tt¡ W 5 Q R X tddgd�t dd	gd� }t|d�}t	j
d
d��„}t	 d¡ | tt¡ t|ƒdksœt‚t|d jtƒs°t‚|d jjd dksÈt‚t|d jtƒsÜt‚|d jjd dksôt‚W 5 Q R X t td¡}t ddgddgd�}t|d�}t	j
d
d��Ž}t	 d¡ | |t¡ t|ƒdk�s^t‚t|d jtƒ�stt‚|d jjd dk�sŽt‚t|d jtƒ�s¤t‚|d jjd dk�s¾t‚W 5 Q R X d S )Ngñhãˆµøä>r   )r   r%   z²The 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   zµThe 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   z·The 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   z²The 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.z²The 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Úlenr6   Ú
issubclassÚcategoryÚmessageÚargsr   Ztile)	r#   r-   Zwarning_messageZ
kernel_sumZgpc_sumre   ZX_tileZkernel_dimsZgpc_dimsr   r   r   Útest_warning_boundsÅ   sR    
ÿÿ

ÿÿ
ÿÿ


ÿÿ
ÿÿrp   zparams, error_type, err_msgz!kernel cannot be a CompoundKernelc              	   C   s4   t f | Ž}tj||d�� | tt¡ W 5 Q R X dS )z0Check that expected error are raised during fit.rc   N)r   rg   Zraisesr'   r(   r)   )ÚparamsZ
error_typeÚerr_msgr-   r   r   r   Útest_gpc_fit_error  s    
rs   )7Ú__doc__rh   Únumpyr   rg   Zscipy.optimizer   Zsklearn.exceptionsr   Zsklearn.gaussian_processr   Z sklearn.gaussian_process.kernelsr   r   r   r   rN   Z4sklearn.gaussian_process.tests._mini_sequence_kernelr	   Zsklearn.utils._testingr
   r   r   Z
atleast_2dZlinspaceÚTr(   r_   r1   ZravelÚintr)   ZfXÚemptyr:   r]   r!   ZkernelsZnon_fixed_kernelsÚmarkZparametrizer.   r2   r7   r9   r;   rB   rG   rU   r^   ra   rb   rp   Ú
ValueErrorrs   r   r   r   r   Ú<module>   sp   
ü
	


	




M
ýÿþ
