
     hE                    
   U d Z ddlZddlZddlmZ ddlZddlZddlZddlZddl	Z
ddlmZ ddlmZ ddlmZ ddlmZ ddlZddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl-m/Z/ ddl-m0Z0 ddl-m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl4m7Z8 dd l4m9Z9 dd!l4m:Z: dd"l4m;Z; dd#l4m<Z< dd$l=m>Z> dd%l=m?Z? dd&l2m@Z@ dd'l)mAZA d(ZBd)ZCe.e0d*ZDe/e1d+ZE eF            ZGeFeHd,<   eGI                    eD           eGI                    eE           g d-ZJ e
jK        g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg          ZLg dEZMg dFZNdGdHgdHdHgdHdGgdIdIgdIdJgdJdIggZOg dKZPdHdHgdJdJgdLdJggZQg dMZR e@jS                    ZTe
jU        V                    dI          ZWeWX                    eTjY        jZ                  Z[eTj\        e[         eT_\        eTjY        e[         eT_Y         e@j]                    Z^eWX                    e^jY        jZ                  Z[e^j\        e[         e^_\        e^jY        e[         e^_Y         e@j_                    Z`eWX                    e`jY        jZ                  Z[e`j\        e[         e`_\        e`jY        e[         e`_Y         e(d          Za e@jb        ddNdOP          \  ZcZdeae                    dQR          ZfdSefefdTk    <   eag                    ddUdVR          Zh edWdOdXdY          i                                ZjeTj\        eTjY        dZe^j\        e^jY        dZe`j\        e`jY        dZeOePdZeLeMdZeLeNdZeceddZefehdZef ehdZejehdZ e
jk        d[          ehdZd\ZlelD ]"Zm eelem         d]                   elem         d^<   #d_ Znd` Zoda Zpejq        r                    dbeEs                                          ejq        r                    dceC          dd                         Ztde Zudf Zvejq        r                    dgeEw                                          ejq        r                    dceC          dh                         Zxe$ejq        r                    dgeEw                                          ejq        r                    didjdkedlfdmdWedlfdndkedlfdodkedNfg          dp                                     Zydq Zzdr Z{ds Z|dt Z}du Z~dv Zdw Zejq                            dx          dy             Zdz Zd{ Zd| Zdd~Zejq        r                    deG          d             Zejq        r                    deJ          d             ZddZejq        r                    deG          d             Zejq        r                    deJ          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zejq        r                    deD          d             Zd Zejq        r                    deD          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZejq        r                    deJ          ejq        r                    dd          d                         Zejq        r                    d e eeJ                              eE                              ejq        r                    dddg          d                         Zd Zd Zejq        r                    deJ          ejq        r                    dg d          ejq        r                    deeg          d                                     ZddZejq        r                    deJ          d             Ze#d             Zejq        r                    deG          d             Zd Zd Zejq        r                    deG          d             Zd Zd Zejq        r                    deG          d             Zejq        r                    deJ          d             Zd Zd Zejq        r                    deG          d             Zd Zejq        r                    deG          d             Zd Zd Zd Zejq        r                    dceB          ejq        r                    d e eel                                          ddhz
                      ejq        r                    de.e0g          d                                     Zejq        r                    dceC          ejq        r                    del                                          ejq        r                    de/e1g          d                                     Zd Zd Zd Zejq        r                    deG          ejq        r                    dddg          ejq        r                    dg dĢ          dń                                     Zejq        r                    dcg dƢ          ejq        r                    dbeEs                                          dǄ                         Zejq        r                    d edL                    dɄ             Zdʄ Zejq        r                    dceC          d˄             Zejq        r                    dbe.e0g          ejq        r                    ddJdUg          d̈́                         Zd΄ Zdτ ZdЄ Zdф Zd҄ Zdӄ ZdԄ ZdՄ Zdք Zdׄ Zd؄ Zdل Zejq        r                    dbeGs                                          dڄ             ZdS )z-
Testing for the tree module (sklearn.tree).
    N)product)assert_allclose)
csc_matrix)
csr_matrix)
coo_matrix)NumpyPickler)_sparse_random_matrix)DummyRegressor)accuracy_score)mean_squared_error)mean_poisson_deviance)train_test_split)assert_array_equal)assert_array_almost_equal)assert_almost_equal)create_memmap_backed_data)ignore_warnings)skip_if_32bit)check_sample_weights_invariance)check_random_state)	_IS_32BIT)NotFittedError)DecisionTreeClassifier)DecisionTreeRegressor)ExtraTreeClassifier)ExtraTreeRegressor)tree)	TREE_LEAFTREE_UNDEFINED)Tree)_check_n_classes)_check_value_ndarray)_check_node_ndarray)
NODE_DTYPE)CRITERIA_CLF)CRITERIA_REG)datasets)compute_sample_weight)ginilog_loss)squared_errorabsolute_errorfriedman_msepoisson)r   r   )r   r   	ALL_TREES)r   r   r   r   )r   r      r   r   r      ir   r   r   r   r   )r   r         r   r2   r   r   r1   皙?r   r0   r1   )r7   r   r         r   r    @r1   r   r   r8   r   r1   )r7   r7   r   g333333r   r   r   r   r   r   r6   r   r   r1   )r7   r7   r   r   r   r   r   r4   r   r   r   r   r   r1   )r7   r   r0   
   r0   r   皙	r   r0   r4   r2   r1   )zG @r         r      r   r   r=            ?r   r;   r1   )r>   r   r?   r@   r   rA   r   r   r=   rB   r   r   r:   r1   )r>      r?   r@   r   rA   r   r   r=   rB   r   r   r:   r1   )r>   rD   r?   r@   r   rA   r   r   r=   rB   rC   r   r7   r   )   rD   r3   r1   rC   r2   r<   r   r1   r5   r4   r   rE   r   )rE   r   r1   r1   r1   r7   r1   r   r   r:   r4   r   r1   r   )rE   r   r1   rE   r4   r7   r<   rE   r   r7   r1   rE   rE   r   )r1   r1   r   rE   rE   r7   r1   rE   r   r5   r1   rE   r4   r   )r4   r1   r   r4   r   r2   r<   r   r1   r5   r4   r   r4   r1   )r>   rD   r?   r@   r   r1   r   r   r=   rB   rC   r   r;   r1   )r>   rD   r?   r@   r   r1   r   r   r=   rB         ?r1   r7   r7   )r>   rD   r?   r@   r   r<   r   r   r=   rB   rC   r   r7   r7   )rE   r   r3   r1   rC   r:   r<   r   r1   r5   r4   r1   r   r7   )rE   r   r1   r1   r1   r:   r1   r   r   r:   r   r   r   r1   )rE   r1   r1   r1   rE   r7   r<   rE   r   r7   r   rE   r1   r1   )r1   r1   r   r   r1   r;   r1   rE   r   r5   r1   rE   r1   r1   )r4   r1   r   r1   r   r2   r1   r   r1   r:   r   r   r1   r   )r1   r1   r   r   r   r   r1   r1   r1   r1   r1   r1   r   r   r   r1   r   r   r1   r   r   r   r   )      ?r9   333333?皙?r<   g333333@@g)\(?{Gz?gףp=
@rJ   g?        rH   rE   rA   r   r         @g|?5^?g(\??r   r:   r7   r1   rE   )r7   r7   r7   r1   r1   r1   r4   )r7   r1   r1      r<   )random_state	n_samples
n_features)   r3   sizerL   g?r0   )rS   rS   g      ?)densityrP   Xy)rS   r4   )irisdiabetesdigitstoy	clf_small	reg_small
multilabel
sparse-pos
sparse-neg
sparse-mixzerosrX   X_sparsec                 4   |j         | j         k    s)J d                    ||j         | j                               t          | j        |j        |dz              t          | j        |j        |dz              | j        t
          k    }t          j        |          }t          | j        |         |j        |         |dz              t          | j	        |         |j	        |         |dz              t          | j
                                        |j
                                        |dz              t          | j
        |j
        |dz              t          | j        |j        |dz   	           t          | j        |         |j        |         |d
z   	           d S )Nz({0}: inequal number of node ({1} != {2})z: inequal children_rightz: inequal children_leftz: inequal featuresz: inequal thresholdz: inequal sum(n_node_samples)z: inequal n_node_samplesz: inequal impurityerr_msgz: inequal value)
node_countformatr   children_rightchildren_leftr   nplogical_notfeature	thresholdn_node_samplessumr   impurityr   value)dsmessageexternalinternals        X/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/tree/tests/test_tree.pyassert_tree_equalr{      s   	$$$188q|  	%$$
 	!*G6P,P   	'4M*M   9,H~h''H		(QYx0'<P2P   	Hq{84g@U6U   		11  
 	!*G6P,P   
AJBV8VWWWW	178,g@Q6Q         c                     t                                           D ]\  } } |d          }|                    t          t                     t          |                    t                    t          d	                    |                       |dd          }|                    t          t                     t          |                    t                    t          d	                    |                      d S )Nr   rP   Failed with {0}r1   )max_featuresrP   )
	CLF_TREESitemsfitrX   rY   r   predictTtrue_resultrj   namer    clfs      rz   test_classification_toyr      s    oo'' X X
dd"""13;;q>>;8I8P8PQU8V8VWWWd22213;;q>>;8I8P8PQU8V8VWWWWX Xr|   c            
      ~   t                                           D ]!\  } } |d          }|                    t          t          t          j        t          t                                         t          |	                    t                    t          d                    |                      |                    t          t          t          j        t          t                    d                     t          |	                    t                    t          d                    |                      #d S )Nr   r~   sample_weightr   rC   )r   r   r   rX   rY   rm   oneslenr   r   r   r   rj   fullr   s      rz    test_weighted_classification_toyr      s    oo'' X X
dd"""1BGCFFOO4443;;q>>;8I8P8PQU8V8VWWW1BGCFFC$8$89993;;q>>;8I8P8PQU8V8VWWWWX Xr|   r    	criterionc                 >   |dk    rgt          j        t          j        t                              dz   }t          j        t                    |z   }t          j        t
                    |z   }nt          }t
          } | |d          }|                    t          |           t          |	                    t                    |            | |dd          }|                    t          |           t          |	                    t                    |           d S )Nr.   r1   r   rP   r   r   rP   )rm   absminrY   arrayr   r   rX   r   r   r   )r    r   ay_trainy_testregr   s          rz   test_regression_toyr     s     I F26!99!(1++/+&&*
$
3
3
3CGGAwCKKNNF+++
$
C
C
CCGGAwCKKNNF+++++r|   c                     t          j        d          } d| d dd df<   d| dd dd f<   t          j        | j                  \  }}t          j        |                                |                                g          j        }|                                 } t                                          D ]\  }} |d          }|	                    ||            |
                    ||           dk    sJ d                    |                       |dd          }|	                    ||            |
                    ||           dk    sJ d                    |                      d S )	N)r<   r<   r1   r3   r   r~   rG   r   rP   r   )rm   rd   indicesshapevstackravelr   r   r   r   scorerj   )rY   gridxgridyrX   r   r    r   s          rz   test_xorr     sb   
