U
    2d)A                 &   @   s  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+ZEeF ZGeFeHd,< eGIeD eGIeE d-d.d/d0gZJe
Kddd1dddd2d3dd4ddddgddd5d6dd4ddd2d7d8dd1d2gd9d9ddd:ddd;d2ddd:dd2gd9d9dd<ddddddd8ddd2gd9d9dddddd6dddddd2gd9d=dd1d>d?d1dd@dd1d6d4d2gdAddBdCddDddd@dEdFdd>d2gdAddBdCddDddd@dEddd=d2gdAdGdBdCddDddd@dEddd=d2gdAdGdBdCddDddd@dEdFdd9dgdHdGd5d2dFd4d?dd2d7d6ddHdgdHdd2d2d2d9d2ddd=d6dd2dgdHdd2dHd6d9d?dHdd9d2dHdHdgd2d2ddHdHd9d2dHdd7d2dHd6dgd6d2dd6dd4d?dd2d7d6dd6d2gdAdGdBdCdd2ddd@dEdFdd>d2gdAdGdBdCdd2ddd@dEdId2d9d9gdAdGdBdCdd?ddd@dEdFdd9d9gdHdd5d2dFd=d?dd2d7d6d2dd9gdHdd2d2d2d=d2ddd=dddd2gdHd2d2d2dHd9d?dHdd9ddHd2d2gd2d2ddd2d>d2dHdd7d2dHd2d2gd6d2dd2dd4d2dd2d=ddd2dggZLd2d2ddddd2d2d2d2d2d2dddd2ddd2ddddgZMdJd;dKdLd?dMdNdOdPdQdNdRdSdKdHdDdddTdUdVdWdgZNd=d9gd9d9gd9d=gd2d2gd2dHgdHd2ggZOd9d9d9d2d2d2gZPd9d9gdHdHgd6dHggZQd9d2d2gZRe@S ZTe
jUVd2ZWeWXeTjYjZZ[eTj\e[ eT_\eTjYe[ eT_Ye@] Z^eWXe^jYjZZ[e^j\e[ e^_\e^jYe[ e^_Ye@_ Z`eWXe`jYjZZ[e`j\e[ e`_\e`jYe[ e`_Ye(dZae@jbddXd?dY\ZcZdeajedZd[ZfdSefefd\k< eajgdd1d]d[Zhed^d?d_dd`i ZjeTj\eTjYdae^j\e^jYdae`j\e`jYdaeOePdaeLeMdaeLeNdaeceddaefehdaef ehdaejehdae
kdbehdadcZlelD ]Zmeelem dd elem de< q,dfdg Zndhdi Zodjdk ZpejqrdleEs ejqrdmeCdndo Ztdpdq Zudrds ZvejqrdteEw ejqrdmeCdudv Zxe$ejqrdteEw ejqrdwdxdyedzfd{d^edzfd|dyedzfd}dyedXfgd~d Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Zdd Zejqddd Zdd Zdd Zdd ZdAddZejqrdeGdd ZejqrdeJdd ZdBddZejqrdeGdd ZejqrdeJdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZejqrdeDdd Zdd ZejqrdeDdd Zdd Zdd Zdd ZddĄ ZddƄ ZddȄ Zddʄ Zdd̄ Zdd΄ ZdCddЄZejqrdeJejqrddӡddՄ ZejqrdeeeJeEejqrdddgddل Zddۄ Zdd݄ ZejqrdeJejqrdddddgejqrdeegdd ZdDddZejqrdeJdd Ze#dd ZejqrdeGdd Zdd Zdd ZejqrdeGdd Zdd Zdd ZejqrdeGdd ZejqrdeJdd Zdd Zdd ZejqrdeGdd  Zdd ZejqrdeGdd Zdd Zdd Zd	d
 ZejqrdmeBejqrdeeel ddh ejqrde.e0gdd ZejqrdmeCejqrdel ejqrde/e1gdd Zdd Zdd Zdd ZejqrdeGejqrdddgejqrddddgdd Zejqrdmdxd|d}gejqrdleEs dd  Zejqrd!ed6d"d# ZƐd$d% ZejqrdmeCd&d' Zejqrdle.e0gejqrd(dHd1gd)d* Zɐd+d, Zʐd-d. Zːd/d0 Z̐d1d2 Z͐d3d4 Zΐd5d6 Zϐd7d8 ZАd9d: Zѐd;d< ZҐd=d> ZӐd?d@ ZdS (E  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_TREESr   r   r   r         i      皙?g      g @g333333
   g	gzG @ig                  ?            ?      ?g333333?皙?g333333@g@g)\(?{Gz?gףp=
@g?              @g|?5^?g(\??   )random_state	n_samples
n_features)   r2   sizeg?)rJ   rJ   g      ?)ZdensityrG   Xy)rJ   r3   )irisdiabetesdigitstoy	clf_small	reg_small
multilabel
sparse-pos
sparse-neg
sparse-mixzerosrN   X_sparsec                 C   s   |j | j ks"td||j | j t| j|j|d  t| j|j|d  | jtk}t|}t| j	| |j	| |d  t| j
| |j
| |d  t| j |j |d  t| j|j|d  t| j|j|d d	 t| j| |j| |d
 d	 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AssertionErrorformatr   children_rightchildren_leftr   npZlogical_notfeature	thresholdn_node_samplessumr   impurityr   value)dsmessageZexternalinternal rn   @/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/tree/tests/test_tree.pyassert_tree_equal   s\    
      

        rp   c                  C   st   t  D ]f\} }|dd}|tt t|ttd	|  |ddd}|tt t|ttd	|  qd S )Nr   rG   Failed with {0}r0   )max_featuresrG   )
	CLF_TREESitemsfitrN   rO   r   predictTtrue_resultr`   namer   clfrn   rn   ro   test_classification_toy   s    
r}   c                  C   s   t  D ]x\} }|dd}|jtttttd t|	t
td|  |jtttttdd t|	t
td|  qd S )Nr   rq   sample_weightrr   r<   )rt   ru   rv   rN   rO   rc   oneslenr   rw   rx   ry   r`   fullrz   rn   rn   ro    test_weighted_classification_toy   s    
r   r   	criterionc                 C   s   |dkr:t t td }t t| }t t| }nt}t}| |dd}|t| t|	t
| | |ddd}|t| t|	t
| d S )Nr-   r0   r   rG   r   rs   rG   )rc   absminrO   arrayry   rv   rN   r   rw   rx   )r   r   ay_trainy_testregr|   rn   rn   ro   test_regression_toy  s    r   c                  C   s   t d} d| d dd df< d| dd dd f< t | j\}}t | | gj}|  } t D ]r\}}|dd}|	||  |
|| dkstd||ddd}|	||  |
|| dksjtd|qjd S )	N)r9   r9   r0   r2   r   rq   r@   rr   rG   rs   )rc   rZ   indicesshapevstackravelrx   rt   ru   rv   scorer_   r`   )rO   ZgridxZgridyrN   r{   r   r|   rn   rn   ro   test_xor  s    

r   c                  C   s   t t tD ]\\} }}||dd}|tjtj t|	tjtj}|dksdt
d| ||||ddd}|tjtj t|	tjtj}|dkst
d| ||qd S )Nr   r   rE   z0Failed with {0}, criterion = {1} and score = {2}r>   r   r<   )r   rt   ru   CLF_CRITERIONSrv   rP   datatargetr
   rw   r_   r`   )r{   r   r   r|   r   rn   rn   ro   	test_iris3  s"        r   z
name, Treec                 C   s\   ||dd}| tjtj ttj|tj}|tdksXtd|  d| d| d S )Nr   r   zFailed with z, criterion = z and score = )	rv   rQ   r   r   r   rw   pytestapproxr_   )r{   r   r   r   r   rn   rn   ro   test_diabetes_overfitE  s    r   z&criterion, max_depth, metric, max_lossr*      <   r+   r,   r-   c                 C   sR   |||ddd}| tjtj |tj|tj}d|  k rH|k sNn td S )Nr;   r   )r   	max_depthrs   rG   )rv   rQ   r   r   rw   r_   )r{   r   r   r   ZmetricZmax_lossr   Zlossrn   rn   ro   test_diabetes_underfitR  s    r   c                  C   s   t  D ]\} }|dddd}|tjtj |tj}tt	|dt
tjjd d| d tt|d|tjd| d t|tjt|tjdd| d qd S )Nr0   *   )r   rs   rG   r   rr   r\   r=   )rt   ru   rv   rP   r   r   predict_probar   rc   rg   r   r   r`   r   Zargmaxrw   r   exppredict_log_proba)r{   r   r|   Zprob_predictrn   rn   ro   test_probabilityg  s(    



r   c                  C   sP   t dd d t jf } t d}t D ] \}}|d dd}|| | q*d S )N'  r   r   rG   )rc   arangenewaxis	REG_TREESru   rv   rN   rO   r{   r   r   rn   rn   ro   test_arrayrepr  s
    
