U
    ^»{jêâ  ã                   @   s
  U d Z ddlZddl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
mZmZ ddlmZ ddlZddlZddlZddlmZmZm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 ddlm Z  ddl!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z> ddl?m@Z@ ddgddgddgddgddgddggZAddddddgZBddgddgddggZCdddgZDejdddddddd�\ZEZFe G¡ ZHe@dƒZIeI JeHjKjL¡ZMeHjNeM eH_NeHjKeM eH_KejOdddd �\ZPZQejRd!dd"�\ZSZTeS UejV¡ZSejW X¡ d jYZZe"e$d#œZ[e#e%d$œZ\d%e&iZ]e^ƒ Z_ee`ef ead&< e_ be[¡ e_ be\¡ e_ be]¡ e[ c¡ Zdee`ef ead'< ed be\¡ d(d)„ Zeejf gd*e[¡d+d,„ ƒZhd-d.„ Ziejf gd*e[¡ejf gd/d0¡d1d2„ ƒƒZjd3d4„ Zkejf gd*e\¡ejf gd/d5¡d6d7„ ƒƒZld8d9„ Zmejf gd/d:¡d;d<„ ƒZnd=d>„ Zoejf gd*e\¡d?d@„ ƒZpdAdB„ Zqejf gd*e[¡dCdD„ ƒZrdEdF„ Zsejf gdGejtejVf¡ejf gdHe ue	e[dIdJgƒe	e\dKdLdMgƒ¡¡dNdO„ ƒƒZvdPdQ„ Zwejf gd*e_¡dRdS„ ƒZxejf gdTe[ y¡ ¡ejf gdUdVdWdXg¡ejf gdYejdZddd[��d˜ejd]dd^dd_��d˜eHjNeHjKd d d`fejzdZdd"��d˜g¡ejf gdbdcee+ddde�g¡dfdg„ ƒƒƒƒZ{ejf gdhe\ y¡ ¡ejf gdUdVdWdXg¡ejf gdiejOdddddj��d˜ejOdddddj��d˜g¡ejf gdbdce*g¡dmdn„ ƒƒƒƒZ|ejf gdoed y¡ ¡dpdq„ ƒZ}ejf gdoed y¡ ¡ejf gdreHjNeHjKdcddsœdtfeHjNeIj~ddueHjNjd dfdv�dcdcdsœdwfg¡dxdy„ ƒƒZ€ejf gdbdcdg¡dzd{„ ƒZ�d|d}„ Z‚ejf gd*e[¡d~d„ ƒZƒd€d�„ Z„ejf gd*ed¡d‚dƒ„ ƒZ…d„d…„ Z†ejf gd*ed¡d†d‡„ ƒZ‡dˆd‰„ Zˆejf gd*ed¡dŠd‹„ ƒZ‰ejf gd*e[¡dŒd�„ ƒZŠdŽd�„ Z‹ejf gd*e[¡d�d‘„ ƒZŒd’d“„ Z�d”d•„ ZŽe;d–d—„ ƒZ�d˜d™„ Z�dšd›„ Z‘dœd�„ Z’dždŸ„ Z“ejf gd*e_¡d d¡„ ƒZ”d¢d£„ Z•ejf gd*e_¡d¤d¥„ ƒZ–d¦d§„ Z—ejf gd*e_¡d¨d©„ ƒZ˜dªd«„ Z™ejf gd*e_¡d¬d­„ ƒZšd®d¯„ Z›ejf gd*e_¡ejf gd°eeef¡d±d²„ ƒƒZœd³d´„ Z�ejf gd*ed¡ejf gdGejtejVf¡dµd¶„ ƒƒZže;d·d¸„ ƒZŸejf gd*e_¡d¹dº„ ƒZ d»d¼„ Z¡ejf gd*e[¡d½d¾„ ƒZ¢d¿dÀ„ Z£ejf gd*e[¡dÁdÂ„ ƒZ¤dÃdÄ„ Z¥ejf gd*e[¡dÅdÆ„ ƒZ¦�ddÈdÉ„Z§ejf gd*e_¡dÊdË„ ƒZ¨dÌdÍ„ Z©ejf gd*e_¡dÎdÏ„ ƒZªdÐdÑ„ Z«ejf gd*e_¡dÒdÓ„ ƒZ¬dÔdÕ„ Z­ejf gd*e_¡dÖd×„ ƒZ®dØdÙ„ Z¯ejf gd*ed¡dÚdÛ„ ƒZ°ejf gd*ed¡dÜdÝ„ ƒZ±�ddßdà„Z²dádâ„ Z³ejf gd*ed¡dãdä„ ƒZ´dådæ„ Zµdçdè„ Z¶G dédê„ dêeZƒZ·e ¸dëe·¡ e<dìdí„ ƒZ¹dîdï„ Zºdðdñ„ Z»ejf gd*ed¡dòdó„ ƒZ¼ejf gd*ed¡dôdõ„ ƒZ½ejf gd*e\¡död÷„ ƒZ¾ejf gd*e[¡dødù„ ƒZ¿dúdû„ ZÀejf gdüe$e%g¡dýdþ„ ƒZÁejf gdÿe\¡�d �d„ ƒZÂ�d�d„ ZÃejf gd*e_¡�d�d„ ƒZÄ�d�d„ ZÅejf g�d�d	dg¡�d
�d„ ƒZÆdS (  z:
Testing for the forest module (sklearn.ensemble.forest).
é    N)Údefaultdict)Úpartial)ÚcombinationsÚproduct)ÚAnyÚDict)Úpatch)Ú
coo_matrixÚ
csc_matrixÚ
csr_matrix)Úcomb)Údatasets)Úmake_classification)ÚTruncatedSVD)ÚDummyRegressor)ÚExtraTreesClassifierÚExtraTreesRegressorÚRandomForestClassifierÚRandomForestRegressorÚRandomTreesEmbedding)ÚNotFittedError)Úexplained_variance_scoreÚf1_scoreÚmean_poisson_devianceÚmean_squared_error)ÚGridSearchCVÚcross_val_scoreÚtrain_test_split)Ú	LinearSVC)ÚSPARSE_SPLITTERS)Ú_convert_containerÚassert_almost_equalÚassert_array_almost_equalÚassert_array_equalÚignore_warningsÚskip_if_no_parallel)ÚParallel)Úcheck_random_stateéþÿÿÿéÿÿÿÿé   é   é   éô  é
   F)Ú	n_samplesÚ
