o
    \iQ                     @   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ZQeQRePjSjT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*< efieb efiec efied ebj Zkeegef ehd+< ekiec ejlmd,ebd-d. Znejlmd,ebejlmd/d0d1d2 Zoejlmd,ecejlmd/d3d4d5 Zpd6d7 Zqejlmd/d8d9d: Zrejlmd,ecd;d< Zsejlmd,ebd=d> Ztejlmd?ejuej]fejlmd@eve	ebdAdBge	ecg dCdDdE ZwdFdG Zxejlmd,efdHdI ZyejlmdJebz ejlmdKg dLejlmdMg 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jlmdVdWee,dXdYgdZd[ Z|ejlmd\ecz ejlmdKg dLejlmd]g ejWd d!ddd^d_R g ejWd d!ddd^d`R gejlmdVdWe+gdadb Z}ejlmdcekz ddde Z~ejlmdcekz dfdg ZejlmdJebz dhdi Zejlmd\ecz djdk ZejlmdVdWd"gdldm Zejlmd,ebdndo Zejlmd,ekdpdq Zejlmd,ekdrds Zejlmd,ekdtdu Zejlmd,ebdvdw Zejlmd,ebdxdy Zdzd{ Zd|d} Zd~d ZejlmdeAdd Zdd Zdd Zejlmd,efdd Zejlmd,efdd Zejlmd,efdd Zejlmd,efdd Zejlmd,efejlmde@eA eB dd Zejlmd,ekejlmd?ejuej]fdd Zejlmd,efdd Zejlmd,ebdd Zejlmd,ebdd Zejlmd,ebdd Zejlmd,efdd Zejlmd,efdd Zejlmd,efdd Zejlmd,efdd Zejlmd,ekdd Zejlmd,ekdd ZdddZejlmd,ekdd Zdd Zdd ZG dd deaZede e>dd Zdd Zdd Zejlmd,ekdd Zejlmd,ekdd Zejlmd,ecdd Zejlmd,ebdd ZejlmdeBddĄ Zejlmde"e#gddǄ Zejlmdecddʄ Zdd̄ ZejlmdeBdd΄ Zejlmdddgdd҄ ZejlmdddgejlmddWd"gejlmdekz ddք ZejlmdejWe#feje"fejWe!feje fgddل Zejlmde"e#e!e gddۄ Zejlmdecz dd݄ Zd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_informativen_redundant
n_repeatedshufflerandom_stater5   r6   r;      r5   r;   )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s=J |	t}|j
tt|jfksNJ dS )z&Check classification on a toy dataset.r4   r0   n_estimatorsr;   )rC   max_featuresr;   N)FOREST_CLASSIFIERSfitXyr%   predictTtrue_resultlenapplyshaperC   )rA   ForestClassifierclfleaf_indices rR   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/ensemble/tests/test_forest.pytest_classification_toyy   s   
rT   	criterion)ginilog_lossc                 C   s   t |  }|d|dd}|tjtj |tjtj}|dks'J d||f |d|ddd}|tjtj |tjtj}|dksKJ d||f d S )	Nr4   r0   rC   rU   r;   ?z'Failed with criterion %s and score = %fr1   rC   rU   rD   r;         ?)rE   rF   irisdatatargetscore)rA   rU   rO   rP   r_   rR   rR   rS   test_iris_criterion   s   r`   )squared_errorabsolute_errorfriedman_msec                 C   s   t |  }|d|dd}|tt |tt}|dks#J d||f |d|ddd}|tt |tt}|dksCJ d	||f d S )
N   r0   rX   g(\?z:Failed with max_features=None, criterion %s and score = %f   rZ   gq=
ףp?z7Failed with max_features=6, criterion %s and score = %f)FOREST_REGRESSORSrF   X_regy_regr_   )rA   rU   ForestRegressorregr_   rR   rR   rS   test_regression_criterion   s(   
rk   c                  C   sB  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 ]4\}}}t|||}t|t ||dd}t|||}|dkr||k sJ |d| k sJ qjdS )zTest 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   axislam	test_sizer;   poissonr4   sqrt)rU   min_samples_leafrD   r;   ra   mean)strategytraintestgư>N皙?)nprandomRandomStater   make_low_rank_matrixuniformmaxrx   expr   r   rF   r   r   rI   clip)rngn_trainn_testr6   rG   coefrH   X_trainX_testy_trainy_test
forest_poi
forest_msedummy	data_name
metric_poi
metric_msemetric_dummyrR   rR   rS   test_poisson_vs_mse   s@   

