
    {Kg                     D   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ZL ej2                  d d!dddd"d#      \  ZMZN ej                         ZP eHd      ZQeQj                  ePj                  j                        ZUePj                  eU   eP_V        ePj                  eU   eP_S         ej                  d d!d$      \  ZXZY ej4                  d%d&      \  ZZZ[eZj                  ej                        ZZej                  j                         d   j                  Zae e"d'Zbe!e#d(Zcd)e$iZd ee       Zfeegef   ehd*<   efj                  eb       efj                  ec       efj                  ed       ebj                         Zkeegef   ehd+<   ekj                  ec       ej                  j                  d,eb      d-        Znej                  j                  d,eb      ej                  j                  d.d/      d0               Zoej                  j                  d,ec      ej                  j                  d.d1      d2               Zpd3 Zqej                  j                  d.d4      d5        Zrej                  j                  d,ec      d6        Zsej                  j                  d,eb      d7        Ztej                  j                  d8ej                  ej                  f      ej                  j                  d9 ej                   e	ebd:d;g       e	ecg d<                  d=               Zwd> Zxej                  j                  d,ef      d?        Zyej                  j                  d@ebj                               ej                  j                  dAg dB      ej                  j                  dCg  ej2                  dDddE      dFg  ej2                  dGddHdI      dJePj                  ePj                  dz  dz   dJfg  ej                  dDd&      dKg      ej                  j                  dLdM ee,dNO      g      dP                             Z|ej                  j                  dQecj                               ej                  j                  dAg dB      ej                  j                  dRg  ej                  d d!ddS      dTg  ej                  d d!ddS      dUg      ej                  j                  dLdMe+g      dV                             Z}ej                  j                  dWekj                               dX        Z~ej                  j                  dWekj                               dY        Zej                  j                  d@ebj                               dZ        Zej                  j                  dQecj                               d[        Zej                  j                  dLdMd"g      d\        Zej                  j                  d,eb      d]        Zej                  j                  d,ek      d^        Zej                  j                  d,ek      d_        Zej                  j                  d,ek      d`        Zej                  j                  d,eb      da        Zej                  j                  d,eb      db        Zdc Zdd Ze=de        Zej                  j                  dfeA      dg        Zdh Zdi Zej                  j                  d,ef      dj        Zej                  j                  d,ef      dk        Zej                  j                  d,ef      dl        Zej                  j                  d,ef      dm        Zej                  j                  d,ef      ej                  j                  dne@eAz   eBz         do               Zej                  j                  d,ek      ej                  j                  d8ej                  ej                  f      dp               Zej                  j                  d,ef      dq        Zej                  j                  d,eb      dr        Zej                  j                  d,eb      ds        Zej                  j                  d,eb      dt        Zej                  j                  d,ef      du        Zej                  j                  d,ef      dv        Zej                  j                  d,ef      dw        Zej                  j                  d,ef      dx        Zej                  j                  d,ek      dy        Zej                  j                  d,ek      dz        Zdd{Zej                  j                  d,ek      d|        Zd} Zd~ Z G d dea      Z ejH                  de       e>d        Zd Zd Zej                  j                  d,ek      d        Zej                  j                  d,ek      d        Zej                  j                  d,ec      d        Zej                  j                  d,eb      d        Zej                  j                  deB      d        Zej                  j                  de"e#g      d        Zej                  j                  dec      d        Zd Zej                  j                  deB      d        Zej                  j                  dddg      d        Zej                  j                  dddg      ej                  j                  ddMd"g      ej                  j                  dekj                               d                      Zej                  j                  dej                  e#fej2                  e"fg      d        Zej                  j                  de"e#g      d        Zd Zy)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      )r0   r0   r0   r1   r1   r1      )r0   r1   r1     
   F)	n_samples
n_featuresn_informativen_redundant
n_repeatedshufflerandom_stater6   r7   r<      r6   r<   )r   r   )r   r   r   FOREST_ESTIMATORSFOREST_CLASSIFIERS_REGRESSORSnamec                    t         |    } |dd      }|j                  t        t               t	        |j                  t              t               dt        |      k(  sJ  |ddd      }|j                  t        t               t	        |j                  t              t               dt        |      k(  sJ |j                  t              }|j                  t        t              |j                  fk(  sJ y)z&Check classification on a toy dataset.r5   r1   n_estimatorsr<   )rE   max_featuresr<   N)FOREST_CLASSIFIERSfitXyr&   predictTtrue_resultlenapplyshaperE   )rB   ForestClassifierclfleaf_indicess       f/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/ensemble/tests/test_forest.pytest_classification_toyrU   |   s     *$/

;CGGAqMs{{1~{3S>>

KCGGAqMs{{1~{3S>> 99Q<L#a&#*:*:!;;;;    	criterion)ginilog_lossc                    t         |    } |d|d      }|j                  t        j                  t        j                         |j                  t        j                  t        j                        }|dkD  sJ d||fz          |d|dd      }|j                  t        j                  t        j                         |j                  t        j                  t        j                        }|dkD  sJ d||fz         y )	Nr5   r1   rE   rW   r<   ?z'Failed with criterion %s and score = %fr2   rE   rW   rF   r<         ?)rG   rH   irisdatatargetscore)rB   rW   rQ   rR   rb   s        rT   test_iris_criterionrc      s     *$/
ia
PCGGDIIt{{#IIdii-E3;VAYPUDVVV;
911C GGDIIt{{#IIdii-E3;VAYPUDVVV;rV   )squared_errorabsolute_errorfriedman_msec                 X   t         |    } |d|d      }|j                  t        t               |j	                  t        t              }|dkD  sJ d||fz          |d|dd      }|j                  t        t               |j	                  t        t              }|dkD  sJ d	||fz         y )
N   r1   r[   g(\?z:Failed with max_features=None, criterion %s and score = %f   r]   gq=
ףp?z7Failed with max_features=6, criterion %s and score = %f)FOREST_REGRESSORSrH   X_regy_regrb   )rB   rW   ForestRegressorregrb   s        rT   test_regression_criterionro      s     (-O
qIA
NCGGE5IIeU#ECG  )!!C GGE5IIeU#E4< RV  <rV   c            	      .   t         j                  j                  d      } d\  }}}t        j                  ||z   ||       }| j                  dd|      t        j                  |d      z  }| j                  t        j                  ||z        	      }t        |||| 
      \  }}}	}
t        ddd|       }t        ddd|       }|j                  ||	       |j                  ||	       t        d      j                  ||	      }||	df||
dffD ]  \  }}}t        ||j                  |            }t        |t        j                  |j                  |      dd            }t        ||j                  |            }|dk(  r||k  sJ |d|z  k  rJ  y)zTest that random forest with poisson criterion performs better than
    mse for a poisson target.

    There is a similar test for DecisionTreeRegressor.
    *   r4   r4   r5   r=   r/   r2   lowhighsizer   axislam	test_sizer<   poissonr5   sqrt)rW   min_samples_leafrF   r<   rd   mean)strategytraintestgư>N皙?)nprandomRandomStater   make_low_rank_matrixuniformmaxr}   expr   r   rH   r   r   rK   clip)rngn_trainn_testr7   rI   coefrJ   X_trainX_testy_trainy_test
forest_poi
forest_msedummy	data_name
metric_poi
metric_msemetric_dummys                     rT   test_poisson_vs_mser      s    ))


#C".GVZ%%F"z	A
 ;;2AJ;7"&&:KKDq4x()A'7	1S($GVWf 'bvTWJ '!	J NN7G$NN7G$F+//AE$gw7&&&9QR1i*1j.@.@.CD
 +rwwz))!,dD9

 -Qa0@A 