AAbqb"1"fIAabb!""fI:ag&&LE5
	5;;==%++--0113A			Aoo'' F F
dd"""1yyA#%%%'8'?'?'E'E%%%d2221yyA#%%%'8'?'?'E'E%%%%F Fr|   c                     t          t                                          t                    D ]0\  \  } }} ||d          }|                    t
          j        t
          j                   t          |	                    t
          j                  t
          j                  }|dk    sJ d
                    | ||                       ||dd          }|                    t
          j        t
          j                   t          |	                    t
          j                  t
          j                  }|dk    sJ d
                    | ||                      2d S )Nr   r   rN   z0Failed with {0}, criterion = {1} and score = {2}rE   r   rC   )r   r   r   CLF_CRITERIONSr   rZ   datatargetr   r   rj   )r   r    r   r   r   s        rz   	test_irisr   3  s*   #*9??+<+<n#M#M 
 
tidYQ777	4;'''s{{4955t{CCs{{{NUU)U
 
{{{ dYQQGGG	4;'''s{{4955t{CCs{{{NUU)U
 
{{{{
 
r|   z
name, Treec                 8    ||d          }|                     t          j        t          j                   t	          t          j        |                    t          j                            }|t          j        d          k    sJ d|  d| d|             d S )Nr   r   zFailed with z, criterion = z and score = )r   r[   r   r   r   r   pytestapprox)r   r    r   r   r   s        rz   test_diabetes_overfitr   E  s    
 $
3
3
3CGGHM8?+++xHM0J0JKKEFM	    IdII)II%II    r|   z&criterion, max_depth, metric, max_lossr+      <   r,   r-   r.   c                      |||dd          }|                     t          j        t          j                    |t          j        |                    t          j                            }d|cxk     r|k     sn J d S )NrB   r   )r   	max_depthr   rP   )r   r[   r   r   r   )r   r    r   r   metricmax_lossr   losss           rz   test_diabetes_underfitr   R  s     $iaVW
X
X
XCGGHM8?+++6(/3;;x}#=#=>>Dthr|   c            	      B   t                                           D ]\  } } |ddd          }|                    t          j        t          j                   |                    t          j                  }t          t          j	        |d          t          j
        t          j        j        d                   d                    |                      t          t          j        |d          |                    t          j                  d                    |                      t!          |                    t          j                  t          j        |                    t          j                            dd                    |                      d S )Nr1   *   )r   r   rP   r   r   rg   rD   )r   r   r   rZ   r   r   predict_probar   rm   rr   r   r   rj   r   argmaxr   r   exppredict_log_proba)r   r    r   prob_predicts       rz   test_probabilityr   g  sg     oo'' 
 

ddQQR@@@	4;'''((33!F<##GDIOA&''%,,T22	
 	
 	
 	

 	IlA&&KK	""%,,T22	
 	
 	
 	

 	di((F3((3344%,,T22		
 	
 	
 	
 	

 
r|   c                     t          j        d          d d t           j        f         } t          j        d          }t                                          D ](\  }} |d d          }|                    | |           )d S )N'  r   r   rP   )rm   arangenewaxis	REG_TREESr   r   rX   rY   r   r    r   s        rz   test_arrayreprr     s     		%BJ'A
	%Aoo''  
ddT2221 r|   c                     ddgddgddgddgddgddgg} g d}t                                           D ]_\  }} |d          }|                    | |           t          |                    |           |d                    |          	           `t                                          D ]_\  }} |d          }|                    | |           t          |                    |           |d                    |          	           `d S )
Nr:   r7   r1   rE   )r1   r1   r1   r1   r1   r1   r   r~   r   rg   )r   r   r   r   r   rj   r   r   )rX   rY   r   TreeClassifierr   TreeRegressorr   s          rz   test_pure_setr     s,   
bB8b"X1v1v1v>AA ) 1 1 V Vnn!,,,13;;q>>16G6N6Nt6T6TUUUUU(00 W Wmm+++1CKKNNA7H7O7OPT7U7UVVVVVW Wr|   c            
         t          j        g dg dg dg dg dg dg dg          } t          j        g d          }t          j        d	
          5  t                                          D ]m\  }} |d          }|                    | |           |                    | |            |                    |  |           |                    |  |            n	 d d d            d S # 1 swxY w Y   d S )N)gs_c@d	a@籛 `8`@?c@)g_9a@g 8`@g-Vu]@g    @Xd@)gSW j_@r   r   r   )g ً`@4Ta@	lKa@{c@)g|@Y@g~G`a@gwI?lKa@g/"c@)g_@r   r   r   )g:^@r   r   r   )rG   gAw?gtQ?5??rL   g7G?gۺ?gb'?raise)allr   r~   )rm   r   errstater   r   r   r   s        rz   test_numerical_stabilityr     sh   
DDDDDDDDDDDDDDDDDDDDD	

	 
	A 	WWWXXA		!	!	!  #//++ 	 	JD$$A&&&CGGAqMMMGGArNNNGGQBNNNGGQBOOOO	                 s   BC++C/2C/c            	         t          j        ddddddd          \  } }t                                          D ]\  }} |d          }|                    | |           |j        }t          j        |dk              }|j        d         dk    sJ d		                    |                      |dk    sJ d		                    |                      t          d          }|                    t          j        t          j                   t          dt          t          j                  
          }|                    t          j        t          j                   t          |j        |j                   d S )Ni  r<   r4   r   FrQ   rR   n_informativen_redundant
n_repeatedshufflerP   r~   皙?r   rP   max_leaf_nodes)r'   make_classificationr   r   r   feature_importances_rm   rr   r   rj   r   rZ   r   r   r   r   )rX   rY   r   r    r   importancesn_importantclf2s           rz   test_importancesr     se   '  DAq  oo'' @ @
dd"""1.f[3.// #r)))+<+C+CD+I+I)))a!2!9!9$!?!? !a
0
0
0CGGDIt{###!qTYPPPDHHTY$$$s/1JKKKKKr|   c                      t                      } t          j        t                    5  t	          | d           d d d            d S # 1 swxY w Y   d S )Nr   )r   r   raises
ValueErrorgetattr)r   s    rz   test_importances_raisesr     s    
 
"
"C	z	"	" - -+,,,- - - - - - - - - - - - - - - - - -s   AA
A
c            	      .   t          j        ddddddd          \  } }t          ddd	                              | |          }t	          d
dd	                              | |          }t          |j        |j                   t          |j        j	        |j        j	                   t          |j        j
        |j        j
                   t          |j        j        |j        j                   t          |j        j        |j        j                   d S )Ni  r<   r4   r   Fr   r)   r3   )r   r   rP   r+   )r'   r   r   r   r   r   r   r   tree_ro   rl   rk   rq   )rX   rY   r   r   s       rz   )test_importances_gini_equal_squared_errorr     s    '  DAq !6QQ
O
O
O
S
S	1 C  !QQ  	c!Qii  0#2JKKKsy(#)*;<<<sy.	0GHHHsy/1IJJJsy/1IJJJJJr|   z7ignore:`max_features='auto'` has been deprecated in 1.1c                     t                                           D ]]\  } } |d          }|                    t          j        t          j                   |j        t          j        j        d         k    sJ ^t                                          D ]H\  } } |d          }|                    t          j        t          j                   |j        dk    sJ It                                          D ]\  } } |d          }|                    t          j        t          j                   |j        t          t          j        t          j        j        d                             k    sJ  |d          }|                    t          j        t          j                   |j        t          t          j        t          j        j        d                             k    sJ  |d          }|                    t          j        t          j                   |j        dk    sJ  |d          }|                    t          j        t          j                   |j        dk    sJ  |d          }|                    t          j        t          j                   |j        dk    sJ  |d	          }|                    t          j        t          j                   |j        t          d	t          j        j        d         z            k    sJ  |d
          }|                    t          j        t          j                   |j        t          j        j        d         k    sJ  |d           }|                    t          j        t          j                   |j        t          j        j        d         k    sJ d S )Nautor   r1   rE   sqrtlog2r4   rK   rC   rG   )r   r   r   r[   r   r   max_features_r   r   rZ   r/   intrm   r   r   )r   r   r   r   r   TreeEstimatorests          rz   test_max_featuresr     sE     )00 ; ;mm000x/// HM$7$:::::: ) 1 1 & &nn&111	4;''' A%%%%%(00 7 7mm000	4;''' C	0B(C(C$D$DDDDDm000	4;''' C	0B(C(C$D$DDDDDm+++	4;''' A%%%%m+++	4;''' A%%%%m...	4;''' A%%%%m---	4;''' Cdioa.@(@$A$AAAAAm---	4;''' DIOA$66666m...	4;''' DIOA$666666?7 7r|   c                  z
   t                                           D ]r\  } } |            }t          j        t                    5  |                    t                     d d d            n# 1 swxY w Y   |                    t          t                     g dg}t          j        t                    5  |                    |           d d d            n# 1 swxY w Y    |            }t          d d         }t          j        t                    5  |                    t          |           d d d            n# 1 swxY w Y   t          j        t                    } |            }|                    |t                     t          |                    t                    t                      |            }t          j        t                    5  |                    t                     d d d            n# 1 swxY w Y   |                    t          t                     t          j        t                    }t          j        t                    5  |                    |d d dd f                    d d d            n# 1 swxY w Y   t          j        t                    j        } |            }|                    t          j        t          |          t                     t          j        t                    5  |                    t                     d d d            n# 1 swxY w Y   t          j        t                    5  |                    t                     d d d            n# 1 swxY w Y    |            }|                    t          t                     t          j        t                    5  |                    |           d d d            n# 1 swxY w Y   t          j        t                    5  |                    |           d d d            n# 1 swxY w Y    |            }t          j        t                    5  |                    t                     d d d            n# 1 swxY w Y   tt)          d          }t          j        t          d          5  |                    g dgg d	           d d d            n# 1 swxY w Y   t          j        t          d
          5  |                    g dgg d           d d d            d S # 1 swxY w Y   d S )N)r:   r7   r1   r7   r1   r.   r   zy is not positive.*Poissonmatchr   r1   rE   )r   r   r   zSome.*y are negative.*Poisson)r3   grE   )r   r   r   r   r   r   rX   r   rY   r   rm   asfortranarrayr   r   r   r   asarrayr   dotapplyr   )	r   r   r   X2y2XftXtr   s	            rz   
test_errorr  )  s   (00 6 6mmoo]>** 	! 	!a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	1kk]]:&& 	" 	"b!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" moossV]:&& 	 	GGArNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 q!!mooACKKNNK888 moo]>** 	 	KKNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	1JqMM]:&& 	" 	"KK!!!QRR%!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" Xa[[]mooq"q!!!]:&& 	 	KKNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	 	IIaLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 moo1]:&& 	 	KKOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	 	IIbMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 moo]>** 	 	IIaLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  )
4
4
4C	z)E	F	F	F ( (YYY'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	z)H	I	I	I + +\\\***+ + + + + + + + + + + + + + + + + +s   A**A.	1A.	3CC	C	D::D>	D>	G::G>	G>	"JJ		J		L++L/	2L/	M66M:	=M:	O&&O*	-O*	
P,,P0	3P0	RR	R	9S!!S%(S%T00T47T4c                     t          j        t          j        t          j        j                  } t          j        }t          dt          
                                          D ]\  }}t          |         } |d|d          }|                    | |           |j        j        |j        j        dk             }t          j        |          dk    sJ d                    |                       |d	|d          }|                    | |           |j        j        |j        j        dk             }t          j        |          dk    sJ d                    |                      d