r   )rx   ra   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sOJ dS )z9 "Test that sum(y_pred)==sum(y_true) on the training set.rl   rm   r<   r.   r1   rn   r   rr   rt   r4   F)rU   rC   	bootstrapr;   N)r   r   r   r   r   r   r   rx   r   r   rF   sumrI   pytestapprox)	rU   r   r   r   r6   rG   r   rH   rj   rR   rR   rS   #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r*J t|dr1J d S )	Nr   r;   classes_
n_classes_r0   r1   r2      rd   re   r0   r1   )rf   hasattrrF   )rA   rrR   rR   rS   test_regressor_attributes  s   r   c                 C   s   t |  }tjdd> |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    d S 1 sKw   Y  d S )Nignoredivider4   r0   )rC   r;   rD   	max_depthrr   r   )rE   r   errstaterF   r\   r]   r^   r$   r   predict_probaonesrN   r   predict_log_proba)rA   rO   rP   rR   rR   rS   test_probability  s   $"r   dtypezname, criterionrV   rW   )ra   rc   rb   c                 C   s`  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sDJ t
|d d
 d	ksQJ |j}|jdd |j}
t||
 tdddt|}|dd|d}|j|||d |j}t
|dksJ dD ]#}|dd|d}|j|||| d |j}t||  |k sJ qd S )N{Gz?rb   皙?Fcopyr4   r   rX   皙?r2   r1   n_jobsr0   )rC   r;   rU   sample_weight        )r[   d   )rf   X_largeastypey_larger?   rF   feature_importances_r   r   rN   all
set_paramsr$   r-   randintrL   absr{   )r   rA   rU   	tolerancerG   rH   ForestEstimatorestimportancesn_importantimportances_parallelr   scaleimportances_bisrR   rR   rS   test_importances$  s8   	
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 ]
}| |||||< qXtddddd||}tdd |j	D |j
 }t|t| t ||  dk sJ d S )Nc                 S   s*   | dk s| |kr
dS t t|t| ddS )Nr   T)exact)r	   int)knrR   rR   rS   binomial[  s   *z-test_importances_asymptotic.<locals>.binomialc                 S   sF   t | }d}t| D ]}d| | }|dkr ||t| 8 }q|S )Nr         ?r   )rL   r   bincountlog2)samplesr5   entropycountprR   rR   rS   r   ^  s   z,test_importances_asymptotic.<locals>.entropyc              
      sb  j \}}tt|}||  fddt|D d}t|D ]}d||||   }t||D ]z t fddt|D  D ]i}	tj|td}
t|D ]}|
d d  | f |	| kM }
qP|
d d f ||
 }}t	|dkrg }|  D ]}|d d | f |k}|
||  q~||d |  |tfdd|D   7 }qCq3q!|S )	Nc                    s"   g | ]}t  d d |f qS )N)r   unique).0i)rG   rR   rS   
<listcomp>n  s   " zGtest_importances_asymptotic.<locals>.mdi_importance.<locals>.<listcomp>r   r   c                    s   g | ]} |  qS rR   rR   )r   j)BvaluesrR   rS   r   y      r   r   c                    s    g | ]} |t |  qS rR   )rL   )r   c)r   n_samples_brR   rS   r     s    )rN   listrangepopr   r   r   r   boolrL   appendr   )X_mrG   rH   r5   r6   featuresimpr   r   bmask_br   X_y_childrenximask_xir   r   )r   rG   r   r   rS   mdi_importancei  sH   

 "
 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   rd   )r0   r0   r   r0   r0   r0   r0   re   )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   rW   r   )rC   rD   rU   r;   c                 s   s    | ]
}|j jd dV  qdS )F)	normalizeN)tree_compute_feature_importancesr   treerR   rR   rS   	<genexpr>  s
    
z.test_importances_asymptotic.<locals>.<genexpr>r   )r   arrayr   rN   zerosr   r   rF   r   estimators_rC   r#   r   r{   )	r   r]   rG   rH   r6   true_importancesr   rP   r   rR   r   rS   test_importances_asymptoticV  sD   00

	r  c                 C   sN   d | }tjt|d tt|   d W d    d S 1 s w   Y  d S )NzfThis {} instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.matchr   )formatr   raisesr   getattrr?   )rA   err_msgrR   rR   rS   !test_unfitted_feature_importances  s   "r  rO   X_type)r   
