ó
‡ˆ\c           @   sd  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 d  d l m Z d  d l m	 Z	 d  d l m
 Z
 d  d	 l m Z d  d
 l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z e j d d  g d  d  g d  d g d d g d d g d d g g d d ƒZ e j d d d d d d g ƒ Z e j d d d d d d g ƒ Z e j d g d  g d  g d g d g d g g d d ƒZ e j d d g d d g d d  g d  d  g d  d g d d g d d g d d g d d g g	 ƒ Z e j d d d d d d d d d g	 ƒ Z e j d d d d d d d d d g	 ƒ Z e j d g d g d  g d  g d g d g d g d g d g g	 ƒ Z e j d d g d d g d  d g d  d g d d g d d g d d g d d g d d g g	 ƒ Z e j d d d d d d d d d g	 ƒ Z e j  e j! d ƒ e j" d0 ƒ f Z# e j d d d d d d d d g ƒ Z$ d1 d2 d3 d4 d5 d6 d7 d8 d9 g	 Z& d „  Z' d  „  Z( d! „  Z) d" „  Z* d# „  Z+ d$ „  Z, d% „  Z- d& „  Z. d' „  Z/ d( „  Z0 d) „  Z1 d* „  Z2 d+ „  Z3 d, „  Z4 e j5 j6 d- d. d g ƒ d/ „  ƒ Z7 d S(:   iÿÿÿÿN(   t   assert_array_equal(   t   assert_array_almost_equal(   t   assert_equal(   t   assert_almost_equal(   t   assert_false(   t   assert_raises(   t   assert_raise_message(   t   assert_warns(   t   assert_warns_message(   t   assert_greater(   t   ignore_warnings(   t
   make_blobs(   t   LinearDiscriminantAnalysis(   t   QuadraticDiscriminantAnalysis(   t   _coviþÿÿÿi   i   t   dtypet   fi   i    iýÿÿÿi   t   svdt   lsqrt   eigent   autog…ëQ¸…Û?c    	      C   sæ  x9t  D]1}  |  \ } } t d | d | ƒ } | j t t ƒ j t ƒ } t | t d | ƒ | j t t ƒ j t ƒ } t | t d | ƒ | j t ƒ } t | d  d  … d f d k d t d | ƒ | j	 t ƒ } t
 t j | ƒ | d d | ƒ | j t t ƒ j t ƒ } t j | t k ƒ s t d | ƒ ‚ q Wt d d d d ƒ } t t | j t t ƒ t d d	 d d
 ƒ } t t | j t t ƒ t d d d d ƒ } t t | j t t ƒ t d d
 ƒ } t t | j t t ƒ d  S(   Nt   solvert	   shrinkages	   solver %si   g      à?i   R   g­iÞqŠŽÌ¿R   t   dummyR   R   (   t   solver_shrinkageR   t   fitt   Xt   yt   predictR    t   X1t   predict_probat   predict_log_probaR   t   npt   expt   y3t   anyt   AssertionErrorR   t
   ValueErrort   NotImplementedError(	   t	   test_caseR   R   t   clft   y_predt   y_pred1t   y_proba_pred1t   y_log_proba_pred1t   y_pred3(    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_lda_predict9   s.    #)c          C   sÎ   t  j d d g ƒ }  t d |  ƒ } d } t t | | j t t ƒ t d d d g ƒ } | j t t ƒ t  j d d g ƒ }  t  j d d g ƒ } t d |  ƒ } t t	 | j t t ƒ t
 | j | d ƒ d  S(	   Ng      à?g      à¿t   priorss   priors must be non-negativeg333333ã?gÍÌÌÌÌÌÜ?gš™™™™™á?i   (   R    t   arrayR   R   R%   R   R   R   R   t   UserWarningR   t   priors_(   R/   R(   t   msgt
   prior_norm(    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_lda_priors`   s    c       	   C   sÜ   d }  d } d } t  d | d |  d | d d ƒ \ } } t d d	 ƒ } t d d
 ƒ } t d d ƒ } | j | | ƒ | j | | ƒ | j | | ƒ t | j | j d ƒ t | j | j d ƒ t | j | j d ƒ d  S(   Ni   iè  t	   n_samplest
   n_featurest   centerst   random_statei   R   R   R   R   i   (   R   R   R   R   t   coef_(   R7   t	   n_classesR6   R   R   t   clf_lda_svdt   clf_lda_lsqrt   clf_lda_eigen(    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_lda_coefst   s    c          C   sÍ   t  d d d d ƒ }  |  j t t ƒ j t ƒ } t | j d d ƒ t  d d d d ƒ }  |  j t t ƒ j t ƒ } t | j d d ƒ t  d d d d ƒ }  |  j t t ƒ d } t t | |  j t ƒ d  S(   NR   R   t   n_componentsi   R   R   s$   transform not implemented for 'lsqr'(	   R   R   R   R   t	   transformR   t   shapeR   R&   (   R(   t   X_transformedR3   (    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_lda_transform‰   s    c          C   sû   t  j j d ƒ }  |  j d d d d d d ƒ } |  j d d d d ƒ} t d	 d
 ƒ } | j | | ƒ t | j j	 ƒ  d d ƒ t
 | j j d d ƒ t d	 d ƒ } | j | | ƒ t | j j	 ƒ  d d ƒ t
 | j j d d ƒ t | j | j ƒ d  S(   Ni    t   loct   scaleid   t   sizei(   i   i   R   R   g      ð?i   s/   Unexpected length for explained_variance_ratio_R   (   i(   i   (   i(   (   i   (   i   (   R    t   randomt   RandomStatet   normalt   randintR   R   R   t   explained_variance_ratio_t   sumR   RB   R   (   t   stateR   R   R>   R<   (    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt!   test_lda_explained_variance_ratio˜   s    	c       	   C   s  t  j d d d g d d d g d d d g d d d g g ƒ }  t  j d d d g d d d g d d d g d d d g d d d g d d d g g ƒ } |  d  d  … t  j d  d  … f | t  j d  d  … d  d  … f j d ƒ } t  j t  j |  j d ƒ | j d ƒ } t d	 d
 ƒ j | | ƒ } | j	 |  ƒ } | d | d } | d | d } | t  j
 t  j | d ƒ ƒ :} | t  j
 t  j | d ƒ ƒ :} t t  j | j	 | ƒ j ƒ t  j d ƒ ƒ t t  j t  j | d  d d g ƒ ƒ d ƒ t t  j t  j | d  d d g ƒ ƒ d ƒ d  S(   Ni    iÿÿÿÿi   iþÿÿÿi   gš™™™™™¹?gš™™™™™¹¿i   R   R   i   g      ð?(   iÿÿÿÿi   (   R    R0   t   newaxist   reshapet   repeatt   arangeRB   R   R   RA   t   sqrtRM   R   t   covt   Tt   eyet   abst   dot(   t   meanst   scatterR   R   R(   t   means_transformedt   d1t   d2(    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_lda_orthogonality²   s    ?6!K)  +,c          C   sò   d }  t  j j d ƒ } | j d d |  d f ƒ d d d g } | j d d |  d f ƒ d d d g } t  j | | f ƒ d d d	 g } d g |  d g |  } xI d D]A } t d | ƒ } t | j | | ƒ j | | ƒ d d | ƒ q© Wd  S(   Nid   iÒ  iÿÿÿÿi   i   iöÿÿÿi    i
   i'  R   R   R   R   g      ð?s   using covariance: %s(   R   R   R   (	   R    RH   RI   t   uniformt   vstackR   R   R   t   score(   t   nt   rngt   x1t   x2t   xR   R   R(   (    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_lda_scalingÓ   s    (("!c          C   s5  xŸ d
 D]— }  t  d |  ƒ j t t ƒ } t | d ƒ s= t ‚ t  d |  d t ƒ j t t ƒ } t | d ƒ ss t ‚ t | j t	 j
 d d g d d g g ƒ ƒ q Wt  d d	 ƒ j t t ƒ } t t | d ƒ ƒ t  d |  d t ƒ j t t ƒ } t | d ƒ st ‚ t | j t	 j
 d d g d d g g ƒ ƒ d  S(   NR   R   R   t   covariance_t   store_covarianceg¦µil¯Û?g€aùómÁ¶?g	^á?R   (   R   R   (   R   R   t   X6t   y6t   hasattrR$   t   TrueR   Ri   R    R0   R   (   R   R(   (    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_lda_store_covarianceå   s"    &c          C   s  t  ƒ  }  |  j t t ƒ j t ƒ } t | t ƒ |  j t t ƒ j t ƒ } t | t ƒ |  j t ƒ } t | d  d  … d f d k d t ƒ |  j t ƒ } t	 t
 j | ƒ | d ƒ |  j t t ƒ j t ƒ } t
 j | t k ƒ sí t ‚ t t |  j t t ƒ d  S(   Ni   g      à?i   (   R   R   Rk   Rl   R   R    t   X7R   R   R   R    R!   t   y7R#   R$   R   R%   t   y4(   R(   R)   R*   R+   R,   R-   (    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_qda  s    	'c          C   s¢   t  ƒ  }  |  j t t ƒ j t ƒ } t j | d k ƒ } d } t  d t j | d | g ƒ ƒ }  |  j t t ƒ j t ƒ } t j | d k ƒ } t | | ƒ d  S(   Ni   g»½×Ùß|Û=R/   i   (	   R   R   Rk   Rl   R   R    RM   R0   R	   (   R(   R)   t   n_post   negt   n_pos2(    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_qda_priors  s    	"c          C   sº   t  ƒ  j t t ƒ }  t t |  d ƒ ƒ t  d t ƒ j t t ƒ }  t |  d ƒ sX t ‚ t |  j	 d t
 j d d g d d g g ƒ ƒ t |  j	 d t
 j d d g d d	 g g ƒ ƒ d  S(
   NRi   Rj   i    gffffffæ?gÍÌÌÌÌÌÜ?i   gÚÁQUUÕ?gÚÁQUUÕ¿g“vWUUå?(   R   R   Rk   Rl   R   Rm   Rn   R$   R   Ri   R    R0   (   R(   (    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_qda_store_covariance,  s    
"
c          C   sB   t  d t ƒ }  t t d |  j t t ƒ t t d t |  d ƒ d  S(   Nt   store_covariancess`   'store_covariances' was renamed to store_covariance in version 0.19 and will be removed in 0.21.sr   Attribute ``covariances_`` was deprecated in version 0.19 and will be removed in 0.21. Use ``covariance_`` insteadt   covariances_(   R   Rn   R   t   DeprecationWarningR   R   R   t   getattr(   R(   (    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_qda_deprecation@  s    		c       	   C   sé   t  ƒ  }  t ƒ    |  j t t ƒ j t ƒ } Wd  QXt j | t k ƒ sO t ‚ t  d d ƒ }  t ƒ   |  j t t ƒ Wd  QX|  j t ƒ } t	 | t ƒ t  d d ƒ }  t ƒ   |  j t
 t ƒ Wd  QX|  j t
 ƒ } t	 | t ƒ d  S(   Nt	   reg_paramg{®Gáz„?gš™™™™™¹?(   R   R
   R   t   X2Rl   R   R    R#   R$   R    t   X5t   y5(   R(   R)   t   y_pred5(    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_qda_regularizationN  s    	
!

c       	   C   s©   t  d d d d d d d d ƒ \ }  } t j |  t j |  j d d	 ƒ j |  j d |  j d ƒ ƒ }  t |  d
 ƒ } t | | j ƒ t |  d ƒ } t | | j ƒ d  S(   NR6   id   R7   i   R8   i   R9   i*   i   t	   empiricalR   (	   R   R    RY   RS   RB   RQ   R   R   RV   (   Rg   R   t   c_et   c_s(    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   test_covariancee  s    @R   s	   svd, lsqrc         C   su   t  j d d g d d g g ƒ } t  j d d g ƒ } t d |  ƒ } t j t d d ƒ | j | | ƒ Wd QXd S(	   sg   
    Tests that if the number of samples equals the number
    of classes, a ValueError is raised.
    g      à?g333333ã?t   at   bR   t   matchs"   The number of samples must be moreN(   R    R0   R   t   pytestt   raisesR%   R   (   R   R   R   R(   (    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt=   test_raises_value_error_on_same_number_of_classes_and_sampless  s
    !(   i   i   (   R   N(   R   N(   R   N(   R   R   (   R   i    (   R   g…ëQ¸…Û?(   R   R   (   R   i    (   R   g…ëQ¸…Û?(8   t   numpyR    R‹   t   sklearn.utils.testingR    R   R   R   R   R   R   R   R   R	   R
   t   sklearn.datasetsR   t   sklearn.discriminant_analysisR   R   R   R0   R   R   R"   R   Rk   Rl   Rq   Rp   R   Rr   t   c_RS   t   zerosR€   R   t   NoneR   R.   R5   R?   RD   RO   R_   Rh   Ro   Rs   Rw   Rx   R}   Rƒ   R‡   t   markt   parametrizeR   (    (    (    sG   lib/python2.7/site-packages/sklearn/tests/test_discriminant_analysis.pyt   <module>   sb   K!!93-**0E*%'			'					!		 						