B
    	\Q                 @   s  d dl m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 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mZ edd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Z d!d" Z!ej"#d#d$d%d%d%gd$d$d%d%gfe$d$d$gd%d%gd%d%gd%d%gge$d$d$gd$d$gd%d%gd%d%ggfgd&d' Z%ej"#d(d)d*d+d,d-gd.d/ Z&d0d1 Z'd2d3 Z(d4d5 Z)d6d7 Z*d8d9 Z+d:d; Z,d<d= Z-d>d? Z.d@dA Z/dBdC Z0dDdE Z1dFdG Z2dHdI Z3dJdK Z4dLdM Z5dNdO Z6dPdQ Z7dRdS Z8dTdU Z9dVdW Z:dXdY Z;dZd[ Z<d\d] Z=d^d_ Z>drdadbZ?dcdd Z@dedf ZAdgdh ZBej"#d#d%d%d%d$gdigdj fe$d$d$gd%d%gd%d%gd%d%ggdidiggdj fgdkdl ZCej"#d(dmdndod-gdpdq ZDdS )s    )divisionN)clone)assert_array_equal)assert_array_almost_equal)assert_equal)assert_almost_equal)assert_raises)assert_warns_message)ignore_warnings)_weighted_percentile)DummyClassifierDummyRegressorc          	   C   s   |  |}| |}t|}|jdkr4t|d}|jd }t|}|dkrZ|g}|g}xt|D ]z}t	|| jd | t	|| jd tt
|d d |f  t|| jddtt| tt|| ||  qdW d S )N   )r   r   )axis)predict_probaZpredict_log_probanpZ
atleast_1dndimreshapeshapelenranger   uniquer   sumoneslog)clfXyZprobaZ	log_probaZ	n_outputs	n_samplesk r!   7lib/python3.7/site-packages/sklearn/tests/test_dummy.py_check_predict_proba   s    




* r#   c             C   s   t dgdgdgdgg}t ddddg}t| }||| ||}t|j|j t ddgddgddgddgg}t| }||| ||}t|j|j d S )Nr   r         )r   arrayr   fitpredictr   r   )r   r   r   esty_predr!   r!   r"   _check_behavior_2d.   s    


r+   c          
   C   s   t dgdgdgdgg}t dddddgdddddgdddddgdddddgg}t| }||| ||}t|j|j d S )Nr   r         r%   r$   )r   r&   r   r'   r(   r   r   )r   r   r   r)   r*   r!   r!   r"   _check_behavior_2d_for_constantB   s    
r.   c             C   s<   t t| |jd df| t t| |jd df| d S )Nr   r   )r   r   Ztiler   )Z	statisticy_learny_pred_learny_testy_pred_testr!   r!   r"   _check_equality_regressorO   s    r3   c              C   s   dgdgdgdgg} ddddg}xdD ]}t |dd}|| | t|| tt|  t|| | |dkrt|	| d g|j
d q&t|	| d g|j
ddk q&W d S )	Nr   r   r$   )most_frequentprior)strategyrandom_stater5   )r   r   g      ?)r   r'   r   r(   r   r   r   r#   r   r   class_prior_r   )r   r   r6   r   r!   r!   r"   %test_most_frequent_and_prior_strategyW   s    
r9   c           
   C   s   dgdgdgdgg} t ddgddgddgddgg}t| }xfdD ]^}t|dd}|| | t|| t t |dft 	|dfg t
|| | t| qDW d S )Nr   r   r$   r%   )r5   r4   )r6   r7   )r   r&   r   r   r'   r   r(   hstackr   zerosr#   r+   )r   r   r   r6   r   r!   r!   r"   1test_most_frequent_and_prior_strategy_multioutputi   s    


r<   c              C   s   dggd } dddddg}t ddd}|| | dggd } || }t|tt|  }t|d ddd	 t|d d
dd	 t|| | d S )Nr   r,   r   r$   
stratified)r6   r7   i  g333333?)decimalg?)	r   r'   r(   r   bincountfloatr   r   r#   )r   r   r   r*   pr!   r!   r"   test_stratified_strategy|   s    
rB   c              C   s   dggd } t ddgddgddgddgddgg}tddd}|| | dggd } || }xht|jd D ]V}t |d d |f tt	|  }t
|d ddd	 t
|d d
dd	 t|| | qrW t| d S )Nr   r,   r$   r   r=   )r6   r7   i  g333333?)r>   g?)r   r&   r   r'   r(   r   r   r?   r@   r   r   r#   r+   )r   r   r   r*   r    rA   r!   r!   r"   $test_stratified_strategy_multioutput   s     

