B
    0d'                 @   s
  U 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 ddlm	Z	m
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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- ddl,m.Z. ddl,m/Z/ ddl,m0Z0 ddl,m1Z1 ddl2m3Z3 ddl2m4Z4 dd l5m6Z6 dd!l7m8Z8 dd"lm9Z9 dd#l:m;Z; d$d%gd%d%gd%d$gd&d&gd&d'gd'd&ggZ<d%d%d%d&d&d&gZ=d%d%gd'd'gd(d'ggZ>d%d&d&gZ?e'j+d)d*d(ddd+dd,\Z@ZAe'B ZCe8dZDeDEeCjFjGZHeCjIeH eC_IeCjFeH eC_Fe'jJd)d*d&d-\ZKZLe'jMd.d&d/\ZNZOeNPejQZNejRS d jTZUe-e/d0ZVe.e0d1ZWd2e1iZXeY ZZe	e[e
f e\d3< eZ]eV eZ]eW eZ]eX eV^ Z_e	e[e
f e\d4< e_]eW d5d6 Z`ejabd7eVd8d9 Zcd:d; Zdejabd7eVejabd<d=d>d? Zed@dA Zfejabd7eWejabd<dBdCdD ZgdEdF Zhejabd<dGdHdI ZidJdK Zjejabd7eWdLdM ZkdNdO Zlejabd7eVdPdQ ZmdRdS ZnejabdTejoejQfejabdUepeeVdVdWgeeWdXdYdZgd[d\ Zqd]d^ Zrejabd7eZd_d` ZsejabdaeVt ejabdbdcdddegejabdfe'j+dgd'ddhd%e'j+djd(dkddld&eCjIeCjFd' d& dmfe'judgdd/d'gdodp ZvejabdqeWt ejabdbdcdddegejabdre'jJd)d*d&ddsd(e'jJd)d*d'ddsd)gdvdw Zwejabdxe_t dydz Zxejabdxe_t ejabd{eCjIeCjFd|d+d}d~feCjIeDjyddeCjIjzd d'fdd|d|d}dfgdd Z{ejabdd|d+gdd Z|dd Z}ejabd7eVdd Z~dd Zejabd7e_dd Zdd Zejabd7e_dd Zdd Zejabd7e_dd Zejabd7eVdd Zdd Zejabd7eVdd Zdd Zdd Ze dd Zdd Zdd Zdd Zdd Zejabd7eZdd Zdd Zejabd7eZdd Zdd Zejabd7eZdd Zdd Zejabd7eZdd Zdd Zejabd7eZejabdeeefdd Zdd Zejabd7e_ejabdTejoejQfdd Ze ddÄ Zejabd7eZddń ZddǄ Zejabd7eVddɄ Zdd˄ Zejabd7eVdd̈́ Zddτ Zejabd7eVddф Zd*ddԄZejabd7eZddք Zdd؄ Zejabd7eZddڄ Zdd܄ Zejabd7eZddބ Zdd Zejabd7eZdd Zdd Zejabd7e_dd Zd+ddZdd Zejabd7e_dd Zdd Zdd ZG dd deUZede ejaje#eje#dk dde!dd Zdd Zdd Zejabd7e_dd Zejabd7e_ejajbd ededfdedfdedfejedfejedfd	ed
fed'edfgdd ddd Zejabd7eWdd Zejabd7eVdd Zdd Zejabde/e0gdd Zejabde-e.e/e0e1gdd Zejabdddgd d! Zejabd"eWd#d$ ZdS (,  z:
Testing for the forest module (sklearn.ensemble.forest).
    N)defaultdict)combinations)product)DictAny)
csr_matrix)
csc_matrix)
coo_matrix)comb)assert_allclose)DummyRegressor)mean_poisson_deviance)assert_almost_equal)assert_array_almost_equal)assert_array_equal)_convert_container)ignore_warnings)skip_if_no_parallel)parse_version)NotFittedError)datasets)TruncatedSVD)make_classification)ExtraTreesClassifier)ExtraTreesRegressor)RandomForestClassifier)RandomForestRegressor)RandomTreesEmbedding)train_test_split)GridSearchCV)	LinearSVC)check_random_state)mean_squared_error)SPARSE_SPLITTERS         i  
   F)	n_samples
n_featuresn_informativeZn_redundantZ
n_repeatedshufflerandom_state)r*   r+   r.      )r*   r.   )r   r   )r   r   r   FOREST_ESTIMATORSFOREST_CLASSIFIERS_REGRESSORSc             C   s   t |  }|ddd}|tt t|tt dt|ks@t	|dddd}|tt t|tt dt|kszt	|
t}|jtt|jfkst	dS )z&Check classification on a toy dataset.r)   r&   )n_estimatorsr.   )r2   max_featuresr.   N)FOREST_CLASSIFIERSfitXyr   predictTtrue_resultlenAssertionErrorapplyshaper2   )nameForestClassifierclfZleaf_indices rB   T/var/www/html/venv/lib/python3.7/site-packages/sklearn/ensemble/tests/test_forest.pycheck_classification_toyw   s    
rD   r?   c             C   s   t |  d S )N)rD   )r?   rB   rB   rC   test_classification_toy   s    rE   c             C   s   t |  }|d|dd}|tjtj |tjtj}|dksNtd||f |d|ddd}|tjtj |tjtj}|dkstd||f d S )	Nr)   r&   )r2   	criterionr.   g?z'Failed with criterion %s and score = %fr'   )r2   rF   r3   r.   g      ?)r4   r5   irisdatatargetscorer<   )r?   rF   r@   rA   rJ   rB   rB   rC   check_iris_criterion   s    rK   rF   )ginientropyc             C   s   t | | d S )N)rK   )r?   rF   rB   rB   rC   	test_iris   s    rN   c             C   s   t |  }|d|dd}|tt |tt}|dksFtd||f |d|ddd}|tt |tt}|dkstd	||f d S )
N   r&   )r2   rF   r.   g(\?z:Failed with max_features=None, criterion %s and score = %f   )r2   rF   r3   r.   gq=
ףp?z7Failed with max_features=6, criterion %s and score = %f)FOREST_REGRESSORSr5   X_regy_regrJ   r<   )r?   rF   ForestRegressorregrJ   rB   rB   rC   check_regression_criterion   s    