sparse_csr
sparse_csczX, y, lower_bound_accuracy,  )r5   	n_classesr;   rY     re   )r5   r  r7   r;   g?g
ףp=
?	oob_scoreTmicro)averagec                 C   s@  t ||d}t||ddd\}}}}	| dd|dd}
t|
dr!J t|
d	r(J |
|| t|r;||	|
|}n|
||	}|
j|ksHJ t||
j }|d
ks[J d|dt|
dsbJ t|
driJ t|
d	spJ |j	dkr|j
d tt|f}n|j
d tt|dddf |j
d f}|
jj
|ksJ dS )z5Check that OOB score is close to score on a test set.constructor_namer[   r   rv   (   TrC   r   r  r;   
oob_score_oob_decision_function_g)\(?z	abs_diff=z is greater than 0.11oob_prediction_r0   N)r!   r   r   rF   callablerI   r_   r  r   ndimrN   rL   setr  )rO   rG   rH   r	  lower_bound_accuracyr  r   r   r   r   
classifier
test_scoreabs_diffexpected_shaperR   rR   rS   test_forest_classifier_oob  s:   
*r!  ri   zX, y, lower_bound_r2)r5   r6   	n_targetsr;   ffffff?g?c                 C   s  t ||d}t||ddd\}}}}	| dd|dd}
t|
dr!J t|
d	r(J |
|| t|r;||	|
|}n|
||	}|
j|ksHJ t||
j d
ksSJ t|
dsZJ t|
d	saJ t|
drhJ |j	dkrt|j
d f}n|j
d |j	f}|
jj
|ksJ dS )z\Check that forest-based regressor provide an OOB score close to the
    score on a test set.r  r[   r   rv   2   Tr  r  r  r   r  r0   N)r!   r   r   rF   r  rI   r_   r  r   r  rN   r  )ri   rG   rH   r	  lower_bound_r2r  r   r   r   r   	regressorr  r   rR   rR   rS   test_forest_regressor_oob  s8   
r'  r   c                 C   sT   | ddddd}t jtdd |tjtj W d   dS 1 s#w   Y  dS )zfCheck that a warning is raised when not enough estimator and the OOB
    estimates will be inaccurate.r0   Tr   rC   r  r   r;   z"Some inputs do not have OOB scoresr  N)r   warnsUserWarningrF   r\   r]   r^   )r   	estimatorrR   rR   rS   test_forest_oob_warningN  s   "r,  c                 C   s\   t j}t j}d}| ddd}tjt|d ||| W d   dS 1 s'w   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)r\   r]   r^   r   r  
ValueErrorrF   )r   rG   rH   r  r+  rR   rR   rS   (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s!J | ddd}d	}tj	t
|d
 ||| W d   dS 1 sBw   Y  dS )zwCheck that we raise an error with when requesting OOB score with
    multiclass-multioutput classification target.
    rl   r   rd   r1   rn   zmulticlass-multioutputTr-  z:The type of target cannot be used to compute OOB estimatesr  N)r   r   r   r\   r]   r   rN   r+   r   r  r.  rF   )rO   r   rG   rH   y_typer+  r  rR   rR   rS   6test_classifier_error_oob_score_multiclass_multioutputi  s   "r1  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 ]5\}}	d}
t d}|jD ] }t|jt	||}||v rq|
d7 }
|||	dd 7 }qQ||
 ||< qCt||jd
|  d
S )zCheck that multioutput regression with integral values is not interpreted
    as a multiclass-multioutput target and OOB score can be computed.
    rl   r   r4   r1   rn      Tr(  r   Nr0   r/   )r   r   r   r\   r]   r   rN   rF   r   rL   max_samplesr   	enumerater   r   r;   rI   reshapesqueezer"   r  )ri   r   rG   rH   r+  n_samples_bootstrapn_samples_testoob_pred
sample_idxsamplen_samples_ooboob_pred_sampler   oob_unsampled_indicesrR   rR   rS   2test_forest_multioutput_integral_regression_targety  s.   

r?  c                 C   sz   t jtdd t| d W d    n1 sw   Y  t jtdd t tt W d    d S 1 s6w   Y  d S )Nz"got an unexpected keyword argumentr  r  zOOB score not supported)r   r  	TypeErrorr   NotImplementedError_set_oob_score_and_attributesrG   rH   r@  rR   rR   rS   +test_random_trees_embedding_raise_error_oob  s   "rD  c                 C   s.   t |   }t|ddd}|tjtj d S )Nr0   r1   )rC   r   )rE   r   rF   r\   r]   r^   )rA   forestrP   rR   rR   rS   test_gridsearch  s   
rG  c                 C   s   | t v rtj}tj}n| tv rt}t}t|  }|dddd}||| t	|dks,J |j
dd ||}|j
dd ||}t||d dS )	z-Check parallel computations in classificationr4   r2   r   rC   r   r;   r0   r   r1   N)rE   r\   r]   r^   rf   rg   rh   r?   rF   rL   r   rI   r$   )rA   rG   rH   r   rF  y1y2rR   rR   rS   test_parallel  s   