n_featuresÚn_informativeZn_redundantZ
n_repeatedÚshuffleÚrandom_state©r/   r0   r3   é   ©r/   r3   )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sœt	‚dS )z&Check classification on a toy dataset.r.   r*   ©Ún_estimatorsr3   )r:   Úmax_featuresr3   N)ÚFOREST_CLASSIFIERSÚfitÚXÚyr#   ÚpredictÚTÚtrue_resultÚlenÚAssertionErrorÚapplyÚshaper:   )ÚnameÚForestClassifierÚclfZleaf_indices© rJ   úa/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/ensemble/tests/test_forest.pyÚcheck_classification_toyv   s    
rL   rG   c                 C   s   t | ƒ d S ©N)rL   ©rG   rJ   rJ   rK   Útest_classification_toy‰   s    rO   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s–td||f ƒ‚d S )	Nr.   r*   ©r:   Ú	criterionr3   çÍÌÌÌÌÌì?z'Failed with criterion %s and score = %fr+   ©r:   rQ   r;   r3   ç      à?)r<   r=   ÚirisÚdataÚtargetÚscorerD   )rG   rQ   rH   rI   rX   rJ   rJ   rK   Úcheck_iris_criterionŽ   s       ÿrY   rQ   )ÚginiÚlog_lossc                 C   s   t | |ƒ d S rM   )rY   ©rG   rQ   rJ   rJ   rK   Ú	test_irisŸ   s    r]   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s†td	||f ƒ‚d S )
Né   r*   rP   gÃõ(\�Âí?z:Failed with max_features=None, criterion %s and score = %fé   rS   gq=
×£pí?z7Failed with max_features=6, criterion %s and score = %f)ÚFOREST_REGRESSORSr=   ÚX_regÚy_regrX   rD   )rG   rQ   ÚForestRegressorÚregrX   rJ   rJ   rK   Úcheck_regression_criterion¥   s.    ÿþþ   ÿþre   )Úsquared_errorÚabsolute_errorÚfriedman_msec                 C   s   t | |ƒ d S rM   )re   r\   rJ   rJ   rK   Útest_regression¾   s    ri   c                  C   sF  t j d¡} d\}}}tj|| || d�}| jdd|d�t j|dd� }| jt  || ¡d	�}t	|||| d
�\}}}	}
t
ddd| d�}t
ddd| d�}| ||	¡ | ||	¡ tdd� ||	¡}||	df||
dffD ]l\}}}t|| |¡ƒ}t|t  | |¡dd¡ƒ}t|| |¡ƒ}|dk�r0||k �s0t‚|d| k sÔt‚qÔdS )zžTest that random forest with poisson criterion performs better than
    mse for a poisson target.

    There is a similar test for DecisionTreeRegressor.
    é*   ©r-   r-   r.   r4   r(   r+   ©ÚlowÚhighÚsizer   ©Zaxis©Zlam©Ú	test_sizer3   Úpoissonr.   Úsqrt)rQ   Úmin_samples_leafr;   r3   rf   Úmean)ZstrategyÚtrainÚtestg�íµ ÷Æ°>Ngš™™™™™é?)ÚnpÚrandomÚRandomStater   Úmake_low_rank_matrixÚuniformÚmaxrt   Úexpr   r   r=   r   r   r@   ZcliprD   )ÚrngÚn_trainÚn_testr0   r>   Úcoefr?   ÚX_trainÚX_testÚy_trainÚy_testZ
forest_poiZ
forest_mseÚdummyZ	data_nameZ
metric_poiZ
metric_mseZmetric_dummyrJ   rJ   rK   Útest_poisson_vs_mseÆ   sP    
  ÿ   ÿ   ÿü ÿ
rŠ   )rt   rf   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sžt‚dS )z9 "Test that sum(y_pred)==sum(y_true) on the training set.rj   rk   r4   r(   r+   rl   r   rp   rq   r.   F)rQ   r:   Ú	bootstrapr3   N)rz   r{   r|   r   r}   r~   r   rt   r€   r   r=   Úsumr@   ÚpytestÚapproxrD   )	rQ   r�   r‚   rƒ   r0   r>   r„   r?   rd   rJ   rJ   rK   Ú#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   ©r3   Úclasses_Ú
n_classes_r*   r+   r,   é   r^   r_   )r`   ÚhasattrrD   r=   )rG   ÚrrJ   rJ   rK   Úcheck_regressor_attributes  s     r–   c                 C   s   t | ƒ d S rM   )r–   rN   rJ   rJ   rK   Ú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 5 Q R X d S )NÚignore©Údivider.   r*   )r:   r3   r;   Ú	max_depthrp   r   )r<   rz   Úerrstater=   rU   rV   rW   r"   rŒ   Úpredict_probaÚonesrF   r€   Úpredict_log_proba)rG   rH   rI   rJ   rJ   rK   Úcheck_probability  s"       ÿ ÿ
 ÿr    c                 C   s   t | ƒ d S rM   )r    rN   rJ   rJ   rK   Útest_probability/  s    r¡   c                 C   sH  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¡sŠt	‚|j}|jdd	� |j}
t||
ƒ tdƒ d
dt|ƒ¡}|dd|d�}|j|||d� |j}t 
|dk¡søt	‚dD ]F}|dd|d�}|j|||| d� |j}t || ¡ ¡ |k süt	‚qüd S )NF©Úcopyr.   r   rP   çš™™™™™¹?r,   r+   ©Ún_jobsr*   )r:   r3   rQ   ©Úsample_weightç        )rT   éd   )ÚX_largeÚastypeÚy_larger7   r=   Úfeature_importances_rz   rŒ   rF   rD   ÚallÚ
set_paramsr"   r'   ÚrandintrC   Úabsrw   )rG   rQ   ÚdtypeÚ	tolerancer>   r?   ÚForestEstimatorÚestÚimportancesZn_importantZimportances_parallelr¨   ÚscaleZimportances_bisrJ   rJ   rK   Úcheck_importances4  s0    
r¹   r³   zname, criterionrZ   r[   rf   rh   rg   c                 C   s*   d}|t kr|dkrd}t||| |ƒ d S )Nç{®Gáz„?rg   gš™™™™™©?)r`   r¹   )r³   rG   rQ   r´   rJ   rJ   rK   Útest_importancesZ  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  |¡}t|ƒD ]}| |||ƒ||< �q(tddddd� ||¡}tdd„ |j	D ƒƒ|j
 }tˆ|ƒt|ƒƒ t  || ¡ ¡ dk �s t‚d S )Nc                 S   s*   | dk s| |krdS t t|ƒt| ƒdd�S )Nr   T)Úexact)r   Úint)ÚkÚnrJ   rJ   rK   Úbinomialn  s    z-test_importances_asymptotic.<locals>.binomialc                 S   sF   t | ƒ}d}t | ¡D ]*}d| | }|dkr||t |¡ 8 }q|S )Nr©   ç      ð?r   )rC   rz   ÚbincountÚlog2)Zsamplesr/   ÚentropyÚcountÚprJ   rJ   rK   rÄ   q  s    z,test_importances_asymptotic.<locals>.entropyc              
      sf  ˆj \}}tt|ƒƒ}| | ¡ ‡fdd„t|ƒD ƒ‰d}t|ƒD �]}dˆ||ƒ||   }t||ƒD ]ö‰ t‡ ‡fdd„t|ƒD ƒŽ D ]Ô}	tj|td�}