rV   )squared_errorabsolute_errorfriedman_msec             C   s   t | | d S )N)rV   )r?   rF   rB   rB   rC   test_regression   s    rZ   c              C   sZ  t jd} d\}}}tj|| || d}t |}|t jt |dd }| jdd|d}| jt 	|| d	}t
|||| d
\}}}	}
tddd| d}tddd| d}|||	 |||	 tdd||	}x||	df||
dfgD ]h\}}}t|||}t|t ||dd}t|||}|dkrF||k sFt||k stqW dS )zaTest that random forest with poisson criterion performs better than
    mse for a poisson target.*   )i  i  r)   )r*   r+   r.   r   )axisr&   )lowhighsize)lam)	test_sizer.   poissonr)   sqrt)rF   min_samples_leafr3   r.   rW   mean)Zstrategytraintestgư>N)nprandomRandomStater   make_low_rank_matrixabsmaxuniformrc   expr   r   r5   r   r   r8   Zclipr<   )rngn_trainn_testr+   r6   coefr7   X_trainX_testy_trainy_testZ
forest_poiZ
forest_msedummyvalZ
metric_poiZ
metric_mseZmetric_dummyrB   rB   rC   test_poisson_vs_mse   s8    

 
r{   )rc   rW   c       	      C   s   t jd}d\}}}tj|| ||d}|jdd|dt j|dd }|jt || d	}t	| d
d|d}|
|| t ||tt |kstdS )z9 "Test that sum(y_pred)==sum(y_true) on the training set.r[   )i  i  r)   )r*   r+   r.   r$   r'   )r^   r_   r`   r   )r\   )ra   r)   F)rF   r2   	bootstrapr.   N)ri   rj   rk   r   rl   ro   rn   rc   rp   r   r5   sumr8   pytestapproxr<   )	rF   rq   rr   rs   r+   r6   rt   r7   rU   rB   rB   rC   #test_balance_property_random_forest   s    
r   c             C   sj   t |  dd}t|drtt|dr*t|dddgdd	d
ggddg t|drXtt|drftd S )Nr   )r.   classes_
n_classes_r&   r'   r(      rO   rP   )rQ   hasattrr<   r5   )r?   rrB   rB   rC   check_regressor_attributes  s     r   c             C   s   t |  d S )N)r   )r?   rB   rB   rC   test_regressor_attributes  s    r   c          	   C   s   t |  }tjddp |ddddd}|tjtj ttj|	tjddt
tjjd  t|	tjt|tj W d Q R X d S )Nignore)divider)   r&   )r2   r.   r3   	max_depth)r\   r   )r4   ri   errstater5   rG   rH   rI   r   r}   predict_probaonesr>   rp   predict_log_proba)r?   r@   rA   rB   rB   rC   check_probability  s    (r   c             C   s   t |  d S )N)r   )r?   rB   rB   rC   test_probability.  s    r   c             C   sL  t j|dd}tj|dd}t|  }|d|dd}||| |j}t|dk}	|jd dksdt	|	dkspt	t
|d d dkst	|j}|jdd	 |j}
t||
 tdd
dt|}|dd|d}|j|||d |j}t
|dkst	xNdD ]F}|dd|d}|j|||| d |j}t||  |k st	qW d S )NF)copyr)   r   )r2   rF   r.   g?r(   r'   )n_jobsr&   )r2   r.   rF   )sample_weightg        )g      ?d   )X_largeastypey_larger0   r5   feature_importances_ri   r}   r>   r<   all
set_paramsr   r!   randintr;   rm   rf   )r?   rF   dtype	tolerancer6   r7   ForestEstimatorestimportancesZn_importantZimportances_parallelr   scaleZimportances_bisrB   rB   rC   check_importances3  s0    

r   r   zname, criterionrL   rM   rW   rY   rX   c             C   s*   d}|t kr|dkrd}t||| | d S )Ng{Gz?rX   g?)rQ   r   )r   r?   rF   r   rB   rB   rC   test_importancesY  s    	r   c        	         s  dd  dd  fdd} t ddddddddgdddddddd	gdddddddd
gddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgg
}t j|d d d df td|d d df  }}|jd }t |}x"t|D ]}| |||||< q*W tddddd||}tdd |j	D |j
 }t|t| t ||  dk std S )Nc             S   s*   | dk s| |krdS t t|t| ddS )Nr   T)exact)r
   int)knrB   rB   rC   binomialm  s    z-test_importances_asymptotic.<locals>.binomialc             S   sJ   t | }d}x8t| D ]*}d| | }|dkr||t| 8 }qW |S )Ng        g      ?r   )r;   ri   bincountlog2)Zsamplesr*   rM   countprB   rB   rC   rM   p  s    z,test_importances_asymptotic.<locals>.entropyc          
      s  j \}}tt|}||  fddt|D d}x@t|D ]2}d||||   }xt||D ]  xt fddt|D  D ]}	tj|td}
