a
    ¶Àh!õ  ã                   @   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 ddlZdd	lmZmZ dd
lmZ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&m'Z' ddl(m)Z) ddl*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@mAZAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddgddgddgddgddgddggZIg d¢ZJddgddgddggZKg d¢ZLejd d!dddd"dd#\ZMZNe O¡ ZPeHdƒZQeQ RePjSjT¡ZUePjVeU eP_VePjSeU eP_SejWd d!dd$\ZXZYejd%dd&\ZZZ[eZ \ej]¡ZZej^ _¡ d j`Zae e"d'œZbe!e#d(œZcd)e$iZdeeƒ Zfeegef ehd*< ef ieb¡ ef iec¡ ef ied¡ eb j¡ Zkeegef ehd+< ek iec¡ ejl md,eb¡d-d.„ ƒZnejl md,eb¡ejl md/d0¡d1d2„ ƒƒZoejl md,ec¡ejl md/d3¡d4d5„ ƒƒZpd6d7„ Zqejl md/d8¡d9d:„ ƒZrejl md,ec¡d;d<„ ƒZsejl md,eb¡d=d>„ ƒZtejl md?ejuej]f¡ejl md@e ve	ebdAdBgƒe	ecg dC¢ƒ¡¡dDdE„ ƒƒZwdFdG„ Zxejl md,ef¡dHdI„ ƒZyejl mdJeb z¡ ¡ejl mdKg dL¢¡ejl mdMg ejdNdddO¢dP‘R g ejdQddRddS¢dT‘R ePjVePjSd d dTfg ej{dNdd&¢dU‘R g¡ejl mdVdWee,dXdYg¡dZd[„ ƒƒƒƒZ|ejl md\ec z¡ ¡ejl mdKg dL¢¡ejl md]g ejWd d!ddd^¢d_‘R g ejWd d!ddd^¢d`‘R g¡ejl mdVdWe+g¡dadb„ ƒƒƒƒZ}ejl mdcek z¡ ¡ddde„ ƒZ~ejl mdcek z¡ ¡dfdg„ ƒZejl mdJeb z¡ ¡dhdi„ ƒZ€ejl md\ec z¡ ¡djdk„ ƒZejl mdVdWd"g¡dldm„ ƒZ‚ejl md,eb¡dndo„ ƒZƒejl md,ek¡dpdq„ ƒZ„ejl md,ek¡drds„ ƒZ…ejl md,ek¡dtdu„ ƒZ†ejl md,eb¡dvdw„ ƒZ‡ejl md,eb¡dxdy„ ƒZˆdzd{„ Z‰d|d}„ ZŠd~d„ Z‹ejl md€eA¡dd‚„ ƒZŒdƒd„„ Zd…d†„ ZŽejl md,ef¡d‡dˆ„ ƒZejl md,ef¡d‰dŠ„ ƒZejl md,ef¡d‹dŒ„ ƒZ‘ejl md,ef¡ddŽ„ ƒZ’ejl md,ef¡ejl mde@eA eB ¡dd‘„ ƒƒZ“ejl md,ek¡ejl md?ejuej]f¡d’d“„ ƒƒZ”ejl md,ef¡d”d•„ ƒZ•ejl md,eb¡d–d—„ ƒZ–ejl md,eb¡d˜d™„ ƒZ—ejl md,eb¡dšd›„ ƒZ˜ejl md,ef¡dœd„ ƒZ™ejl md,ef¡dždŸ„ ƒZšejl md,ef¡d d¡„ ƒZ›ejl md,ef¡d¢d£„ ƒZœejl md,ek¡d¤d¥„ ƒZejl md,ek¡d¦d§„ ƒZždÞd©dª„ZŸejl md,ek¡d«d¬„ ƒZ d­d®„ Z¡d¯d°„ Z¢G d±d²„ d²eaƒZ£e ¤d³e£¡ e>d´dµ„ ƒZ¥d¶d·„ Z¦d¸d¹„ Z§ejl md,ek¡dºd»„ ƒZ¨ejl md,ek¡d¼d½„ ƒZ©ejl md,ec¡d¾d¿„ ƒZªejl md,eb¡dÀdÁ„ ƒZ«ejl mdÂeB¡dÃdÄ„ ƒZ¬ejl mdÅe"e#g¡dÆdÇ„ ƒZ­ejl mdÈec¡dÉdÊ„ ƒZ®dËdÌ„ Z¯ejl mdÂeB¡dÍdÎ„ ƒZ°ejl mdÏdÐdg¡dÑdÒ„ ƒZ±ejl mdÓddg¡ejl mdÔdWd"g¡ejl mdÅek z¡ ¡dÕdÖ„ ƒƒƒZ²ejl md×ejWe#feje"fejWe!feje fg¡dØdÙ„ ƒZ³ejl mdÈe"e#e!e g¡dÚdÛ„ ƒZ´ejl mdÈec z¡ ¡dÜdÝ„ ƒZµdS )ßz:
Testing for the forest module (sklearn.ensemble.forest).
é    N)Údefaultdict)Úpartial)ÚcombinationsÚproduct)ÚAnyÚDict)Úpatch)Úcomb)ÚcloneÚdatasets)Úmake_classificationÚmake_hastie_10_2)ÚTruncatedSVD)ÚDummyRegressor)ÚExtraTreesClassifierÚExtraTreesRegressorÚRandomForestClassifierÚRandomForestRegressorÚRandomTreesEmbedding)Ú_generate_unsampled_indicesÚ_get_n_samples_bootstrap)Ú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_allcloseÚassert_almost_equalÚassert_array_almost_equalÚassert_array_equalÚignore_warningsÚskip_if_no_parallel)ÚCOO_CONTAINERSÚCSC_CONTAINERSÚCSR_CONTAINERS)Útype_of_target)ÚParallel)Úcheck_random_stateéþÿÿÿéÿÿÿÿé   é   )r/   r/   r/   r0   r0   r0   é   )r/   r0   r0   éô  é
   F)Ú	n_samplesÚ
