U
    ½mœdJá  ã                   @   sD
  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	 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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l0m1Z1m2Z2 ddl0m3Z3 ddl4m5Z5 dd l6m7Z7 dd!l8m9Z9 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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,�\ZAZBe% C¡ ZDe9dƒZEeE FeDjGjH¡ZIeDjJeI eD_JeDjGeI eD_Ge%jKd)d*d&d-�\ZLZMe%jNd.d&d/�\ZOZPeO QejR¡ZOejS T¡ d jUZVe+e-d0œZWe,e.d1œZXd2e/iZYeZƒ Z[ee\ef e]d3< e[ ^eW¡ e[ ^eX¡ e[ ^eY¡ eW _¡ Z`ee\ef e]d4< e` ^eX¡ d5d6„ Zaejb cd7eW¡d8d9„ ƒZdd:d;„ Zeejb cd7eW¡ejb cd<d=¡d>d?„ ƒƒZfd@dA„ Zgejb cd7eX¡ejb cd<dB¡dCdD„ ƒƒZhdEdF„ Ziejb cd<dG¡dHdI„ ƒZjdJdK„ Zkejb cd7eX¡dLdM„ ƒZldNdO„ Zmejb cd7eW¡dPdQ„ ƒZndRdS„ Zoejb cdTejpejRf¡ejb cdUe qe	eWdVdWgƒe	eXdXdYdZgƒ¡¡d[d\„ ƒƒZrd]d^„ Zsejb cd7e[¡d_d`„ ƒZtejb cdaeW u¡ ¡ejb cdbdcdddeg¡ejb cdfe%j)dgd'ddh��d˜e%j)djd(dkddl��d˜eDjJeDjGd' d& dmfe%jvdgdd/��d˜g¡dodp„ ƒƒƒZwejb cdqeX u¡ ¡ejb cdbdcdddeg¡ejb cdre%jKd)d*d&dds��d˜e%jKd)d*d'dds��d˜g¡dvdw„ ƒƒƒZxejb cdxe` u¡ ¡dydz„ ƒZyejb cdxe` u¡ ¡ejb cd{eDjJeDjGd|d+d}œd~feDjJeEjzddeDjJj{d d'fd€�d|d|d}œd�fg¡d‚dƒ„ ƒƒZ|ejb cd„d|d+g¡d…d†„ ƒZ}d‡dˆ„ Z~ejb cd7eW¡d‰dŠ„ ƒZd‹dŒ„ Z€ejb cd7e`¡d�dŽ„ ƒZ�d�d�„ Z‚ejb cd7e`¡d‘d’„ ƒZƒd“d”„ Z„ejb cd7e`¡d•d–„ ƒZ…ejb cd7eW¡d—d˜„ ƒZ†d™dš„ Z‡ejb cd7eW¡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jb cd7e[¡d«d¬„ ƒZ�d­d®„ Z‘ejb cd7e[¡d¯d°„ ƒZ’d±d²„ Z“ejb cd7e[¡d³d´„ ƒZ”dµd¶„ Z•ejb cd7e[¡d·d¸„ ƒZ–d¹dº„ Z—ejb cd7e[¡ejb cd»eeef¡d¼d½„ ƒƒZ˜d¾d¿„ Z™ejb cd7e`¡ejb cdTejpejRf¡dÀdÁ„ ƒƒZše!dÂdÃ„ ƒZ›ejb cd7e[¡dÄdÅ„ ƒZœdÆdÇ„ Z�ejb cd7eW¡dÈdÉ„ ƒZždÊdË„ ZŸejb cd7eW¡dÌdÍ„ ƒZ dÎdÏ„ Z¡ejb cd7eW¡dÐdÑ„ ƒZ¢�ddÓdÔ„Z£ejb cd7e[¡dÕdÖ„ ƒZ¤d×dØ„ Z¥ejb cd7e[¡dÙdÚ„ ƒZ¦dÛdÜ„ Z§ejb cd7e[¡dÝdÞ„ ƒZ¨dßdà„ Z©ejb cd7e[¡dádâ„ ƒZªdãdä„ Z«ejb cd7e`¡dådæ„ ƒZ¬�ddèdé„Z­dêdë„ Z®ejb cd7e`¡dìdí„ ƒZ¯dîdï„ Z°dðdñ„ Z±G dòdó„ dóeVƒZ²e ³dôe²¡ e"dõdö„ ƒZ´d÷dø„ Zµdùdú„ Z¶ejb cd7e`¡dûdü„ ƒZ·ejb cd7e`¡dýdþ„ ƒZ¸ejb cd7eX¡dÿ�d „ ƒZ¹ejb cd7eW¡�d�d„ ƒZº�d�d„ Z»ejb c�de-e.g¡�d�d„ ƒZ¼ejb c�de+e,e-e.g¡�d	�d
„ ƒZ½ejb c�deX¡�d�d„ ƒZ¾�d�d„ Z¿ejb cd7e[¡�d�d„ ƒZÀ�d�d„ ZÁdS (  z:
Testing for the forest module (sklearn.ensemble.forest).
é    N)Údefaultdict)Úpartial)Úcombinations)Úproduct)ÚDictÚAny)Ú
csr_matrix)Ú
csc_matrix)Ú
coo_matrix)Úcomb)ÚDummyRegressor)Úmean_poisson_deviance)Úassert_almost_equal)Úassert_array_almost_equal)Úassert_array_equal)Ú_convert_container)Úignore_warnings)Úskip_if_no_parallel)ÚNotFittedError)Údatasets)ÚTruncatedSVD)Úmake_classification)ÚExtraTreesClassifier)ÚExtraTreesRegressor)ÚRandomForestClassifier)ÚRandomForestRegressor)ÚRandomTreesEmbedding)Útrain_test_splitÚcross_val_score)ÚGridSearchCV)Ú	LinearSVC)ÚParallel)Úcheck_random_state)Úmean_squared_error)ÚSPARSE_SPLITTERSéþÿÿÿéÿÿÿÿé   é   é   éô  é
   F)Ú	n_samplesÚ
n_featuresÚn_informativeZn_redundantZ
n_repeatedÚshuffleÚrandom_state©r,   r-   r0   é   ©r,   r0   )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_estimatorsr0   )r7   Úmax_featuresr0   N)ÚFOREST_CLASSIFIERSÚfitÚXÚyr   ÚpredictÚTÚtrue_resultÚlenÚAssertionErrorÚapplyÚshaper7   )ÚnameÚForestClassifierÚclfZleaf_indices© rG   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/ensemble/tests/test_forest.pyÚcheck_classification_toyx   s    
rI   rD   c                 C   s   t | ƒ d S ©N)rI   ©rD   rG   rG   rH   Útest_classification_toy‹   s    rL   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'   ©r7   Ú	criterionr0   çÍÌÌÌÌÌì?z'Failed with criterion %s and score = %fr(   ©r7   rN   r8   r0   ç      à?)r9   r:   ÚirisÚdataÚtargetÚscorerA   )rD   rN   rE   rF   rU   rG   rG   rH   Úcheck_iris_criterion�   s       ÿrV   rN   )ÚginiÚlog_lossc                 C   s   t | |ƒ d S rJ   )rV   ©rD   rN   rG   rG   rH   Ú	test_iris¡   s    rZ   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'   rM   gÃõ(\�Âí?z:Failed with max_features=None, criterion %s and score = %fé   rP   gq=
×£pí?z7Failed with max_features=6, criterion %s and score = %f)ÚFOREST_REGRESSORSr:   ÚX_regÚy_regrU   rA   )rD   rN   ÚForestRegressorÚregrU   rG   rG   rH   Úcheck_regression_criterion§   s.    ÿþþ   ÿþrb   )Úsquared_errorÚabsolute_errorÚfriedman_msec                 C   s   t | |ƒ d S rJ   )rb   rY   rG   rG   rH   Útest_regressionÀ   s    rf   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+   r1   r%   r(   ©ÚlowÚhighÚsizer   ©Zaxis©Zlam©Ú	test_sizer0   Úpoissonr+   Úsqrt)rN   Úmin_samples_leafr8   r0   rc   Úmean)ZstrategyÚtrainÚtestg�íµ ÷Æ°>Ngš™™™™™é?)ÚnpÚrandomÚRandomStater   Úmake_low_rank_matrixÚuniformÚmaxrq   Úexpr   r   r:   r   r   r=   ZcliprA   )ÚrngÚn_trainÚn_testr-   r;   Úcoefr<   ÚX_trainÚX_testÚy_trainÚy_testZ
forest_poiZ
forest_mseÚdummyZ	data_nameZ
metric_poiZ
metric_mseZmetric_dummyrG   rG   rH   Útest_poisson_vs_mseÈ   sP    
  ÿ   ÿ   ÿü ÿ
r‡   )rq   rc   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.rg   rh   r1   r%   r(   ri   r   rm   rn   r+   F)rN   r7   Ú	bootstrapr0   N)rw   rx   ry   r   rz   r{   r|   rq   r}   r   r:   Úsumr=   ÚpytestÚapproxrA   )	rN   r~   r   r€   r-   r;   r�   r<   ra   rG   rG   rH   Ú#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   ©r0   Úclasses_Ú
n_classes_r'   r(   r)   é   r[   r\   )r]   ÚhasattrrA   r:   )rD   ÚrrG   rG   rH   Úcheck_regressor_attributes  s     r“   c                 C   s   t | ƒ d S rJ   )r“   rK   rG   rG   rH   Ú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'   )r7   r0   r8   Ú	max_depthrm   r   )r9   rw   Úerrstater:   rR   rS   rT   r   r‰   Úpredict_probaÚonesrC   r}   Úpredict_log_proba)rD   rE   rF   rG   rG   rH   Úcheck_probability!  s"       ÿ ÿ
 ÿr�   c                 C   s   t | ƒ d S rJ   )r�   rK   rG   rG   rH   Útest_probability1  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   rM   çš™™™™™¹?r)   r(   ©Ún_jobsr'   )r7   r0   rN   ©Úsample_weightç        )rQ   éd   )ÚX_largeÚastypeÚy_larger4   r:   Úfeature_importances_rw   r‰   rC   rA   ÚallÚ
set_paramsr   r"   Úrandintr@   Úabsrt   )rD   rN   ÚdtypeÚ	tolerancer;   r<   ÚForestEstimatorÚestÚimportancesZn_importantZimportances_parallelr¥   ÚscaleZimportances_bisrG   rG   rH   Úcheck_importances6  s0    
r¶   r°   zname, criterionrW   rX   rc   re   rd   c                 C   s*   d}|t kr|dkrd}t||| |ƒ d S )Nç{®Gáz„?rd   gš™™™™™©?)r]   r¶   )r°   rD   rN   r±   rG   rG   rH   Útest_importances\  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ÚnrG   rG   rH   Úbinomialp  s    z-test_importances_asymptotic.<locals>.binomialc                 S   sF   t | ƒ}d}t | ¡D ]*}d| | }|dkr||t |¡ 8 }q|S )Nr¦   ç      ð?r   )r@   rw   ÚbincountÚlog2)Zsamplesr,   ÚentropyÚcountÚprG   rG   rH   rÁ   s  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 rJ   )rw   Úunique)Ú.0Úi)r;   rG   rH   Ú
<listcomp>ƒ  s     zGtest_importances_asymptotic.<locals>.mdi_importance.<locals>.<listcomp>r¦   r¾   c                    s   g | ]}ˆˆ |  ‘qS rG   rG   )rÅ   Új)ÚBÚvaluesrG   rH   rÇ   Ž  s     ©r°   r   c                    s    g | ]}ˆ |ƒt |ƒ ˆ ‘qS rG   )r@   )rÅ   Úc)rÁ   Ún_samples_brG   rH   rÇ   ¤  s   ÿ)rC   ÚlistÚrangeÚpopr   r   rw   r›   Úboolr@   Úappendr‰   )ZX_mr;   r<   r,   r-   ÚfeaturesÚimpr»   r�   ÚbZmask_brÈ   ZX_Zy_ÚchildrenÚxiZmask_xi©r½   rÁ   )rÉ   r;   rÍ   rÊ   rH   Úmdi_importance~  sB    

 "
ÿþÿÿýÿ
z3test_importances_asymptotic.<locals>.mdi_importancer   r'   r(   r)   r�   r[   r\   é   é   é	   rË   r*   rX   )r7   r8   rN   r0   c                 s   s   | ]}|j jd d�V  qdS )F)Ú	normalizeN)Útree_Zcompute_feature_importances©rÅ   ÚtreerG   rG   rH   Ú	<genexpr>Ì  s   ÿz.test_importances_asymptotic.<locals>.<genexpr>r·   )rw   ÚarrayrÑ   rC   ÚzerosrÏ   r   r:   r‰   Úestimators_r7   r   r¯   rt   rA   )	rÙ   rS   r;   r<   r-   Ztrue_importancesrÆ   rF   r´   rG   rØ   rH   Útest_importances_asymptotick  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   Úgetattrr4   )rD   Úerr_msgrG   rG   rH   Ú!test_unfitted_feature_importancesØ  s    ÿÿrì   rE   ÚX_typerâ   Z
sparse_csrZ
sparse_csczX, y, lower_bound_accuracyi,  )r,   Ú	n_classesr0   rO   éè  r\   )r,   rî   r.   r0   çÍÌÌÌÌÌä?ç
×£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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_namerQ   r   ro   é(   T©r7   rˆ   Ú	oob_scorer0   Ú
oob_score_Úoob_decision_function_r¡   Úoob_prediction_r'   N)r   r   r‘   rA   r:   rU   r¯   rö   ÚndimrC   r@   Úsetr÷   )rE   r;   r<   rí   Zlower_bound_accuracyr‚   rƒ   r„   r…   Ú
classifierÚ
test_scoreÚexpected_shaperG   rG   rH   Útest_forest_classifier_oobâ  s4    üü
*rþ   r`   zX, y, lower_bound_r2)r,   r-   Ú	n_targetsr0   ç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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ò   rQ   r   ro   é2   Trô   rö   rø   r¡   r÷   r'   N)r   r   r‘   rA   r:   rU   r¯   rö   rù   rC   rø   )r`   r;   r<   rí   Zlower_bound_r2r‚   rƒ   r„   r…   Z	regressorrü   rý   rG   rG   rH   Útest_forest_regressor_oob   s4    üü
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   )r7   rõ   rˆ   r0   z"Some inputs do not have OOB scoresræ   N)rŠ   ÚwarnsÚUserWarningr:   rR   rS   rT   )r²   Ú	estimatorrG   rG   rH   Útest_forest_oob_warningX  s    ür  zX, y, params, err_msgT)rõ   rˆ   z6Out of bag estimation only available if bootstrap=Truer[   ri   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  rG   rG   rH   Útest_forest_oob_errorf  s    
r
  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   ÚNotImplementedErrorZ_set_oob_score_and_attributesr;   r<   r  rG   rG   rH   Ú+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(   )r7   r˜   )r9   r   r:   rR   rS   rT   )rD   ÚforestrF   rG   rG   rH   Úcheck_gridsearch†  s    
r  c                 C   s   t | ƒ d S rJ   )r  rK   rG   rG   rH   Ú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   ©r7   r£   r0   r'   r¢   r(   N)r4   r:   r@   rA   r­   r=   r   )rD   r;   r<   r²   r  Úy1Úy2rG   rG   rH   Úcheck_parallel’  s    

r  c                 C   s6   | t krtj}tj}n| tkr&t}t}t| ||ƒ d S rJ   )r9   rR   rS   rT   r]   r^   r_   r  ©rD   r;   r<   rG   rG   rH   Útest_parallel¡  s    r  c           	      C   sl   t |  }|dd�}| ||¡ | ||¡}t |¡}t |¡}t|ƒ|jksPt‚| ||¡}||ksht‚d S )Nr   r�   )	r4   r:   rU   ÚpickleÚdumpsÚloadsÚtypeÚ	__class__rA   )	rD   r;   r<   r²   ÚobjrU   Zpickle_objectÚobj2Zscore2rG   rG   rH   Ú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(   )r9   rR   rS   rT   r]   r^   r_   r   r  rG   rG   rH   Ú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©r0   rˆ   r•   r–   ©r�   r(   ©r�   r�   )r4   r:   r=   r   r9   rw   r™   rš   r@   rA   rC   rœ   ©	rD   r‚   r„   rƒ   r…   r³   Zy_predZprobaZ	log_probarG   rG   rH   Úcheck_multioutputÈ  sR    ôô