S )z Test min_samples_split parameterdtypeN  r<   r   )min_samples_splitr   rP   r7   	   r   r6   N)rm   r   rZ   r   r   _treeDTYPEr   r   r/   keysr   r   rq   rl   r   rj   )rX   rY   r   r   r   r   node_sampless          rz   test_min_samples_splitr  k  sc   
$)4:+;<<<AA !(inn6F6F G G H H!$ m a
 
 
 	1y/	0G20MNvl##a'''):)A)A$)G)G''' m!.q
 
 
 	1y/	0G20MNvl##a'''):)A)A$)G)G''''+H Hr|   c                  @   t          j        t          j        t          j        j                  } t          j        }t          dt          
                                          D ]9\  }}t          |         } |d|d          }|                    | |           |j                            |           }t          j        |          }||dk             }t          j        |          dk    sJ d                    |                       |d|d          }|                    | |           |j                            |           }t          j        |          }||dk             }t          j        |          dk    sJ d                    |                      ;d S )	Nr	  r  r3   r   )min_samples_leafr   rP   r0   r   r   )rm   r   rZ   r   r   r  r  r   r   r/   r  r   r   r  bincountr   rj   )	rX   rY   r   r   r   r   outnode_counts
leaf_counts	            rz   test_min_samples_leafr    s   
$)4:+;<<<AA !(inn6F6F G G F F!$ m~A
 
 
 	1iooa  k#&& !12
vj!!A%%%'8'?'?'E'E%%% m a
 
 
 	1iooa  k#&& !12
vj!!A%%%'8'?'?'E'E%%%%/F Fr|   Fc                    |r1t           |         d                             t          j                  }n0t           |         d                             t          j                  }t           |         d         }t                              |j        d                   }t          j        |          }t          |          }t          dt          j
        ddd                    D ]\  }}	 ||	|d          }
|
                    |||	           |r-|
j                            |                                          }n|
j                            |          }t          j        ||
          }||dk             }t          j        |          ||
j        z  k    s#J d                    | |
j                              |j        d         }t          dt          j
        ddd                    D ]\  }}	 ||	|d          }
|
                    ||           |r-|
j                            |                                          }n|
j                            |          }t          j        |          }||dk             }t          j        |          ||
j        z  k    s#J d                    | |
j                              dS )zPTest if leaves contain at least min_weight_fraction_leaf of the
    training setre   rX   rY   r   r  rC   rB   )min_weight_fraction_leafr   rP   r   )weightsz,Failed with {0} min_weight_fraction_leaf={1}N)DATASETSastyperm   float32rngrandr   rr   r/   r   linspacer   r   r  tocsrr  r   r  rj   )r   r'   sparserX   rY   r  total_weightr   r   fracr   r  node_weightsleaf_weightss                 rz   check_min_weight_fraction_leafr*    s     7Xz*11"*==Xs#**2:663Ahhqwqz""G6'??LdOM !(bk!S!6L6L M M 
 
m%).WX
 
 
 	1G,,, 	%)//!'')),,CC )//!$$C{3888#LA$56F<  L33O$OOOO9@@#.
 
 POOO 71:L 'bk!S!6L6L M M 
 
m%).WX
 
 
 	1 	%)//!'')),,CC)//!$$C{3''#LA$56F<  L33O$OOOO9@@#.
 
 POOO
 
r|   r   c                 &    t          | d           d S NrZ   r*  r   s    rz   ,test_min_weight_fraction_leaf_on_dense_inputr/    s    "400000r|   c                 (    t          | dd           d S Nr`   Tr-  r.  s    rz   -test_min_weight_fraction_leaf_on_sparse_inputr2    s    "4t<<<<<r|   c                 r   |r1t           |         d                             t          j                  }n0t           |         d                             t          j                  }t           |         d         }|j        d         }t
          |          }t          dt          j        ddd                    D ]\  }} |||dd	          }	|	                    ||           |r-|	j	        
                    |                                          }
n|	j	        
                    |          }
t          j        |
          }||dk             }t          j        |          t          ||	j        z  d          k    s)J d
                    | |	j        |	j                              t          dt          j        ddd                    D ]\  }} |||dd	          }	|	                    ||           |r-|	j	        
                    |                                          }
n|	j	        
                    |          }
t          j        |
          }||dk             }t          j        |          t          ||	j        z  ||	j        z            k    s)J d
                    | |	j        |	j                              dS )zzTest the interaction between min_weight_fraction_leaf and
    min_samples_leaf when sample_weights is not provided in fit.re   rX   rY   r   r  rC   r4   r3   )r  r   r  rP   zBFailed with {0} min_weight_fraction_leaf={1}, min_samples_leaf={2}r   N)r  r  rm   r   r   r/   r   r#  r   r   r  r$  r  r   maxr  rj   r  )r   r'   r%  rX   rY   r&  r   r   r'  r   r  r(  r)  s                rz   4check_min_weight_fraction_leaf_with_min_samples_leafr5    s     7Xz*11"*==Xs#**2:663A71:LdOM 'bk!S!6L6L M M 
 
m%))	
 
 
 	1 	%)//!'')),,CC)//!$$C{3''#LA$56vl##sC881(
 (
 
 
 
OVV#.0D
 

 
 
 

 !(bk!S!6L6L M M 
 
m%)) 	
 
 
 	1 	%)//!'')),,CC)//!$$C{3''#LA$56vl##sC88C00(
 (
 
 
 
 PVV#.0D
 

 
 
 
%
 
r|   c                 &    t          | d           d S r,  r5  r.  s    rz   Btest_min_weight_fraction_leaf_with_min_samples_leaf_on_dense_inputr8  .  s    8vFFFFFr|   c                 (    t          | dd           d S r1  r7  r.  s    rz   Ctest_min_weight_fraction_leaf_with_min_samples_leaf_on_sparse_inputr:  3  s    8|TRRRRRr|   c                  $   t          j        dd          \  } }t          dt                                                    D ]\  }}t          |         } ||d          } ||dd          } ||d	d          } ||d
d          }|df|df|d	f|d
ffD ]s\  }	}
|	j        |
k    s#J d                    |	j        |
                      |	                    | |           t          |	j	        j
                  D ]}|	j	        j        |         t          k    r|	j	        j        |         }|	j	        j        |         }|	j	        j        |         }|	j	        j        |         }|	j	        j        |         }||z  }|	j	        j        |         }|	j	        j        |         }|	j	        j        |         }||z  }||z   }||z  }|	j	        j        |         | j        d         z  }|||z
  z  }||
k    sJ d                    ||
                      ud S )Nr   r   rQ   rP   r  r   r   rP   rI   )r   min_impurity_decreaserP   g-C6?r   gHz>z)Failed, min_impurity_decrease = {0} > {1}z2Failed with {0} expected min_impurity_decrease={1})r'   r   r   r/   r  r>  rj   r   ranger   ri   rl   r   rs   weighted_n_node_samplesrk   r   )rX   rY   r   r   r   est1est2est3est4r   expected_decreasenode
imp_parent
wtd_n_nodeleft
wtd_n_leftimp_leftwtd_imp_leftrightwtd_n_right	imp_rightwtd_imp_rightwtd_avg_left_right_impfractional_node_weightactual_decreases                            rz   test_min_impurity_decreaserT  8  s    '%bIIIDAq !(inn6F6F G G > >!$ }NKKK})TU
 
 
 })VW
 
 
 })ST
 
 

 4L4L6N3K	'
 ,	 ,	"C" )->>>>:AA)+<  ?>> GGAqMMMci233     9*40I==!$!3D!9J!$!B4!HJ9248D!$!B4!HJ"y1$7H#-#8LI4T:E"%)"CE"JK #	 25 9I$/)$;M-:\-I**j8* 	9$?!'!*L + '="%;;'O
 (+<<<<KRR'):  =<<; ,	%> >r|   c            
         t                                           D ]6\  } }d| v rt          j        t          j        }}nt
          j        t
          j        }} |d                              ||                               ||          }g d}fd|D             }t          j	                  }t          j
        |          }t          |          j        k    sJ |                    ||          }	||	k    sJ d                    |                       |D ]3}
t          t          |j        |
          ||
         d|
 d|  	           48d
S )z8Test pickling preserves Tree properties and performance.
Classifierr   r~   )r   ri   capacity	n_classesrl   rk   n_leavesro   rp   rs   rq   r@  rt   c                 <    i | ]}|t          j        |          S  )r   r   ).0	attributer   s     rz   
<dictcomp>ztest_pickle.<locals>.<dictcomp>  s4     
 
 
9BIwsy)44
 
 
r|   z6Failed to generate same score  after pickling with {0}z"Failed to generate same attribute z after pickling with rg   N)r/   r   rZ   r   r   r[   r   r   pickledumpsloadstype	__class__rj   r   r   r   )r   r   rX   rY   r   
attributesfitted_attributeserialized_objectrB  score2r]  r   s              @rz   test_picklerh    s   (00 . .m49dkqAA=(/qAm+++1		!Q
 
 


 
 
 
FP
 
 
 #L--|-..DzzS]****Aq!!VOOOCJJ4PP OO) 	 	I
I.. +   	    	M. .r|   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          }|                    | |                              |          }t	          ||           |j        dk    sJ |                    |          }t          |          dk    sJ |d         j        dk    sJ |d         j        d	k    sJ |                    |          }	t          |	          dk    sJ |	d         j        dk    sJ |	d         j        d	k    sJ t                                          D ]W\  }}
 |
d          }|                    | |                              |          }t          ||           |j        dk    sJ Xd S )
Nr:   r7   r1   rE   r   r4   r~   r0   rE   )r0   r0   )r   r   r   r   r   r   r   r   r   r   r   )rX   rY   r   y_truer   r   r   y_hatproba	log_probar   r   s               rz   test_multioutputro    s    
R	R	R	
A	
A	
A	Q	Q	Q	
B	
B	
B	A  
Q	Q	Q	
A	
A	
A	Q	Q	Q	
A	
A	
A	A bAq6B7QG,A1g1vAwA/F !* 1 1 , ,nn!,,,1%%a((5&))){f$$$$!!!$$5zzQQx~''''Qx~''''))!,,	9~~""""|!V++++|!V+++++  )00 % %mm+++1%%a((E6***{f$$$$$	% %r|   c                  v   t                                           D ]\  } } |d          }|                    t          t                     |j        dk    sJ t          |j        ddg           t          j	        t          t          j
        t                    dz  f          j        } |d          }|                    t          |           t          |j                  dk    sJ t          |j                  dk    sJ t          |j        ddg           t          |j        ddgddgg           d S )Nr   r~   rE   r7   r1   r:   )r   r   r   rX   rY   