***C,....# SrV   )r}   rd   c                    t         j                  j                  d      }d\  }}}t        j                  ||z   ||      }|j                  dd|      t        j                  |d      z  }|j                  t        j                  ||z        	      }t        | d
d|      }|j                  ||       t        j                  |j                  |            t        j                  t        j                  |            k(  sJ y)z9 "Test that sum(y_pred)==sum(y_true) on the training set.rq   rr   r=   r/   r2   rs   r   rw   ry   r5   F)rW   rE   	bootstrapr<   N)r   r   r   r   r   r   r   r}   r   r   rH   sumrK   pytestapprox)	rW   r   r   r   r7   rI   r   rJ   rn   s	            rT   #test_balance_property_random_forestr      s     ))


#C".GVZ%%F"z	A ;;2AJ;7"&&:KKDq4x()A
"CC GGAqM66#++a.!V]]266!9%====rV   c                     t        |    d      }t        |d      rJ t        |d      rJ |j                  g dg dgddg       t        |d      rJ t        |d      rJ y )	Nr   r<   classes_
n_classes_r1   r2   r3      rh   ri   r1   r2   )rj   hasattrrH   )rB   rs     rT   test_regressor_attributesr   	  sm     	$Q/Aq*%%%q,'''EE9i
 1a&)q*%%%q,''''rV   c           	      j   t         |    }t        j                  d      5   |dddd      }|j                  t        j
                  t        j                         t        t        j                  |j                  t        j
                        d      t        j                  t        j
                  j                  d                t        |j                  t        j
                        t        j                  |j                  t        j
                                     d d d        y # 1 sw Y   y xY w)Nignoredivider5   r1   )rE   r<   rF   	max_depthrw   r   )rG   r   errstaterH   r_   r`   ra   r%   r   predict_probaonesrP   r   predict_log_proba)rB   rQ   rR   s      rT   test_probabilityr     s     *$/	H	%!!q
 			4;;'!FF3$$TYY/a8"''$))//RSBT:U	
 	"dii("&&1F1Ftyy1Q*R	
 
&	%	%s   D D))D2dtypezname, criterionrX   rY   )rd   rf   re   c                    d}|t         v r|dk(  rd}t        j                  | d      }t        j                  | d      }t        |   } |d|d      }|j                  ||       |j                  }t        j                  |d	kD        }	|j                  d   dk(  sJ |	d
k(  sJ t        j                  |d d
 d	kD        sJ |j                  }|j                  d       |j                  }
t        ||
       t        d      j                  ddt        |            } |dd|      }|j                  |||       |j                  }t        j                  |dk\        sJ dD ][  } |dd|      }|j                  ||||z         |j                  }t        j                   ||z
        j#                         |k  r[J  y )N{Gz?re   皙?Fcopyr5   r   r[   皙?r3   r2   n_jobsr1   )rE   r<   rW   sample_weight        )r^   d   )rj   X_largeastypey_larger@   rH   feature_importances_r   r   rP   all
set_paramsr%   r.   randintrN   absr   )r   rB   rW   	tolerancerI   rJ   ForestEstimatorestimportancesn_importantimportances_parallelr   scaleimportances_biss                 rT   test_importancesr   &  s    I  Y2B%B	 	u5)Au5)A'-O
rYQ
OCGGAqM**K &&s*+KQ2%%%!66+bq/C'((( **KNN!N33k+?@ 'q)11!RQ@M
rY
OCGGAqG.**K66+$%%%2AS1EM$9:22vvkO3499;iGGG	 rV   c                  ~  	
 d 	d 
	
fd} t        j                  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f   }}|j                  d   }t        j                  |      }t        |      D ]  } | |||      ||<    t        dddd      j                  ||      }t        d |j                  D              |j                  z  }t         
|      t        |             t        j                  ||z
        j                         dk  sJ y )Nc                 Z    | dk  s| |kD  rdS t        t        |      t        |       d      S )Nr   T)exact)r
   int)kns     rT   binomialz-test_importances_asymptotic.<locals>.binomial]  s*    EQUqHSVSV4(HHrV   c                     t        |       }d}t        j                  |       D ]+  }d|z  |z  }|dkD  s||t        j                  |      z  z  }- |S )Nr         ?r   )rN   r   bincountlog2)samplesr6   entropycountps        rT   r   z,test_importances_asymptotic.<locals>.entropy`  sU    L	[[)Eei'A1u1rwwqz>) *
 rV   c                 V   |j                   \  }}t        t        |            }|j                  |        t        |      D cg c]  }t	        j
                  |d d |f           }}d}t        |      D ]!  }	d |	|      ||	z
  z  z  }
t        ||	      D ]  }t        t        |	      D cg c]
  }|||       c} D ]  }t	        j                  |t              }t        |	      D ]  }||d d ||   f   ||   k(  z  } ||d d f   ||   }}t        |      }|dkD  sbg }||    D ]"  }|d d | f   |k(  }|j                  ||          $ ||
d|z  |z  z   |      t        |D cg c]  } |      t        |      z  |z   c}      z
  z  z  }  $ |S c c}w c c}w c c}w )Nr   r   r   r   )rP   listrangepopr   uniquer   r   r   boolrN   appendr   )X_mrI   rJ   r6   r7   featuresivaluesimpr   r   Bjbmask_bX_y_n_samples_bchildrenximask_xicr   r   s                         rT   mdi_importancez3test_importances_asymptotic.<locals>.mdi_importancek  s    !	:j)*S.3J.?@.?"))AadG$.?@z"A(1j1Z!^DED "(A. q"BA6!A$<"BCAWWYd;F"1X!AqtG*!"44 & vqy\1V9B"%b'K"Q#%"(+B&(CjB&6G$OOBwK8 #.  "[09<> !("% 2:%&19A )0
SV(;k(I19%&#"!"
! D / #J 
S A #C,%&s   #F,F!(F&)r   r   r1   r   r   r1   r   r1   )r1   r   r1   r1   r1   r   r1   r2   )r1   r   r1   r1   r   r1   r1   r3   )r   r1   r1   r1   r   r1   r   r   )r1   r1   r   r1   r   r1   r1   rh   )r1   r1   r   r1   r1   r1   r1   ri   )r1   r   r1   r   r   r1   r      )r1   r1   r1   r1   r1   r1   r1      )r1   r1   r1   r1   r   r1   r1   	   )r1   r1   r1   r   r1   r1   r1   r   r   r   r1   r4   rY   r   )rE   rF   rW   r<   c              3   T   K   | ]   }|j                   j                  d        " yw)F)	normalizeN)tree_compute_feature_importances).0trees     rT   	<genexpr>z.test_importances_asymptotic.<locals>.<genexpr>  s*      
' JJ22U2C's   &(r   )r   arrayr   rP   zerosr   r   rH   r   estimators_rE   r$   r   r   )r   r`   rI   rJ   r7   true_importancesr   rR   r   r   r   s            @@rT   test_importances_asymptoticr  X  s@   
I	.` 88$$$$$$$$$$	
D 88DBQBKt,d1a4jqAJ xx
+:,Q15  qJQ	c!Qi 
 	 

 	
 

		  
C$4566"[016684???rV   c                     dj                  |       }t        j                  t        |      5  t	        t        |           d       d d d        y # 1 sw Y   y xY w)NzfThis {} instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.matchr   )formatr   raisesr   getattrr@   )rB   err_msgs     rT   !test_unfitted_feature_importancesr    sE    	==CVD\  
~W	5!$')+AB 
6	5	5s   AArQ   X_type)r  
sparse_csr
sparse_csczX, y, lower_bound_accuracy,  )r6   	n_classesr<   r\     ri   )r6   r  r8   r<   g?g
ףp=
?	oob_scoreTmicro)averagec                    t        ||      }t        ||dd      \  }}}}	 | dd|d      }
t        |
d      rJ t        |
d	      rJ |
j                  ||       t	        |      r ||	|
j                  |            }n#|
j                  ||	      }|
j                  |k\  sJ t        ||
j                  z
        }|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}n8|j                  d   t        t        |dddf               |j                  d   f}|
j                  j                  |k(  sJ y)z5Check that OOB score is close to score on a test set.constructor_namer^   r   r{   (   TrE   r   r  r<   
oob_score_oob_decision_function_g)\(?z	abs_diff=z is greater than 0.11oob_prediction_r1   N)r"   r   r   rH   callablerK   rb   r"  r   ndimrP   rN   setr#  )rQ   rI   rJ   r  lower_bound_accuracyr  r   r   r   r   
classifier
test_scoreabs_diffexpected_shapes                 rT   test_forest_classifier_oobr-    s   > 	1v6A'7			($GVWf "	J z<000z#;<<<NN7G$	vz'9'9&'AB
%%ff5
$$(<<<<:
 5 556Ht@	{*?@@:|,,,z#4555:7888vv{!--*CAK8!--*CAadG,=qwwqzJ,,22nDDDrV   rm   zX, y, lower_bound_r2)r6   r7   	n_targetsr<   ffffff?g?c                    t        ||      }t        ||dd      \  }}}}	 | dd|d      }
t        |
d      rJ t        |
d	      rJ |
j                  ||       t	        |      r ||	|
j                  |            }n#|
j                  ||	      }|
j                  |k\  sJ t        ||
j                  z
        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 y)z\Check that forest-based regressor provide an OOB score close to the
    score on a test set.r  r^   r   r{   2   Tr!  r"  r$  r   r#  r1   N)r"   r   r   rH   r%  rK   rb   r"  r   r&  rP   r$  )rm   rI   rJ   r  lower_bound_r2r  r   r   r   r   	regressorr*  r,  s                rT   test_forest_regressor_oobr4    sX   . 	1v6A'7			($GVWf  	I y,///y"3444MM'7#	vy'8'8'@A
__VV4
##~555zI0001S8889l+++9/000y":;;;vv{!--*,!--*AFF3$$**n<<<rV   r   c                      | dddd      }t        j                  t        d      5  |j                  t        j
                  t        j                         ddd       y# 1 sw Y   yxY w)zfCheck that a warning is raised when not enough estimator and the OOB
    estimates will be inaccurate.r1   Tr   rE   r  r   r<   z"Some inputs do not have OOB scoresr  N)r   warnsUserWarningrH   r_   r`   ra   )r   	estimators     rT   test_forest_oob_warningr:  P  sN      	I 
