
    *YHh+U                     
   d dl Z d dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZ d dlmZmZmZmZmZ g dg dg dg dgZej&                  j)                  d	d
dg dg dg dg dgdfddg dg dg dg dgdfddg dg dg dg dgdfd
dg dg dg dg dgg dfd
dg dg dg dg dgg dfddg dg dg dg dgg dfddg dg dg dg dgg dfddg dg dg dg dgg dfddg dg dg dg dgg dfddg dg dg dg dgg dfg
      d        Zd Zd Zej&                  j)                  d	d
dg dg dg dg dgdfddg dg dg dg dgdfddg dg dg dg dgdfddg dg dg dg dgdfddg dg dg dg dgg dfddg dg dg dg dgg dfddg dg dg dg dgg dfddg dg dg dg dgg dfg      d         Zej&                  j3                  d!      d"        Zej&                  j)                  d#ddg      d$        Zej&                  j)                  d#g d%      d&        Zd' Zej&                  j)                  d( ed)d*            d+        Zd, Z ej&                  j)                  d-d
dg d.g d/g d0fddg d.g d1g d2fddg d3g d1g d4fg      d5        Z!ej&                  j)                  d6d
g d7g d8g d9g d:gdfdg d;g d;g d<g d=gdfdg d>g d?g d@g d@gdfg      ej&                  j)                  dAg dB      dC               Z"ej&                  j)                  d#g d%      dD        Z#dE Z$ej&                  j)                  dFdg dGdfdg dGdfg      dH        Z%dI Z&ej&                  j)                  dJejN                  ejP                  ejR                  g      ej&                  j)                  dKdejP                  ejR                  g      ej&                  j)                  dAg dB      dL                      Z*ej&                  j)                  dMejN                  ejP                  ejR                  g      ej&                  j)                  dAg dB      dN               Z+dO Z,ej&                  j)                  dPdQ edR      D  cg c]  }  edS      D ]  }dT|  dU e-|         c}} fdV edR      D  cg c]  }  edS      D ]  }dT|  dU e-|         c}} fdW edR      D  cg c]  } dT|  	 c} fg      dX        Z.ej&                  j)                  d#g d%      dY        Z/dZ Z0d[ Z1yc c}} w c c}} w c c} w )\    N)clone)KBinsDiscretizerOneHotEncoder)assert_allcloseassert_allclose_dense_sparseassert_array_almost_equalassert_array_equalignore_warnings      ?)r         @      )r   g      @r         ?)   g      @r      z2strategy, quantile_method, expected, sample_weightuniformwarn)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   kmeans)r   r   r   r   quantileaveraged_inverted_cdf)r   r   r   r   )r   r   r   r   )r   r      r   c                     t        dd| |      }t        t              5  |j                  t        |       d d d        t        |j                  t              |       y # 1 sw Y   )xY w)Nr   ordinaln_binsencodestrategyquantile_method)categorysample_weight)r   r
   UserWarningfitXr	   	transform)r!   r"   expectedr%   ests        h/var/www/html/planif/env/lib/python3.12/site-packages/sklearn/preprocessing/tests/test_discretization.pytest_fit_transformr-      s\    D XC 
+	. 0/0 s}}Q'20 0s   A  A)c                  R   t        dd      j                  t               t        t        j                  dg      d   d      j                  t               t        dd      j                  t              j                  j                  t        j                  t              k(  sJ y )Nr   r   r   r"   r   )	r   fit_transformr(   nparrayr'   n_bins_dtypeint     r,   test_valid_n_binsr8   _   s{    A/FGUUVWXxx}Q1HmA16MNRR	geerxx}% % %r7   c                     t        j                  dd      } t        | d      }d}t        j                  t
        |      5  |j                  t               d d d        g d} t        | d      }d}t        j                  t
        |      5  |j                  t               d d d        g d} t        | d      }d	}t        j                  t
        |      5  |j                  t               d d d        g d
} t        | d      }d}t        j                  t
        |      5  |j                  t               d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   y xY w)N)r             @r   r/   z:n_bins must be a scalar or array of shape \(n_features,\).match)r   r   r   r   r   r   r   z{KBinsDiscretizer received an invalid number of bins at indices 0, 3. Number of bins must be at least 2, and must be an int.) @r   r?   r   z{KBinsDiscretizer received an invalid number of bins at indices 0, 2. Number of bins must be at least 2, and must be an int.)r1   fullr   pytestraises