n_featuresÚn_informativeZn_redundantZ
n_repeatedÚshuffleÚrandom_state©r5   r6   r9   é   ©r5   r9   )r   r   )r   r   r   ÚFOREST_ESTIMATORSÚFOREST_CLASSIFIERS_REGRESSORSÚnamec                 C   s    t |  }|ddd}| tt¡ t| t¡tƒ dt|ƒks@J ‚|dddd}| tt¡ t| t¡tƒ dt|ƒkszJ ‚| 	t¡}|j
ttƒ|jfksœJ ‚dS )z&Check classification on a toy dataset.r4   r0   ©Ún_estimatorsr9   )rA   Úmax_featuresr9   N)ÚFOREST_CLASSIFIERSÚfitÚXÚyr%   ÚpredictÚTÚtrue_resultÚlenÚapplyÚshaperA   )r?   ÚForestClassifierÚclfZleaf_indices© rO   ú^/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/ensemble/tests/test_forest.pyÚtest_classification_toyy   s    
rQ   Ú	criterion)ÚginiÚlog_lossc                 C   sš   t |  }|d|dd}| tjtj¡ | tjtj¡}|dksNJ d||f ƒ‚|d|ddd}| tjtj¡ | tjtj¡}|dks–J d||f ƒ‚d S )	Nr4   r0   ©rA   rR   r9   çÍÌÌÌÌÌì?z'Failed with criterion %s and score = %fr1   ©rA   rR   rB   r9   ç      à?)rC   rD   ÚirisÚdataÚtargetÚscore)r?   rR   rM   rN   r\   rO   rO   rP   Útest_iris_criterion   s    ÿr]   )Úsquared_errorÚabsolute_errorÚfriedman_msec                 C   sŠ   t |  }|d|dd}| tt¡ | tt¡}|dksFJ d||f ƒ‚|d|ddd}| tt¡ | tt¡}|dks†J d	||f ƒ‚d S )
Né   r0   rU   gÃõ(\Âí?z:Failed with max_features=None, criterion %s and score = %fé   rW   gq=
×£pí?z7Failed with max_features=6, criterion %s and score = %f)ÚFOREST_REGRESSORSrD   ÚX_regÚy_regr\   )r?   rR   ÚForestRegressorÚregr\   rO   rO   rP   Útest_regression_criterion    s(    ÿþþÿþrh   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 s0J ‚|d| k sÔJ ‚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.
    é*   ©r3   r3   r4   r:   r.   r1   ©ÚlowÚhighÚsizer   ©Zaxis©Zlam©Ú	test_sizer9   Úpoissonr4   Úsqrt)rR   Úmin_samples_leafrB   r9   r^   Úmean)ZstrategyÚtrainÚtestgíµ ÷Æ°>Nçš™™™™™é?)ÚnpÚrandomÚRandomStater   Úmake_low_rank_matrixÚuniformÚmaxrs   Úexpr   r   rD   r   r   rG   Zclip)ÚrngÚn_trainÚn_testr6   rE   ÚcoefrF   ÚX_trainÚX_testÚy_trainÚy_testZ
forest_poiZ
forest_mseÚdummyZ	data_nameZ
metric_poiZ
metric_mseZmetric_dummyrO   rO   rP   Útest_poisson_vs_mse½   s>    

ÿÿÿüÿ
rŠ   )rs   r^   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žJ ‚dS )z9 "Test that sum(y_pred)==sum(y_true) on the training set.ri   rj   r:   r.   r1   rk   r   ro   rp   r4   F)rR   rA   Ú	bootstrapr9   N)rz   r{   r|   r   r}   r~   r   rs   r€   r   rD   ÚsumrG   ÚpytestÚapprox)	rR   r   r‚   rƒ   r6   rE   r„   rF   rg   rO   rO   rP   Ú#test_balance_property_random_forestò   s    