r&  c                 C   s   t | ƒ d S rJ   )r&  rK   rG   rG   rH   Ú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$  )r4   r:   r=   r   rw   r™   rš   r@   rA   rC   rœ   r%  rG   rG   rH   Útest_multioutput_string   sX    ôôü


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%   )r9   r:   r;   r<   r�   rA   r   rŽ   rw   Úvstackrâ   r>   )rD   rE   rF   Ú_yrG   rG   rH   Úcheck_classes_shape8  s    r0  c                 C   s   t | ƒ d S rJ   )r0  rK   rG   rG   rH   Útest_classes_shapeJ  s    r1  c                  C   s<   t ddd�} tjdd�\}}|  |¡}t|ƒtjks8t‚d S )Nr+   F)r7   Úsparse_outputrQ   ©Úfactor)r   r   Úmake_circlesÚfit_transformr  rw   ZndarrayrA   )Úhasherr;   r<   ÚX_transformedrG   rG   rH   Útest_random_trees_dense_typeO  s    
r9  c                  C   sR   t dddd�} t dddd�}tjdd�\}}|  |¡}| |¡}t| ¡ |ƒ d S )Nr+   Fr   )r7   r2  r0   TrQ   r3  )r   r   r5  r6  r   Útoarray)Zhasher_denseZhasher_sparser;   r<   ZX_transformed_denseÚX_transformed_sparserG   rG   rH   Útest_random_trees_dense_equal\  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s¶t	‚d S )Né   r'   r6   rQ   r3  r   rm   r(   )Zn_componentsr¾   )r   r   r5  r6  r   r:   Ú	transformr:  rC   rA   r‰   r7   r   r    rU   )r7  r;   r<   r8  ZsvdZ	X_reducedZ
linear_clfrG   rG   rH   Útest_random_hasherp  s    