n_classes_r   classes_rm   r   r   r   r   )r   r   r   _ys       rz   test_classes_shapert    s,    ) 1 1 = =nn!,,,1~""""3<"a111 Y28A;;?+,,.n!,,,23>""a''''3<  A%%%%3>Aq62223<2q'B7);<<<<= =r|   c                  B   t           j        d d         } t           j        d d         }t          d|          }t                                          D ]L\  }} |d          }|                    | ||           t          |                    |           |           Md S )N}   balancedr   r~   r   )	rZ   r   r   r(   r   r   r   r   r   )unbalanced_Xunbalanced_yr   r   r   r   s         rz   test_unbalanced_irisrz    s    9TcT?L;tt$L)*lCCM ) 1 1 E Enn!,,,l-HHHCKK55|DDDDE Er|   c                  ,   t          t                                          t          j        t          j        g          D ]\  \  } }} |d          }t          j        t          j        |          }t          j	        }t          |                    ||                              |          |           t          j        t          j        d|          }t          j	        }t          |                    ||                              |          |           t          j        t          j        d|          }t          j	        }t          |                    ||                              |          |           t          j        t          j        |          }t          j	        }t          |                    ||                              |          |           t          t          j        |          }t          j	        }t          |                    ||                              |          |           t          t          j        |          }t          j	        }t          |                    ||                              |          |           t          j        t          j        d d d         |          }t          j	        d d d         }t          |                    ||                              |          |           d S )Nr   r~   r	  C)orderr
  Fr4   )r   r/   r   rm   float64r   r   rZ   r   r   r   r   r   ascontiguousarrayr   r   )r   r   r
  r   rX   rY   s         rz   test_memory_layoutr    st   (/BJ
3) ) &8 &8$}u m+++ Jty...K3771a==0033Q777 Jty5999K3771a==0033Q777 Jty5999K3771a==0033Q777  %888K3771a==0033Q777 ty...K3771a==0033Q777 ty...K3771a==0033Q777 Jty1~U333K!3771a==0033Q7777M&8 &8r|   c                     t          j        d          d d t           j        f         } t          j        d          }d|d d<   t          j        d          }d||dk    <   t	          d          }|                    | ||           t          |                    |           t          j        d                     t          j        d          d d t           j        f         } t          j        d          }d|dd<   d	|dd<   d| dddf<   t          j        d          }d
||d	k    <   t	          dd          }|                    | ||           |j	        j
        d         dk    sJ d||d	k    <   t	          dd          }|                    | ||           |j	        j
        d         dk    sJ t          j        } t          j        }t                              d| j        d         d          }t	          d          }|                    | |         ||                    t          j        || j        d                   }t	          d          }|                    | ||           |j	        j        t&          j        j        k    }t-          |j	        j
        |         |j	        j
        |                    d S )Nd   rL   2   r   r~   r      r1   rE   gRQ?r   g     b@rC   g     H@)	minlength)rm   r   r   r   r   r   r   r   rd   r   rp   rZ   r   r   r!  randintr   r  rl   r   r  r   r   )rX   rY   r   r   
duplicatesr   ry   s          rz   test_sample_weightr  :  s    		#qqq"*}%A
AAcrcFGCLLMM!q&
 a
0
0
0CGGAqG...s{{1~~rws||444 		#qqq"*}%A
AAbfIAc#gJAc#gqjMGCLLM M!q&
 11
=
=
=CGGAqG...9q!U****M!q&
 11
=
=
=CGGAqG...9q!T)))) 		AAQ
C00J
 a
0
0
0CGGAjM1Z=)))K
agajAAAM!q111DHHQH///y&$**>>H	H%tz';H'E    r|   c                  B   t          j        d          d d t           j        f         } t          j        d          }d|d d<   t	          d          }t           j                            dd          }t          j        t                    5  |
                    | ||           d d d            n# 1 swxY w Y   t          j        d          }d}t          j        t          |	          5  |
                    | ||           d d d            d S # 1 swxY w Y   d S )
Nr  rL   r  r   r~   r1   r   z3Singleton.* cannot be considered a valid collectionr   )rm   r   r   r   r   randomr"  r   r   r   r   r   	TypeError)rX   rY   r   r   expected_errs        rz   test_sample_weight_invalidr  n  s   
	#qqq"*}%A
AAcrcF
 a
0
0
0CINN3**M	z	"	" 3 31M2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 HQKKMIL	y	5	5	5 3 31M2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s$   B22B69B6.DDDc                    t           |          } |d          }|                    t          j        t          j                    |dd          }|                    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          }|                    t          j        |           t          |j        |j                    |dd          }|                    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          }|                    t          j        t          j        |            ||d          }|                    t          j        t          j                   t          |j        |j                    |d          }|                    t          j        t          j        |dz              ||d          }|                    t          j        t          j        |           t          |j        |j                   dS )z5Check class_weights resemble sample_weights behavior.r   r~   rw  class_weightrP   g       @rG   r   r1   r  g      Y@rE   N)r   r   rZ   r   r   r   r   rm   r   r   r   r   )	r   r   clf1r   
iris_multiclf3clf4r   r  s	            rz   check_class_weightsr    s   t_N >q)))DHHTY$$$>zBBBDHHTY$$$143LMMM DKdkBCCEJ>$$$$$$

   D 	HHTY
###143LMMM>zBBBDHHTY
###143LMMM GDK-..M$+"###s*###u--L>q)))DHHTY]333>|!DDDDHHTY$$$143LMMM >q)))DHHTY]A%5666>|!DDDDHHTY]333143LMMMMMr|   c                 $    t          |            d S N)r  r.  s    rz   test_class_weightsr        r|   c                 X   t           |          }t          j        t          t          j        t                    dz  f          j        } |dddgd          }d}t          j        t          |          5  |	                    t          |           d d d            d S # 1 swxY w Y   d S )	NrE   rC   rG   r7   r1   r   r  zBnumber of elements in class_weight should match number of outputs.r   )r   rm   r   rY   r   r   r   r   r   r   rX   )r   r   rs  r   rh   s        rz   check_class_weight_errorsr    s    t_N	Arx{{Q'	(	(	*B .CC'8'8&9
J
J
JCRG	z	1	1	1  2                 s   6BB#&B#c                 $    t          |            d S r  )r  r.  s    rz   test_class_weight_errorsr        d#####r|   c                      t          j        dd          \  } }d}t                                          D ]F\  }} |d |dz                                 | |          }|                                |dz   k    sJ Gd S Nr  r1   r<  r0   )r   r   )r'   make_hastie_10_2r/   r   r   get_n_leavesrX   rY   kr   r   r   s         rz   test_max_leaf_nodesr    s    $sCCCDAq	A(00 + +mmd1q5AAAEEaKK!!QU*****+ +r|   c                      t          j        dd          \  } }d}t                                          D ]@\  }} |d|                              | |          }|                                dk    sJ Ad S r  )r'   r  r/   r   r   	get_depthr  s         rz   test_max_leaf_nodes_max_depthr    s    $sCCCDAq	A(00 $ $mma:::>>q!DD}}!#####$ $r|   c                      dD ]a} t          t                                          dgdggddg          j        |           }d|j        d         cxk    rdk     sn J d            bd S )N)rX  rt   rl   rk   rp   rs   ro   rq   r   r1   r;   r4   z Array points to arbitrary memory)r   r   r   r   flat)attrrt   s     rz   test_arrays_persistr    s    	 K K .0044qcA3Z!QHHNPTUUUZ]&&&&Q&&&&&(J&&&&K Kr|   c                      t          d          } t          j        d          }|                     ddd          }t                                          D ]9\  }} |d          }|                    ||           |j        j        dk    sJ :d S )Nr   )r<   rS   rE   )r<   r~   )	r   rm   rd   r  r/   r   r   r   r   )rP   rX   rY   r   r   r   s         rz   test_only_constant_featuresr    s    %a((L
AQ5))A(00 ( (mm+++1y"a'''''( (r|   c                  \   t          j        t          j        g dgt          j        d          f                    } g d}t                                          D ]P\  }}d|vrG |dd          }|                    | |           |j        j        dk    sJ |j        j	        d	k    sJ Qd S )
N)r   r   r   r   r   r1   rE   r0   r3   rB      )r0   rA   )r   r   r   r1   r1   rE   rE   rE   r4   r4   r4   	ExtraTreer   r1   r   rE   r3   )
rm   	transposer   rd   r/   r   r   r   r   ri   rX   rY   r   r   r   s        rz   ,test_behaviour_constant_feature_after_splitsr    s    

	55568I8IJKK	 	A 	*))A(00 - -md""-QQ???CGGAqMMM9&!++++9'1,,,,- -r|   c                     t          j        t          j        dgdgdgdgg          t          j        d          g          } t          j        g d          }t                                          D ]p\  }} |dd          }|                    | |           |j        j        dk    sJ t          |
                    |           t          j        dd	                     qt                                          D ]p\  }} |dd          }|                    | |           |j        j        dk    sJ t          |                    |           t          j        d
d	                     qd S )NrG   rL   )r0   r  )rL   rG   rL   rG   r   r1   r   rj  rC   )r0   )rm   hstackr   rd   r   r   r   r   r   r   r   r   r   r   r  s        rz   (test_with_only_one_non_constant_featuresr    se   
	28cUSEC53%89928I;N;NOPPA
%%%&&A(00 G Gmm;;;1y"a''''3,,Q//1E1EFFFF(00 ? ?mm;;;1y"a''''3;;q>>274+=+=>>>>	? ?r|   c                  F   t          j        dd                              t           j                                      dd          } t                      }t          j        t          d          5  |	                    | g d           d d d            d S # 1 swxY w Y   d S )Ng\)c=Hr0   r7   r1   r   r   )r   r1   r   r1   )
rm   repeatr  r  reshaper   r   r   r   r   )rX   r   s     rz   test_big_inputr    s    
	(A%%bj1199"a@@A
 
"
"C	z	3	3	3 ! !<<<   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   0BBBc                      ddl m}  t          j        t                    5   |              d d d            d S # 1 swxY w Y   d S )Nr   _realloc_test)sklearn.tree._utilsr  r   r   MemoryErrorr  s    rz   test_reallocr    s    111111	{	#	#                   s   8<<c                  >   dt          j        d          z  } t          j                            dd          }t          j                            ddd          }d| dz   z  }t          d|          }t          j        t                    5  |
                    ||           d d d            n# 1 swxY w Y   d| dz
  z  dz
  }t          d|          }t          j        t                    5  |
                    ||           d d d            d S # 1 swxY w Y   d S )	NrD   Pr<   rE   r   r1   best)splitterr   )structcalcsizerm   r  randnr  r   r   r   	Exceptionr   r  )n_bitsrX   rY   huger   s        rz   test_huge_allocationsr  !  s   %%%F
	AA
	!Q##A !D
 &
F
F
FC	y	!	!  1              
 !q D
 &
F
F
FC	{	#	#  1                 s$   B..B25B2.DDDc                    t           |          }t          |         d         }t          |         d         }t          |         d         }|dv r.|j        d         dz  }|d |         }|d |         }|d |         }t          t          t
          fD ]f} ||          } |d|                              ||          }	 |d|                              ||          }
t          |	j        |
j        d	                    |                      |	
                    |          }| t          v r*|	                    |          }|	                    |          }t          t          t
          fD ]} ||t          j        	          }t!          |

                    |          |           | t          v rFt!          |
                    |          |           t!          |
                    |          |           hd S )
NrX   re   rY   )r\   r[   r   r3   rP   r   5{0} with dense and sparse format gave different treesr	  )r/   r  r   r   r   r   r   r{   r   rj   r   r   r   r   rm   r   r   )r   datasetr   r   rX   re   rY   rQ   sparse_formatru   rv   y_predy_probay_log_probasparse_matrixX_sparse_tests                   rz   check_sparse_inputr  6  s   dOM#A ,H#A (((GAJ!O	jyjMJYJ'jyjM$j*=   =** MqI>>>BB1aHHMqI>>>BB8QOOGGCJJ4PP	
 	
 	
 19ooa((G--a00K(*jA 		 		M)M("*EEEM%aii&>&>GGGy  )!//-*H*H'RRR)''66  		% r|   	tree_typer  )r^   r]   r\   r`   ra   rb   rc   rd   c                 <    |dk    rdnd }t          | ||           d S )Nr\   r4   r  )r  r  r   s      rz   test_sparse_inputr  a  s/     ((dIy'955555r|   r[   r_   c                 (    t          | |d           d S )NrE   r  )r  r  s     rz   test_sparse_input_reg_treesr  t  s    
 y'1-----r|   c                    t           |          }t          |         d         }t          |         d         }t          |         d         } |ddd                              ||          } |ddd                              ||          }t          |j        |j        d                    |                      t          |                    |          |                    |                      |ddd	
                              ||          } |ddd	
                              ||          }t          |j        |j        d                    |                      t          |                    |          |                    |                      |d|j        d         dz                                ||          } |d|j        d         dz                                ||          }t          |j        |j        d                    |                      t          |                    |          |                    |                      |dd                              ||          } |dd                              ||          }t          |j        |j        d                    |                      t          |                    |          |                    |                     d S )NrX   re   rY   r   r1   rE   )rP   r   r   r  r<   )rP   r   r  )rP   r  r4   r   )	r/   r  r   r{   r   rj   r   r   r   )r   r  r   rX   re   rY   ru   rv   s           rz   check_sparse_parametersr  |  s   dOM#A ,H#A 	11BBBFFq!LLA11BBBFFxQRSSA		?FFtLL  
 aiillAIIaLL999 	11KKKOOPQSTUUA11KKKOO!	 	A 		?FFtLL  
 aiillAIIaLL999 	1x~a7HA7MNNNRRSTVWXXA1x~a7HA7MNNNRR!	 	A 		?FFtLL  
 aiillAIIaLL999 	1Q777;;AqAAA1Q777;;HaHHA		?FFtLL  
 aiillAIIaLL99999r|   c                    t           |          }t          |         d         }t          |         d         }t          |         d         }| t          v rt          nt          }|D ]} |dd|                              ||          } |dd|                              ||          }	t          |j        |	j        d                    |                      t          |	
                    |          |
                    |                     d S )NrX   re   rY   r   r4   )rP   r   r   r  )r/   r  r   REG_CRITERIONSr   r   r{   r   rj   r   r   )
r   r  r   rX   re   rY   
CRITERIONSr   ru   rv   s
             rz   check_sparse_criterionr    s   dOM#A ,H#A $(9#4#4.J > >	MqAKKKOOPQSTUUMqAKKKOOa
 
 	GGCJJ4PP	
 	
 	

 	"!))A,,		!====> >r|   )ra   rb   rc   rd   checkc                      || |           d S r  r[  )r  r  r  s      rz   test_sparser    s     
E)Wr|   c                 ~	   t           |          }|}t          j        |          }t          d          }g }g }d}	|	g}
t	          |          D ]}|                    |d          }|                    |          d |         }|                    |           |                    dd|f          dz
  }|                    |           |	|z  }	|
                    |	           t          j        |          }t          j	        t          j        |          t          j
                  }t          |||
f||f          }|                                }t          |||
f||f          }|                                }|                    dd|f          }|                                }|j        dk                                    dk    sJ |j        dk                                    dk    sJ  |d|	                              ||          } |d|	                              ||          }t'          |j        |j        d
                    |                      ||f}t-          ||          D ]I\  }}t/          |j                            |          |j                            |                     t/          |                    |          |                    |                     t/          |                    |          |j                            |                     t/          |j                            |                                          |j                            |                                                     t/          |                    |                                          |                    |                                                     t/          |                    |                                          |j                            |                                                     t/          |                    |          |                    |                     | t6          v r6t/          |                    |          |                    |                     Kd S )Nr   rC   r4   rT   r1   r	  r   rL   r  r  )r/   rm   r   r   r?  binomialpermutationappendconcatenater   r   r   toarrayr   r  copyr   rr   r   r{   r   rj   r   r   r  decision_pathr   r   r   )r   r   rR   r   rQ   samplesrP   r   r   offsetindptrin_nonzero_i	indices_idata_ire   rX   r  X_testrY   ru   rv   XsX1r  s                            rz   check_explicit_sparse_zerosr    s\   dOM Ii	""G &a((LGDFXF:  "++Is;; ,,W55l{lC	y!!!&&q#[N&CCaGF+fnW%%G8BN4((
;;;D4&1)Z9PQQQHAgv6y*>UVVVM""$$FQ55A "&&((M MS %%''!++++#%**,,q0000 	1	:::>>q!DDA1	:::>>xKKA		?FFtLL   -	 B"b// P PB!!'--"3"3QW]]25F5FGGG!!''"++qwwr{{;;;!!''"++qw}}R/@/@AAA!G!!"%%--//1F1Fr1J1J1R1R1T1T	
 	
 	
 	"OOB''))1??2+>+>+F+F+H+H	
 	
 	
 	"OOB''))17+@+@+D+D+L+L+N+N	
 	
 	
 	"!))B--2???9%aoob&9&91??2;N;NOOO%P Pr|   c                 $    t          |            d S r  )r  )r  s    rz   test_explicit_sparse_zerosr    s    	*****r|   c                 P   t           |          }t          j        d d df                                         }t          j        d d df                             d          }t          j        }t          j        t                    5   |d          	                    ||           d d d            n# 1 swxY w Y    |d          }|	                    ||           t          j        t                    5  |
                    |g           d d d            d S # 1 swxY w Y   d S )Nr   r  r~   )r/   rZ   r   r   r  r   r   r   r   r   r   )r   r   rX   X_2drY   r   s         rz   check_raise_error_on_1d_inputr    s   dOM	!!!Q$A9QQQT?""7++DA	z	"	" 0 01%%%))!Q///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -Q
'
'
'CGGD!	z	"	"  QC                 s$   !B11B58B57DD"Dc                 r    t                      5  t          |            d d d            d S # 1 swxY w Y   d S r  )r   r  r.  s    rz   test_1d_inputr  (  s    			 , ,%d+++, , , , , , , , , , , , , , , , , ,s   ,00c                      | d          }|                     |||           |j        j        dk    sJ  | dd          }|                     |||           |j        j        dk    sJ d S )Nr   r~   r   r1   g?)rP   r  )r   r   r   )r   rX   rY   r   r   s        rz   "_check_min_weight_leaf_split_levelr  .  s    
-Q
'
'
'CGGAqG...9!####
-Q
E
E
ECGGAqG...9!######r|   c                     t           |          }t          j        dgdgdgdgdgg          }g d}g d}t          ||||           t          |t	          |          ||           d S )Nr   r1   )r   r   r   r   r1   )r6   r6   r6   r6   r6   )r/   rm   r   r  r   )r   r   rX   rY   r   s        rz   !check_min_weight_leaf_split_levelr  8  sw    dOM
1#sQC!qc*++AA---M&}aMJJJ&}jmmQVVVVVr|   c                 $    t          |            d S r  )r  r.  s    rz    test_min_weight_leaf_split_levelr	  C  s    %d+++++r|   c                 D   t                               t          j        j        d          }t          |                      }|                    t           t                     t          |	                    t                     |j
        	                    |                     d S NFr  )X_smallr  r   r  r  r/   r   y_smallr   r  r   r   	X_small32r   s      rz   check_public_applyr  H  so    tz/e<<I
D/

CGGGWsyy))39??9+E+EFFFFFr|   c                 ^   t          t                              t          j        j        d                    }t          |                      }|                    t          t                     t          |
                    t                    |j        
                    |                     d S r  )r   r  r  r   r  r  r/   r   r  r   r  r   r  s      rz   check_public_apply_sparser  P  sw    7>>$**:>GGHHI
D/

CGGGWsyy))39??9+E+EFFFFFr|   c                 $    t          |            d S r  )r  r.  s    rz   test_public_apply_all_treesr  X  s    tr|   c                 $    t          |            d S r  )r  r.  s    rz   test_public_apply_sparse_treesr  ]  r  r|   c                  
   t           j        } t           j        }t          dd                              | |          }|                    | d d                                                   }t          |g dg dg           d S )Nr   r1   r  rE   )r1   r1   r   )r1   r   r1   )rZ   r   r   r   r   r  r  r   )rX   rY   r   node_indicators       rz   test_decision_path_hardcodedr  b  s|    	AA
 a1
=
=
=
A
A!Q
G
GC&&q!u--5577N~			999'=>>>>>r|   c                    t           j        }t           j        }|j        d         }t          |          } |dd          }|                    ||           |                    |          }|                                j        ||j        j	        fk    sJ |
                    |          }fdt          |          D             }t          |t          j        |                     |j        j        t           k    }	t          t          j        |	          t          j        |                                         d                                          }
|j        j        |
k    sJ d S )Nr   rE   r  c                 *    g | ]\  }}||f         S r[  r[  )r\  r  jr  s      rz   
<listcomp>z'check_decision_path.<locals>.<listcomp>y  s&    JJJ1~ad+JJJr|   r  r1   axis)rZ   r   r   r   r/   r   r  r  r   ri   r  	enumerater   rm   r   rl   r   r   rr   r4  r   )r   rX   rY   rQ   r   r   node_indicator_csrleavesleave_indicator
all_leavesr   r  s              @rz   check_decision_pathr&  j  s]   	AA
IdOM
-Q!
4
4
4CGGAqMMM**1--'//11NIsy/C#DDDDD YYq\\FJJJJ	&8I8IJJJOorwY/G/G/GHHH (I5J
~z**BG),D,D,D  
 """**..00I9)++++++r|   c                 $    t          |            d S r  )r&  r.  s    rz   test_decision_pathr(    r  r|   c                     t           t          t                    }}t          |          }t	          j        t                    5   |d                              ||           d d d            d S # 1 swxY w Y   d S )Nr   r~   )X_multilabelr   y_multilabelr/   r   r   r  r   )r   rX   rY   r   s       rz   check_no_sparse_y_supportr,    s    L11qAdOM	y	!	! 0 01%%%))!Q///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   !A00A47A4c                 $    t          |            d S r  )r,  r.  s    rz   test_no_sparse_y_supportr.    s     d#####r|   c                     t          ddd          } |                     dgdgdgdgdggg dg d	
           t          | j        j        g d           t          | j        j        j        g d           |                     dgdgdgdgdggg dt          j	        d          
           t          | j        j        g d           t          | j        j        j        g d           |                     dgdgdgdgdggg d           t          | j        j        g d           t          | j        j        j        g d           dS )aQ	  Check MAE criterion produces correct results on small toy dataset:

    ------------------
    | X | y | weight |
    ------------------
    | 3 | 3 |  0.1   |
    | 5 | 3 |  0.3   |
    | 8 | 4 |  1.0   |
    | 3 | 6 |  0.6   |
    | 5 | 7 |  0.3   |
    ------------------
    |sum wt:|  2.3   |
    ------------------

    Because we are dealing with sample weights, we cannot find the median by
    simply choosing/averaging the centre value(s), instead we consider the
    median where 50% of the cumulative weight is found (in a y sorted data set)
    . Therefore with regards to this test data, the cumulative weight is >= 50%
    when y = 4.  Therefore:
    Median = 4

    For all the samples, we can get the total error by summing:
    Absolute(Median - y) * weight

    I.e., total error = (Absolute(4 - 3) * 0.1)
                      + (Absolute(4 - 3) * 0.3)
                      + (Absolute(4 - 4) * 1.0)
                      + (Absolute(4 - 6) * 0.6)
                      + (Absolute(4 - 7) * 0.3)
                      = 2.5

    Impurity = Total error / total weight
             = 2.5 / 2.3
             = 1.08695652173913
             ------------------

    From this root node, the next best split is between X values of 3 and 5.
    Thus, we have left and right child nodes:

    LEFT                    RIGHT
    ------------------      ------------------
    | X | y | weight |      | X | y | weight |
    ------------------      ------------------
    | 3 | 3 |  0.1   |      | 5 | 3 |  0.3   |
    | 3 | 6 |  0.6   |      | 8 | 4 |  1.0   |
    ------------------      | 5 | 7 |  0.3   |
    |sum wt:|  0.7   |      ------------------
    ------------------      |sum wt:|  1.6   |
                            ------------------

    Impurity is found in the same way:
    Left node Median = 6
    Total error = (Absolute(6 - 3) * 0.1)
                + (Absolute(6 - 6) * 0.6)
                = 0.3

    Left Impurity = Total error / total weight
            = 0.3 / 0.7
            = 0.428571428571429
            -------------------

    Likewise for Right node:
    Right node Median = 4
    Total error = (Absolute(4 - 3) * 0.3)
                + (Absolute(4 - 4) * 1.0)
                + (Absolute(4 - 7) * 0.3)
                = 1.2

    Right Impurity = Total error / total weight
            = 1.2 / 1.6
            = 0.75
            ------
    r   r,   rE   )rP   r   r   r4   r3   rD   )rB   r  r4   r0   r4   )333333?333333?r   rG   r1  )rX   rY   r   )g,d?gܶm۶m?g?)      @g      @r2  )gffffff?rF   gUUUUUU?)r0   rM   r2  rW   N)