"rC   c              C   s   dggd } ddddg}t ddd}|| | dggd } || }t|tt|  }t|d ddd	 t|d ddd	 t|| | d S )
Nr   r-   r   r$   uniform)r6   r7   i  g      ?)r>   )	r   r'   r(   r   r?   r@   r   r   r#   )r   r   r   r*   rA   r!   r!   r"   test_uniform_strategy   s    
rE   c              C   s   dggd } t ddgddgddgddgg}tddd}|| | dggd } || }xht|jd D ]V}t |d d |f tt	|  }t
|d ddd	 t
|d ddd	 t|| | qlW t| d S )
Nr   r-   r$   r   rD   )r6   r7   i  g      ?)r>   )r   r&   r   r'   r(   r   r   r?   r@   r   r   r#   r+   )r   r   r   r*   r    rA   r!   r!   r"   !test_uniform_strategy_multioutput   s    

"rF   c              C   sJ   dggd } dddddg}t dd}|| | t|| dgd  d S )	Nr   r,   ZparisZtokyoZ	amsterdamZberlinr4   )r6   )r   r'   r   r(   )r   r   r   r!   r!   r"   test_string_labels   s
    
rG   zy,y_testr$   r   c             C   s,   t dd}|d |  t|d |d d S )Nr4   )r6   g      ?)r   r'   r   score)r   r1   r   r!   r!   r"   test_classifier_score_with_None   s    
rI   r6   r=   r4   r5   rD   constantc             C   sz   ddddg}dggd }t | ddd}||| ||}dggd }t | ddd}||| ||}t|| d S )Nr   r$   r   r-   )r6   r7   rJ   )r   r'   r(   r   )r6   r   X1Zclf1predictions1X2Zclf2predictions2r!   r!   r"   +test_classifier_prediction_independent_of_X   s    

rO   c              C   s:   t dd} tt| jg g  tt| jg  tt| jg  d S )Nunknown)r6   )r   r   
ValueErrorr'   r(   r   )r   r!   r!   r"   test_classifier_exceptions   s    
rR   c              C   sZ   t jjdd} dggd }| d}t }||| t||t |gt	|  d S )Nr   )seedr   r-   )
r   randomRandomStaterandnr   r'   r   r(   meanr   )r7   r   r   regr!   r!   r"   test_mean_strategy_regressor   s    
rY   c        	      C   s   t jjdd} | dd}| dd}t j|ddd}| dd}| dd}t }||| ||}||}t	||||| t
| d S )	Nr   )rS   
   r,   r   )r   )r   r      )r   rT   rU   rV   rW   r   r   r'   r(   r3   r+   )	r7   X_learnr/   rW   X_testr1   r)   r0   r2   r!   r!   r"   (test_mean_strategy_multioutput_regressor  s    

r^   c              C   s   t  } tt| jg  d S )N)r   r   rQ   r(   )rX   r!   r!   r"   test_regressor_exceptions  s    r_   c              C   s^   t jjdd} dggd }| d}tdd}||| t||t |gt	|  d S )Nr   )rS   r   r,   median)r6   )
r   rT   rU   rV   r   r'   r   r(   r`   r   )r7   r   r   rX   r!   r!   r"   test_median_strategy_regressor"  s    

ra   c        	      C   s   t jjdd} | dd}| dd}t j|ddd}| dd}| dd}td	d
}||| ||}||}t	||||| t
| d S )Nr   )rS   rZ   r,   r   )r   )r   r   r[   r`   )r6   )r   rT   rU   rV   r`   r   r   r'   r(   r3   r+   )	r7   r\   r/   r`   r]   r1   r)   r0   r2   r!   r!   r"   *test_median_strategy_multioutput_regressor.  s    


rb   c              C   s  t jjdd} dggd }| d}tddd}||| t||t |gt	|  tddd}||| t||t 
|gt	|  tddd}||| t||t |gt	|  tddd}||| t||t j|d	d
gt	|  d S )Nr   )rS   r   r,   quantileg      ?)r6   rc   g333333?   )q)r   rT   rU   rV   r   r'   r   r(   r`   r   minmax
percentile)r7   r   r   rX   r!   r!   r"    test_quantile_strategy_regressorE  s    
   ri   c        
      C   s   t jjdd} | dd}| dd}t j|ddd}t j|ddd	d}| d