ÿÿr   c                 C   sf   t |  dd}t|dƒrJ ‚t|dƒr*J ‚| g d¢g d¢gddg¡ t|dƒrTJ ‚t|dƒrbJ ‚d S )	Nr   ©r9   Úclasses_Ú
n_classes_©r0   r1   r2   ©é   ra   rb   r0   r1   )rc   ÚhasattrrD   )r?   ÚrrO   rO   rP   Útest_regressor_attributes  s    r˜   c                 C   s¢   t |  }tjddz |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   ƒ n1 s”0    Y  d S )NÚignore©Údivider4   r0   )rA   r9   rB   Ú	max_depthro   r   )rC   rz   ÚerrstaterD   rY   rZ   r[   r$   rŒ   Úpredict_probaÚonesrL   r€   Úpredict_log_proba)r?   rM   rN   rO   rO   rP   Útest_probability  s    ÿ$ÿÿr¡   Údtypezname, criterionrS   rT   )r^   r`   r_   c                 C   sf  d}|t v r|dkrd}tj| dd}tj| dd}t| }|d|dd}| ||¡ |j}t |d	k¡}	|j	d dks|J ‚|	d
ksˆJ ‚t 
|d d
… d	k¡s¢J ‚|j}|jdd |j}
t||
ƒ tdƒ ddt|ƒ¡}|dd|d}|j|||d |j}t 
|dk¡sJ ‚dD ]J}|dd|d}|j|||| d |j}t || ¡ ¡ |k sJ ‚qd S )Nç{®Gáz„?r_   çš™™™™™©?F©Úcopyr4   r   rU   çš™™™™™¹?r2   r1   ©Ún_jobsr0   )rA   r9   rR   ©Úsample_weightç        )rX   éd   )rc   ÚX_largeÚastypeÚy_larger=   rD   Úfeature_importances_rz   rŒ   rL   ÚallÚ
set_paramsr$   r-   ÚrandintrJ   Úabsrv   )r¢   r?   rR   Z	tolerancerE   rF   ÚForestEstimatorÚestÚimportancesZn_importantZimportances_parallelr«   ÚscaleZimportances_bisrO   rO   rP   Útest_importances#  s6    	
rº   c            	         s*  dd„ ‰ dd„ ‰‡ ‡fdd„} t  g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢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&J ‚d S )Nc                 S   s*   | dk s| |krdS t t|ƒt| ƒddS )Nr   T)Úexact)r	   Úint)ÚkÚnrO   rO   rP   ÚbinomialZ  s    z-test_importances_asymptotic.<locals>.binomialc                 S   sF   t | ƒ}d}t | ¡D ]*}d| | }|dkr||t |¡ 8 }q|S )Nr¬   ç      ð?r   )rJ   rz   ÚbincountÚlog2)Zsamplesr5   ÚentropyÚcountÚprO   rO   rP   rÃ   ]  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 )N)rz   Úunique)Ú.0Úi)rE   rO   rP   Ú
<listcomp>m  ó    zGtest_importances_asymptotic.<locals>.mdi_importance.<locals>.<listcomp>r¬   rÀ   c                    s   g | ]}ˆˆ |  ‘qS rO   rO   )rÇ   Új)ÚBÚvaluesrO   rP   rÉ   x  rÊ   ©r¢   r   c                    s    g | ]}ˆ |ƒt |ƒ ˆ ‘qS rO   )rJ   )rÇ   Úc)rÃ   Ún_samples_brO   rP   rÉ   Ž  s   ÿ)rL   ÚlistÚrangeÚpopr   r   rz   rŸ   ÚboolrJ   ÚappendrŒ   )ZX_mrE   rF   r5   r6   ÚfeaturesÚimpr½   r„   ÚbZmask_brË   ZX_Zy_ÚchildrenÚxiZmask_xi©r¿   rÃ   )rÌ   rE   rÐ   rÍ   rP   Úmdi_importanceh  sB    

 "
ÿþÿÿýÿ
z3test_importances_asymptotic.<locals>.mdi_importance)r   r   r0   r   r   r0   r   r0   )r0   r   r0   r0   r0   r   r0   r1   )r0   r   r0   r0   r   r0   r0   r2   )r   r0   r0   r0   r   r0   r   r•   )r0   r0   r   r0   r   r0   r0   ra   )r0   r0   r   r0   r0   r0   r0   rb   )r0   r   r0   r   r   r0   r   é   )r0   r0   r0   r0   r0   r0   r0   é   )r0   r0   r0   r0   r   r0   r0   é	   )r0   r0   r0   r   r0   r0   r0   r   rÝ   rÎ   r0   r3   rT   r   )rA   rB   rR   r9   c                 s   s   | ]}|j jd dV  qdS )F)Ú	normalizeN)Útree_Zcompute_feature_importances©rÇ   ÚtreerO   rO   rP   Ú	<genexpr>¶  s   ÿz.test_importances_asymptotic.<locals>.<genexpr>r£   )rz   ÚarrayrÔ   rL   ÚzerosrÒ   r   rD   rŒ   Úestimators_rA   r#   rµ   rv   )	rÜ   rZ   rE   rF   r6   Ztrue_importancesrÈ   rN   r¸   rO   rÛ   rP   Útest_importances_asymptoticU  sD    0öÿ0

ÿþþüÿ	rè   c                 C   sL   d  | ¡}tjt|d  tt|  ƒ dƒ W d   ƒ n1 s>0    Y  d S )NzfThis {} instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.©Úmatchr±   )Úformatr   Úraisesr   Úgetattrr=   )r?   Úerr_msgrO   rO   rP   Ú!test_unfitted_feature_importancesÂ  s    ÿÿrï   rM   ÚX_type)rå   Z
sparse_csrZ
sparse_csczX, y, lower_bound_accuracyé,  )r5   Ú	n_classesr9   rV   éè  rb   )r5   rò   r7   r9   gÍÌÌÌÌÌä?g
×£p=
Ç?Ú	oob_scoreTÚmicro)Zaveragec                 C   sD  t ||d}t||ddd\}}}}	| dd|dd}
t|
dƒrBJ ‚t|
d	ƒrPJ ‚|
 ||¡ t|ƒrv||	|
 |¡ƒ}n|
 ||	¡}|
j|ksJ ‚t||
j ƒ}|d
ks¶J d|›dƒ‚t|
dƒsÄJ ‚t|
dƒrÒJ ‚t|
d	ƒsàJ ‚|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@J ‚dS )z5Check that OOB score is close to score on a test set.©Zconstructor_namerX   r   rq   é(   T©rA   r‹   rô   r9   Ú
oob_score_Úoob_decision_function_g)\Âõ(¼?z	abs_diff=z is greater than 0.11Úoob_prediction_r0   N)r!   r   r–   rD   ÚcallablerG   r\   rù   rµ   ÚndimrL   rJ   Úsetrú   )rM   rE   rF   rð   Zlower_bound_accuracyrô   r…   r†   r‡   rˆ   Ú
classifierÚ
test_scoreZabs_diffÚexpected_shaperO   rO   rP   Útest_forest_classifier_oobÌ  s:    üü*r  rf   zX, y, lower_bound_r2)r5   r6   Ú	n_targetsr9   çffffffæ?gš™™™™™á?c                 C   s  t ||d}t||ddd\}}}}	| dd|dd}
t|
dƒrBJ ‚t|
d	ƒrPJ ‚|
 ||¡ t|ƒrv||	|
 |¡ƒ}n|
 ||	¡}|
j|ksJ ‚t||
j ƒd
ks¦J ‚t|
dƒs´J ‚t|
d	ƒsÂJ ‚t|
dƒrÐJ ‚|j	dkrè|j
d f}n|j
d |j	f}|
jj
|ks
J ‚dS )z\Check that forest-based regressor provide an OOB score close to the
    score on a test set.rö   rX   r   rq   é2   Trø   rù   rû   r§   rú   r0   N)r!   r   r–   rD   rü   rG   r\   rù   rµ   rý   rL   rû   )rf   rE   rF   rð   Zlower_bound_r2rô   r…   r†   r‡   rˆ   Z	regressorr   r  rO   rO   rP   Útest_forest_regressor_oob  s8    üü
r  r¶   c                 C   sR   | ddddd}t jtdd  | tjtj¡ W d  ƒ n1 sD0    Y  dS )zfCheck that a warning is raised when not enough estimator and the OOB
    estimates will be inaccurate.r0   Tr   ©rA   rô   r‹   r9   z"Some inputs do not have OOB scoresré   N)r   ÚwarnsÚUserWarningrD   rY   rZ   r[   )r¶   Ú	estimatorrO   rO   rP   Útest_forest_oob_warningM  s    ür  c                 C   sZ   t j}t j}d}| ddd}tjt|d | ||¡ W d  ƒ n1 sL0    Y  dS )zaCheck that we raise an error if OOB score is requested without
    activating bootstrapping.
    z6Out of bag estimation only available if bootstrap=TrueTF©rô   r‹   ré   N)rY   rZ   r[   r   rì   Ú
ValueErrorrD   )r¶   rE   rF   rî   r
  rO   rO   rP   Ú(test_forest_oob_score_requires_bootstrap[  s    r  c                 C   s   t j d¡}tj}|jddtjjd dfd}t|ƒ}|dksBJ ‚| ddd}d	}tj	t
|d
 | ||¡ W d  ƒ n1 s‚0    Y  dS )zwCheck that we raise an error with when requesting OOB score with
    multiclass-multioutput classification target.
    ri   r   ra   r1   rk   zmulticlass-multioutputTr  z:The type of target cannot be used to compute OOB estimatesré   N)rz   r{   r|   rY   rZ   r´   rL   r+   r   rì   r  rD   )rM   r   rE   rF   Zy_typer
  rî   rO   rO   rP   Ú6test_classifier_error_oob_score_multiclass_multioutputh  s    r  c              	   C   s
  t j d¡}tj}|jddtjjd dfd}| ddddd}| ||¡ tt	|ƒ|j
ƒ}|jd d	 }t  |dg¡}t|d
|… ƒD ]j\}}	d}
t  d¡}|jD ]@}t|jt	|ƒ|ƒ}||v r¢|
d7 }
|| |	 dd¡¡ ¡ 7 }q¢||
 ||< q†t||jd
|… ƒ d
S )z”Check that multioutput regression with integral values is not interpreted
    as a multiclass-multioutput target and OOB score can be computed.
    ri   r   r4   r1   rk   é   Tr  r•   Nr0   r/   )rz   r{   r|   rY   rZ   r´   rL   rD   r   rJ   Úmax_samplesræ   Ú	enumeraterç   r   r9   rG   ÚreshapeZsqueezer"   rû   )rf   r   rE   rF   r
  Zn_samples_bootstrapZn_samples_testZoob_predZ
sample_idxÚsampleZn_samples_oobZoob_pred_samplerã   Zoob_unsampled_indicesrO   rO   rP   Ú2test_forest_multioutput_integral_regression_targetx  s,    ÿ

ÿr  c                 C   sx   t jtdd t| d W d   ƒ n1 s.0    Y  t jtdd tƒ  tt¡ W d   ƒ n1 sj0    Y  d S )Nz"got an unexpected keyword argumentré   ©rô   zOOB score not supported)r   rì   Ú	TypeErrorr   ÚNotImplementedErrorÚ_set_oob_score_and_attributesrE   rF   r  rO   rO   rP   Ú+test_random_trees_embedding_raise_error_oob–  s    (r  c                 C   s.   t |  ƒ }t|dddœƒ}| tjtj¡ d S )N©r0   r1   )rA   rœ   )rC   r   rD   rY   rZ   r[   )r?   ÚforestrN   rO   rO   rP   Útest_gridsearchž  s    
r  c                 C   s”   | t v rtj}tj}n| tv r&t}t}t|  }|dddd}| ||¡ t	|ƒdksXJ ‚|j
dd | |¡}|j
dd | |¡}t||dƒ dS )	z-Check parallel computations in classificationr4   r2   r   ©rA   r©   r9   r0   r¨   r1   N)rC   rY   rZ   r[   rc   rd   re   r=   rD   rJ   r³   rG   r$   )r?   rE   rF   r¶   r  Úy1Úy2rO   rO   rP   Útest_parallel¦  s    

r!  c           	      C   sº   | t v r*tjd d d… }tjd d d… }n$| tv rNtd d d… }td d d… }t|  }|dd}| ||¡ | 	||¡}t
 |¡}t
 |¡}t|ƒ|jksžJ ‚| 	||¡}||ks¶J ‚d S )Nr1   r   r   )rC   rY   rZ   r[   rc   rd   re   r=   rD   r\   ÚpickleÚdumpsÚloadsÚtypeÚ	__class__)	r?   rE   rF   r¶   Úobjr\   Zpickle_objectÚobj2Zscore2rO   rO   rP   Ú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v r¼tjd	d
˜ | |¡}t|ƒdks0J ‚|d j	dksDJ ‚|d j	dksXJ ‚| 
|¡}t|ƒdkstJ ‚|d j	dksˆJ ‚|d j	dksœJ ‚W d   ƒ n1 s²0    Y  d S )Nr.   r/   r0   r1   r   r2   F©r9   r‹   r™   rš   ©r•   r1   ©r•   r•   )r=   rD   rG   r$   rC   rz   r   rž   rJ   rL   r    ©	r?   r…   r‡   r†   rˆ   r·   Zy_predZprobaZ	log_probarO   rO   rP   Útest_multioutputÓ  sR    ôô



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&J ‚|d
 jdks:J ‚|d jdksNJ ‚| 	|¡}t|ƒdksjJ ‚|d
 jdks~J ‚|d jdks’J ‚W d   ƒ n1 s¨0    Y  d S )Nr.   r/   r0   r1   ÚredÚblueÚgreenÚpurpleÚyellowr   Fr*  r™   rš   r+  r,  )
r=   rD   rG   r%   rz   r   rž   rJ   rL   r    r-  rO   rO   rP   Útest_multioutput_string  sX    ôôü


r4  c                 C   s   t |  }|dd tt¡}|jdks(J ‚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   r1   r/   r0   r.   )rC   rD   rE   rF   r’   r%   r‘   rz   Úvstackrå   rH   )r?   rM   rN   Ú_yrO   rO   rP   Útest_classes_shape?  s    r7  c                  C   s:   t ddd} tjdd\}}|  |¡}t|tjƒs6J ‚d S )Nr4   F)rA   Úsparse_outputrX   ©Úfactor)r   r   Úmake_circlesÚfit_transformÚ
isinstancerz   Zndarray)ÚhasherrE   rF   ÚX_transformedrO   rO   rP   Útest_random_trees_dense_typeR  s    
r@  c                  C   sR   t dddd} t dddd}tjdd\}}|  |¡}| |¡}t| ¡ |ƒ d S )Nr4   Fr   )rA   r8  r9   TrX   r9  )r   r   r;  r<  r%   Útoarray)Zhasher_denseZhasher_sparserE   rF   ZX_transformed_denseÚX_transformed_sparserO   rO   rP   Útest_random_trees_dense_equal_  s    ÿÿ

rC  c                  C   sº   t ddd} tjdd\}}|  |¡}t ddd} t|  |¡ |¡ ¡ | ¡ ƒ |jd |jd kshJ ‚t|j	dd| j
ƒ tdd	}| |¡}tƒ }| ||¡ | ||¡d
ks¶J ‚d S )Nr  r0   r@   rX   r9  r   ro   r1   )Zn_componentsrÀ   )r   r   r;  r<  r%   rD   Ú	transformrA  rL   rŒ   rA   r   r   r\   )r>  rE   rF   r?  ZsvdZ	X_reducedZ
linear_clfrO   rO   rP   Útest_random_hasherr  s    


rE  Úcsc_containerc                 C   sJ   t jdd\}}tddd}| |¡}| | |ƒ¡}t| ¡ | ¡ ƒ d S )Nr   r   r  r0   r@   )r   Úmake_multilabel_classificationr   r<  r%   rA  )rF  rE   rF   r>  r?  rB  rO   rO   rP   Útest_random_hasher_sparse_data‰  s
    
rH  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   r1   c                    s"   g | ]}t d |dd ˆ ˆ¡‘qS )r;   i90  r  )r   rD   )rÇ   r©   )r…   r‡   rO   rP   rÉ   ˜  s   ýÿz'test_parallel_train.<locals>.<listcomp>)r0   r1   r2   rÞ   é   é    c                    s   g | ]}|  ˆ ¡‘qS rO   )rž   )rÇ   rN   )r†   rO   rP   rÉ      rÊ   r0   )r-   Úrandnr´   Úzipr$   )r   r5   r6   ZclfsZprobasZproba1Zproba2rO   )r†   r…   r‡   rP   Útest_parallel_train’  s    ürO  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ªJ ‚d|d d ks¾J ‚d|d d ksÒJ ‚d|d d ksæJ ‚d|d d ksúJ ‚|d d dksJ ‚|d d dks&J ‚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òJ ‚d S )NrI  r   r•   )ró   r0   ©rn   ró   r3   ri   r@   Ú c                 s   s.   | ]&\}}|d kr"d|t |ƒf ndV  qdS ©r   z%d,%d/ú-N©r¼   ©rÇ   ÚfÚtrO   rO   rP   rä   ±  s   ÿz$test_distribution.<locals>.<genexpr>r0   c                    s    g | ]\}}d | ˆ  |f‘qS )rÀ   rO   ©rÇ   rã   rÄ   ©Zn_treesrO   rP   rÉ   ¸  rÊ   z%test_distribution.<locals>.<listcomp>ra   gš™™™™™É?r1   r2   ç333333Ó?z0,1/0,0/--0,2/--)ró   r1   )rB   r9   c                 s   s.   | ]&\}}|d kr"d|t |ƒf ndV  qdS rR  rT  rU  rO   rO   rP   rä   Ð  s   ÿc                 S   s   g | ]\}}||f‘qS rO   rO   rX  rO   rO   rP   rÉ   ×  rÊ   rÞ   )r-   r´   Úrandr   rD   r   r¼   rç   ÚjoinrN  rá   ÚfeatureÚ	thresholdÚsortedÚitemsrJ   rz   Úemptyr{   )r   rE   rF   rg   Zuniquesrã   rO   rY  rP   Útest_distribution¥  s@    


þ



þrb  c                 C   sp   t t }}t|  }|ddddd ||¡}|jd  ¡ dks@J ‚|dddd ||¡}|jd  ¡ dkslJ ‚d S )Nr0   r•   r   )rœ   Zmax_leaf_nodesrA   r9   )rœ   rA   r9   )Úhastie_XÚhastie_yr=   rD   rç   Z	get_depth©r?   rE   rF   r¶   r·   rO   rO   rP   Útest_max_leaf_nodes_max_depthÛ  s    
ÿþrf  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sxJ d | ¡ƒ‚|dddd}| ||¡ |jd jjdk}|jd jj| }t 	|¡t
|ƒd d ksÞJ d | ¡ƒ‚d S )Nr4   r0   r   )Zmin_samples_splitrA   r9   r/   rX   úFailed with {0})rc  rd  r=   rD   rç   rá   Zchildren_leftZn_node_samplesrz   ÚminrJ   rë   )r?   rE   rF   r¶   r·   Znode_idxZnode_samplesrO   rO   rP   Ú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spJ d 
| ¡ƒ‚|dddd}| ||¡ |jd j |¡}t |¡}||dk }t 	|¡t|ƒd d ksÚJ d 
| ¡ƒ‚d S )Nra   r0   r   )ru   rA   r9   r•   rg  g      Ð?)rc  rd  r=   rD   rç   rá   rK   rz   rÁ   rh  rë   rJ   )r?   rE   rF   r¶   r·   ÚoutZnode_countsZ
leaf_countrO   rO   rP   Útest_min_samples_leafþ  s    


rk  c                 C   sÎ   t t }}t|  }tj d¡}| |jd ¡}t |¡}t 	ddd¡D ]‚}||ddd}d| v rfd|_
|j|||d |jd j |¡}	tj|	|d	}
|
|
dk }t |¡||j ksFJ d
 | |j¡ƒ‚qFd S )Nr   rX   rb   r0   )Úmin_weight_fraction_leafrA   r9   ZRandomForestFrª   )Úweightsz,Failed with {0} min_weight_fraction_leaf={1})rc  rd  r=   rz   r{   r|   r[  rL   rŒ   Zlinspacer‹   rD   rç   rá   rK   rÁ   rh  rl  rë   )r?   rE   rF   r¶   r   rm  Ztotal_weightÚfracr·   rj  Znode_weightsZleaf_weightsrO   rO   rP   Útest_min_weight_fraction_leaf  s*    

ÿÿÿþro  Úsparse_containerc                 C   s  t jddd\}}t|  }|ddd ||¡}|ddd ||ƒ|¡}t| |¡| |¡ƒ | tv sl| tv rt| |¡| |¡ƒ t|j	|j	ƒ | tv rÄt| 
|¡| 
|¡ƒ t| |¡| |¡ƒ | tv r
t| |¡ ¡ | |¡ ¡ ƒ t| |¡ ¡ | |¡ ¡ ƒ d S )Nr   r  )r9   r5   r1   )r9   rœ   )r   rG  r=   rD   r$   rK   rC   rc   rG   r±   rž   r    ÚFOREST_TRANSFORMERSrD  rA  r<  )r?   rp  rE   rF   r¶   ZdenseÚsparserO   rO   rP   Útest_sparse_input6  s,    ÿÿ
ÿÿrs  c                 C   s
  t |  ddd}tji ftjddiftjddiftji ffD ]<\}}|tjfd|i|¤Ž}tj}t| ||¡ 	|¡|ƒ q<|j
jtv rÄtt t D ]0}|tj|d}tj}t| ||¡ 	|¡|ƒ q’tjtjd d d	… |d}tjd d d	… }t| ||¡ 	|¡|ƒ d S )
Nr   Fr*  ÚorderÚCÚFr¢   rÎ   r2   )r=   rz   ZasarrayZascontiguousarrayrY   rZ   r[   r$   rD   rG   r
  Zsplitterr    r(   r)   r*   )r?   r¢   r·   Ú	containerÚkwargsrE   rF   rp  rO   rO   rP   Útest_memory_layoutY  s"    üry  c              	   C   sú   t jd d …df }t jd d …df  d¡}t j}tƒ ° t|  }t t¡$ |ddd 	||¡ W d   ƒ n1 st0    Y  |dd}| 	||¡ | t
v s¤| tv rØt t¡ | |¡ W d   ƒ n1 sÎ0    Y  W d   ƒ n1 sì0    Y  d S )Nr   ©r/   r0   r0   r@   r   )rY   rZ   r  r[   r&   r=   r   rì   r  rD   rC   rc   rG   )r?   rE   ZX_2drF   r¶   r·   rO   rO   rP   Útest_1d_inputw  s    2
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_weightr9   ç       @rÀ   ©r   r0   r1   r0   r­   g      Y@r1   )rC   rD   rY   rZ   r[   r#   r±   rz   r5  rH   rŸ   rL   )	r?   rM   Zclf1Zclf2Z
iris_multiZclf3Zclf4r«   r~  rO   rO   rP   Ú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 )
Nr1   r|  r   r}  rX   rÀ   rz  )r.   r1   Úbalanced_subsample)rC   rz   r5  rF   rå   rH   rD   rE   )r?   rM   r6  rN   rO   rO   rP   Ú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 d   ƒ n1 sp0    Y  |dd	d
œgdd}t t¡ | t|¡ W d   ƒ n1 sº0    Y  d S )Nr1   r|  Tr   )r~  Ú
warm_startr9   úJWarm-start fitting without increasing n_estimators does not fit new trees.ré   rX   rÀ   rz  r}  )rC   rz   r5  rF   rå   rH   rD   rE   r   r  r	  rì   r  )r?   rM   r6  rN   Úwarn_msgrO   rO   rP   Útest_class_weight_errorsÊ  s    ÿ*r‡  c                 C   sÆ   t t }}t|  }d }dD ]D}|d u r6||ddd}n|j|d | ||¡ t|ƒ|ksJ ‚q|dddd}| ||¡ tdd	„ |D ƒƒtd
d	„ |D ƒƒks¢J ‚t| |¡| |¡d 	| ¡d d S )N)ra   r4   ri   T)rA   r9   r„  ©rA   r4   Fc                 S   s   g | ]
}|j ‘qS rO   r   râ   rO   rO   rP   rÉ   ô  rÊ   z#test_warm_start.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS rO   r   râ   rO   rO   rP   rÉ   õ  rÊ   rg  )rî   )
rc  rd  r=   r³   rD   rJ   rþ   r%   rK   rë   )r?   rE   rF   r¶   Zest_wsrA   Z	est_no_wsrO   rO   rP   Ú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 )Nra   r0   F©rA   rœ   r„  r9   Tr1   )r„  r9   )rc  rd  r=   rD   r³   r$   rK   )r?   rE   rF   r¶   r·   Úest_2rO   rO   rP   Útest_warm_start_clearý  s    
ÿrŒ  c                 C   sr   t t }}t|  }|dddd}| ||¡ |jdd t t¡ | ||¡ W d   ƒ n1 sd0    Y  d S )Nra   r0   T)rA   rœ   r„  r•   rˆ  )rc  rd  r=   rD   r³   r   rì   r  re  rO   rO   rP   Ú$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 d   ƒ n1 sŠ0    Y  t| 	|¡| 	|¡ƒ d S )
Nra   r2   Tr0   rŠ  r1   r   r…  ré   )
rc  rd  r=   rD   r³   r   r  r	  r%   rK   )r?   rE   rF   r¶   r·   r‹  r†  rO   rO   rP   Ú"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|J ‚|j|jksŒJ ‚|ddddddd}| ||¡ t|d	ƒrºJ ‚|jdd
 t|jƒ||ƒ |j|jksæJ ‚d S )Né   r2   Fr0   T)rA   rœ   r„  r9   r‹   rô   ra   )r„  rô   rA   rù   r  )rc  rd  r=   rD   r³   r–   rù   r&   )r?   rE   rF   r¶   r·   r‹  Zest_3rO   rO   rP   Útest_warm_start_oob5  sJ    
úúúr  c              	   C   s¦   t t }}t|  }|ddddd}tj|d|jd^}| ||¡ tjt	dd | ||¡ W d   ƒ n1 sr0    Y  | 
¡  W d   ƒ n1 s˜0    Y  d S )Nr4   T)rA   r„  r‹   rô   r  )Úwrapsz%Warm-start fitting without increasingré   )rc  rd  r=   r   Úobjectr  rD   r   r  r	  Zassert_called_once)r?   rE   rF   r¶   r·   Z!mock_set_oob_score_and_attributesrO   rO   rP   Útest_oob_not_computed_twiceh  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 rO   rO   )rÇ   ÚchrO   rO   rP   rÉ     rÊ   z&test_dtype_convert.<locals>.<listcomp>ZABCDEFGHIJKLMNOPQRSTU)r   rz   ÚeyerD   rG   r%   r‘   )rò   rÿ   rE   rF   ÚresultrO   rO   rP   Útest_dtype_convert}  s    
r—  c                    sä   t t }}|jd }t|  }|ddddd}| ||¡ | |¡\‰‰ˆjd ˆd ks\J ‚ˆjd |ksnJ ‚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   ra   r0   FrŠ  r/   c                 S   s   g | ]}|j j‘qS rO   )rá   Ú
node_count)rÇ   ÚerO   rO   rP   rÉ   ”  rÊ   z&test_decision_path.<locals>.<listcomp>c                    s$   g | ]\}}ˆ|ˆˆ  | f ‘qS rO   rO   )rÇ   rÈ   rË   ©Zest_idZ	indicatorZn_nodes_ptrrO   rP   rÉ   š  s   ÿ)rL   )rc  rd  rL   r=   rD   Zdecision_pathr%   rz   Údiffrç   rK   rÒ   r  r$   rŸ   )r?   rE   rF   r5   r¶   r·   ÚleavesZleave_indicatorrO   rš  rP   Ú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sBJ ‚qBq"d S )Nr­   r0   r<   r§   )Úmin_impurity_decrease)	r   r   r   r   r   r   rD   rç   rž  )rE   rF   Zall_estimatorsZ	Estimatorr·   rã   rO   rO   rP   Útest_min_impurity_decrease¡  s    ü

rŸ  c                  C   s¤   t dd} t d¡}g d¢}d}tjt|d |  ||¡ W d   ƒ n1 sP0    Y  g d¢}d}tjt|d |  ||¡ W d   ƒ n1 s–0    Y  d S )	Nrs   ©rR   )r2   r2   )r/   r0   r2   zNSome value\(s\) of y are negative which is not allowed for Poisson regression.ré   )r   r   r   zLSum of y is not strictly positive which is necessary for Poisson regression.)r   rz   ræ   r   rì   r  rD   )r·   rE   rF   rî   rO   rO   rP   Ú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|i |¤Ž d S )Nr   )rÄ   ÚsuperÚ__init__)ÚselfÚargsrx  ©r&  rO   rP   r¤  Ê  s    zMyBackend.__init__c                    s   |  j d7  _ tƒ  ¡ S )Nr0   )rÄ   r£  Ú
start_call)r¥  r§  rO   rP   r¨  Î  s    zMyBackend.start_call)Ú__name__Ú
__module__Ú__qualname__r¤  r¨  Ú__classcell__rO   rO   r§  rP   r¢  É  s   r¢  Útestingc                  C   sž   t ddd} t d¡ \}}|  tt¡ W d   ƒ n1 s<0    Y  |jdksTJ ‚t d¡\}}|  t¡ W d   ƒ n1 s‚0    Y  |jdksšJ ‚d S )Nr4   r1   )rA   r©   r­  r   )r   ÚjoblibZparallel_backendrD   rE   rF   rÄ   rž   )rN   Úbar©   Ú_rO   rO   rP   Ú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
sDJ ‚d S )Nr  r2   r0   )r5   r7   r9   rò   ra   ri   éÈ   )ru   r9   rA   gH¯¼šò×z>)Zabs_tol)r   r   rD   ÚmathÚiscloser±   rŒ   )rE   rF   rN   rO   rO   rP   Ú#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)r4   r4   )r4   r4   rˆ  rÎ   )rz   ræ   rŸ   r   rD   r%   r±   Úfloat64)rE   rF   ZgbrrO   rO   rP   Ú*test_forest_degenerate_feature_importancesð  s    

r·  c                 C   sR   t |  ddd}d}tjt|d | tt¡ W d   ƒ n1 sD0    Y  d S )NFrX   ©r‹   r  zl`max_sample` cannot be set if `bootstrap=False`. Either switch to `bootstrap=True` or set `max_sample=None`.ré   )r>   r   rì   r  rD   rE   rF   )r?   r·   rî   rO   rO   rP   Útest_max_samples_bootstrapø  s
    ÿr¹  c                 C   sV   t |  dtdƒd}d}tjt|d | tt¡ W d   ƒ n1 sH0    Y  d S )NTg    eÍÍAr¸  z=`max_samples` must be <= n_samples=6 but got value 1000000000ré   )r>   r¼   r   rì   r  rD   rE   rF   )r?   r·   rê   rO   rO   rP   Ú 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ˆJ ‚d S )Nr  rZ  r   )Z
train_sizerr   r9   TrÀ   ©r‹   r  r9   )	r   rd   re   rc   rD   rG   r   r   rŽ   )r?   r…   r†   r‡   rˆ   Ú
ms_1_modelZms_1_predictÚms_None_modelZms_None_predictZms_1_msZ
ms_None_msrO   rO   rP   Ú$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   )r9   ZstratifyTrÀ   r»  )	r   r®   r°   rC   rD   rž   rz   r­  r"   )	r?   r…   r†   r‡   r°  r¼  Z
ms_1_probar½  Zms_None_probarO   rO   rP   Ú%test_max_samples_boundary_classifiers$  s    ÿÿÿr¿  Úcsr_containerc                 C   s`   g d¢g}| g d¢gƒ}t ƒ }d}tjt|d | ||¡ W d   ƒ n1 sR0    Y  d S )Nr“   r”   z3sparse multilabel-indicator for y is not supported.ré   )r   r   rì   r  rD   )rÀ  rE   rF   r·   ÚmsgrO   rO   rP   Útest_forest_y_sparse7  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ŠJ |ƒ‚d S )Nr0   i'  r1   r   )rA   r9   r  z=Tree without `max_samples` restriction should have more nodes)rz   r{   r|   rM  rD   rç   rá   r˜  )	rÃ  r   rE   rF   Zest1Zest2Ztree1Ztree2rÁ  rO   rO   rP   Ú'test_little_tree_with_small_max_samplesA  s&    ýýrÄ  ÚForestc                 C   sN   ddl m} t dd¡}|j\}}|||ƒ}t|  dd|d}| t|¡ d S )Nr   )ÚMSEr/   r0   r1   )rA   r©   rR   )Zsklearn.tree._criterionrÆ  re   r  rL   rc   rD   rd   )rÅ  rÆ  rF   r5   Z	n_outputsZmse_criterionr·   rO   rO   rP   Ú-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•   r1   F)rA   rœ   r8  r9   c                 S   s    g | ]\}}d |› d|› ‘qS )Zrandomtreesembedding_r°  rO   )rÇ   rã   ÚleafrO   rO   rP   rÉ   x  s   ýzAtest_random_trees_embedding_feature_names_out.<locals>.<listcomp>))r   r1   )r   r2   )r   ra   )r   rb   r  )r0   r2   )r0   ra   )r0   rb   N)	rz   r{   r|   rµ   rM  r   rD   Zget_feature_names_outr%   )r9   rE   r>  ÚnamesZexpected_namesrO   rO   rP   Ú-test_random_trees_embedding_feature_names_outp  s    ÿþürÊ  c                 C   sf   |  tjjdttdd¡ tjjdd}t	dd|d\}}| |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²  r:   Tr¥   r1   )r©   r9   )ZcvN)ÚsetattrÚsklearnZensembleZ_forestr   r,   rz   r{   r|   r   r   r   )rÀ  Zmonkeypatchr   rE   rF   rN   rO   rO   rP   Ú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_yr4   g-Cëâ6?r   )rA   r  r~  r9   N)r   Z	load_winer   rD   )r~  rE   rF   r  rO   rO   rP   Ú.test_round_samples_to_one_when_samples_too_lowž  s
    ÿrÏ  rË  r‹   c                 C   sV  t ddd\}}|rd}nd}| d|d||d}| ||¡ |j ¡ }t||jƒ |j}t|tƒsfJ ‚t|ƒt|ƒkszJ ‚|d j	t