x0t|D ]$}|
d d  | f |	| kM }
qW |
d d f ||
  }}t	|dkrg }x4|  D ](}|d d | f |k}|
||  qW ||d |  |tfdd|D   7 }qW qpW qFW |S )	Nc                s"   g | ]}t  d d |f qS )N)ri   unique).0i)r6   rB   rC   
<listcomp>  s    zGtest_importances_asymptotic.<locals>.mdi_importance.<locals>.<listcomp>g        g      ?c                s   g | ]} |  qS rB   rB   )r   j)BvaluesrB   rC   r     s    )r   r   c                s    g | ]} |t |  qS rB   )r;   )r   c)rM   n_samples_brB   rC   r     s   )r>   listrangepopr   r   ri   r   boolr;   appendr}   )ZX_mr6   r7   r*   r+   featuresimpr   rt   bZmask_br   ZX_Zy_childrenxiZmask_xi)r   rM   )r   r6   r   r   rC   mdi_importance{  s4    

$$z3test_importances_asymptotic.<locals>.mdi_importancer   r&   r'   r(   r   rO   rP         	   )r   i  rM   )r2   r3   rF   r.   c             s   s   | ]}|j jd dV  qdS )F)	normalizeN)tree_Zcompute_feature_importances)r   treerB   rB   rC   	<genexpr>  s   z.test_importances_asymptotic.<locals>.<genexpr>g{Gz?)ri   arrayr   r>   zerosr   r   r5   r}   estimators_r2   r   rm   rf   r<   )	r   rH   r6   r7   r+   Ztrue_importancesr   rA   r   rB   )r   rM   rC   test_importances_asymptotich  s8    00


r   c          	   C   s8   d | }tjt|d tt|   d W d Q R X d S )NzfThis {} instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.)matchr   )formatr~   raisesr   getattrr0   )r?   err_msgrB   rB   rC   !test_unfitted_feature_importances  s    r   r@   X_typer   Z
sparse_csrZ
sparse_csczX, y, lower_bound_accuracyi,  )r*   	n_classesr.   ?i  rP   )r*   r   r,   r.   ?
ףp=
?c             C   s  t ||d}t||ddd\}}}}| ddddd}	t|	drBtt|	d	rPt|	|| |	||}
t|
|	j d
ks~t|	j|kstt|	dstt|	drtt|	d	st|jdkr|j	d t
t|f}n*|j	d t
t|dddf |j	d f}|	jj	|kstdS )z5Check that OOB score is close to score on a test set.)constructor_nameg      ?r   )rb   r.   (   T)r2   r|   	oob_scorer.   
oob_score_oob_decision_function_g?oob_prediction_r&   N)r   r   r   r<   r5   rJ   rm   r   ndimr>   r;   setr   )r@   r6   r7   r   Zlower_bound_accuracyru   rv   rw   rx   
classifier
test_scoreexpected_shaperB   rB   rC   test_forest_classifier_oob  s0    
*r   rT   zX, y, lower_bound_r2)r*   r+   	n_targetsr.   ffffff?皙?c             C   s   t ||d}t||ddd\}}}}| ddddd}	t|	drBtt|	d	rPt|	|| |	||}
t|
|	j d
ks~t|	j|kstt|	dstt|	d	stt|	drt|jdkr|j	d f}n|j	d |jf}|	j
j	|kstdS )z\Check that forest-based regressor provide an OOB score close to the
    score on a test set.)r   g      ?r   )rb   r.   2   T)r2   r|   r   r.   r   r   g?r   r&   N)r   r   r   r<   r5   rJ   rm   r   r   r>   r   )rT   r6   r7   r   Zlower_bound_r2ru   rv   rw   rx   Z	regressorr   r   rB   rB   rC   test_forest_regressor_oob  s0    
r   r   c          	   C   s>   | ddddd}t jtdd |tjtj W dQ R X dS )zfCheck that a warning is raised when not enough estimator and the OOB
    estimates will be inaccurate.r&   Tr   )r2   r   r|   r.   z"Some inputs do not have OOB scores)r   N)r~   warnsUserWarningr5   rG   rH   rI   )r   	estimatorrB   rB   rC   test_forest_oob_warningU  s    r   zX, y, params, err_msgT)r   r|   z6Out of bag estimation only available if bootstrap=TruerO   )r^   r_   r`   z:The type of target cannot be used to compute OOB estimatesc          	   C   s4   | f |}t jt|d ||| W d Q R X d S )N)r   )r~   r   
ValueErrorr5   )r   r6   r7   paramsr   r   rB   rB   rC   test_forest_oob_errorc  s    
r   r   c          	   C   sP   t jtdd t| d W d Q R X t jtdd t tt W d Q R X d S )Nz"got an unexpected keyword argument)r   )r   zOOB score not supported)r~   r   	TypeErrorr   NotImplementedErrorZ_set_oob_score_and_attributesr6   r7   )r   rB   rB   rC   +test_random_trees_embedding_raise_error_oob{  s    r   c             C   s.   t |   }t|ddd}|tjtj d S )N)r&   r'   )r2   r   )r4   r   r5   rG   rH   rI   )r?   forestrA   rB   rB   rC   check_gridsearch  s    
r   c             C   s   t |  d S )N)r   )r?   rB   rB   rC   test_gridsearch  s    r   c             C   sn   t |  }|dddd}||| t|dks2t|jdd ||}|jdd ||}t||d dS )	z-Check parallel computations in classificationr)   r(   r   )r2   r   r.   r&   )r   r'   N)r0   r5   r;   r<   r   r8   r   )r?   r6   r7   r   r   y1y2rB   rB   rC   check_parallel  s    

