
    0PhH                        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   Zee
egz   Zej                            de          ej                            dd	          ej                            d
d	          ej                            de          d                                                 Zej                            de          ej                            dd	          ej                            d
d	          ej                            dd          ej                            de          d                                                             Zej                            de          d             Zej                            de          d             Zej                            deeeeg          d             Zej                            de          d             Zd Z d Z!d Z"ej                            de          d             Z#ej                            de          ej                            dd          ej                            dd	          ej                            dd          d                                                 Z$d Z%d Z&ej                            de          ej                            dd          ej                            dd	          ej                            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                 
   d}d}t          |dddd|          \  }}|d |         |d |         }
}	||d          ||d          }}t          j        |          t          j        |          }}t          j        |          t          j        |          }}|d d dfxx         dz  cc<   |d d dfxx         dz  cc<   |d d dfxx         dz  cc<   |d d dfxx         dz  cc<   t          j        |j        d                   }d|d<   d	|d<   |r | d |
          }n | d ||          }t          |d          r |j        di d|i t          |d          r |j        di ddi |r ||	          }	|                    |	|
           |                    |          }t          j	        |dk    |dk              
                                s
J d            t          |                    d          d           t          j
        |                    |          d d df         |d d df         k              sJ t          j
        |                    |          d d df         |d d df         k              sJ t          j
        |                    |          d d df         |d d df         k              sJ t          j
        |                    |          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_tests                       f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/tree/tests/test_monotonic_tree.py*test_monotonic_constraints_classificationsrB       s    IO'  DAq )/)*A.>.>,?WG/""#Q'7'7%8AF!#"'&//,L!#"'&//,LA"A"A"A"HQWQZ((MM!M! 
nt=IIIn'*
 
 

 sN## ?>>.*<=>>>sN## .--.!,--- )-((GGGW""6**J>c:, 	cee= =<= = = JNNN**C000 6###L11!!!Q$7:aaad;KKLLLLL6###L11!!!Q$7:aaad;KKLLLLL 6###L11!!!Q$7:aaad;KKLLLLL6###L11!!!Q$7:aaad;KKLLLLLLL    TreeRegressor	criterion)absolute_errorsquared_errorc                    d}d}t          |dd|          \  }}	t          j        |          }
t          j        ||          }||
         }|	|
         }t          j        ||                   }t          j        |          }t          j        |          }|d d dfxx         dz  cc<   |d d dfxx         dz  cc<   t          j        |j        d                   }d|d<   d|d<   |r | d ||	          }n | d
|||          }t          |d          r|                    |           t          |d          r |j        di ddi |r ||          }|                    ||           |	                    |          }	|	                    |          }t          j
        ||	k              sJ |	                    |          }t          j
        ||	k              sJ d S )Nr   r   r   )r   r   r   r   r   r   r   r    )r!   r"   rE      )r!   r"   rE   r#   r   )r   r$   r'   )r   r(   aranger)   r*   r+   r,   r-   r.   predictr1   )rD   r   r   rE   r3   r   r   r4   r5   r6   traintestr7   r8   r9   X_test_incrX_test_decrr"   r?   y_incry_decrs                        rA   &test_monotonic_constraints_regressionsrR   a   sC    IO'	  DAq Io&&E9_i00DhGhGWQtWF'&//K'&//K11HQWQZ((MM!M! 
m'
 
 
 m'*	
 
 
 sN## 8$6777sN## .--.!,--- )-((GGGWFA[[%%F6&A+ [[%%F6&A+rC   c                 D   t          ddddd          \  }}d|d<   t          j        |j        d                   }d|d<   d|d<    | d |d          }d	}t	          j        t          |
          5  |                    ||           d d d            d S # 1 swxY w Y   d S )Nd   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   r5   r6   r"   r?   msgs         rA   test_multiclass_raisesr^      s    !qPQ  DAq AaDHQWQZ((MM!M!
.4}ST
U
U
UC
UC	z	-	-	-  1                 s   1BBBc                    g dg dg}g dg dg} | d t          j        ddg          d          }d}t          j        t          |	          5  |                    ||           d d d            d S # 1 swxY w Y   d S )
N)r   r   rU      r   )      rI   	   r   r   r   r   r   r   r    r   r   rW   z?Monotonicity constraints are not supported with multiple outputrX   r(   arrayrZ   r[   r\   r.   )r   r5   r6   r?   r]   s        rA   test_multiple_output_raisesrg      s    	***+A	///*A
.bhAw&7&7a  C LC	z	-	-	-  1                 s   A44A8;A8Treec                 N   t          ddddd          \  }}t          j        |d<   t          j        |j        d                   }d|d<    | d |d	          }d
}t          j        t          |          5  |                    ||           d d d            d S # 1 swxY w Y   d S )NrT   r   r   rU   r   rV   )r   r   r   rW   zInput X contains NaNrX   )	r   r(   nanr*   r+   rZ   r[   r\   r.   )rh   r5   r6   r"   r?   r]   s         rA   test_missing_values_raisesrk      s     !qPQ  DAq fAdGHQWQZ((MM!
$]
K
K
KC
 C	z	-	-	-  1                 s   6BB!Bc                    ddgddgddgddgd	d
