a
    ;ZaG                    @   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 g d-ZJe
Kg 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ZRe@S ZTe
jUVdI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dNdOdP\ZcZdeajedQdRZfdSefefdTk< eajgddUdVdRZhedWdOdXddYi ZjeTj\eTjYdZe^j\e^jYdZe`j\e`jYdZeOePdZeLeMdZeLeNdZeceddZefehdZef ehdZejehdZe
kd[ehdZd\ZlelD ]Zmeelem d] elem d^< qd_d` Zndadb Zodcdd ZpejqrdeeEs ejqrdfeCdgdh Ztdidj Zudkdl ZvejqrdmeEw ejqrdfeCdndo Zxe$ejqrdmeEw ejqrdpdqdredsfdtdWedsfdudredsfdvdredNfgdwdx Zydydz Zzd{d| Z{d}d~ Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zdd Zd7ddZejqrdeGdd ZejqrdeJdd Zd8ddZejqrdeGdd ZejqrdeJdd 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d9ddƄZejqrdeJejqrddɡdd˄ ZejqrdeeeJeEejqrdddgddτ Zddф Zddӄ ZejqrdeJejqrdg dԢejqrdeegddׄ Zd:ddل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dd Zdd ZejqrdeGdd Zdd Zdd Zdd ZejqrdfeBejqrdeeel ddh ejqrde.e0gdd  ZejqrdfeCejqrdel ejqrde/e1gdd Zdd Zdd Zdd Zd	d
 Zdd ZejqrdeGdd Zejqrdfg dejqrdeeEs dd ZejqrdedLdd ZƐdd ZejqrdfeCdd Zejqrde.e/gdd ZejqrdeeEs ejqrdddgdd  ZejqrdeeGs d!d" Zːd#d$ Z̐d%d& Z͐d'd( Zΐd)d* Zϐd+d, ZАd-d. Zѐd/d0 ZҐd1d2 ZӐd3d4 ZԐd5d6 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)giniZentropy)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   r0   r   r   r/   皙?r   r.   r/   )r5   r   r         r   r    @r/   r   r   r6   r   r/   )r5   r5   r   g333333r   r   r   r   r   r   r4   r   r   r/   )r5   r5   r   r   r   r   r   r2   r   r   r   r   r   r/   )r5   r   r.   
   r.   r   皙	r   r.   r2   r0   r/   )zG @r         r      r   r   r;            ?r   r9   r/   )r<   r   r=   r>   r   r?   r   r   r;   r@   r   r   r8   r/   )r<      r=   r>   r   r?   r   r   r;   r@   r   r   r8   r/   )r<   rB   r=   r>   r   r?   r   r   r;   r@   rA   r   r5   r   )   rB   r1   r/   rA   r0   r:   r   r/   r3   r2   r   rC   r   )rC   r   r/   r/   r/   r5   r/   r   r   r8   r2   r   r/   r   )rC   r   r/   rC   r2   r5   r:   rC   r   r5   r/   rC   rC   r   )r/   r/   r   rC   rC   r5   r/   rC   r   r3   r/   rC   r2   r   )r2   r/   r   r2   r   r0   r:   r   r/   r3   r2   r   r2   r/   )r<   rB   r=   r>   r   r/   r   r   r;   r@   rA   r   r9   r/   )r<   rB   r=   r>   r   r/   r   r   r;   r@         ?r/   r5   r5   )r<   rB   r=   r>   r   r:   r   r   r;   r@   rA   r   r5   r5   )rC   r   r1   r/   rA   r8   r:   r   r/   r3   r2   r/   r   r5   )rC   r   r/   r/   r/   r8   r/   r   r   r8   r   r   r   r/   )rC   r/   r/   r/   rC   r5   r:   rC   r   r5   r   rC   r/   r/   )r/   r/   r   r   r/   r9   r/   rC   r   r3   r/   rC   r/   r/   )r2   r/   r   r/   r   r0   r/   r   r/   r8   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   )      ?r7   333333?皙?r:   g333333@@g)\(?{Gz?gףp=
@rH   皙?        rF   rC   r?   r   r         @g|?5^?g(\??r   r8   r5   r/   rC   )r5   r5   r5   r/   r/   r/   r2   )r5   r/   r/      r:   )random_state	n_samples
n_features)   r1   sizerK   g?r.   )rR   rR   g      ?)ZdensityrO   Xy)rR   r2   )irisdiabetesdigitstoy	clf_small	reg_small
multilabel
sparse-pos
sparse-neg
sparse-mixzerosrV   X_sparsec                 C   s   |j | j ks"J 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formatr   children_rightchildren_leftr   npZlogical_notfeature	thresholdn_node_samplessumr   impurityr   value)dsmessageZexternalinternal ru   ;lib/python3.9/site-packages/sklearn/tree/tests/test_tree.pyassert_tree_equal   s@    



rw   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   rO   Failed with {0}r/   )max_featuresrO   )
	CLF_TREESitemsfitrV   rW   r   predictTtrue_resultrg   namer   clfru   ru   rv   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   rx   sample_weightry   rA   )r{   r|   r}   rV   rW   rj   oneslenr   r~   r   r   rg   fullr   ru   ru   rv    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,   r/   r   rO   r   rz   rO   )rj   absminrW   arrayr   r}   rV   r   r~   r   )r   r   ay_trainy_testregr   ru   ru   rv   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sJ d||ddd}|	||  |
|| dksjJ d|qjd S )	N)r:   r:   r/   r1   r   rx   rE   ry   rO   rz   )rj   rb   indicesshapevstackravelr   r{   r|   r}   scorerg   )rW   ZgridxZgridyrV   r   r   r   ru   ru   rv   test_xor  s    

r   c                  C   s   t t tD ]\\} }}||dd}|tjtj t|	tjtj}|dksdJ d
| ||||ddd}|tjtj t|	tjtj}|dksJ d
| ||qd S )Nr   r   rM   z0Failed with {0}, criterion = {1} and score = {2}rC   r   rA   )r   r{   r|   CLF_CRITERIONSr}   rX   datatargetr
   r~   rg   )r   r   r   r   r   ru   ru   rv   	test_iris2  s    r   z
name, Treec                 C   s\   ||dd}| tjtj ttj|tj}|tdksXJ d|  d| d| d S )Nr   r   zFailed with z, criterion = z and score = )r}   rY   r   r   r   r~   pytestapprox)r   r   r   r   r   ru   ru   rv   test_diabetes_overfitD  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 J d S )Nr@   r   )r   	max_depthrz   rO   )r}   rY   r   r   r~   )r   r   r   r   ZmetricZmax_lossr   Zlossru   ru   rv   test_diabetes_underfitQ  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 )Nr/   *   )r   rz   rO   r   ry   rd   rB   )r{   r|   r}   rX   r   r   predict_probar   rj   rn   r   r   rg   r   Zargmaxr~   r   exppredict_log_proba)r   r   r   Zprob_predictru   ru   rv   test_probabilityf  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   rO   )rj   arangenewaxis	REG_TREESr|   r}   rV   rW   r   r   r   ru   ru   rv   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} g d}t  D ]8\}}|dd}|| | t|| |d|d	 q8t D ]8\}}|dd}|| | t|| |d|d	 qzd S )
Nr8   r5   r/   rC   )r/   r/   r/   r/   r/   r/   r   rx   ry   rd   )r{   r|   r}   r   r~   rg   r   r   )rV   rW   r   TreeClassifierr   TreeRegressorr   ru   ru   rv   test_pure_set  s    (

r   c               
   C   s   t g dg dg dg dg dg dg dg} t g d}t jd	d
d t D ]J\}}|dd}|| | || |  ||  | ||  |  qXW d    n1 s0    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   )rE   gAw?gtQ?5??rK   g7G?gۺ?gb'?raise)allr   rx   )rj   r   Zerrstater   r|   r}   r   ru   ru   rv   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srJ d		||dks$J 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  r:   r2   r   FrP   rQ   n_informativeZn_redundantZ
n_repeatedZshufflerO   rx   皙?ry   rO   max_leaf_nodes)r&   make_classificationr{   r|   r}   feature_importances_rj   rn   r   rg   r   rX   r   r   r   r   )rV   rW   r   r   r   ZimportancesZn_importantclf2ru   ru   rv   test_importances  s*    



r   c                  C   s>   t  } tt t| d W d    n1 s00    Y  d S )Nr   )r   r   raises
ValueErrorgetattrr   ru   ru   rv   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  r:   r2   r   Fr   r(   r1   )r   r   rO   r)   )r&   r   r   r}   r   r   r   r   tree_rk   ri   rh   rm   )rV   rW   r   r   ru   ru   rv   )test_importances_gini_equal_squared_error  s,    
r   c               	   C   sp  t  D ]8\} }|dd}|tjtj |jtjjd ksJ qt D ]0\} }|dd}|t	jt	j |jdksJJ qJt
 D ]\} }|dd}|t	jt	j |jttt	jjd ksJ |dd}|t	jt	j |jttt	jjd ksJ |dd}|t	jt	j |jdks.J |dd}|t	jt	j |jdksXJ |dd}|t	jt	j |jdksJ |d	d}|t	jt	j |jtd	t	jjd  ksJ |d
d}|t	jt	j |jt	jjd ksJ |d d}|t	jt	j |jt	jjd ks J |dd}tt |tt W d    n1 sX0    Y  |dd}tt |tt W d    n1 s0    Y  |dd}tt |tt W d    n1 s0    Y  |dd}tt |tt W d    n1 s0    Y  |dd}tt |tt W d    q1 s`0    Y  qd S )Nautorz   r/   rC   sqrtlog2r2   rI   rA   rE   r:   r5   rK   rD   Zfoobar)r   r|   r}   rY   r   r   Zmax_features_r   r{   rX   r-   intrj   r   r   r   r   r   rV   rW   )r   r   r   r   r   TreeEstimatorestru   ru   rv   test_max_features  s`    


 
"



 


,
,
,
,
r   c            	   	   C   s  t  D ]\} }| }tt |t W d    n1 s@0    Y  |tt g dg}tt	 || W d    q1 s0    Y  qt
 D ]\} }tt	" |ddtt W d    n1 s0    Y  tt	" |ddtt W d    n1 s0    Y  tt	" |ddtt W d    n1 sV0    Y  tt	" |ddtt W d    n1 s0    Y  tt	" |ddtt W d    n1 s0    Y  tt	" |ddtt W d    n1 s0    Y  tt	" |dd	tt W d    n1 sN0    Y  tt	" |dd	tt W d    n1 s0    Y  tt	" |d
d	tt W d    n1 s0    Y  tt	" |dd	tt W d    n1 s0    Y  tt	" |ddtt W d    n1 sF0    Y  tt	" |ddtt W d    n1 s0    Y  tt	" |ddtt W d    n1 s0    Y  | }td d }tt	 |t| W d    n1 s0    Y  tt}| }||t t|tt | }tt |t W d    n1 st0    Y  |tt tt}tt	* ||d d dd f  W d    n1 s0    Y  ttj}| }|tt|t tt	 |t W d    n1 s,0    Y  tt	 |t W d    n1 sb0    Y  | }|tt tt	 || W d    n1 s0    Y  tt	 || W d    n1 s0    Y  | }tt |t W d    q1 s0    Y  qtdd}tjt	dd& |g dgg d W d    n1 sn0    Y  tjt	dd& |g dgg d W d    n1 s0    Y  d S )N)r8   r5   r/   r5   )min_samples_leaf333333?rK   g      @)min_weight_fraction_leafRQ?)min_samples_splitrJ   g      @)r   r   r         )min_impurity_decreaser/   r,   r   zy is not positive.*Poissonmatchr   r/   rC   )r   r   r   zSome.*y are negative.*Poisson)r1   grC   )r{   r|   r   r   r   r   rV   r}   rW   r   r-   rj   asfortranarrayr   r~   r   r   asarrayr   dotapplyr   )	r   r   r   X2y2ZXftZXtr   ru   ru   rv   
test_error;  s    (
*0222222222222,
*
:****,
6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sJ d||d	|dd}|| | |jj|jjdk }t |dks(J d|q(d
S )z Test min_samples_split parameterdtypeN  r:   r   )r   r   rO   r5   	   ry   r4   N)rj   r   rX   r   r   _treeDTYPEr   r   r-   keysr}   r   rm   ri   r   rg   )rV   rW   r   r   r   r   Znode_samplesru   ru   rv   test_min_samples_split  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sJ d||d|dd}|| | |j| }t |}||dk }t |dks(J d|q(d S )	Nr   r   r1   r   )r   r   rO   r.   ry   r   )rj   r   rX   r   r   r   r   r   r   r-   r   r}   r   r   bincountr   rg   )	rV   rW   r   r   r   r   outZnode_countsZ
leaf_countru   ru   rv   test_min_samples_leaf  s(    

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spJ 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J d| |
jqdS )zPTest if leaves contain at least min_weight_fraction_leaf of the
    training setrc   rV   rW   r   r   rA   r@   )r   r   rO   r   )weightsz,Failed with {0} min_weight_fraction_leaf={1}N)DATASETSastyperj   float32rngrandr   rn   r-   r   linspacer}   r   r   tocsrr   r   r   rg   )r   r&   sparserV   rW   r   total_weightr   r   fracr   r   node_weightsleaf_weightsru   ru   rv   check_min_weight_fraction_leaf  sP    


r  r   c                 C   s   t | d d S NrX   r  r   ru   ru   rv   ,test_min_weight_fraction_leaf_on_dense_input  s    r  c                 C   s   t | dd d S Nr^   Tr  r  ru   ru   rv   -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`J 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J 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.rc   rV   rW   r   r   rA   r2   r1   )r   r   r   rO   zBFailed with {0} min_weight_fraction_leaf={1}, min_samples_leaf={2}r   N)r   r   rj   r   r   r-   r   r   r}   r   r   r   r   r   maxr   rg   r   )r   r&   r   rV   rW   r   r   r   r  r   r   r  r  ru   ru   rv   4check_min_weight_fraction_leaf_with_min_samples_leaf   s^    