t|ƒD ]$}|
ˆd d …ˆ | f |	| kM }
q¢ˆ|
d d …f ||
  }}t	|ƒ‰ˆdkrˆg }ˆ|  D ](}|d d …| f |k}| 
|| ¡ � qþ||dˆ |  ˆ|ƒt‡‡fdd„|D ƒƒ  7 }qˆqhqB|S )	Nc                    s"   g | ]}t  ˆ d d …|f ¡‘qS rM   )rz   Úunique)Ú.0Úi)r>   rJ   rK   Ú
<listcomp>�  s     zGtest_importances_asymptotic.<locals>.mdi_importance.<locals>.<listcomp>r©   rÁ   c                    s   g | ]}ˆˆ |  ‘qS rJ   rJ   )rÈ   Új)ÚBÚvaluesrJ   rK   rÊ   Œ  s     ©r³   r   c                    s    g | ]}ˆ |ƒt |ƒ ˆ ‘qS rJ   )rC   )rÈ   Úc)rÄ   Ún_samples_brJ   rK   rÊ   ¢  s   ÿ)rF   ÚlistÚrangeÚpopr   r   rz   rž   ÚboolrC   ÚappendrŒ   )ZX_mr>   r?   r/   r0   ÚfeaturesÚimpr¾   r„   ÚbZmask_brË   ZX_Zy_ÚchildrenÚxiZmask_xi©rÀ   rÄ   )rÌ   r>   rÐ   rÍ   rK   Úmdi_importance|  sB    

 "
ÿþÿÿýÿ
z3test_importances_asymptotic.<locals>.mdi_importancer   r*   r+   r,   r“   r^   r_   é   é   é	   rÎ   r-   r[   )r:   r;   rQ   r3   c                 s   s   | ]}|j jd d�V  qdS )F)Ú	normalizeN)Útree_Zcompute_feature_importances©rÈ   ÚtreerJ   rJ   rK   Ú	<genexpr>Ê  s   ÿz.test_importances_asymptotic.<locals>.<genexpr>rº   )rz   ÚarrayrÔ   rF   ÚzerosrÒ   r   r=   rŒ   Úestimators_r:   r!   r²   rw   rD   )	rÜ   rV   r>   r?   r0   Ztrue_importancesrÉ   rI   r·   rJ   rÛ   rK   Útest_importances_asymptotici  sL    0öÿ0

   ÿ þþüÿ	rè   c              	   C   s8   d  | ¡}tjt|d�� tt|  ƒ dƒ W 5 Q R X d S )NzfThis {} instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.©Úmatchr®   )Úformatr�   Úraisesr   Úgetattrr7   )rG   Úerr_msgrJ   rJ   rK   Ú!test_unfitted_feature_importancesÖ  s    ÿÿrï   rH   ÚX_typerå   Z
sparse_csrZ
sparse_csczX, y, lower_bound_accuracyi,  )r/   Ú	n_classesr3   rR   éè  r_   )r/   rñ   r1   r3   çÍÌÌÌÌÌä?ç
×£p=
Ç?Ú	oob_scoreTÚmicro)Zaveragec                 C   s2  t ||d�}t||ddd�\}}}}	| dd|dd�}
t|
dƒrBt‚t|
d	ƒrPt‚|
 ||¡ t|ƒrv||	|
 |¡ƒ}n|
 ||	¡}|
j|ks�t‚t	||
j ƒd
ks¦t‚t|
dƒs´t‚t|
dƒrÂt‚t|
d	ƒsÐt‚|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.©Zconstructor_namerT   r   rr   é(   T©r:   r‹   rõ   r3   Ú
oob_score_Úoob_decision_function_r¤   Úoob_prediction_r*   N)r    r   r”   rD   r=   Úcallabler@   rX   rú   r²   ÚndimrF   rC   Úsetrû   )rH   r>   r?   rð   Zlower_bound_accuracyrõ   r…   r†   r‡   rˆ   Ú
classifierÚ
test_scoreÚexpected_shaperJ   rJ   rK   Útest_forest_classifier_oobà  s8    üü
*r  rc   zX, y, lower_bound_r2)r/   r0   Ú	n_targetsr3   çffffffæ?çš™™™™™á?c                 C   s  t ||d�}t||ddd�\}}}}	| dd|dd�}
t|
dƒrBt‚t|
d	ƒrPt‚|
 ||¡ t|ƒrv||	|
 |¡ƒ}n|
 ||	¡}|
j|ks�t‚t	||
j ƒd
ks¦t‚t|
dƒs´t‚t|
d	ƒsÂt‚t|
dƒrÐt‚|j
dkrè|jd f}n|jd |j
f}|
jj|k�s
t‚dS )z\Check that forest-based regressor provide an OOB score close to the
    score on a test set.r÷   rT   r   rr   é2   Trù   rú   rü   r¤   rû   r*   N)r    r   r”   rD   r=   rý   r@   rX   rú   r²   rþ   rF   rü   )rc   r>   r?   rð   Zlower_bound_r2rõ   r…   r†   r‡   rˆ   Z	regressorr  r  rJ   rJ   rK   Útest_forest_regressor_oob$  s8    üü