ValueErrorr0   r(   )r   r+   err_msgs      r,   test_invalid_n_bins_arrayrE   i   sF   WWVS!F
&:Q
RCKG	z	1 ! F
&:Q
RCKG	z	1 ! F
&:Q
RC	 
 
z	1 ! F
&:Q
RC	 
 
z	1 ! ;    s0   EEE%E(EEE%(E1)r   r   r   r   r>   )r   r   r   r   linear)r   r   r   r   )r   r   r   r   c                    t        g dd| |      j                  t        |      }t        |j	                  t              |       t        j                  t              j                  d   }|j                  j                  |fk(  sJ t        |j                  |j                        D ]  \  }}|j                  |dz   fk(  rJ  y )Nr   r   r   r   r   r   r$   r   )r   r'   r(   r	   r)   r1   r2   shape
bin_edges_zipr3   )r!   r"   r*   r%   r+   
n_features	bin_edgesr   s           r,   test_fit_transform_n_bins_arrayrN      s    l '	
 
c!=c)  s}}Q'2 !""1%J>>J=000 = 0	66A:-///0r7   z&ignore: Bins whose width are too smallc            	         t        j                  dgdgdgdgdgdgg      } t        ddd	d
      }|j                  | g d       t	        |j
                  d   g d       t	        |j                  |       dgdgdgdgdgdgg       y)z;Check the impact of `sample_weight` one computed quantiles.r   r   r   r   i  i  
   r   r   r   r   )r   r   r   r   r   r   r$   r   )r   r   r   r   r           g      ?      @N)r1   r2   r   r'   r   rJ   r)   r(   r+   s     r,   *test_kbinsdiscretizer_effect_sample_weightrT      s     	2$qcA3v67A /	C GGA/G0CNN1%'89CMM!$usecUSEC53%&PQr7   r!   c                    | dk(  rt        dd| d      }nt        dd|       }t        j                  g dt        j                        }t        j                  |      }|j                  t        |	       t        ||       y
)z7Make sure that `sample_weight` is not changed in place.r   r   r   r   r   )r   r    r!   )r   r   r   r   r4   r$   N)r   r1   r2   float64copyr'   r(   r   )r!   r+   r%   sample_weight_copys       r,   /test_kbinsdiscretizer_no_mutating_sample_weightrZ      sp     :3	
 a	HMHH\<M/GGA]G+M#56r7   )r   r   r   c                    t        j                  d       t        j                  ddgddgddgddgg      }| dk(  rt	        | ddd	
      }nt	        | dd      }d}t        j                  t        |      5  |j                  |       d d d        |j                  d   dk(  sJ |j                  |      }t        |d d df   t        j                  |j                  d                y # 1 sw Y   bxY w)Nalwaysr   r   r   r   r   r   r   r   )r!   r   r    r"   )r!   r   r    z2Feature 0 is constant and will be replaced with 0.r<   )warningssimplefilterr1   r2   r   rA   warnsr&   r'   r3   r)   r	   zerosrI   )r!   r(   r+   warning_messageXts        r,   test_same_min_maxrc      s    (#
1b'Ar7QFQF34A:3	
 9MJO	k	9 
;;q>Q	q	Br!Q$x!''!*!56 s   7C**C3c                     t        j                  d      } t        dd      }t        j                  t
              5  |j                  |        d d d        t        dd      }|j                  | j                  dd             t        j                  t
              5  |j                  |        d d d        y # 1 sw Y   kxY w# 1 sw Y   y xY w)Nr:   r   r   r/   r   r   )	r1   aranger   rA   rB   rC   r'   reshaper)   rS   s     r,   test_transform_1d_behaviorrg     s    
		!A