r  c                 C   s   t | d d S r  r  r  ru   ru   rv   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  ru   ru   rv   Ctest_min_weight_fraction_leaf_with_min_samples_leaf_on_sparse_inputa  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sJ 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sJ d||
qqq t D ]\}}d|v rtjtj } }ntjtj } }|dd}	|	| | |	| |}t }dD ]}t|	j	|||< qt|	}t|}t||	jks:J || |}||ks^J d||D ],}t|j	||| ksbJ d||qbqd S )Nr   r   rP   rO   r   r   r   rO   rG   )r   r   rO   g-C6?r   gHz>z)Failed, min_impurity_decrease = {0} > {1}z2Failed with {0} expected min_impurity_decrease={1}Z
Classifierrx   )r   rf   Zcapacityz6Failed to generate same score  after pickling with {0}z=Failed to generate same attribute {0} after pickling with {1})r&   r   r   r-   r   r   rg   r}   ranger   rf   ri   r   ro   weighted_n_node_samplesrh   r   r|   rX   r   r   rY   r   dictr   pickledumpsloadstype	__class__)rV   rW   r   r   r   Zest1Zest2Zest3Zest4r   Zexpected_decreaseZ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_decreaser   Zfitted_attributeZ	attributeZserialized_objectZscore2ru   ru   rv   test_min_impurity_decreasef  s    