k)M	Ndii- 
O	N	Ns   /A  A)c                     t         j                  }t         j                  }d} | dd      }t        j                  t
        |      5  |j                  ||       ddd       y# 1 sw Y   yxY w)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`   ra   r   r  
ValueErrorrH   )r   rI   rJ   r  r9  s        rT   (test_forest_oob_score_requires_bootstrapr>  ^  sO    
 			AAFG$%@I	z	1a 
2	1	1s   A$$A-c                    t         j                  j                  d      }t        j                  }|j                  ddt        j                  j                  d   df      }t        |      }|dk(  sJ  | dd      }d	}t        j                  t        |
      5  |j                  ||       ddd       y# 1 sw Y   yxY w)zwCheck that we raise an error with when requesting OOB score with
    multiclass-multioutput classification target.
    rq   r   rh   r2   rs   zmulticlass-multioutputTr<  z:The type of target cannot be used to compute OOB estimatesr  N)r   r   r   r_   r`   r   rP   r,   r   r  r=  rH   )rQ   r   rI   rJ   y_typer9  r  s          rT   6test_classifier_error_oob_score_multiclass_multioutputrA  k  s    
 ))


#C		A);Q(?@AAF---- 44@IJG	z	1a 
2	1	1s   B66B?c           	         t         j                  j                  d      }t        j                  }|j                  ddt        j                  j                  d   df      } | dddd      }|j                  ||       t        t        |      |j                        }|j                  d   d	z  }t        j                  |dg      }t        |d
|       D ]  \  }}	d}
t        j                  d      }|j                  D ]^  }t        |j                  t        |      |      }||v s(|
dz  }
||j!                  |	j#                  dd            j%                         z  }` ||
z  ||<    t'        ||j(                  d
|        y
)zCheck that multioutput regression with integral values is not interpreted
    as a multiclass-multioutput target and OOB score can be computed.
    rq   r   r5   r2   rs      Tr6  r   Nr1   r0   )r   r   r   r_   r`   r   rP   rH   r   rN   max_samplesr  	enumerater	  r   r<   rK   reshapesqueezer#   r$  )rm   r   rI   rJ   r9  n_samples_bootstrapn_samples_testoob_pred
sample_idxsamplen_samples_ooboob_pred_sampler  oob_unsampled_indicess                 rT   2test_forest_multioutput_integral_regression_targetrP  {  se   
 ))


#C		A$))//!*<a)@AA44aI MM!Q23q69;P;PQWWQZ1_Nxx+,H'/>(:;
F((1+))D$?!!3q6+>%! 22"4<<q"0E#F#N#N#PP *  /> < Hi77HIrV   c                     t        j                  t        d      5  t        |        d d d        t        j                  t        d      5  t               j                  t        t               d d d        y # 1 sw Y   PxY w# 1 sw Y   y xY w)Nz"got an unexpected keyword argumentr  r  zOOB score not supported)r   r  	TypeErrorr   NotImplementedError_set_oob_score_and_attributesrI   rJ   rR  s    rT   +test_random_trees_embedding_raise_error_oobrV    s\    	y(L	My1 
N	*2K	L<<QB 
M	L 
N	M	L	Ls   A8#B8BBc                     t        |           }t        |ddd      }|j                  t        j                  t        j
                         y )Nr1   r2   )rE   r   )rG   r   rH   r_   r`   ra   )rB   forestrR   s      rT   test_gridsearchrZ    s8      %'F