!5L
MC	z	" 
 !5L
MCGGAIIb!	z	" a  
 s   B8C8CCir   	   c                    t        j                  g d      j                  dd      }t        j                  g d      j                  dd      }|d| z  z  }t        ddd	      j	                  |      }t        ||       y )
N)r;         @g      @g       @g      $@r   r   )r   r   r   r   r   rP   r   r   r   r   r    r"   )r1   r2   rf   r   r0   r	   )rh   X_initXt_expectedr(   rb   s        r,   test_numeric_stabilityro     ss    XX0199"a@F((?+33B:K 	QA	4K
mA  {B'r7   c            
         t        g ddd      j                  t              } | j                  t              }t        g ddd      j                  t              } | j                  t              }t	        j
                  |      rJ t        t        dD cg c]  }t        j                  |       c}d      j                  |      |       t        g ddd      j                  t              } | j                  t              }t	        j
                  |      sJ t        t        dD cg c]  }t        j                  |       c}d	      j                  |      j                         |j                                y c c}w c c}w )
NrH   r   r   rl   onehot-denseF)
categoriessparse_outputonehotT)r   r'   r(   r)   spissparser	   r   r1   re   r0   toarray)r+   Xt_1Xt_2rh   Xt_3s        r,   test_encode_optionsr{   '  s8   
I?V	c!f  ==D
/ 
c!f	 
 ==D{{4   .:;		!;5	

-
	 H>U	c!f  ==D;;t.:;		!;4	
 
t		 < <s   F,FzIstrategy, quantile_method, expected_2bins, expected_3bins, expected_5bins)r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r:   r:   )r   r   r   r   r   r   )r   r   r   r   r   r:   )r   r   r   r   r   r   )r   r   r   r   r:   r:   c                    t        j                  g d      j                  dd      }t        d| |d      }|j	                  |      }t        ||j                                t        d| |d      }|j	                  |      }t        ||j                                t        d| |d      }|j	                  |      }t        ||j                                y )	N)r   r   r   r   ri   rP   r   r   r   r   r   r!   r"   r    r      )r1   r2   rf   r   r0   r	   ravel)r!   r"   expected_2binsexpected_3binsexpected_5binsr(   r+   rb   s           r,   test_nonuniform_strategiesr   H  s    " 	&'//A6A 8_YC 
		1	B~rxxz2 8_YC 
		1	B~rxxz2 8_YC 
		1	B~rxxz2r7   z&strategy, expected_inv,quantile_method)      r;         r   )r   rR         r   )r   rk   r   r   )r   rk   r   r   )g      g      @g      g      )g      g      @g      g      ?)g      ?g      @g      g      ?)r   r;   r   g      )r   rR   r   rQ   )r   rk   r   g      ?r    )r   rt   rq   c                     t        d| ||      }|j                  t              }|j                  |      }t	        ||       y )Nr   r}   )r   r0   r(   inverse_transformr   )r!   r    expected_invr"   kbdrb   Xinvs          r,   test_inverse_transformr   q  sD    J 8_VC 
		1	B  $DlD1r7   c                    t        j                  g d      d d d f   }| dk(  rt        d| dd      }nt        d| d      }|j                  |       t        j                  dd	g      d d d f   }|j	                  |      }t        |j                  d
      dz   |j                         t        |j                  d
      d