jksŽJ ‚tt|ƒƒD ]d}	|rât||	 ƒt|ƒd	 ks¾J ‚tt
 ||	 ¡ƒt||	 ƒk sþJ ‚qštt||	 ƒƒt|ƒksšJ ‚qšd}
||
 }||
 }|| }|| }|jj}t|ƒ}| ||¡ |jj}t||ƒ dS )
z›Estimators_samples_ property should be consistent.

    Tests consistency across fits and whether or not the seed for the random generator
    is set.
    r²  r0   r<   rX   Nr4   )rA   r  rB   r9   r‹   r   r1   )r   rD   Zestimators_samples_r¦   r%   rç   r=  rÑ   rJ   r¢   rz   Zint32rÒ   rÆ   rþ   rá   Úvaluer
   r"   )rÃ  r‹   rË  rE   rF   r  r·   Zestimators_samplesZ
estimatorsrÈ   Zestimator_indexZestimator_samplesr
  r…   r‡   Zorig_tree_valuesZnew_tree_valuesrO   rO   rP   Útest_estimators_samples«  sB    	û
$rÑ  zmake_data, Forestc                 C   sè   t j d¡}d\}}| |||d\}}| ¡ }t j||jddg|jddgd< t  |¡ ¡ s`J ‚t	||dd	\}}	}
}||d
d}| 
||
¡ | |	|¡}t	||dd	\}}}
}||d
d}| 
||
¡ | ||¡}|d| ksäJ ‚dS )zJCheck that forest can deal with missing values and has decent performance.r   )ró   r4   r:   FTçffffffî?r¤   ©rn   rÅ   r   r  )r9   rA   ry   N)rz   r{   r|   r¦   ÚnanÚchoicerL   ÚisnanÚanyr   rD   r\   )Z	make_datarÅ  r   r5   r6   rE   rF   Z	X_missingZX_missing_trainZX_missing_testr‡   rˆ   Zforest_with_missingZscore_with_missingr…   r†   r  Zscore_without_missingrO   rO   rP   Ú test_missing_values_is_resilientä  s"     ÿrØ  c                 C   s  t j d¡}d}d}|j|dfd}|jdd|d}|jdd	g|d
dgd}| t¡}||  ||< |j|d}t j||< t  	|¡ 
¡ sŒJ ‚| ¡ }	||	dd…df< t|	||dd\}
}}}}}| dd |
|¡}| dd ||¡}| ||¡}||ksüJ ‚|| ||¡ksJ ‚dS )z_Check that the forest learns when missing values are only present for
    a predictive feature.r   rñ   g      è?r4   rP  r1   )rm   rn   FTrÒ  r¤   rÓ  Nra   r   )rz   r{   r|   Zstandard_normalr´   rÕ  r¯   rÔ   rÔ  rÖ  r×  r¦   r   rD   r\   )rÅ  r   r5   Zexpected_scoreZX_non_predictiverF   ZX_random_maskZy_maskZpredictive_featureZX_predictiveZX_predictive_trainZX_predictive_testZX_non_predictive_trainZX_non_predictive_testr‡   rˆ   Zforest_predictiveZforest_non_predictiveZpredictive_test_scorerO   rO   rP   Ú test_missing_value_is_predictive  s8    

	ùÿrÙ  c                 C   sn   t  g d¢t jddgg¡}ddg}| dd}d}tjt|d	 | ||¡ W d
  ƒ n1 s`0    Y  d