vVL
MCGGDIIt{{#rV   c                    | t         v r!t        j                  }t        j                  }n| t        v rt
        }t        }t        |    } |ddd      }|j                         t        |      dk(  sJ |j                  d       |j                  |      }|j                  d       |j                  |      }t        ||d       y)	z-Check parallel computations in classificationr5   r3   r   rE   r   r<   r1   r   r2   N)rG   r_   r`   ra   rj   rk   rl   r@   rH   rN   r   rK   r%   )rB   rI   rJ   r   rY  y1y2s          rT   test_parallelr_    s     !!IIKK	"	"'-O"QQGF
JJq!v;"
Q		B
Q		Bb"a(rV   c                    | 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      }|j                         |j                  ||      }t        j                  |      }t        j                  |      }t        |      |j                  k(  sJ |j                  ||      }||k(  sJ y )Nr2   r   r   )rG   r_   r`   ra   rj   rk   rl   r@   rH   rb   pickledumpsloadstype	__class__)	rB   rI   rJ   r   objrb   pickle_objectobj2score2s	            rT   test_picklerj    s     !!IIccNKK!	"	"#A#J#A#J'-O
q
)CGGAqMIIaOELL%M<<&D:&&&ZZ1FF??rV   c                    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      }|j                  ||      j                  |      }t        ||       | t        v rt        j                  d	
      5  |j                  |      }t        |      dk(  sJ |d   j                  dk(  sJ |d   j                  dk(  sJ |j                  |      }t        |      dk(  sJ |d   j                  dk(  sJ |d   j                  dk(  sJ 	 d d d        y y # 1 sw Y   y xY w)Nr/   r0   r1   r2   r   r3   Fr<   r   r   r   r   r2   r   r   )r@   rH   rK   r%   rG   r   r   r   rN   rP   r   	rB   r   r   r   r   r   y_predproba	log_probas	            rT   test_multioutputrs    s   
 
R	R	R	
A	
A	
A	Q	Q	Q	
B	
B	
BG 
Q	Q	Q	
A	
A	
A	Q	Q	Q	
A	
A	
AG 2hAQ!R1F1g1vAwA/F
D
!qE
BCWWWg&..v6Fff-!![[)%%f-Eu:?"?8>>V+++8>>V+++--f5Iy>Q&&&Q<%%///Q<%%/// *) "))s   BE""E+c                    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      }|j                  ||      j                  |      }t        ||       t	        j
                  d      5  |j                  |      }t        |      dk(  sJ |d
   j                  dk(  sJ |d   j                  dk(  sJ |j                  |      }t        |      dk(  sJ |d
   j                  dk(  sJ |d   j                  dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr/   r0   r1   r2   redbluegreenpurpleyellowr   Frl  r   r   rm  rn  )
r@   rH   rK   r&   r   r   r   rN   rP   r   ro  s	            rT   test_multioutput_stringrz  
  s   
 
R	R	R	
A	
A	
A	Q	Q	Q	
B	
B	
BG 
			'	'	'				(	(	(G 2hAQ!R1F		'		(	F D
!qE
BCWWWg&..v6Fvv&	H	%!!&)5zQQx~~'''Qx~~'''))&1	9~"""|!!V+++|!!V+++ 
&	%	%s   <BEE"c                    t         |    } |d      j                  t        t              }|j                  dk(  sJ t        |j                  ddg       t        j                  t        t        j                  t              dz  f      j                  } |d      j                  t        |      }t        |j                  ddg       t        |j                  ddgddgg       y )Nr   r   r2   r0   r1   r/   )rG   rH   rI   rJ   r   r&   r   r   vstackr  rL   )rB   rQ   rR   _ys       rT   test_classes_shaper~  B  s     *$/ 
*
.
.q!
4C>>Qs||b!W- 
Arxx{Q'	(	*	*B

*
.
.q"
5Cs~~1v.s||r1gAw%78rV   c                      t        dd      } t        j                  d      \  }}| j                  |      }t	        |t
        j                        sJ y )Nr5   F)rE   sparse_outputr^   factor)r   r   make_circlesfit_transform
isinstancer   ndarray)hasherrI   rJ   X_transformeds       rT   test_random_trees_dense_typer  U  sJ    
 "rGF  ,DAq((+M mRZZ000rV   c                      t        ddd      } t        ddd      }t        j                  d      \  }}| j                  |      }|j                  |      }t	        |j                         |       y )Nr5   Fr   )rE   r  r<   Tr^   r  )r   r   r  r  r&   toarray)hasher_densehasher_sparserI   rJ   X_transformed_denseX_transformed_sparses         rT   test_random_trees_dense_equalr  b  sw    
 (u1L )t!M   ,DAq&44Q7(66q9 +3357JKrV   c                  F   t        dd      } t        j                  d      \  }}| j                  |      }t        dd      } t	        | j                  |      j                  |      j                         |j                                |j                  d   |j                  d   k(  sJ t	        |j                  d      | j                         t        d	      }|j                  |      }t               }|j                  ||       |j                  ||      d
k(  sJ y )NrC  r1   rD   r^   r  r   rw   r2   )n_componentsr   )r   r   r  r  r&   rH   	transformr  rP   r   rE   r   r    rb   )r  rI   rJ   r  svd	X_reduced
linear_clfs          rT   test_random_hasherr  v  s     "rBF  ,DAq((+M "rBFvzz!}..q199;]=R=R=TU q!QWWQZ///}((a(0&2E2EF
A
&C!!-0IJNN9a Iq)S000rV   csc_containerc                     t        j                  d      \  }}t        dd      }|j                  |      }|j                   | |            }t	        |j                         |j                                y )Nr   r   rC  r1   rD   )r   make_multilabel_classificationr   r  r&   r  )r  rI   rJ   r  r  r  s         rT   test_random_hasher_sparse_datar    se    22BDAq!rBF((+M!//a0@A+335}7L7L7NOrV   c                  ~   t        d      } d\  }}| j                  ||      }| j                  dd|      }dD cg c]   }t        d|d      j	                  ||      " }}| j                  ||      }|D cg c]  }|j                  |       }	}t        |	|	d	d        D ]  \  }
}t        |
|        y c c}w c c}w )
N!0  )P   rC  r   r2   )r1   r2   r3   r          r>   i90  r\  r1   )r.   randnr   r   rH   r   zipr%   )r   r6   r7   r   r   r   clfsr   rR   probasproba1proba2s               rT   test_parallel_trainr    s    
U
#C"Izii	:.Gkk!Q	*G +	 +F 	BvERVVW	
 +	 	  YYy*-F3784Cc'4F8ffQRj1!&&1 2 9s   %B57B:c                  H   t        d      } | j                  ddd      }| j                  d      }d}t        |d	      j	                  ||      }t        t              }|j                  D ]Y  }d
j                  d t        |j                  j                  |j                  j                        D              }||xx   dz  cc<   [ t        |j                         D cg c]  \  }}d|z  |z  |f c}}      }t        |      dk(  sJ d|d   d   kD  sJ d|d   d   kD  sJ d|d   d   kD  sJ d|d   d   kD  sJ |d   d   dkD  sJ |d   d   dk(  sJ t!        j"                  d      }t         j$                  j                  ddd      |d d df<   t         j$                  j                  ddd      |d d df<   | j                  d      }t        dd      j	                  ||      }t        t              }|j                  D ]Y  }d
j                  d t        |j                  j                  |j                  j                        D              }||xx   dz  cc<   [ |j                         D cg c]	  \  }}||f }}}t        |      dk(  sJ y c c}}w c c}}w )Nr  r   r   )r  r1   rv   r  r4   rq   rD    c              3   P   K   | ]  \  }}|d k\  rd|t        |      fz  nd   ywr   z%d,%d/-Nr   r  fts      rT   r  z$test_distribution.<locals>.<genexpr>  4      
E1 ()AvXCF#36E   $&r1   r   rh   g?r2   r3   333333?z0,1/0,0/--0,2/--)r  r2   )rF   r<   c              3   P   K   | ]  \  }}|d k\  rd|t        |      fz  nd   ywr  r  r  s      rT   r  z$test_distribution.<locals>.<genexpr>  r  r  r   )r.   r   randr   rH   r   r   r	  joinr  r  feature	thresholdsorteditemsrN   r   emptyr   )r   rI   rJ   n_treesrn   uniquesr  r   s           rT   test_distributionr    s   
U
#C 	Aqy)AAG
7
D
H
HA
NC#Gww 
DJJ..

0D0DE
 

 	   w}}WesU{W,d3WXG w<1'!*Q-'!*Q-'!*Q-'!*Q-1:a=31:a=.... 	Aii1d+AadGii1d+AadGA
11
=
A
A!Q
GC#Gww 
DJJ..

0D0DE
 

 	   18@ut}G@w<1A X> As   J
6Jc                 $   t         t        }}t        |    } |dddd      j                  ||      }|j                  d   j                         dk(  sJ  |ddd      j                  ||      }|j                  d   j                         dk(  sJ y )Nr1   r   r   )r   max_leaf_nodesrE   r<   )r   rE   r<   )hastie_Xhastie_yr@   rH   r	  	get_depthrB   rI   rJ   r   r   s        rT   test_max_leaf_nodes_max_depthr    s    XqA (-O
AAA	c!Qi  ??1'')Q...
AAA
F
J
J1a
PC??1'')Q...rV   c                    t         t        }}t        |    } |ddd      }|j                  ||       |j                  d   j
                  j                  dk7  }|j                  d   j
                  j                  |   }t        j                  |      t        |      dz  dz
  kD  sJ dj                  |               |ddd      }|j                  ||       |j                  d   j
                  j                  dk7  }|j                  d   j
                  j                  |   }t        j                  |      t        |      dz  dz
  kD  sJ dj                  |              y )Nr5   r1   r   )min_samples_splitrE   r<   r0   r^   Failed with {0})r  r  r@   rH   r	  r  children_leftn_node_samplesr   minrN   r  )rB   rI   rJ   r   r   node_idxnode_sampless          rT   test_min_samples_splitr    s1   XqA'-O
BQQ
OCGGAqMq!''55;H??1%++::8DL66,#a&3,"22R4E4L4LT4RR2
Caa
PCGGAqMq!''55;H??1%++::8DL66,#a&3,"22R4E4L4LT4RR2rV   c                    t         t        }}t        |    } |ddd      }|j                  ||       |j                  d   j
                  j                  |      }t        j                  |      }||dk7     }t        j                  |      dkD  sJ dj                  |               |ddd      }|j                  ||       |j                  d   j
                  j                  |      }t        j                  |      }||dk7     }t        j                  |      t        |      dz  dz
  kD  sJ dj                  |              y )Nrh   r1   r   )r   rE   r<   r   r  g      ?)r  r  r@   rH   r	  r  rO   r   r   r  r  rN   )rB   rI   rJ   r   r   outnode_counts
leaf_counts           rT   test_min_samples_leafr    s"   XqA (-O
111
MCGGAqM
//!

"
"
(
(
+C++c"K[A-.J66*!A#4#;#;D#AA!
4aa
PCGGAqM
//!

"
"
(
(
+C++c"K[A-.J66*A 11Q3D3K3KD3QQ1rV   c                 x   t         t        }}t        |    }t        j                  j                  d      }|j                  |j                  d         }t        j                  |      }t        j                  ddd      D ]  } ||dd      }d| v rd|_
        |j                  |||       |j                  d   j                  j                  |      }	t        j                  |	|	      }
|
|
dk7     }t        j                   |      ||j"                  z  k\  rJ d
j%                  | |j"                                y )Nr   r^   ri   r1   )min_weight_fraction_leafrE   r<   RandomForestFr   )weightsz,Failed with {0} min_weight_fraction_leaf={1})r  r  r@   r   r   r   r  rP   r   linspacer   rH   r	  r  rO   r   r  r  r  )rB   rI   rJ   r   r   r  total_weightfracr   r  node_weightsleaf_weightss               rT   test_min_weight_fraction_leafr    s   XqA (-O
))


"Chhqwwqz"G66'?L AsA&%)
 T!!CM1G,ooa &&,,Q/{{38#LA$56FF< L33O3O$OO	
9@@#..
	
O 'rV   sparse_containerc                    t        j                  dd      \  }}t        |    } |dd      j                  ||      } |dd      j                   ||      |      }t	        |j                  |      |j                  |             | t        v s| t        v rJt	        |j                  |      |j                  |             t	        |j                  |j                         | t        v rTt	        |j                  |      |j                  |             t	        |j                  |      |j                  |             | t        v rt	        |j                  |      j                         |j                  |      j                                t	        |j                  |      j                         |j                  |      j                                y y )Nr   r1  )r<   r6   r2   )r<   r   )r   r  r@   rH   r%   rO   rG   rj   rK   r   r   r   FOREST_TRANSFORMERSr  r  r  )rB   r  rI   rJ   r   densesparses          rT   test_sparse_inputr  ;  s   
 22RPDAq'-Oa8<<QBE!q9==>Nq>QSTUFfll1ou{{1~>!!T->%>!&.."3U]]15EF!'')C)C	
 !!!&"6"6q"95;N;Nq;QR!$$Q')@)@)C	
 ""!Q'')5??1+=+E+E+G	
 	"  #++-u/B/B1/E/M/M/O	
	 #rV   c                 X   t        |    dd      }t        j                  i ft        j                  ddift        j                  ddift        j                  i ffD ]Y  \  }} |t        j
                  fd|i|}t        j                  }t        |j                  ||      j                  |      |       [ |j                  j                  t        v rlt        t        z   t        z   D ]U  } |t        j
                  |      }t        j                  }t        |j                  ||      j                  |      |       W t        j                  t        j
                  d d d	   |      }t        j                  d d d	   }t        |j                  ||      j                  |      |       y )
Nr   Frl  orderCFr   r   r3   )r@   r   asarrayascontiguousarrayr_   r`   ra   r%   rH   rK   r9  splitterr!   r)   r*   r+   )rB   r   r   	containerkwargsrI   rJ   r  s           rT   test_memory_layoutr  ^  sV    D
!qE
BC 
R	gs^$	gs^$			r"		6 dii7u77KK!#''!Q-"7"7":A> }}!11 . ?. P %8AA%cggam&;&;A&>B !Q 	

499SqS>/ACaCAcggam33A6:rV   c                 R   t         j                  d d df   }t         j                  d d df   j                  d      }t         j                  }t	               5  t
        |    }t        j                  t              5   |dd      j                  ||       d d d         |d      }|j                  ||       | t        v s| t        v r3t        j                  t              5  |j                  |       d d d        d d d        y # 1 sw Y   pxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r0   r1   r1   rD   r   )r_   r`   rF  ra   r'   r@   r   r  r=  rH   rG   rj   rK   )rB   rI   X_2drJ   r   r   s         rT   test_1d_inputr  |  s    		!Q$A99QT?""7+DA		+D1]]:&;??1E ' 1-a%%1B)Bz*A + 
	&& +* 
	s=   #D;DAD"D4DD	
DD	DD&c                    t         |    } |d      }|j                  t        j                  t        j                          |dd      }|j                  t        j                  t        j                         t        |j                  |j                         t        j                  t        j                  t        j                  t        j                  f      j                  } |ddddddddddddgd      }|j                  t        j                  |       t        |j                  |j                          |dd      }|j                  t        j                  |       t        |j                  |j                         t        j                  t        j                  j                        }|t        j                  dk(  xx   d	z  cc<   dd
dd} |d      }|j                  t        j                  t        j                  |        ||d      }|j                  t        j                  t        j                         t        |j                  |j                          |d      }|j                  t        j                  t        j                  |dz          ||d      }|j                  t        j                  t        j                  |       t        |j                  |j                         y )Nr   r   balancedclass_weightr<          @r   r   r1   r2   r1   r   g      Y@r2   )rG   rH   r_   r`   ra   r$   r   r   r|  rL   r   rP   )	rB   rQ   clf1clf2
iris_multiclf3clf4r   r  s	            rT   test_class_weightsr    s    *$/ +DHHTYY$!DDHHTYY$1143L3LM DKKdkkBCEEJ$$$

 D 	HHTYY
#1143L3LM!DDHHTYY
#1143L3LM GGDKK--.M$++"#s*#u-L+DHHTYY]3AFDHHTYY$1143L3LM +DHHTYY]A%56AFDHHTYY]31143L3LMrV   c                 d   t         |    }t        j                  t        t        j                  t              dz  f      j
                  } |dd      }|j                  t        |        |ddddddgd      }|j                  t        |        |d	d      }|j                  t        |       y )
Nr2   r  r   r  r^   r   r  )r/   r2   balanced_subsample)rG   r   r|  rJ   r  rL   rH   rI   )rB   rQ   r}  rR   s       rT   5test_class_weight_balanced_and_bootstrap_multi_outputr    s     *$/	Arxx{Q'	(	*	*B


CCGGArN
3'cc):;!C GGArN
(<1
MCGGArNrV   c                    t         |    }t        j                  t        t        j                  t              dz  f      j
                  } |ddd      }|j                  t        t               d}t        j                  t        |      5  |j                  t        |       d d d         |dd	d
gd      }t        j                  t              5  |j                  t        |       d d d        y # 1 sw Y   PxY w# 1 sw Y   y xY w)Nr2   r  Tr   )r  
warm_startr<   JWarm-start fitting without increasing n_estimators does not fit new trees.r  r^   r   r  r  )rG   r   r|  rJ   r  rL   rH   rI   r   r7  r8  r  r=  )rB   rQ   r}  rR   warn_msgs        rT   test_class_weight_errorsr    s     *$/	Arxx{Q'	(	*	*B 
tRS
TCGGAqM 	U  
k	22 
3 cc):(;!
LC	z	"2 
#	" 
3	2
 
#	"s   C1C=1C:=Dc                    t         t        }}t        |    }d }dD ]D  }| ||dd      }n|j                  |       |j	                  ||       t        |      |k(  rDJ   |ddd      }|j	                  ||       t        |D cg c]  }|j                   c}      t        |D cg c]  }|j                   c}      k(  sJ t        |j                  |      |j                  |      dj                  |       	       y c c}w c c}w )
N)rh   r5   rq   T)rE   r<   r  rE   r5   Fr  )r  )r  r  r@   r   rH   rN   r'  r<   r&   rO   r  )rB   rI   rJ   r   est_wsrE   	est_no_wsr  s           rT   test_warm_startr    s    XqA'-OF>$)tF <8

1a6{l***    RbUSIMM!Qf5fd!!f56#'01yt		y1;    Q+5F5M5Md5S	 61s   D)D
c                 D   t         t        }}t        |    } |dddd      }|j                  ||        |dddd      }|j                  ||       |j	                  dd       |j                  ||       t        |j                  |      |j                  |             y )Nrh   r1   FrE   r   r  r<   Tr2   )r  r<   )r  r  r@   rH   r   r%   rO   )rB   rI   rJ   r   r   est_2s         rT   test_warm_start_clearr    s     XqA'-O
qA%VW
XCGGAqM!1E 
IIaO	A6	IIaOekk!nciil;rV   c                    t         t        }}t        |    } |ddd      }|j                  ||       |j	                  d       t        j                  t              5  |j                  ||       d d d        y # 1 sw Y   y xY w)Nrh   r1   T)rE   r   r  r   r  )r  r  r@   rH   r   r   r  r=  r  s        rT   $test_warm_start_smaller_n_estimatorsr    se     XqA'-O
qA$
GCGGAqMNNN"	z	"1 
#	"	"s   A::Bc                    t         t        }}t        |    } |dddd      }|j                  ||        |dddd      }|j                  ||       |j	                  d       d}t        j                  t        |	      5  |j                  ||       d d d        t        |j                  |      |j                  |             y # 1 sw Y   4xY w)
Nrh   r3   Tr1   r  r2   r   r  r  )
r  r  r@   rH   r   r   r7  r8  r&   rO   )rB   rI   rJ   r   r   r  r  s          rT   "test_warm_start_equal_n_estimatorsr     s     XqA'-O
qA$UV
WCGGAqM!1E 
IIaO 
!$T  
k	2		!Q 
3 syy|U[[^4	 
3	2s   CCc                 :   t         t        }}t        |    } |dddddd      }|j                  ||        |dddddd      }|j                  ||       |j	                  ddd       |j                  ||       t        |d	      sJ |j                  |j                  k(  sJ  |dddddd      }|j                  ||       t        |d	      rJ |j	                  d
        t        |j                        ||       |j                  |j                  k(  sJ y )N   r3   Fr1   T)rE   r   r  r<   r   r  rh   )r  r  rE   r"  rR  )r  r  r@   rH   r   r   r"  r'   )rB   rI   rJ   r   r   r  est_3s          rT   test_warm_start_oobr  :  s2    XqA'-O
C GGAqME 
IIaO	2F	IIaO5,'''>>U----- E 
IIaOul+++	t$OEIIq!$>>U-----rV   c                 |   t         t        }}t        |    } |dddd      }t        j                  |d|j
                        5 }|j                  ||       t        j                  t        d      5  |j                  ||       d d d        |j                          d d d        y # 1 sw Y   "xY w# 1 sw Y   y xY w)Nr5   T)rE   r  r   r  rU  )wrapsz%Warm-start fitting without increasingr  )r  r  r@   r	   objectrU  rH   r   r7  r8  assert_called_once)rB   rI   rJ   r   r   !mock_set_oob_score_and_attributess         rT   test_oob_not_computed_twicer  m  s     XqA'-O
DDDC 
,C4U4U
	*1\\+-TUGGAqM V 	*<<>
 

 VU
 
s$   .B22B&B2&B/	+B22B;c                     t        dd      }t        j                  |       }dd |  D cg c]  }| }}|j                  ||      j	                  |      }t        |j                  |       t        ||       y c c}w )Nr   Frl  ABCDEFGHIJKLMNOPQRSTU)r   r   eyerH   rK   r&   r   )r  r)  rI   chrJ   results         rT   test_dtype_convertr#    ss    'Q%HJ
yA-jy9:99A:^^Aq!))!,Fz**A.vq!	 	;s   	A9c           	         t         t        }}|j                  d   }t        |    } |dddd      }|j	                  ||       |j                  |      \  }}|j                  d   |d   k(  sJ |j                  d   |k(  sJ t        t        j                  |      |j                  D cg c]  }|j                  j                   c}       |j                  |      }	t        |	j                  d         D ]Q  }
t        |	d d |
f         D cg c]  \  }}||||
   |z   f    }}}t        |t        j                   |             S y c c}w c c}}w )Nr   rh   r1   Fr  r0   )rP   )r  r  rP   r@   rH   decision_pathr&   r   diffr	  r  
node_countrO   r   rE  r%   r   )rB   rI   rJ   r6   r   r   	indicatorn_nodes_ptreleavesest_idr   r   leave_indicators                 rT   test_decision_pathr.    sH   XqA
I'-O
qA%VW
XCGGAqM ..q1I{??1R000??1***
3??K?aqww11?K
 YYq\FQ( "&F"34
41 aV,q0014 	 
 	"/2773KL ) L
s   )E
Ec                      t        j                  dd      \  } }t        t        t        t
        g}|D ]?  } |d      }|j                  | |       |j                  D ]  }|j                  dk(  rJ  A y )Nr   r1   r?   r   )min_impurity_decrease)	r   r   r   r   r   r   rH   r	  r0  )rI   rJ   all_estimators	Estimatorr   r  s         rT   test_min_impurity_decreaser3    sr    $$sCDAq	N $	c21OOD --444 $ $rV   c                  f   t        d      } t        j                  d      }g d}d}t        j                  t
        |      5  | j                  ||       d d d        g d}d}t        j                  t
        |      5  | j                  ||       d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY w)	Nr}   rW   )r3   r3   )r0   r1   r3   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=  rH   )r   rI   rJ   r  s       rT   test_poisson_y_positive_checkr6    s    
)
4C
AA	/  
z	11 
2 	A	0  
z	11 
2	1 
2	1 
2	1s   B?B'B$'B0c                   (     e Zd Z fdZ fdZ xZS )	MyBackendc                 2    d| _         t        |   |i | y )Nr   )r   super__init__)selfargsr  re  s      rT   r;  zMyBackend.__init__  s    
$)&)rV   c                 J    | xj                   dz  c_         t        | 	         S )Nr1   )r   r:  
start_call)r<  re  s    rT   r?  zMyBackend.start_call  s    

a
w!##rV   )__name__
__module____qualname__r;  r?  __classcell__)re  s   @rT   r8  r8    s    *$ $rV   r8  testingc                  t   t        dd      } t        j                  d      5 \  }}| j                  t        t
               d d d        j                  dkD  sJ t        j                  d      5 \  }}| j                  t               d d d        |j                  dk(  sJ y # 1 sw Y   bxY w# 1 sw Y   'xY w)Nr5   r2   )rE   r   rD  r   )r   joblibparallel_backendrH   rI   rJ   r   r   )rR   bar   _s       rT   test_backend_respectedrJ    s    
 b
;C		 	 	+|F1 
, 88a<< 
	 	 	+wA! 
, 88q== 
,	+ 
,	+s   B"/B."B+.B7c                      t        dddd      \  } }t        ddd      j                  | |      }t        j                  d|j
                  j                         d	
      sJ y )Nr  r3   r1   )r6   r8   r<   r  rh   rq      )r   r<   rE   gHz>)abs_tol)r   r   rH   mathiscloser   r   )rI   rJ   rR   s      rT   #test_forest_feature_importances_sumrP    sa    AADAq !#	c!Qi  <<3337794HHHrV   c                     t        j                  d      } t        j                  d      }t        d      j	                  | |      }t        |j                  t        j                  dt         j                               y )N)r5   r5   )r5   r5   r  r   )r   r  r   r   rH   r&   r   float64)rI   rJ   gbrs      rT   *test_forest_degenerate_feature_importancesrT    sS    
A
A
R
0
4
4Q
:Cs//"BJJ1OPrV   c                     t        |    dd      }d}t        j                  t        |      5  |j	                  t
        t               d d d        y # 1 sw Y   y xY w)NFr^   r   rD  zl`max_sample` cannot be set if `bootstrap=False`. Either switch to `bootstrap=True` or set `max_sample=None`.r  )rA   r   r  r=  rH   rI   rJ   )rB   r   r  s      rT   test_max_samples_bootstraprW    sH     (
-3
OC	 
 
z	11 
2	1	1s   AAc                     t        |    dt        d            }d}t        j                  t        |      5  |j                  t        t               d d d        y # 1 sw Y   y xY w)NTg    eArV  z=`max_samples` must be <= n_samples=6 but got value 1000000000r  )rA   r   r   r  r=  rH   rI   rJ   )rB   r   r  s      rT    test_large_max_samples_exceptionrY  
  sE     (
-#c(
SCKE	z	/1 
0	/	/s   AA$c                 j   t        t        t        ddd      \  }}}}t        |    ddd      }|j	                  ||      j                  |      }t        |    dd d      }|j	                  ||      j                  |      }t        ||      }	t        ||      }
|	t        j                  |
      k(  sJ y )Nr/  r  r   )
train_sizer|   r<   Tr   r   rD  r<   )	r   rk   rl   rj   rH   rK   r   r   r   )rB   r   r   r   r   
ms_1_modelms_1_predictms_None_modelms_None_predictms_1_ms
ms_None_mss              rT   $test_max_samples_boundary_regressorsrc    s    '7u!($GVWf #4(CaJ >>'73;;FCL%d+DqM $''9AA&IO v6G#OV<JfmmJ////rV   c                 L   t        t        t        dt              \  }}}}t        |    ddd      }|j	                  ||      j                  |      }t        |    dd d      }|j	                  ||      j                  |      }t        j                  j                  ||       y )Nr   )r<   stratifyTr   r\  )	r   r   r   rG   rH   r   r   rD  r#   )	rB   r   r   r   rI  r]  
ms_1_probar_  ms_None_probas	            rT   %test_max_samples_boundary_classifiersrh  )  s    "2q7#GVWa $D)CaJ 1??GJ&t,DqM "%%gw7EEfMMJJz=9rV   csr_containerc                     g dg} | g dg      }t               }d}t        j                  t        |      5  |j	                  ||       d d d        y # 1 sw Y   y xY w)Nr   r   z3sparse multilabel-indicator for y is not supported.r  )r   r   r  r=  rH   )ri  rI   rJ   r   msgs        rT   test_forest_y_sparserl  <  sI    	Ayk"A
 
"C
?C	z	-1 
.	-	-s   AAForestClassc                    t         j                  j                  d      }|j                  dd      }|j                  d      dkD  } | d|d       } | d|d      }|j	                  ||       |j	                  ||       |j
                  d   j                  }|j
                  d   j                  }d}|j                  |j                  kD  sJ |       y )Nr1   i'  r2   r   )rE   r<   rD  z=Tree without `max_samples` restriction should have more nodes)r   r   r   r  rH   r	  r  r'  )	rm  r   rI   rJ   est1est2tree1tree2rk  s	            rT   'test_little_tree_with_small_max_samplesrs  F  s    
))


"C		%A		%1A D D 	HHQNHHQNQ%%EQ%%E
ICe...33.rV   Forestc                     ddl m} t        j                  dd      }|j                  \  }} |||      }t        |    dd|      }|j                  t        |       y )Nr   )MSEr0   r1   r2   )rE   r   rW   )sklearn.tree._criterionrv  rl   rF  rP   rj   rH   rk   )rt  rv  rJ   r6   	n_outputsmse_criterionr   s          rT   -test_mse_criterion_object_segfault_smoke_testrz  e  sR     ,b!A77Iy	9-M
F
#1
VCGGE1rV   c                  @   t         j                  j                  d      } t        j                  | j	                  dd            }t        dddd      j                  |      }|j                         }dD cg c]  \  }}d| d	|  }}}t        ||       y
c c}}w )z3Check feature names out for Random Trees Embedding.r   r   r   r2   F)rE   r   r  r<   ))r   r2   )r   r3   )r   rh   )r   ri   rX  )r1   r3   )r1   rh   )r1   ri   randomtreesembedding_rI  N)	r   r   r   r   r  r   rH   get_feature_names_outr&   )r<   rI   r  namesr  leafexpected_namess          rT   -test_random_trees_embedding_feature_names_outr  u  s    99((+L
|!!#q)*A!!5q	c!f  ((*E
	
		
JD$  vQtf-	
	   ~u-s   8Bc                 &   |j                  t        j                  j                  dt	        t
        d             t        j                  j                  d      }t        dd|      \  }} | |d	      }t        d
|      }t        |||d
       y)zRandomForestClassifier must work on readonly sparse data.

    Non-regression test for: https://github.com/scikit-learn/scikit-learn/issues/25333
    r-   r   )
max_nbytesr   )seedrL  r=   Tr   r2   )r   r<   )cvN)setattrsklearnensemble_forestr   r-   r   r   r   r   r   r   )ri  monkeypatchr   rI   rJ   rR   s         rT   test_read_only_bufferr    s       S)
 ))

Q

'C3ODAqad#A
 
<CCA!$rV   r  r   c                 x    t        j                  d      \  }}t        dd| d      }|j                  ||       y)z^Check low max_samples works and is rounded to one.

    Non-regression test for gh-24037.
    T)
return_X_yr5   g-C6?r   )rE   rD  r  r<   N)r   	load_winer   rH   )r  rI   rJ   rY  s       rT   .test_round_samples_to_one_when_samples_too_lowr    s<     .DAq#TSTF JJq!rV   r  r   c                 |   t        dd      \  }}|rd}nd} | d|d||      }|j                  ||       |j                  j                         }t	        ||j                         |j
                  }t        |t              sJ t        |      t        |      k(  sJ |d   j                  t        j                  k(  sJ t        t        |            D ]{  }	|rRt        ||	         t        |      d	z  k(  sJ t        t        j                  ||	               t        ||	         k  rUJ t        t        ||	               t        |      k(  r{J  d}
||
   }||
   }||   }||   }|j                  j                   }t#        |      }|j                  ||       |j                  j                   }t%        ||       y)
zEstimators_samples_ property should be consistent.

    Tests consistency across fits and whether or not the seed for the random generator
    is set.
    rL  r1   r?   r^   Nr5   )rE   rD  rF   r<   r   r   r2   )r   rH   estimators_samples_r   r&   r	  r  r   rN   r   r   int32r   r   r'  r  valuer   r#   )rm  r   r  rI   rJ   rD  r   estimators_samples
estimatorsr   estimator_indexestimator_samplesr9  r   r   orig_tree_valuesnew_tree_valuess                    rT   test_estimators_samplesr    s    c:DAq
C GGAqM00557 )3+B+BCJ($///!"c*o555a &&"((2223z?#)!,-Q1<<< ryy!3A!6783?QRS?T;UUUUs-a012c!f<<< $ O*?;?+I!"G!"G ,,i IMM'7#oo++O$o6rV   zmake_data, Forestc                 P   t         j                  j                  d      }d\  }} | |||      \  }}|j                         }t         j                  ||j                  ddg|j                  ddg      <   t        j                  |      j                         sJ t        ||d	      \  }}	}
} ||d
      }|j                  ||
       |j                  |	|      }t        ||d	      \  }}}
} ||d
      }|j                  ||
       |j                  ||      }|d|z  k\  sJ y)zJCheck that forest can deal with missing values and has decent performance.r   )r  r5   r=   FTffffff?r   rv   r   r   r1  )r<   rE   r   N)r   r   r   r   nanchoicerP   isnananyr   rH   rb   )	make_datart  r   r6   r7   rI   rJ   	X_missingX_missing_trainX_missing_testr   r   forest_with_missingscore_with_missingr   r   rY  score_without_missings                     rT    test_missing_values_is_resilientr    s+    ))


"C$IzyZcRDAq IIKIcjj%QWWtjEF88I""$$$7G1184O^Wf
 !cCOW5,22>6J (811'M$GVWf26F
JJw "LL8 (=!====rV   c                    t         j                  j                  d      }d}|j                  |df      }|j	                  dd|      }|j                  ddg|d	d
g      }|j                  t              }||    ||<   |j                  |      }t         j                  ||<   t        j                  |      j                         sJ |j                         }||dddf<   t        |||d      \  }	}
}}}} | d      j                  |	|      } | d      j                  ||      }|j                  |
|      }|dk\  sJ ||j                  ||      k\  sJ y)z_Check that the forest learns when missing values are only present for
    a predictive feature.r   r  r5   r  r2   )ru   rv   FTr  r   r  Nrh   r   g      ?)r   r   r   standard_normalr   r  r   r   r  r  r  r   r   rH   rb   )rt  r   r6   X_non_predictiverJ   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_scores                     rT    test_missing_value_is_predictiver    s    ))


"CI**B*@AAI.A JJt}9tJMMXXd^F#M22F=,,),<!#v88&'++---#((*L+LA 	'7KA.223EwO"2667MwW-334EvN D((( $9$?$?v%   rV   c                      t        j                  g dt         j                  ddgg      } ddg}t        d      }d}t	        j
                  t        |	      5  |j                  | |       d
d
d
       y
# 1 sw Y   y
xY w)zDRaise error for unsupported criterion when there are missing values.r  r   r  r^   r   re   r5  z4RandomForestRegressor does not accept missing valuesr  N)r   r  r  r   r   r  r=  rH   )rI   rJ   rY  rk  s       rT   =test_non_supported_criterion_raises_error_with_missing_valuesr  8  sa    
)bffa-./A	c
A"-=>F
@C	z	-

1a 
.	-	-s   A44A=)r  )__doc__	itertoolsrN  ra  collectionsr   	functoolsr   r   r   typingr   r   unittest.mockr	   rF  numpyr   r   scipy.specialr
   r  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.   rI   rJ   rL   rM   r   r   	load_irisr_   r   permutationra   rv   permr`   make_regressionrk   rl   r  r  r   float32parallelget_active_backendre  DEFAULT_JOBLIB_BACKENDrG   rj   r  dictr@   str__annotations__updater   rA   markparametrizerU   rc   ro   r   r   r   r   rR  chainr   r  r  r   r  r-  r4  r:  r>  rA  rP  rV  rZ  r_  rj  rs  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r.  r3  r6  r8  register_parallel_backendrJ  rP  rT  rW  rY  rc  rh  rl  rs  rz  r  r  r  r  r  r  r   rV   rT   <module>r     s      #  +        # B . (  .  T S ! 2   O N 3 + 7 	"XBx"bAq6Aq6Aq6:"X1v1v 08//  x
t{{''(IIdO	kk$ (x''#"STUu /X..!L (??2::&  ;;=a@JJ  14  /2  0  %)F 4S> *   + ,   * +   , -0B0G0G0I tCH~ I  $ $%6 7 !34< 5<& !34&:;W < 5W" !23D 422/j &BC> D>& !23( 4( !34
 5
  2::rzz":;IOO"VZ$89!#VW'H <'HTj@Z !23C 4C +-?-F-F-HI#HI 	
)X))C1STU	
	
	
)X))!11	
 		
 IIKK!Oa	

	
4X44sQRS	
	
!0 tWXw-O&PQ'E R1 J J6'ET *,=,D,D,FG#HI	
%X%%"	
 		
	
%X%%"	
 		
" t-E&FG%= H# J H(%=P *,I,P,P,RS
. T
. *,I,P,P,RS	 T	 +-?-F-F-HI J *,=,D,D,FGJ HJ: tUm4C 5C !34$ 5$ !>?) @), !>? @* !>?00 @00f !344, 54,n !349 59$
1L( 1 1. .9P :P2&3l !23/ 4/ !23S 4S& !23R 4R. !23
 4
> !237.H
 4
> !>?2::rzz":;; < @;8 !23 4$ !34,N 5,N^ !34 5 !34 5* !23 48 !23< 4<" !23 4 !235 452 !>?/. @/.d !>?? @?(" !>?M @M05$,$& $ !    I 6  IQ !>?	 @	 !>? @ !230 40* !34: 5:$ .9 : )?AV(WX4 Y4< #45 6.4 .9% :%& *>)EF	 G	 $+tUm4(E(L(L(NO37 P 5 ,37l 		!	!#89		%	%'=>>>> $:<Q#RS% T%P	rV   