r   r   r   r   rs   r   rt   r  rm   r   )dt_maes    rz   test_maer4    s   T #"21  F
 JJ3aS1#s
#
/////    
 FL)+L+L+LMMMv|).@@@ JJ1#sQC!qc*oooRWUVZZJXXXv|,.C.C.CDDDv|).>>>
 JJ1#sQC!qc*oooJ>>>v|,.C.C.CDDDv|).>>>>>r|   c                  (   d} t          j        dt           j                  }d}d }t          j        t          j        |fD ]}t          j                    D ]W\  }} || |          } ||                                          }|\  }	\  }
}}||	k    sJ | |
k    sJ t          ||           Xt          j                    D ]O\  }} || |          } ||                                          }|\  }	\  }
}}||	k    sJ | |
k    sJ ||k    sJ Pd S )Nr4   r	  r  c                 N    t          j        t          j        |                     S r  )r_  ra  r`  )objs    rz   _pickle_copyz)test_criterion_copy.<locals>._pickle_copy  s    |FL--...r|   )
rm   r   intpr  deepcopyr%   r   
__reduce__r   r&   )	n_outputsrX  rQ   r8  	copy_func_typenamecriteriaresult	typename_
n_outputs_rq  
n_samples_s                rz   test_criterion_copyrE    s{    I	!27+++II/ / / i= + +	'-// 	6 	6KAxx	955HYx((3355F5;2I/
Jy((((
****y*5555'-// 	+ 	+KAxx	955HYx((3355F5;2I/
Jy((((
****
*****	++ +r|   c                     t           j                            d                              dd          dz  } t          j        |                     d                    } | d d d df         }t          |          }| d d df         }||fD ]}t          d                              ||          } |j	        |          }t          t          j        |j        j        t          k              d                   }|                    |          }t          j        t          j        |j        j                             d         }	t%          |	          dk    sJ t%          |          dk    sJ d S )Nr   r  rA   g*Gr   r7   r~   )rm   r  RandomStater  
nan_to_numr  r   r   r   r  setwherer   rl   r   
differenceisfiniterp   r   )
r   X_fullre   rY   rX   r   terminal_regions	left_leaf
empty_leafinfinite_thresholds
             rz   "test_empty_leaf_infinite_thresholdrR    s]   9  ##))#r22T9D=Y//00D!!!SbS&\F&!!HQQQUAh $ $$!44488A>>%4:a==!9Y!FGGJKK	))*:;;
Xr{4:3G'H'H&HII!L%&&!++++:!#####$ $r|   tree_clsc                 v   t           |         }|d         |d         }} |dd          }|                    ||          }|j        }|j        }t	          j        t	          j        |          dk              sJ t	          j        t	          j        |          dk              sJ t          ||||           d S NrX   rY   rS   r   r=  r  cost_complexity_pruning_path
ccp_alphas
impuritiesrm   r   diffassert_pruning_creates_subtree	r   r  rS  rX   rY   r   infopruning_pathrY  s	            rz   'test_prune_tree_classifier_are_subtreesr_  *  s     wG3<qA
("1
5
5
5C++Aq11D?LJ6"',''1,-----6"'*%%*+++++"8Q<@@@@@r|   c                 v   t           |         }|d         |d         }} |dd          }|                    ||          }|j        }|j        }t	          j        t	          j        |          dk              sJ t	          j        t	          j        |          dk              sJ t          ||||           d S rU  rV  r\  s	            rz   'test_prune_tree_regression_are_subtreesra  =  s     wG3<qA
("1
5
5
5C++Aq11D?LJ6"',''1,-----6"'*%%*+++++"8Q<@@@@@r|   c                      t          d          } |                     dgdggddg           t          dd          }|                    dgdggddg           t          | j        |j                   d S )Nr   r~   r1   r<   )rP   	ccp_alpha)r   r   assert_is_subtreer   )r  r   s     rz   test_prune_single_node_treere  O  s    !q111DHHqcA3Z!Q    "qB???DHHqcA3Z!Q   dj$*-----r|   c                     g }|D ]9} | d|d                               ||          }|                    |           :t          ||dd                    D ]\  }}t          |j        |j                    d S )NrS   r   )r   rc  rP   r1   )r   r  ziprd  r   )	estimator_clsrX   rY   r^  
estimatorsrc  r   prev_estnext_ests	            rz   r[  r[  [  s    J!  	m2QRSSSWWq
 
 	# "*jn== : :((.(.9999: :r|   c                 8   | j         |j         k    sJ | j        |j        k    sJ | j        }| j        }|j        }|j        }dg}|rS|                                \  }}t          | j        |         |j        |                    t          | j        |         |j        |                    t          | j	        |         |j	        |                    t          | j
        |         |j
        |                    ||         ||         k    r!t          t          |j        |                    nlt          | j        |         |j        |                    |                    ||         ||         f           |                    ||         ||         f           |Qd S d S )N)r   r   )ri   r   rl   rk   popr   rt   r   rs   rq   r@  r   rp   r  )	r   subtreetree_c_lefttree_c_rightsubtree_c_leftsubtree_c_rightstacktree_node_idxsubtree_node_idxs	            rz   rd  rd  j  s   ?g00000>W.....$K&L*N,OHE
 */))++''!J}%w}5E'F	
 	
 	
 	M-('*:;K*L	
 	
 	
 	.0FGW0X	
 	
 	
 	(7+,<=	
 	
 	

 *+?O/PPP0ABR0STTTT  }-w/@AQ/R   LL+m4nEU6VWXXXLLm,o>N.OP  3      r|   r  r  r  X_format)densecsrcscc                    t           d         }|d                             t          j        j        d          }|dk    rt          |          }n|d         }|dk    r|                                }t          j        |j	        t          j        j                  |_	        t          |j	        |j
        |j        f          \  |_	        |_
        |_        t          t          j        t          t          j        j                            }t          |          |	          }|                    ||           t          |                    |          |                    |                     t          |                    |                                          |                    |                                                     d S )
Nr^   rX   Fr  rw  re   ry  r	  )r  )r  r  r   r  r  r   tocscrm   r   r   r   r  r  r/   r   r   r   r  todense)r   r  rv  r  r  
X_readonly
y_readonlyr   s           rz   "test_apply_path_readonly_all_treesr    s    {#Gcl!!$*"2!??G7.w77

Z(
u#))++J(:?$*:JKKK

 &_j0*2CD
 
		
O
 +28G4:CS+T+T+TUUJ
D/8
,
,
,CGGJ
###s{{:..G0D0DEEE*%%--//1B1B71K1K1S1S1U1U    r|   )r+   r-   r.   c                    t           j        t           j        }} ||           }|                    ||           t	          j        |                    |                    t          j        t	          j        |                    k    sJ d S )Nr   )	r[   r   r   r   rm   rr   r   r   r   )r   r    rX   rY   r   s        rz   test_balance_propertyr    sq     =(/qA
$
#
#
#CGGAqMMM6#++a..!!V]26!99%=%=======r|   seedc           	         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}g d}t          d|           }|                    ||           t          j        |                    |                    dk    sJ t          d|           }|                    ||           t          j        |                    |          dk              sJ d	}t          j        |dz  dz  d
d||dz  dz  |           \  }}d|d|k     |dk     z  <   t          j        |          }t          d|           }|                    ||           t          j        |                    |          dk              sJ d S )Nr   r1   rE   r4   )r   r   r   r   r1   rE   r4   r0   r+   r   r.   r<   r0  r  )effective_ranktail_strengthrQ   rR   r   rP   r7   )	r   r   rm   aminr   r   r'   make_regressionr   )r  rX   rY   r   rR   s        rz   test_poisson_zero_nodesr    s    Q!Q!Q!Q!Q!Q!Q!QHA   A  /
M
M
MCGGAqMMM73;;q>>""a''''
)$
G
G
GCGGAqMMM6#++a..1$%%%%% J#!A~* 1n)  DAq ArAv!a%
q		A
)$
G
G
GCGGAqMMM6#++a..1$%%%%%%%r|   c            	         t           j                            d          } d\  }}}t          j        ||z   ||           }|                     dd|          t          j        |d          z  }|                     t          j        ||z            	          }t          |||| 
          \  }}}	}
t          dd|           }t          dd|           }|                    ||	           |                    ||	           t          d                              ||	          }||	df||
dffD ]\  }}}t          ||                    |                    }t          |t          j        |                    |          dd                     }t          ||                    |                    }|dk    r|d|z  k     sJ |d|z  k     sJ d S )Nr   )  r  r<   )rQ   rR   rP   r:   rE   )lowhighrU   r   r  )lam)	test_sizerP   r.   r<   )r   r  rP   r+   mean)strategytraintestgV瞯<rC   g      ?)rm   r  rG  r'   make_low_rank_matrixuniformr4  r.   r   r   r   r   r
   r   r   clip)r!  n_trainn_testrR   rX   coefrY   X_trainr  r   r   tree_poitree_msedummyval
metric_poi
metric_msemetric_dummys                     rz   test_poisson_vs_mser    s   
 )


#
#C".GVZ%F"z	 	 	A
 ;;2AJ;77"&:K:K:KKDq4x(())A'7	1S( ( ($GVWf %r  H %!Rc  H LL'"""LL'"""F+++//AAE1FFF3KL 
0 
0	1c*1h.>.>q.A.ABB
*1bgh6F6Fq6I6I5RV.W.WXX
,Qa0@0@AA &==j 00000D<//////
0 
0r|   c                    t          |           }t          di |ddi}dD ]}t          d| z   |d           t          j                            d          }d	\  }}|                    ||          }t          j        |d
          |                    |          z   }|t          j        |          dz   z  }t          j	        ||d|dz           gd          }	t          j	        ||d|dz           g          }
t          j
        t          |                    }d|d|dz  <   t          di |                    |||          }t          di |                    |	|
d          }|j        j        |j        j        k    sJ t          |                    |          |                    |                     dS )z4Test that the impact of sample_weight is consistent.r   rP   r   )rd   r   DecisionTreeRegressor_rd   )kindr   )r<   r3   r1   r  r   NrE   r   r[  )dictr   r   rm   r  rG  r"  r  r   r  r   r   r   r   ri   r   r   )r   tree_paramsr   r  r!  rQ   rR   rX   rY   r  r  sample_weight_1tree1tree2s                 rz   6test_decision_tree_regressor_sample_weight_consistencyr    s    +++K @@;@@R@@@D! 
 
'$y0$W	
 	
 	
 	
 	
 )


"
"C!IzJ''A
SXXi000ASA 
A.	Q./0q	9	9	9B	A.	Q./0	1	1Bgc!ffooO()O$i1n$%!00K0044	1O 5  E "00K0044R44PPE;!U[%;;;;; EMM!$$emmA&6&677777r|   rX  c                 v   d\  }}t          j        ||||dd          \  }} | dd                              ||          } | dd                              ||          }t          |j        |j        | d	           t          |                    |          |                    |                     d
S )z3Test that criterion=entropy gives same as log_loss.)r  r3   r   r   )rX  rQ   rR   r   r   rP   r*   +   r   entropyz> with criterion 'entropy' and 'log_loss' gave different trees.N)r'   r   r   r{   r   r   r   )r    rX  rQ   rR   rX   rY   tree_log_losstree_entropys           rz   'test_criterion_entropy_same_as_log_lossr  2  s     "Iz'   DAq D:B???CCAqIIM4)"===AA!QGGLQQQ  
 M))!,,l.B.B1.E.EFFFFFr|   c                  X   t          j        d          \  } }t          dd                              | |                               | |          }d fd}t          j         |                      }|                    | |          }t          j        ||          sJ d S )Nr   r~   r4   r  c                 r    |                                                                                                  S r  )byteswapnewbyteorderr;  )arrs    rz   reduce_ndarrayz8test_different_endianness_pickle.<locals>.reduce_ndarrayQ  s(    ||~~**,,77999r|   c                     t          j                    } t          j        |           }t          j                                        |_        |j        t          j        <   |	                               | 
                    d           | S Nr   )ioBytesIOr_  Picklercopyregdispatch_tabler  rm   ndarraydumpseek)fpr   r  s     rz    get_pickle_non_native_endiannesszJtest_different_endianness_pickle.<locals>.get_pickle_non_native_endiannessT  sf    JLLN1"16688'5$	s	q			r|   )	r'   r   r   r   r   r_  loadrm   isclose)rX   rY   r   r  new_clf	new_scorer   r  s         @@rz    test_different_endianness_pickler  J  s    'Q777DAq
 a1
=
=
=CGGAqMMMIIaOOE: : :      k::<<==Ga##I:eY'''''''r|   c                  x   t          j        d          \  } }t          dd                              | |                               | |          } G d dt
                    fd}t          j         |                      }|                    | |          }t          j	        ||          sJ d S )Nr   r~   r4   r  c                        e Zd Z fdZ xZS )Ptest_different_endianness_joblib_pickle.<locals>.NonNativeEndiannessNumpyPicklerc                     t          |t          j                  r&|                                                                }t                                          |           d S r  )
isinstancerm   r  r  r  supersave)selfr7  rc  s     rz   r  zUtest_different_endianness_joblib_pickle.<locals>.NonNativeEndiannessNumpyPickler.savek  sL    #rz** 4llnn1133GGLLr|   )__name__
__module____qualname__r  __classcell__)rc  s   @rz   NonNativeEndiannessNumpyPicklerr  j  s8        	 	 	 	 	 	 	 	 	r|   r  c                      t          j                    }  |           }|                               |                     d           | S r  )r  r  r  r  )r  r  r  r   s     rz   'get_joblib_pickle_non_native_endiannesszXtest_different_endianness_joblib_pickle.<locals>.get_joblib_pickle_non_native_endiannessp  sA    JLL++A..	s	q			r|   )
r'   r   r   r   r   r   joblibr  rm   r  )rX   rY   r   r  r  r  r  r   s         @@rz   'test_different_endianness_joblib_pickler  c  s    'Q777DAq
 a1
=
=
=CGGAqMMMIIaOOE    ,         kAACCDDGa##I:eY'''''''r|   c                    t           rt          j        nt          j        }g d}d | j        j                                        D             }|D ]}|||<   t          j        t          |                                          t          |	                                          d          }| 
                    |d          S )N)
left_childright_childro   rq   c                      i | ]\  }\  }}||S r[  r[  r\  r   r
  r>  s       rz   r^  z6get_different_bitness_node_ndarray.<locals>.<dictcomp>  /       (juae  r|   namesformats	same_kindcasting)r   rm   int64int32r
  fieldsr   listr  valuesr  )node_ndarraynew_dtype_for_indexing_fieldsindexing_field_namesnew_dtype_dictr   	new_dtypes         rz   "get_different_bitness_node_ndarrayr  }  s    09$GBHHrx! VUU ,8,>,E,K,K,M,M  N % = =<t~**,,--$~?T?T?V?V:W:WXX I y+>>>r|   c                    d | j         j                                        D             }d | j         j                                        D             }d |D             }t	          j         t          |                                          t          |                                          |d          }|                     |d          S )Nc                      i | ]\  }\  }}||S r[  r[  r  s       rz   r^  z8get_different_alignment_node_ndarray.<locals>.<dictcomp>  r  r|   c                     g | ]\  }}|S r[  r[  )r\  r
  r  s      rz   r  z8get_different_alignment_node_ndarray.<locals>.<listcomp>  s    NNN-%vNNNr|   c                     g | ]}d |z   S )rD   r[  )r\  r  s     rz   r  z8get_different_alignment_node_ndarray.<locals>.<listcomp>  s    888fq6z888r|   )r  r  offsetsr  r  )r
  r  r   r  rm   r  r  r  )r  r  r  shifted_offsetsr  s        rz   $get_different_alignment_node_ndarrayr    s     ,8,>,E,K,K,M,M  N ON<+=+D+K+K+M+MNNNG88888O.--//00N113344&	
 	
 I y+>>>r|   c                    t           rt          j        nt          j        } | j                    \  }\  }}}}|                    |d          }|                                }t          |d                   |d<   ||||f|fS )Nr  r  nodes)r   rm   r  r  r;  r  r  r  )	r   r  rS  rR   rX  r<  statenew_n_classes	new_states	            rz   "reduce_tree_with_different_bitnessr    s    %328I:I$/:K:K7H0z9i%$$Y$DDM

I;Ig<NOOIgz=)<iHHr|   c                  T   t          j        d          \  } }t          dd                              | |                               | |          }fd}t          j         |                      }|                    | |          }|t          j        |          k    sJ d S )Nr   r~   r4   r  c                     t          j                    } t          j        |           }t          j                                        |_        t          |j        t          <   |	                               | 
                    d           | S r  )r  r  r_  r  r  r  r  r  
CythonTreer  r  r  r  r   s     rz   "pickle_dump_with_different_bitnesszItest_different_bitness_pickle.<locals>.pickle_dump_with_different_bitness  sd    JLLN1"16688'I$	s	q			r|   )	r'   r   r   r   r   r_  r  r   r   )rX   rY   r   r  r  r  r   s         @rz   test_different_bitness_pickler    s    'Q777DAq
 a1
=
=
=CGGAqMMMIIaOOE     k<<>>??Ga##IFM),,,,,,,,r|   c                  T   t          j        d          \  } }t          dd                              | |                               | |          }fd}t          j         |                      }|                    | |          }|t          j        |          k    sJ d S )Nr   r~   r4   r  c                     t          j                    } t          |           }t          j                                        |_        t          |j        t          <   |                               | 	                    d           | S r  )
r  r  r   r  r  r  r  r   r  r  r  s     rz   "joblib_dump_with_different_bitnesszPtest_different_bitness_joblib_pickle.<locals>.joblib_dump_with_different_bitness  s`    JLLOO"16688'I$	s	q			r|   )	r'   r   r   r   r   r  r  r   r   )rX   rY   r   r  r  r  r   s         @rz   $test_different_bitness_joblib_pickler    s     'Q777DAq
 a1