r  c                  C   s  ddgddgddgddgddgddgddgddgddgddgddgddgg} ddgddgddgddgddgddgddgddgddgddgddgddgg}ddgddgddgddgg}ddgddgddgddgg}t  D ]\}}|dd}|| ||}t|| |jdksJ ||}t|dks2J |d jdksFJ |d jd	ksZJ ||}	t|	dksvJ |	d jdksJ |	d jd	ksJ qt	 D ]@\}}
|
dd}|| ||}t
|| |jdksJ qd S )
Nr8   r5   r/   rC   r   r2   rx   r.   rC   )r.   r.   )r{   r|   r}   r~   r   r   r   r   r   r   r   )rV   rW   r   Zy_truer   r   r   Zy_hatZprobaZ	log_probar   r   ru   ru   rv   test_multioutput  s\    





r  c                  C   s   t  D ]\} }|dd}|tt |jdks4J t|jddg t	tt
td fj}|dd}|t| t|jdksJ t|jdksJ t|jddg t|jddgddgg qd S )Nr   rx   rC   r5   r/   r8   )r{   r|   r}   rV   rW   
n_classes_r   Zclasses_rj   r   r   r   r   )r   r   r   _yru   ru   rv   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   rx   r   )	rX   r   r   r'   r{   r|   r}   r   r~   )Zunbalanced_XZunbalanced_yr   r   r   r   ru   ru   rv   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   rx   r   C)orderr   Fr2   )r   r-   r|   rj   float64r   r   rX   r   r   r   r}   r~   Zascontiguousarrayr   r   )r   r   r   r   rV   rW   ru   ru   rv   test_memory_layout&  s2    
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J d||d	k< tddd}|j| ||d |j	j
d dksDJ 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   rK   2   r   rx   r      r/   rC   r   r   g     b@rA   g     H@)Z	minlength)rj   r   r   r   r   r}   r   r~   rb   r   rl   rX   r   r   r   randintr   r   ri   r   r   r   r   )rV   rW   r   r   
duplicatesr   rt   ru   ru   rv   test_sample_weightQ  sD    






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 d    n1 sv0    Y  t d}d}tjt|d	  |j
| ||d W d    n1 s0    Y  d S )
Nr*  rK   r+  r   rx   r/   r   z3Singleton.* cannot be considered a valid collectionr   )rj   r   r   r   r   randomr   r   r   r   r}   r   	TypeError)rV   rW   r   r   Zexpected_errru   ru   rv   test_sample_weight_invalid  s    