g       y )Nr   r   r   r   r   r:   r   r   )r   r!   r    r"   )r   r!   r    r   r~   r   )axisr   )	r1   r2   r   r'   r)   r	   maxr3   min)r!   r(   r   X2X2ts        r,    test_transform_outside_fit_ranger     s    
q$w'A:3	
 a(9MGGAJ	2q'	1d7	#B
--
CswwAw*CKK8swwAw,r7   c            	      ^   t        j                  g d      d d d f   } | j                         }t        ddd      }|j	                  |       }t        | |       |j                         }|j                  |      }t        ||       t        |t        j                  dgdgdgdgg             y )	Nr   r   r   r   )r   r"   r    r   r   r   )r1   r2   rX   r   r0   r	   r   )r(   X_beforer+   rb   	Xt_beforer   s         r,   test_overwriter     s    
q$w'AvvxH
"9)C 
		1	Bq(#	I  $Dr9%tRXXusecUSE&BCDr7   z-strategy, expected_bin_edges, quantile_method)r   r   r   c                     dgdgdgdgdgdgg}t        d| |d       }d}t        j                  t        |      5  |j	                  |       d d d        t        |j                  d   |       y # 1 sw Y   #xY w)Nr   r   )r   r!   r"   	subsample'Consider decreasing the number of bins.r<   )r   rA   r_   r&   r'   r   rJ   )r!   expected_bin_edgesr"   r(   r   ra   s         r,   test_redundant_binsr     s     qcA3aS1#&A
8_PTC @O	k	9 
 cnnQ/1CD s   A//A8c                     t        j                  g d      j                  dd      } t        j                  g d      }t        j                  g d      j                  dd      }t        dddd	
      }d}t	        j
                  t        |      5  |j                  |        d d d        t        |j                  d   |       t        |j                  |       |       y # 1 sw Y   >xY w)N)皙?r   ffffff?r   r   )r   gq=
ףp?g=
ףp=?gzG?gp=
ף?r   )r   r   r:   rP   r   r   rF   r   r   r<   r   )r1   r2   rf   r   rA   r_   r&   r'   r   rJ   r)   )r(   rM   rb   r   ra   s        r,   !test_percentile_numeric_stabilityr     s    
#$,,R3A=>I	)		$	$R	+B
 	C @O	k	9 
 cnnQ/;cmmA.3	 s   C!!C*in_dtype	out_dtypec                 @   t        j                  t        |       }t        d|d|      }|j	                  |       ||}n<|.|j
                  t         j                  k(  rt         j                  }n|j
                  }|j                  |      }|j
                  |k(  sJ y NrV   r   r   )r   r    r"   r4   )	r1   r2   r(   r   r'   r4   float16rW   r)   )r   r   r    X_inputr   expected_dtyperb   s          r,   test_consistent_dtyper     s     hhq)G
/	C GGG "		w}}

: 	w	B88~%%%r7   input_dtypec                 N   t        j                  t        |       }t        d|dt         j                        }|j                  |       |j                  |      }t        d|dt         j                        }|j                  |       |j                  |      }t        ||       y r   )	r1   r2   r(   r   float32r'   r)   rW   r   )r   r    r   kbd_32Xt_32kbd_64Xt_64s          r,   test_32_equal_64r     s    
 hhq,G /jj	F JJwW%E /jj	F JJwW%E .r7   c                     t        j                  g d      j                  dd      } t        dddd      }|j	                  |        t        |      }|j                  d 	       |j	                  |        t        |j                  d
   |j                  d
         D ]%  \  }}t         j                  j                  ||       ' |j                  j                  |j                  j                  k(  sJ y )Nr   r   r   rP   r   r   r   r   r   r   )r1   r2   rf   r   r'   r   
set_paramsrK   rJ   testingr   rI   )r(   kbd_defaultkbd_without_subsamplingbin_kbd_defaultbin_kbd_with_subsamplings        r,   'test_kbinsdiscretizer_subsample_defaultr   "  s    
"#++B2A"/	K OOA#K0&&&6"58q!#:#E#Ea#H6 N11 	

""?4LMN !!''+B+M+M+S+SSSSr7   zencode, expected_namesrt   r   r:   feat_rq   r   c                 8   g dg dg dg dg}t        d| d      j                  |      }|j                  |      }t        d      D cg c]  }d	| 	 }}|j	                  |      }|j
                  d
   |j
                  d   k(  sJ t        ||       yc c}w )z[Check get_feature_names_out for different settings.
    Non-regression test for #22731
    r   r   r   r   r   r   r   r   r   r   r:   r   r:   r   rl   r   r   r   r   N)r   r'   r)   rangeget_feature_names_outrI   r	   )r    expected_namesr(   r   rb   rh   input_featuresoutput_namess           r,   *test_kbinsdiscrtizer_get_feature_names_outr   8  s    4 
