ó
‡ˆ\c           @   sœ  d  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 d d l m Z d d l m Z m Z m Z m Z m Z m Z m Z m Z d „  Z e j d	 d
 d d d d g ƒ j Z e j d d d d d g ƒ j Z e e ƒ j ƒ  Z e	 d d	 d d ƒ Z e	 d d	 ƒ e e	 d d	 d d1 ƒ e d	 d2 ƒ e	 d d	 d d3 ƒ e d	 d4 ƒ e	 d d	 d d5 ƒ e d d6 ƒ e d d7 ƒ e	 d d	 d d8 ƒ e d d9 ƒ g Z g  e D] Z  e  e k r¾e  ^ q¾Z! e j" j# d e ƒ d „  ƒ Z$ e j" j# d e! ƒ d „  ƒ Z% e j" j# d e ƒ d  „  ƒ Z& e j" j# d e! ƒ d! „  ƒ Z' e j" j# d e! ƒ d" „  ƒ Z( e j" j# d e ƒ d# „  ƒ Z) e j" j# d e ƒ d$ „  ƒ Z* e j" j# d e ƒ d% „  ƒ Z+ d& „  Z, e j" j# d e ƒ d' „  ƒ Z- d( „  Z. d) „  Z/ e j" j# d e ƒ d* „  ƒ Z0 d+ „  Z1 e j" j# d e! ƒ d, „  ƒ Z2 d- „  Z3 e j" j# d e ƒ d. „  ƒ Z4 d/ „  Z5 e j" j# d e ƒ d0 „  ƒ Z6 d S(:   s(   Testing for Gaussian process regression iÿÿÿÿN(   t   approx_fprime(   t   GaussianProcessRegressor(   t   RBFt   ConstantKernelt   WhiteKernel(   t
   DotProduct(   t   assert_truet   assert_greatert   assert_array_lesst   assert_almost_equalt   assert_equalt   assert_raise_messaget   assert_array_almost_equalt   assert_array_equalc         C   s   |  t  j |  ƒ S(   N(   t   npt   sin(   t   x(    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   f   s    g      ð?g      @g      @g      @g      @g       @g       @g      @g      @g      @g      @t   length_scalet   length_scale_boundst   fixedgü©ñÒMbP?g     @@g{®Gáz„?g      Y@gñhãˆµøä>gš™™™™™¹?t   kernelc         C   s]   t  d |  ƒ j t t ƒ } | j t d t ƒ\ } } t | t ƒ t t j | ƒ d ƒ d  S(   NR   t
   return_covg        (	   R   t   fitt   Xt   yt   predictt   TrueR	   R   t   diag(   R   t   gprt   y_predt   y_cov(    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_gpr_interpolation.   s    c         C   sG   t  d |  ƒ j t t ƒ } t | j | j j ƒ | j |  j ƒ ƒ d  S(   NR   (   R   R   R   R   R   t   log_marginal_likelihoodt   kernel_t   theta(   R   R   (    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_lml_improving8   s    c         C   sA   t  d |  ƒ j t t ƒ } t | j | j j ƒ | j ƒ  ƒ d  S(   NR   (   R   R   R   R   R
   R!   R"   R#   (   R   R   (    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_lml_precomputed@   s    c         C   s«   t  d |  ƒ j t t ƒ } | j | j j t ƒ \ } } t t	 j
 t	 j | ƒ d k  | j j | j j d  d  … d f k B| j j | j j d  d  … d f k Bƒ ƒ d  S(   NR   g-Cëâ6?i    i   (   R   R   R   R   R!   R"   R#   R   R   R   t   allt   abst   bounds(   R   R   t   lmlt   lml_gradient(    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_converged_to_local_maximumH   s
    	8c         C   sÄ   t  d |  ƒ j t t ƒ } | j j } t j | j j j	 ƒ j
 } d } | | t j | d  d  … d f ƒ d f <t | d  d  … d f | j j | ƒ t | j j | d  d  … d f | ƒ d  S(   NR   g»½×Ùß|Û=i   i    (   R   R   R   R   R"   R(   R   t   finfoR#   t   dtypet   maxt   isfiniteR   (   R   R   R(   t   max_t   tiny(    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_solution_inside_boundsU   s    *'c            sh   t  d |  ƒ j t t ƒ ‰  ˆ  j |  j t ƒ \ } } t |  j ‡  f d †  d ƒ } t | | d ƒ d  S(   NR   c            s   ˆ  j  |  t ƒ S(   N(   R!   t   False(   R#   (   R   (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   <lambda>k   s   	g»½×Ùß|Û=i   (	   R   R   R   R   R!   R#   R   R    R	   (   R   R)   R*   t   lml_gradient_approx(    (   R   sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_lml_gradientc   s    		c         C   s›   t  d |  ƒ } | j t d t ƒ\ } } t | d d ƒ t | j j ƒ d k r~ t t j	 | ƒ t j
 |  j d ƒ d ƒ n t t j	 | ƒ d d ƒ d  S(   NR   R   i    i   i   (   R   R   R   R   R	   t   lenR   R#   R   R   t   exp(   R   R   t   y_meanR   (    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt
   test_priorr   s    ,c         C   s³   t  d |  ƒ j t t ƒ } | j t d t ƒ\ } } | j t d ƒ } t | t	 j
 | d ƒ d ƒ t t	 j | ƒ t	 j | ƒ j ƒ  t	 j | d ƒ t	 j | ƒ j ƒ  d ƒ d  S(   NR   R   ià“ i   (   R   R   R   R   R   t   X2R   t   sample_yR	   R   t   meanR   R.   t   var(   R   R   R9   R   t   samples(    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_sample_statistics   s    "c          C   sM   t  d ƒ }  t d |  d d  ƒ j t t ƒ } t t j | j	 j
 ƒ d ƒ d  S(   Ng      ð?R   t	   optimizer(   R   R   t   NoneR   R   R   R
   R   R8   R"   R#   (   R   R   (    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_no_optimizer   s    !c         C   st   t  d |  ƒ j t t ƒ } | j t d t ƒ\ } } | j t d t ƒ\ } } t t j	 t j
 | ƒ ƒ | ƒ d  S(   NR   R   t
   return_std(   R   R   R   R   R   R;   R   R	   R   t   sqrtR   (   R   R   R9   R   t   y_std(    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_predict_cov_vs_std—   s    c          C   s½   t  j j d ƒ }  |  j d d d
 ƒ } | d  d  … d f d | d  d  … d f } t d d g ƒ } t d | ƒ j | | ƒ } t t  j | j	 j
 d ƒ t  j | j	 j
 d ƒ d	 ƒ d  S(   Ni    iÿÿÿÿi   i2   i   gš™™™™™¹?g      ð?R   i   (   i2   i   (   R   t   randomt   RandomStatet   uniformR   R   R   R   R8   R"   R#   (   t   rngR   R   R   R   (    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_anisotropic_kernel    s    .c    
      C   sP  d \ }  } t  j j d ƒ } | j |  | ƒ d d } t  j | ƒ j d d ƒ t  j d | ƒ j d d ƒ | j d d d	 |  ƒ } t d
 d ƒ t d d
 g | d d g | ƒ t	 d d d d ƒ } t  j
 } xv t d ƒ D]h } t d | d | d d ƒ j | | ƒ } | j | j j ƒ }	 t |	 | t  j t  j ƒ j ƒ |	 } qà Wd  S(   Ni   i   i    i   t   axisi   t   scalegš™™™™™¹?t   sizeg      ð?g{®Gáz„?g      Y@R   R   g-Cëâ6?t   noise_levelgñhãˆµøä>t   noise_level_boundsg      $@i   R   t   n_restarts_optimizert   random_state(   i   i   (   g{®Gáz„?g      Y@(   g-Cëâ6?g      Y@(   gñhãˆµøä>g      $@(   R   RH   RI   t   randnR   t   sumt   normalt   CR   R   t   inft   rangeR   R   R!   R"   R#   R   R,   t   float32t   eps(
   t	   n_samplest
   n_featuresRK   R   R   R   t   last_lmlRR   t   gpR)   (    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_random_starts¯   s     N
 c         C   sþ   t  j d ƒ } t  | } t d |  ƒ } | j t | ƒ t d |  d t ƒ } | j t t  ƒ | j t d t ƒ\ } } | | } | j t d t ƒ\ } } t | | ƒ t | | ƒ | j t d t ƒ\ }	 }
 | j t d t ƒ\ }	 } t |
 | ƒ d  S(   Ni    R   t   normalize_yRD   R   (	   R   R=   R   R   R   R   R   R;   R	   (   R   R9   t   y_normR   t   gpr_normR   t
   y_pred_stdt   y_pred_normt   y_pred_std_normt   _R   t
   y_cov_norm(    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_y_normalizationÆ   s    

c          C   s  t  j t t d f ƒ j }  t d d ƒ } t d | d d  d t ƒ } | j t	 t ƒ t d | d d  d t ƒ } | j t	 |  ƒ | j
 t d t ƒ\ } } | j
 t d t ƒ\ } } | j
 t d t ƒ\ } }	 | j
 t d t ƒ\ } }
 t | | d  d  … d	 f ƒ t | | d  d  … d
 f d ƒ t | | ƒ t |	 |
 ƒ | j t d d ƒ} | j t d d ƒ} t | | d  d  … d	 f ƒ x† t D]~ } t d | d t ƒ } | j t	 t ƒ t d | d t ƒ } | j t	 t  j t t f ƒ j ƒ t | j j | j j d ƒ q“Wd  S(   Ni   R   g      ð?R   RA   Ra   RD   R   i    i   R\   i
   i   (   R   t   vstackR   t   TR   R   RB   R3   R   R   R   R;   R   R	   R<   t   kernelsR"   R#   (   t   y_2dR   R   t   gpr_2dt	   y_pred_1dt   y_std_1dt	   y_pred_2dt   y_std_2dRg   t   y_cov_1dt   y_cov_2dt   y_sample_1dt   y_sample_2d(    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_y_multioutputã   s2    		!"c         C   s]   d „  } t  d |  d | ƒ } | j t t ƒ t | j | j j ƒ | j | j j ƒ ƒ d  S(   Nc   	   	   S   sÍ   t  j j d ƒ } | |  | d t ƒ} } x• t d ƒ D]‡ } t  j | j t  j d | d  d  … d f ƒ t  j d | d  d  … d f ƒ ƒ ƒ } |  | d t ƒ} | | k  r8 | | } } q8 q8 W| | f S(   Ni    t   eval_gradienti2   iþÿÿÿi   (	   R   RH   RI   R3   RY   t
   atleast_1dRJ   t   maximumt   minimum(	   t   obj_funct   initial_thetaR(   RK   t	   theta_optt   func_minRg   R#   R   (    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyRA     s    +(R   RA   (	   R   R   R   R   R   R!   R"   R#   R   (   R   RA   R   (    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_custom_optimizer  s
    	c          C   so   t  j d ƒ j d d ƒ }  t  j d ƒ } t ƒ  } t d | d d ƒ } t t  j j d | | j	 |  | ƒ d  S(   Ni   i   iÿÿÿÿR   t   alphag        s—   The kernel, %s, is not returning a positive definite matrix. Try gradually increasing the 'alpha' parameter of your GaussianProcessRegressor estimator.(
   R   t   aranget   reshapet   onesR   R   R   t   linalgt   LinAlgErrorR   (   R   R   R   R   (    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_gpr_correct_error_message%  s    	c   
      C   s3  t  d |  d d ƒ } t  d |  d d ƒ } t j t t d f ƒ } t j t t d d f ƒ } | j | | ƒ t j t t d d f ƒ } t j t t d d f ƒ } | j | | ƒ t j d d d ƒ d  d  … d  f } | j	 | d	 t
 ƒ\ } } | j	 | d	 t
 ƒ\ } }	 t | | ƒ t | |	 ƒ d  S(
   NR   R   g{®Gáz„?i    i   gVçž¯Ò<i
   id   RD   (   R   R   Rj   R   t   hstackR   R   t   linspaceRB   R   R   R	   (
   R   t   gpr_equal_inputst   gpr_similar_inputst   X_t   y_t   X_testt   y_pred_equalt   y_std_equalt   y_pred_similart   y_std_similar(    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_duplicate_input2  s    %c          C   sÄ   t  d d d ƒt d d d ƒ}  t ƒ  } | j t d t ƒ\ } } | j t d t ƒ\ } } t d |  ƒ } | j t d t ƒ\ } } | j t d t ƒ\ } } t | | ƒ t | | ƒ d  S(   Ng      ð?t   constant_value_boundsR   R   RD   R   R   (   RW   R   R   R   R   R   R   (   t   default_kernelt   gpr1Rg   t   y_std1t   y_cov1t   gpr2t   y_std2t   y_cov2(    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_no_fit_default_predictJ  s    	c         C   sü   t  t ƒ j ƒ  } t d |  ƒ j t t ƒ } t | d ƒ sB t ‚ | j	 d  k sW t ‚ | j t d t ƒ| j	 d  k	 s t ‚ | j t | ƒ | j	 d  k s¤ t ‚ | j t d t ƒt d |  ƒ j t | ƒ } | j t d t ƒt | j	 | j	 ƒ d  S(   NR   t   _K_invRD   (   R   R;   t   ravelR   R   R   R   t   hasattrt   AssertionErrorR   RB   R   R   R   (   R   t   y2R   R™   (    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   test_K_inv_resetZ  s    (   gü©ñÒMbP?g     @@(   g{®Gáz„?g      Y@(   gü©ñÒMbP?g     @@(   g{®Gáz„?g      Y@(   gü©ñÒMbP?g     @@(   gñhãˆµøä>g      Y@(   g{®Gáz„?g      Y@(   gü©ñÒMbP?g     @@(   gñhãˆµøä>g      Y@(7   t   __doc__t   numpyR   t   scipy.optimizeR    t   pytestt   sklearn.gaussian_processR   t    sklearn.gaussian_process.kernelsR   R   RW   R   R   t   sklearn.utils.testingR   R   R   R	   R
   R   R   R   R   t
   atleast_2dRk   R   R;   Rž   R   t   fixed_kernelRl   R   t   non_fixed_kernelst   markt   parametrizeR    R$   R%   R+   R2   R6   R:   R@   RC   RG   RL   R`   Ri   Rw   R€   R‡   R“   Rœ   R¢   (    (    (    sF   lib/python2.7/site-packages/sklearn/gaussian_process/tests/test_gpr.pyt   <module>   sV   :	$!
					+		