d}| d
d}tddd}||| |	|}|	|}	t
|||||	 t| tddd}||| |	|}|	|}	t
|||||	 t| d S )Nr   )rS   rZ   r,   r   )r   )r   r   P   )r   re   r[   rc   g      ?)r6   rc   g?)r   rT   rU   rV   r`   r   rh   r   r'   r(   r3   r+   )
r7   r\   r/   r`   Zquantile_valuesr]   r1   r)   r0   r2   r!   r!   r"   ,test_quantile_strategy_multioutput_regressor]  s*    



rk   c              C   s   dggd } dgd }t dd}tt|j| | t dd d}tt|j| | t ddgd}tt|j| | t ddd}tt|j| | t ddd}tt|j| | t ddd}tt|j| | d S )	Nr   r,   rc   )r6   )r6   rc   gg?abc)r   r   rQ   r'   	TypeError)r   r   r)   r!   r!   r"   test_quantile_invalid  s    

rn   c              C   s    t ddd} tt| jg g  d S )Nrc   g?)r6   rc   )r   r   rQ   r'   )r)   r!   r!   r"   "test_quantile_strategy_empty_train  s    ro   c              C   s   t jjdd} dggd }| d}tddgd}||| t||dgt|  tddd}||| t||dgt|  d S )Nr   )rS   r   r,   rJ   +   )r6   rJ   )	r   rT   rU   rV   r   r'   r   r(   r   )r7   r   r   rX   r!   r!   r"    test_constant_strategy_regressor  s    
rq   c        	      C   s   t jjdd} | dd}| dd}| d}| dd}| dd}td|d}||| ||}||}t||||| t| d S )Nr   )rS   rZ   r,   r[   rJ   )r6   rJ   )	r   rT   rU   rV   r   r'   r(   r3   r.   )	r7   r\   r/   Z	constantsr]   r1   r)   r0   r2   r!   r!   r"   ,test_constant_strategy_multioutput_regressor  s    


rr   c              C   sF   dggd } dddddg}t dd	}|| | t|jt| d S )
Nr   r,   r   r$   r-         rW   )r6   )r   r'   r   	constant_r   rW   )r   r   r)   r!   r!   r"   test_y_mean_attribute_regressor  s
    
rv   c              C   s8   dggd } dddddg}t dd	}tt|j| | d S )
Nr   r,   r   r$   r-   rs   rt   Zgona)r6   )r   r   rQ   r'   )r   r   r)   r!   r!   r"    test_unknown_strategey_regressor  s    
rw   c              C   s8   dggd } dddddg}t dd	}tt|j| | d S )
Nr   r,   r   r$   r-   rs   rt   rJ   )r6   )r   r   rm   r'   )r   r   r)   r!   r!   r"   &test_constants_not_specified_regressor  s    
rx   c              C   sN   t jjdd} | dd}| dd}tdddddgd	}tt|j|| d S )
Nr   )rS   rZ   r,   rJ   r$   r%   r-   )r6   rJ   )r   rT   rU   rV   r   r   rQ   r'   )r7   r   r   r)   r!   r!   r"   (test_constant_size_multioutput_regressor  s
    ry   c              C   s   dgdgdgdgg} ddddg}t dddd}|| | t|| tt|  t|| | dgdgdgdgg} ddddg}t dddd}|| | t|| tdgd  t|| | d S )	Nr   r$   r   rJ   )r6   r7   rJ   ZtwoZoner-   )	r   r'   r   r(   r   r   r   r#   r&   )r   r   r   r!   r!   r"   test_constant_strategy  s    rz   c           	   C   s   dgdgdgdgg} t ddgddgddgddgg}t| }tddddgd}|| | t|| t t |dft 	|dfg t
|| | d S )Nr   r$   r%   r   rJ   )r6   r7   rJ   )r   r&   r   r   r'   r   r(   r:   r   r;   r#   )r   r   r   r   r!   r!   r"   "test_constant_strategy_multioutput  s    

r{   c              C   sb   dgdgdgdgg} ddddg}t ddd}tt|j| | t ddddgd}tt|j| | d S )Nr   r$   r   rJ   )r6   r7   )r6   r7   rJ   )r   r   rQ   r'   )r   r   r   r!   r!   r"   !test_constant_strategy_exceptions
  s    r|   c              C   sH   dgdgdgg} dddg}dddg}t  | ||}t|jddg d S )Nr   r   g?g      ?gVUUUUU?g?)r   r'   r   r8   )r   r   sample_weightr   r!   r!   r"   !test_classification_sample_weight  s
    

r~   c           
   C   s   dggd } t tddgddgddgddgddgg}t| }tddddgd}|| | || }t |sxt	t
