a
    ¶Àh²H  ã                   @   s@  d dl Zd dlZd dlmZmZ d dlmZmZm	Z	m
Z
 d dlmZmZmZmZ d dlmZ d dlmZ eegZeegZee	eg Zee
eg Zej de¡ej dd	¡ej d
d	¡ej de¡dd„ ƒƒƒƒZej de¡ej dd	¡ej d
d	¡ej dd¡ej de¡dd„ ƒƒƒƒƒZej de¡dd„ ƒZej de¡dd„ ƒZej deeeeg¡dd„ ƒZej de¡dd„ ƒZdd„ Z dd„ Z!d d!„ Z"ej de¡d"d#„ ƒZ#ej de¡ej d$d%¡ej dd	¡ej dd¡d&d'„ ƒƒƒƒZ$d(d)„ Z%d*d+„ Z&ej de¡ej d$d%¡ej dd	¡ej dd¡d,d-„ ƒƒƒƒZ'dS ).é    N)Úmake_classificationÚmake_regression)ÚExtraTreesClassifierÚExtraTreesRegressorÚRandomForestClassifierÚRandomForestRegressor)ÚDecisionTreeClassifierÚDecisionTreeRegressorÚExtraTreeClassifierÚExtraTreeRegressor)Úassert_allclose)ÚCSC_CONTAINERSÚTreeClassifierÚdepth_first_builder)TFÚsparse_splitterÚcsc_containerc                 C   s†  d}d}t |dddd|d\}}|d |… |d |…  }	}
||d … ||d …  }}t |¡t |¡ }}t |¡t |¡ }}|d d …df  d7  < |d d …df  d8  < |d d …df  d7  < |d d …df  d8  < t |jd ¡}d|d< d	|d< |r| d |d
}n| d ||d}t|dƒrB|jf i d|i¤Ž t|dƒrb|jf i ddi¤Ž |rp||	ƒ}	| |	|
¡ | |¡}t 	|dk|dk¡ 
¡ s¨J dƒ‚t|jdddƒ t 
| |¡d d …df |d d …df k¡sìJ ‚t 
| |¡d d …df |d d …df k¡sJ ‚t 
| |¡d d …df |d d …df k¡sPJ ‚t 
| |¡d d …df |d d …df k¡s‚J ‚d S )Néè  é„  é   é   r   )Ú	n_samplesÚ	n_classesÚ
n_featuresÚn_informativeZn_redundantÚrandom_stateé
   é   éÿÿÿÿ)Ú	max_depthÚmonotonic_cst)r   r   Úmax_leaf_nodesr   Ún_estimatorsç        g      ð?z-Probability should always be in [0, 1] range.)Zaxis)r   ÚnpÚcopyÚzerosÚshapeÚhasattrÚ
set_paramsÚfitZpredict_probaÚlogical_andÚallr   Úsum)r   r   r   Úglobal_random_seedr   r   Ún_samples_trainÚXÚyÚX_trainÚy_trainÚX_testÚ_ZX_test_0incrZX_test_0decrZX_test_1incrZX_test_1decrr   ÚestZ
proba_test© r6   úb/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/tree/tests/test_monotonic_tree.pyÚ*test_monotonic_constraints_classifications    s\    ú
ý
ÿþ222r8   ÚTreeRegressorÚ	criterion)Zabsolute_errorZsquared_errorc                 C   sr  d}d}t |dd|d\}}	t |¡}
t ||¡}||
 }|	|
 }t || ¡}t |¡}t |¡}|d d …df  d7  < |d d …df  d7  < t |jd ¡}d|d< d|d< |rÈ| d ||d	}n| d
|||d}t|dƒrî|j|d t|dƒr|jf i ddi¤Ž |r||ƒ}| ||¡ | 	|¡}	| 	|¡}t 
||	k¡sPJ ‚| 	|¡}t 
||	k¡snJ ‚d S )Nr   r   r   )r   r   r   r   r   r   r   r   )r   r   r:   é   )r   r   r:   r    r   )r   r!   )r   r#   Zaranger$   r%   r&   r'   r(   r)   Úpredictr+   )r9   r   r   r:   r-   r   r   r.   r/   r0   ÚtrainÚtestr1   r2   r3   ZX_test_incrZX_test_decrr   r5   Zy_incrZy_decrr6   r6   r7   Ú&test_monotonic_constraints_regressionsa   sX    ü



