
    Q3jK                        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j0                  j3                  de      ej0                  j3                  dg d	g d
      ej0                  j3                  dd      ej0                  j3                  de      d                             Zej0                  j3                  de      ej0                  j3                  dg d	g d
      ej0                  j3                  dd      ej0                  j3                  dd      ej0                  j3                  de      d                                    Zej0                  j3                  de      d        Zej0                  j3                  de      d        Zej0                  j3                  de      d        Zd Zd Z d Z!ej0                  j3                  de      d        Z"ej0                  j3                  de      ej0                  j3                  dd      ej0                  j3                  dd      ej0                  j3                  dd      ej0                  j3                  dd      d                                    Z#d Z$d  Z%ej0                  j3                  de      ej0                  j3                  dd      ej0                  j3                  dd      ej0                  j3                  dd      ej0                  j3                  dd      d!                                    Z&y)"    N)make_classificationmake_regression)ExtraTreesClassifierExtraTreesRegressorRandomForestClassifierRandomForestRegressor)DecisionTreeClassifierDecisionTreeRegressorExtraTreeClassifierExtraTreeRegressor)assert_allclose)CSC_CONTAINERSTreeClassifierzsparse_splitter, with_missing))FFTF)FT)zdense-without-missingzsparse-without-missingzdense-with-missing)idsdepth_first_builderr   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                  |       t        |d      r|j                  d       |rct        j                  j                  |      }|j                  d|
j                        j                  t              }t        j                  |
|<   |r ||
      }
|j                  |
|       |j                  |      }t        j                  |dk\  |dk        j!                         sJ d       t#        |j%                  d      d       t        j                   |j                  |      d d df   |d d df   k\        sJ t        j                   |j                  |      d d df   |d d df   k        sJ t        j                   |j                  |      d d df   |d d df   k        sJ t        j                   |j                  |      d d df   |d d df   k\        sJ y )N          r   )	n_samples	n_classes
n_featuresn_informativen_redundantrandom_state
      )	max_depthmonotonic_cst)r"   r#   max_leaf_nodesr   r   n_estimatorsr&   seedsize        g      ?z-Probability should always be in [0, 1] range.)axis)r   npcopyzerosshapehasattr
set_paramsrandomdefault_rngchoiceastypeboolnanfitpredict_probalogical_andallr   sum)r   sparse_splitterr   with_missing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	generatormask
proba_tests                          S/DATA/.local/lib/python3.12/site-packages/sklearn/tree/tests/test_monotonic_tree.py*test_monotonic_constraints_classificationsrR       s   ( IO'DAq )/*A.>,?WG/"#Q'7%8AF!#"''&/,L!#"''&/,LA"A"A"A"HHQWWQZ(MM!M!t=I'*

 sN#$67sN#A&II))/A)B	6==dC(GGGW""6*J>>*+Z3->?CCE 7E JNNN*C0 66###L1!Q$7:ad;KKLLL66###L1!Q$7:ad;KKLLL 66###L1!Q$7:ad;KKLLL66###L1!Q$7:ad;KKLLL    TreeRegressor	criterion)absolute_errorsquared_errorc                 6   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|j                  |       t        |d      r|j                  d       |rct        j                  j                  |      }|j                  d|j
                        j                  t              }t        j                  ||<   |r ||      }|j                  ||       |j                  |      }
|j                  |      }t        j                   ||
k\        sJ |j                  |      }t        j                   ||
k        sJ y )Nr   r   r   )r   r   r   r   r   r   r    r!   )r"   r#   rU      )r"   r#   rU   r$   r   r%   r&   r'   r(   r   r*   )r   r.   aranger/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   predictr=   )rT   r?   r   r@   rU   rA   r   r   rB   rC   rD   traintestrE   rF   rG   X_test_incrX_test_decrr#   rM   rN   rO   y_incry_decrs                           rQ   &test_monotonic_constraints_regressionsrb   n   s   , IO'	DAq IIo&E99_i0DhGhGWWQtWF''&/K''&/K11HHQWWQZ(MM!M!'
 '*	
 sN#$67sN#A&II))/A)B	6==dC(GGGWFA[[%F66&A+ [[%F66&A+rS   c                 *   t        ddddd      \  }}d|d<   t        j                  |j                  d         }d|d<   d|d<    | d |d      }d	}t	        j
                  t        |
      5  |j                  ||       d d d        y # 1 sw Y   y xY w)Nd   r      r   )r   r   r   r   r   r    r!   r"   r#   r   zIMonotonicity constraints are not supported with multiclass classificationmatch)r   r.   r0   r1   pytestraises