r  rµ   c              	   C   s>   | ddddd�}t jtdd�� | tjtj¡ W 5 Q R X dS )zfCheck that a warning is raised when not enough estimator and the OOB
    estimates will be inaccurate.r*   Tr   )r:   rõ   r‹   r3   z"Some inputs do not have OOB scoresré   N)r�   ÚwarnsÚUserWarningr=   rU   rV   rW   )rµ   Ú	estimatorrJ   rJ   rK   Útest_forest_oob_warning`  s    ür  zX, y, params, err_msg)rõ   r‹   z6Out of bag estimation only available if bootstrap=Truer^   rl   z:The type of target cannot be used to compute OOB estimatesc              	   C   s4   | f |Ž}t jt|d�� | ||¡ W 5 Q R X d S )Nré   )r�   rì   Ú
ValueErrorr=   )rµ   r>   r?   Úparamsrî   r  rJ   rJ   rK   Útest_forest_oob_errorn  s    
r  c              	   C   sP   t jtdd�� t| d� W 5 Q R X t jtdd�� tƒ  tt¡ W 5 Q R X d S )Nz"got an unexpected keyword argumentré   ©rõ   zOOB score not supported)r�   rì   Ú	TypeErrorr   ÚNotImplementedErrorÚ_set_oob_score_and_attributesr>   r?   r  rJ   rJ   rK   Ú+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+   )r:   r›   )r<   r   r=   rU   rV   rW   )rG   ÚforestrI   rJ   rJ   rK   Úcheck_gridsearchŽ  s    
r  c                 C   s   t | ƒ d S rM   )r  rN   rJ   rJ   rK   Ú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   ©r:   r¦   r3   r*   r¥   r+   N)r7   r=   rC   rD   r°   r@   r"   )rG   r>   r?   rµ   r  Úy1Úy2rJ   rJ   rK   Úcheck_parallelš  s    

r  c                 C   s6   | t krtj}tj}n| tkr&t}t}t| ||ƒ d S rM   )r<   rU   rV   rW   r`   ra   rb   r  ©rG   r>   r?   rJ   rJ   rK   Útest_parallel©  s    r  c           	      C   sl   t |  }|dd�}| ||¡ | ||¡}t |¡}t |¡}t|ƒ|jksPt‚| ||¡}||ksht‚d S )Nr   r�   )	r7   r=   rX   ÚpickleÚdumpsÚloadsÚtypeÚ	__class__rD   )	rG   r>   r?   rµ   ÚobjrX   Zpickle_objectÚobj2Zscore2rJ   rJ   rK   Ú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+   )r<   rU   rV   rW   r`   ra   rb   r&  r  rJ   rJ   rK   Ú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�r¦t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�sˆt	‚|d j
dk�sœt	‚W 5 Q R X d S )Nr(   r)   r*   r+   r   r,   F©r3   r‹   r˜   r™   ©r“   r+   ©r“   r“   )r7   r=   r@   r"   r<   rz   rœ   r�   rC   rD   rF   rŸ   ©	rG   r…   r‡   r†   rˆ   r¶   Zy_predZprobaZ	log_probarJ   rJ   rK   Úcheck_multioutputÐ  sR    ôô



r,  c                 C   s   t | ƒ d S rM   )r,  rN   rJ   rJ   rK   Ú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�s’t‚W 5 Q R X d S )Nr(   r)   r*   r+   ÚredÚblueÚgreenÚpurpleÚyellowr   Fr(  r˜   r™   r)  r*  )r7   r=   r@   r#   rz   rœ   r�   rC   rD   rF   rŸ   r+  rJ   rJ   rK   Útest_multioutput_string  sX    ôôü


r3  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(   )r<   r=   r>   r?   r’   rD   r#   r‘   rz   Úvstackrå   rA   )rG   rH   rI   Ú_yrJ   rJ   rK   Úcheck_classes_shape@  s    r6  c                 C   s   t | ƒ d S rM   )r6  rN   rJ   rJ   rK   Útest_classes_shapeR  s    r7  c                  C   s<   t ddd�} tjdd�\}}|  |¡}t|ƒtjks8t‚d S )Nr.   F)r:   Úsparse_outputrT   ©Úfactor)r   r   Úmake_circlesÚfit_transformr"  rz   ZndarrayrD   )Úhasherr>   r?   ÚX_transformedrJ   rJ   rK   Útest_random_trees_dense_typeW  s    
r?  c                  C   sR   t dddd�} t dddd�}tjdd�\}}|  |¡}| |¡}t| ¡ |ƒ d S )Nr.   Fr   )r:   r8  r3   TrT   r9  )r   r   r;  r<  r#   Útoarray)Zhasher_denseZhasher_sparser>   r?   ZX_transformed_denseÚX_transformed_sparserJ   rJ   rK   Útest_random_trees_dense_equald  s      ÿ  ÿ

rB  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s¶t	‚d S )Né   r*   r9   rT   r9  r   rp   r+   )Zn_componentsrÁ   )r   r   r;  r<  r#   r=   Ú	transformr@  rF   rD   rŒ   r:   r   r   rX   )r=  r>   r?   r>  ZsvdZ	X_reducedZ
linear_clfrJ   rJ   rK   Útest_random_hasherx  s    


rE  c                  C   sJ   t jdd�\} }tddd�}| | ¡}| t| ƒ¡}t| ¡ | ¡ ƒ d S )Nr   r�   rC  r*   r9   )r   Úmake_multilabel_classificationr   r<  r
   r#   r@  )r>   r?   r=  r>  rA  rJ   rJ   rK   Útest_random_hasher_sparse_data�  s
    
rG  c                     s†   t dƒ} d\}}|  ||¡‰|  dd|¡‰‡‡fdd„dD ƒ}|  ||¡‰ ‡ fdd„|D ƒ}t||d	d … ƒD ]\}}t||ƒ qnd S )
Né!0  )éP   rC  r   r+   c                    s"   g | ]}t d |dd� ˆ ˆ¡‘qS )r5   i90  r  )r   r=   )rÈ   r¦   )r…   r‡   rJ   rK   rÊ   ž  s
   ý ÿz'test_parallel_train.<locals>.<listcomp>)r*   r+   r,   rÞ   é   é    c                    s   g | ]}|  ˆ ¡‘qS rJ   )r�   )rÈ   rI   )r†   rJ   rK   rÊ   ¦  s     r*   )r'   Úrandnr±   Úzipr"   )r�   r/   r0   ZclfsZprobasZproba1Zproba2rJ   )r†   r…   r‡   rK   Útest_parallel_train˜  s    ürN  c                     sö  t dƒ} | jdddd�}|  d¡}d‰ tˆ dd	� ||¡}ttƒ}|jD ]6}d
 dd„ t	|j
