ó
\c           @@  s¦  d  d l  m Z d  d l Z d  d l Z d  d l j 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 m Z m Z d d d	 d
 g d
 d d d g d  d d d g d d d
 d g g Z e j j d d d  d  d  d  g d d d d  g d d d d g d d d d g g f d d  d  d  d  g d  d  d  d  g d d d d g d d d d g g f d d  d  d  d  g d d d d g d d d d g d d d d g g f g  d    Z d   Z d   Z d   Z e j j d d d  d  d  d  g d  d d d  g d d d d g d d d d g g f d d  d  d  d  g d  d  d  d  g d d d d g d d d d g g f d d  d  d  d  g d  d d d g d d d d g d d d d g g f g  d    Z d   Z e j j d d d d g  d    Z d   Z d    Z  d!   Z! d"   Z" d#   Z# e j j d$ d d  d  d  d  d d g d  d  d  d  d d g d  d  d d d% d% g f d d  d  d  d  d d g d  d  d d d d g d  d  d d d& d% g f d d  d  d  d d d g d  d  d d d d g d  d d d& d% d% g f g  d'    Z$ e j j d( d d) d* d+ d g d d, d- d g d d. d) d g d d. d) d g g f d d/ d0 d1 d2 g d/ d0 d1 d2 g d3 d4 d5 d6 g d7 d8 d9 d: g g f d d) d* d+ d; g d d, d- d< g d d. d) d= g d d. d) d= g g f g  e j j d> d? d@ dA g  dB     Z% e j j d d d d g  dC    Z& dD   Z' e j j dE d d  d d& g f d d  d d& g f g  dF    Z( dG   Z) d S(H   i    (   t   absolute_importN(   t   xrange(   t   KBinsDiscretizer(   t   OneHotEncoder(   t   assert_array_almost_equalt   assert_array_equalt   assert_raisest   assert_raise_messaget   assert_warns_messageiž’’’g      ų?iü’’’i’’’’g      @iż’’’g      ąæg      @g      ą?i   g      @i   s   strategy, expectedt   uniformt   kmeanst   quantilec         C@  sB   t  d d d d d |   } | j t  t | | j t   d  S(   Nt   n_binsi   t   encodet   ordinalt   strategy(   R   t   fitt   XR   t	   transform(   R   t   expectedt   est(    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_fit_transform   s    c           C@  sv   t  d d  j t  t  d t j d g  d  j t  t  d d  j t  j j t j t j  k sr t	  d  S(   NR   i   i    (
   R   t   fit_transformR   t   npt   arrayR   t   n_bins_t   dtypet   intt   AssertionError(    (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_valid_n_bins$   s    &c          C@  sN   t  d d  }  t t d |  j t  t  d d  }  t t d |  j t  d  S(   NR   i   sU   KBinsDiscretizer received an invalid number of bins. Received 1, expected at least 2.gń?sO   KBinsDiscretizer received an invalid n_bins type. Received float, expected int.(   R   R   t
   ValueErrorR   R   (   R   (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_invalid_n_bins*   s    		c          C@  sŻ   t  j d
 d  }  t d |   } t t d | j t  d d d g }  t d |   } t t d | j t  d d d d g }  t d |   } t t d | j t  d d d d g }  t d |   } t t d	 | j t  d  S(   Ni   i   g       @R   s8   n_bins must be a scalar or array of shape (n_features,).i   s{   KBinsDiscretizer received an invalid number of bins at indices 0, 3. Number of bins must be at least 2, and must be an int.gĶĢĢĢĢĢ @s{   KBinsDiscretizer received an invalid number of bins at indices 0, 2. Number of bins must be at least 2, and must be an int.(   i   i   (   R   t   fullR   R   R   R   R   (   R   R   (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_invalid_n_bins_array6   s(    c         C@  s½   t  d d d d d g d d d |   j t  } t | | j t   t j t  j d } | j j | f k sw t	  x? t
 | j | j  D]( \ } } | j | d f k s t	  q Wd  S(   NR   i   i   R   R   R   i   (   R   R   R   R   R   R   R   t   shapet
   bin_edges_R   t   zipR   (   R   R   R   t
   n_featurest	   bin_edgesR   (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_fit_transform_n_bins_arrayX   s    "c          C@  sM   t  d d  j t  }  t j d  j d d  } t t d |  j |  d  S(   NR   i   i   i   i’’’’s5   Incorrect number of features. Expecting 4, received 5(	   R   R   R   R   t   aranget   reshapeR   R   R   (   R   t   bad_X(    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_invalid_n_featuresi   s
    R   c         C@  sŹ   t  j d  t j d d g d d g d d g d d g g  } t d |  d d d	 d
  } t t d | j |  | j d d k s t	  | j
 |  } t | d  d   d f t j | j d   d  S(   Nt   alwaysi   iž’’’i’’’’i    R   R   i   R   R   s2   Feature 0 is constant and will be replaced with 0.(   t   warningst   simplefilterR   R   R   R   t   UserWarningR   R   R   R   R   t   zerosR"   (   R   R   R   t   Xt(    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_same_min_maxq   s    		c          C@  sp   t  j d  }  t d d  } t t | j |   t d d  } | j |  j d d   t t | j |   d  S(   Ni   R   i   i’’’’i   (   R   R(   R   R   R   R   R)   R   (   R   R   (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_transform_1d_behavior   s    c          C@  s«   t  j d d d d d g  j d d  }  t  j d d d d d g  j d d  } xP t d d	  D]? } |  d
 | } t d d d d  j |  } t | |  qd Wd  S(   Ng       @g      @g      @g       @g      $@i’’’’i   i    i	   i
   R   i   R   R   (   R   R   R)   t   rangeR   R   R   (   t   X_initt   Xt_expectedt   iR   R1   (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_numeric_stability   s    **c          C@  s;   t  d d d d d g d d  }  t t d |  j t  d  S(   NR   i   i   R   s   invalid-encodesj   Valid options for 'encode' are ('onehot', 'onehot-dense', 'ordinal'). Got encode='invalid-encode' instead.(   R   R   R   R   R   (   R   (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_invalid_encode_option   s    !	c          C@  s  t  d d d d d g d d  j t  }  |  j t  } t  d d d d d g d d  j t  }  |  j t  } t j |  s t  t t d g  d d d d g D] } t	 j
 |  ^ q¤ d t  j |  |  t  d d d d d g d d	  j t  }  |  j t  } t j |  s#t  t t d g  d d d d g D] } t	 j
 |  ^ q?d t  j |  j   | j    d  S(
   NR   i   i   R   R   s   onehot-denset
   categoriest   sparset   onehot(   R   R   R   R   t   spt   issparseR   R   R   R   R(   t   FalseR   t   Truet   toarray(   R   t   Xt_1t   Xt_2R7   t   Xt_3(    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_encode_options   s(    	.		.	c          C@  s;   t  d d d d d g d d  }  t t d |  j t  d  S(   NR   i   i   R   s   invalid-strategysl   Valid options for 'strategy' are ('uniform', 'quantile', 'kmeans'). Got strategy='invalid-strategy' instead.(   R   R   R   R   R   (   R   (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_invalid_strategy_option¶   s    !	s8   strategy, expected_2bins, expected_3bins, expected_5binsi   i   c         C@  sč   t  j d d d d d d g  j d d  } t d	 d d
 |  d d  } | j |  } t | | j    t d	 d d
 |  d d  } | j |  } t | | j    t d	 d d
 |  d d  } | j |  } t | | j    d  S(   Ni    g      ą?i   i   i	   i
   i’’’’i   R   R   R   R   i   (   R   R   R)   R   R   R   t   ravel(   R   t   expected_2binst   expected_3binst   expected_5binsR   R   R1   (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_nonuniform_strategies¾   s    -s   strategy, expected_invg      ųæg       @g      Ąg      @g      Ąg      @g      öæg      @g      Ąg      āæg      Ąæg      @g      Ąg      ā?g      č?g      @g      ōæg      ś?g      čæg        g      ō?R   R   R<   s   onehot-densec         C@  sJ   t  d d d |  d |  } | j t  } | j |  } t | |  d  S(   NR   i   R   R   (   R   R   R   t   inverse_transformR   (   R   R   t   expected_invt   kbdR1   t   Xinv(    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_inverse_transform×   s    c         C@  sĒ   t  j d d d d g  d  d   d  f } t d d d |  d d	  } | j |  t  j d
 d g  d  d   d  f } | j |  } t | j d d  d | j  t | j	 d d  d g  d  S(   Ni    i   i   i   R   i   R   R   R   iž’’’i   t   axis(
   R   R   t   NoneR   R   R   R   t   maxR   t   min(   R   R   RN   t   X2t   X2t(    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt    test_transform_outside_fit_rangeé   s    +% c          C@  sĀ   t  j d d d d g  d  d   d  f }  |  j   } t d d d d  } | j |   } t |  |  | j   } | j |  } t | |  t | t  j d g d	 g d
 g d
 g g   d  S(   Ni    i   i   i   R   R   R   g      ą?g      ų?g      @(   R   R   RR   t   copyR   R   R   RL   (   R   t   X_beforeR   R1   t	   Xt_beforeRO   (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_overwriteõ   s    +s   strategy, expected_bin_edgesc         C@  ss   d g d g d g d g d g d g g } t  d d d |   } d } t t | | j |  t | j d |  d  S(   Ni    i   R   R   sp   Bins whose width are too small (i.e., <= 1e-8) in feature 0 are removed. Consider decreasing the number of bins.(   R   R   R/   R   R   R#   (   R   t   expected_bin_edgesR   RN   t   msg(    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   test_redundant_bins  s
    *c          C@  sĪ   t  j d d d g  j d d  }  t  j d d d d d d g  } t  j d	 d	 d
 g  j d d  } t d d d d d d  } d } t t | | j |   t | j d	 |  t | j	 |   |  d  S(   Ng©?gffffffī?i’’’’i   gq=
×£pĶ?g=
×£p=Ś?gįz®Gįā?g¤p=
×£č?i    i   R   i
   R   R   R   R   sp   Bins whose width are too small (i.e., <= 1e-8) in feature 0 are removed. Consider decreasing the number of bins.(
   R   R   R)   R   R   R/   R   R   R#   R   (   R   R&   R1   RN   R]   (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt!   test_percentile_numeric_stability  s    $!$	(*   t
   __future__R    t   pytestt   numpyR   t   scipy.sparseR;   R=   R-   t   sklearn.externals.six.movesR   R4   t   sklearn.preprocessingR   R   t   sklearn.utils.testingR   R   R   R   R   R   t   markt   parametrizeR   R   R   R!   R'   R+   R2   R3   R8   R9   RE   RF   RK   RP   RW   R[   R^   R_   (    (    (    sN   lib/python2.7/site-packages/sklearn/preprocessing/tests/test_discretization.pyt   <module>   sl   (	EEW			"	EEW	'	
					EEW	!$!**'		6