.
r2  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   rx   r#  class_weightrO   g       @rE   r   r/   r*  g      Y@rC   N)r{   r}   rX   r   r   r   r   rj   r   r   r   r   )	r   r   clf1r   Z
iris_multiZclf3Zclf4r   r4  ru   ru   rv   check_class_weights  s@    





r6  c                 C   s   t |  d S N)r6  r  ru   ru   rv   test_class_weights  s    r8  c                 C   s,  t |  }ttttd fj}|ddd}tt |	t
t W d    n1 sZ0    Y  tt |	t
| W d    n1 s0    Y  |ddd}tt |	t
| W d    n1 s0    Y  |dddgdd}tt |	t
| W d    n1 s0    Y  d S )	NrC   z	the larchr   r3  r/   rA   rE   r5   r/   )r{   rj   r   rW   r   r   r   r   r   r}   rV   )r   r   r   r   ru   ru   rv   check_class_weight_errors  s    ***r:  c                 C   s   t |  d S r7  )r:  r  ru   ru   rv   test_class_weight_errors  s    r;  c               	   C   s   t jddd\} }d}t D ]\}}|d |d d| |}| |d ksRJ |d dd}tt || | W d    n1 s0    Y  |d dd}tt || | W d    n1 s0    Y  |d dd}tt || | W d    q1 s0    Y  qd S )Nr*  r/   r  r.   r   r   r   r   )	r&   make_hastie_10_2r-   r|   r}   Zget_n_leavesr   r   r   rV   rW   kr   r   r   ru   ru   rv   test_max_leaf_nodes  s    **r@  c                  C   sP   t jddd\} }d}t D ],\}}|d|d| |}| dksJ qd S )Nr*  r/   r  r.   r<  )r&   r=  r-   r|   r}   Z	get_depthr>  ru   ru   rv   test_max_leaf_nodes_max_depth  s
    rA  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 J dqd S )N)	n_classesrp   ri   rh   rl   ro   rk   rm   r   r/   r9   r2   z Array points to arbitrary memory)r   r   r}   r   flat)attrrp   ru   ru   rv   test_arrays_persist  s    
"rE  c                  C   s\   t d} td}| ddd}t D ].\}}|dd}||| |jjdks(J q(d S )Nr   )r:   rR   rC   )r:   rx   )	r   rj   rb   r-  r-   r|   r}   r   r   )rO   rV   rW   r   r   r   ru   ru   rv   test_only_constant_features  s    

rF  c                  C   s~   t t g dgt df} g d}t D ]H\}}d|vr0|ddd}|| | |jjdkshJ |jj	d	ks0J q0d S )
N)r   r   r   r   r   r/   rC   r.   r1   r@      )r.   r?   )r   r   r   r/   r/   rC   rC   rC   r2   r2   r2   Z	ExtraTreer   r/   r   rC   r1   )
rj   Z	transposer   rb   r-   r|   r}   r   r   rf   rV   rW   r   r   r   ru   ru   rv   ,test_behaviour_constant_feature_after_splits   s    rI  c                  C   s   t t dgdgdgdggt dg} t g d}t D ]H\}}|ddd}|| | |jjdkspJ t	|
| t dd	 q@t D ]H\}}|ddd}|| | |jjdksJ t	|| t d
d	 qd S )NrE   rK   )r.   r   )rK   rE   rK   rE   r   r/   r   r  rA   )r.   )rj   Zhstackr   rb   r{   r|   r}   r   r   r   r   r   r   r~   rH  ru   ru   rv   (test_with_only_one_non_constant_features.  s    *rJ  c               
   C   sp   t ddt jdd} t }z|| g d W n4 tyj } zdt|v sVJ W Y d }~n
d }~0 0 d S )Ng\)c=Hr.   r5   r/   )r   r/   r   r/   r   )	rj   repeatr   r(  reshaper   r}   r   str)rV   r   eru   ru   rv   test_big_input?  s    rO  c                  C   s@   ddl m}  tt |   W d    n1 s20    Y  d S )Nr   _realloc_test)Zsklearn.tree._utilsrQ  r   r   MemoryErrorrP  ru   ru   rv   test_reallocI  s    rS  c                  C   s   dt d } tjdd}tjddd}d| d  }td|d}tt	 |
|| W d    n1 sp0    Y  d| d  d }td|d}tt |
|| W d    n1 s0    Y  d S )	NrB   Pr:   rC   r   r/   Zbest)Zsplitterr   )structZcalcsizerj   r0  randnr-  r   r   r   	Exceptionr}   rR  )Zn_bitsrV   rW   Zhuger   ru   ru   rv   test_huge_allocationsP  s    *rX  c                 C   s<  t |  }t| d }t| d }t| d }|dv rf|jd d }|d | }|d | }|d | }tttfD ]}||}|d|d||}	|d|d||}
t|	j|
jd	|  |	
|}| tv r|	|}|	|}tttfD ]J}||tjd	}t|