r?  c                  C   sJ   t jdd�\} }tddd�}| | ¡}| t| ƒ¡}t| ¡ | ¡ ƒ d S )Nr   r�   r=  r'   r6   )r   Úmake_multilabel_classificationr   r6  r	   r   r:  )r;   r<   r7  r8  r;  rG   rG   rH   Útest_random_hasher_sparse_dataˆ  s
    
rA  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   r=  r   r(   c                    s"   g | ]}t d |dd� ˆ ˆ¡‘qS )r2   i90  r  )r   r:   )rÅ   r£   )r‚   r„   rG   rH   rÇ   –  s
   ý ÿz'test_parallel_train.<locals>.<listcomp>)r'   r(   r)   rÛ   é   é    c                    s   g | ]}|  ˆ ¡‘qS rG   )rš   )rÅ   rF   )rƒ   rG   rH   rÇ   ž  s     r'   )r"   Úrandnr®   Úzipr   )r~   r,   r-   ZclfsZprobasZproba1Zproba2rG   )rƒ   r‚   r„   rH   Útest_parallel_train�  s    ürH  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 )NrB  r   r�   )rï   r'   )rl   rï   r*   rg   r6   Ú c                 s   s.   | ]&\}}|d kr"d|t |ƒf ndV  qdS ©r   z%d,%d/ú-N©rº   ©rÅ   ÚfÚtrG   rG   rH   rá   ¯  s   ÿz$test_distribution.<locals>.<genexpr>r'   c                    s    g | ]\}}d | ˆ  |f‘qS )r¾   rG   ©rÅ   rà   rÂ   ©Zn_treesrG   rH   rÇ   ¶  s     z%test_distribution.<locals>.<listcomp>r[   gš™™™™™É?r(   r)   ç333333Ó?z0,1/0,0/--0,2/--)rï   r(   )r8   r0   c                 s   s.   | ]&\}}|d kr"d|t |ƒf ndV  qdS rJ  rL  rM  rG   rG   rH   rá   Î  s   ÿc                 S   s   g | ]\}}||f‘qS rG   rG   rP  rG   rG   rH   rÇ   Õ  s     rÛ   )r"   r®   Úrandr   r:   r   rº   rä   ÚjoinrG  rÞ   ÚfeatureÚ	thresholdÚsortedÚitemsr@   rA   rw   Úemptyrx   )r~   r;   r<   ra   Zuniquesrà   rG   rQ  rH   Útest_distribution£  s@    