r   c                  C   s   ddgddgddgddgddgddgg} ddddddg}t  D ]8\}}|dd}|| | t|| |d|d q@t D ]8\}}|dd}|| | t|| |d|d qd S )	Nr7   r6   r0   r>   r   rq   rr   r\   )rt   ru   rv   r   rw   r`   r   r   )rN   rO   r{   TreeClassifierr|   TreeRegressorr   rn   rn   ro   test_pure_set  s    (

r   c                  C   s   t ddddgddddgd	dddgd
dddgddddgddddgddddgg} t dddddddg}t jddZ t D ]J\}}|dd}|| | || |  ||  | ||  |  q~W 5 Q R X d S )Ngs_c@gd	a@g `8`@g?c@g_9a@g 8`@g-Vu]@g    @Xd@gSW j_@g ً`@g4Ta@g	lKa@g{c@g|@Y@g~G`a@gwI?lKa@g/"c@g_@g:^@r@   gAw?gtQ?5??rC   g7G?gۺ?gb'?raise)allr   rq   )rc   r   Zerrstater   ru   rv   r   rn   rn   ro   test_numerical_stability  s$    







r   c               	   C   s   t jdddddddd\} }t D ]d\}}|dd}|| | |j}t|dk}|jd dksrt	d	
||dks$t	d	
|q$tdd}|tjtj tdttjd
}|tjtj t|j|j d S )Ni  r9   r3   r   FrH   rI   n_informativen_redundantZ
n_repeatedshufflerG   rq   皙?rr   rG   max_leaf_nodes)r&   make_classificationrt   ru   rv   feature_importances_rc   rg   r   r_   r`   r   rP   r   r   r   r   )rN   rO   r{   r   r|   ZimportancesZn_importantclf2rn   rn   ro   test_importances  s*    



r   c               	   C   s*   t  } tt t| d W 5 Q R X d S )Nr   )r   r   raises
ValueErrorgetattrr|   rn   rn   ro   test_importances_raises  s    r   c               	   C   s   t jdddddddd\} }tdddd	| |}td
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  r9   r3   r   Fr   r(   r2   )r   r   rG   r*   )r&   r   r   rv   r   r   r   r   tree_rd   rb   ra   rf   )rN   rO   r|   r   rn   rn   ro   )test_importances_gini_equal_squared_error  s4    
    r   z7ignore:`max_features='auto'` has been deprecated in 1.1c                  C   s$  t  D ]8\} }|dd}|tjtj |jtjjd kstqt	 D ]0\} }|dd}|t
jt
j |jdksJtqJt D ]\} }|dd}|t
jt
j |jttt
jjd kst|dd}|t
jt
j |jttt
jjd kst|dd}|t
jt
j |jdks.t|dd}|t
jt
j |jdksXt|dd}|t
jt
j |jdkst|d	d}|t
jt
j |jtd	t
jjd  kst|d
d}|t
jt
j |jt
jjd kst|d d}|t
jt
j |jt
jjd kstqd S )Nautors   r0   r>   sqrtlog2r3   rB   r<   r@   )r   ru   rv   rQ   r   r   Zmax_features_r   r_   rt   rP   r.   intrc   r   r   )r{   r   r   r   r|   TreeEstimatorestrn   rn   ro   test_max_features  sB    


 
"



 

r   c            	   
   C   s  t  D ]\} }| }tt |t W 5 Q R X |tt dddgg}tt	 || W 5 Q R X | }td d }tt	 |t| W 5 Q R X t
t}| }||t t|tt | }tt |t W 5 Q R X |tt t
t}tt	  ||d d dd f  W 5 Q R X t
tj}| }|t
t|t tt	 |t W 5 Q R X tt	 |t W 5 Q R X | }|tt tt	 || W 5 Q R X tt	 || W 5 Q R X | }tt |t W 5 Q R X qtdd}tjt	dd  |ddd	ggdddg W 5 Q R X tjt	d
d  |ddd	ggddd	g W 5 Q R X d S )Nr7   r6   r0   r-   r   zy is not positive.*Poissonmatchr   r>   zSome.*y are negative.*Poissonr2   g)rt   ru   r   r   r   r   rN   rv   rO   r   rc   asfortranarrayr   rw   rx   ry   asarrayr   dotapplyr   )	r{   r   r   X2y2ZXftZXtr|   rn   rn   ro   
test_error)  sX    

$
$r   c                  C   s   t jtjtjjd} tj}tdt	
 D ]\}}t	| }|d|dd}|| | |jj|jjdk }t |dkstd||d	|dd}|| | |jj|jjdk }t |dks(td|q(d
S )z Test min_samples_split parameterdtypeN  r9   r   )min_samples_splitr   rG   r6   	   rr   r5   N)rc   r   rP   r   r   _treeDTYPEr   r   r.   keysrv   r   rf   rb   r   r_   r`   )rN   rO   r   r{   r   r   Znode_samplesrn   rn   ro   test_min_samples_splitk  s(        r   c            	      C   s   t jtjtjjd} tj}tdt	
 D ]\}}t	| }|d|dd}|| | |j| }t |}||dk }t |dkstd||d|dd}|| | |j| }t |}||dk }t |dks(td|q(d S )	Nr   r   r2   r   )min_samples_leafr   rG   r/   rr   r   )rc   r   rP   r   r   r   r   r   r   r.   r   rv   r   r   bincountr   r_   r`   )	rN   rO   r   r{   r   r   outZnode_countsZ
leaf_countrn   rn   ro   test_min_samples_leaf  s0      
  
r   Fc                 C   s  |rt | d tj}nt | d tj}t | d }t|jd }t|}t|  }t	dt
dddD ]\}}	||	|dd}
|
j|||d	 |r|
j| }n|
j|}tj||d
}||dk }t|||
j ksptd| |
jqp|jd }t	dt
dddD ]\}}	||	|dd}
|
|| |rR|
j| }n|
j|}t|}||dk }t|||
j kstd| |
jqdS )zPTest if leaves contain at least min_weight_fraction_leaf of the
    training setr[   rN   rO   r   r   r<   r;   )min_weight_fraction_leafr   rG   r~   )weightsz,Failed with {0} min_weight_fraction_leaf={1}N)DATASETSastyperc   float32rngrandr   rg   r.   r   linspacerv   r   r   tocsrr   r   r   r_   r`   )r{   r&   sparserN   rO   r   total_weightr   r   fracr   r   node_weightsleaf_weightsrn   rn   ro   check_min_weight_fraction_leaf  s\    
   
  
 r   r{   c                 C   s   t | d d S NrP   r   r{   rn   rn   ro   ,test_min_weight_fraction_leaf_on_dense_input  s    r   c                 C   s   t | dd d S NrV   Tr   r   rn   rn   ro   -test_min_weight_fraction_leaf_on_sparse_input  s    r   c                 C   s  |rt | d tj}nt | d tj}t | d }|jd }t|  }tdtdddD ]\}}|||ddd	}	|	|| |r|	j	
