
    Mpj?                    &   S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
Jr  S SKJr  S SKJrJrJr  S SKJr  S rS	 r\R,                  R/                  S
/ SQ5      S 5       r\R,                  R/                  S
/ SQ5      S 5       r\R,                  R/                  S\R4                  \R6                  \R8                  /5      \R,                  R/                  S\R4                  \R6                  \R8                  /5      S 5       5       r\R,                  R/                  S\R4                  \R6                  \R8                  /5      S 5       rS rS r S r!S r"S r#\R,                  R/                  S/ SQ/ SQ/\RH                  " / SQ/ SQ/5      \RH                  " / SQ/ SQ/\%S9\RH                  " / SQS \RL                  S!//\%S9\RH                  " / SQS \'" S"5      S!//\%S9\RH                  " / S#Q/ S$Q/\%S9\RH                  " / S%QS \RL                  S//\%S9\RH                  " / S%QS \'" S"5      S//\%S9// S&QS'9S( 5       r(\R,                  R/                  S
/ SQ5      \R,                  R/                  S)S*S+/5      \R,                  R/                  S,SS-/5      S. 5       5       5       r)\R,                  R/                  S)S*S+/5      \R,                  R/                  S/S0S1/S2S1/S0S1/// S3Q/ S4Q/ S3Q/4S5S /S6S /S7S8/S6S /// S9Q/ S:Q/ S;Q/4/5      S< 5       5       r*S= r+\R,                  R/                  S,/ S>Q5      \R,                  R/                  S?/ S>Q5      S@ 5       5       r,\R,                  R/                  SASBSC/5      \R,                  R/                  SS2S0/\RH                  " SDSE/5      /5      SF 5       5       r-\R,                  R/                  SASBSC/5      SG 5       r.\R,                  R/                  SHSIS1/SJS1//SISJ/S1//\R^                  4\RH                  " S2S0/SKS0//5      S2SK/S0//\R`                  4\RH                  " SLS!/SMS!//\%S9SLSM/S!//\R^                  4\RH                  " SLS!/SMS!//5      SLSM/S!//\Rb                  4\RH                  " S2S0/\RL                  S0//5      S2\RL                  /S0//\R8                  4\RH                  " SL\RL                  /S\RL                  //\%S9SLS/\RL                  //\R^                  4\RH                  " SL\'" S"5      /S\'" S"5      //\%S9SLS/\'" S"5      //\R^                  4// SNQS'9SO 5       r2\R,                  R/                  S
/ SQ5      \R,                  R/                  SP\RH                  " S S8//\%S9Rf                  \RH                  " S SQ//\%S9Rf                  / SRQ/\R^                  4\RH                  " S2S0//SSS9Rf                  \RH                  " S2ST//SSS9Rf                  / SUQ/\Rh                  4\RH                  " S S8//\%S9Rf                  \RH                  " S SQ//\%S9Rf                  \RH                  " / SRQ5      /\R^                  4\RH                  " SS //\%S9Rf                  \RH                  " SS8//\%S9Rf                  / SVQ/\%4\RH                  " S S8//\%S9Rf                  \RH                  " S \RL                  //\%S9Rf                  / SWQ/\%4\RH                  " S S//\%S9Rf                  \RH                  " S \RL                  //\%S9Rf                  / SXQ/\%4// SYQS'9SZ 5       5       r5S[ r6\R,                  R/                  S\\
\/5      S] 5       r7S^ r8S_ r9\R,                  R/                  S`S-SaSb/4Sc/ SdQ4/ SeQSfSg/4// ShQS'9Si 5       r:Sj r;\R,                  R/                  S/ SQ/ SQ/\RH                  " / SkQ/ SlQ/5      \RH                  " / SQ/ SQ/\%S9// SmQS'9Sn 5       r<\R,                  R/                  SP\RH                  " S S8//\%S9Rf                  \RH                  " S SQ//\%S9Rf                  / SRQ/\R^                  4\RH                  " S2S0//SSS9Rf                  \RH                  " S2ST//SSS9Rf                  / SUQ/\Rh                  4\RH                  " S S8//\%S9Rf                  \RH                  " S SQ//\%S9Rf                  \RH                  " / SRQ5      /\R^                  4// SoQS'9Sp 5       r=Sq r>Sr r?\R,                  R/                  Ss\'\@/5      St 5       rASu rBSv rCSw rDSx rESy rFSz rG\R,                  R/                  S,ScS-/5      S{ 5       rH\R,                  R/                  S|\RL                  S\'" S"5      /5      S} 5       rI\R,                  R/                  S,SISK// S~Q/5      S 5       rJ\R,                  R/                  SS+S*/SS/S'9\R,                  R/                  S,S-/ SQ/S-S/S'9S 5       5       rK\R,                  R/                  S\\
\/5      S 5       rL\R,                  R/                  SSS00SS0SS0S0SS.STSS./5      \R,                  R/                  SS/ SQ//5      S 5       5       rM\R,                  R/                  S,ScS-S8//5      S 5       rN\R,                  R/                  S,S /SQ//5      S 5       rO\R,                  R/                  SSSK0SS0SS0SS0SS0SKSS.STSS./5      S 5       rP\R,                  R/                  S,S-S8//5      S 5       rQ\R,                  R/                  S,S /SQ//5      S 5       rRS rS\R,                  R/                  SSKS2S.SST0/5      S 5       rTS rUS rVS rWS rXS rY\R,                  R/                  SSS2S./5      S 5       rZ\R,                  R/                  SS0SKS./5      S 5       r[\R,                  R/                  S/ SQ5      \R,                  R/                  S/ SQ5      S 5       5       r\S r]\R,                  R/                  S|\RL                  S/5      S 5       r^S r_\R,                  R/                  S
/ SQ5      \R,                  R/                  SSS/5      S 5       5       r`\R,                  R/                  S
/ SQ5      S 5       ra\R,                  R/                  S
/ SQ5      S 5       rb\R,                  R/                  S
/ SQ5      S 5       rcS rdS re\R,                  R/                  S\RL                  S/5      S 5       rf\R,                  R/                  SSS/5      \R,                  R/                  S\RL                  S/5      S 5       5       rg\R,                  R/                  SP\RH                  " S \RL                  //\%S9Rf                  \RH                  " S S8//\%S9Rf                  \RH                  " S SQ\RL                  /\%S9/\R^                  4\RH                  " S \RL                  //\%S9Rf                  \RH                  " S S8//\%S9Rf                  \RH                  " S SQ\RL                  /\%S9/\R^                  4\RH                  " S\RL                  //\R8                  S9Rf                  \RH                  " SD//\R8                  S9Rf                  \RH                  " SSE\RL                  /5      /\R8                  4// SQS'9S 5       rh\R,                  R/                  S\\
\/5      S 5       ri\R,                  R/                  S\RH                  " S\RL                  SD//5      Rf                  \RH                  " S\RL                  S//5      Rf                  \RH                  " SE//5      4\RH                  " / SQ/5      Rf                  \RH                  " / SQ/5      Rf                  \RH                  " \RL                  //5      4\RH                  " S\RL                  S8//\%S9Rf                  \RH                  " S\RL                  S//5      Rf                  \RH                  " SQ//\%S94\RH                  " / SQ/\%S9Rf                  \RH                  " / SQ/5      Rf                  \RH                  " \RL                  //\%S94/5      S 5       rj\R,                  R/                  S\5      S 5       rkS rl\R,                  R/                  SSSM//\RH                  " SSM//SS9\RH                  " SSM//SS9/5      \R,                  R/                  SSLSM//\RH                  " SLSM//SS9\RH                  " SLSM//SS9/5      S 5       5       rmS rnS roS rp\R,                  R/                  SS+S*/5      S 5       rq\R,                  R/                  S\RH                  " S /S//\%S9S /\RL                  /\RL                  //\R                  " S/S/S//\%S94\RH                  " \RL                  /S/S //\%S9S /\RL                  /\RL                  //\R                  " S/\RL                  /\RL                  //\%S94/5      S 5       rsS rtS ruS rvS rwS rx\R,                  R/                  SSSK0SS0SS0SS0SS0SKSS.STSS./5      S 5       ryS rzS r{S r|S r}\R,                  R/                  SSS0SS00/5      S 5       r~\R,                  R/                  SSS20SS0/5      S 5       rS rS r\R,                  R/                  S\\
\/5      S 5       rS rg)    N)sparse)NotFittedError)OneHotEncoderOrdinalEncoder)is_scalar_nan)_convert_containerassert_allcloseassert_array_equal)CSR_CONTAINERSc                     [         R                  " / SQ/ SQ/5      n [        5       n[        SS9nUR                  U 5      nUR                  U 5      nUR                  S:X  d   eUR                  S:X  d   e[
        R                  " U5      (       d   e[
        R                  " U5      (       a   e[        UR                  5       / SQ/ SQ/5        [        UR                  5       U5        g )N         r   r   r   Fsparse_outputr      )              ?r   r   r   )r   r   r   r   r   )	nparrayr   fit_transformshaper   issparser
   toarray)X
enc_sparse	enc_denseX_trans_sparseX_trans_denses        e/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/sklearn/preprocessing/tests/test_encoders.py!test_one_hot_encoder_sparse_denser$      s     	)Y'(AJE2I--a0N++A.M6)))&(((??>****}----  #<>W"X ~--/?    c                  <   [         R                  " / SQ/ SQ/5      n [        SS9nUR                  U 5      nUR                  S:X  d   eUR
                  R                  [         R                  :X  d   eUR                  R                  [         R                  :X  d   eg )Nr   r   Tr   csr)	r   r   r   r   formatindicesdtypeint32indptr)r   r   r!   s      r#   -test_one_hot_encoder_sparse_index_array_int32r-   *   s    
)Y'(AT2J--a0N  E)))!!''288333  &&"((222r%   handle_unknown)ignoreinfrequent_if_existwarnc                    [         R                  " / SQ/ SQ/ SQ/5      n[         R                  " / SQ/5      n[        SS9nUR                  U5        [        R
                  " [        SS9   UR                  U5        S S S 5        [        U S9nUR                  U5        UR                  5       n[        UR                  U5      R                  5       [         R                  " / S	Q/5      5        [        X$5        g ! , (       d  f       N= f)
N)r   r   r   )r   r   r   )r   r   r   )   r   r   errorr.   Found unknown categoriesmatch)r   r   r   r   r   r   r   )r   r   r   fitpytestraises
ValueError	transformcopyr
   r   r	   r.   r   X2oh	X2_passeds        r#   #test_one_hot_encoder_handle_unknownrC   4   s    
)Y	23A	9+	B 
g	.BFF1I	z)C	D
R 
E 
n	5BFF1I	I
Y'')
567
 B" 