|| | tv rt|
|| t|
|| qqpd S )
NrV   rc   rW   )rZ   rY   r   r1   rO   r   5{0} with dense and sparse format gave different treesr   )r-   r   r   r   r   r   r}   rw   r   rg   r~   r{   r   r   rj   r   r   )r   datasetr   r   rV   rc   rW   rP   Zsparse_formatrq   rr   Zy_predZy_probaZy_log_probaZsparse_matrixX_sparse_testru   ru   rv   check_sparse_inpute  s<    



r]  	tree_typer[  )r\   r[   rZ   r^   r_   r`   ra   rb   c                 C   s    |dkrdnd }t | || d S )NrZ   r2   r]  )r^  r[  r   ru   ru   rv   test_sparse_input  s    r`  rY   r]   c                 C   s   t | |d d S )NrC   r_  )r^  r[  ru   ru   rv   test_sparse_input_reg_trees  s    ra  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 )NrV   rc   rW   r   r/   rC   )rO   rz   r   rZ  r:   )rO   rz   r   )rO   r   r2   r   )	r-   r   r}   rw   r   rg   r   r~   r   )r   r[  r   rV   rc   rW   rq   rr   ru   ru   rv   check_sparse_parameters  sP    rb  c           
      C   s   t |  }t| d }t| d }t| d }| tv r8tnt}|D ]\}|dd|d||}|dd|d||}	t|j|	jd|  t	|	