=
=
=CGGAqMMMIIaOOE     k<<>>??Ga##IFM),,,,,,,,r|   c                      t           rt          j        t          j                  nt          j        t          j                  } t          j        t          j                  t          j        t          j                  g}|d |D             z  }t          j        ddg|           }|D ]%}t          |                    |          |            &t          j	        t          d          5  t          j        ddgg|           }t          ||            d d d            n# 1 swxY w Y   t          j	        t          d          5  |                    t          j                  }t          ||            d d d            d S # 1 swxY w Y   d S )Nc                 6    g | ]}|                                 S r[  )r  )r\  dts     rz   r  z(test_check_n_classes.<locals>.<listcomp>  s"    BBBRr((BBBr|   r   r1   r	  zWrong dimensions.+n_classesr   zn_classes.+incompatible dtype)r   rm   r
  r  r  r   r!   r  r   r   r   r  )expected_dtypeallowed_dtypesrX  r
  wrong_dim_n_classeswrong_dtype_n_classess         rz   test_check_n_classesr    s   +4LRXbh'''"(28:L:LNhrx(("(28*<*<=NBB>BBBBN!Q~666I ? ?))"--~>>>>	z)F	G	G	G > > hAx~FFF,n===> > > > > > > > > > > > > > > 
z)H	I	I	I @ @ ) 0 0 < <.???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s$   **D  D$'D$0FF
Fc                      t          j        t           j                  } d}t          j        ||           }| |                                 g}|D ]}t          |||           t          j        t          d          5  t          || d           d d d            n# 1 swxY w Y   |d d d d d df         t          j	        |          fD ]L}t          j        t          d          5  t          || |j
                   d d d            n# 1 swxY w Y   Mt          j        t          d	          5  t          |                    t           j                  | |           d d d            d S # 1 swxY w Y   d S )
N)r3   r1   rE   r	  )r  expected_shapezWrong shape.+value arrayr   )r1   rE   r1   zvalue array.+C-contiguouszvalue array.+incompatible dtype)rm   r
  r  rd   r  r"   r   r   r   r   r   r  r   )r  r  value_ndarrayr  r
  problematic_arrs         rz   test_check_value_ndarrayr    sr   Xbj))NNH^>BBBM$n&A&A&C&CDN 
 
"^	
 	
 	
 	
 	
 
z)C	D	D	D 
 
.	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 *!!!QQQ(3R5F}5U5UV  ]:-HIII 	 	 -.4   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 
z)J	K	K	K 
 
  ,,))	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s6   ?BB"%B"+DD	D	60E33E7:E7c                     t           } t          j        d|           }|t          |          t	          |          g}|d |D             z  }|D ]}t          ||            t          j        t          d          5  t          j        d|           }t          ||            d d d            n# 1 swxY w Y   t          j        t          d          5  |d d d	         }t          ||            d d d            n# 1 swxY w Y   d
 |j	        j
                                        D             }|                                }t          j        |d<   t          j	        t          |                                          t          |                                          d          }|                    |          }t          j        t          d          5  t          ||            d d d            n# 1 swxY w Y   |                                }t          j        |d<   t          j	        t          |                                          t          |                                          d          }|                    |          }t          j        t          d          5  t          ||            d d d            d S # 1 swxY w Y   d S )N)r3   r	  c                 f    g | ].}|                     |j                                                  /S r[  )r  r
  r  )r\  r  s     rz   r  z+test_check_node_ndarray.<locals>.<listcomp>	  s?       14

39))++,,  r|   )r  zWrong dimensions.+node arrayr   )r3   rE   znode array.+C-contiguousrE   c                      i | ]\  }\  }}||S r[  r[  r  s       rz   r^  z+test_check_node_ndarray.<locals>.<dictcomp>(	  s#    XXX"2$
$XXXr|   rp   r  znode array.+incompatible dtyper  )r$   rm   rd   r  r  r#   r   r   r   r
  r  r   r  r  r  r  r  r  r  )r  r  valid_node_ndarraysr  problematic_node_ndarray
dtype_dictr  r  s           rz   test_check_node_ndarrayr  	  s    N8D777L 	*<88,\::
   8K    # I ILHHHHH	z)G	H	H	H U U#%8F.#I#I#I 4^TTTTU U U U U U U U U U U U U U U 
z)C	D	D	D U U#/!#4 4^TTTTU U U U U U U U U U U U U U U YXl6H6O6U6U6W6WXXXJ  __&&N"$(N;~**,,--$~?T?T?V?V:W:WXX I  ,229==	z)I	J	J	J U U4^TTTTU U U U U U U U U U U U U U U  __&&N#%:N< ~**,,--$~?T?T?V?V:W:WXX I  ,229==	z)I	J	J	J U U4^TTTTU U U U U U U U U U U U U U U U U UsH   =(B11B58B5D  DDG99G= G=,KKKc                     t                                           D ]^}  | d          }d}t          j        t          |          5   |j        t          t                     d d d            n# 1 swxY w Y   _t                                          D ]^}  | d          }d}t          j        t          |          5   |j        t          t                     d d d            n# 1 swxY w Y   _d S )Nr   r   z`max_features='auto'` has been deprecated in 1.1 and will be removed in 1.3. To keep the past behaviour, explicitly set `max_features='sqrt'`.r   z`max_features='auto'` has been deprecated in 1.1 and will be removed in 1.3. To keep the past behaviour, explicitly set `max_features=1.0'`.)	r   r  r   warnsFutureWarningr   rX   rY   r   )r    r   msgs      rz   !test_max_features_auto_deprecatedr   D	  sz     ""  t(((V 	 \-s333 	 	DHQNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   ""  t(((T 	 \-s333 	 	DHQNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s$   A--A1	4A1	=C%%C)	,C)	c                 6   t          |                     d                    }t          d          }|                    t          t
                     t          j        ||           t          j        |d          }t          |j
        |j
        d           dS )zhCheck that Trees can be deserialized with read only buffers.

    Non-regression test for gh-25584.
    z
clf.joblibr   r~   r)	mmap_modez?The trees of the original and loaded classifiers are not equal.N)strjoinr   r   r  r  r  r  r  r{   r   )tmpdirpickle_pathr   
loaded_clfs       rz   /test_tree_deserialization_from_read_only_bufferr)  X	  s    
 fkk,//00K
 a
0
0
0CGGGW
K[!!![C888J	I    r|   c                 L   t          j        ddgddgg          }t          j        ddg          } | d                              ||            | d          }d}t          j        t
          |          5   |j        ||           ddd           dS # 1 swxY w Y   dS )zhCheck that an error is raised when min_sample_split=1.

    non-regression test for issue gh-25481.
    r   r1   rG   )r  zb'min_samples_split' .* must be an int in the range \[2, inf\) or a float in the range \(0.0, 1.0\]r   N)rm   r   r   r   r   r   )r    rX   rY   r   r  s        rz   test_min_sample_split_1_errorr+  k	  s    	1a&1a&!""A
!QA 	D3##Aq))) 4!$$$D	0  
z	-	-	-  A                 s   :BB B)Fr  )r4   r<   )__doc__r  r_  	itertoolsr   r  r  r  r   numpyrm   numpy.testingr   scipy.sparser   r   r   r  joblib.numpy_pickler   sklearn.random_projectionr	   sklearn.dummyr
   sklearn.metricsr   r   r   sklearn.model_selectionr   sklearn.utils._testingr   r   r   r   r   r   sklearn.utils.estimator_checksr   sklearn.utils.validationr   sklearn.utilsr   sklearn.exceptionsr   sklearn.treer   r   r   r   sklearnr   sklearn.tree._treer   r   r    r   r!   r"   r#   r$   sklearn.tree._classesr%   r&   r'   r(   r   r  r   r   r  r/   __annotations__updateSPARSE_TREESr   r  r  y_small_regrX   rY   r   r   	load_irisrZ   r  rG  r!  r  r   rU   permr   load_diabetesr[   load_digitsr\   rP   make_multilabel_classificationr*  r+  r  X_sparse_posr  y_randomr  X_sparse_mixrd   r  r   r{   r   r   markparametrizer  r   r   r   r   r   r   r   r   r   r   r   r   r   filterwarningsr   r  r  r  r*  r/  r2  r5  r8  r:  rT  rh  ro  rt  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  sortedrI  intersectionr  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r&  r(  r,  r.  r4  rE  rR  r  r_  ra  re  r[  rd  r  r  r?  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r)  r+  r[  r|   rz   <module>rP     s              				       ) ) ) ) ) ) # # # # # # # # # # # # # # # # # #  , , , , , , ; ; ; ; ; ; ( ( ( ( ( ( * * * * * * . . . . . . 1 1 1 1 1 1 4 4 4 4 4 4 5 5 5 5 5 5 < < < < < < 6 6 6 6 6 6 < < < < < < 2 2 2 2 2 2 0 0 0 0 0 0 J J J J J J 7 7 7 7 7 7 # # # # # # - - - - - - / / / / / / . . . . . . , , , , , , + + + + + +       8 8 8 8 8 8 8 8 1 1 1 1 1 1 / / / / / / 3 3 3 3 3 3 2 2 2 2 2 2 ) ) ) ) ) ) . . . . . . . . . . . .       / / / / / / &O 5. 	 3, 	
 $&&	4    	      	        "(555666<<<999444:::@@@>>>>>>@@@777444555444555???@@@AAA888444555444444/ 8 P
O
O  6 	"XBx"bAq6Aq6Aq6:"X1v1vjj xiA
t{'((IdO	k$ "8!##
x+,,d#/$'				
v})**k$d#!!!$$DXDbR   l
 ###11$'\S  !1511$$RTJJJRRTT )$+..m(/::Kfm44W--[11$<88$844%H55$84428G$$844   A AD!+HTN3,?!@!@HTN:$ $ $N	X 	X 	X	X 	X 	X !1!1!3!344n55, , 65 54,*F F F*
 
 
$ y'8'899n55J J 65 :9J y'8'899,	"0"5	2126	/4	B-r2	    :9 
 
 
4  W W W   2L L L>- - -K K K> UVV+7 +7 WV+7\?+ ?+ ?+DH H H>F F FB:
 :
 :
 :
z ++1 1 ,+1 ..= = /.=9
 9
 9
 9
x ++G G ,+G ..S S /.SE E EP0 0 0f9% 9% 9%x= = =(	E 	E 	E(8 (8 (8V1 1 1h3 3 3$,N ,N ,N^ ++  ,+	 	 	 ++$ $ ,+$+ + +$ $ $K K K$( ( (- - -? ? ?"! ! !    *( ( ( (V l33	 6 6  436
 ffSS->->-K-KI-V-V&W&WXXZ$=>>. . ?> YX.0: 0: 0:f> > >, l33$W$W$WXX#:<R"STT  UT YX 43CP CP CP CPL l33+ + 43+     ++, , ,+,
$ $ $W W W ++, , ,+,G G GG G G ++  ,+ ..$ $ /.$? ? ?, , ,: ++  ,+0 0 0 ++$ $ ,+$
a? a? a?H+ + +8$ $ $" n55vvcc(--//**k:-FFGG  &<>Q%RSSA A TS  65
A n55HMMOO44&;=O%PQQA A RQ 54 65A	. 	. 	.: : :% % %P ++fh%788%<%<%<==  >= 98 ,+: &R&R&RSS!1!1!3!344	> 	> 54 TS	> q**& & +*&B'0 '0 '0T n55"8 "8 65"8J "8:M!NOOq!f--G G .- POG,( ( (2( ( (4? ? ?$? ? ?"I I I- - -,- - -6@ @ @$
 
 
B1U 1U 1Uj  (  & !1!1!3!344  54  r|   