E	Ds   ,C<<
D
c                    [         R                  " / SQ5      R                  S5      n[         R                  " SS/5      R                  S5      n[        U S9nUR	                  U5        UR                  5       n[        UR                  U5      R                  5       [         R                  " / SQ/ SQ/5      5        [        X$5        g )N)11111111223334444)r   55555rF   r5   )r   r   r   r   r   r   r   r   )	r   r   reshaper   r9   r>   r
   r=   r   r?   s        r#   +test_one_hot_encoder_handle_unknown_stringsrM   L   s    
23;;GDA	7D/	"	*	*7	3B
 
n	5BFF1I	I
Y'')
&(<=>
 r%r%   output_dtypeinput_dtypec                    [         R                  " SS//U S9R                  n[         R                  " SS/SS//US9n[        SUS9n[	        UR                  U5      R                  5       U5        [	        UR                  U5      R                  U5      R                  5       U5        [        SUSS9n[	        UR                  U5      U5        [	        UR                  U5      R                  U5      U5        g )Nr   r   r*   auto)
categoriesr*   F)rS   r*   r   )	r   asarrayTr   r
   r   r   r9   r=   )rO   rN   r   
X_expectedrA   s        r#   test_one_hot_encoder_dtyperW   _   s     	

QF8;/11AaVaV,LAJ	&	=Br''*224jArvvay**1-557D	&E	RBr''*J7rvvay**1-z:r%   c                    [         R                  " S5      nUR                  SS/SS/S.5      n[        R                  " / SQ/ SQ/U S	9n[        U S	9n[        UR                  U5      R                  5       U5        [        UR                  U5      R                  U5      R                  5       U5        [        U S
S9n[        UR                  U5      U5        [        UR                  U5      R                  U5      U5        g )Npandasabr   r   ABr   r   r   r   r   r   r   r   rQ   F)r*   r   )r:   importorskip	DataFramer   r   r   r
   r   r   r9   r=   )rN   pdX_dfrV   rA   s        r#   !test_one_hot_encoder_dtype_pandasre   n   s    			X	&B<<sCj1v67D<6lKJ	\	*Br''-557Drvvd|--d3;;=zJ	\	?Br''-z:rvvd|--d3Z@r%   c                  `   [        5       n / SQ/ SQ/ SQ/ SQ/nU R                  U5        U R                  5       n[        / SQU5        U R                  / SQ5      n[        / SQU5        [        R
                  " [        SS	9   U R                  S
S/5        S S S 5        g ! , (       d  f       g = f)N)Maler   girlr   r   )Female)   rh   r   
   )rg   3   boy   r   )rg   [   rh         )	x0_Femalex0_Malex1_1x1_41x1_51x1_91x2_boyx2_girlx3_1x3_2x3_12x3_21x4_3x4_10x4_30)onetwothreefourfive)
one_Femaleone_Maletwo_1two_41two_51two_91	three_boy
three_girlfour_1four_2four_12four_21five_3five_10five_30z!input_features should have lengthr7   r   r   )r   r9   get_feature_names_outr
   r:   r;   r<   )encr   feature_namesfeature_names2s       r#   "test_one_hot_encoder_feature_namesr   ~   s    
/C!%"$		A GGAJ--/M	
" 	%* ../VWN	
" 	%* 
z)L	M!!5%.1 
N	M	Ms   B
B-c                      [        5       n [        R                  " SS//[        S9R                  nU R                  U5        U R                  5       n[        SS/U5        U R                  S/S9n[        SS	/U5        g )
Nu   c❤t1dat2rQ   u	   x0_c❤t1x0_dat2u   n👍meinput_featuresu   n👍me_c❤t1u   n👍me_dat2)r   r   r   objectrU   r9   r   r
   )r   r   r   s      r#   *test_one_hot_encoder_feature_names_unicoder      st    