| tt|dft|dfg d S )Nr   r,   r   r-   rJ   )r6   r7   rJ   )sp
csc_matrixr   r&   r   r   r'   r(   issparseAssertionErrorr   toarrayr:   r   r;   )r   r   r   r   r*   r!   r!   r"   $test_constant_strategy_sparse_target  s    
r   c           
   C   s   dggd } t tddgddgddgddgddgg}tddd}ttd|j| | dggd	 } || }xnt	|j
d D ]\}t|d d |f tt|  }t|d d
dd t|d d
dd t|d d
dd q~W d S )Nr   r,   r$   r   r-   rD   )r6   r7   z*the uniform strategy would not save memoryi  gUUUUUU?)r>   )r   r   r   r&   r   r	   UserWarningr'   r(   r   r   r?   r@   r   r   )r   r   r   r*   r    rA   r!   r!   r"   +test_uniform_strategy_sparse_target_warning/  s"    
"r   c           
   C   s   dggd } t tddgddgddgddgddgg}tddd}|| | dggd } || }t |svt|	 }xnt
|jd D ]\}t|d d |f tt|  }t|d ddd	 t|d d
dd	 t|d d
dd	 qW d S )Nr   r,   r-   r   r=   )r6   r7   i  g333333?)r>   g?)r   r   r   r&   r   r'   r(   r   r   r   r   r   r?   r@   r   r   )r   r   r   r*   r    rA   r!   r!   r"   &test_stratified_strategy_sparse_targetF  s"    
"r   c           
   C   s   dggd } t tddgddgddgddgddgg}t| }tt|dft|dfg}xJdD ]B}t|dd}|	| | |
| }t |stt| | qjW d S )Nr   r,   r   r%   r-   )r4   r5   )r6   r7   )r   r   r   r&   r   r:   r   r;   r   r'   r(   r   r   r   r   )r   r   r   
y_expectedr6   r   r*   r!   r!   r"   3test_most_frequent_and_prior_strategy_sparse_target]  s    "

r   rZ   c             C   s   t jjdd}dgg|  }|| }|| }tdd|||}t|jt j||d tdd|||}t|jt	||d td	d
d|||}t|jt	||d d S )Nr   )rS   r   rW   )r6   )Zweightsr`   g      I@rc   gffffff?)r6   rc   g     W@)
r   rT   rU   Zrandr   r'   r   ru   Zaverager   )r   r7   r   r   r}   r)   r!   r!   r"   "test_dummy_regressor_sample_weightp  s    

r   c              C   sf   t dggdggdggg} t dddg}t dddg}t }|| | || }t|| d S )Nfoobarbazr$   )r   r&   r   r'   r(   r   )r   r   r   clsr*   r!   r!   r"    test_dummy_regressor_on_3D_array  s    
r   c              C   s~   t dggdggdggg} dddg}dddg}dgdgdgg}t }|| | || }|| }t|| t|| d S )Nr   r   r   r$   r   )r   r&   r   r'   r(   r   r   )r   r   r   Zy_proba_expectedr   r*   Zy_pred_probar!   r!   r"   !test_dummy_classifier_on_3D_array  s    




r   c              C   sl   dggd } t dddg}t dddg}t }|| | |j| dd}tt|d t|d | d S )Nr   r%   r$   T)Z
return_stdr   )r   r&   r   r'   r(   r   r   r   )r   r   Zy_std_expectedr   Zy_pred_listr!   r!   r"   test_dummy_regressor_return_std  s    r   g      ?r-   c             C   s(   t  }|d |  t|d |d d S )Ng      ?)r   r'   r   rH   )r   r1   rX   r!   r!   r"   test_regressor_score_with_None  s    
r   rW   r`   rc   c             C   sz   ddddg}dggd }t | ddd}||| ||}dggd }t | ddd}||| ||}t|| d S )Nr   r$   r   r-   gffffff?)r6   rJ   rc   )r   r'   r(   r   )r6   r   rK   Zreg1rL   rM   Zreg2rN   r!   r!   r"   *test_regressor_prediction_independent_of_X  s    

r   )rZ   )EZ
__future__r   ZpytestZnumpyr   Zscipy.sparseZsparser   Zsklearn.baser   Zsklearn.utils.testingr   r   r   r   r   r	   r
   Zsklearn.utils.statsr   Zsklearn.dummyr   r   r#   r+   r.   r3   r9   r<   rB   rC   rE   rF   rG   ZmarkZparametrizer&   rI   rO   rR   rY   r^   r_   ra   rb   ri   rk   rn   ro   rq   rr   rv   rw   rx   ry   rz   r{   r|   r~   r   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   <module>   s   


"
	
	



	