r   c             C   s6   | t krtj}tj}n| tkr&t}t}t| || d S )N)r4   rG   rH   rI   rQ   rR   rS   r   )r?   r6   r7   rB   rB   rC   test_parallel  s    r   c       	      C   sl   t |  }|dd}||| |||}t|}t|}t||jksPt|||}||kshtd S )Nr   )r.   )	r0   r5   rJ   pickledumpsloadstype	__class__r<   )	r?   r6   r7   r   objrJ   Zpickle_objectobj2Zscore2rB   rB   rC   check_pickle  s    


r   c             C   sJ   | t krtj}tj}n| tkr&t}t}t| |d d d |d d d  d S )Nr'   )r4   rG   rH   rI   rQ   rR   rS   r   )r?   r6   r7   rB   rB   rC   test_pickle  s    r  c       	      C   s  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ddgddgddg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ddgddgddgddgg}ddgddgddgddgg}ddgddgddgddgg}t |  ddd}||||}t|| | tkrtjd	d
 ||}t|dks0t	|d j
dksDt	|d j
dksXt	||}t|dkstt	|d j
dkst	|d j
dkst	W d Q R X d S )Nr$   r%   r&   r'   r   r(   F)r.   r|   r   )r   )r   r'   )r   r   )r0   r5   r8   r   r4   ri   r   r   r;   r<   r>   r   )	r?   ru   rw   rv   rx   r   y_predproba	log_probarB   rB   rC   check_multioutput  sN    





r  c             C   s   t |  d S )N)r  )r?   rB   rB   rC   test_multioutput  s    r  c       	      C   s  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ddgddgddg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ddgdd	gdd	gdd	gg}ddgddgddgddgg}ddgddgddgdd	gg}t |  d
dd}||||}t|| tjdd ||}t|dks&t|d
 j	dks:t|d j	dksNt|
|}t|dksjt|d
 j	dks~t|d j	dkstW d Q R X d S )Nr$   r%   r&   r'   redbluegreenpurpleyellowr   F)r.   r|   r   )r   )r   r'   )r   r   )r0   r5   r8   r   ri   r   r   r;   r<   r>   r   )	r?   ru   rw   rv   rx   r   r  r  r  rB   rB   rC   test_multioutput_string  sR    





r  c             C   s   t |  }|ddtt}|jdks(tt|jddg t	tt
td fj}|ddt|}t|jddg t|jddgddgg d S )Nr   )r.   r'   r%   r&   r$   )r4   r5   r6   r7   r   r<   r   r   ri   vstackr   r9   )r?   r@   rA   _yrB   rB   rC   check_classes_shape5  s    r  c             C   s   t |  d S )N)r  )r?   rB   rB   rC   test_classes_shapeG  s    r  c              C   s<   t ddd} tjdd\}}| |}t|tjks8td S )Nr)   F)r2   sparse_outputg      ?)factor)r   r   make_circlesfit_transformr   ri   Zndarrayr<   )hasherr6   r7   X_transformedrB   rB   rC   test_random_trees_dense_typeL  s    
r  c              C   sR   t dddd} t dddd}tjdd\}}| |}||}t| | d S )Nr)   Fr   )r2   r  r.   Tg      ?)r  )r   r   r  r  r   toarray)Zhasher_denseZhasher_sparser6   r7   ZX_transformed_denseX_transformed_sparserB   rB   rC   test_random_trees_dense_equalY  s    

r  c              C   s   t ddd} tjdd\}}| |}t ddd} t| || |  |jd |jd ksht	t|j
dd| j tdd	}||}t }||| |||d
kst	d S )N   r&   )r2   r.   g      ?)r  r   )r\   r'   )Zn_componentsg      ?)r   r   r  r  r   r5   	transformr  r>   r<   r}   r2   r   r    rJ   )r  r6   r7   r  ZsvdZ	X_reducedZ
linear_clfrB   rB   rC   test_random_hasherm  s    


r  c              C   sJ   t jdd\} }tddd}|| }|t| }t| |  d S )Nr   )r.   r  r&   )r2   r.   )r   make_multilabel_classificationr   r  r   r   r  )r6   r7   r  r  r  rB   rB   rC   test_random_hasher_sparse_data  s
    