ýü



r?   c                 C   sŽ   t dddddd\}}d|d< t |jd ¡}d|d< d|d< | d |dd}d	}tjt|d
 | ||¡ W d   ƒ n1 s€0    Y  d S )Néd   r   é   r   ©r   r   r   r   r   r   r   ©r   r   r   zIMonotonicity constraints are not supported with multiclass classification©Úmatch)r   r#   r%   r&   ÚpytestÚraisesÚ
ValueErrorr)   )r   r/   r0   r   r5   Úmsgr6   r6   r7   Útest_multiclass_raises¤   s    
ÿ
rJ   c                 C   sz   g d¢g d¢g}g d¢g d¢g}| d t  ddg¡dd}d}tjt|d	 | ||¡ W d   ƒ n1 sl0    Y  d S )
N)r   r   rA   é   r   )é   é   r;   é	   r   ©r   r   r   r   r   r   r   r   rC   z?Monotonicity constraints are not supported with multiple outputrD   ©r#   ÚarrayrF   rG   rH   r)   )r   r/   r0   r5   rI   r6   r6   r7   Útest_multiple_output_raises´   s    ÿrR   ÚTreec                 C   sˆ   t dddddd\}}tj|d< t |jd ¡}d|d< | d |dd	}d
}tjt|d | ||¡ W d   ƒ n1 sz0    Y  d S )Nr@   r   r   rA   r   rB   )r   r   r   rC   zInput X contains NaNrD   )	r   r#   Únanr%   r&   rF   rG   rH   r)   )rS   r/   r0   r   r5   rI   r6   r6   r7   Útest_missing_values_raisesÁ   s    

ÿ

rU   c                 C   s2  ddgddgddgddgd	d
gg}g d¢}d}| d t  g d¢¡dd}tjt|d | ||¡ W d   ƒ n1 sv0    Y  d}| d t  ddg¡dd}tjt|d | ||¡ W d   ƒ n1 sÌ0    Y  | d t  ddg¡dd}tjt|d d | ||¡ W d   ƒ n1 s$0    Y  d S )Nr   r   rA   rK   r   rL   rM   r;   rN   r   rO   z>monotonic_cst has shape 3 but the input data X has 2 features.)r   r   r   r   rC   rD   z:monotonic_cst must be None or an array-like of -1, 0 or 1.éþÿÿÿr   gš™™™™™é?z(.*)0.8]rP   )r   r/   r0   rI   r5   r6   r6   r7   Útest_bad_monotonic_cst_raisesØ   s&    "ÿ*ÿ*ÿrW   c           	      C   s2  | j }t| jƒD ]}| j| |kr| j| |kr| j| }| j| }|dkrd|| || ks€J ‚n|dkr€|| || ks€J ‚|| ||  d }| j| dkrÞ| j| }|dkrÆ|| |ksÞJ ‚n|dkrÞ|| |ksÞJ ‚| j| dkr| j| }|dkr||| ks,J ‚q|dkr||| ksJ ‚qd S )Nr   r   r   r   )ÚvalueÚrangeÚ
node_countÚchildren_leftÚchildren_rightÚfeature)	Útree_Úmonotonic_signÚvaluesÚiÚi_leftÚi_rightZ
val_middleZi_left_rightZi_right_leftr6   r6   r7   Ú-assert_1d_reg_tree_children_monotonic_boundedò   s,    