/C
8V$%V466AGGAJ--/MY/?--i[-IM(.9=Ir%   c                     S n [        U S9n[        R                  " SS//[        S9R                  nUR                  U5        UR                  5       n[        SS/U5        UR                  S/S	9n[        S
S/U5        S n[        US9R                  U5      nSn[        R                  " [        US9   UR                  5         SSS5        g! , (       d  f       g= f)z=Check the behaviour of `feature_name_combiner` as a callable.c                 $    U S-   [        U5      -   $ )N_)reprfeaturecategorys     r#   name_combinerHtest_one_hot_encoder_custom_feature_name_combiner.<locals>.name_combiner   s    }tH~--r%   )feature_name_combinerNoneNrQ   z	x0_'None'x0_NonerZ   r   za_'None'a_Nonec                     g)Nr    r   s     r#   wrong_combinerItest_one_hot_encoder_custom_feature_name_combiner.<locals>.wrong_combiner   s    r%   zMWhen `feature_name_combiner` is a callable, it should return a Python string.r7   )r   r   r   r   rU   r9   r   r
   r:   r;   	TypeError)r   r   r   r   r   err_msgs         r#   1test_one_hot_encoder_custom_feature_name_combinerr      s    . m
<C
64.!022AGGAJ--/MY/?--cU-CM
H-}= n
=
A
A!
DCW  
y	0!!# 
1	0	0s   6C
Cc                     [         R                  " SS//5      R                  n [        5       nUR	                  / SQ/S9  UR                  5       S   / SQ/:X  d   eUR                  U 5      R                  5       R                  S:X  d   eUR	                  / SQ/S9  UR                  U 5      R                  5       R                  S:X  d   eg )	Nr   r   )r   r   r   r   rS   rS   )r   r3   )r   r   r   r   r3   r   )	r   r   rU   r   
set_params
get_paramsr   r   r   )r   rA   s     r#   test_one_hot_encoder_set_paramsr      s    
1a&A	BMMl^M,==?<(\N:::A&&(..&888MMo.M/A&&(..&888r%   c                    [        SS9nUR                  U 5      n[        SSS9nUR                  U 5      n[        UR                  5       U5        [        R
                  " U5      (       a  UR                  S:X  d   eUR                  5       $ )NrR   r   FrS   r   r'   )r   r   r	   r   r   r   r(   )r   r   Xtr1Xtr2s       r#   check_categorical_onehotr      st    
6
*CQD
6
?CQDDLLND)??4  T[[E%999<<>r%   r   defr   7   abcr   r   )rk   r   r   )r   r   r   )r[   r]   cat)rZ   r^   r   rQ   )r[   r   r   rZ   r   nan)Nr   r   )rZ   r   r   )Nr   N)mixednumericr   z	mixed-nanzmixed-float-nanz
mixed-Nonezmixed-None-nanzmixed-None-float-nan)idsc                 Z   [        [        R                  " U 5      S S 2S/4   5      n[        USS/SS//5        [        [        R                  " U 5      S S 2SS/4   5      n[        U/ SQ/ SQ/5        [	        SS9R                  U 5      n[        UR                  5       / SQ/ SQ/5        g )	Nr   r   )r   r   r   r   r   r   r   r   rR   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r	   r   r   r   )r   Xtrs     r#   test_one_hot_encoderr      s    0 #288A;q1#v#6
7CC1a&1a&)*
"288A;q1a&y#9
:CC,56
6
*
8
8
;CCKKMO_#EFr%   sparse_FTdropfirstc                    / SQ/ SQ/ SQ/n[        XS9nUR                  U5      n[        R                  " U[        S9n[        UR                  U5      U5        SS/SS/S	S//n[        US
US9nUR                  U5      n[        R                  " U5      n[        UR                  U5      U5        Uc  / SQ/ SQ/ SQ/n[        UU SS/SS// SQ/S9nUR                  U5      n[        R                  " U[        S9nS US'   [        UR                  U5      U5        SS/SS/S	S//n[        USS/SS//U S9nUR                  U5      n[        R                  " U[        S9nS US'   S US S 2S4'   [        UR                  U5      U5        [        R                  " / SQ/ SQ/5      n[        R                  " S5      n[        R                  " [        US9   UR                  U5        S S S 5        g ! , (       d  f       g = f)Nr   r   )r   r   r   r   r   rQ   r   r   r   r   rR   )r   rS   r   r   r   )6   r   8   )r   r.   rS   )r   r   r   r   )r   rS   r.   r   r   r   r   r   r   )Shape of the passed X data is not correctr7   )r   r   r   r   r   r
   inverse_transformreescaper:   r;   r<   )r.   r   r   r   r   X_trexpmsgs           r#   test_one_hot_encoder_inverser     s    
8A
g
9CQD
((1F
#Cs,,T2C8
R1b'Ar7#A
g&t
LCQD
((1+Cs,,T2C8| ^^<!)A=

   #hhq'D	3006< Wq"g2w'!AR))

   #hhq'D	AqD	3006< 88Y	*+D
))?
@C	z	-d# 
.	-	-s   G33
Hz
X, X_transr   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                     [        US9R                  U 5      nSnU(       a  [        US5      n[        R                  " [
        US9   UR                  U5        SSS5        g! , (       d  f       g= f)zCheck that `inverse_transform` raise an error with unknown samples, no
dropped feature, and `handle_unknown="error`.
Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/14934
r   zqSamples \[(\d )*\d\] can not be inverted when drop=None and handle_unknown='error' because they contain all zerosr   r7   N)r   r9   r   r:   r;   r<   r   )r   X_transr   r   r   s        r#   ?test_one_hot_encoder_inverse_transform_raise_error_with_unknownr   K  s]    & g
.
2
21
5C	A 
 $Wh7	z	-g& 
.	-	-s   A""
A0c                      [         R                  " SS/SS/SS//[        S9n [        SSS	9nUR	                  U 5      n[        UR                  U5      U 5        g )
Nrg   r   ri   r   r   rQ   	if_binaryFr   r   )r   r   r   r   r   r
   r   )r   oher   s      r#   &test_one_hot_encoder_inverse_if_binaryr   k  sV    
61+!}xm<FKA
[
>CQDs,,T2A6r%   )r   r   N
reset_dropc                 ~   [         R                  " SS/SS/SS//[        S9n[        U SS9nUR	                  U5        UR                  U5      nUR                  5       nUR                  US	9  [        UR                  U5      U5        [        UR                  U5      U5        [        UR                  5       U5        g )
Nrg   r   ri   r   r   rQ   Fr   r   )r   r   r   r   r9   r=   r   r   r
   r   r	   )r   r   r   r   r   r   s         r#   test_one_hot_encoder_drop_resetr   r  s     	61+!}xm<FKA
T
7CGGAJ==D--/MNN
N#s,,T2A6CMM!$d+s002MBr%   methodr9   r         @      @c                     [        5       nSn[        R                  " [        US9   [	        X!5      " U 5        S S S 5        g ! , (       d  f       g = f)Nz'Expected 2D array, got 1D array insteadr7   )r   r:   r;   r<   getattr)r   r   rA   r   s       r#   test_X_is_not_1Dr     s7     
B
3C	z	-A 
.	-	-s   A
Ac                    [         R                  " S5      nUR                  / SQ5      n[        5       nS[	        U5       S3n[         R
                  " [        US9   [        X05      " U5        S S S 5        g ! , (       d  f       g = f)NrY   )   r   r3   r   z+Expected a 2-dimensional container but got z	 instead.r7   )r:   ra   Seriesr   typer;   r<   r   )r   rc   r   rA   r   s        r#   test_X_is_not_1D_pandasr     s`    			X	&B
		,A	B7Qy	
JC	z	-A 
.	-	-s   A77
BzX, cat_exp, cat_dtyper   r   r   r]   r^   )r   r   r   stringzmissing-floatzmissing-np.nan-objectzmissing-float-nan-objectc                    X S S S2   4 H  n[        SS9nUR                  U5        [        UR                  [        5      (       d   e[        UR                  U5       H  u  pVUR                  5       n[        US   5      (       a$  [        US   5      (       d   eUS S US S :X  d   eOUR                  5       U:X  d   e[        R                  " UR                  U5      (       a  M   e   M     g )NrI   rR   r   )r   r9   
isinstancecategories_listziptolistr   r   
issubdtyper*   )r   cat_exp	cat_dtypeXir   resr   res_lists           r#   test_one_hot_encoder_categoriesr    s    F DbD'lv.#//40000COOW5HCzz|HSW%%$Xb\2222}CR000zz|s***==I6666 6 r%   zX, X2, cats, cat_dtypedrZ   r[   cint64r3   r   r   r   )NrZ   z)rZ   r[   r
  )rZ   Nr
  )r   r   zobject-stringzobject-string-nonezobject-string-nanzobject-None-and-nanc                    [        US9n[        R                  " / SQ/ SQ/5      n[        UR	                  U 5      R                  5       U5        [        UR                  S   5      [        US   5      :X  d   eUR                  S   R                  5       [        US   5      :X  d   eUR                  S   R                  U:X  d   e[        US9n[        R                  " [        SS9   UR                  U5        S S S 5        [        X$S9n[        R                  " / SQ/ SQ/5      n[        UR                  U5      R                  U5      R                  5       U5        g ! , (       d  f       Nl= f)	Nr   r   r   r   r   r   r   r   r6   r7   rS   r.   )r   r   r   )r   r   r   r
   r   r   r   rS   r   r   r*   r:   r;   r<   r9   r=   )r   r@   catsr   r.   r   r   s          r#   )test_one_hot_encoder_specified_categoriesr    s$   f 4
(C
((O_5
6Cs((+335s;q!"d47m333??1$$&$tAw-777 ??1##y000 4
(C	z)C	D 
E
4
GC
((O_5
6Cswwr{,,R088:C@	 
E	Ds   )E!!
E/c                     [         R                  " SS//[        S9R                  n [	        / SQ/S9n[         R                  " / SQ/ SQ/5      n[        UR                  U 5      R                  U 5      R                  5       U5        [        UR                  U 5      R                  5       U5        UR                  S   R                  5       / SQ:X  d   e[         R                  " UR                  S   R                  [         R                  5      (       d   e[         R                  " S	S
//5      R                  n [	        / SQ/S9nSn[        R                   " ["        US9   UR                  U 5        S S S 5        g ! , (       d  f       g = f)NrZ   r[   rQ   )r[   rZ   r  r   r  r  r   r   r   )r   r   r   z%Unsorted categories are not supportedr7   )r   r   r   rU   r   r
   r9   r=   r   r   r   r   r   r*   object_r:   r;   r<   )r   r   r   r   s       r#   (test_one_hot_encoder_unsorted_categoriesr    s!   
3*V,..A
O#4
5C
((O_5
6Cswwqz++A.668#>s((+335s;??1$$&/999==+112::>>>> 	1a&A
I;
/C
1C	z	-! 
.	-	-s   "E==
FEncoderc                 4   [         R                  " S[         R                  S/5      /nU " US9n[         R                  " SS//[        S9R                  n[
        R                  " [        SS9   UR                  U5        SSS5        g! , (       d  f       g= f)zTest encoder for specified categories that nan is at the end.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/27088
r   r   r   rQ   zNan should be the last elementr7   N)	r   r   r   r   rU   r:   r;   r<   r9   r  r  r   r   s       r#   ,test_encoder_nan_ending_specified_categoriesr     sl     HHa^$%D
T
"C
1a&(**A	z)I	J
 
K	J	Js   .B		
Bc                     [         R                  " SS/SS//[        S9R                  n [	        / SQ/ SQ/S9n[         R                  " / S	Q/ S
Q/5      n[        UR                  U 5      R                  5       U5        UR                  S   R                  5       / SQ:X  d   e[         R                  " UR                  S   R                  [         R                  5      (       d   eUR                  S   R                  5       / SQ:X  d   e[         R                  " UR                  S   R                  [         R                  5      (       d   eg )NrZ   r[   r   r   rQ   r  )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   rU   r   r
   r   r   r   r   r   r*   r  r   r   r   s      r#   7test_one_hot_encoder_specified_categories_mixed_columnsr  .  s    
3*q!f%V466A
OY#?
@C
((24RS
TCs((+335s;??1$$&/999==+112::>>>>??1$$&)333==+112::>>>>r%   c                      [         R                  " S5      n U R                  SS/SS/S.5      n[        U5      n[	        U/ SQ/ SQ/5        g )	NrY   rZ   r[   r   r   r\   r_   r`   )r:   ra   rb   r   r	   )rc   rd   r   s      r#   test_one_hot_encoder_pandasr  ;  sF    			X	&B<<sCj1v67D
"4
(CC,56r%   zdrop, expected_namesx0_cx2_br   )r  x1_2r  )r  r   r[   x0_bx2_a)r   binarymanualc                 ~    / SQ/ SQ/n[        U S9nUR                  U5        UR                  5       n[        X5        g )N)r  r   rZ   )r[   r   r[   r   )r   r9   r   r
   )r   expected_namesr   r   r   s        r#   'test_one_hot_encoder_feature_names_dropr&  D  s9     
&A
T
"CGGAJ--/M~5r%   c                     SS/SS/SS//n [         R                  " / SQ/ SQ/ SQ/5      n[         R                  " S S	/5      n[        S
SS9nUR                  U 5      n[	        UR
                  U5        [        XA5        SS/SS/SS//n [         R                  " SS/SS/SS//5      n[         R                  " S	S /5      n[        S
SS9nUR                  U 5      n[	        UR
                  U5        [        XA5        g )Nrk   yes   norq   )r   r   r   r   rK   )r   r   r   r   r   r   Fr   truerZ   falser   r   )r   r   r   r   r
   	drop_idx_r	   )r   expectedexpected_drop_idxr   results        r#   *test_one_hot_encoder_drop_equals_if_binaryr1  V  s    
er4j2u+.Axx	35IJH $+
[
>Cq!Fs}}&78F% ###7Axx#sc3Z#s<=H!T+
[
>Cq!Fs}}&78F%r%   )rk   r   r   )r)  r   r   )r   r   r   c                     [        5       n[        R                  " / SQ/ SQ/SS9n[        UR	                  U 5      UR                  S5      5        [        SS9n[        UR	                  U 5      U5        g )Nr   r   r   r   r   r   r  rQ   float64)r   r   r   r
   r   astyper  s      r#   test_ordinal_encoderr7  n  s^     
C
((Iy)
9Cs((+SZZ	-BC
w
'Cs((+S1r%   )r   r   zobject-string-catc                 
   [        US9n[        R                  " S/S//5      n[        UR	                  U 5      U5        [        UR                  S   5      [        US   5      :X  d   eUR                  S   R                  5       [        US   5      :X  d   eUR                  S   R                  U:X  d   e[        US9n[        R                  " [        SS9   UR                  U5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   r   r6   r7   )r   r   r   r
   r   r   rS   r   r   r*   r:   r;   r<   r9   )r   r@   r  r   r   r   s         r#   )test_ordinal_encoder_specified_categoriesr9    s    2 D
)C
((SEC5>
"Cs((+S1q!"d47m333??1$$&$tAw-777 ??1##y000 D
)C	z)C	D 
E	D	Ds   C44
Dc                     / SQ/ SQ/n [        5       nUR                  U 5      n[        R                  " U [        S9n[        UR                  U5      U5        [        R                  " / SQ/ SQ/5      n[        R                  " S5      n[        R                  " [        US9   UR                  U5        S S S 5        g ! , (       d  f       g = f)Nr   r   rQ   )r   r   r   r   r_   r   r7   )r   r   r   r   r   r
   r   r   r   r:   r;   r<   )r   r   r   r   r   s        r#   test_ordinal_encoder_inverser;    s    	(A

CQD
((1F
#Cs,,T2C8 88\<01D
))?
@C	z	-d# 
.	-	-s   #B>>
Cc                     [        SSS9n [        R                  " SS/SS/SS	//[        S
9n[        R                  " SS/SS/SS//[        S
9nU R	                  U5        U R                  U5      n[        R                  " SS/SS/SS//SS
9n[        X45        U R                  U5      n[        R                  " SS /S S/SS//[        S
9n[        XV5        g )Nuse_encoded_valuer.   unknown_valuerZ   xr[   yr  r
  rQ   xyblar   r   r   r  )r   r   r   r   r9   r=   r
   r   )r   X_fitr   X_trans_encr   X_trans_invinv_exps          r#   +test_ordinal_encoder_handle_unknowns_stringrI    s    
(;2
NCHHsCj3*sCj9HEhhdeS\C:>fMGGGEN--(K
((QGb!Wq!f-W
=C{(''4KhhddC[3*=VLG{,r%   r*   c                    [        SSS9n[        R                  " SS/SS/SS	//U S
9n[        R                  " SS/SS/SS//U S
9nUR                  U5        UR	                  U5      n[        R                  " SS/SS/SS//SS
9n[        XE5        UR                  U5      n[        R                  " SS /S S/SS//[        S
9n[        Xg5        g )Nr=  r?  r      r      r   	   rQ   rn      r   r  )r   r   r   r9   r=   r
   r   r   )r*   r   rE  r   rF  r   rG  rH  s           r#   ,test_ordinal_encoder_handle_unknowns_numericrP    s    
(;4
PCHHq!fq!fq!f-U;EhhB"a1a&1?GGGEN--(K
((QIay1a&1
AC{(''4KhhD	D!9q!f5VDG{,r%   c                      [        S[        R                  S9n [        R                  " S/S/S//5      nU R	                  U5        U R                  S/S/S//5      n[        US/S/[        R                  //5        g )Nr=  r?  r   r   r   r3   r   )r   r   r   r   r9   r=   r
   )r   rE  r   s      r#   (test_ordinal_encoder_handle_unknowns_nanrR    so     (;266
RCHHqcA3_%EGGENmmaS1#sO,Gw!qcBFF8 45r%   c                      [        S[        R                  [        S9n [        R                  " S/S/S//5      n[
        R                  " [        SS9   U R                  U5        S S S 5        g ! , (       d  f       g = f)Nr=  )r.   r@  r*   r   r   r   z'dtype parameter should be a float dtyper7   )	r   r   r   intr   r:   r;   r<   r9   )r   rE  s     r#   8test_ordinal_encoder_handle_unknowns_nan_non_float_dtyperU    s\     *"&&C HHqcA3_%E	z)R	S 
T	S	Ss   A..
A<c                      [         R                  " / SQ/[        S9R                  n / SQn[	        US9nSn[
        R                  " [        US9   UR                  U 5        S S S 5        g ! , (       d  f       g = f)N)LowMediumHighrX  rW  rQ   )rW  rX  rY  r   z*Shape mismatch: if categories is an array,r7   )	r   r   r   rU   r   r:   r;   r<   r9   )r   r  r   r   s       r#   +test_ordinal_encoder_raise_categories_shaperZ    sU    
<=VLNNA$D
D
)C
6C	z	-
 
.	-	-s   A**
A8c            	         [        SS9n [        R                  " / SQ/ SQ/SS9n[        R                  " SS/S	S
//SS9[        R                  " SS/S	S
//SS9[        R                  " SS/SS//5      [        R                  " SS/SS//5      [        R                  " SS/S	S//SS94 H  nU R                  U5        [	        [        S5       Vs/ s H(  o0R                  U   R                  UR                  :H  PM*     sn5      (       d   e[        U R                  U5      R                  5       U5        M     SS/S	S
//nU R                  U5        [	        [        S5       Vs/ s H?  n[        R                  " U R                  U   R                  [        R                  5      PMA     sn5      (       d   e[        U R                  U5      R                  5       U5        SS/S	S//nU R                  U5        [	        [        S5       Vs/ s H  o0R                  U   R                  S:H  PM      sn5      (       d   e[        U R                  U5      R                  5       U5        g s  snf s  snf s  snf )NrR   r   )r   r   r   r   )r   r   r   r   r5  rQ   r   r   r   r3   r  rZ   r[   r  r     a   b   c   dr   )r   r   r   r9   allranger   r*   r
   r=   r   r   integer)r   r   r   is       r#   test_encoder_dtypesrd    s   
6
*C
(((*>?y
QC 	1a&1a&!1
1a&1a&!3
3*sCj)*
4,t-.
1c(QH%X6 	
qJAOOA&,,7JKKKK3==+335s; Q!QAGGAJUSTXVXcooa066

CXVWWWWs}}Q'//137
SAs8AGGAJeAhGh"((H4hGHHHHs}}Q'//137 K
 W
 Hs   /I+
&AI0%I5c                     [         R                  " S5      n [        SS9n[        R                  " / SQ/ SQ/SS9nU R                  SS	/S
S/SS/S.SS9nUR                  U5        [        [        S	5       Vs/ s H  oAR                  U   R                  S:H  PM      sn5      (       d   e[        UR                  U5      R                  5       U5        U R                  SS	/SS/SS/S.5      n/ SQnUR                  U5        [        [        S
5       Vs/ s H   oAR                  U   R                  XT   :H  PM"     sn5      (       d   e[        UR                  U5      R                  5       U5        g s  snf s  snf )NrY   rR   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r5  rQ   r   r   r   r3   r   r   r]   r^   Cr  rZ   r[   r   r   )r  r   r5  )r:   ra   r   r   r   rb   r9   r`  ra  r   r*   r
   r=   r   )rc   r   r   r   rc  expected_cat_types         r#   test_encoder_dtypes_pandasri    sO   			X	&B
6
*C
((	')GHC
 	Aq6AaV<GLAGGAJU1XFX"((G3XFGGGGs}}Q'//137
Aq6c
#sDEA6GGAJ%PQ(S(Q"((,=,@@(STTTTs}}Q'//137 G Ts   8%E5'E:c                      [        5       n SS/SS//n[        R                  " 5          [        R                  " S5        U R	                  U5        S S S 5        g ! , (       d  f       g = f)Nrg   r   ri   r   r4   )r   warningscatch_warningssimplefilterr   )r   r   s     r#   test_one_hot_encoder_warningrn  '  sO    
/C
!xm$A		 	 	"g&! 
#	"	"s   (A
A'c                 @   SS/SS/SS//n[        U SSSS/SS//S9nUR                  U5        S	S//n[        R                  " SS//5      nS
n[        R
                  " [        US9   UR                  U5      nSSS5        [        WU5        g! , (       d  f       N= f)z,Check handle_unknown='warn' works correctly.rZ   r   r[   r   r   Fr1   r   r   r.   rS   r  Found unknown categories in columns \[0\] during transform. These unknown categories will be encoded as the infrequent category.r7   N	r   r9   r   r   r:   warnsUserWarningr=   r	   )r   r   r   X_testrV   warn_msgr   s          r#   test_ohe_handle_unknown_warnrw  /  s     qC8c1X&A
#JA'	C GGAJAhZFAq6(#J	  
 
k	2--' 
3GZ( 
3	2s   (B
Bmissing_valuec                 (   SSSSU /n[        US9n/ SQ/ SQSSSSU //nUR                  U5      R                  5       n/ SQ/ S	Q/ S
Q/n[        XE5        UR                  UL d   e[        UR                  UR                  5       VVs/ s H	  u  pgXg   PM     nnnUR                  U5      n	[        R                  " U[        S9n
[        US   5      (       a  [        US S US S 5        [        US   5      (       d   e[        US   5      (       d   e[        U
S S 2S S24   U	S S 2S S24   5        [        U
SS S24   U	SS S24   5        [        U
S   5      (       d   e[        U	S   5      (       d   eg [        X5        [        X5        g s  snnf )Nr   rn   r   r   r   )r   rn   r   r   rZ   )r   rn   r   r   rZ   )r   r   r   r   r   )r   r   r   r   r   r   rQ   rI   )rI   rI   )r   r   r   r
   r   r   r   r-  r   r   r   r   r   )rx  cats_to_dropr   r   transr   r   r   dropped_catsX_inv_transX_arrays              r#    test_one_hot_encoder_drop_manualr  J  s   2q"m4L
\
*C	Ar=)	A
 a ((*EO_
=Cu"88|### *-S__cmm)L)L)L   ''.Khhq'G \"%&&<,l3B.?@\"-....\"-....71crc6?K3B3,?@ 	72ss7+[SbS-ABWV_----[01111<670)s   F)r   r   rj   rZ   c                     [        U S9nSn[        R                  " [        US9   UR	                  / SQ/ SQ/ SQ/5        S S S 5        g ! , (       d  f       g = f)Nr   z-`drop` should have length equal to the numberr7   r   r   )r   r   ;   )r   r:   r;   r<   r9   )r   r   r   s      r#   test_invalid_drop_lengthr  o  s>    
T
"C=G	z	1@A 
2	1	1s   A		
Adensityr   denserZ   r   r[   r#  c                    [        U S9n[        XS9n/ SQ/ SQ/nUR                  U5        UR                  U5        [        UR                  UR                  5        US:X  a  [        UR                  S5        O>[        XR                  UR                  5       H  u  pVnU[        U5         U:X  a  M   e   [        UR                  [        R                  5      (       d   eUR                  R                  [        :X  d   eg )Nr   r   )r  r   rZ   r  r   r   )r   r9   r
   r   r-  r   rT  r   r   ndarrayr*   r   )r  r   ohe_baseohe_testr   drop_catdrop_idxcat_lists           r#   test_categoriesr  w  s     73H7>H	&ALLOLLOx++X-A-ABw8--q1,/$$h&:&:-
(H CM*h666-
 h(("**5555##v---r%   c                 d    U " 5       R                  5       R                  R                  (       d   eg )N)__sklearn_tags__
input_tagscategorical)r  s    r#   "test_encoders_has_categorical_tagsr    s"    9%%'22>>>>r%   kwargsmax_categoriesmin_frequency   g(\?r   )r  r  rn   rS   rR   rZ   r[   r  r  c                 2   [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /5      R                  n[        SUS	S
S.U D6R	                  U5      n[        UR                  / SQ/5        S/S/S/S/S//n[         R                  " SS/SS/SS/SS/SS//5      nUR                  U5      n[        XV5        S/S/S-  -    Vs/ s H  ow/PM     nnUR                  U5      n	[        X5        UR                  5       n
[        SS/U
5        gs  snf )zlTest that different parameters for combine 'a', 'c', and 'd' into
the infrequent category works as expected.rZ   r   r[   r)  r  rk   r  r   r0   F)rS   r.   r   rZ   r  r  er   r   infrequent_sklearnr3   r   x0_infrequent_sklearnNr   r   r   rU   r   r9   r
   infrequent_categories_r=   r	   r   r   )r  rS   X_trainr   ru  r.  r   colexpected_invX_invr   s              r#   test_ohe_infrequent_two_levelsr    sF    hh	SEBJ.#;seaiGHIKKG
 , 	
 
c'l  s11O3DEecUSEC53%0Fxx!Q!Q!Q!Q!Q@AHmmF#GH&&)U.B-Ca-G%GH%GcE%GLH!!'*E|+--/M 78-H Is   Dc                    [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /5      R                  n[        S	S
SU S9R	                  U5      nUR
                  S   UR                  S      S:X  d   e[         R                  " S/S//5      nUR                  U5      n[        S/S//U5        UR                  5       n[        S/U5        UR                  U5      n[        S/S//U5        g)z3Test two levels and dropping the frequent category.rZ   r   r[   r)  r  rk   r  r   r0   Fr   r.   r   r  r   r   r   r  r  N)r   r   rU   r   r9   r   r-  r=   r	   r   r
   r   )r   r  r   ru  r   r   	X_inverses          r#   ,test_ohe_infrequent_two_levels_drop_frequentr    s    hh	SEBJ.#;seaiGHIKKG
,	
 
c'l  ??1cmmA./3666XXusen%FmmF#GaS1#J(--/M/0-@%%g.I 456	Br%   c                 ,   [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /5      R                  n[        S	S
SU S9nSU S   < S3n[        R
                  " [        US9   UR                  U5        SSS5        g! , (       d  f       g= f)z[Test two levels and dropping any infrequent category removes the
whole infrequent category.rZ   r   r[   r)  r  rk   r  r   r0   Fr   r  Unable to drop category r   ( from feature 0 because it is infrequentr7   Nr   r   rU   r   r:   r;   r<   r9   r   r  r   r   s       r#   5test_ohe_infrequent_two_levels_drop_infrequent_errorsr    s    
 hh	SEBJ.#;seaiGHIKKG
,	C %T!WK/W
XC	z	- 
.	-	-   *B
BrN  gQ?g{Gz?rM  c                 
   [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /5      R                  n[        SS	S
S.U D6R	                  U5      n[        UR                  SS//5        S/S/S/S/S//n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      nUR                  U5      n[        XE5        S/S/S/S/S//nUR                  U5      n[        Xg5        UR                  5       n[        / SQU5        g)zgTest that different parameters for combing 'a', and 'd' into
the infrequent category works as expected.rZ   r   r[   r)  r  rk   r  r   r0   Fr.   r   r  r4  r   r   r   r3  r  )r   r  r  Nr   r  )	r  r  r   ru  r.  r   r  r  r   s	            r#    test_ohe_infrequent_three_levelsr    s#     hh	SEBJ.#;seaiGHIKKG
 ,EEK	c'l  s11S#J<@ecUSEC53%0FxxIy)YOPHmmF#GH& 
				L !!'*E|+--/M@-Pr%   c                 "   [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /5      R                  n[        S	S
SU S9R	                  U5      n[         R                  " S/S/S//5      n[        SS/SS/SS//UR                  U5      5        UR                  SS9R	                  U5        Sn[        R                  " [        US9   UR                  S/S//5      nSSS5        [        SS/SS//W5        g! , (       d  f       N!= f)z5Test three levels and dropping the frequent category.rZ   r   r[   r)  r  rk   r  r   r0   Fr  r   r   r/   r5   r6   r7   r  N)r   r   rU   r   r9   r	   r=   r   r:   rs  rt  )r   r  r   ru  r   r   s         r#   .test_ohe_infrequent_three_levels_drop_frequentr  
  s    hh	SEBJ.#;seaiGHIKKG
,	
 
c'l  XXusecU+,FaVaVaV,cmmF.CD NN(N+//8
$C	k	---#/ 
. aVaV$g. 
.	-s   D  
Dc                 ,   [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /5      R                  n[        S	S
SU S9nSU S   < S3n[        R
                  " [        US9   UR                  U5        SSS5        g! , (       d  f       g= f)z7Test three levels and dropping the infrequent category.rZ   r   r[   r)  r  rk   r  r   r0   Fr  r  r   r  r7   Nr  r  s       r#   7test_ohe_infrequent_three_levels_drop_infrequent_errorsr  "  s     hh	SEBJ.#;seaiGHIKKG
,	C %T!WK/W
XC	z	- 
.	-	-r  c                     [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /5      R                  n [        S	S
SS9R	                  U 5      n[        UR                  SS//5        S/S/S/S//n[         R                  " / SQ/ SQ/ SQ/ SQ/5      nUR                  U5      n[        X45        S//nSn[        R                  " [        US9   UR                  U5        SSS5        g! , (       d  f       g= f)ziTest that different parameters for combining 'a', and 'd' into
the infrequent category works as expected.rZ   r   r[   r)  r  rk   r  r   r4   F)r.   r   r  r4  r  r3  badz.Found unknown categories \['bad'\] in column 0r7   N)r   r   rU   r   r9   r
   r  r=   r	   r:   r;   r<   )r  r   ru  r.  r   r   s         r#   (test_ohe_infrequent_handle_unknown_errorr  2  s     hh	SEBJ.#;seaiGHIKKG
eA	c'l  s11S#J<@ ecUSEC5)FxxIy)DEHmmF#GH& gYF
;C	z	-f 
.	-	-s   C00
C>c                    [         R                  " S/S-  S/S-  -   /[        S9R                  n[	        S/ SQ/SSS	.U D6R                  U5      nS/S
/S/S/S//n[         R                  " SS/SS/SS/SS/SS//5      nUR                  U5      n[        XE5        SSS//nS/S//nU H@  nUR                  US9R                  U5        [        S/S//UR                  U5      5        MB     g)zG'a' is the only frequent category, all other categories are infrequent.rZ   r   r  rq   rQ   r  r  rZ   r[   Fr0   rS   r   r.   r[   r  r  r   r   r   r   r   Nr   )	r   r   r   rU   r   r9   r=   r	   r   )r  r  r   ru  r.  r   dropsr   s           r#   5test_ohe_infrequent_two_levels_user_cats_one_frequentr  J  s    hh	SEBJ./v>@@G
 (), 	
 
c'l  ecUSEC53%0Fxx!Q!Q!Q!Q!Q@AHmmF#GH& kC5)EecU^FD!%%g.!qc
CMM&$9: r%   c                     [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /[        S	9R                  n [	        / S
Q/SSSS9R                  U 5      n[        UR                  / SQ/5        S/S/S/S/S//n[         R                  " SS/SS/SS/SS/SS//5      nUR                  U5      n[        X45        S/S/S-  -    Vs/ s H  oU/PM     nnUR                  U5      n[        Xg5        gs  snf )zFTest that the order of the categories provided by a user is respected.rZ   r   r[   r)  r  rk   r  r   rQ   r  Fr0   r   rS   r   r.   r  )r  r  rZ   r  r   r   r  r3   Nr   r   r   rU   r   r9   r
   r  r=   r	   r   )r  r   ru  r.  r   r  r  r  s           r#   (test_ohe_infrequent_two_levels_user_catsr  f  s(   hh
cURZ	3%"*	,uqy	89a  (),	
 
c'l  s11O3DEecUSEC53%0Fxx!Q!Q!Q!Q!Q@AHmmF#GH& '*U.B-Ca-G%GH%GcE%GLH!!'*E|+ Is   C9c                     [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /[        S	9R                  n [	        / S
Q/SSSS9R                  U 5      n[        UR                  SS//5        S/S/S/S/S//n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      nUR                  U5      n[        X45        S/S/S/S/S//nUR                  U5      n[        XV5        g)zTest that the order of the categories provided by a user is respected.
In this case 'c' is encoded as the first category and 'b' is encoded
as the second one.rZ   r   r[   r)  r  rk   r  r   rQ   r  r  r[   rZ   Fr0   r  r  r3  r  r4  r  Nr  )r  r   ru  r.  r   r  r  s          r#   *test_ohe_infrequent_three_levels_user_catsr    s   
 hh
cURZ	3%"*	,uqy	89a  (),	
 
c'l  s11S#J<@ecUSEC53%0FxxIy)YOPHmmF#GH&
 
				L !!'*E|+r%   c                      [         R                  / SQ/ SQ4   n [        SSSS9nUR                  U 5        SS/SS//nUR	                  U5      n[        U/ S	Q/ S
Q/5        g)z]Test infrequent categories where feature 0 has infrequent categories,
and feature 1 does not.	r   r   r   r   r   r   r   r   r   	r   r   r   r   r   r   r   r   r   r   r   F)r  r   r   r   r   r   r   r   r   )r   r   r   r   N)r   c_r   r9   r=   r	   )r   r   ru  r   s       r#   test_ohe_infrequent_mixedr    sc     	)+FFGA
q{%
PCGGAJ!fq!fFmmF#G GlL9:r%   c            
      J   [         R                  / SQ/ SQ/ SQ4   n [        SSSS9nUR                  U 5      R	                  5       n[        UR                  S   S	S
/5        [        UR                  S	   S	S/5        [        UR                  S
   S5        UR                  5       n[        / SQU5        / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/	n[        XB5        / SQ/ SQ/nUR                  U5      n/ SQ/ SQ/n[        XFR	                  5       5        UR                  U5      n[         R                  " / SQ/ SQ/[        S9n[        X5        [        SSSS9R                  U 5      n[        R                  " [         SS9   UR                  U5        SSS5        / S Q/ S!Q/nUR                  U5      n/ S"Q/ SQ/n[        XFR	                  5       5        UR                  U5      n[         R                  " / S#Q/ S$Q/[        S9n[        X5        g! , (       d  f       N= f)%z?Test infrequent categories with feature matrix with 3 features.r  )	r   r   r   r   r   rk   r   r   r   )	r   r   r   r   r   r   r   r   r   rR   r   r0   rS   r  r.   r   r   r   rk   N)x0_0x0_3r  x1_0x1_5x1_infrequent_sklearnx2_0x2_1)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   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   )r3   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r  N)r  r   NrQ   r4   r6   r7   )r   r   r   )r   rk   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   r9   r:   r;   r<   )	r   r   r   r   r.  ru  X_test_transr  r  s	            r#   'test_ohe_infrequent_multiple_categoriesr    s    	#$#	%	A !<QC "**,Gs11!4q!f=s11!4q"g>s11!4d;
 --/M		
 	 	!        
H H&#F==(L )*BCHH2245!!,/E88	(*IJRXL |+ !G	c!f  
z)C	Df 
E $F==(L(*BCHH2245!!,/E88	8:VWL |+! 
E	Ds   H
H"c            
         [         R                  " S5      n U R                  / SQ/ SQS.SS/S9n[        SS	S
S9nUR	                  U5      R                  5       n[        UR                  S   SS/5        [        UR                  S   / SQ5        / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/	n[        XC5        U R                  SS/SS/S.SS/S9n/ SQ/ SQ/nUR                  U5      n[        XFR                  5       5        UR                  U5      n[        R                  " SS/SS//[        S9n[        X5        U R                  SS/SS/S.SS/S9nUR                  U5      R                  5       n/ SQ/ SQ/n[        XF5        UR                  U5      n[        R                  " SS/SS//[        S9n[        X5        g)zHTest infrequent categories with a pandas dataframe with multiple dtypes.rY   	rZ   fr  r  r  rZ   r  r[   r[   	r   r   r   rk   rk   rn   r   r   r   )strrT  r  rT  columnsrR   r   r0   r  r   rZ   r[   r   r   r   rn   )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     rn   r  rQ   r  r   N)r:   ra   rb   r   r   r   r
   r  r	   r=   r   r   r   r   )	rc   r   r   r   r.  ru  r  r  r  s	            r#   .test_ohe_infrequent_multiple_categories_dtypesr    s    
		X	&B
@1	
  	 	A !<QC "**,Gs11!4sCjAs11!4jA 	
H H&\\3*b"X>PU\WF"$67H==(LH2245!!,/E88
 4	5=Q7RSL |+ \\3*b!W=u~\VF==(002L"$67HH+!!,/E88
#	$';Q&?@L |+r%   rp   )r  r  c                     [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /5      R                  n[        SS	S
S.U D6nUR	                  U5        UR                  S//5      n[        US//5        g),All user provided categories are infrequent.rZ   r   r[   r)  r  rk   r  r   r0   Fr  r   Nr   )r   r   rU   r   r9   r=   r	   r  r  r   r   s       r#   $test_ohe_infrequent_one_level_errorsr  S  s     hh	SEBJ.#;seaiGHIKKG
 ,EEKC GGGmmcUG$GGqcU#r%   c                     [         R                  " S/S-  /[        S9R                  n[	        S/ SQ/SSS.U D6R                  U5      nUR                  S/S//5      n[        US	/S	//5        g
)r  r  r   rQ   r  Fr0   r  rZ   r   Nr   )r   r   r   rU   r   r9   r=   r	   r  s       r#   5test_ohe_infrequent_user_cats_unknown_training_errorsr  a  s     hh	{&133G
 (), 	
 
c'l  mmcUSEN+GGqcA3Z(r%   zinput_dtype, category_dtype)OOOUUOUUSOSUSS
array_type)r   r   rY   c                    [         R                  " S/S//U S9n[         R                  " SS/US9/n[        USS9R                  U5      n[	        S/S/S/S//X S9nUR                  U5      n[         R                  " SS/SS/SS/SS//5      n[        Xx5        [        US9R                  U5      n	U	R                  U5      n[         R                  " S/S/S/S//5      n[        Xx5        g	)
a  Check that encoding work with object, unicode, and byte string dtypes.
Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/15616
https://github.com/scikit-learn/scikit-learn/issues/15726
https://github.com/scikit-learn/scikit-learn/issues/19677
r[   rZ   rQ   Fr   r   r   r   N)	r   r   r   r9   r   r=   r	   r   r
   )
rO   category_dtyper  r   rS   r   ru  r   r.  oes
             r#   test_encoders_string_categoriesr  r  s     	3%#{3A((C:^<=J
:U
C
G
G
JC
use$jF mmF#Gxx!Q!Q!Q!Q89HG&	:	.	2	21	5Bll6"Gxx!qcA3,-Hw)r%   c                  .   [         R                  " S/S//SS9n [         R                  " SS/SS9/n[        USS9n[        R                  " S5      n[
        R                  " [        US	9   UR                  U 5        S
S
S
5        g
! , (       d  f       g
= f)zCheck that this mixture of predefined categories and X raises an error.

Categories defined as bytes can not easily be compared to data that is
a string.
r[   rZ   UrQ   SFr   zjIn column 0, the predefined categories have type 'bytes' which is incompatible with values of type 'str_'.r7   N)	r   r   r   r   r   r:   r;   r<   r9   )r   rS   r   r   s       r#   $test_mixed_string_bytes_categoricalsr    sy     	3%#s+A((C:S12J
:U
CC
))	'C
 
z	-
 
.	-	-s   +B
Bc                     [         R                  " SSU SU //[        S9R                  n[	        SSS9R                  U5      nUR                  5       n[        USSS	U  3/5        g )
NrZ   r[   rQ   Fr/   r   r.   x0_ar   x0_)r   r   r   rU   r   r9   r   r
   )rx  r   r   namess       r#   )test_ohe_missing_values_get_feature_namesr    se     	3]C?@OQQA
eH
E
I
I!
LC%%'Euvv]O/DEFr%   c            	          [         R                  " S5      n U R                  / SQ[        R                  " SSS[        R
                  /[        S9S.SS	/S
9n[        R                  " / SQ/ SQ/ SQ/ SQ/5      n[        U5      n[        X25        g )NrY   )dogr   Nr   r   r   r3   rQ   )col1col2r  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:   ra   rb   r   r   r   floatr   r	   )rc   dfexpected_df_transr   s       r#   %test_ohe_missing_value_support_pandasr    s    			X	&B	/HHaArvv.e<	
   
 
B !!!!		
 #2
&CC+r%   pd_nan_typepd.NAznp.nanc           
      "   [         R                  " S5      nU S:X  a  UR                  O[        R                  nUR                  SUR                  SSUSS/SS905      n[        R                  " / S	Q/ S
Q/ SQ/ SQ/ S
Q/5      n[        SUS9nUR                  U5      n[        XW5        [        UR                  5      S:X  d   e[        UR                  S   S S / SQ5        [        R                  " UR                  S   S   5      (       d   eg )NrY   r  r  r  rZ   r[   r   rQ   )r   r   r   r   )r   r   r   r   )r   r   r   r   r  Fr  r   r   rI   r  )r:   ra   NAr   r   rb   r   r   r   r   r	   lenr   r
   isnan)r  r.   rc   pd_missing_valuer  r  r   df_transs           r#   1test_ohe_missing_value_support_pandas_categoricalr    s     
		X	&B +w 6ruuBFF	BIIsC)93DJIW	

B
 	
 eN
KC  $H%0s1$$$sq)#2.@88COOA&r*++++r%   c                    SS/SS/SS//n[        SSU S9nUR                  U5      n[        R                  " / S	Q/ S
Q/ SQ/5      n[	        X45        SS//n[        R                  " / S	Q/5      nU S:X  a  SnOSn[
        R                  " [        US9   UR                  U5      nSSS5        [	        X45        UR                  U5      n[        U[        R                  " SS//[        S95        g! , (       d  f       NQ= f)zVCheck drop='first' and handle_unknown='ignore'/'infrequent_if_exist'
during transform.rZ   r   r[   r   r   r   Fr   r   r.   r   r   )r   r   r   r  r   r/   tFound unknown categories in columns \[0, 1\] during transform. These unknown categories will be encoded as all zerosFound unknown categories in columns \[0, 1\] during transform. These unknown categories will be encoded as the infrequent category.r7   NrQ   r   r   r   r   r	   r:   rs  rt  r=   r   r
   r   r.   r   r   r   rV   ru  rv  r  s           r#   /test_ohe_drop_first_handle_unknown_ignore_warnsr    s     qC8c1X&A
E.C "G	
J G( AhZF9+&J! 	$ 	
 
k	2--' 
3G( !!*-Eubhhaz@A 
3	2   C11
C?c                    SS/SS/SS//n[        SSU S9nUR                  U5      n[        R                  " / S	Q/ S
Q/ SQ/5      n[	        X45        SS//n[        R                  " / SQ/5      nU S:X  a  SnOSn[
        R                  " [        US9   UR                  U5      nSSS5        [	        X45        UR                  U5      n[        U[        R                  " SS//[        S95        g! , (       d  f       NQ= f)zDCheck drop='if_binary' and handle_unknown='ignore' during transform.rZ   r   r[   r   r   r   Fr  r  r   r_   r  r   )r   r   r   r   r/   r  r  r7   NrQ   r  r  s           r#   3test_ohe_drop_if_binary_handle_unknown_ignore_warnsr    s     qC8c1X&A
nC "G	
J G( AhZF<.)J! 	$ 	
 
k	2--' 
3G( !!*-Eubhhd}FCD 
3	2r  c                 R   SS/SS/SS//n[        SSU SS/SS//S9nUR                  U5        S	S//n[        R                  " SS//5      nU S
:X  a  SnOSn[        R
                  " [        US9   UR                  U5      nSSS5        [        WU5        g! , (       d  f       N= f)zjCheck drop='first' and handle_unknown='ignore'/'infrequent_if_exist'
during fit with categories passed in.rZ   r   r[   r   r   r   Frp  r  r/   zqFound unknown categories in columns \[0\] during transform. These unknown categories will be encoded as all zerosrq  r7   Nrr  )r.   r   r   ru  rV   rv  r   s          r#   'test_ohe_drop_first_explicit_categoriesr  ?  s    
 qC8c1X&A
%#JA'	C GGAJAhZFAq6(#J!E 	$ 	
 
k	2--' 
3GZ( 
3	2s   1B
B&c                     [         R                  " S5      n U R                  / SQ/ SQS.SS/S9n[        SS	9nUR	                  SS
9  Sn[         R
                  " [        US9   UR                  U5        SSS5        UR                  U5        [         R
                  " [        US9   UR                  U5        SSS5        g! , (       d  f       NS= f! , (       d  f       g= f)zJRaise informative error message when pandas output and sparse_output=True.rY   r	  )r
  r[   r[   )rZ   r[   rZ   r[   r  Tr   r=   zxPandas output does not support sparse data. Set sparse_output=False to output pandas dataframes or disable Pandas outputr7   N)
r:   ra   rb   r   
set_outputr;   r<   r   r9   r=   )rc   r  r   r   s       r#   'test_ohe_more_informative_error_messager  a  s    			X	&B	IO<sCj	QB
d
+CNNXN&	S  
z	-" 
. GGBK	z	-b 
.	-	 
.	- 
.	-s   #C'C
C
C!c                  F   [         R                  " [         R                  SSS//5      R                  n [	        [         R
                  S9nS[         R
                   3n[        R                  " [        US9   UR                  U 5        SSS5        g! , (       d  f       g= f)zDTest ordinal encoder with nan passthrough fails when dtype=np.int32.r   r   rQ   zdThere are missing values in features \[0\]. For OrdinalEncoder to encode missing values with dtype: r7   N)
r   r   r   rU   r   r+   r:   r;   r<   r9   )r   r  r   s      r#   Btest_ordinal_encoder_passthrough_missing_values_float_errors_dtyper  u  su     	2663S)*+--A	bhh	'B	002z	;  
z	-
q	 
.	-	-s   7B
B encoded_missing_valuer>  c                    [         R                  " [         R                  SSS//[         R                  S9R                  n[        U S9R                  U5      n[        UR                  5      S:X  d   e[        UR                  S   SS[         R                  /5        UR                  U5      n[        X0/S/S/S//5        UR                  U5      n[        XA5        g)	z.Test ordinal encoder with nan on float dtypes.r   r   rQ   r   r   r   r   N)r   r   r   r5  rU   r   r9   r	  r   r	   r=   r   )r   r   r  r   r  s        r#   5test_ordinal_encoder_passthrough_missing_values_floatr#    s     	2663S)*"**=??A	.C	D	H	H	KBr~~!###BNN1%S"&&'9:ll1oGG5usecUKL$$W-II!r%   c           
         [         R                  " S5      nU S:X  a  UR                  O[        R                  nUR                  SUR                  SSUSS/SS905      n[        US	9R                  U5      n[        UR                  5      S
:X  d   e[        UR                  S   SS / SQ5        [        R                  " UR                  S   S   5      (       d   eUR                  U5      n[        US/S/U/S/S//5        UR                  U5      nUR                   S:X  d   e[        USS2S4   SS/5        [        USS2S4   SS/5        [        R                  " US   5      (       d   eg)z0Check ordinal encoder is compatible with pandas.rY   r  r  r  rZ   r[   r   rQ   r"  r   r   Nr   r  rI          @r   r   )r   r   r   r   )r:   ra   r  r   r   rb   r   r   r9   r	  r   r
   r
  r=   r	   r   r   )r  r   rc   r  r  r  r  r  s           r#   =test_ordinal_encoder_missing_value_support_pandas_categoricalr&    sf    
		X	&B +w 6ruuBFF	BIIsC)93DJIW	

B 
.C	D	H	H	LBr~~!###r~~a(!,o>88BNN1%b)****||BHHuse.C-DsecUST$$X.I??f$$$y!Q'#s4yQ'#s488IdO$$$$r%   r%  )zobject-None-missing-valuezobject-nan-missing_valueznumeric-missing-valuec                 t   [        US9n[        R                  " S/[        R                  //5      n[	        UR                  U 5      U5        UR                  S   R                  U:X  d   e[        US9n[        R                  " [        SS9   UR                  U5        SSS5        g! , (       d  f       g= f)z.Test ordinal encoder for specified categories.r   r   r   r6   r7   N)r   r   r   r   r
   r   r   r*   r:   r;   r<   r9   )r   r@   r  r   r  r   s         r#   =test_ordinal_encoder_specified_categories_missing_passthroughr(    s    L 
4	(B
((SEBFF8$
%Cr''*C0 >>!""i/// 
4	(B	z)C	D
r
 
E	D	Ds   B))
B7c                    [         R                  " / SQ[        S9/nU " US9n[         R                  " SS//[        S9R                  n[        R
                  " [        SS9   UR                  U5        SSS5        g! , (       d  f       g= f)	zTest encoder for specified categories have duplicate values.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/27088
)rZ   r[   rZ   rQ   r   rZ   r[   z5the predefined categories contain duplicate elements.r7   N)r   r   r   rU   r:   r;   r<   r9   r  s       r#   +test_encoder_duplicate_specified_categoriesr*    sl     HH_F34D
T
"C
3*V,..A	Q
 	

 
 
s   "A==
BzX, expected_X_trans, X_testr   r   )r   r   r   )r   r%  r   r  )r  rZ   r[   )r%  r   r   c                     [        SSS9nUR                  U 5      n[        XA5        [        UR                  U5      S//5        g)z>Test the interaction between missing values and handle_unknownr=  rI   r?  g      N)r   r   r	   r=   )r   expected_X_transru  r  r   s        r#   /test_ordinal_encoder_handle_missing_and_unknownr-    s@    8 
':"	MBq!GG.BLL(D6(3r%   csr_containerc                 .   [         R                  " / SQ/ SQ/5      nU " U5      n[        5       nSn[        R                  " [
        US9   UR                  U5        SSS5        [        R                  " [
        US9   UR                  U5        SSS5        UR                  U5      nU " U5      n[        R                  " [
        US9   UR                  U5        SSS5        g! , (       d  f       N= f! , (       d  f       Nl= f! , (       d  f       g= f)zCheck that we raise proper error with sparse input in OrdinalEncoder.
Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/19878
r   r   z2Sparse data was passed, but dense data is requiredr7   N)	r   r   r   r:   r;   r   r9   r   r   )r.  r   X_sparseencoderr   r   r!   s          r#   test_ordinal_encoder_sparser2    s     	)Y'(AQHGBG	y	0H 
1	y	0h' 
1 ##A&G"7+N	y	0!!.1 
1	0 
1	0	0	0
 
1	0s$   
C$=C5	D$
C25
D
Dc                  >   [         R                  " / SQ5      SS2[         R                  4   n [        / SQ/SSS9nUR	                  U 5        [        / SQ/SS9n[
        R                  " [        S	S
9   UR	                  U 5        SSS5        g! , (       d  f       g= f)zCheck OrdinalEncoder.fit works with unseen category when
`handle_unknown="use_encoded_value"`.
Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/19872
)r   r   r   r   r   r   N)rI   r   r   r=  rK  )rS   r.   r@  r4   r  r6   r7   )r   r   newaxisr   r9   r:   r;   r<   )r   r  s     r#   -test_ordinal_encoder_fit_with_unseen_categoryr5  5  sw     	#$Q

]3A	<0CSW
B FF1I	J<	HB	z)C	D
q	 
E	D	Ds   3B
Br  AAOr  ru  c                 z    [        SSS9nUR                  U 5        UR                  U5      n[        USS//5        g)zChecks that `OrdinalEncoder` transforms string dtypes.
Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/19872
r=  ir?  r   N)r   r9   r=   r	   )r  ru  r   r   s       r#   1test_ordinal_encoder_handle_unknown_string_dtypesr9  F  s;    * (;2
NCGGGmmF#GGr1gY'r%   c                  6   [         R                  " / SQ5      R                  SS5      n [        5       R	                  U 5      n[        UR                  [         R                  " U SS9R                  5        UR                  U 5      n[        US/S/S/S//5        g)	zCheck that `OrdinalEncoder` accepts Python integers that are potentially
larger than 64 bits.
Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/20721
)l   	HP
1& l   	H]viel   	 :?i}Ga l   IRK2e6krI   r   r   )axisr   r   N)
r   r   rL   r   r9   r
   r   sortrU   r=   )r   r1  r   s      r#   #test_ordinal_encoder_python_integerr=  b  s     		
	 gb!n  ""1%Gw**BGGAA,>,@,@A"Gw!qcA3 45r%   c                      [         R                  " S5      n / SQnU R                  / SQ/US9n[        5       R	                  U5      nUR                  5       n[        X5        g)z-Check feature names out is same as the input.rY   )r[   r  rZ   r	  r  N)r:   ra   rb   r   r9   r   r
   )rc   r  r   r   feature_names_outs        r#   .test_ordinal_encoder_features_names_out_pandasr@  v  sU    			X	&BE
i[%0A



q
!C113u0r%   c                  &   [         R                  " S/S/[         R                  //[        S9n [	        S[         R                  SS9R                  U 5      nUR                  U 5      n[        US/S/S//5        [         R                  " S	/[         R                  //[        S9nUR                  U5      n[        U[         R                  /S//5        UR                  U5      nUS   S   b   e[         R                  " US   S   5      (       d   eg
)zECheck interactions between encode_unknown and missing value encoding.rZ   r[   rQ   r=  r.   r@  r   r   r   r  N)
r   r   r   r   r   r9   r=   r	   r   r
  )r   r  r   ru  r  X_roundtrips         r#   0test_ordinal_encoder_unknown_missing_interactionrE    s     	3%#)8A	*ff 
 
c!f	  ll1oGGqcA3-. XXurvvh'v6F<<'LLBFF8bT"23 &&|4K q>!$$$ 88KN1%&&&&r%   with_pandasc                 v   [         R                  " SS/SS/S[         R                  //[        S9nSnU (       a.  [        R
                  " S5      nUR                  US	S
/S9nUS-   nOUS-   n[        SS9n[        R                  " [        US9   UR                  U5        SSS5        g! , (       d  f       g= f)zSCheck OrdinalEncoder errors when encoded_missing_value is used by
a known category.rZ   r  r[   r   r  rQ   zTencoded_missing_value \(1\) is already used to encode a known category in features: rY   letterpetr  z	\['pet'\]z\[1\]r   r"  r7   N)r   r   r   r   r:   ra   rb   r   r;   r<   r9   )rF  r   	error_msgrc   r  s        r#   0test_ordinal_encoder_encoded_missing_value_errorrK    s     	3,esBFFm<FKA
	 
   *LLXu$5L6,	(		a	0B	z	3
q	 
4	3	3s   B**
B8z4X_train, X_test_trans_expected, X_roundtrip_expected1c                    [        S[        R                  [        R                  S9R                  U 5      n[        R                  " S/[        R                  /S//5      nUR                  U5      n[        XQ5        UR                  U5      nUR                  S   n[        U5       HO  nX(S4   n	XhS4   n
U	c  U
b   eM  [        U	5      (       a  [        R                  " U
5      (       d   eMH  X:X  a  MO   e   g)zfCheck transform when unknown_value and encoded_missing_value is nan.

Non-regression test for #24082.
r=  rC  rL  r[   r   N)r   r   r   r9   r   r=   r	   r   r   ra  r   r
  )r  X_test_trans_expectedX_roundtrip_expectedr  ru  r  rD  	n_samplesrc  expected_valvals              r#   9test_ordinal_encoder_unknown_missing_interaction_both_nanrS    s    4 
*ff ff
 
c'l	  XXurvvh./F<<'L L8&&|4K$**1-I9+qD1Q$;;<((88C== =&&& r%   c                  6   [         R                  " S5      n U R                  SS/SS/S.5      n[        5       nUR	                  SS9  Sn[         R
                  " [        US	9   UR                  U5        S
S
S
5        [        SS9R	                  SS9n[        SS9R	                  SS9nUR                  U5      nUR                  U5      n[        UR                  5       U5        [        UR                  5       UR                  5        g
! , (       d  f       N= f)z*Check OneHotEncoder works with set_output.rY   rZ   r[   r   r   r\   r  zCPandas output does not support sparse data. Set sparse_output=Falser7   NFr   default)r:   ra   rb   r   r  r;   r<   r   r	   to_numpyr
   r   r  )rc   rd   r   r8   ohe_default
ohe_pandas	X_defaultX_pandass           r#   test_one_hot_encoder_set_outputr[    s    			X	&B<<sCj1v67D
/CNNXN&QE	z	/$ 
0  e4??)?TKU3>>>RJ))$/I''-HH%%'3z7798;K;KL 
0	/s   #D


Dc                  |   [         R                  " S5      n U R                  SS/SS/S.5      n[        5       R	                  SS9n[        5       R	                  SS9nUR                  U5      nUR                  U5      n[        UR                  5       U5        [        UR                  5       UR                  5        g	)
z+Check OrdinalEncoder works with set_output.rY   rZ   r[   r   r   r\   rU  r  N)r:   ra   rb   r   r  r   r	   rV  r
   r   r  )rc   rd   ord_default
ord_pandasrY  rZ  s         r#   test_ordinal_set_outputr_    s    			X	&B<<sCj1v67D "--	-BK!,,x,@J))$/I''-HH%%'3z7798;K;KLr%   c                     / SQSS//n [        U S9nUR                  SS//5        [        U 5      [        UR                  5      :X  d   e[	        UR                  5       H)  u  p#UR
                  [        :X  d   e[        X   U5        M+     g)zbCheck that the categories_ dtype is `object` for string categories

Regression test for gh-25171.
)asmmaseasrasacsrL  2r   ra  N)r   r9   r	  r   	enumerater*   r   r
   )rS   r   nr   s       r#    test_predefined_categories_dtyperi    s|    
 6SzBJ
:
.CGGdC[Mz?c#//2222COO,yyF""":=#. -r%   c                  R   [         R                  " S/S/[         R                  //[        S9n [	        SS9R                  U 5      n[        US/S/S//5        [	        SSS	9R                  U 5      n[         R                  " S
//5      nUR                  U5      n[        US//5        g)zBCheck missing value or unknown encoding can equal the cardinality.r  r   rQ   r   r"  r   r   r=  r?  snakeN)	r   r   r   r   r   r   r	   r9   r=   )r   r   r   ru  s       r#   1test_ordinal_encoder_missing_unknown_encoding_maxrl  &  s    
5'E7RVVH-V<A15CCAFGGqcA3_-
(;1
M
Q
QRS
TCXXyk"FmmF#GGqcU#r%   c                  ,   [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   S/S-  -   /[        S9R                  n [	        SS	S
S9R                  U 5      n[        UR                  5       / SQ5        UR                  S   UR                  S      S:X  d   e[         R                  " S/S-  S/S-  -   S/S-  -   /[        S9R                  n [	        SS	SS9R                  U 5      n[        UR                  5       S/5        UR                  S   UR                  S      S:X  d   e[         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   S/S-  -   /[        S9R                  n [	        SS	S/S9R                  U 5      n[        UR                  5       / SQ5        UR                  S   UR                  S      S:X  d   e[	        SS	SS9R                  U 5      n[        UR                  5       / SQ5        UR                  b   eg)zcCheck drop_idx is defined correctly with infrequent categories.

Non-regression test for gh-25550.
rZ   r   r[   r3   r  r  r  rQ   Fr   )r  r   r   )r  x0_dx0_er  r   rk   r   r  )r   r  ro  r  N)r   r  rn  ro  r  )
r   r   r   rU   r   r9   r
   r   r   r-  )r   r   s     r#   #test_drop_idx_infrequent_categoriesrp  2  s&   
 	
cUQY	#	*cUQY	6#	BC6	a  au7
K
O
OPQ
RC!!#%V ??1cmmA./3666
3%!)seai'3%"*45VDFFA
au;
O
S
STU
VCs0025L4MN??1cmmA./3666

cUQY	#	*cUQY	6#	BC6	a  auC5
I
M
Ma
PC!!#%V ??1cmmA./3666
au4
H
L
LQ
OC!!#A ==   r%   c                    [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /5      R                  n[        SS	S
S.U D6R	                  U5      n[        UR                  / SQ/5        [        UR                  SS//5        S/S/S/S/S//nS/S/S/S/S
//nUR                  U5      n[        XT5        UR                  U5      nS/S/S/S/S//n[        Xg5        g)zGTest parameters for grouping 'a', and 'd' into the infrequent category.rZ   r   r[   r)  r  rk   r  r   r=  rI   r?  r  r
  r   r   r   r  Nr   )r   r   rU   r   r9   r
   r   r  r=   r	   r   )r  r  ordinalru  expected_transr   r  expected_inverses           r#   ,test_ordinal_encoder_infrequent_three_levelsru  V  s    hh	SEBJ.#;seaiGHIKKG *"@F	c'l  w**-A,BCw55c
|DecUSEC53%0FcA3aS2$/N'GG,))'2I					 y3r%   c                     [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /[        S	9R                  n [	        / S
Q/SSSS9R                  U 5      n[        UR                  / S
Q/5        [        UR                  SS//5        S/S/S/S/S//nS/S/S/S/S//nUR                  U5      n[        XC5        UR                  U5      nS/S/S/S/S//n[        XV5        g)zTest that the order of the categories provided by a user is respected.

In this case 'c' is encoded as the first category and 'b' is encoded
as the second one.
rZ   r   r[   r)  r  rk   r  r   rQ   r  r=  rI   )rS   r  r.   r@  r
  r   r   r   r  N)r   r   r   rU   r   r9   r
   r   r  r=   r	   r   )r  rr  ru  rs  r   r  rt  s          r#   6test_ordinal_encoder_infrequent_three_levels_user_catsrw  }  s'    hh
cURZ	3%"*	,uqy	89a  ()*	
 
c'l  w**-A,BCw55c
|DecUSEC53%0FcA3aS2$/N'GG,))'2I					 y3r%   c                     [         R                  " / SQ/ SQ45      n [        SS9R                  U 5      n[	        UR
                  S   SS/5        UR
                  S   b   eSS/SS//nSS/SS//nUR                  U5      n[        XC5        UR                  U5      n[         R                  " SS/S	S//[        S
9n[	        XV5        g)zETest when feature 0 has infrequent categories and feature 1 does not.r  r  r   r  r   r   r   Nr  rQ   )r   column_stackr   r9   r
   r  r=   r	   r   r   r   )r   rr  ru  rs  r   r  rt  s          r#   %test_ordinal_encoder_infrequent_mixedr{    s     	46QRSAA.2215Gw55a81a&A))!,444!fq!fF!fq!f%N'GG,))'2Ixx!Q*>)B C6Ry3r%   c            	      \   [         R                  " S5      n U R                  / SQ5      nU R                  / SQ/ SQU R	                  S/S-  S/S-  -   S	/-   S
/-   US9S./ SQS9n[        SS9R                  U5      n[        UR                  S   SS/5        [        UR                  S   / SQ5        [        UR                  S   S
S	/5        U R                  / SQ/ SQU R	                  S/S	/-   S
/-   S/-   US9S./ SQS9n/ SQ/ SQ/ SQ/ SQ/nUR                  U5      n[        Xe5        g)zHTest infrequent categories with a pandas DataFrame with multiple dtypes.rY   )birdr   r  rk  r  r  r  r3   r   r   rk  r}  rQ   )r  rT  r  r  ry  r   rZ   r[   r   r  r   )rZ   r[   r  r  )rn   r   rk   r   )r   r   r   )r   r   r   )r   r   r   r  N)r:   ra   CategoricalDtyperb   r   r   r9   r
   r  r=   r	   )rc   categorical_dtyper   rr  ru  rs  r   s          r#   :test_ordinal_encoder_infrequent_multiple_categories_dtypesr    sY    
		X	&B++,KL
@199!ugk)WI5@' % 	
 . 	 
	A A.2215G w55a83*Ew55a8*Ew55a867:KL\\'!997)#vh.%8' % 	
 .  
F  IyAN'GG,r%   c                     [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   [         R                  /-   /[        S	9R                  n [        S
SSSS9R                  U 5      n[        UR                  / SQ/5        [         R                  " S/S/S/S/S/[         R                  //[        S	9nS/S/S/S/S/S//nUR                  U5      n[        XC5        g)zJCheck behavior of unknown_value and encoded_missing_value with infrequent.rZ   r   r[   r)  r  rk   r  r   rQ   r=  r   )r.   r@  r  r   r  r  r   r   N)r   r   r   r   rU   r   r9   r
   r  r=   r	   )r  rr  ru  rs  r   s        r#   .test_ordinal_encoder_infrequent_custom_mappingr    s    hh
cURZ	3%"*	,uqy	8BFF8	CDFa  *	
 
c'l  w557HIXXusecUSEC5266(C6RFcA3aS1#s3N'GG,r%   c                 Z   [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /[        S	9R                  n[	        S0 U DS
SS.D6R                  U5      n[	        S
SS9R                  U5      nS/S/S/S/S//n[        UR                  U5      UR                  U5      5        g)zMAll categories are considered frequent have same encoding as default encoder.rZ   r   r[   r)  r  rk   r  r   rQ   r=  rI   r?  r  Nr   r   r   r   rU   r   r9   r	   r=   )r  r  adjusted_encoderdefault_encoderru  s        r#   !test_ordinal_encoder_all_frequentr    s     hh
cURZ	3%"*	,uqy	89a  & 
!4B	c'l  %*"	c'l  ecUSEC53%0F""6*O,E,Ef,Mr%   d   c                    [         R                  " S/S-  S/S-  -   S/S-  -   S/S-  -   /[        S	9R                  n[	        S0 U DS
SS.D6R                  U5      nS/S/S/S/S//n[        UR                  U5      S/S/S/S/S//5        g)zAWhen all categories are infrequent, they are all encoded as zero.rZ   r   r[   r)  r  rk   r  r   rQ   r=  rI   r?  r  r   Nr   r  )r  r  r1  ru  s       r#   #test_ordinal_encoder_all_infrequentr  	  s     hh
cURZ	3%"*	,uqy	89a   
!4B	c'l  ecUSEC53%0FG%%f-aS1#sRD/IJr%   c                     [         R                  " [         R                  /S-  S/S-  -   S/S-  -   S/-   S/-   /[        S9R                  n [        S	S
9R                  U 5      n[         R                  " SSS[         R                  //[        S9R                  nUR                  U5      n[        US/S/S/[         R                  //5        g)z5Check behavior when missing value appears frequently.r)  r  rk   r   r   rk  deerrQ   r   ry  r   r   r   N	r   r   r   r   rU   r   r9   r=   r	   r   rr  ru  r   s       r#   -test_ordinal_encoder_missing_appears_frequentr  *	  s    

&&B%2	%!	3wi	?6(	JK	 a  A.2215GXXrvv67vFHHF'GGqcA3bffX67r%   c            	         [         R                  " [         R                  /S/S-  -   S/S-  -   S/-   S/-   S/S-  S	/S-  -   /[        S
9R                  n [        SS9R                  U 5      n[         R                  " SS/SS	/[         R                  S	/SS	/SS//[        S
9nUR                  U5      n[        USS/SS/[         R                  S/SS/SS//5        g)z7Check behavior when missing value appears infrequently.r  rk   r   r   rk  r  redrN  greenrQ   r3   )r  r   r   r   Nr  r  s       r#   /test_ordinal_encoder_missing_appears_infrequentr  7	  s    
 	VVHw|#ugk1WI=HGaK7)a-'	
 	 a  1-11!4GXXeWVVWGEN	
 	F 'GGq!fq!frvvqkAq6Aq6JKr%   c                     [         R                  " S/S/S//[        S9nU " / SQ/S9n[        R                  " [
        5         UR                  U5        SSS5        g! , (       d  f       g= f)a  Check that we raise a `NotFittedError` by calling transform before fit with
the encoders.

One could expect that the passing the `categories` argument to the encoder
would make it stateless. However, `fit` is making a couple of check, such as the
position of `np.nan`.
r]   r^   rg  rQ   rf  r   N)r   r   r   r:   r;   r   r=   )r  r   r1  s      r#   test_encoder_not_fittedr  S	  sT     	3%#&f5A/!23G	~	&! 
'	&	&s   A
A,c                  j   [         R                  " S/S-  S/S-  -   S/-   5      R                  SS5      n [         R                  " / SQ5      R                  SS5      n[        SS	S
SS9nUR	                  U 5        [        SS	S
SS9nUR	                  U 5        Sn[
        R                  " [        US9   UR                  U5      nSSS5        [
        R                  " [        US9   UR                  U5      nSSS5        [        WS
   WS
   5        g! , (       d  f       NT= f! , (       d  f       N2= f)zc
Check handle_unknown='warn' behave like 'infrequent_if_exist' and map
to the infrequent category.

restaurantr   shopsnackrI   r   )r  r  casinor1   Fr   r   )r.   r   r  r   r0   z=unknown categories will be encoded as the infrequent categoryr7   N)
r   r   rL   r   r9   r:   rs  rt  r=   r	   )
train_data	test_dataencoder_warnencoder_infreqwarning_matchresult_infreqresult_warns          r#   9test_onehotencoder_handle_unknown_warn_maps_to_infrequentr  b	  s    !hh	fX\)WI5gb!n  :;CCBJI U!'L Z ",	N z"SM	k	7&00; 
8 
k	7",,Y7 
8 KNM!$45 
8	7 
8	7s   3D&D$
D!$
D2)r   rk  numpyr   r:   scipyr   sklearn.exceptionsr   sklearn.preprocessingr   r   sklearn.utils._missingr   sklearn.utils._testingr   r	   r
   sklearn.utils.fixesr   r$   r-   markparametrizerC   rM   r+   float32r5  rW   re   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r  rb  str_r  rU   r  r  r  r  r  r  r&  r1  r7  r9  r;  rI  rT  rP  rR  rU  rZ  rd  ri  rn  rw  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-  r2  r5  r9  r=  r@  rE  rK  rT   rS  r[  r_  ri  rl  rp  ru  rw  r{  r  r  r  r  r  r  r  r  r   r%   r#   <module>r     sn   	     - ? 0 
 /@.3 )+TU# V#. )+TU& V&$ "((BJJ

)KL2::rzz(JK
; L M
; "((BJJ

)KLA MA92xJ$4	9
 	(
+z*+
#%67vF
/C#78G
/Cuu#=>fM
"O4FC
/C#67vF
/Cut#<=VL			  .G/.G )+TUUDM2$1,$ 2 3 V,$^ UDM2b'Ar7QG	$y)Y&GHS\E3<'3%Fo?	
	'	 3'*7 !=>'CD
C E ?
C E?#;<1vrxxc
';<= > = E?#;< = "+r{	#uenrd%;RZZH	Aq6Aq6"	#q!fqc]BJJ?HHsElS%L1@3Z%!JJ	

 
C<#u.	/3*ug1FP	Aq6BFFA;'	(Arvv;*<bjjIHHsBFFmdBFF^4FC4[266(#JJ	
 HHsE%L)D%,+?@O4[5<.)JJ	
*	/   B7C B7" )+TU HHsCj\022HHsCj\022JJ		
 HHq!fXW-//HHq!fXW-//KHH		
 HHsCj\022HHsCj\022XXo&'JJ		
 HHtSk]&133HHtSk]&133		
 HHsCj\022HHsBFFm_F355		
 HHsDk]&133HHsBFFm_F355		
?%L	Q  0bAc0 VdA($ ]N$CD
 E

?7 	66"#	./	()
 	&  66&0 	(
+{+,
#%67vF
 	'  22  HHsCj\022HHsCj\022JJ		
 HHq!fXW-//HHq!fXW-//KHH		
 HHsCj\022HHsCj\022XXo&'JJ		
( 	3-  010"$- 5#,/- 0-6	868, +w!78) 9)4 2664u*FG!1 H!1H 5!*.A!BCB DB T5M'7JK'=!9?RS. T L.$ ]N$CD? E? 	1	"	$q1r2	 1E0F'GHI I	I6 +w!>?C @C. 3%#0 1" 	1	!	!	$	$q1q1QQ< 'C5!12/ 3/. 3%#0 10 !a8?A:NO;;2,6!,H;$X,v>,B bA$N#OP
$ Q
$ a1$M#NO) P)  !#M 'BC* D*6* 2664.9G :G,. )+TU((;<, = V,< )+TU)B V)BX )+TU(E V(EV )+TU) V)B( 02662,?" @"" ((;<02662,?% @ =%>  3-7993*V4663RVV,F;<

	 3-7993*V4663RVV,F;<

	 3-

;==3%

3553RVV,-.

	%4	9  !DE!D$ ]N$CD E ! HHsBFFC()*,,HHsBFFC()*,,HHseW	
 HHo&'))HHo&'))HHrvvhZ 	
 HHsBFFC()8::HHsBFFC()*,,HHseWF+	
 HHo&f577HHo&'))HHrvvhZv.	
!24324 .92 :2," 

4+c*
4+c* 
s
3*S)
3*S)	( 	(6(	1'< u6 72 :
 HHsecU^62S266(RVVH%JJvv.f=	
 HHrvvhu-V<S266(RVVH%JJx"&&2&A	
&''&'BM.M /"	$!!H 	1	!	!	$	$q1q1446!4H4*--`-* 	1	!( 	1	#
K
K
8L8 ]N$CD E!6r%   