U
    ½mœd‚&  ã                   @   sX  d Z ddlZddlZddlmZ ddlZddlmZ ddl	m
Z
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/d/d0„ Z0ej' (d e&¡d1d2„ ƒZ1ej' (d e%¡d3d4„ ƒZ2ej' (d e%¡d5d6„ ƒZ3d7d8„ Z4ej' (d9d edƒie5d:fg¡d;d<„ ƒZ6dS )=z,Testing for Gaussian process classification é    N)Úapprox_fprime)ÚGaussianProcessClassifier)ÚRBFÚCompoundKernelÚConstantKernelÚWhiteKernel)ÚMiniSeqKernel)ÚConvergenceWarning)Úassert_almost_equalÚassert_array_equalc                 C   s
   t  | ¡S )N)ÚnpÚsin)Úx© r   ú`/home/sam/Atlas/atlas_env/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 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d� ||¡}| |jj¡}	|	|t  t j¡j ksÈt‚|	}q†d S )N)é   r   r   r   r   )ZaxisrF   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float32Zepsr6   )
Z	n_samplesZ
n_featuresÚrngr(   r)   r#   Zlast_lmlrJ   Úgpr@   r   r   r   Útest_random_startsy   s*    ,
 ÿ  ÿ þrS   c                 C   sB   dd„ }t | |d�}| tt¡ | |jj¡| | j¡ks>t‚d S )Nc           	      S   sŒ   t j d¡}|| |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 )Nr   F)Zeval_gradientr   éþÿÿÿr   )r   rK   rL   rP   Z
atleast_1dÚuniformÚmaximumÚminimum)	Zobj_funcZinitial_thetar?   rQ   Z	theta_optZfunc_minÚ_r5   r   r   r   r   Ú	optimizer’   s     ÿ
2ÿz(test_custom_optimizer.<locals>.optimizer)r#   rY   )r   r'   r(   Úy_mcr3   r4   r5   r6   )r#   rY   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(   rZ   r+   ÚX2r
   rM   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(   rZ   r+   r\   r
   )r#   r-   Zgpc_2r]   Zy_prob_2r   r   r   Útest_multi_class_n_jobsµ   s    


r_   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_sumrb   ZX_tileZkernel_dimsZgpc_dimsr   r   r   Útest_warning_boundsÃ   sR    
ÿÿ

ÿÿ
ÿÿ


ÿÿ
ÿÿrm   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.r`   N)r   rd   Zraisesr'   r(   r)   )ÚparamsZ
error_typeÚerr_msgr-   r   r   r   Útest_gpc_fit_error  s    
rp   )7Ú__doc__re   Únumpyr   Zscipy.optimizer   rd   Zsklearn.gaussian_processr   Z sklearn.gaussian_process.kernelsr   r   r   rN   r   Z4sklearn.gaussian_process.tests._mini_sequence_kernelr   Zsklearn.exceptionsr	   Zsklearn.utils._testingr
   r   r   Z
atleast_2dZlinspaceÚTr(   r\   r1   ZravelÚintr)   ZfXÚemptyr:   rZ   r!   ZkernelsZnon_fixed_kernelsÚmarkZparametrizer.   r2   r7   r9   r;   rB   rG   rS   r[   r^   r_   rm   Ú
ValueErrorrp   r   r   r   r   Ú<module>   sn   
ü
	


	




M
ýÿþ