þ



þrZ  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_nodesr7   r0   )r˜   r7   r0   )Úhastie_XÚhastie_yr4   r:   rä   Z	get_depthrA   ©rD   r;   r<   r²   r³   rG   rG   rH   Úcheck_max_leaf_nodes_max_depthÙ  s    
   ÿ þr^  c                 C   s   t | ƒ d S rJ   )r^  rK   rG   rG   rH   Útest_max_leaf_nodes_max_depthç  s    r_  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_splitr7   r0   r&   rQ   úFailed with {0})r[  r\  r4   r:   rä   rÞ   Zchildren_leftZn_node_samplesrw   Úminr@   rA   rè   )rD   r;   r<   r²   r³   Znode_idxZnode_samplesrG   rG   rH   Úcheck_min_samples_splitì  s    
(rb  c                 C   s   t | ƒ d S rJ   )rb  rK   rG   rG   rH   Útest_min_samples_splitÿ  s    rc  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   )rs   r7   r0   r�   r`  g      Ð?)r[  r\  r4   r:   rä   rÞ   rB   rw   r¿   ra  rA   rè   r@   )rD   r;   r<   r²   r³   ÚoutZnode_countsZ
leaf_countrG   rG   rH   Úcheck_min_samples_leaf  s    


re  c                 C   s   t | ƒ d S rJ   )re  rK   rG   rG   rH   Útest_min_samples_leaf  s    rf  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   rQ   r\   r'   )Úmin_weight_fraction_leafr7   r0   ZRandomForestFr¤   )Úweightsz,Failed with {0} min_weight_fraction_leaf={1})r[  r\  r4   rw   rx   ry   rS  rC   r‰   Zlinspacerˆ   r:   rä   rÞ   rB   r¿   ra  rg  rA   rè   )rD   r;   r<   r²   r~   rh  Ztotal_weightÚfracr³   rd  Znode_weightsZleaf_weightsrG   rG   rH   Úcheck_min_weight_fraction_leaf   s0    

  ÿÿ ÿþrj  c                 C   s   t | ƒ d S rJ   )rj  rK   rG   rG   rH   Útest_min_weight_fraction_leaf?  s    rk  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(   )r0   r˜   )r4   r:   r   rB   r9   r]   r=   r«   rš   rœ   ÚFOREST_TRANSFORMERSr>  r:  r6  )rD   r;   ZX_sparser<   r²   ZdenseÚsparserG   rG   rH   Úcheck_sparse_inputD  s2     ÿ ÿ ÿ ÿrn  Úsparse_matrixc                 C   s(   t jddd�\}}t| |||ƒ|ƒ d S )Nr   r  )r0   r,   )r   r@  rn  )rD   ro  r;   r<   rG   rG   rH   Útest_sparse_inputa  s    rp  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)   )r4   rw   ZasarrayrR   rS   rT   r   r:   r=   Zascontiguousarrayr  Zsplitterr$   r   r	   r
   )rD   r°   r³   r;   r<   rG   rG   rH   Úcheck_memory_layouti  s4    rt  c                 C   s   t | |ƒ d S rJ   )rt  )rD   r°   rG   rG   rH   Útest_memory_layout˜  s    ru  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   r6   r�   )r4   rŠ   ré   r  r:   r9   r]   r=   )rD   r;   ÚX_2dr<   r²   r³   rG   rG   rH   Úcheck_1d_inputž  s    
rw  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'   )rR   rS   ÚreshaperT   r   rw  )rD   r;   rv  r<   rG   rG   rH   Útest_1d_input¬  s
    rz  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_weightr0   g       @r¾   )r   r'   r(   r'   r§   g      Y@r(   )r9   r:   rR   rS   rT   r   r«   rw   r.  r>   r›   rC   )	rD   rE   Zclf1Zclf2Z
iris_multiZclf3Zclf4r¥   r}  rG   rG   rH   Úcheck_class_weights¶  s@    



ýú

r~  c                 C   s   t | ƒ d S rJ   )r~  rK   rG   rG   rH   Ú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|  rQ   r¾   rx  )r%   r(   Zbalanced_subsample)r9   rw   r.  r<   râ   r>   r:   r;   )rD   rE   r/  rF   rG   rG   rH   Ú6check_class_weight_balanced_and_bootstrap_multi_outputê  s     ÿr€  c                 C   s   t | ƒ d S rJ   )r€  rK   rG   rG   rH   Ú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_startr0   úJWarm-start fitting without increasing n_estimators does not fit new trees.ræ   rQ   r¾   rx  r|  )r9   rw   r.  r<   râ   r>   r:   r;   rŠ   r  r  ré   r  )rD   rE   r/  rF   Úwarn_msgrG   rG   rH   Úcheck_class_weight_errorsþ  s    ÿr…  c                 C   s   t | ƒ d S rJ   )r…  rK   rG   rG   rH   Útest_class_weight_errors  s    r†  rg   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)r7   r0   r‚  ©r7   r+   Fc                 S   s   g | ]
}|j ‘qS rG   r�   rß   rG   rG   rH   rÇ   -  s     z$check_warm_start.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS rG   r�   rß   rG   rG   rH   rÇ   .  s     r`  )rë   )r[  r\  r4   r­   r:   r@   rA   rú   r   rB   rè   )rD   r0   r;   r<   r²   Zest_wsr7   Z	est_no_wsrG   rG   rH   Úcheck_warm_start  s6    
  ÿ  ÿÿ
  ÿrˆ  c                 C   s   t | ƒ d S rJ   )rˆ  rK   rG   rG   rH   Útest_warm_start6  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©r7   r˜   r‚  r0   Tr(   )r‚  r0   )r[  r\  r4   r:   r­   r   rB   )rD   r;   r<   r²   r³   Úest_2rG   rG   rH   Úcheck_warm_start_clear;  s    
   ÿrŒ  c                 C   s   t | ƒ d S rJ   )rŒ  rK   rG   rG   rH   Útest_warm_start_clearL  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)r7   r˜   r‚  r�   r‡  )r[  r\  r4   r:   r­   rŠ   ré   r  r]  rG   rG   rH   Ú%check_warm_start_smaller_n_estimatorsQ  s    