ValueErrorr:   )r   rC   rD   r#   rM   msgs         rQ   test_multiclass_raisesrm      s    !qPQDAq AaDHHQWWQZ(MM!M!
4}ST
UC
UC	z	-1 
.	-	-s   -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  |j                  ||       d d d        y # 1 sw Y   y xY w)
N)r    r   re      r   )      rY   	   r   r    r   r    r   r    r!   r    r   rf   z?Monotonicity constraints are not supported with multiple outputrg   r.   arrayri   rj   rk   r:   )r   rC   rD   rM   rl   s        rQ   test_multiple_output_raisesrv      sd    	*+A	/*A
bhhAw&7aC LC	z	-1 
.	-	-s   A**A3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  |j                  ||       d d d        d} | d t        j                  ddg      d      }t        j                  t        |      5  |j                  ||       d d d         | d t        j                  ddg      d      }t        j                  t        |dz         5  |j                  ||       d d d        y # 1 sw Y   xY w# 1 sw Y   oxY w# 1 sw Y   y xY w)Nr    r   re   ro   r   rp   rq   rY   rr   r   rs   z>monotonic_cst has shape 3 but the input data X has 2 features.)r!   r    r   r   rf   rg   z:monotonic_cst must be None or an array-like of -1, 0 or 1.r!   皙?z(.*)0.8]rt   )r   rC   rD   rl   rM   s        rQ   test_bad_monotonic_cst_raisesrz      s   
Q!Q!Q!Q!R1AA
JC
bhhz&:C 
z	-1 
. GC
bhhAw&7aC 
z	-1 
. bhhCy&9C 
zz)9	:1 
;	: 
.	- 
.	- 
;	:s$   D +D,D8 D),D58Ec                 >   | j                   }t        | j                        D ]  }| j                  |   |kD  s| j                  |   |kD  s)| j                  |   }| j                  |   }|dk(  r||   ||   k  sJ |dk(  r||   ||   k\  sJ ||   ||   z   dz  }| j
                  |   dk\  r-| j                  |   }|dk(  r
||   |k  sJ |dk(  r
||   |k\  sJ | j
                  |   dk\  s| j                  |   }|dk(  r|||   k  rJ |dk(  s|||   k\  rJ  y )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	            rQ   -assert_1d_reg_tree_children_monotonic_boundedr      sf   [[F5##$q!A%%*>*>q*AA*E((+F**1-G"f~8882%f~888 .6'?:a?J}}V$)$33F;!Q&!,/:===#r)!,/:===}}W%*$227;!Q&%)====#r)%)====- %rS   c                  
   t        j                  ddd      j                  dd      } t        j                  dt         j                  z  | j                         z        }t        d d      j                  | |      }t        j                  t              5  t        |j                  d       d d d        t        j                  t              5  t        |j                  d       d d d        y # 1 sw Y   BxY w# 1 sw Y   y xY w)Nr!   r    rq   r   r   r"   r   )r.   linspacereshapesinpiravelr
   r:   ri   rj   AssertionErrorr   r   rC   rD   regs      rQ   2test_assert_1d_reg_tree_children_monotonic_boundedr     s    
B1%%b!,A
q255y1779$%A
$Q
?
C
CAq
IC	~	&5ciiC 
' 
~	&5ciiD 
'	& 
'	& 
'	&s   C-C9-C69Dc                 ,   t        j                  |||      j                  dd      }| j                  |      }|dk(  r)t        j                  |      dk\  j                         sJ y |dk(  r)t        j                  |      dk  j                         sJ y y )Nr!   r    r,   )r.   r   r   r[   diffr=   )clfr   min_xmax_xn_stepsX_gridy_pred_grids          rQ   assert_1d_reg_monotonicr     s    [[w/77A>F++f%K$+00222	2	$+00222 
rS   c                    t        j                  ddd      j                  dd      }|j                         } | dg      }|j	                  ||       |j
                  j                  dk(  sJ |j
                  j                  d   dk(  sJ  | dg      }|j	                  ||        |j
                  j                  dk(  sJ |j
                  j                  d   dk(  sJ y )	Nrx   r   r   r!   r    )r#   r   r,   )r.   r   r   r   r:   r   r~   r|   )rT   rC   rD   r   s       rQ   &test_1d_opposite_monotonicity_cst_datar   &  s     	B2&&r1-A		A
rd
+CGGAqM991$$$99??1$$$ qc
*CGGArN991$$$99??1$$$rS   r@   r   )r!   r    c                 Z   t         j                  j                  |      }d}d}|j                  ||      }	|j                  |      }
|r | |g||      }n | |g|||      }|rft         j                  j	                  |      }|j                  d|	j                  ddg	      j                  t              }t         j                  |	|<   |j                  |	|
       t        |j                  |       t        j                  |	      t        j                  |	      }}t        ||||d
       y )Nr   r    r#   rU   r   r#   r$   rU   r   r(   r   ry   皙?r+   prd   )r.   r4   RandomStaterandr5   r6   r1   r7   r8   r9   r:   r   r   nanminnanmaxr   )rT   r@   r   r   rU   rA   rngr   r   rC   rD   r   rN   rO   r   r   s                   rQ   test_1d_tree_nodes_valuesr   8  s   < ))

 2
3CIJJ'AA)*+
 )*$+	
 II))/A)B	C:>EEdK&&$GGAqM1#))^L99Q<15ECsCrS   c                 .   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 ||   ||<   |	||<   |	||<   ||   ||<   I||   dk(  r=| j                  |   | j                  |   k\  sJ |	||<   ||   ||<   ||   ||<   |	||<   t        d| d||           y )Nr   r   r    r!   zmonotonic_cst[z]=)r.   fullr~   infr}   r   r|   float32r   r   rk   )
r   r#   upper_boundlower_boundr   r   
node_valuer   r   middle_values
             rQ   -assert_nd_reg_tree_children_monotonic_boundedr   v  sD   ''%**BFF3K''%**RVVG4K5##$--"[[^A&q)
 zz*%KN)CCCCzz*%KN)CCCCQ; $$Q'&&q)F+A.q1EKK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  ~gYbw9O8PQRRA %rS   c                  8   t        j                  ddt         j                  z  d      j                  dd      } t        j                  |       j                         }t        d d      j                  | |      }t        j                  t              5  t        |j                  dg       d d d        t        j                  t              5  t        |j                  dg       d d d        t        |j                  dg       t        j                  ddd      j                  dd      } | j                         d	z  }t        d d      j                  | |      }t        j                  t              5  t        |j                  dg       d d d        t        d d      j                  | |       }t        j                  t              5  t        |j                  dg       d d d        y # 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   {xY w# 1 sw Y   y xY w)
Nr   r      r!   r    r   r   re   )r.   r   r   r   r   r   r
   r:   ri   rj   r   r   r   r   s      rQ   2test_assert_nd_reg_tree_children_monotonic_boundedr     s}    	Aq255y"%--b!4A
q	A
$Q
?
C
CAq
IC	~	&5cii!E 
' 
~	&5cii"F 
' 2#))aSA
 	B1%%b!,A		QA
$Q
?
C
CAq
IC	~	&5cii"F 
'  $Q
?
C
CAr
JC	~	&5cii!E 
'	&+ 
'	& 
'	& 
'	& 
'	&s0   G*G72H	H*G47HHHc                    t         j                  j                  |      }d}d}|dg}	|j                  ||      }
|j                  |      }|r | |	||      }n | |	|||      }|rft         j                  j	                  |      }|j                  d|
j                  ddg	      j                  t              }t         j                  |
|<   |j                  |
|       t        |j                  |	       y )
Nr   r   r   r   r   r(   ry   r   r   )r.   r4   r   r   r5   r6   r1   r7   r8   r9   r:   r   r   )rT   r@   r   r   rU   rA   r   r   r   r#   rC   rD   r   rN   rO   s                  rQ   test_nd_tree_nodes_valuesr     s    B ))

 2
3CIJ#Q'MJ'AA'+
 '$+	
 II))/A)B	C:>EEdK&&$GGAqM1#))]KrS   )'numpyr.   ri   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parametrizerR   rb   rm   rv   rz   r   r   r   r   r   r   r   r    rS   rQ   <module>r      s     A   3 .13FG /1CD  7; !   69    )+HI#
 	R   .>.9?M : ? J?MD *FG#
 	R   .>&IJ.9@ : K ? H@F )+HI J )+HI	 J	 )+HI J2>6
E3 *@A% B%" *@A7)73.>&IJ6D K ? 4 8 B
6DrCSLF@ *@A7)73.>&IJ7L K ? 4 8 B
7LrS   