
    {KgH                     D   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d	      ej0                  j3                  d
d	      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e      d                                    Zej0                  j3                  de      d        Zej0                  j3                  de      d        Zej0                  j3                  deeg      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      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      d                             Z'y)     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 ||	      }	|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   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                       j/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/tree/tests/test_monotonic_tree.py*test_monotonic_constraints_classificationsrB       s    IO'DAq )/*A.>,?WG/"#Q'7%8AF!#"''&/,L!#"''&/,LA"A"A"A"HHQWWQZ(MM!M!t=I'*

 sN#>.*<=>sN#-.!,-(GGGW""6*J>>c:,	ce =<=  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                 p   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i ddi |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"   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   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#-.!,-(GGGWFA[[%F66&A+ [[%F66&A+rC   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(   r*   r+   pytestraises
ValueErrorr.   )r   r5   r6   r"   r?   msgs         rA   test_multiclass_raisesr^      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   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      sd    	*+A	/*A
bhhAw&7aC LC	z	-1 
.	-	-s   A**A3DecisionTreeEstimatorc                 <   t        ddddd      \  }}t        j                  |d<   t        j                  |j                  d         }d|d<    | d |d	      }d
}t        j                  t        |      5  |j                  ||       d d d        y # 1 sw Y   y xY w)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 ffAdGHHQWWQZ(MM!
m!C !C	z	-1 
.	-	-s   6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  |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   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      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	            rA   -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)%)====- %rC   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   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
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   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	$+00222 
rC   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 )	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GGAqM991$$$99??1$$$ qc
*CGGArN991$$$99??1$$$rC   rw   )r    r   c                    t         j                  j                  |      }d}d}|j                  ||      }|j                  |      }	|r | |g||      }
n | |g|||      }
|
j	                  ||	       t        |
j                  |       t        |
|t        j                  |      t        j                  |      d       y )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   1  s    0 ))

 2
3CIJJ'AA)*+
 )*$+	
 GGAqM1#))^LCBFF1IsKrC   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(   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   d  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 %rC   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   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     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 | ||||      }|j	                  |	|
       t        |j                  |       y )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
3CIJ#Q'MJ'AA'+
 '$+	
 GGAqM1#))]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      sV     A   3 .13FG /1CD  7; !   69    )+HI.>*M:.9:M : ; ? J:Mz *FG.>*M:&IJ.9; : K ; ? H
;| )+HI J )+HI	 J	 46KL  )+HI J2>6
E3 *@A% B%" *@A)73.>&IJ,L K ? 4 B,L^CSLF@ *@A)73.>&IJ.L K ? 4 B.LrC   