k:z:A
1H	c!f  
q	B*/(3QQCj3N3,,^<L88A;,,,Q////|^4	 4s   
Bc                 z   t         j                  j                  |      j                  d      dz   }| dk(  rt	        | d|d      }nt	        | d|      }|j                  |       t        |      }|j                  d        |j                  |       t        |j                  d	   |j                  d	   d
       y )N)i r   r   r   iP  r   )r!   r   random_stater"   )r!   r   r   r   r   g{Gz?)rtol)
r1   randomRandomStaterandom_sampler   r'   r   r   r   rJ   )r!   global_random_seedr(   kbd_subsamplingkbd_no_subsamplings        r,   test_kbinsdiscretizer_subsampler   `  s     			01??LqPA:*+3	
 +=O
 /!!D!11 ""1%'9'D'DQ'Gdr7   c                      g dg dg dg dg} t        j                  t        d      5  t        d      j	                  |        d d d        y # 1 sw Y   y xY w)	Nr   r   r   r   a%  The current default behavior, quantile_method='linear', will be changed to quantile_method='averaged_inverted_cdf' in scikit-learn version 1.9 to naturally support sample weight equivalence properties by default. Pass quantile_method='averaged_inverted_cdf' explicitly to silence this warning.r<   r   )r!   )rA   r_   FutureWarningr   r'   )r(   s    r,   $test_quantile_method_future_warningsr   }  sN    	k:z:A	
 	5 	*-11!4	5 	5 	5s   AAc                      g dg dg dg dg} d}t        j                  t        |      5  t        dd	      j	                  | g d
       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   zWhen fitting with strategy='quantile' and sample weights, quantile_method should either be set to 'averaged_inverted_cdf' or 'inverted_cdf', got quantile_method='linear' instead.r<   r   rF   )r!   r"   )r   r   r   r   r$   )rA   rB   rC   r   r'   )r(   expected_msgs     r,   /test_invalid_quantile_method_with_sample_weightr     sg    	k:z:A	@ 
 

 
 	*hGKK& 	L 	
	
 
 
s   !AA)2r]   numpyr1   rA   scipy.sparsesparseru   sklearnr   sklearn.preprocessingr   r   sklearn.utils._testingr   r   r   r	   r
   r(   markparametrizer-   r8   rE   rN   filterwarningsrT   rZ   rc   rg   r   ro   r{   r   r   r   r   r   r   r   r   rW   r   r   r   floatr   r   r   r   )col_idbin_ids   00r,   <module>r      s        A  +->P 8 <|D		
 <|D		
 #<|D		
 <|D		
 <|D		
 #<|D		
 #<|D		
 #<|D		
 <|D		
 <|D		
o=@B3C@B3%#L 8 <|D		
 <|D		
 <|D		
 #<|D		
 #<|D		
 #<|D		
 #<|D		
 <|D		
W14j0k4j0  DER FR  h
%;<7 =7$ %FG7 H7*	 eAqk*	( +	(B O	F.0BDVW	6-/ACUV#	

336 , ''%%	 		
 00/*	 		
 (&&&	 $		
+"F #HI2 JG"H2 %FG- H-(E  3	["9:	;'	E	E4* bjj"**bjj%IJtRZZ&DE#HI& J F K&, RZZ(LM#HI/ J N/8T,   $Ah#Ah  vhaf//	
  $Ah#Ah  vhaf//	
 
58<tF8_<=#,5-,5$ %FG H85
] =s   "U"U
>U