gg}g d}d} | d t          j        g d          d          }t          j        t          |          5  |                    ||           d d d            n# 1 swxY w Y   d} | d t          j        ddg          d          }t          j        t          |          5  |                    ||           d d d            n# 1 swxY w Y    | d t          j        ddg          d          }t          j        t          |dz             5  |                    ||           d d d            d S # 1 swxY w Y   d S )Nr   r   rU   r`   r   ra   rb   rI   rc   r   rd   z>monotonic_cst has shape 3 but the input data X has 2 features.)r    r   r   r   rW   rX   z:monotonic_cst must be None or an array-like of -1, 0 or 1.r    g?z(.*)0.8]re   )r   r5   r6   r]   r?   s        rA   test_bad_monotonic_cst_raisesrn      sJ   
Q!Q!Q!Q!R1AA
JC
.bhzzz&:&:  C 
z	-	-	-  1               GC
.bhAw&7&7a  C 
z	-	-	-  1               .bhCy&9&9  C 
zz)9	:	:	:  1                 s6   A88A<?A<C%%C),C)0EEEc                 p   | j         }t          | j                  D ]}| j        |         |k    r| j        |         |k    r| j        |         }| j        |         }|dk    r||         ||         k    sJ n|dk    r||         ||         k    sJ ||         ||         z   dz  }| j        |         dk    r6| j        |         }|dk    r||         |k    sJ n|dk    r||         |k    sJ | j        |         dk    r7| j        |         }|dk    r|||         k    sJ |dk    r|||         k    sJ 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_lefts	            rA   -assert_1d_reg_tree_children_monotonic_boundedr      s   [F5#$$ > >q!A%%%*>q*AA*E*E(+F*1-G""f~888882%%f~8888 .6'?:a?J}V$))$3F;!Q&&!,/:=====#r))!,/:====}W%**$27;!Q&&%)======#r))%)=====-> >rC   c                  *   t          j        ddd                              dd          } t          j        dt           j        z  |                                 z            }t          d d                              | |          }t          j	        t                    5  t          |j        d           d d d            n# 1 swxY w Y   t          j	        t                    5  t          |j        d           d d d            d S # 1 swxY w Y   d S )Nr    r   rb   r   r   r!   r   )r(   linspacereshapesinpiravelr
   r.   rZ   r[   AssertionErrorr   rv   r5   r6   regs      rA   2test_assert_1d_reg_tree_children_monotonic_boundedr     s   
B1%%b!,,A
q25y17799$%%A
$Q
?
?
?
C
CAq
I
IC	~	&	& D D5ciCCCD D D D D D D D D D D D D D D 
~	&	& E E5ciDDDE E E E E E E E E E E E E E E E E Es$   CCC%DDDc                 T   t          j        |||                              dd          }|                     |          }|dk    r.t          j        |          dk                                    sJ d S |dk    r,t          j        |          dk                                    sJ d S d S )Nr    r   r%   )r(   r   r   rK   diffr1   )clfrw   min_xmax_xn_stepsX_gridy_pred_grids          rA   assert_1d_reg_monotonicr     s    [w//77A>>F++f%%K$$+002222222	2		$$+0022222 
	22rC   c                    t          j        ddd                              dd          }|                                } | dg          }|                    ||           |j        j        dk    sJ |j        j        d         dk    sJ  | dg          }|                    ||            |j        j        dk    sJ |j        j        d         dk    sJ d S )	Nrm   r   r   r    r   )r"   r   r%   )r(   r   r   r   r.   rv   rr   rp   )rD   r5   r6   r   s       rA   &test_1d_opposite_monotonicity_cst_datar   #  s     	B2&&r1--A			A
-rd
+
+
+CGGAqMMM91$$$$9?1$$$$ -qc
*
*
*CGGArNNN91$$$$9?1$$$$$$rC   rw   )r    r   c                    t           j                            |          }d}d}|                    ||          }|                    |          }	|r | |g||          }
n | |g|||          }
|
                    ||	           t          |