| }
n|	j	
|}
t|
}||dk }t|t||	j dks`td
| |	j|	jq`tdtdddD ]\}}|||ddd	}	|	|| |r>|	j	
| }
n|	j	
|}
t|
}||dk }t|t||	j ||	j kstd
| |	j|	jqdS )zzTest the interaction between min_weight_fraction_leaf and
    min_samples_leaf when sample_weights is not provided in fit.r[   rN   rO   r   r   r<   r3   r2   )r   r   r   rG   zBFailed with {0} min_weight_fraction_leaf={1}, min_samples_leaf={2}r   N)r   r   rc   r   r   r.   r   r   rv   r   r   r   r   r   maxr   r_   r`   r   )r{   r&   r   rN   rO   r   r   r   r   r   r   r   r   rn   rn   ro   4check_min_weight_fraction_leaf_with_min_samples_leaf  sh    


   


  r   c                 C   s   t | d d S r   r   r   rn   rn   ro   Btest_min_weight_fraction_leaf_with_min_samples_leaf_on_dense_input.  s    r   c                 C   s   t | dd d S r   r   r   rn   rn   ro   Ctest_min_weight_fraction_leaf_with_min_samples_leaf_on_sparse_input3  s    r   c                  C   s  t jddd\} }tdt D ]r\}}t| }||dd}||ddd}||d	dd}||d
dd}|df|df|d	f|d
ffD ]\}	}
|	j|
kstd|	j|
|	| | t	|	j
jD ]}|	j
j| tkr|	j
j| }|	j
j| }|	j
j| }|	j
j| }|	j
j| }|| }|	j
j| }|	j
j| }|	j
j| }|| }|| }|| }|	j
j| | jd  }|||  }||
kstd||
qqq d S )Nr   r   rH   rG   r   r   r   rG   rA   )r   min_impurity_decreaserG   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  r_   r`   rv   ranger   r^   rb   r   rh   weighted_n_node_samplesra   r   )rN   rO   r   r{   r   Zest1est2Zest3Zest4r   Zexpected_decreasenodeZ
imp_parentZ
wtd_n_nodeleftZ
wtd_n_leftZimp_leftZwtd_imp_leftrightZwtd_n_rightZ	imp_rightZwtd_imp_rightZwtd_avg_left_right_impZfractional_node_weightZactual_decreasern   rn   ro   test_min_impurity_decrease8  st            r	  c                     s  t  D ]\} }d| kr(tjtj }}ntjtj }}|dd  ||  ||}dddddd	d
ddddddg} fdd|D }t	 }t
|}t| jkst|||}	||	kstd| |D ]*}
tt|j|
||
 d|
 d|  d qqdS )z8Test pickling preserves Tree properties and performance.
Classifierr   rq   r   r^   capacity	n_classesrb   ra   Zn_leavesrd   re   rh   rf   r  ri   c                    s   i | ]}|t  j|qS rn   )r   r   ).0	attributer   rn   ro   
<dictcomp>  s     ztest_pickle.<locals>.<dictcomp>z6Failed to generate same score  after pickling with {0}z"Failed to generate same attribute z after pickling with r\   N)r.   ru   rP   r   r   rQ   rv   r   pickledumpsloadstype	__class__r_   r`   r   r   r   )r{   r   rN   rO   r   
attributesZfitted_attributeZserialized_objectr  Zscore2r  rn   r  ro   test_pickle  sL    




r  c                  C   s  ddgddgddgddgddgddgddgddgddgddgddgddgg} ddgddgddgddgddgddgddgddgddgddgddgddgg}ddgddgddgddgg}ddgddgddgddgg}t  D ]\}}|dd}|| ||}t|| |jdkst||}t|dks2t|d jdksFt|d jd	ksZt|	|}	t|	dksvt|	d jdkst|	d jd	kstqt
 D ]@\}}
