o
    Ó\i´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   sz  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ƒrŸ|jdi d|i¤Ž t|dƒr®|jdi ddi¤Ž |r´||	ƒ}	| |	|
¡ | |¡}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¡s"J ‚t 
| |¡d d …df |d d …df k¡s;J ‚d S )Néè  é„  é   é   r   )Ú	n_samplesÚ	n_classesÚ
n_featuresÚn_informativeÚ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.)Úaxis© )r   ÚnpÚcopyÚzerosÚshapeÚhasattrÚ
set_paramsÚfitÚpredict_probaÚlogical_andÚallr   Úsum)r   r   r   Úglobal_random_seedr   r   Ún_samples_trainÚXÚyÚX_trainÚy_trainÚX_testÚ_ÚX_test_0incrÚX_test_0decrÚX_test_1incrÚX_test_1decrr    ÚestÚ
proba_testr%   r%   ú‡/var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/tree/tests/test_monotonic_tree.pyÚ*test_monotonic_constraints_classifications    sX   
úý


ÿ0226r@   ÚTreeRegressorÚ	criterion)Úabsolute_errorÚsquared_errorc                 C   sj  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< |rd| d ||d	}n| d
|||d}t|dƒrw|j|d t|dƒr†|jdi ddi¤Ž |rŒ||ƒ}| ||¡ | 	|¡}	| 	|¡}t 
||	k¡s¥J ‚| 	|¡}t 
||	k¡s³J ‚d S )Nr   r   r   )r   r   r   r   r   r   r   r   )r   r    rB   é   )r   r    rB   r!   r   )r   r"   r%   )r   r&   Úaranger'   r(   r)   r*   r+   r,   Úpredictr/   )rA   r   r   rB   r1   r   r   r2   r3   r4   ÚtrainÚtestr5   r6   r7   ÚX_test_incrÚX_test_decrr    r=   Úy_incrÚy_decrr%   r%   r?   Ú&test_monotonic_constraints_regressionsa   sX   
ü


ýü




rN   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   ƒ d S 1 sAw   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   r3   r4   r    r=   Úmsgr%   r%   r?   Útest_multiclass_raises¤   s   

ÿ"ÿrY   c                 C   s|   g d¢g d¢g}g d¢g d¢g}| d t  ddg¡dd}d}tjt|d	 | ||¡ W d   ƒ d S 1 s7w   Y  d S )
N)r   r   rP   é   r   )é   é   rE   é	   r   ©r   r   r   r   r   r   r   r   rR   z?Monotonicity constraints are not supported with multiple outputrS   ©r&   ÚarrayrU   rV   rW   r,   )r   r3   r4   r=   rX   r%   r%   r?   Útest_multiple_output_raises´   s   ÿ"ÿra   Ú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   ƒ d S 1 s>w   Y  d S )NrO   r   r   rP   r   rQ   )r   r   r   rR   zInput X contains NaNrS   )	r   r&   Únanr(   r)   rU   rV   rW   r,   )rb   r3   r4   r    r=   rX   r%   r%   r?   Útest_missing_values_raisesÁ   s   


ÿ
"ÿrd   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 s;w   Y  d}| d t  ddg¡dd}tjt|d | ||¡ W d   ƒ n1 sfw   Y  | d t  ddg¡dd}tjt|d d | ||¡ W d   ƒ d S 1 s’w   Y  d S )Nr   r   rP   rZ   r   r[   r\   rE   r]   r   r^   z>monotonic_cst has shape 3 but the input data X has 2 features.)r   r   r   r   rR   rS   z:monotonic_cst must be None or an array-like of -1, 0 or 1.éþÿÿÿr   gš™™™™™é?z(.*)0.8]r_   )r   r3   r4   rX   r=   r%   r%   r?   Útest_bad_monotonic_cst_raisesØ   s,   "ÿÿÿÿÿ"ÿrf   c           	      C   s,  | j }t| jƒD ]‹}| j| |kr“| j| |kr“| j| }| j| }|dkr1|| || ks0J ‚n|dkr?|| || ks?J ‚|| ||  d }| j| dkrn| j| }|dkrb|| |ksaJ ‚n|dkrn|| |ksnJ ‚| 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_rightÚ
val_middleÚi_left_rightÚi_right_leftr%   r%   r?   Ú-assert_1d_reg_tree_children_monotonic_boundedò   s0   