rK  c           	      C   s   | t v rtjd d d }tjd d d }n| tv r'td d d }td d d }t|  }|dd}||| |	||}t
|}t
|}t||jksOJ |	||}||ks[J d S )Nr1   r   r   )rE   r\   r]   r^   rf   rg   rh   r?   rF   r_   pickledumpsloadstype	__class__)	rA   rG   rH   r   objr_   pickle_objectobj2score2rR   rR   rS   test_pickle  s   


rU  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 rtjd	d
G ||}t|dksJ |d j	dksJ |d j	dksJ |
|}t|dksJ |d j	dksJ |d j	dksJ W d    d S 1 sw   Y  d S d S )Nr.   r/   r0   r1   r   r2   Fr;   r   r   r   r   r1   r   r   )r?   rF   rI   r$   rE   r   r   r   rL   rN   r   	rA   r   r   r   r   r   y_predproba	log_probarR   rR   rS   test_multioutput  sV   


"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G ||}t|dksJ |d
 jdksJ |d jdksJ |	|}t|dksJ |d
 jdksJ |d jdksJ W d    d S 1 sw   Y  d S )Nr.   r/   r0   r1   redbluegreenpurpleyellowr   FrV  r   r   rW  rX  )
r?   rF   rI   r%   r   r   r   rL   rN   r   rY  rR   rR   rS   test_multioutput_string  sZ   