S )zDRaise error for unsupported criterion when there are missing values.r€  r   r  rX   rÀ   r_   r   z .*does not accept missing valuesré   N)rz   rå   rÔ  r   rì   r  rD   )rÅ  rE   rF   r  rÁ  rO   rO   rP   Ú=test_non_supported_criterion_raises_error_with_missing_values>  s    
rÚ  )r  )¶Ú__doc__Ú	itertoolsr³  r"  Úcollectionsr   Ú	functoolsr   r   r   Útypingr   r   Zunittest.mockr   r®  Únumpyrz   r   Zscipy.specialr	   rÍ  r
   r   Zsklearn.datasetsr   r   Zsklearn.decompositionr   Zsklearn.dummyr   Zsklearn.ensembler   r   r   r   r   Zsklearn.ensemble._forestr   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&   r'   Zsklearn.utils.fixesr(   r)   r*   Zsklearn.utils.multiclassr+   Zsklearn.utils.parallelr,   Zsklearn.utils.validationr-   rE   rF   rH   rI   r®   r°   Z	load_irisrY   r   Zpermutationr[   rn   ÚpermrZ   Zmake_regressionrd   re   rc  rd  r¯   Zfloat32ÚparallelZget_active_backendr&  ZDEFAULT_JOBLIB_BACKENDrC   rc   rq  Údictr=   ÚstrÚ__annotations__Úupdater¦   r>   ÚmarkZparametrizerQ   r]   rh   rŠ   r   r˜   r¡   r¶  Úchainrº   rè   rï   rÍ   rG  r  r  r  r  r  r  r  r  r!  r)  r.  r4  r7  r@  rC  rE  rH  rO  rb  rf  ri  rk  ro  rs  ry  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Ñ  rØ  rÙ  rÚ  rO   rO   rO   rP   Ú<module>   s  $	(ù
þþÿ




ÿ5


þþ*m
	ÿþÿÿüýÿþðþ*ÿÿüÿÿüùþ(








3
7

6



ÿ

/






2










	



6üþ	
üþ	
)