€êrv   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 s7w   Y  t 	t
¡ t|jdƒ W d   ƒ d S 1 sSw   Y  d S )Nr   r   r\   r   r   ©r   r   )r&   ÚlinspaceÚreshapeÚsinÚpiÚravelr	   r,   rU   rV   ÚAssertionErrorrv   rm   ©r3   r4   Úregr%   r%   r?   Ú2test_assert_1d_reg_tree_children_monotonic_bounded  s   ÿ"ÿr€   c                 C   sh   t  |||¡ dd¡}|  |¡}|dkr!t  |¡dk ¡ sJ ‚d S |dkr0t  |¡dk ¡ s2J ‚d S d S )Nr   r   r#   )r&   rx   ry   rG   Údiffr/   )Úclfrn   Úmin_xÚmax_xÚn_stepsÚX_gridÚy_pred_gridr%   r%   r?   Úassert_1d_reg_monotonic  s   
ÿrˆ   c                 C   sœ   t  ddd¡ dd¡}| ¡ }| dgd}| ||¡ |jjdks#J ‚|jjd dks-J ‚| dgd}| || ¡ |jjdksBJ ‚|jjd dksLJ ‚d S )	Nre   r   r   r   r   )r    r   r#   )r&   rx   ry   r|   r,   rm   ri   rg   )rA   r3   r4   r‚   r%   r%   r?   Ú&test_1d_opposite_monotonicity_cst_data#  s   r‰   rn   )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    rB   r   ©r    r!   rB   r   rO   )
r&   ÚrandomÚRandomStateÚrandr,   rv   rm   rˆ   ÚminÚmax)rA   rn   r   rB   r1   Úrngr   r   r3   r4   r‚   r%   r%   r?   Ú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s4J ‚t  |¡t  || ¡ksBJ ‚|dk rGq| j| }| j	| }| j| d d | j| d d  d }	|| dkr„|| ||< || ||< || ||< || ||< q|| dkr«| j| | j| ks–J ‚|| ||< |	||< |	||< || ||< q|| dkrÒ| j| | j| ks½J ‚|	||< || ||< || ||< |	||< qt
d|› d|| › ƒ‚d S )Nr   r   r   r   zmonotonic_cst[z]=)r&   Úfullri   Úinfrh   rl   rg   Úfloat32rj   rk   rW   )
rm   r    Úupper_boundÚlower_boundrp   rl   Ú
node_valuerq   rr   Úmiddle_valuer%   r%   r?   Ú-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 s6w   Y  t 	t
¡ t|jdgƒ W d   ƒ n1 sRw   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 sw   Y  td dd | | ¡}t 	t
¡ t|jdgƒ W d   ƒ d S 1 s¸w   Y  d S )
Nr   r   é   r   r   rw   éûÿÿÿr   rP   )r&   rx   r{   ry   rz   r|   r	   r,   rU   rV   r}   rš   rm   r~   r%   r%   r?   Ú2test_assert_nd_reg_tree_children_monotonic_bounded®  s(   ÿÿÿ"ÿr   c                 C   sr   t j |¡}d}d}|dg}| ||¡}	| |¡}
|r#| |||d}n| ||||d}| |	|
¡ t|j|ƒ d S )Nr   r   r   rŠ   r‹   )r&   rŒ   r   rŽ   r,   rš   rm   )rA   rn   r   rB   r1   r‘   r   r   r    r3   r4   r‚   r%   r%   r?   Útest_nd_tree_nodes_valuesÎ  s(   
ýürž   )(Únumpyr&   rU   Úsklearn.datasetsr   r   Úsklearn.ensembler   r   r   r   Úsklearn.treer   r	   r
   r   Úsklearn.utils._testingr   Úsklearn.utils.fixesr   ÚTREE_CLASSIFIER_CLASSESÚTREE_REGRESSOR_CLASSESÚTREE_BASED_CLASSIFIER_CLASSESÚTREE_BASED_REGRESSOR_CLASSESÚmarkÚparametrizer@   rN   rY   ra   rd   rf   rv   r€   rˆ   r‰   r’   rš   r   rž   r%   r%   r%   r?   Ú<module>   sx    þþ=>

üþ
	
	
/F 