"rc  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.   )rE   rF   rG   rH   r   r%   r   r   vstackr   rJ   )rA   rO   rP   _yrR   rR   rS   test_classes_shape@  s   rf  c                  C   s:   t ddd} tjdd\}}| |}t|tjsJ d S )Nr4   F)rC   sparse_outputr[   factor)r   r   make_circlesfit_transform
isinstancer   ndarray)hasherrG   rH   X_transformedrR   rR   rS   test_random_trees_dense_typeS  s   
rp  c                  C   sR   t dddd} t dddd}tjdd\}}| |}||}t| | d S )Nr4   Fr   )rC   rg  r;   Tr[   rh  )r   r   rj  rk  r%   toarray)hasher_densehasher_sparserG   rH   X_transformed_denseX_transformed_sparserR   rR   rS   test_random_trees_dense_equal`  s   

rv  c                  C   s   t ddd} tjdd\}}| |}t ddd} t| || |  |jd |jd ks4J t|j	dd| j
 tdd	}||}t }||| |||d
ks[J d S )Nr2  r0   rB   r[   rh  r   rr   r1   )n_componentsr   )r   r   rj  rk  r%   rF   	transformrq  rN   r   rC   r   r   r_   )rn  rG   rH   ro  svd	X_reduced
linear_clfrR   rR   rS   test_random_hashers  s   


r|  csc_containerc                 C   sJ   t jdd\}}tddd}||}|| |}t| |  d S )Nr   r   r2  r0   rB   )r   make_multilabel_classificationr   rk  r%   rq  )r}  rG   rH   rn  ro  ru  rR   rR   rS   test_random_hasher_sparse_data  s
   
r  c                     s~   t d} d\}}| ||| dd|fdddD }| ||  fdd|D }t|D ]	\}}t|| q3d S )	N!0  )P   r2  r   r1   c                    s"   g | ]}t d |dd qS )r=   i90  rH  )r   rF   )r   r   )r   r   rR   rS   r     s    z'test_parallel_train.<locals>.<listcomp>)r0   r1   r2   r          c                    s   g | ]}|  qS rR   )r   )r   rP   )r   rR   rS   r     s    )r-   randnr   	itertoolspairwiser$   )r   r5   r6   clfsprobasproba1proba2rR   )r   r   r   rS   test_parallel_train  s   r  c                     s  t d} | jdddd}| d}d t dd	||}tt}|jD ]}d
dd t	|j
j|j
jD }||  d7  < q$t fdd| D }t|dksUJ d|d d ks_J d|d d ksiJ d|d d kssJ d|d d ks}J |d d dksJ |d d dksJ 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 ]}d
dd t	|j
j|j
jD }||  d7  < qdd | D }t|dksJ d S )Nr  r   r   )r  r0   rq   r  r3   rl   rB    c                 s   0    | ]\}}|d krd|t |f ndV  qdS r   z%d,%d/-Nr   r   ftrR   rR   rS   r     
    
z$test_distribution.<locals>.<genexpr>r0   c                    s    g | ]\}}d |   |fqS )r   rR   r   r   r   n_treesrR   rS   r     s     z%test_distribution.<locals>.<listcomp>rd   g?r1   r2   333333?z0,1/0,0/--0,2/--)r  r1   )rD   r;   c                 s   r  r  r  r  rR   rR   rS   r     r  c                 S   s   g | ]\}}||fqS rR   rR   r  rR   rR   rS   r     r   r   )r-   r   randr   rF   r   r   r   joinzipr   feature	thresholdsorteditemsrL   r   emptyr   )r   rG   rH   rj   uniquesr   rR   r  rS   test_distribution  s@   






r  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s6J d S )Nr0   r   r   )r   max_leaf_nodesrC   r;   )r   rC   r;   )hastie_Xhastie_yr?   rF   r   	get_depthrA   rG   rH   r   r   rR   rR   rS   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s<J d| |dddd}||| |jd jjdk}|jd jj| }t	|t
|d d ksoJ d| d S )Nr4   r0   r   )min_samples_splitrC   r;   r/   r[   Failed with {0})r  r  r?   rF   r   r   children_leftn_node_samplesr   minrL   r  )rA   rG   rH   r   r   node_idxnode_samplesrR   rR   rS   test_min_samples_split  s   
(,r  c                 C   s   t t}}t|  }|dddd}||| |jd j|}t|}||dk }t	|dks8J d
| |dddd}||| |jd j|}t|}||dk }t	|t|d d ksmJ d
| d S )Nrd   r0   r   )rz   rC   r;   r   r  g      ?)r  r  r?   rF   r   r   rM   r   r   r  r  rL   )rA   rG   rH   r   r   outnode_counts
leaf_countrR   rR   rS   test_min_samples_leaf  s   


,r  c                 C   s   t t}}t|  }tjd}||jd }t|}t	dddD ]A}||ddd}d| v r3d|_
|j|||d |jd j|}	tj|	|d	}
|
|
dk }t|||j ksdJ d
| |jq#d S )Nr   r[   re   r0   )min_weight_fraction_leafrC   r;   RandomForestFr   )weightsz,Failed with {0} min_weight_fraction_leaf={1})r  r  r?   r   r   r   r  rN   r   linspacer   rF   r   r   rM   r   r  r  r  )rA   rG   rH   r   r   r  total_weightfracr   r  node_weightsleaf_weightsrR   rR   rS   test_min_weight_fraction_leaf  s*   

r  sparse_containerc                 C   s  t jddd\}}t|  }|ddd||}|ddd|||}t|||| | tv s6| tv rHt|||| t|j	|j	 | tv rbt|
||
| t|||| | tv rt|| ||  t|| ||  d S d S )Nr   r$  )r;   r5   r1   )r;   r   )r   r~  r?   rF   r$   rM   rE   rf   rI   r   r   r   FOREST_TRANSFORMERSrx  rq  rk  )rA   r  rG   rH   r   densesparserR   rR   rS   test_sparse_input7  s.   r  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 rbtt t D ]}|tj|d}tj}t|||	|| qItjtjd d d	 |d}tjd d d	 }t|||	|| d S )
Nr   FrV  orderCFr   r   r2   )r?   r   asarrayascontiguousarrayr\   r]   r^   r$   rF   rI   r+  splitterr    r(   r)   r*   )rA   r   r   	containerkwargsrG   rH   r  rR   rR   rS   test_memory_layoutZ  s"   r  c              	   C   s  t jd d df }t jd d df d}t j}t i t|  }tt |ddd	|| W d    n1 s:w   Y  |dd}|	|| | t
v sR| tv rttt || W d    n1 sgw   Y  W d    d S W d    d S W d    d S 1 sw   Y  d S )Nr   r/   r0   r0   rB   r   )r\   r]   r5  r^   r&   r?   r   r  r.  rF   rE   rf   rI   )rA   rG   X_2drH   r   r   rR   rR   rS   test_1d_inputx  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_weightr;          @r   r   r0   r1   r0   r   g      Y@r1   )rE   rF   r\   r]   r^   r#   r   r   rd  rJ   r   rN   )	rA   rO   clf1clf2
iris_multiclf3clf4r   r  rR   rR   rS   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  r[   r   r  )r.   r1   balanced_subsample)rE   r   rd  rH   r   rJ   rF   rG   )rA   rO   re  rP   rR   rR   rS   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 s8w   Y  |dd	d
gdd}tt |t| W d    d S 1 s^w   Y  d S )Nr1   r  Tr   )r  
warm_startr;   JWarm-start fitting without increasing n_estimators does not fit new trees.r  r[   r   r  r  )rE   r   rd  rH   r   rJ   rF   rG   r   r)  r*  r  r.  )rA   rO   re  rP   warn_msgrR   rR   rS   test_class_weight_errors  s   "r  c                 C   s   t t}}t|  }d }dD ]"}|d u r||ddd}n|j|d ||| t||ks/J q|dddd}||| tdd	 |D td
d	 |D ksQJ t||||d	| d d S )N)rd   r4   rl   T)rC   r;   r  rC   r4   Fc                 S      g | ]}|j qS rR   r   r   rR   rR   rS   r         z#test_warm_start.<locals>.<listcomp>c                 S   r  rR   r   r   rR   rR   rS   r     r  r  )r  )
r  r  r?   r   rF   rL   r  r%   rM   r  )rA   rG   rH   r   est_wsrC   	est_no_wsrR   rR   rS   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 )Nrd   r0   FrC   r   r  r;   Tr1   )r  r;   )r  r  r?   rF   r   r$   rM   )rA   rG   rH   r   r   est_2rR   rR   rS   test_warm_start_clear  s   
r  c                 C   st   t t}}t|  }|dddd}||| |jdd tt ||| W d    d S 1 s3w   Y  d S )Nrd   r0   T)rC   r   r  r   r  )r  r  r?   rF   r   r   r  r.  r  rR   rR   rS   $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 sEw   Y  t|	||	| d S )
Nrd   r2   Tr0   r  r1   r   r  r  )
r  r  r?   rF   r   r   r)  r*  r%   rM   )rA   rG   rH   r   r   r  r  rR   rR   rS   "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sFJ |ddddddd}||| t|d	r]J |jdd
 t|j|| |j|jkssJ d S )N   r2   Fr0   T)rC   r   r  r;   r   r  rd   )r  r  rC   r  r@  )r  r  r?   rF   r   r   r  r&   )rA   rG   rH   r   r   r  est_3rR   rR   rS   test_warm_start_oob6  sJ   
r  c              	   C   s   t t}}t|  }|ddddd}tj|d|jd0}||| tjt	dd ||| W d    n1 s9w   Y  |
  W d    d S 1 sMw   Y  d S )Nr4   T)rC   r  r   r  rC  )wrapsz%Warm-start fitting without increasingr  )r  r  r?   r   objectrC  rF   r   r)  r*  assert_called_once)rA   rG   rH   r   r   !mock_set_oob_score_and_attributesrR   rR   rS   test_oob_not_computed_twicei  s   

"r  r  c                 C   sX   t ddd}t| }dd dd |  D }||||}t|j| t|| d S )Nr   FrV  c                 S   s   g | ]}|qS rR   rR   )r   chrR   rR   rS   r     s    z&test_dtype_convert.<locals>.<listcomp>ABCDEFGHIJKLMNOPQRSTU)r   r   eyerF   rI   r%   r   )r  r  rG   rH   resultrR   rR   rS   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s7J ttdd |j	D  |
|}t|jd D ]  fd	dt|d d  f D }t|tj|d
 qQd S )Nr   rd   r0   Fr  r/   c                 S   s   g | ]}|j jqS rR   )r   
node_count)r   erR   rR   rS   r     s    z&test_decision_path.<locals>.<listcomp>c                    s$   g | ]\}}|  | f qS rR   rR   )r   r   r   est_id	indicatorn_nodes_ptrrR   rS   r     s    )rN   )r  r  rN   r?   rF   decision_pathr%   r   diffr   rM   r   r4  r$   r   )rA   rG   rH   r5   r   r   leavesleave_indicatorrR   r  rS   test_decision_path  s$   


r  c                  C   s\   t jddd\} }ttttg}|D ]}|dd}|| | |jD ]	}|jdks*J q!qd S )Nr   r0   r>   r   )min_impurity_decrease)	r   r   r   r   r   r   rF   r   r  )rG   rH   all_estimators	Estimatorr   r   rR   rR   rS   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 s(w   Y  g d}d}tjt|d | || W d    d S 1 sLw   Y  d S )	Nrx   rU   )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   r   r   r   r  r.  rF   )r   rG   rH   r  rR   rR   rS   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argsr  rP  rR   rS   r    s   zMyBackend.__init__c                    s   |  j d7  _ t  S )Nr0   )r   r  
start_call)r  r  rR   rS   r    s   
zMyBackend.start_call)__name__
__module____qualname__r  r  __classcell__rR   rR   r  rS   r
    s    r
  testingc                  C   s   t ddd} td\}}| tt W d    n1 sw   Y  |jdks*J td\}}| t W d    n1 sAw   Y  |jdksMJ d S )Nr4   r1   )rC   r   r  r   )r   joblibparallel_backendrF   rG   rH   r   r   )rP   bar   _rR   rR   rS   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
s"J d S )Nr  r2   r0   )r5   r7   r;   r  rd   rl      )rz   r;   rC   gHz>)abs_tol)r   r   rF   mathiscloser   r   )rG   rH   rP   rR   rR   rS   #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   )r   r   r   r   rF   r%   r   float64)rG   rH   gbrrR   rR   rS   *test_forest_degenerate_feature_importances  s   

r"  c                 C   sT   t |  ddd}d}tjt|d |tt W d    d S 1 s#w   Y  d S )NFr[   r   r3  zl`max_sample` cannot be set if `bootstrap=False`. Either switch to `bootstrap=True` or set `max_sample=None`.r  )r@   r   r  r.  rF   rG   rH   )rA   r   r  rR   rR   rS   test_max_samples_bootstrap  s   "r$  c                 C   sX   t |  dtdd}d}tjt|d |tt W d    d S 1 s%w   Y  d S )NTg    eAr#  z=`max_samples` must be <= n_samples=6 but got value 1000000000r  )r@   r   r   r  r.  rF   rG   rH   )rA   r   r  rR   rR   rS    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sDJ d S )Nr#  r  r   )
train_sizerw   r;   Tr   r   r3  r;   )	r   rg   rh   rf   rF   rI   r   r   r   )rA   r   r   r   r   
ms_1_modelms_1_predictms_None_modelms_None_predictms_1_ms
ms_None_msrR   rR   rS   $test_max_samples_boundary_regressors  s   


r.  c           	      C   sr   t ttdtd\}}}}t|  dddd}||||}t|  dd dd}||||}tj|| d S )Nr   )r;   stratifyTr   r'  )	r   r   r   rE   rF   r   r   r  r"   )	rA   r   r   r   r  r(  
ms_1_probar*  ms_None_probarR   rR   rS   %test_max_samples_boundary_classifiers%  s   r2  csr_containerc                 C   sb   g dg}| g dg}t  }d}tjt|d ||| W d    d S 1 s*w   Y  d S )Nr   r   z3sparse multilabel-indicator for y is not supported.r  )r   r   r  r.  rF   )r3  rG   rH   r   msgrR   rR   rS   test_forest_y_sparse8  s   
"r5  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sEJ |d S )Nr0   i'  r1   r   )rC   r;   r3  z=Tree without `max_samples` restriction should have more nodes)r   r   r   r  rF   r   r   r  )	r6  r   rG   rH   est1est2tree1tree2r4  rR   rR   rS   'test_little_tree_with_small_max_samplesB  s&   r;  Forestc                 C   sN   ddl m} tdd}|j\}}|||}t|  dd|d}|t| d S )Nr   )MSEr/   r0   r1   )rC   r   rU   )sklearn.tree._criterionr=  rh   r5  rN   rf   rF   rg   )r<  r=  rH   r5   	n_outputsmse_criterionr   rR   rR   rS   -test_mse_criterion_object_segfault_smoke_testa  s   

rA  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)rC   r   rg  r;   c                 S   s    g | ]\}}d | d| qS )randomtreesembedding_r  rR   )r   r   leafrR   rR   rS   r   y  s    zAtest_random_trees_embedding_feature_names_out.<locals>.<listcomp>))r   r1   )r   r2   )r   rd   )r   re   rE  )r0   r2   )r0   rd   )r0   re   N)	r   r   r   r   r  r   rF   get_feature_names_outr%   )r;   rG   rn  namesexpected_namesrR   rR   rS   -test_random_trees_embedding_feature_names_outq  s   rG  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 )zRandomForestClassifier must work on readonly sparse data.

    Non-regression test for: https://github.com/scikit-learn/scikit-learn/issues/25333
    r,   r   )
max_nbytesr   )seedr  r<   Tr   r1   )r   r;   )cvN)setattrsklearnensemble_forestr   r,   r   r   r   r   r   r   )r3  monkeypatchr   rG   rH   rP   rR   rR   rS   test_read_only_buffer  s   
rP  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)
return_X_yr4   g-C6?r   )rC   r3  r  r;   N)r   	load_winer   rF   )r  rG   rH   rF  rR   rR   rS   .test_round_samples_to_one_when_samples_too_low  s
   rS  rI  r   c                 C   sV  t ddd\}}|rd}nd}| d|d||d}||| |j }t||j |j}t|ts3J t|t|ks=J |d j	t
jksGJ tt|D ]2}	|rqt||	 t|d	 ks_J tt
||	 t||	 k spJ qMtt||	 t|ksJ qMd}
||
 }||
 }|| }|| }|jj}t|}||| |jj}t|| dS )
zEstimators_samples_ property should be consistent.

    Tests consistency across fits and whether or not the seed for the random generator
    is set.
    r  r0   r>   r[   Nr4   )rC   r3  rD   r;   r   r   r1   )r   rF   estimators_samples_r   r%   r   rl  r   rL   r   r   int32r   r   r  r   valuer
   r"   )r6  r   rI  rG   rH   r3  r   estimators_samples
estimatorsr   estimator_indexestimator_samplesr+  r   r   orig_tree_valuesnew_tree_valuesrR   rR   rS   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 | s0J t	||dd	\}}	}
}||d
d}|
||
 ||	|}t	||dd	\}}}
}||d
d}|
||
 |||}|d| ksrJ dS )zJCheck that forest can deal with missing values and has decent performance.r   )r  r4   r<   FTffffff?r   rq   r   r   r$  )r;   rC   r   N)r   r   r   r   nanchoicerN   isnananyr   rF   r_   )	make_datar<  r   r5   r6   rG   rH   	X_missingX_missing_trainX_missing_testr   r   forest_with_missingscore_with_missingr   r   rF  score_without_missingrR   rR   rS    test_missing_values_is_resilient  s"    rk  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 	|
 sFJ | }	||	dddf< t|	||dd\}
}}}}}| dd|
|}| dd||}|||}||ks~J ||||ksJ dS )z_Check that the forest learns when missing values are only present for
    a predictive feature.r   r  g      ?r4   r  r1   )rp   rq   FTr^  r   r_  Nrd   r   )r   r   r   standard_normalr   ra  r   r   r`  rb  rc  r   r   rF   r_   )r<  r   r5   expected_scoreX_non_predictiverH   X_random_masky_maskpredictive_featureX_predictiveX_predictive_trainX_predictive_testX_non_predictive_trainX_non_predictive_testr   r   forest_predictiveforest_non_predictivepredictive_test_scorerR   rR   rS    test_missing_value_is_predictive  s8   

	rz  c                 C   sp   t g dt jddgg}ddg}| dd}d}tjt|d	 ||| W d
   d