|
dd}|| ||}t|| |jdkstqd S )
Nr7   r6   r0   r>   r   r3   rq   r/   r>   )r/   r/   )rt   ru   rv   rw   r   r   r_   r   r   r   r   r   )rN   rO   rx   Zy_truer{   r   r|   Zy_hatZprobaZ	log_probar   r   rn   rn   ro   test_multioutput  s\    





r  c                  C   s   t  D ]\} }|dd}|tt |jdks4tt|jddg t	
tt	td fj}|dd}|t| t|jdkstt|jdkstt|jddg t|jddgddgg qd S )Nr   rq   r>   r6   r0   r7   )rt   ru   rv   rN   rO   
n_classes_r_   r   Zclasses_rc   r   r   rx   r   )r{   r   r|   _yrn   rn   ro   test_classes_shape  s    

r  c                  C   sf   t jd d } t jd d }td|}t D ]2\}}|dd}|j| ||d t|| | q.d S )N}   balancedr   rq   r~   )	rP   r   r   r'   rt   ru   rv   r   rw   )Zunbalanced_XZunbalanced_yr   r{   r   r|   rn   rn   ro   test_unbalanced_iris  s    

r  c                  C   s  t t tjtjgD ]l\\} }}|dd}tjtj|d}tj	}t
||||| tjtjd|d}tj	}t
||||| tjtjd|d}tj	}t
||||| tjtj|d}tj	}t
||||| ttj|d}tj	}t
||||| ttj|d}tj	}t
||||| tjtjd d d |d}tj	d d d }t
||||| qd S )Nr   rq   r   C)orderr   Fr3   )r   r.   ru   rc   float64r   r   rP   r   r   r   rv   rw   Zascontiguousarrayr   r   )r{   r   r   r   rN   rO   rn   rn   ro   test_memory_layout  s4     

r$  c                  C   s  t dd d t jf } t d}d|d d< t d}d||dk< tdd}|j| ||d t|| t d t dd d t jf } t d}d|dd< d	|dd< d| dddf< t d}d
||d	k< tddd}|j| ||d |j	j
d dkstd||d	k< tddd}|j| ||d |j	j
d dksDttj} tj}td| jd d}tdd}|| | ||  t j|| jd d}tdd}|j| ||d |j	jtjjk}t|j	j
| |j	j
|  d S )Nd   rC   2   r   rq   r~      r0   r>   gRQ?r   g     b@r<   g     H@)Z	minlength)rc   r   r   r   r   rv   r   rw   rZ   r   re   r_   rP   r   r   r   randintr   r   rb   r   r   r   r   )rN   rO   r   r|   
duplicatesr   rm   rn   rn   ro   test_sample_weight:  sF    







 
r*  c               	   C   s   t dd d t jf } t d}d|d d< tdd}t jdd}tt	 |j
| ||d W 5 Q R X t d}d}tjt|d	 |j
| ||d W 5 Q R X d S )
Nr%  rC   r&  r   rq   r0   r~   z3Singleton.* cannot be considered a valid collectionr   )rc   r   r   r   r   randomr   r   r   r   rv   r   	TypeError)rN   rO   r|   r   Zexpected_errrn   rn   ro   test_sample_weight_invalidn  s    


r-  c           	      C   s  t |  }|dd}|tjtj |ddd}|tjtj t|j|j ttjtjtjfj	}|ddddddddddddgdd}|tj| t|j|j |ddd}|tj| t|j|j t
tjj}|tjdk  d	9  < dd
dd}|dd}|tjtj| ||dd}|tjtj t|j|j |dd}|tjtj|d  ||dd}|tjtj| t|j|j dS )z5Check class_weights resemble sample_weights behavior.r   rq   r  class_weightrG   g       @r@   )r   r0   r>   r0   r%  g      Y@r>   N)rt   rv   rP   r   r   r   r   rc   r   rx   r   r   )	r{   r   clf1r   Z
iris_multiZclf3Zclf4r   r/  rn   rn   ro   check_class_weights  s@    





r1  c                 C   s   t |  d S N)r1  r   rn   rn   ro   test_class_weights  s    r3  c              	   C   sd   t |  }ttttd fj}|dddgdd}d}tjt|d |	t
| W 5 Q R X d S )	Nr>   r<   r@   r6   r0   r   r.  zBnumber of elements in class_weight should match number of outputs.r   )rt   rc   r   rO   r   rx   r   r   r   rv   rN   )r{   r   r  r|   r]   rn   rn   ro   check_class_weight_errors  s    r5  c                 C   s   t |  d S r2  )r5  r   rn   rn   ro   test_class_weight_errors  s    r6  c                  C   sX   t jddd\} }d}t D ]4\}}|d |d d| |}| |d kstqd S Nr%  r0   r   r/   )r   r   )r&   make_hastie_10_2r.   ru   rv   Zget_n_leavesr_   rN   rO   kr{   r   r   rn   rn   ro   test_max_leaf_nodes  s
    r;  c                  C   sP   t jddd\} }d}t D ],\}}|d|d| |}| dkstqd S r7  )r&   r8  r.   ru   rv   Z	get_depthr_   r9  rn   rn   ro   test_max_leaf_nodes_max_depth  s
    r<  c                  C   sT   dD ]J} t t dgdggddgj| }d|jd   krDdk sn tdqd S )N)r  ri   rb   ra   re   rh   rd   rf   r   r0   r8   r3   z Array points to arbitrary memory)r   r   rv   r   flatr_   )attrri   rn   rn   ro   test_arrays_persist  s    