rŽ  c                 C   s   t | ƒ d S rJ   )rŽ  rK   rG   rG   rH   Ú$test_warm_start_smaller_n_estimators\  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æ   )
r[  r\  r4   r:   r­   rŠ   r  r  r   rB   )rD   r;   r<   r²   r³   r‹  r„  rG   rG   rH   Ú#check_warm_start_equal_n_estimatorsa  s"    
   ÿÿr�  c                 C   s   t | ƒ d S rJ   )r�  rK   rG   rG   rH   Ú"test_warm_start_equal_n_estimatorsz  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)r7   r˜   r‚  r0   rˆ   rõ   r[   )r‚  rõ   r7   rö   r  )	r[  r\  r4   r:   r­   r‘   rA   rö   r   )rD   r;   r<   r²   r³   r‹  Zest_3rG   rG   rH   Úcheck_warm_start_oob  sJ    
úúúr“  c                 C   s   t | ƒ d S rJ   )r“  rK   rG   rG   rH   Útest_warm_start_oob±  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 rG   rG   )rÅ   ÚchrG   rG   rH   rÇ   º  s     z&test_dtype_convert.<locals>.<listcomp>ZABCDEFGHIJKLMNOPQRSTU)r   rw   Úeyer:   r=   r   rŽ   )rî   rû   r;   r<   ÚresultrG   rG   rH   Ú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 rG   )rÞ   Ú
node_count)rÅ   ÚerG   rG   rH   rÇ   Ì  s     z'check_decision_path.<locals>.<listcomp>c                    s$   g | ]\}}ˆ|ˆˆ  | f ‘qS rG   rG   )rÅ   rÆ   rÈ   ©Zest_idZ	indicatorZn_nodes_ptrrG   rH   rÇ   Ò  s   ÿ)rC   )r[  r\  rC   r4   r:   Zdecision_pathrA   r   rw   Údiffrä   rB   rÏ   Ú	enumerater   r›   )rD   r;   r<   r,   r²   r³   ÚleavesZleave_indicatorrG   r›  rH   Úcheck_decision_pathÁ  s$    

 ÿ