r  c                 s   t d} d\}}| ||| dd|fdddD }| ||  fdd|D }x(t||d	d  D ]\}}t|| qpW d S )
Ni!0  )P   r  r   r'   c                s"   g | ]}t d |dd qS )r/   i90  )r2   r   r.   )r   r5   )r   r   )ru   rw   rB   rC   r     s   z'test_parallel_train.<locals>.<listcomp>)r&   r'   r(   r          c                s   g | ]}|  qS rB   )r   )r   rA   )rv   rB   rC   r     s    r&   )r!   randnr   zipr   )rq   r*   r+   ZclfsZprobasZproba1Zproba2rB   )rv   ru   rw   rC   test_parallel_train  s    r%  c                 s  t d} | jdddd}| d}d t dd	||}tt}x@|jD ]6}d
dd t	|j
j|j
jD }||  d7  < qJW t fdd| D }t|dkstd|d d kstd|d d kstd|d d kstd|d d kst|d d dkst|d d dks*ttd}tjddd|d d df< tjddd|d d df< | d}tddd||}tt}xB|jD ]8}d
dd t	|j
j|j
jD }||  d7  < qW dd | D }t|dkstd S )Ni!0  r   r   )i  r&   )r`   i  i  r[   )r2   r.    c             s   s.   | ]&\}}|d kr"d|t |f ndV  qdS )r   z%d,%d/-N)r   )r   ftrB   rB   rC   r     s   z$test_distribution.<locals>.<genexpr>r&   c                s    g | ]\}}d |   |fqS )g      ?rB   )r   r   r   )n_treesrB   rC   r     s    z%test_distribution.<locals>.<listcomp>rO   g?r'   r(   g333333?z0,1/0,0/--0,2/--)i  r'   )r3   r.   c             s   s.   | ]&\}}|d kr"d|t |f ndV  qdS )r   z%d,%d/r'  N)r   )r   r(  r)  rB   rB   rC   r     s   c             S   s   g | ]\}}||fqS rB   rB   )r   r   r   rB   rB   rC   r     s    r   )r!   r   randr   r5   r   r   r   joinr$  r   feature	thresholdsorteditemsr;   r<   ri   emptyrj   )rq   r6   r7   rU   Zuniquesr   rB   )r*  rC   test_distribution  s@    


r2  c             C   sp   t t }}t|  }|ddddd||}|jd  dks@t|dddd||}|jd  dksltd S )Nr&   r   r   )r   Zmax_leaf_nodesr2   r.   )r   r2   r.   )hastie_Xhastie_yr0   r5   r   Z	get_depthr<   )r?   r6   r7   r   r   rB   rB   rC   check_max_leaf_nodes_max_depth  s    
r5  c             C   s   t |  d S )N)r5  )r?   rB   rB   rC   test_max_leaf_nodes_max_depth  s    r6  c          	   C   s\  t t }}t|  }tt |dd|| W d Q R X tt |dd|| W d Q R X tt |dd|| W d Q R X |dddd}||| |jd jj	dk}|jd jj
| }t|t|d d kstd	| |dddd}||| |jd jj	dk}|jd jj
| }t|t|d d ksXtd	| d S )
Nr%   )min_samples_splitr   g?r)   r&   )r7  r2   r.   g      ?zFailed with {0})r3  r4  r0   r~   r   r   r5   r   r   Zchildren_leftZn_node_samplesri   minr;   r<   r   )r?   r6   r7   r   r   Znode_idxZnode_samplesrB   rB   rC   check_min_samples_split  s$    
(r9  c             C   s   t |  d S )N)r9  )r?   rB   rB   rC   test_min_samples_split  s    r:  c          	   C   s0  t t }}t|  }tt |dd|| W d Q R X tt |dd|| W d Q R X |dddd}||| |jd j	|}t
|}||dk }t
|dkstd| |d	ddd}||| |jd j	|}t
|}||dk }t
|t|d	 d ks,td| d S )
Nr%   )re   r   rO   r&   )re   r2   r.   r   zFailed with {0}g      ?)r3  r4  r0   r~   r   r   r5   r   r   r=   ri   r   r8  r<   r   r;   )r?   r6   r7   r   r   outZnode_countsZ
leaf_countrB   rB   rC   check_min_samples_leaf	  s$    


r<  c             C   s   t |  d S )N)r<  )r?   rB   rB   rC   test_min_samples_leaf&  s    r=  c             C   s   t t }}t|  }tjd}||jd }t|}xt	dddD ]}||ddd}d| krhd|_
|j|||d |jd j|}	tj|	|d	}
|
|
dk }t|||j ksHtd
| |jqHW d S )Nr   g      ?rP   r&   )min_weight_fraction_leafr2   r.   ZRandomForestF)r   )weightsz,Failed with {0} min_weight_fraction_leaf={1})r3  r4  r0   ri   rj   rk   r+  r>   r}   Zlinspacer|   r5   r   r   r=   r   r8  r>  r<   r   )r?   r6   r7   r   rq   r?  Ztotal_weightfracr   r;  Znode_weightsZleaf_weightsrB   rB   rC   check_min_weight_fraction_leaf+  s"    

rA  c             C   s   t |  d S )N)rA  )r?   rB   rB   rC   test_min_weight_fraction_leafJ  s    rB  c             C   s   t |  }|ddd||}|ddd||}t|||| | tksV| tkrzt|||| t|j|j | tkrt|||| t|	||	| | t
krt|| ||  t|| ||  d S )Nr   r'   )r.   r   )r0   r5   r   r=   r4   rQ   r8   r   r   r   FOREST_TRANSFORMERSr  r  r  )r?   r6   ZX_sparser7   r   ZdensesparserB   rB   rC   check_sparse_inputO  s"    rE  sparse_matrixc             C   s(   t jddd\}}t| |||| d S )Nr   r   )r.   r*   )r   r  rE  )r?   rF  r6   r7   rB   rB   rC   test_sparse_inputl  s    rG  c             C   s  t |  ddd}tjtj|d}tj}t||||| tjtjd|d}tj}t||||| tjtjd|d}tj}t||||| tj	tj|d}tj}t||||| |j
jtkr^ttj|d}tj}t||||| ttj|d}tj}t||||| ttj|d}tj}t||||| tjtjd d d |d}tjd d d }t||||| d S )	Nr   F)r.   r|   )r   C)orderr   Fr(   )r0   ri   ZasarrayrG   rH   rI   r   r5   r8   ZascontiguousarrayZbase_estimatorZsplitterr#   r   r   r	   )r?   r   r   r6   r7   rB   rB   rC   check_memory_layoutt  s4    rK  c             C   s   t | | d S )N)rK  )r?   r   rB   rB   rC   test_memory_layout  s    rL  c          	   C   s|   t |  }tt |ddd|| W d Q R X |dd}||| | tksX| tkrxtt || W d Q R X d S )Nr&   r   )r2   r.   )r.   )r0   r~   r   r   r5   r4   rQ   r8   )r?   r6   X_2dr7   r   r   rB   rB   rC   check_1d_input  s    
rN  c          	   C   sT   t jd d df }t jd d df d}t j}t  t| ||| W d Q R X d S )Nr   )r%   r&   )rG   rH   reshaperI   r   rN  )r?   r6   rM  r7   rB   rB   rC   test_1d_input  s
    rP  c       	      C   s  t |  }|dd}|tjtj |ddd}|tjtj t|j|j ttjtjtjfj	}|ddddddddddddgdd}|tj| t|j|j |ddd}|tj| t|j|j t
tjj}|tjdk  d	9  < dd
dd}|dd}|tjtj| ||dd}|tjtj t|j|j |dd}|tjtj|d  ||dd}|tjtj| t|j|j d S )Nr   )r.   balanced)class_weightr.   g       @g      ?)r   r&   r'   r&   r   g      Y@r'   )r4   r5   rG   rH   rI   r   r   ri   r  r9   r   r>   )	r?   r@   Zclf1Zclf2Z
iris_multiZclf3Zclf4r   rR  rB   rB   rC   check_class_weights  s<    




rS  c             C   s   t |  d S )N)rS  )r?   rB   rB   rC   test_class_weights  s    rT  c             C   s~   t |  }ttttd fj}|ddd}|t| |ddddddgdd}|t| |d	dd}|t| d S )
Nr'   rQ  r   )rR  r.   g      ?g      ?)r%   r&   )r$   r'   Zbalanced_subsample)r4   ri   r  r7   r   r9   r5   r6   )r?   r@   r  rA   rB   rB   rC   6check_class_weight_balanced_and_bootstrap_multi_output  s    rU  c             C   s   t |  d S )N)rU  )r?   rB   rB   rC   5test_class_weight_balanced_and_bootstrap_multi_output  s    rV  c          	   C   s  t |  }ttttd fj}|ddd}tt |	t
t W d Q R X tt |	t
| W d Q R X |dddd}|	t
t d}tjt|d	 |	t
| W d Q R X |d
dd}tt |	t
| W d Q R X |dddgdd}tt |	t
| W d Q R X d S )Nr'   z	the larchr   )rR  r.   rQ  T)rR  
warm_startr.   zJWarm-start fitting without increasing n_estimators does not fit new trees.)r   r&   g      ?g      ?)r%   r&   )r4   ri   r  r7   r   r9   r~   r   r   r5   r6   r   r   )r?   r@   r  rA   warn_msgrB   rB   rC   check_class_weight_errors	  s$    rY  c             C   s   t |  d S )N)rY  )r?   rB   rB   rC   test_class_weight_errors*  s    rZ  r[   c             C   s   t t }}t|  }d }xLdD ]D}|d kr8|||dd}n|j|d ||| t||kstqW |d|dd}||| tdd |D td	d |D kstt|	||	|d

| d d S )N)rO   r)   T)r2   r.   rW  )r2   r)   Fc             S   s   g | ]
}|j qS rB   )r.   )r   r   rB   rB   rC   r   D  s    z$check_warm_start.<locals>.<listcomp>c             S   s   g | ]
}|j qS rB   )r.   )r   r   rB   rB   rC   r   E  s    zFailed with {0})r   )r3  r4  r0   r   r5   r;   r<   r   r   r=   r   )r?   r.   r6   r7   r   Zest_wsr2   Z	est_no_wsrB   rB   rC   check_warm_start/  s"    

r[  c             C   s   t |  d S )N)r[  )r?   rB   rB   rC   test_warm_startM  s    r\  c             C   s~   t t }}t|  }|ddddd}||| |ddddd}||| |jddd ||| t|||| d S )NrO   r&   F)r2   r   rW  r.   Tr'   )rW  r.   )r3  r4  r0   r5   r   r   r=   )r?   r6   r7   r   r   est_2rB   rB   rC   check_warm_start_clearR  s    
r^  c             C   s   t |  d S )N)r^  )r?   rB   rB   rC   test_warm_start_clearc  s    r_  c          	   C   s^   t t }}t|  }|dddd}||| |jdd tt ||| W d Q R X d S )NrO   r&   T)r2   r   rW  r   )r2   )r3  r4  r0   r5   r   r~   r   r   )r?   r6   r7   r   r   rB   rB   rC   %check_warm_start_smaller_n_estimatorsh  s    
r`  c             C   s   t |  d S )N)r`  )r?   rB   rB   rC   $test_warm_start_smaller_n_estimatorss  s    ra  c          	   C   s   t t }}t|  }|ddddd}||| |ddddd}||| |jdd d}tjt|d	 ||| W d Q R X t|	||	| d S )
NrO   r(   Tr&   )r2   r   rW  r.   r'   )r.   zJWarm-start fitting without increasing n_estimators does not fit new trees.)r   )
r3  r4  r0   r5   r   r~   r   r   r   r=   )r?   r6   r7   r   r   r]  rX  rB   rB   rC   #check_warm_start_equal_n_estimatorsx  s    
rb  c             C   s   t |  d S )N)rb  )r?   rB   rB   rC   "test_warm_start_equal_n_estimators  s    rc  c             C   s   t t }}t|  }|ddddddd}||| |ddddddd}||| |jdddd ||| t|d	s|t|j|jkst|ddddddd}||| t|d	rt|jdd
 t|j|| |j|jkstd S )N   r(   Fr&   T)r2   r   rW  r.   r|   r   rO   )rW  r   r2   r   )r   )	r3  r4  r0   r5   r   r   r<   r   r   )r?   r6   r7   r   r   r]  Zest_3rB   rB   rC   check_warm_start_oob  sD    
re  c             C   s   t |  d S )N)re  )r?   rB   rB   rC   test_warm_start_oob  s    rf  rd  c             C   sX   t ddd}t| }dd dd |  D }||||}t|j| t|| d S )Nr   F)r.   r|   c             S   s   g | ]}|qS rB   rB   )r   chrB   rB   rC   r     s    z&test_dtype_convert.<locals>.<listcomp>ZABCDEFGHIJKLMNOPQRSTU)r   ri   eyer5   r8   r   r   )r   r   r6   r7   resultrB   rB   rC   test_dtype_convert  s    
rj  c                s   t t }}|jd }t|  }|ddddd}||| ||\jd d ks\tjd |ksnttt	dd |j
D  ||}xNt|jd D ]<  fd	dt|d d  f D }t|tj|d
 qW d S )Nr   rO   r&   F)r2   r   rW  r.   r%   c             S   s   g | ]}|j jqS rB   )r   
node_count)r   erB   rB   rC   r     s    z'check_decision_path.<locals>.<listcomp>c                s$   g | ]\}}|  | f qS rB   rB   )r   r   r   )est_id	indicatorn_nodes_ptrrB   rC   r     s   )r>   )r3  r4  r>   r0   r5   Zdecision_pathr<   r   ri   diffr   r=   r   	enumerater   r   )r?   r6   r7   r*   r   r   leavesZleave_indicatorrB   )rm  rn  ro  rC   check_decision_path  s    


rs  c             C   s   t |  d S )N)rs  )r?   rB   rB   rC   test_decision_path  s    rt  c              C   sd   t jddd\} }ttttg}x@|D ]8}|dd}|| | x|jD ]}|jdksFt	qFW q$W d S )Nr   r&   )r*   r.   g?)min_impurity_decrease)
r   make_hastie_10_2r   r   r   r   r5   r   ru  r<   )r6   r7   Zall_estimators	Estimatorr   r   rB   rB   rC   test_min_impurity_decrease  s    

rx  c           	   C   s   t dd} td}dddg}d}tjt|d | || W d Q R X d	d	d	g}d
}tjt|d | || W d Q R X d S )Nrc   )rF   )r(   r(   r%   r&   r(   zNSome value\(s\) of y are negative which is not allowed for Poisson regression.)r   r   zLSum of y is not strictly positive which is necessary for Poisson regression.)r   ri   r   r~   r   r   r5   )r   r6   r7   r   rB   rB   rC   test_poisson_y_positive_check  s    



ry  c                   s(   e Zd Z fddZ fddZ  ZS )	MyBackendc                s   d| _ t j|| d S )Nr   )r   super__init__)selfargskwargs)r   rB   rC   r|    s    zMyBackend.__init__c                s   |  j d7  _ t  S )Nr&   )r   r{  
start_call)r}  )r   rB   rC   r  "  s    zMyBackend.start_call)__name__
__module____qualname__r|  r  __classcell__rB   rB   )r   rC   rz    s   rz  testingz0.12z'tests not yet supported in joblib <0.12)reasonc           	   C   sv   t ddd} td\}}| tt W d Q R X |jdks@ttd\}}| t W d Q R X |jdksrtd S )Nr)   r'   )r2   r   r  r   )	r   joblibZparallel_backendr5   r6   r7   r   r<   r   )rA   bar   _rB   rB   rC   test_backend_respected*  s    r  c              C   sH   t ddddd\} }tdddd| |}tjd|j d	d
sDtd S )Nrd  r(   r&   )r*   r,   r.   r   rO   r[      )re   r.   r2   gHz>)Zabs_tol)r   r   r5   mathiscloser   r}   r<   )r6   r7   rA   rB   rB   rC   #test_forest_feature_importances_sum>  s    r  c              C   sB   t d} t d}tdd| |}t|jt jdt jd d S )N)r)   r)   )r)   r)   )r2   )r   )ri   r   r   r   r5   r   r   float64)r6   r7   ZgbrrB   rB   rC   *test_forest_degenerate_feature_importancesH  s    

r  c          	   C   s>   t |  ddd}d}tjt|d |tt W d Q R X d S )NFg      ?)r|   max_sampleszl`max_sample` cannot be set if `bootstrap=False`. Either switch to `bootstrap=True` or set `max_sample=None`.)r   )r1   r~   r   r   r5   r6   r7   )r?   r   r   rB   rB   rC   test_max_samples_bootstrapP  s    r  zmax_samples, exc_type, exc_msgg    eAz>`max_samples` must be in range 1 to 6 but got value 1000000000g       @z=`max_samples` must be in range \(0.0, 1.0\] but got value 2.0g        z=`max_samples` must be in range \(0.0, 1.0\] but got value 0.0z=`max_samples` must be in range \(0.0, 1.0\] but got value nanz=`max_samples` must be in range \(0.0, 1.0\] but got value infzstr max_samples?!zD`max_samples` should be int or float, but got type '\<class 'str'\>'zN`max_samples` should be int or float, but got type '\<class 'numpy.ndarray'\>'c             C   s"   t | tr| d d ddS | S )Nr)   ]r&  )
isinstancestrreplace)xrB   rB   rC   <lambda>      r  )Zidsc          	   C   s:   t |  d|d}tj||d |tt W d Q R X d S )NT)r|   r  )r   )r1   r~   r   r5   r6   r7   )r?   r  exc_typeZexc_msgr   rB   rB   rC   test_max_samples_exceptions]  s    /r  c             C   s   t ttdddd\}}}}t|  dddd}||||}t|  dd dd}||||}t||}	t||}
|	t|
kst	d S )Ngffffff?g333333?r   )Z
train_sizerb   r.   Tg      ?)r|   r  r.   )
r   rR   rS   rQ   r5   r8   r"   r~   r   r<   )r?   ru   rv   rw   rx   
ms_1_modelZms_1_predictms_None_modelZms_None_predictZms_1_msZ
ms_None_msrB   rB   rC   $test_max_samples_boundary_regressors  s    

r  c       	      C   sr   t ttdtd\}}}}t|  dddd}||||}t|  dd dd}||||}tj|| d S )Nr   )r.   ZstratifyTg      ?)r|   r  r.   )	r   r   r   r4   r5   r   ri   r  r   )	r?   ru   rv   rw   r  r  Z
ms_1_probar  Zms_None_probarB   rB   rC   %test_max_samples_boundary_classifiers  s    r  c           	   C   sN   dddgg} t dddg}t }d}tjt|d || | W d Q R X d S )	Nr&   r'   r(   r   rO   rP   z3sparse multilabel-indicator for y is not supported.)r   )r   r   r~   r   r   r5   )r6   r7   r   msgrB   rB   rC   test_forest_y_sparse  s    r  ForestClassc       	      C   s   t jd}|dd}|ddk}| d|d d}| d|dd}||| ||| |jd j}|jd j}d}|j|jkst|d S )Nr&   i'  r'   r   )r2   r.   r  z=Tree without `max_samples` restriction should have more nodes)	ri   rj   rk   r#  r5   r   r   rk  r<   )	r  rq   r6   r7   est1est2Ztree1Ztree2r  rB   rB   rC   'test_little_tree_with_small_max_samples  s"    r  rw  c          	   C   sV   t ddgddgg}t ddg}|  ||}tjtdd |j W d Q R X d S )Nr&   r'   r(   r   r   z`n_features_` was deprecated)r   )ri   r   r5   r~   r   FutureWarningZn_features_)rw  r6   r7   r   rB   rB   rC   test_n_features_deprecation  s
    r  zold_criterion, new_criterion)ZmserW   )ZmaerX   c          	   C   sl   t | dd}tjtd|  dd |tt W d Q R X t |dd}|tt t|t|t d S )Nr   )rF   r.   zCriterion 'z' was deprecated)r   )	r   r~   r   r  r5   r6   r7   r   r8   )Zold_criterionZnew_criterionr  r  rB   rB   rC   test_criterion_deprecated  s    r  Forestc             C   sN   ddl m} tdd}|j\}}|||}t|  dd|d}|t| d S )Nr   )MSEr%   r&   r'   )r2   r   rF   )Zsklearn.tree._criterionr  rS   rO  r>   rQ   r5   rR   )r  r  r7   r*   Z	n_outputsZmse_criterionr   rB   rB   rC   -test_mse_criterion_object_segfault_smoke_test  s    

r  )r   )r   )r   )r   )r   )r[   )rd  )__doc__r   r  collectionsr   	itertoolsr   r   typingr   r   numpyri   Zscipy.sparser   r   r	   Zscipy.specialr
   r~   r  Znumpy.testingr   Zsklearn.dummyr   Zsklearn.metricsr   Zsklearn.utils._testingr   r   r   r   r   r   Zsklearn.utils.fixesr   Zsklearn.exceptionsr   Zsklearnr   Zsklearn.decompositionr   Zsklearn.datasetsr   Zsklearn.ensembler   r   r   r   r   Zsklearn.model_selectionr   r   Zsklearn.svmr    Zsklearn.utils.validationr!   r"   Zsklearn.tree._classesr#   r6   r7   r9   r:   r   r   Z	load_irisrG   rq   ZpermutationrI   r`   ZpermrH   Zmake_regressionrR   rS   rv  r3  r4  r   Zfloat32parallelZget_active_backendr   ZDEFAULT_JOBLIB_BACKENDr4   rQ   rC  dictr0   r  __annotations__updater   r1   rD   markZparametrizerE   rK   rN   rV   rZ   r{   r   r   r   r   r   r   r  chainr   r   r   r   r  r   r   r   r   r>   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r%  r2  r5  r6  r9  r:  r<  r=  rA  rB  rE  rG  rK  rL  rN  rP  rS  rT  rU  rV  rY  rZ  r[  r\  r^  r_  r`  ra  rb  rc  re  rf  rj  rs  rt  rx  ry  rz  Zregister_parallel_backendZskipif__version__r  r  r  r  r   r   naninfr   r   r  r  r  r  r  r  r  r  rB   rB   rB   rC   <module>   s  (




3&
m
()
386/ 
/!2

 		  