"r?  c                  C   s\   t d} td}| ddd}t D ].\}}|dd}||| |jjdks(t	q(d S )Nr   )r9   rJ   r>   )r9   rq   )
r   rc   rZ   r(  r.   ru   rv   r   r   r_   )rG   rN   rO   r{   r   r   rn   rn   ro   test_only_constant_features  s    

r@  c                  C   s   t t dddddddddddggt df} ddddddddd	d	d	g}t D ]H\}}d
|krT|ddd}|| | |jjdkst	|jj
dksTt	qTd S )Nr   r0   r>   r/   r2   r;      )r/   r:   r3   Z	ExtraTreer   )rc   Z	transposer   rZ   r.   ru   rv   r   r   r_   r^   rN   rO   r{   r   r   rn   rn   ro   ,test_behaviour_constant_feature_after_splits  s    *rC  c                  C   s   t t dgdgdgdggt dg} t ddddg}t D ]H\}}|ddd}|| | |jjdkstt	t
|| t dd qDt D ]H\}}|ddd}|| | |jjdkst	t
|| t d	d qd S )
Nr@   rC   )r/   r   r   r0   r   r  r<   )r/   )rc   Zhstackr   rZ   rt   ru   rv   r   r   r_   r   r   r   r   rw   rB  rn   rn   ro   (test_with_only_one_non_constant_features  s    *rD  c               	   C   sT   t ddt jdd} t }tjtdd |	| ddddg W 5 Q R X d S )Ng\)c=Hr/   r6   r0   r   r   r   )
rc   repeatr   r#  reshaper   r   r   r   rv   )rN   r|   rn   rn   ro   test_big_input  s    rG  c               	   C   s,   ddl m}  tt |   W 5 Q R X d S )Nr   _realloc_test)Zsklearn.tree._utilsrI  r   r   MemoryErrorrH  rn   rn   ro   test_realloc  s    rK  c               	   C   s   dt d } tjdd}tjddd}d| d  }td|d}tt	 |
|| W 5 Q R X d| d  d }td|d}tt |
|| W 5 Q R X d S )	Nr=   Pr9   r>   r   r0   best)splitterr   )structcalcsizerc   r+  randnr(  r   r   r   	Exceptionrv   rJ  )Zn_bitsrN   rO   Zhuger|   rn   rn   ro   test_huge_allocations!  s    rS  c                 C   s<  t |  }t| d }t| d }t| d }|dkrf|jd d }|d | }|d | }|d | }tttfD ]}||}|d|d||}	|d|d||}
t|	j|
jd	|  |	
|}| tkr|	|}|	|}tttfD ]J}||tjd	}t|

|| | tkrt|
|| t|
|| qqpd S )
NrN   r[   rO   )rR   rQ   r   r2   rG   r   5{0} with dense and sparse format gave different treesr   )r.   r   r   r   r   r   rv   rp   r   r`   rw   rt   r   r   rc   r   r   )r   datasetr   r   rN   r[   rO   rH   Zsparse_formatrj   rk   Zy_predZy_probaZy_log_probaZsparse_matrixX_sparse_testrn   rn   ro   check_sparse_input6  s>    


 rX  	tree_typerV  )rT   rS   rR   rV   rW   rX   rY   rZ   c                 C   s    |dkrdnd }t | || d S )NrR   r3   rX  )rY  rV  r   rn   rn   ro   test_sparse_inputa  s    r[  rQ   rU   c                 C   s   t | |d d S )Nr>   rZ  )rY  rV  rn   rn   ro   test_sparse_input_reg_treest  s    r\  c                 C   s  t |  }t| d }t| d }t| d }|dddd||}|dddd||}t|j|jd|  t|||| |ddd	d
||}|ddd	d
||}t|j|jd|  t|||| |d|jd d d||}|d|jd d d||}t|j|jd|  t|||| |ddd||}|ddd||}t|j|jd|  t|||| d S )NrN   r[   rO   r   r0   r>   )rG   rs   r   rU  r9   )rG   rs   r   )rG   r   r3   r   )	r.   r   rv   rp   r   r`   r   rw   r   )r   rV  r   rN   r[   rO   rj   rk   rn   rn   ro   check_sparse_parameters|  sT      r]  c           
      C   s   t |  }t| d }t| d }t| d }| tkr8tnt}|D ]\}|dd|d||}|dd|d||}	t|j|	jd|  t	|	
