
    Q3jR                     
   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 d/fddg d-g d0g d1fddg d2g d0g d3fg      d4        Z!ej&                  j)                  d5d
g d6g d7g d8g d9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)                  d@g dA      dB               Z"ej&                  j)                  d"g d$      dC        Z#dD Z$ej&                  j)                  dEdg dFdfdg dFdfg      dG        Z%dH Z&ej&                  j)                  dIejN                  ejP                  ejR                  g      ej&                  j)                  dJdejP                  ejR                  g      ej&                  j)                  d@g dA      dK                      Z*ej&                  j)                  dLejN                  ejP                  ejR                  g      ej&                  j)                  d@g dA      dM               Z+dN Z,ej&                  j)                  dOdP edQ      D  cg c]  }  edR      D ]  }dS|  dT e-|         c}} fdU edQ      D  cg c]  }  edR      D ]  }dS|  dT e-|         c}} fdV edQ      D  cg c]  } dS|  	 c} fg      dW        Z.ej&                  j)                  d"g d$      dX        Z/dY Z0yc c}} w c c}} w c c} w )Z    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averaged_inverted_cdf)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   kmeans)r   r   r   r   quantile)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        \/DATA/.local/lib/python3.12/site-packages/sklearn/preprocessing/tests/test_discretization.pytest_fit_transformr,      sU    D XC 
+	./ 
/ s}}Q'2 
/	.s   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_binsr7   _   s{    A/FGUUVWXxx}Q1HmA16MNRR	geerxx}% % %r6   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.)r0   fullr   pytestraises
ValueErrorr/   r'   )r   r*   err_msgs      r+   test_invalid_n_bins_arrayrD   i   s(   WWVS!F
&:Q
RCKG	z	1! 
2 F
&:Q
RCKG	z	1! 
2 F
&:Q
RC	 
 
z	1! 
2 F
&:Q
RC	 
 
z	1! 
2	1; 
2	1 
2	1 
2	1 
2	1s0   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(   r0   r1   shape
bin_edges_zipr2   )r    r!   r)   r$   r*   
n_features	bin_edgesr   s           r+   test_fit_transform_n_bins_arrayrM      s    l '	
 
c!=c)  s}}Q'2 !""1%J>>J=000 =	66A:-/// >r6   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)r0   r1   r   r&   r   rI   r(   r'   r*   s     r+   *test_kbinsdiscretizer_effect_sample_weightrS      s     	2$qcA3v67A /	C GGA/G0CNN1%'89CMM!$usecUSEC53%&PQr6   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   r3   r#   N)r   r0   r1   float64copyr&   r'   r   )r    r*   r$   sample_weight_copys       r+   /test_kbinsdiscretizer_no_mutating_sample_weightrY      sp     :3	
 a	HMHH\<M/GGA]G+M#56r6   )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simplefilterr0   r1   r   r@   warnsr%   r&   r2   r(   r	   zerosrH   )r    r'   r*   warning_messageXts        r+   test_same_min_maxrb      s    (#
1b'Ar7QFQF34A:3	
 9MJO	k	9
 
:;;q>Q	q	Br!Q$x!''!*!56 
:	9s   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)Nr9   r   r   r.   r   r   )	r0   aranger   r@   rA   rB   r&   reshaper(   rR   s     r+   test_transform_1d_behaviorrf     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   rO   r   r   r   r   r   r!   )r0   r1   re   r   r/   r	   )rg   X_initXt_expectedr'   ra   s        r+   test_numeric_stabilityrn     ss    XX0199"a@F((?+33B:K 	QA	4K
mA  {B'r6   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 )
NrG   r   r   rk   onehot-denseF)
categoriessparse_outputonehotT)r   r&   r'   r(   spissparser	   r   r0   rd   r/   toarray)r*   Xt_1Xt_2rg   Xt_3s        r+   test_encode_optionsrz   '  s@   
I?V	c!f  ==D
/ 
c!f	 
 ==D{{4   .:;l		!l;5	

-
	 H>U	c!f  ==D;;t.:;l		!l;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   r9   r9   )r   r   r   r   r   r   )r   r   r   r   r   r9   )r   r   r   r   r   r   )r   r   r   r   r9   r9   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   rh   rO   r   r   r   r   r   r    r!   r   r      )r0   r1   re   r   r/   r	   ravel)r    r!   expected_2binsexpected_3binsexpected_5binsr'   r*   ra   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2r6   z&strategy, expected_inv,quantile_method)      r:         r   )r   rQ         r   )r   rj   r   r   )r   rj   r   r   )g      g      @g      g      )g      g      @g      g      ?)g      ?g      @g      g      ?)r   r:   r   g      )r   rQ   r   rP   )r   rj   r   g      ?r   )r   rs   rp   c                     t        d| ||      }|j                  t              }|j                  |      }t	        ||       y )Nr   r|   )r   r/   r'   inverse_transformr   )r    r   expected_invr!   kbdra   Xinvs          r+   test_inverse_transformr   }  sD    J 8_VC 
		1	B  $DlD1r6   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   r9   r   r   )r   r    r   r!   )r   r    r   r   r}   r   )axisr   )	r0   r1   r   r&   r(   r	   maxr2   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,r6   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   )r0   r1   rW   r   r/   r	   r   )r'   X_beforer*   ra   	Xt_beforer   s         r+   test_overwriter     s    