j|j
jƒD ƒ¡}||  d7  < qHt‡ fdd„| ¡ D ƒƒ}t|ƒdksªt‚d|d d ks¾t‚d|d d ksÒt‚d|d d ksæt‚d|d d ksút‚|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ƒ}|jD ]8}d
 dd„ t	|j
j|j
jƒD ƒ¡}||  d7  < �q”dd„ | ¡ D ƒ}t|ƒdk�sòt‚d S )NrH  r   r“   )rò   r*   )ro   rò   r-   rj   r9   Ú c                 s   s.   | ]&\}}|d kr"d|t |ƒf ndV  qdS ©r   z%d,%d/ú-N©r½   ©rÈ   ÚfÚtrJ   rJ   rK   rä   ·  s   ÿz$test_distribution.<locals>.<genexpr>r*   c                    s    g | ]\}}d | ˆ  |f‘qS )rÁ   rJ   ©rÈ   rã   rÅ   ©Zn_treesrJ   rK   rÊ   ¾  s     z%test_distribution.<locals>.<listcomp>r^   gš™™™™™É?r+   r,   ç333333Ó?z0,1/0,0/--0,2/--)rò   r+   )r;   r3   c                 s   s.   | ]&\}}|d kr"d|t |ƒf ndV  qdS rP  rR  rS  rJ   rJ   rK   rä   Ö  s   ÿc                 S   s   g | ]\}}||f‘qS rJ   rJ   rV  rJ   rJ   rK   rÊ   Ý  s     rÞ   )r'   r±   Úrandr   r=   r   r½   rç   ÚjoinrM  rá   ÚfeatureÚ	thresholdÚsortedÚitemsrC   rD   rz   Úemptyr{   )r�   r>   r?   rd   Zuniquesrã   rJ   rW  rK   Útest_distribution«  s@    


þ