þrŸ  c                 C   s   t | ƒ d S rJ   )rŸ  rK   rG   rG   rH   Ú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'   r3   r¡   )Úmin_impurity_decrease)
r   Úmake_hastie_10_2r   r   r   r   r:   rä   r¡  rA   )r;   r<   Zall_estimatorsÚ	Estimatorr³   rà   rG   rG   rH   Ú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 )Nrq   )rN   )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   rw   rã   rŠ   ré   r  r:   )r³   r;   r<   rë   rG   rG   rH   Ú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  rG   rH   r¨    s    zMyBackend.__init__c                    s   |  j d7  _ tƒ  ¡ S )Nr'   )rÂ   r§  Ú
start_call)r©  r¬  rG   rH   r­    s    zMyBackend.start_call)Ú__name__Ú
__module__Ú__qualname__r¨  r­  Ú__classcell__rG   rG   r¬  rH   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(   )r7   r£   r²  r   )	r   ÚjoblibZparallel_backendr:   r;   r<   rÂ   rA   rš   )rF   Úbar£   Ú_rG   rG   rH   Ú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 )Nr’  r)   r'   )r,   r.   r0   rî   r[   rg   éÈ   )rs   r0   r7   gH¯¼šò×z>)Zabs_tol)r   r   r:   ÚmathÚiscloser«   r‰   rA   )r;   r<   rF   rG   rG   rH   Ú#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Ë   )rw   rã   r›   r   r:   r   r«   Úfloat64)r;   r<   ZgbrrG   rG   rH   Ú*test_forest_degenerate_feature_importances-  s    