q$w'AvvxH
"9)C 
		1	Bq(#	I  $Dr9%tRXXusecUSE&BCDr6   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   r@   r^   r%   r&   r   rI   )r    expected_bin_edgesr!   r'   r   r`   s         r+   test_redundant_binsr     s{     qcA3aS1#&A
8_PTC @O	k	9
 
: cnnQ/1CD 
:	9s   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   r9   rO   r   r   rE   r   r   r;   r   )r0   r1   re   r   r@   r^   r%   r&   r   rI   r(   )r'   rL   ra   r   r`   s        r+   !test_percentile_numeric_stabilityr     s    
#$,,R3A=>I	)		$	$R	+B
 	C @O	k	9
 
: cnnQ/;cmmA.3	 
:	9s   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 NrU   r   r   )r   r   r!   r3   )	r0   r1   r'   r   r&   r3   float16rV   r(   )r   r   r   X_inputr   expected_dtypera   s          r+   test_consistent_dtyper     s     hhq)G
/	C GGG "		w}}

: 	w	B88~%%%r6   input_dtypec                 N   t        j                  t        |       }t        d|dt         j                        }|j                  |       |j                  |      }t        d|dt         j                        }|j                  |       |j                  |      }t        ||       y r   )	r0   r1   r'   r   float32r&   r(   rV   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 .r6   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   rO   r   r   r   r   r   r   )r0   r1   re   r   r&   r   
set_paramsrJ   rI   testingr   rH   )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11 	

""?4LM6 !!''+B+M+M+S+SSSSr6   zencode, expected_namesrs   r   r9   feat_rp   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   r9   r   r9   r   rk   r   r   r   r   N)r   r&   r(   rangeget_feature_names_outrH   r	   )r   expected_namesr'   r   ra   rg   input_featuresoutput_namess           r+   *test_kbinsdiscrtizer_get_feature_names_outr   D  s    4 
k:z:A
1H	c!f  
q	B*/(3(QQCj(N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)
r0   randomRandomStaterandom_sampler   r&   r   r   r   rI   )r    global_random_seedr'   kbd_subsamplingkbd_no_subsamplings        r+   test_kbinsdiscretizer_subsampler   l  s     			01??LqPA:*+3	
 +=O
 /!!D!11 ""1%'9'D'DQ'Gdr6   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   rE   )r    r!   )r   r   r   r   r#   )r@   rA   rB   r   r&   )r'   expected_msgs     r+   /test_invalid_quantile_method_with_sample_weightr     sb    	k:z:A	@ 
 

 	*hGKK& 	L 	
	
 
 
s   !AA)1r\   numpyr0   r@   scipy.sparsesparsert   sklearnr   sklearn.preprocessingr   r   sklearn.utils._testingr   r   r   r	   r
   r'   markparametrizer,   r7   rD   rM   filterwarningsrS   rY   rb   rf   r   rn   rz   r   r   r   r   r   r   r   r   rV   r   r   r   floatr   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 #	
 #	
 #	
435436 , ''%%	 $		
 00/*	 $		
 (&&&	 $		
+"F #HI2 JG"H2 %FG- H-(E  3	["9:	; 78	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&F#AhF vhaf/& 0&	
  $Ah&F#AhF vhaf/& 0&	
 
58<8tF8_8<=#,5-,5$ %FG H8
A =s   "U"U>U