þr`  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_nodesr:   r3   )r›   r:   r3   )Úhastie_XÚhastie_yr7   r=   rç   Z	get_depthrD   ©rG   r>   r?   rµ   r¶   rJ   rJ   rK   Úcheck_max_leaf_nodes_max_depthá  s    
   ÿ þrd  c                 C   s   t | ƒ d S rM   )rd  rN   rJ   rJ   rK   Útest_max_leaf_nodes_max_depthï  s    re  c                 C   sâ   t t }}t|  }|dddd�}| ||¡ |jd jjdk}|jd jj| }t 	|¡t
|ƒd d ksxtd | ¡ƒ‚|dddd�}| ||¡ |jd jjdk}|jd jj| }t 	|¡t
|ƒd d ksÞtd | ¡ƒ‚d S )Nr.   r*   r   )Zmin_samples_splitr:   r3   r)   rT   úFailed with {0})ra  rb  r7   r=   rç   rá   Zchildren_leftZn_node_samplesrz   ÚminrC   rD   rë   )rG   r>   r?   rµ   r¶   Znode_idxZnode_samplesrJ   rJ   rK   Úcheck_min_samples_splitô  s    
(rh  c                 C   s   t | ƒ d S rM   )rh  rN   rJ   rJ   rK   Útest_min_samples_split  s    ri  c                 C   sÞ   t t }}t|  }|dddd�}| ||¡ |jd j |¡}t |¡}||dk }t 	|¡dkspt
d | ¡ƒ‚|dddd�}| ||¡ |jd j |¡}t |¡}||dk }t 	|¡t|ƒd d ksÚt
d | ¡ƒ‚d S )Nr^   r*   r   )rv   r:   r3   r“   rf  g      Ð?)ra  rb  r7   r=   rç   rá   rE   rz   rÂ   rg  rD   rë   rC   )rG   r>   r?   rµ   r¶   ÚoutZnode_countsZ
leaf_countrJ   rJ   rK   Úcheck_min_samples_leaf  s    


rk  c                 C   s   t | ƒ d S rM   )rk  rN   rJ   rJ   rK   Útest_min_samples_leaf#  s    rl  c                 C   sÎ   t t }}t|  }tj d¡}| |jd ¡}t |¡}t 	ddd¡D ]‚}||ddd�}d| krfd|_
|j|||d� |jd j |¡}	tj|	|d	�}
|
|
dk }t |¡||j ksFtd
 | |j¡ƒ‚qFd S )Nr   rT   r_   r*   )Úmin_weight_fraction_leafr:   r3   ZRandomForestFr§   )Úweightsz,Failed with {0} min_weight_fraction_leaf={1})ra  rb  r7   rz   r{   r|   rY  rF   rŒ   Zlinspacer‹   r=   rç   rá   rE   rÂ   rg  rm  rD   rë   )rG   r>   r?   rµ   r�   rn  Ztotal_weightÚfracr¶   rj  Znode_weightsZleaf_weightsrJ   rJ   rK   Úcheck_min_weight_fraction_leaf(  s0    

  ÿÿ ÿþrp  c                 C   s   t | ƒ d S rM   )rp  rN   rJ   rJ   rK   Útest_min_weight_fraction_leafG  s    rq  c                 C   sö   t |  }|ddd� ||¡}|ddd� ||¡}t| |¡| |¡ƒ | tksV| tkrzt| |¡| |¡ƒ t|j|jƒ | tkr®t| |¡| |¡ƒ t| 	|¡| 	|¡ƒ | t
kròt| |¡ ¡ | |¡ ¡ ƒ t| |¡ ¡ | |¡ ¡ ƒ d S )Nr   r+   )r3   r›   )r7   r=   r"   rE   r<   r`   r@   r®   r�   rŸ   ÚFOREST_TRANSFORMERSrD  r@  r<  )rG   r>   ZX_sparser?   rµ   ZdenseÚsparserJ   rJ   rK   Úcheck_sparse_inputL  s2     ÿ ÿ ÿ ÿrt  Úsparse_matrixc                 C   s(   t jddd�\}}t| |||ƒ|ƒ d S )Nr   r  )r3   r/   )r   rF  rt  )rG   ru  r>   r?   rJ   rJ   rK   Útest_sparse_inputi  s    rv  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   Fr(  rÎ   ÚC)Úorderr³   ÚFr,   )r7   rz   ZasarrayrU   rV   rW   r"   r=   r@   Zascontiguousarrayr  Zsplitterr   r   r
   r	   )rG   r³   r¶   r>   r?   rJ   rJ   rK   Úcheck_memory_layoutq  s4    rz  c                 C   s   t | |ƒ d S rM   )rz  )rG   r³   rJ   rJ   rK   Útest_memory_layout   s    r{  c              	   C   s|   t |  }t t¡� |ddd� ||¡ W 5 Q R X |dd�}| ||¡ | tksX| tkrxt t¡� | |¡ W 5 Q R X d S )Nr*   r   r9   r�   )r7   r�   rì   r  r=   r<   r`   r@   )rG   r>   ÚX_2dr?   rµ   r¶   rJ   rJ   rK   Úcheck_1d_input¦  s    
r}  c              	   C   sT   t jd d …df }t jd d …df  d¡}t j}tƒ � t| |||ƒ W 5 Q R X d S )Nr   ©r)   r*   )rU   rV   ÚreshaperW   r$   r}  )rG   r>   r|  r?   rJ   rJ   rK   Útest_1d_input´  s
    r€  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_weightr3   g       @rÁ   )r   r*   r+   r*   rª   g      Y@r+   )r<   r=   rU   rV   rW   r!   r®   rz   r4  rA   rž   rF   )	rG   rH   Zclf1Zclf2Z
iris_multiZclf3Zclf4r¨   rƒ  rJ   rJ   rK   Úcheck_class_weights¾  s@    



ýú

r„  c                 C   s   t | ƒ d S rM   )r„  rN   rJ   rJ   rK   Útest_class_weightsí  s    r…  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+   r�  r   r‚  rT   rÁ   r~  )r(   r+   Úbalanced_subsample)r<   rz   r4  r?   rå   rA   r=   r>   )rG   rH   r5  rI   rJ   rJ   rK   Ú6check_class_weight_balanced_and_bootstrap_multi_outputò  s     ÿr‡  c                 C   s   t | ƒ d S rM   )r‡  rN   rJ   rJ   rK   Ú5test_class_weight_balanced_and_bootstrap_multi_output  s    rˆ  c              	   C   s    t |  }t tt t¡d f¡j}|dddd�}| tt¡ d}tj	t
|d�� | t|¡ W 5 Q R X |dd	d
œgdd�}t t¡� | t|¡ W 5 Q R X d S )Nr+   r�  Tr   )rƒ  Ú
warm_startr3   úJWarm-start fitting without increasing n_estimators does not fit new trees.ré   rT   rÁ   r~  r‚  )r<   rz   r4  r?   rå   rA   r=   r>   r�   r	  r
  rì   r  )rG   rH   r5  rI   Úwarn_msgrJ   rJ   rK   Úcheck_class_weight_errors  s    ÿrŒ  c                 C   s   t | ƒ d S rM   )rŒ  rN   rJ   rJ   rK   Útest_class_weight_errors  s    r�  rj   c                 C   sÆ   t t }}t|  }d }dD ]D}|d kr6|||dd�}n|j|d� | ||¡ t|ƒ|kst‚q|d|dd�}| ||¡ tdd„ |D ƒƒtd	d„ |D ƒƒks¢t‚t| 	|¡| 	|¡d
 
| ¡d� d S )N)r^   r.   T)r:   r3   r‰  ©r:   r.   Fc                 S   s   g | ]
}|j ‘qS rJ   r�   râ   rJ   rJ   rK   rÊ   5  s     z$check_warm_start.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS rJ   r�   râ   rJ   rJ   rK   rÊ   6  s     rf  )rî   )ra  rb  r7   r°   r=   rC   rD   rÿ   r#   rE   rë   )rG   r3   r>   r?   rµ   Zest_wsr:   Z	est_no_wsrJ   rJ   rK   Úcheck_warm_start   s6    
  ÿ  ÿÿ
  ÿr�  c                 C   s   t | ƒ d S rM   )r�  rN   rJ   rJ   rK   Útest_warm_start>  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 )Nr^   r*   F©r:   r›   r‰  r3   Tr+   )r‰  r3   )ra  rb  r7   r=   r°   r"   rE   )rG   r>   r?   rµ   r¶   Úest_2rJ   rJ   rK   Úcheck_warm_start_clearC  s    
   ÿr“  c                 C   s   t | ƒ d S rM   )r“  rN   rJ   rJ   rK   Útest_warm_start_clearT  s    r”  c              	   C   s^   t t }}t|  }|dddd�}| ||¡ |jdd� t t¡� | ||¡ W 5 Q R X d S )Nr^   r*   T)r:   r›   r‰  r“   rŽ  )ra  rb  r7   r=   r°   r�   rì   r  rc  rJ   rJ   rK   Ú%check_warm_start_smaller_n_estimatorsY  s    
r•  c                 C   s   t | ƒ d S rM   )r•  rN   rJ   rJ   rK   Ú$test_warm_start_smaller_n_estimatorsd  s    r–  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 5 Q R X t| 	|¡| 	|¡ƒ d S )
Nr^   r,   Tr*   r‘  r+   r�   rŠ  ré   )
ra  rb  r7   r=   r°   r�   r	  r
  r#   rE   )rG   r>   r?   rµ   r¶   r’  r‹  rJ   rJ   rK   Ú#check_warm_start_equal_n_estimatorsi  s"    
   ÿÿr—  c                 C   s   t | ƒ d S rM   )r—  rN   rJ   rJ   rK   Ú"test_warm_start_equal_n_estimators‚  s    r˜  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sŒt‚|ddddddd�}| ||¡ t|d	ƒrºt‚|jdd
� t|jƒ||ƒ |j|jksæt‚d S )Né   r,   Fr*   T)r:   r›   r‰  r3   r‹   rõ   r^   )r‰  rõ   r:   rú   r  )	ra  rb  r7   r=   r°   r”   rD   rú   r$   )rG   r>   r?   rµ   r¶   r’  Zest_3rJ   rJ   rK   Úcheck_warm_start_oob‡  sJ    
úúúrš  c                 C   s   t | ƒ d S rM   )rš  rN   rJ   rJ   rK   Útest_warm_start_oob¹  s    r›  c              
   C   s~   t t }}t|  }|ddddd�}tj|d|jd��@}| ||¡ tjt	dd�� | ||¡ W 5 Q R X | 
¡  W 5 Q R X d S )Nr.   T)r:   r‰  r‹   rõ   r  )Úwrapsz%Warm-start fitting without increasingré   )ra  rb  r7   r   Úobjectr  r=   r�   r	  r
  Zassert_called_once)rG   r>   r?   rµ   r¶   Z!mock_set_oob_score_and_attributesrJ   rJ   rK   Útest_oob_not_computed_twice¾  s$    
   ÿ  ÿrž  r™  c                 C   sX   t ddd�}t | ¡}dd„ dd | … D ƒ}| ||¡ |¡}t|j|ƒ t||ƒ d S )Nr   Fr(  c                 S   s   g | ]}|‘qS rJ   rJ   )rÈ   ÚchrJ   rJ   rK   rÊ   ×  s     z&test_dtype_convert.<locals>.<listcomp>ZABCDEFGHIJKLMNOPQRSTU)r   rz   Úeyer=   r@   r#   r‘   )rñ   r   r>   r?   ÚresultrJ   rJ   rK   Útest_dtype_convertÓ  s    
r¢  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 ƒƒ | |¡}t|jd ƒD ]<‰ ‡ ‡‡fd	d„t|d d …ˆ f ƒD ƒ}t|tj|d
�ƒ q¢d S )Nr   r^   r*   Fr‘  r)   c                 S   s   g | ]}|j j‘qS rJ   )rá   Ú
node_count)rÈ   ÚerJ   rJ   rK   rÊ   é  s     z'check_decision_path.<locals>.<listcomp>c                    s$   g | ]\}}ˆ|ˆˆ  | f ‘qS rJ   rJ   )rÈ   rÉ   rË   ©Zest_idZ	indicatorZn_nodes_ptrrJ   rK   rÊ   ï  s   ÿ)rF   )ra  rb  rF   r7   r=   Zdecision_pathrD   r#   rz   Údiffrç   rE   rÒ   Ú	enumerater"   rž   )rG   r>   r?   r/   rµ   r¶   ÚleavesZleave_indicatorrJ   r¥  rK   Úcheck_decision_pathÞ  s$    

 ÿ
þr©  c                 C   s   t | ƒ d S rM   )r©  rN   rJ   rJ   rK   Útest_decision_pathö  s    rª  c                  C   s\   t jddd�\} }ttttg}|D ]4}|dd�}| | |¡ |jD ]}|jdksBt	‚qBq"d S )Nrª   r*   r6   r¤   )Úmin_impurity_decrease)
r   Úmake_hastie_10_2r   r   r   r   r=   rç   r«  rD   )r>   r?   Zall_estimatorsZ	Estimatorr¶   rã   rJ   rJ   rK   Útest_min_impurity_decreaseû  s    ü

r­  c               	   C   s€   t dd�} t d¡}dddg}d}tjt|d�� |  ||¡ W 5 Q R X d	d	d	g}d
}tjt|d�� |  ||¡ W 5 Q R X d S )Nrt   )rQ   )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   rz   ræ   r�   rì   r  r=   )r¶   r>   r?   rî   rJ   rJ   rK   Útest_poisson_y_positive_check  s    


ÿ
ÿr®  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#  rJ   rK   r±  $  s    zMyBackend.__init__c                    s   |  j d7  _ tƒ  ¡ S )Nr*   )rÅ   r°  Ú
start_call)r²  rµ  rJ   rK   r¶  (  s    zMyBackend.start_call)Ú__name__Ú
__module__Ú__qualname__r±  r¶  Ú__classcell__rJ   rJ   rµ  rK   r¯  #  s   r¯  Útestingc               	   C   sv   t ddd�} t d¡�\}}|  tt¡ W 5 Q R X |jdks@t‚t d¡�\}}|  t¡ W 5 Q R X |jdksrt‚d S )Nr.   r+   )r:   r¦   r»  r   )	r   ÚjoblibZparallel_backendr=   r>   r?   rÅ   rD   r�   )rI   Úbar¦   Ú_rJ   rJ   rK   Útest_backend_respected0  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 )Nr™  r,   r*   )r/   r1   r3   rñ   r^   rj   éÈ   )rv   r3   r:   gH¯¼šò×z>)Zabs_tol)r   r   r=   ÚmathÚiscloser®   rŒ   rD   )r>   r?   rI   rJ   rJ   rK   Ú#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.   rŽ  rÎ   )rz   ræ   rž   r   r=   r#   r®   Úfloat64)r>   r?   ZgbrrJ   rJ   rK   Ú*test_forest_degenerate_feature_importancesJ  s    

rÅ  c              	   C   s>   t |  ddd�}d}tjt|d�� | tt¡ W 5 Q R X d S )NFrT   ©r‹   Úmax_sampleszl`max_sample` cannot be set if `bootstrap=False`. Either switch to `bootstrap=True` or set `max_sample=None`.ré   )r8   r�   rì   r  r=   r>   r?   )rG   r¶   rî   rJ   rJ   rK   Útest_max_samples_bootstrapR  s
    ÿrÈ  c              	   C   sB   t |  dtdƒd�}d}tjt|d�� | tt¡ W 5 Q R X d S )NTg    eÍÍArÆ  z=`max_samples` must be <= n_samples=6 but got value 1000000000ré   )r8   r½   r�   rì   r  r=   r>   r?   )rG   r¶   rê   rJ   rJ   rK   Ú test_large_max_samples_exception_  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sˆt	‚d S )Nr  rX  r   )Z
train_sizers   r3   TrÁ   ©r‹   rÇ  r3   )
r   ra   rb   r`   r=   r@   r   r�   rŽ   rD   )rG   r…   r†   r‡   rˆ   Ú
ms_1_modelZms_1_predictÚms_None_modelZms_None_predictZms_1_msZ
ms_None_msrJ   rJ   rK   Ú$test_max_samples_boundary_regressorsh  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   )r3   ZstratifyTrÁ   rÊ  )	r   r«   r­   r<   r=   r�   rz   r»  Zassert_allclose)	rG   r…   r†   r‡   r¾  rË  Z
ms_1_probarÌ  Zms_None_probarJ   rJ   rK   Ú%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 5 Q R X d S )	Nr*   r+   r,   r“   r^   r_   z3sparse multilabel-indicator for y is not supported.ré   )r   r   r�   rì   r  r=   )r>   r?   r¶   ÚmsgrJ   rJ   rK   Ú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sŠt|ƒ‚d S )Nr*   i'  r+   r   )r:   r3   rÇ  z=Tree without `max_samples` restriction should have more nodes)	rz   r{   r|   rL  r=   rç   rá   r£  rD   )	rÑ  r�   r>   r?   Zest1Zest2Ztree1Ztree2rÏ  rJ   rJ   rK   Ú'test_little_tree_with_small_max_samplesš  s&    ýýrÒ  ÚForestc                 C   sN   ddl m} t dd¡}|j\}}|||ƒ}t|  dd|d�}| t|¡ d S )Nr   )ÚMSEr)   r*   r+   )r:   r¦   rQ   )Zsklearn.tree._criterionrÔ  rb   r  rF   r`   r=   ra   )rÓ  rÔ  r?   r/   Z	n_outputsZmse_criterionr¶   rJ   rJ   rK   Ú-test_mse_criterion_object_segfault_smoke_test¹  s    

rÕ  c                  C   sX   t j d¡} t  |  dd¡¡}tddddd� |¡}| ¡ }dd„ d	D ƒ}t||ƒ d
S )z3Check feature names out for Random Trees Embedding.r   rª   r“   r+   F)r:   r›   r8  r3   c                 S   s    g | ]\}}d |› d|› �‘qS )Zrandomtreesembedding_r¾  rJ   )rÈ   rã   ÚleafrJ   rJ   rK   rÊ   Ñ  s   ýzAtest_random_trees_embedding_feature_names_out.<locals>.<listcomp>))r   r+   )r   r,   )r   r^   )r   r_   r  )r*   r,   )r*   r^   )r*   r_   N)	rz   r{   r|   r²   rL  r   r=   Zget_feature_names_outr#   )r3   r>   r=  ÚnamesZexpected_namesrJ   rJ   rK   Ú-test_random_trees_embedding_feature_names_outÉ  s       ÿþürØ  c              	   C   sb   t  ddgddgg¡}t  ddg¡}t|  ƒ }| ||¡ d}tjt|d�� |j W 5 Q R X d S )Nr*   r+   r,   r“   r   zoAttribute `base_estimator_` was deprecated in version 1.2 and will be removed in 1.4. Use `estimator_` instead.ré   )rz   rå   r7   r=   r�   r	  ÚFutureWarningZbase_estimator_)rG   r>   r?   Úmodelr‹  rJ   rJ   rK   Ú'test_base_estimator_property_deprecatedä  s    
ÿrÛ  c                 C   sf   |   tjjdttdd�¡ tjjdd�}t	dd|d�\}}t
|dd	�}td
|d�}t|||d
d� dS )z–RandomForestClassifier must work on readonly sparse data.

    Non-regression test for: https://github.com/scikit-learn/scikit-learn/issues/25333
    r&   rª   )Z
max_nbytesr   )ÚseedrÀ  r4   Tr¢   r+   )r¦   r3   )ZcvN)ÚsetattrÚsklearnZensembleZ_forestr   r&   rz   r{   r|   r   r   r   r   )Zmonkeypatchr�   r>   r?   rI   rJ   rJ   rK   Útest_read_only_bufferö  s    
ýrß  rƒ  r†  c                 C   s0   t jdd�\}}tdd| dd�}| ||¡ dS )z^Check low max_samples works and is rounded to one.

    Non-regression test for gh-24037.
    T)Z
return_X_yr.   g-Cëâ6?r   )r:   rÇ  rƒ  r3   N)r   Z	load_winer   r=   )rƒ  r>   r?   r  rJ   rJ   rK   Ú.test_round_samples_to_one_when_samples_too_low	  s       ÿrà  )rR   )ró   )rô   )r  )r  )rj   )r™  )ÇÚ__doc__Ú	itertoolsrÁ  r  Úcollectionsr   Ú	functoolsr   r   r   Útypingr   r   Zunittest.mockr   r¼  Únumpyrz   r�   Zscipy.sparser	   r
   r   Zscipy.specialr   rÞ  r   Zsklearn.datasetsr   Zsklearn.decompositionr   Zsklearn.dummyr   Zsklearn.ensembler   r   r   r   r   Zsklearn.exceptionsr   Zsklearn.metricsr   r   r   r   Zsklearn.model_selectionr   r   r   Zsklearn.svmr   Zsklearn.tree._classesr   Zsklearn.utils._testingr    r!   r"   r#   r$   r%   Zsklearn.utils.parallelr&   Zsklearn.utils.validationr'   r>   r?   rA   rB   r«   r­   Z	load_irisrU   r�   ZpermutationrW   ro   ÚpermrV   Zmake_regressionra   rb   r¬  ra  rb  r¬   Zfloat32ÚparallelZget_active_backendr#  ZDEFAULT_JOBLIB_BACKENDr<   r`   rr  Údictr7   ÚstrÚ__annotations__Úupdater£   r8   rL   ÚmarkZparametrizerO   rY   r]   re   ri   rŠ   r�   r–   r—   r    r¡   r¹   rÄ  Úchainr»   rè   rï   rÍ   rF  r  r  r  r±   rF   r  r  r  r  r  r  r&  r'  r,  r-  r3  r6  r7  r?  rB  rE  rG  rN  r`  rd  re  rh  ri  rk  rl  rp  rq  rt  rv  rz  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¯  Zregister_parallel_backendr¿  rÃ  rÅ  rÈ  rÉ  rÍ  rÎ  rÐ  rÒ  rÕ  rØ  rÛ  rß  rà  rJ   rJ   rJ   rK   Ú<module>   s,  
 (
ù
þþ ÿ




 ÿ5


&þþm
	þ   ÿüýþðþ)   ÿü   ÿüùþ(
üüùþ



3

7

6



/

	/






2









	
þ