||
| q@d S )NrV   rc   rW   r   r2   )rO   r   r   rZ  )r-   r   r   REG_CRITERIONSr   r}   rw   r   rg   r   r~   )
r   r[  r   rV   rc   rW   Z
CRITERIONSr   rq   rr   ru   ru   rv   check_sparse_criterion  s     rd  )r_   r`   ra   rb   checkc                 C   s   || | d S r7  ru   )r^  r[  re  ru   ru   rv   test_sparse  s    rf  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&J |jdk dks>J |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v rt|||| qd S )Nr   rA   r2   rS   r/   r   r   rK   rY  rZ  )r-   rj   r   r   r  Zbinomialpermutationappendconcatenater   r   r   toarrayr   r-  copyr   rn   r}   rw   r   rg   r   r   r   decision_pathr~   r{   r   )r   r   rQ   r   rP   ZsamplesrO   r   r   offsetZindptriZn_nonzero_iZ	indices_iZdata_irc   rV   r\  X_testrW   rq   rr   ZXsZX1r   ru   ru   rv   check_explicit_sparse_zeros  sd    




rq  c                 C   s   t |  d S r7  )rq  )r^  ru   ru   rv   test_explicit_sparse_zerosA  s    rr  c                 C   s   t |  }tjd d df  }tjd d df d}tj}tt" |dd	|| W d    n1 sn0    Y  |dd}|	|| tt |
|g W d    n1 s0    Y  d S )Nr   r9  rx   )r-   rX   r   r   rL  r   r   r   r   r}   r~   )r   r   rV   ZX_2drW   r   ru   ru   rv   check_raise_error_on_1d_inputF  s    0
rs  c                 C   s2   t   t|  W d    n1 s$0    Y  d S r7  )r   rs  r  ru   ru   rv   test_1d_inputW  s    rt  c                 C   sZ   | dd}|j |||d |jjdks*J | ddd}|j |||d |jjdksVJ d S )Nr   rx   r   r/   g?)rO   r   )r}   r   r   )r   rV   rW   r   r   ru   ru   rv   "_check_min_weight_leaf_split_level]  s    
ru  c                 C   sZ   t |  }tdgdgdgdgdgg}g d}g d}t|||| t|t||| d S )Nr   r/   )r   r   r   r   r/   )r4   r4   r4   r4   r4   )r-   rj   r   ru  r   )r   r   rV   rW   r   ru   ru   rv   !check_min_weight_leaf_split_levelg  s    rv  c                 C   s   t |  d S r7  )rv  r  ru   ru   rv    test_min_weight_leaf_split_levelr  s    rw  c                 C   sD   t jtjjdd}t|   }|t t t|	t |j
	| d S NFrl  )X_smallr   r   r   r   r-   r}   y_smallr   r   r   r   Z	X_small32r   ru   ru   rv   check_public_applyw  s    
r}  c                 C   sH   t tjtjjdd}t|   }|tt t	|
t|j
| d S rx  )r   rz  r   r   r   r   r-   r}   r{  r   r   r   r|  ru   ru   rv   check_public_apply_sparse  s    
r~  c                 C   s   t |  d S r7  )r}  r  ru   ru   rv   test_public_apply_all_trees  s    r  c                 C   s   t |  d S r7  )r~  r  ru   ru   rv   test_public_apply_sparse_trees  s    r  c                  C   sP   t j} t j}tddd| |}|| d d  }t|g dg dg d S )Nr   r/   rY  rC   )r/   r/   r   )r/   r   r/   )rX   r   r   r   r}   rm  rk  r   )rV   rW   r   node_indicatorru   ru   rv   test_decision_path_hardcoded  s
    r  c                    s   t j}t j}|jd }t|  }|ddd}||| ||}|   j||jj	fks^J |
|} fddt|D }t|tj|d |jjtk}	tt |	tj|d  jdd }
|jj|
ksJ d S )	Nr   rC   rY  c                    s   g | ]\}} ||f qS ru   ru   ).0ro  jr  ru   rv   
<listcomp>      z'check_decision_path.<locals>.<listcomp>rg  r/   Zaxis)rX   r   r   r   r-   r}   rm  rk  r   rf   r   	enumerater   rj   r   ri   r   r   rn   r  r   )r   rV   rW   rP   r   r   Znode_indicator_csrZleavesZleave_indicatorZ
all_leavesr   ru   r  rv   check_decision_path  s$    


r  c                 C   s   t |  d S r7  )r  r  ru   ru   rv   test_decision_path  s    r  c                 C   sV   t tt }}t|  }tt" |dd|| W d    n1 sH0    Y  d S )Nr   rx   )X_multilabelr   y_multilabelr-   r   r   r1  r}   )r   rV   rW   r   ru   ru   rv   check_no_sparse_y_support  s    r  c                 C   s   t |  d S r7  )r  r  ru   ru   rv   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g dg d	d
 t| jjg d t| jjjg d | jdgdgdgdgdggg dt	dd
 t| jjg d t| jjjg d | jdgdgdgdgdggg d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*   rC   )rO   r   r   r2   r1   rB   )r@   rG  r2   r.   r2   )r   333333?r   rE   r  )rV   rW   r   )g,d?gܶm۶m?g?)      @g      @r  )gffffff?rD   gUUUUUU?)r.   rL   r  rU   N)
r   r}   r   r   ro   r   rp   rC  rj   r   )Zdt_maeru   ru   rv   test_mae  s     J.&r  c                  C   s   d} t jdt jd}d}dd }tjtj|fD ]}t D ]N\}}|| |}|| }|\}	\}
}}||	ksrJ | |
ks~J t|| q:t	 D ]P\}}|| |}|| }|\}	\}
}}||	ksJ | |
ksJ ||ksJ qq.d S )Nr2   r   r*  c                 S   s   t t | S r7  )r  r  r  )objru   ru   rv   _pickle_copy3  s    z)test_criterion_copy.<locals>._pickle_copy)
rj   r   Zintprl  deepcopyr$   r|   
__reduce__r   r%   )	n_outputsrB  rP   r  Z	copy_func_typenameZcriteriaresultZ	typename_Z
n_outputs_r  Z
n_samples_ru   ru   rv   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sJ t|dks\J q\d S )Nr   r*  r?   g*Gr   r5   rx   )rj   r0  RandomStaterV  Z
nan_to_numr   r   r   r}   r   setwherer   ri   r   
differenceZisfiniterl   r   )
r   ZX_fullrc   rW   rV   r   Zterminal_regionsZ	left_leafZ
empty_leafZinfinite_thresholdru   ru   rv   "test_empty_leaf_infinite_thresholdH  s    

r  tree_clsc           	      C   s   t | }|d |d  }}|ddd}|||}|j}|j}tt|dksVJ tt|dksnJ t|||| d S NrV   rW   rR   r   r  r   Zcost_complexity_pruning_pathZ
ccp_alphas
impuritiesrj   r   Zdiffassert_pruning_creates_subtree	r   r[  r  rV   rW   r   infopruning_pathr  ru   ru   rv   'test_prune_tree_classifier_are_subtreesY  s    r  c           	      C   s   t | }|d |d  }}|ddd}|||}|j}|j}tt|dksVJ tt|dksnJ t|||| d S r  r  r  ru   ru   rv   'test_prune_tree_regression_are_subtreesl  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   rx   r/   r:   )rO   	ccp_alpha)r   r}   assert_is_subtreer   )r5  r   ru   ru   rv   test_prune_single_node_tree~  s
    
r  c           	      C   s\   g }|D ]$}| d|dd ||}|| qt||dd  D ]\}}t|j|j q@d S )NrR   r   )r   r  rO   r/   )r}   ri  zipr  r   )	Zestimator_clsrV   rW   r  Z
estimatorsr  r   Zprev_estZnext_estru   ru   rv   r    s    r  c           	      C   s  | j |j ksJ | j|jks J | 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   )rf   r   ri   rh   popr   rp   r   ro   rm   r  r   rl   ri  )	r   ZsubtreeZtree_c_leftZtree_c_rightZsubtree_c_leftZsubtree_c_rightstackZtree_node_idxZsubtree_node_idxru   ru   rv   r    s>    r  c                  C   s   t  } d}tjt|d( | jdd | tt W d    n1 sF0    Y  | jdd | tt tjt|d$ | jdd |   W d    n1 s0    Y  d S )Nz,ccp_alpha must be greater than or equal to 0r   r   )r  rK   )	r   r   r   r   Z
set_paramsr}   rV   rW   Z_prune_tree)r   msgru   ru   rv   )test_prune_tree_raises_negative_ccp_alpha  s    *r  c                 C   sz   t tjtjjdd}t tjttjjd}t	|   }|
|| t|||t t|| |t  d S )NFry  r   )r   rz  r   r   r   r   rj   r   r{  r-   r}   r   r~   rm  Ztodense)r   Z
X_readonlyZ
y_readonlyr   ru   ru   rv   check_apply_path_readonly  s    
r  c                 C   s   t |  d S r7  )r  r  ru   ru   rv   "test_apply_path_readonly_all_trees  s    r  )r)   r+   r,   c                 C   sL   t jt j }}|| d}||| t||tt|ksHJ d S )Nr   )	rY   r   r   r}   rj   rn   r~   r   r   )r   r   rV   rW   r   ru   ru   rv   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}g d}t d| d}||| t||dkslJ t d| d}||| t||dksJ d	}tj|d d d
d||d d | d\}}d|d|k |dk @ < t|}t d| d}||| t||dksJ d S )Nr   r/   rC   r2   )r   r   r   r   r/   rC   r2   r.   r)   r   r,   r:   r   r   )Zeffective_rankZtail_strengthrP   rQ   r   rO   r5   )	r   r}   rj   Zaminr~   r   r&   Zmake_regressionr   )r  rV   rW   r   rQ   ru   ru   rv   test_poisson_zero_nodes  s,    4


	
r  c                  C   s>  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 ]h\}}}t|||}t|t ||dd }t|||}|dkr,||k s,J ||k sJ qd S )Nr   )  r  r:   )rP   rQ   rO   r8   rC   )ZlowZhighrT   r   r  )Zlam)Z	test_sizerO   r,   r:   )r   r   rO   r)   mean)ZstrategyZtraintestgV瞯<)rj   r0  r  r&   Zmake_low_rank_matrixuniformr  r,   r   r   r   r}   r	   r   r~   Zclip)r   Zn_trainZn_testrQ   rV   ZcoefrW   ZX_trainrp  r   r   Ztree_poiZtree_mseZdummyvalZ
metric_poiZ
metric_mseZmetric_dummyru   ru   rv   test_poisson_vs_mse  s4    


r  c                 C   s@  t | d}tf i |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 i |j|||d}tf i |j|	|
dd}|jj|jjks&J t|||| dS )z4Test that the impact of sample_weight is consistent.r   rO   r   )rb   r   ZDecisionTreeRegressor_rb   )kindr   )r:   r1   r/   r  r   NrC   r   )r  r   r   rj   r0  r  r   r  r   rj  r   r   r}   r   rf   r   r~   )r   Ztree_paramsr   r  r   rP   rQ   rV   rW   r   r   Zsample_weight_1Ztree1Ztree2ru   ru   rv   7test_decision_tree_regressor_sample_weight_consistentcy=  s*    

r  r   c                 C   sV   t jtdd}|  }tjtdd  |jtt|d W d    n1 sH0    Y  d S )Nr   r  z*The parameter 'X_idx_sorted' is deprecatedr   )X_idx_sorted)rj   ZargsortrV   r   warnsFutureWarningr}   rW   )r   r  r   ru   ru   rv   test_X_idx_sorted_deprecatedd  s    r  zold_criterion, new_criterion)Zmser)   )Zmaer*   c                 C   sx   | |d}t jtd| dd |tt W d    n1 sB0    Y  | |dtt}t|t|t d S )Nr   zCriterion 'z' was deprecatedr   )r   r  r  r}   rV   rW   r   r~   )r   Zold_criterionZnew_criterionr   Ztree_newru   ru   rv   test_criterion_deprecateds  s    	
*r  c                 C   sF   d}t jt|d  |  ttj W d    n1 s80    Y  d S )NzjThe attribute `n_features_` is deprecated in 1.0 and will be removed in 1.2. Use `n_features_in_` instead.r   )r   r  r  r}   rV   rW   Zn_features_)r   Zdepr_msgru   ru   rv   test_n_features_deprecated  s    r  c                     sv   t jdd\} }tddd  | |  | |}dd  fdd}t| }|| |}t||srJ d S )	Nr   rx   r2   rY  c                 S   s   |     S r7  )byteswapnewbyteorderr  )arrru   ru   rv   reduce_ndarray  s    z8test_different_endianness_pickle.<locals>.reduce_ndarrayc                     sB   t  } t| }tj |_|jtj< |	  | 
d | S Nr   )ioBytesIOr  Picklercopyregdispatch_tablerl  rj   ndarraydumpseekfpr   r  ru   rv    get_pickle_non_native_endianness  s    


zJtest_different_endianness_pickle.<locals>.get_pickle_non_native_endianness)	r&   r   r   r}   r   r  loadrj   isclose)rV   rW   r   r  new_clf	new_scoreru   r  rv    test_different_endianness_pickle  s    
r  c                     s~   t jdd\} }tddd| | | |}G dd dt  fdd}t| }|| |}t	||szJ d S )	Nr   rx   r2   rY  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 r7  )
isinstancerj   r  r  r  supersave)selfr  r  ru   rv   r    s    zUtest_different_endianness_joblib_pickle.<locals>.NonNativeEndiannessNumpyPickler.save)__name__
__module____qualname__r  __classcell__ru   ru   r  rv   NonNativeEndiannessNumpyPickler  s   r  c                     s(   t  }  | }| | d | S r  )r  r  r  r  r  r  r   ru   rv   'get_joblib_pickle_non_native_endianness  s
    

zXtest_different_endianness_joblib_pickle.<locals>.get_joblib_pickle_non_native_endianness)
r&   r   r   r}   r   r   joblibr  rj   r  )rV   rW   r   r  r  r  ru   r  rv   'test_different_endianness_joblib_pickle  s    r  c                 C   sn   t r
tjntj}g d}dd | jj D }|D ]}|||< q2tt| t|	 d}| j
|ddS )N)
left_childZright_childrk   rm   c                 S   s   i | ]\}\}}||qS ru   ru   r  r   r   r  ru   ru   rv   
<dictcomp>  s   z6get_different_bitness_node_ndarray.<locals>.<dictcomp>namesformats	same_kindZcasting)r   rj   int64int32r   fieldsr|   listr   valuesr   )node_ndarrayZnew_dtype_for_indexing_fieldsZindexing_field_namesnew_dtype_dictr   	new_dtyperu   ru   rv   "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 ru   ru   r  ru   ru   rv   r    s   z8get_different_alignment_node_ndarray.<locals>.<dictcomp>c                 S   s   g | ]\}}|qS ru   ru   )r  r   rn  ru   ru   rv   r    r  z8get_different_alignment_node_ndarray.<locals>.<listcomp>c                 S   s   g | ]}d | qS )rB   ru   )r  rn  ru   ru   rv   r    r  )r  r  offsetsr  r  )r   r  r|   r  rj   r  r   r   )r  r  r  Zshifted_offsetsr  ru   ru   rv   $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   rj   r  r  r  r   rl  r  )	r   r  r  rQ   rB  r  stateZnew_n_classesZ	new_stateru   ru   rv   "reduce_tree_with_different_bitness  s    r  c                     sn   t jdd\} }tddd  | |  | |} fdd}t| }|| |}|t|ksjJ d S )Nr   rx   r2   rY  c                     s@   t  } t| }tj |_t|jt< |	  | 
d | S r  )r  r  r  r  r  r  rl  r  
CythonTreer  r  r  r   ru   rv   "pickle_dump_with_different_bitness  s    



zItest_different_bitness_pickle.<locals>.pickle_dump_with_different_bitness)	r&   r   r   r}   r   r  r  r   r   )rV   rW   r   r  r  r  ru   r   rv   test_different_bitness_pickle  s    
r  c                     sn   t jdd\} }tddd  | |  | |} fdd}t| }|| |}|t|ksjJ d S )Nr   rx   r2   rY  c                     s>   t  } t| }tj |_t|jt< |  | 	d | S r  )
r  r  r   r  r  rl  r  r   r  r  r  r   ru   rv   "joblib_dump_with_different_bitness	  s    


zPtest_different_bitness_joblib_pickle.<locals>.joblib_dump_with_different_bitness)	r&   r   r   r}   r   r  r  r   r   )rV   rW   r   r  r  r  ru   r   rv   $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 d    n1 s0    Y  tj	t
dd& |tj}t||  W d    n1 s0    Y  d S )	Nc                 S   s   g | ]}|  qS ru   )r  )r  dtru   ru   rv   r  )	  r  z(test_check_n_classes.<locals>.<listcomp>r   r/   r   zWrong dimensions.+n_classesr   zn_classes.+incompatible dtype)r   rj   r   r  r  r   r    r   r   r   r   r(  )expected_dtypeallowed_dtypesrB  r  Zwrong_dim_n_classesZwrong_dtype_n_classesru   ru   rv   test_check_n_classes&	  s    (r  c               	   C   s0  t t j} d}t j|| d}| |  g}|D ]}t|||d q.tjtdd t|| dd W d    n1 st0    Y  |d d d d d df t 	|fD ]B}tjtdd  t|| |j
d W d    q1 s0    Y  qtjtd	d& t|t j| |d W d    n1 s"0    Y  d S )
N)r1   r/   rC   r   )r  expected_shapezWrong shape.+value arrayr   )r/   rC   r/   zvalue array.+C-contiguouszvalue array.+incompatible dtype)rj   r   r(  rb   r  r!   r   r   r   r   r   r   r   )r  r	  Zvalue_ndarrayr  r  Zproblematic_arrru   ru   rv   test_check_value_ndarray8	  s2    $(&
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 d    n1 s0    Y  tjtd	d* |d d d
 }t|| d W d    n1 s0    Y  dd |j	j
 D }| }tj|d< t	t| t| d}||}tjtdd t|| d W d    n1 s`0    Y  | }tj|d< t	t| t| d}||}tjtdd t|| d W d    n1 s0    Y  d S )N)r1   r   c                 S   s   g | ]}| |j qS ru   )r   r   r  )r  r  ru   ru   rv   r  c	  s   z+test_check_node_ndarray.<locals>.<listcomp>)r  zWrong dimensions.+node arrayr   )r1   rC   znode array.+C-contiguousrC   c                 S   s   i | ]\}\}}||qS ru   ru   r  ru   ru   rv   r  r	  r  z+test_check_node_ndarray.<locals>.<dictcomp>rl   r  znode array.+incompatible dtyper  )r#   rj   rb   r  r  r"   r   r   r   r   r  r|   rl  r  r  r   r  r   r(  )r  r  Zvalid_node_ndarraysr  Zproblematic_node_ndarrayZ
dtype_dictr  r  ru   ru   rv   test_check_node_ndarrayY	  sD    **

,

r  )F)F)N)r2   r:   )__doc__rl  r  	itertoolsr   rU  r  r  r   Znumpyrj   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   rc  r{   r   r  r-   __annotations__updateZSPARSE_TREESr   rz  r{  Zy_small_regrV   rW   r   r   Z	load_irisrX   r0  r  r   rh  r   rT   Zpermr   Zload_diabetesrY   Zload_digitsrZ   rO   Zmake_multilabel_classificationr  r  r  ZX_sparse_posr-  Zy_randomrk  ZX_sparse_mixrb   r   r   rw   r   r   ZmarkZparametrizer  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/  r2  r6  r8  r:  r;  r@  rA  rE  rF  rI  rJ  rO  rS  rX  r]  r`  sortedr  intersectionra  rb  rd  rf  rq  rr  rs  rt  ru  rv  rw  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  r  r  r  r
  r  ru   ru   ru   rv   <module>   s2  

(

'



	
C^!=

<

d<+4/

	

+3F








d(!,&
!