rd   c                  C   s²   t  ddd¡ dd¡} t  dt j |  ¡  ¡}td dd | |¡}t 	t
¡ t|jdƒ W d   ƒ n1 sn0    Y  t 	t
¡ t|jdƒ W d   ƒ n1 s¤0    Y  d S )Nr   r   rM   r   r   ©r   r   )r#   ÚlinspaceÚreshapeÚsinÚpiÚravelr	   r)   rF   rG   ÚAssertionErrorrd   r^   ©r/   r0   Úregr6   r6   r7   Ú2test_assert_1d_reg_tree_children_monotonic_bounded  s    *rn   c                 C   sb   t  |||¡ dd¡}|  |¡}|dkr@t  |¡dk ¡ s^J ‚n|dkr^t  |¡dk ¡ s^J ‚d S )Nr   r   r"   )r#   rf   rg   r<   Údiffr+   )Úclfr_   Zmin_xZmax_xZn_stepsZX_gridZy_pred_gridr6   r6   r7   Úassert_1d_reg_monotonic  s    
rq   c                 C   sœ   t  ddd¡ dd¡}| ¡ }| dgd}| ||¡ |jjdksFJ ‚|jjd dksZJ ‚| dgd}| || ¡ |jjdks„J ‚|jjd dks˜J ‚d S )	NrV   r   r   r   r   )r   r   r"   )r#   rf   rg   rj   r)   r^   rZ   rX   )r9   r/   r0   rp   r6   r6   r7   Ú&test_1d_opposite_monotonicity_cst_data#  s    rr   r_   )r   r   c                 C   sŠ   t j |¡}d}d}| ||¡}| |¡}	|r@| |g||d}
n| |g|||d}
|
 ||	¡ t|
j|ƒ t|
|t  |¡t  	|¡dƒ d S )Nr   r   ©r   r:   r   ©r   r    r:   r   r@   )
r#   ÚrandomÚRandomStateÚrandr)   rd   r^   rq   ÚminÚmax)r9   r_   r   r:   r-   Úrngr   r   r/   r0   rp   r6   r6   r7   Útest_1d_tree_nodes_values5  s(    
ýür{   c           
      C   sÎ  t  | jt j¡}t  | jt j ¡}t| jƒD ]š}| j| }| j| d d }t  |¡t  || ¡ksjJ ‚t  |¡t  || ¡ks†J ‚|dk rq,| j| }| j	| }| j| d d | j| d d  d }	|| dkr|| ||< || ||< || ||< || ||< q,|| dkr^| j| | j| ks4J ‚|| ||< |	||< |	||< || ||< q,|| dkr°| j| | j| ks†J ‚|	||< || ||< || ||< |	||< q,t
d|› d|| › ƒ‚q,d S )Nr   r   r   r   zmonotonic_cst[z]=)r#   ÚfullrZ   ÚinfrY   r]   rX   Zfloat32r[   r\   rH   )
r^   r   Úupper_boundÚlower_boundra   r]   Z
node_valuerb   rc   Zmiddle_valuer6   r6   r7   Ú-assert_nd_reg_tree_children_monotonic_boundedh  s<    


(
r€   c                  C   s€  t  ddt j d¡ dd¡} t  | ¡ ¡ }td dd | |¡}t 	t
¡ t|jdgƒ W d   ƒ n1 sl0    Y  t 	t
¡ t|jdgƒ W d   ƒ n1 s¤0    Y  t|jdgƒ t  ddd¡ dd¡} |  ¡ d	 }td dd | |¡}t 	t
¡ t|jdgƒ W d   ƒ n1 s"0    Y  td dd | | ¡}t 	t
¡ t|jdgƒ W d   ƒ n1 sr0    Y  d S )
Nr   r   é   r   r   re   éûÿÿÿr   rA   )r#   rf   ri   rg   rh   rj   r	   r)   rF   rG   rk   r€   r^   rl   r6   r6   r7   Ú2test_assert_nd_reg_tree_children_monotonic_bounded®  s     ,,.rƒ   c                 C   sr   t j |¡}d}d}|dg}| ||¡}	| |¡}
|rF| |||d}n| ||||d}| |	|
¡ t|j|ƒ d S )Nr   r   r   rs   rt   )r#   ru   rv   rw   r)   r€   r^   )r9   r_   r   r:   r-   rz   r   r   r   r/   r0   rp   r6   r6   r7   Útest_nd_tree_nodes_valuesÎ  s(    
ýür„   )(Únumpyr#   rF   Zsklearn.datasetsr   r   Zsklearn.ensembler   r   r   r   Zsklearn.treer   r	   r
   r   Zsklearn.utils._testingr   Zsklearn.utils.fixesr   ZTREE_CLASSIFIER_CLASSESZTREE_REGRESSOR_CLASSESZTREE_BASED_CLASSIFIER_CLASSESZTREE_BASED_REGRESSOR_CLASSESÚmarkZparametrizer8   r?   rJ   rR   rU   rW   rd   rn   rq   rr   r{   r€   rƒ   r„   r6   r6   r6   r7   Ú<module>   sv   þþ=>

üþ	

	
/F 