||
| q@d S )NrN   r[   rO   r   r3   )rG   r   r   rU  )r.   r   r   REG_CRITERIONSr   rv   rp   r   r`   r   rw   )
r   rV  r   rN   r[   rO   Z
CRITERIONSr   rj   rk   rn   rn   ro   check_sparse_criterion  s"     r_  rW   rX   rY   rZ   checkc                 C   s   || | d S r2  rn   )rY  rV  r`  rn   rn   ro   test_sparse  s    ra  c                 C   s|  t |  }|}t|}td}g }g }d}	|	g}
t|D ]^}||d}||d | }|| |jdd|fdd }|| |	|7 }	|
|	 q8t|}tj	t|tj
d}t|||
f||fd}| }t|||
f||fd}| }|jdd|fd}| }|jdk dks&t|jdk dks>t|d|d	||}|d|d	||}t|j|jd
|  ||f}t||D ]\}}t|j||j| t|||| t|||j| t|j| |j|  t|| ||  t|| |j|  t|||| | tkrt|||| qd S )Nr   r<   r3   rK   r0   r   r   rC   rT  rU  )r.   rc   r   r   r  Zbinomialpermutationappendconcatenater   r   r   toarrayr   r(  copyr   rg   r_   rv   rp   r   r`   r   r   r   decision_pathrw   rt   r   )r   r   rI   r   rH   ZsamplesrG   r   r   offsetindptriZn_nonzero_iZ	indices_iZdata_ir[   rN   rW  X_testrO   rj   rk   ZXsZX1r   rn   rn   ro   check_explicit_sparse_zeros  sj    



   
rm  c                 C   s   t |  d S r2  )rm  )rY  rn   rn   ro   test_explicit_sparse_zeros  s    rn  c              	   C   s   t |  }tjd d df  }tjd d df d}tj}tt |dd	|| W 5 Q R X |dd}|	|| tt |
|g W 5 Q R X d S )Nr   r4  rq   )r.   rP   r   r   rF  r   r   r   r   rv   rw   )r{   r   rN   ZX_2drO   r   rn   rn   ro   check_raise_error_on_1d_input  s    
ro  c              	   C   s   t   t|  W 5 Q R X d S r2  )r   ro  r   rn   rn   ro   test_1d_input(  s    rp  c                 C   sZ   | dd}|j |||d |jjdks*t| ddd}|j |||d |jjdksVtd S )Nr   rq   r~   r0   g?)rG   r   )rv   r   r   r_   )r   rN   rO   r   r   rn   rn   ro   "_check_min_weight_leaf_split_level.  s    
rq  c                 C   sf   t |  }tdgdgdgdgdgg}dddddg}dddddg}t|||| t|t||| d S )Nr   r0   r5   )r.   rc   r   rq  r   )r{   r   rN   rO   r   rn   rn   ro   !check_min_weight_leaf_split_level8  s    rr  c                 C   s   t |  d S r2  )rr  r   rn   rn   ro    test_min_weight_leaf_split_levelC  s    rs  c                 C   sD   t jtjjdd}t|   }|t t t|	t |j
	| d S NFrg  )X_smallr   r   r   r   r.   rv   y_smallr   r   r   r{   Z	X_small32r   rn   rn   ro   check_public_applyH  s    
ry  c                 C   sH   t tjtjjdd}t|   }|tt t	|
t|j
| d S rt  )r   rv  r   r   r   r   r.   rv   rw  r   r   r   rx  rn   rn   ro   check_public_apply_sparseP  s    
rz  c                 C   s   t |  d S r2  )ry  r   rn   rn   ro   test_public_apply_all_treesX  s    r{  c                 C   s   t |  d S r2  )rz  r   rn   rn   ro   test_public_apply_sparse_trees]  s    r|  c                  C   sT   t j} t j}tddd| |}|| d d  }t|dddgdddgg d S )Nr   r0   rT  r>   )rP   r   r   r   rv   rh  rf  r   )rN   rO   r   node_indicatorrn   rn   ro   test_decision_path_hardcodedb  s
    r~  c                    s   t j}t j}|jd }t|  }|ddd}||| ||}|   j||jj	fks^t
||} fddt|D }t|tj|d |jjtk}	tt |	tj|d  jdd }
|jj|
kst
d S )	Nr   r>   rT  c                    s   g | ]\}} ||f qS rn   rn   )r  rk  jr}  rn   ro   
<listcomp>y  s     z'check_decision_path.<locals>.<listcomp>rb  r0   Zaxis)rP   r   r   r   r.   rv   rh  rf  r   r^   r_   r   	enumerater   rc   r   rb   r   r   rg   r   r   )r{   rN   rO   rH   r   r   Znode_indicator_csrZleavesZleave_indicatorZ
all_leavesr   rn   r  ro   check_decision_pathj  s&    



 
r  c                 C   s   t |  d S r2  )r  r   rn   rn   ro   test_decision_path  s    r  c              	   C   sB   t tt }}t|  }tt |dd|| W 5 Q R X d S )Nr   rq   )X_multilabelr   y_multilabelr.   r   r   r,  rv   )r{   rN   rO   r   rn   rn   ro   check_no_sparse_y_support  s    r  c                 C   s   t |  d S r2  )r  r   rn   rn   ro   test_no_sparse_y_support  s    r  c                  C   s(  t dddd} | jdgdgdgdgdggdd	dd
dgdddddgd t| jjdddg t| jjjdddg | jdgdgdgdgdggdd	dd
dgt	dd t| jjdddg t| jjjd
ddg | jdgdgdgdgdggdd	dd
dgd t| jjdddg t| jjjd
ddg 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+   r>   )rG   r   r   r3   r2   r=   r;   rA  r/   333333?g333333?r   r@   )rN   rO   r   g,d?gܶm۶m?g?g      @g      @gffffff?r?   gUUUUUU?rD   rM   N)
r   rv   r   r   rh   r   ri   r=  rc   r   )Zdt_maern   rn   ro   test_mae  s$    J  4,r  c                  C   s   d} t jdt jd}d}dd }tjtj|fD ]}t D ]N\}}|| |}|| }|\}	\}
}}||	ksrt| |
ks~tt	|| q:t
 D ]P\}}|| |}|| }|\}	\}
}}||	kst| |
kst||kstqq.d S )Nr3   r   r%  c                 S   s   t t | S r2  )r  r  r  )objrn   rn   ro   _pickle_copy  s    z)test_criterion_copy.<locals>._pickle_copy)rc   r   Zintprg  deepcopyr$   ru   
__reduce__r_   r   r%   )	n_outputsr  rH   r  Z	copy_func_typenameZcriteriaresultZ	typename_Z
n_outputs_r  Z
n_samples_rn   rn   ro   test_criterion_copy  s&    

r  c            
      C   s   t jdddd } t | d} | d d d df }t|}| d d df }||fD ]~}tdd||}|	|}t
t |jjtkd }||}t t |jj d }	t|	dkstt|dks\tq\d S )Nr   r%  r:   g*Gr   r6   rq   )rc   r+  RandomStaterQ  Z
nan_to_numr   r   r   rv   r   setwherer   rb   r   
differenceisfinitere   r   r_   )
r   ZX_fullr[   rO   rN   r   Zterminal_regionsZ	left_leafZ
empty_leafZinfinite_thresholdrn   rn   ro   "test_empty_leaf_infinite_threshold  s    

r  tree_clsc           	      C   s   t | }|d |d  }}|ddd}|||}|j}|j}tt|dksVttt|dksntt|||| d S NrN   rO   rJ   r   r  	r   Zcost_complexity_pruning_pathZ
ccp_alphas
impuritiesrc   r   Zdiffr_   assert_pruning_creates_subtree	r   rV  r  rN   rO   r   infopruning_pathr  rn   rn   ro   'test_prune_tree_classifier_are_subtrees*  s    r  c           	      C   s   t | }|d |d  }}|ddd}|||}|j}|j}tt|dksVttt|dksntt|||| d S r  r  r  rn   rn   ro   'test_prune_tree_regression_are_subtrees=  s    r  c                  C   sX   t dd} | dgdggddg t ddd}|dgdggddg t| j|j d S )Nr   rq   r0   r9   )rG   	ccp_alpha)r   rv   assert_is_subtreer   )r0  r   rn   rn   ro   test_prune_single_node_treeO  s
    
r  c           	      C   s\   g }|D ]$}| d|dd ||}|| qt||dd  D ]\}}t|j|j q@d S )NrJ   r   )r   r  rG   r0   )rv   rd  zipr  r   )	Zestimator_clsrN   rO   r  Z
estimatorsr  r   Zprev_estZnext_estrn   rn   ro   r  [  s     r  c           	      C   s  | j |j kst| j|jks t| j}| j}|j}|j}dg}|r| \}}t| j| |j|  t| j	| |j	|  t| j
| |j
|  t| j| |j|  || || krtt|j|  q>t| j| |j|  ||| || f ||| || f q>d S )N)r   r   )r^   r_   r   rb   ra   popr   ri   r   rh   rf   r  r   re   rd  )	r   ZsubtreeZtree_c_leftZtree_c_rightZsubtree_c_leftZsubtree_c_rightstackZtree_node_idxZsubtree_node_idxrn   rn   ro   r  j  sF        r  rN  rM  r+  X_formatdenseZcsrcscc                 C   s   t d }|d jtjjdd}|dkr0t|}nN|d }|dkrH| }tj|j	tjjd|_	t|j	|j
|jf\|_	|_
|_ttjttjjd}t|  |d	}||| t|||| t|| ||  d S )
NrT   rN   Fru  r  r[   r  r   )rN  )r   r   r   r   r   r   Ztocscrc   r   r   r   rj  rw  r.   rv   r   rw   rh  Ztodense)r{   rN  r  rV  rv  Z
X_readonlyZ
y_readonlyr   rn   rn   ro   "test_apply_path_readonly_all_trees  s.    
 r  c                 C   sL   t jt j }}|| d}||| t||tt|ksHt	d S )Nr   )
rQ   r   r   rv   rc   rg   rw   r   r   r_   )r   r   rN   rO   r   rn   rn   ro   test_balance_property  s    
r  seedc              	   C   s*  ddgddgddgddgddgddgddgddgg}ddddddddg}t d| d}||| t||dksxtt d| d}||| t||dkstd	}tj|d d d
d||d d | d\}}d|d|k |dk @ < t	|}t d| d}||| t||dks&td S )Nr   r0   r>   r3   r/   r*   r   r-   r9   r  r   )Zeffective_rankZtail_strengthrH   rI   r   rG   r6   )
r   rv   rc   Zaminrw   r_   r   r&   Zmake_regressionr   )r  rN   rO   r   rI   rn   rn   ro   test_poisson_zero_nodes  s,    4


	
r  c                  C   sF  t jd} d\}}}tj|| || d}| jdd|dt j|dd }| jt || d	}t	|||| d
\}}}	}
t
dd| d}t
dd| d}|||	 |||	 tdd||	}||	df||
dffD ]p\}}}t|||}t|t ||dd }t|||}|dkr0|d| k s0t|d| k stqd S )Nr   )  r  r9   )rH   rI   rG   r7   r>   )lowhighrL   r   r  )Zlam)Z	test_sizerG   r-   r9   )r   r   rG   r*   mean)ZstrategyZtraintestgV瞯<r<   g      ?)rc   r+  r  r&   Zmake_low_rank_matrixuniformr   r-   r   r   r   rv   r	   r   rw   Zclipr_   )r   Zn_trainZn_testrI   rN   ZcoefrO   ZX_trainrl  r   r   Ztree_poiZtree_msedummyvalZ
metric_poiZ
metric_mseZmetric_dummyrn   rn   ro   test_poisson_vs_mse  sF    
         
r  c                 C   s4  t | d}tf |ddi}dD ]}td|  |dd q tjd}d	\}}|||}tj|d
d|| }|t|d 7 }tj	||d|d  gdd}	t	||d|d  g}
t
t|}d|d|d < tf |j|||d}tf |j|	|
dd}|jj|jjkstt|||| dS )z4Test that the impact of sample_weight is consistent.r   rG   r   )rZ   r   ZDecisionTreeRegressor_rZ   )kindr   )r9   r2   r0   r  r   Nr>   r~   )dictr   r   rc   r+  r  r   r  r   re  r   r   rv   r   r^   r_   r   rw   )r   Ztree_paramsr   r  r   rH   rI   rN   rO   r   r   Zsample_weight_1Ztree1Ztree2rn   rn   ro   6test_decision_tree_regressor_sample_weight_consistency  s2    
  
  r  r  c                 C   sz   d\}}t j||||ddd\}}| ddd||}| ddd||}t|j|j| d	 t|||| d
S )z3Test that criterion=entropy gives same as log_loss.)r&  r2   r   r   )r  rH   rI   r   r   rG   r)   +   r   Zentropyz> with criterion 'entropy' and 'log_loss' gave different trees.N)r&   r   rv   rp   r   r   rw   )r   r  rH   rI   rN   rO   Ztree_log_lossZtree_entropyrn   rn   ro   'test_criterion_entropy_same_as_log_loss2  s"    
r  c                     sv   t jdd\} }tddd  | |  | |}dd  fdd}t| }|| |}t||srt	d S )	Nr   rq   r3   rT  c                 S   s   |     S r2  )byteswapnewbyteorderr  )arrrn   rn   ro   reduce_ndarrayQ  s    z8test_different_endianness_pickle.<locals>.reduce_ndarrayc                     sB   t  } t| }tj |_|jtj< |	  | 
d | S Nr   )ioBytesIOr  Picklercopyregdispatch_tablerg  rc   ndarraydumpseekfpr|   r  rn   ro    get_pickle_non_native_endiannessT  s    


zJtest_different_endianness_pickle.<locals>.get_pickle_non_native_endianness)
r&   r   r   rv   r   r  loadrc   iscloser_   )rN   rO   r   r  new_clf	new_scorern   r  ro    test_different_endianness_pickleJ  s    
r  c                     s~   t jdd\} }tddd| | | |}G dd dt  fdd}t| }|| |}t	||szt
d S )	Nr   rq   r3   rT  c                       s   e Zd Z fddZ  ZS )zPtest_different_endianness_joblib_pickle.<locals>.NonNativeEndiannessNumpyPicklerc                    s(   t |tjr|  }t | d S r2  )
isinstancerc   r  r  r  supersave)selfr  r  rn   ro   r  k  s    zUtest_different_endianness_joblib_pickle.<locals>.NonNativeEndiannessNumpyPickler.save)__name__
__module____qualname__r  __classcell__rn   rn   r  ro   NonNativeEndiannessNumpyPicklerj  s   r  c                     s(   t  }  | }| | d | S r  )r  r  r  r  r  r  r|   rn   ro   'get_joblib_pickle_non_native_endiannessp  s
    

zXtest_different_endianness_joblib_pickle.<locals>.get_joblib_pickle_non_native_endianness)r&   r   r   rv   r   r   joblibr  rc   r  r_   )rN   rO   r   r  r  r  rn   r  ro   'test_different_endianness_joblib_picklec  s    r  c                 C   sr   t r
tjntj}ddddg}dd | jj D }|D ]}|||< q6tt| t|	 d}| j
|dd	S )
N
left_childZright_childrd   rf   c                 S   s   i | ]\}\}}||qS rn   rn   r  r{   r   r  rn   rn   ro   r    s   
  z6get_different_bitness_node_ndarray.<locals>.<dictcomp>namesformats	same_kindZcasting)r   rc   int64int32r   fieldsru   listr   valuesr   )node_ndarrayZnew_dtype_for_indexing_fieldsZindexing_field_namesnew_dtype_dictr{   	new_dtypern   rn   ro   "get_different_bitness_node_ndarray}  s    

r  c                 C   sj   dd | j j D }dd | j j D }dd |D }t t| t| |d}| j|ddS )	Nc                 S   s   i | ]\}\}}||qS rn   rn   r  rn   rn   ro   r    s   
  z8get_different_alignment_node_ndarray.<locals>.<dictcomp>c                 S   s   g | ]\}}|qS rn   rn   )r  r   ri  rn   rn   ro   r    s     z8get_different_alignment_node_ndarray.<locals>.<listcomp>c                 S   s   g | ]}d | qS )r=   rn   )r  ri  rn   rn   ro   r    s     )r  r  offsetsr  r  )r   r  ru   r  rc   r  r   r   )r  r  r  Zshifted_offsetsr  rn   rn   ro   $get_different_alignment_node_ndarray  s    


r  c           	      C   sZ   t r
tjntj}|  \}\}}}}|j|dd}| }t|d |d< ||||f|fS )Nr  r  Znodes)r   rc   r  r  r  r   rg  r  )	r   r  r  rI   r  r  stateZnew_n_classesZ	new_statern   rn   ro   "reduce_tree_with_different_bitness  s    r  c                     sn   t jdd\} }tddd  | |  | |} fdd}t| }|| |}|t|ksjt	d S )Nr   rq   r3   rT  c                     s@   t  } t| }tj |_t|jt< |	  | 
d | S r  )r  r  r  r  r  r  rg  r  
CythonTreer  r  r  r   rn   ro   "pickle_dump_with_different_bitness  s    



zItest_different_bitness_pickle.<locals>.pickle_dump_with_different_bitness)
r&   r   r   rv   r   r  r  r   r   r_   )rN   rO   r   r  r  r  rn   r   ro   test_different_bitness_pickle  s    
r  c                     sn   t jdd\} }tddd  | |  | |} fdd}t| }|| |}|t|ksjt	d S )Nr   rq   r3   rT  c                     s>   t  } t| }tj |_t|jt< |  | 	d | S r  )
r  r  r   r  r  rg  r  r  r  r  r  r   rn   ro   "joblib_dump_with_different_bitness  s    


zPtest_different_bitness_joblib_pickle.<locals>.joblib_dump_with_different_bitness)
r&   r   r   rv   r   r  r  r   r   r_   )rN   rO   r   r  r  r  rn   r   ro   $test_different_bitness_joblib_pickle  s    
r  c               	   C   s   t rttjn
ttj} ttjttjg}|dd |D 7 }tjddg| d}|D ]}t|||  q\tj	t
dd$ tjddgg| d}t||  W 5 Q R X tj	t
dd |tj}t||  W 5 Q R X d S )	Nc                 S   s   g | ]}|  qS rn   )r  )r  dtrn   rn   ro   r    s     z(test_check_n_classes.<locals>.<listcomp>r   r0   r   zWrong dimensions.+n_classesr   zn_classes.+incompatible dtype)r   rc   r   r  r  r   r    r   r   r   r   r#  )expected_dtypeallowed_dtypesr  r  Zwrong_dim_n_classesZwrong_dtype_n_classesrn   rn   ro   test_check_n_classes  s    r  c               
   C   s   t t j} d}t j|| d}| |  g}|D ]}t|||d q.tjtdd t|| dd W 5 Q R X |d d d d d df t 	|fD ].}tjtdd t|| |j
d W 5 Q R X qtjtd	d t|t j| |d W 5 Q R X d S )
N)r2   r0   r>   r   )r  expected_shapezWrong shape.+value arrayr   )r0   r>   r0   zvalue array.+C-contiguouszvalue array.+incompatible dtype)rc   r   r#  rZ   r  r!   r   r   r   r   r   r   r   )r  r  Zvalue_ndarrayr   r  Zproblematic_arrrn   rn   ro   test_check_value_ndarray  s:        (
r  c               	   C   s  t } tjd| d}|t|t|g}|dd |D 7 }|D ]}t|| d q:tjtdd  tjd| d}t|| d W 5 Q R X tjtd	d  |d d d
 }t|| d W 5 Q R X dd |j	j
 D }| }tj|d< t	t| t| d}||}tjtdd t|| d W 5 Q R X | }tj|d< t	t| t| d}||}tjtdd t|| d W 5 Q R X d S )N)r2   r   c                 S   s   g | ]}| |j qS rn   )r   r   r  )r  r  rn   rn   ro   r  	  s    z+test_check_node_ndarray.<locals>.<listcomp>)r  zWrong dimensions.+node arrayr   )r2   r>   znode array.+C-contiguousr>   c                 S   s   i | ]\}\}}||qS rn   rn   r  rn   rn   ro   r  (	  s    
  z+test_check_node_ndarray.<locals>.<dictcomp>re   r  znode array.+incompatible dtyper  )r#   rc   rZ   r  r  r"   r   r   r   r   r  ru   rg  r  r  r   r  r   r#  )r  r  Zvalid_node_ndarraysr  Zproblematic_node_ndarrayZ
dtype_dictr  r  rn   rn   ro   test_check_node_ndarray	  sD    



r  c               
   C   s   t  D ]8} | dd}d}tjt|d |tt W 5 Q R X qt D ]8} | dd}d}tjt|d |tt W 5 Q R X qJd 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'`.)	rt   r  r   ZwarnsFutureWarningrv   rN   rO   r   )r   r   msgrn   rn   ro   !test_max_features_auto_deprecatedD	  s    