j        |           t          |
|t          j        |          t          j	        |          d           d S )Nr   r   r"   rE   r   r"   r#   rE   r   rT   )
r(   randomRandomStaterandr.   r   rv   r   minmax)rD   rw   r   rE   r3   rngr   r   r5   r6   r   s              rA   test_1d_tree_nodes_valuesr   5  s    0 )

 2
3
3CIJJ''AA 
m)*+
 
 
 m)*$+	
 
 
 GGAqMMM1#)^LLLCBF1IIsKKKKKrC   c                 b   t          j        | j        t           j                  }t          j        | j        t           j                   }t	          | j                  D ]}| j        |         }| j        |         d         d         }t          j        |          t          j        ||                   k    sJ t          j        |          t          j        ||                   k    sJ |dk     r| j        |         }| j	        |         }| j        |         d         d         | j        |         d         d         z   dz  }	||         dk    r.||         ||<   ||         ||<   ||         ||<   ||         ||<   ||         dk    r@| j        |         | j        |         k    sJ ||         ||<   |	||<   |	||<   ||         ||<   j||         dk    r@| j        |         | j        |         k    sJ |	||<   ||         ||<   ||         ||<   |	||<   t          d| d||                    d S )Nr   r   r   r    zmonotonic_cst[z]=)r(   fullrr   infrq   ru   rp   float32rs   rt   r\   )
rv   r"   upper_boundlower_boundry   ru   
node_valuerz   r{   middle_values
             rA   -assert_nd_reg_tree_children_monotonic_boundedr   h  sg   '%*BF33K'%*RVG44K5#$$ @S @S-"[^A&q)
 z*%%KN)C)CCCCCz*%%KN)C)CCCCCQ;; $Q'&q)F+A.q1EK4H4KA4NNRSS!Q&&  #.a.K"-a.K#.q>K #.q>K  7#q((;v&%+g*>>>>> #.a.K".K#/K #.q>K  7#r));v&%+g*>>>>> #/K"-a.K#.q>K #/K   QgQQw9OQQRRRA@S @SrC   c                     t          j        ddt           j        z  d                              dd          } t          j        |                                           }t          d d                              | |          }t          j	        t                    5  t          |j        dg           d d d            n# 1 swxY w Y   t          j	        t                    5  t          |j        dg           d d d            n# 1 swxY w Y   t          |j        dg           t          j        ddd                              dd          } |                                 d	z  }t          d d                              | |          }t          j	        t                    5  t          |j        dg           d d d            n# 1 swxY w Y   t          d d                              | |           }t          j	        t                    5  t          |j        dg           d d d            d S # 1 swxY w Y   d S )
Nr   r      r    r   r   r   rU   )r(   r   r   r   r   r   r
   r.   rZ   r[   r   r   rv   r   s      rA   2test_assert_nd_reg_tree_children_monotonic_boundedr     s6    	Aq25y"%%--b!44A
q		A
$Q
?
?
?
C
CAq
I
IC	~	&	& F F5ci!EEEF F F F F F F F F F F F F F F 
~	&	& G G5ci"FFFG G G G G G G G G G G G G G G 2#)aSAAA
 	B1%%b!,,A			QA
$Q
?
?
?
C
CAq
I
IC	~	&	& G G5ci"FFFG G G G G G G G G G G G G G G  $Q
?
?
?
C
CAr
J
JC	~	&	& F F5ci!EEEF F F F F F F F F F F F F F F F F FsH   B??CC#DD
D
&G		GGH77H;>H;c                 @   t           j                            |          }d}d}|dg}|                    ||          }	|                    |          }
|r | |||          }n | ||||          }|                    |	|
           t          |j        |           d S )Nr   r   r   r   r   )r(   r   r   r   r.   r   rv   )rD   rw   r   rE   r3   r   r   r   r"   r5   r6   r   s               rA   test_nd_tree_nodes_valuesr     s    6 )

 2
3
3CIJ#Q'MJ''AA 
m'+
 
 
 m'$+	
 
 
 GGAqMMM1#)]KKKKKrC   )(numpyr(   rZ   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parametrizerB   rR   r^   rg   rk   rn   r   r   r   r   r   r   r   r   r'   rC   rA   <module>r      s        A A A A A A A A                       3 2 2 2 2 2 . . . . . .13FG /1CD  7; !   69    )+HII.>>*M::.99:M :M :9 ;: ?> JI:Mz *FGG.>>*M::&IJJ.99; ; :9 KJ ;: ?> HG
;| )+HII  JI )+HII	 	 JI	 
	    )+HII  JI2> > >6
E 
E 
E3 3 3 *@AA% % BA%" *@AA)733.>>&IJJ,L ,L KJ ?> 43 BA,L^CS CS CSLF F F@ *@AA)733.>>&IJJ.L .L KJ ?> 43 BA.L .L .LrC   