r¼  c              	   C   s>   t |  ddd�}d}tjt|d�� | tt¡ W 5 Q R X d S )NFrQ   ©rˆ   Úmax_sampleszl`max_sample` cannot be set if `bootstrap=False`. Either switch to `bootstrap=True` or set `max_sample=None`.ræ   )r5   rŠ   ré   r  r:   r;   r<   )rD   r³   rë   rG   rG   rH   Útest_max_samples_bootstrap5  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æ   )r5   rº   rŠ   ré   r  r:   r;   r<   )rD   r³   rç   rG   rG   rH   Ú test_large_max_samples_exceptionB  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   rR  r   )Z
train_sizerp   r0   Tr¾   ©rˆ   r¾  r0   )
r   r^   r_   r]   r:   r=   r#   rŠ   r‹   rA   )rD   r‚   rƒ   r„   r…   Ú
ms_1_modelZms_1_predictÚms_None_modelZms_None_predictZms_1_msZ
ms_None_msrG   rG   rH   Ú$test_max_samples_boundary_regressorsK  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   )r0   ZstratifyTr¾   rÁ  )	r   r¨   rª   r9   r:   rš   rw   r²  Zassert_allclose)	rD   r‚   rƒ   r„   rµ  rÂ  Z
ms_1_probarÃ  Zms_None_probarG   rG   rH   Ú%test_max_samples_boundary_classifiersa  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³   ÚmsgrG   rG   rH   Útest_forest_y_sparset  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   )r7   r0   r¾  z=Tree without `max_samples` restriction should have more nodes)	rw   rx   ry   rF  r:   rä   rÞ   r™  rA   )	rÈ  r~   r;   r<   Zest1Zest2Ztree1Ztree2rÆ  rG   rG   rH   Ú'test_little_tree_with_small_max_samples}  s&    ýýrÉ  r£  c              	   C   s\   t  ddgddgg¡}t  ddg¡}| dd�}d}tjt|d	�� | ||¡ W 5 Q R X d
S )z9Check warning raised for max_features="auto" deprecation.r'   r(   r)   r�   r   Úauto)r8   a  `max_features='auto'` has been deprecated in 1.1 and will be removed in 1.3. To keep the past behaviour, explicitly set `max_features=(1.0|'sqrt')` or remove this parameter as it is also the default value for RandomForest(Regressors|Classifiers) and ExtraTrees(Regressors|Classifiers)\.ræ   N)rw   râ   rŠ   r  ÚFutureWarningr:   )r£  r;   r<   r³   rë   rG   rG   rH   Útest_max_features_deprecation�  s    
ÿ	rÌ  ÚForestc                 C   sN   ddl m} t dd¡}|j\}}|||ƒ}t|  dd|d�}| t|¡ d S )Nr   )ÚMSEr&   r'   r(   )r7   r£   rN   )Zsklearn.tree._criterionrÎ  r_   ry  rC   r]   r:   r^   )rÍ  rÎ  r<   r,   Z	n_outputsZmse_criterionr³   rG   rG   rH   Ú-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)r7   r˜   r2  r0   c                 S   s    g | ]\}}d |› d|› �‘qS )Zrandomtreesembedding_rµ  rG   )rÅ   rà   ÚleafrG   rG   rH   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)	rw   rx   ry   r¯   rF  r   r:   Zget_feature_names_outr   )r0   r;   r7  ÚnamesZexpected_namesrG   rG   rH   Ú-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æ   )rw   râ   r4   r:   rŠ   r  rË  Zbase_estimator_)rD   r;   r<   Úmodelr„  rG   rG   rH   Ú'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·  r1   TrŸ   r(   )r£   r0   )ZcvN)ÚsetattrÚsklearnZensembleZ_forestr   r!   rw   rx   ry   r   r   r   r   )Zmonkeypatchr~   r;   r<   rF   rG   rG   rH   Útest_read_only_bufferö  s    
ýrØ  )rO   )rð   )rñ   )r   )r  )rg   )r’  )ÂÚ__doc__r  r¸  Úcollectionsr   Ú	itertoolsÚ	functoolsr   r   r   Útypingr   r   Únumpyrw   Zscipy.sparser   r	   r
   Zscipy.specialr   r³  rŠ   r×  Zsklearn.dummyr   Zsklearn.metricsr   Zsklearn.utils._testingr   r   r   r   r   r   Zsklearn.exceptionsr   r   Zsklearn.decompositionr   Zsklearn.datasetsr   Zsklearn.ensembler   r   r   r   r   Zsklearn.model_selectionr   r   r   Zsklearn.svmr    Zsklearn.utils.parallelr!   Zsklearn.utils.validationr"   r#   Zsklearn.tree._classesr$   r;   r<   r>   r?   r¨   rª   Z	load_irisrR   r~   ZpermutationrT   rl   ÚpermrS   Zmake_regressionr^   r_   r¢  r[  r\  r©   Zfloat32ÚparallelZget_active_backendr  ZDEFAULT_JOBLIB_BACKENDr9   r]   rl  Údictr4   ÚstrÚ__annotations__Úupdater    r5   rI   ÚmarkZparametrizerL   rV   rZ   rb   rf   r‡   rŒ   r“   r”   r�   rž   r¶   r»  Úchainr¸   rå   rì   rÊ   r@  rþ   r  r  r®   rC   r
  r  r  r  r  r  r   r!  r&  r'  r-  r0  r1  r9  r<  r?  rA  rH  rZ  r^  r_  rb  rc  re  rf  rj  rk  rn  rp  rt  ru  rw  rz  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Ø  rG   rG   rG   rH   Ú<module>   sL  
(
ù
þþ ÿ




 ÿ5


&þþm
	þ   ÿüýþðþ$   ÿü   ÿüùþ%
üüùþ



3

7

6



/

	/






2






	üþ	þ