r  )F)F)N)r3   r9   )__doc__rg  r  	itertoolsr   rO  r  r  r   Znumpyrc   Znumpy.testingr   Zscipy.sparser   r   r   r  Zjoblib.numpy_pickler   Zsklearn.random_projectionr   Zsklearn.dummyr	   Zsklearn.metricsr
   r   r   Zsklearn.model_selectionr   Zsklearn.utils._testingr   r   r   r   r   r   Zsklearn.utils.estimator_checksr   Zsklearn.utils.validationr   Zsklearn.utilsr   Zsklearn.exceptionsr   Zsklearn.treer   r   r   r   Zsklearnr   Zsklearn.tree._treer   r   r   r  r    r!   r"   r#   Zsklearn.tree._classesr$   r%   r&   r'   r   r^  rt   r   r  r.   __annotations__updateZSPARSE_TREESr   rv  rw  Zy_small_regrN   rO   rx   ry   Z	load_irisrP   r+  r  r   rc  r   rL   permr   Zload_diabetesrQ   Zload_digitsrR   rG   Zmake_multilabel_classificationr  r  r  ZX_sparse_posr(  Zy_randomrf  ZX_sparse_mixrZ   r   r{   rp   r}   r   markZparametrizer  r   r   r   ru   r   r   r   r   r   r   r   r   r   filterwarningsr   r   r   r   r   r   r   r   r   r   r	  r  r  r  r  r$  r*  r-  r1  r3  r5  r6  r;  r<  r?  r@  rC  rD  rG  rK  rS  rX  r[  sortedr  intersectionr\  r]  r_  ra  rm  rn  ro  rp  rq  rr  rs  ry  rz  r{  r|  r~  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rn   rn   rn   ro   <module>   s^  

2(
  

'



	


.B!=

<

H3<+4/

		
+3F






d (!*%!5