S 1 s1w   Y  d
S )zDRaise error for unsupported criterion when there are missing values.r  r   r  r[   r   rb   r  z .*does not accept missing valuesr  N)r   r   r`  r   r  r.  rF   )r<  rG   rH   rF  r4  rR   rR   rS   =test_non_supported_criterion_raises_error_with_missing_values?  s   
"r{  )r  )__doc__r  r  rL  collectionsr   	functoolsr   r   r   typingr   r   unittest.mockr   r  numpyr   r   scipy.specialr	   rL  r
   r   sklearn.datasetsr   r   sklearn.decompositionr   sklearn.dummyr   sklearn.ensembler   r   r   r   r   sklearn.ensemble._forestr   r   sklearn.exceptionsr   sklearn.metricsr   r   r   r   sklearn.model_selectionr   r   r   sklearn.svmr   sklearn.tree._classesr    sklearn.utils._testingr!   r"   r#   r$   r%   r&   r'   sklearn.utils.fixesr(   r)   r*   sklearn.utils.multiclassr+   sklearn.utils.parallelr,   sklearn.utils.validationr-   rG   rH   rJ   rK   r   r   	load_irisr\   r   permutationr^   rq   permr]   make_regressionrg   rh   r  r  r   float32parallelget_active_backendrP  DEFAULT_JOBLIB_BACKENDrE   rf   r  dictr?   str__annotations__updater   r@   markparametrizerT   r`   rk   r   r   r   r   r   chainr   r  r  r   r~  r!  r'  r,  r/  r1  r?  rD  rG  rK  rU  r]  rc  rf  rp  rv  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
  register_parallel_backendr  r  r"  r$  r%  r.  r2  r5  r;  rA  rG  rP  rS  r]  rk  rz  r{  rR   rR   rR   rS   <module>   s   $	(





5


*m
	*(








3
7

6





/






2










	



6
	
	)