
    sg#v                       d Z ddlZddlZddlZddlmZ ddlZddlZddl	Z	ddl
mZ ddlmZ ddlmZ ddlmZmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZm Z m!Z! ddl"m#Z#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/  G d dee      Z0 G d de      Z1 G d de      Z2 G d de      Z3 G d de      Z4d Z5d Z6e	jn                  jq                  dddg      d         Z9e	jn                  jq                  d!d"d#gd!d$g%      e	jn                  jq                  d&g  ejt                  d#d#g      d#d#ggg d'%      e	jn                  jq                  d(d#d"g      d)                      Z;d* Z<d+ Z=e	jn                  jq                  d,e.      d-        Z>d. Z?e	jn                  jq                  d,e.      d/        Z@d0 ZAd1 ZBd2 ZCd3 ZDd4 ZEe	jn                  jq                  d5d6d7g      d8        ZFd9 ZGd: ZHd; ZId< ZJd= ZKd> ZLd? ZMd@ ZNdA ZOdB ZPdC ZQe	jn                  jq                  dDdgg dEfdgdFgfdG dH fg      e	jn                  jq                  dId#d"g      dJ               ZRe	jn                  jq                  dKd"dLgdMgdNgfd#dLgdMgdOgfd"g dPg dEdNgfd#g dPg dEg dQfg      dR        ZSdS ZTe	jn                  jq                  dTdgdFgf ejt                  dg      dFgf eUddF      dFgf ejt                  d"d#g      d#d"gfg      dU        ZVe	jn                  jq                  dTdgdFgf eUddF      dFgf ejt                  d"d#g      d#d"gfdVgdWgfdXdWgf ejt                  dVg      dWgf ejt                  dVgeWY      dWgf eUddV      dWgf eUdVdV      dWgfg	      dZ        ZXe	jn                  jq                  dTdgdFdNgf ejt                  dg      dFdNgf eUddF      dFdNgf ejt                  g dP      g d[fg      d\        ZYd] ZZd^ Z[e	jn                  jq                  d,e.      d_        Z\e	jn                  jq                  d,e.      d`        Z]da Z^db Z_e	jn                  jq                  dcddg ede e0       dgfdf e0       dFgfg e1       g      dhf ede e0       dgfdf e0       dFgfgd7g      dhf ede e0       dgfdfd6dFgfgd7g      dif ede e0       dgfdfd7dFgfgd7g      dhf ede e0       dgfgd7g      dif ede e0       dgfdf e0       dFgfgd6g      djf ede e0       dgfgd6g      dkfg      e	jn                  jq                  dldmdng      do               Z`dp Zadq Zbdr Zcds Zde	jn                  jq                  dtej                  ge.      du        Zfdv Zge	jn                  jq                  dwdxdygdej                  dfdxdygddeWfdxdygdeiejgdfdzgdeWgdfdzgdeWdfdygdejdfdygd{ej                  gdfdxgdeigdfdxgd|ej                  gdfdydzgd}ddfdzgd~deigfg dejdfg ddej                  eWgdfg      d        Zkd Zld Zmd Zne	jn                  jq                  dg  ejt                  g eiY      d gg d%      d        Zoe	jn                  jq                  ddFgd dgd d#d"gd g      d        Zpe	jn                  jq                  ddFgd d#d"gd g      d        Zqe	jn                  jq                  d5d7 e!       g      d        Zrd Zse	jn                  jq                  d5d7 e!       g      d        Zte	jn                  jq                  d5d7 e!       g      d        Zue	jn                  jq                  dg d      e	jn                  jq                  d5 e0       d7d6g      d               Zvd Zwd Zx G d de0      Zye	jn                  jq                  dd ey       ddgfdd7dgfgd7g dfd ey       ddgfdd7dgfgd6g dfd ey       dgfdd6dgfgd7g dfd eyddg      g dfgd7g dfd eyddg      dgfdd7dgfgd6g dfd ey ezdN      D  cg c]  } d|  	 c}       dgfd ey ezdN      D  cg c]  } d|  	 c}       dgfgd7g dfdd6dgfgd6g fd ey        eUdFd      fgd6ddgfd ey       dgfdd6 eUdd      fgd7g dfd ey       ddgfdd7 eUdd      fgd7g dfd ey        eUdd      fgd6ddgfd ey       dgfdd6 eUdd      fgd7ddgfd ey       ddgfdd7 eUdd      fgd7g dfg      d        Z{de|de|fdZ}de|de|fdZ~e	jn                  jq                  dd ey       ddgfdd7dgfgd7e}g dfd ey       ddgfdd7dgfgd6dg dfd ey       ddgfdd7 eUdd      fgd7e~g dfg      d        Ze	jn                  jq                  dd ey       ddgfdd7dgfgd7g dfd eydg      ddgfdd7dgfgd6ddgfd ey       dgfdd6dgfgd7g dfd eyddg      g dfgd7g dfd eyddg      dgfdd7dgfgd6g d¢fd ey ezdN      D  cg c]  } d|  	 c}       dgfd ey ezdN      D  cg c]  } d|  	 c}       dgfgd7g dĢfdd6dgfgd6g fd ey        eUdFdN      fdd6dgfgd7g dfd ey       dgfdd6 eUdd      fgd7g dfd ey       ddgfdd7 eUddN      fgd6g dfd ey        eUdd      fdd6dgfgd7g dŢfd ey       dgfdd6 eUdd      fgd7ddgfd ey       ddgfdd7 eUdd      fgd6g dfd ey       ddgfdd7 eUdd      fgd6g dƢfg      dǄ        Ze	jn                  jq                  dd ey       dgfdd7dgfgd6dfd eyddg      dgfdd7dgfgd6dfd eydg      dgfdd7dgfgd7dfd eydg      dgfdd6dgfgd7dfd eyddg      dgfdd7ddgfgd6dfd eydg      dgfdd7dgfd eydg      dgfgd7dfd eyddg      dgfdd7dgfd eydg      dgfgd7dfd ey ezdϫ      D  cg c]  } d|  	 c}       dgfd ey ezdϫ      D  cg c]  } d|  	 c}       dgfgd7dfd eyddg       eUdFdN      fdd7dgfd eydg      dgfgd7dfd eyddg      dgfdd7 eUddF      fd eydg      dgfgd7dfd eyddg       eUdd      fdd7dgfd eydg      dgfgd7dfd eyddg      dgfdd7 eUdd      fd eydg      dgfgd7dfg      dф        Ze	jn                  jq                  dd"d#g      e	jn                  jq                  d5d6d7g      dӄ               Ze	jn                  jq                  d5d6d7g      e	jn                  jq                  dnd"d#g      dԄ               Ze	jn                  jq                  d5d6d7g      dՄ        Z G dք de      Ze	jn                  jq                  d ed٬ګ      ddgddgfd6dgdgfd7ddgddgfg      d߄        Ze	jn                  jq                  dg  ejt                  d#d#g      d#d#ggg d'%      d        Zd Zd Zd Zd Zd Ze	jn                  jq                  ddd!g      d        Ze	jn                  jq                  dd!dg      d        Ze	jn                  jq                  dd!dg      d        Ze	jn                  j!                   e/ej"                         e/d      k  d      d        Ze	jn                  jq                  dlg d      d        Ze	jn                  jq                  dlg d       ed"      d               Z ed"      d        Ze	jn                  jq                  dlg d       ed"      d               Z ed"      d        Z ed"      d        Z ed"      d        Zyc c} w c c} w c c} w c c} w c c} w c c} w )z
Test the ColumnTransformer.
    N)Mock)assert_allclose)sparse)config_context)BaseEstimatorTransformerMixin)ColumnTransformermake_column_selectormake_column_transformer)_RemainderColsList)NotFittedError)VarianceThreshold)FunctionTransformer
NormalizerOneHotEncoderStandardScaler)ConsumingTransformer	_Registrycheck_recorded_metadata_safe_indexing)_convert_containerassert_allclose_dense_sparseassert_almost_equalassert_array_equal)CSR_CONTAINERSparse_versionc                       e Zd ZddZddZy)TransNc                     | S N selfXys      `/var/www/html/venv/lib/python3.12/site-packages/sklearn/compose/tests/test_column_transformer.pyfitz	Trans.fit0           c                     t        |d      r|j                         S t        |dd      dk(  rt        j                  |      j
                  S |S )Nto_framendim      )hasattrr,   getattrnp
atleast_2dTr#   s      r'   	transformzTrans.transform3   sC    1j!::<1fa A%==#%%%r*   r!   __name__
__module____qualname__r(   r5   r"   r*   r'   r   r   /   s    r*   r   c                       e Zd ZddZd Zy)DoubleTransNc                     | S r!   r"   r#   s      r'   r(   zDoubleTrans.fit>   r)   r*   c                     d|z  S )Nr.   r"   r$   r%   s     r'   r5   zDoubleTrans.transformA   s    1ur*   r!   r6   r"   r*   r'   r;   r;   =   s    r*   r;   c                   "    e Zd Zd ZddZddZy)SparseMatrixTransc                     || _         y r!   )csr_container)r$   rB   s     r'   __init__zSparseMatrixTrans.__init__F   s
    *r*   Nc                     | S r!   r"   r#   s      r'   r(   zSparseMatrixTrans.fitI   r)   r*   c                 b    t        |      }| j                  t        j                  ||            S r!   )lenrB   r   eye)r$   r%   r&   	n_sampless       r'   r5   zSparseMatrixTrans.transformL   s'    F	!!&**Y	"BCCr*   r!   r7   r8   r9   rC   r(   r5   r"   r*   r'   r@   r@   E   s    +Dr*   r@   c                       e Zd ZddZddZy)	TransNo2DNc                     | S r!   r"   r#   s      r'   r(   zTransNo2D.fitR   r)   r*   c                     |S r!   r"   r#   s      r'   r5   zTransNo2D.transformU   s    r*   r!   r6   r"   r*   r'   rK   rK   Q   s    r*   rK   c                       e Zd ZddZddZy)
TransRaiseNc                     t        d      Nspecific message
ValueErrorr#   s      r'   r(   zTransRaise.fitZ       +,,r*   c                     t        d      rQ   rS   r#   s      r'   r5   zTransRaise.transform]   rU   r*   r!   r6   r"   r*   r'   rO   rO   Y   s    --r*   rO   c                    
 t        j                  g dg dg      j                  } t        j                  g d      }t        j                  g d      }|j                  dd      }| }d|fdg|fddg|ft        j                  ddg      |ft	        dd      |ft	        dd      |ft        j                  ddg      |fddg|ft        j                  ddg      |fddg|fg
}|D ]  \  
}t        d	t               
fgd
      }t        |j                  |       |       t        |j                  |       j                  |       |       t        d	t               
fdfgd
      }t        |j                  |       |       t        |j                  |       j                  |       |        t        dt               dgfdt               dgfg      }t        |j                  |       |       t        |j                  |       j                  |       |       t        |j                        dk(  sJ ddd}t        dt               dgfdt               dgfg|      }	t        j                  |d   |z  |d   |z  g      j                  }t        |	j                  |       |       t        |	j                  |       j                  |       |       t        |	j                        dk(  sJ t        d	t               ddgfgd	di      }	t        |	j                  |       d|z         t        |	j                  |       j                  |       d|z         t        |	j                        dk(  sJ y )Nr   r/   r.   r.         r/   r   r.   TFtransdrop	remainderc                     S r!   r"   )x	selections    r'   <lambda>z)test_column_transformer.<locals>.<lambda>       ) r*   trans1trans2皙?
   rf   rg   transformer_weights)r2   arrayr4   reshapeslicer	   r   r   fit_transformr(   r5   rF   transformers_vstack)X_arrayX_res_first1DX_res_second1DX_res_first
X_res_bothcasesresctrl   bothrc   s             @r'   test_column_transformerr|   a   sH   hh	9-.00GHHY'MXXi(N''A.KJ 
K
k
Q	1a&	:&	q!k"	q!j!	4-	 +.
$	4,	,
z"E"   
D	3%'9 =>&Q2++G4c:266'?44W=sC uw 345
 	2++G4c:266'?44W=sC
D 
Xuw4x1#6NO	PBr''0*=rvvg009:Fr A%%% &)B7
EGaS	!Hegs#;</D )))M9)N:	

 a  t))'2C8txx(227;SAt!!"a'''
57QF	#$7C.D t))'2C*4DEtxx(227;S:=MNt!!"a'''r*   c                     t        j                  g dg dg      j                  } dt               dgfdt               dgfg}t	        |      }t	        t        |            }t        |j                  |       |j                  |              t        |j                  |       j                  |       |j                  |       j                  |              y )NrX   rY   rf   r   rg   r/   )
r2   rm   r4   r   r	   tupler   rp   r(   r5   )rs   transformersct_with_listct_with_tuples       r'   4test_column_transformer_tuple_transformers_parameterr      s    hh	9-.00Guw,x1#.FGL$\2L%eL&9:M""7+]-H-H-Q !++G4'",,W5r*   constructor_name	dataframepolarsc                 ,   | dk(  rt        j                  d      nt        j                  |       t        j                  g dg dg      j                  }t        || ddg      }t        j                  g d      j                  dd	      }|}dg|fddg|ft        dd      |fd
g|fd
d	g|ft        j                  d
d	g      |ft        d
d	      |ft        d
d      |ft        j                  ddg      |fddg|fg
}| dk(  r/|j                  d
|fd|fj                  ddgddg      |fg       |D ]  \  }t        dt               fgd      }t        |j                  |      |       t        |j                  |      j                  |      |       t        dt               fdfgd      }t        |j                  |      |       t        |j                  |      j                  |      |        t        dt               dgfdt               dgfg      }t        |j                  |      |       t        |j                  |      j                  |      |       t!        |j"                        dk(  sJ |j"                  d   d
   dk7  sJ t        dt               d
gfdt               d	gfg      }t        |j                  |      |       t        |j                  |      j                  |      |       t!        |j"                        dk(  sJ |j"                  d   d
   dk7  sJ ddd}t        dt               dgfdt               dgfg|      }	t        j$                  |d   |d   z  |d   |d   z  g      j                  }t        |	j                  |      |       t        |	j                  |      j                  |      |       t!        |	j"                        dk(  sJ |	j"                  d   d
   dk7  sJ t        dt               ddgfgddi      }	t        |	j                  |      d|z         t        |	j                  |      j                  |      d|z         t!        |	j"                        d	k(  sJ |	j"                  d   d
   dk7  sJ t        dt               d
d	gfgddi      }	t        |	j                  |      d|z         t        |	j                  |      j                  |      d|z         t!        |	j"                        d	k(  sJ |	j"                  d   d
   dk7  sJ  G fddt&              }
t        d |
j(                        ddgfg      }|j                  |       | dk(  rt        d |
j                        dfgd      }|j                  |       |j+                         }d	d
g|_        t        dt               d
fgd      }t        |j                  |      |       t        |j                  |      j                  |      |       t!        |j"                        dk(  sJ |j"                  d   d
   dk(  sJ |j"                  d   d	   dk(  sJ t        |j"                  d   d   d	g       y y )Nr   pandasrX   rY   firstsecond)columns_namer\   r/   r   r.   TF)indexr]   r^   r_   c                     S r!   r"   )r%   rc   s    r'   rd   z3test_column_transformer_dataframe.<locals>.<lambda>   re   r*   rf   rg   r`   rh   ri   rj   rk   c                   (    e Zd Zd ZddZd fd	Zy)6test_column_transformer_dataframe.<locals>.TransAssertc                     || _         y r!   expected_type_transform)r$   r   s     r'   rC   z?test_column_transformer_dataframe.<locals>.TransAssert.__init__#  s
    +BD(r*   Nc                     | S r!   r"   r#   s      r'   r(   z:test_column_transformer_dataframe.<locals>.TransAssert.fit&      Kr*   c                     t        || j                        sJ t        |j                        r|j                         }|S r!   )
isinstancer   Seriesr,   )r$   r%   r&   dataframe_libs      r'   r5   z@test_column_transformer_dataframe.<locals>.TransAssert.transform)  s9    a!=!=>>>!]112JJLHr*   r!   rI   )r   s   r'   TransAssertr   "  s    	C		r*   r   r   )pytestimportorskipr2   rm   r4   r   rn   ro   extendr   r	   r   r   rp   r(   r5   rF   rq   rr   r   	DataFramecopycolumns)r   rs   X_dfrv   rw   rx   ry   rz   rl   r{   r   X_df2r   rc   s               @@r'   !test_column_transformer_dataframer      s   ;&++H5++,<=hh	9-.00G!(0CD ((9%--b!4KJ
 K 
8	j)	w	!:. k
Q	1a&	:&	q!k"	q!j!	4-	 +.
$#E& ;& K +&!(($w>Q(R	
	
   
>	3%'9 =>&Q2++D137266$<11$7= uw 345
 	2++D137266$<11$7=
> 

EGgY	'(EGhZ)HI
B r''-z:rvvd|--d3Z@r A%%%B"k111	Xuw4x1#6NO	PBr''-z:rvvd|--d3Z@r A%%%B"k111 &)B7
EGgY	'(EGhZ)HI/D )))DM9)DN:	

 a  t))$/5txx~//5s;t!!"a'''b!!$333 
57Wh/	01QT~D t))$/z1ABtxx~//5sZ7GHt!!"a'''b!!$333
57QF	#$7C.D t))$/z1ABtxx~//5sZ7GHt!!"a'''b!!$333m  
 M4K4KL(#	

B T;&  8L8LM 	
 	
 		A%'1 56&I2++E2K@266%=2259;G2##$)))#A&+555#A&&0002++B/2QC87 'r*   r   TFnumpy)idscolumn_selection)listboolbool_intcallable_columnc                    t        j                  g dg dg      j                  }|}| r+t        j                  d      }|j                  |ddg      }n|}|rfd}n}t        dt               d	d
gfdt               |fg      }t        |j                  |      |       t        |j                  |      j                  |      |       t        |j                        dk(  sJ t        |j                  d
   d
   t              sJ t        dt               |fdt               d	d
gfg      }t        |j                  |      |       t        |j                  |      j                  |      |       t        |j                        dk(  sJ t        |j                  d	   d
   t              sJ t        dt               |fgd      }t        |j                  |      |       t        |j                  |      j                  |      |       t        |j                        dk(  sJ t        |j                  d	   d
   t              sJ t        j                  g g g g      }	t        dt               |fgd      }t        |j                  |      |	       t        |j                  |      j                  |      |	       t        |j                        dk(  sJ t        |j                  d	   d
   t              sJ y )NrX   rY   r   r   r   r   c                     S r!   r"   )r%   r   s    r'   rd   z7test_column_transformer_empty_columns.<locals>.<lambda>l  s    + r*   rf   r   r/   rg   r.   r]   passthroughr_   r^   )r2   rm   r4   r   r   r   r	   r   rO   r   rp   r(   r5   rF   rq   r   )
r   r   r   rs   rw   pdr%   columnrz   fixtures
    `        r'   %test_column_transformer_empty_columnsr   X  s    hh	9-.00GJ  *LL7H*=L>+!	
EGaV	$xv&FG
B r''*J7rvvay**1-z:r A%%%b&&q)!,j999	
JL&	)Heg1v+FG
B r''*J7rvvay**1-z:r A%%%b&&q)!,j999	WjlF;<	VBr''*J7rvvay**1-z:r A%%%b&&q)!,j999hhB|$G	WjlF;<	OBr''*G4rvvay**1-w7r A%%%b&&q)!,j999r*   c                     t        j                  d      j                  dd      } t        dt	               dgfdt	               dgfg      }|j                  |       }|j                  t        dd      t        dd      t        dd      dk(  sJ t        |d d dgf   |d d |j                  d   f          t        |d d dgf   |d d |j                  d   f          t        d	t	               ddgfgd	d
i      }|j                  |       }|j                  t        dd      t        dd      dk(  sJ t        |d d ddgf   |d d |j                  d	   f          t        |d d g f   |d d |j                  d   f          t        dt	               ddgfdt               g fg      }|j                  |       }|j                  t        dd      t        dd      t        dd      dk(  sJ t        |d d ddgf   |d d |j                  d   f          t        |d d g f   |d d |j                  d   f          t        |d d g f   |d d |j                  d   f          t        d	t               g fgd      }|j                  |       }|j                  t        dd      t        dd      dk(  sJ t        |d d g f   |d d |j                  d	   f          t        |d d ddgf   |d d |j                  d   f          y )Nr[      r.   rf   r   rg   r/   rf   rg   r`   r]   rh   rk   )r]   r`   r`   r   r_   )
r2   arangern   r	   r   rp   output_indices_ro   r   rO   )rs   rz   X_transs      r'   &test_column_transformer_output_indicesr     s   iil""1a(G	Xuw4x1#6NO	PBw'G1+1+1a["   
 wq1#v23E3Eh3O0O(PQwq1#v23E3Eh3O0O(PQ 

57QF	#$7C.
B w'G5A;U1a[!QQQQwq1a&y)71b6H6H6Q3Q+RSwq"u~wq"2D2D[2Q/Q'RS 
XuwA7(JLRT9UV	WBw'G1+1+1a["   
 wq1a&y)71b6H6H6R3R+STwq"u~wq"2D2DX2N/N'OPwq"u~wq"2D2D[2Q/Q'RS	WjlB78M	RBw'G5A;U1a[!QQQQwq"u~wq"2D2DW2M/M'NOwq1a&y)71b6H6H6U3U+VWr*   c                     t        j                  d      } | j                  t        j                  d      j                  dd      ddg      }t        dt               dgfd	t               dgfg      }|j                  |      }|j                  t        d
d      t        dd      t        d
d
      dk(  sJ t        |d d d
gf   |d d |j                  d   f          t        |d d dgf   |d d |j                  d	   f          t        |d d g f   |d d |j                  d   f          t        dt               d
gfd	t               dgfg      }|j                  |      }|j                  t        d
d      t        dd      t        d
d
      dk(  sJ t        |d d d
gf   |d d |j                  d   f          t        |d d dgf   |d d |j                  d	   f          t        |d d g f   |d d |j                  d   f          y )Nr   r[   r   r.   r   r   r   rf   rg   r   r/   r   r`   )r   r   r   r2   r   rn   r	   r   rp   r   ro   r   )r   r   rz   r   s       r'   )test_column_transformer_output_indices_dfr     s   			X	&B<<		!,,Q2Wh<O<PD	
EGgY	'(EGhZ)HI
B t$G1+1+1a["   
 wq1#v23E3Eh3O0O(PQwq1#v23E3Eh3O0O(PQwq"u~wq"2D2D[2Q/Q'RS	Xuw4x1#6NO	PBt$G1+1+1a["   
 wq1#v23E3Eh3O0O(PQwq1#v23E3Eh3O0O(PQwq"u~wq"2D2D[2Q/Q'RSr*   rB   c                     | t        j                  dd            }|d d dgf   }|}ddgt        dd      fD ]  }d|fd|ffD ]  \  }}t        dt	               |fg|d	
      }t        j
                  |j                  |            sJ t        |j                  |      |       t        |j                  |      j                  |      |         ddgt        dd      fD ]  }t        dt	               |fgd	      }t        j
                  |j                  |            sJ t        |j                  |      |       t        |j                  |      j                  |      |        y )Nr   r.   r   )r   r/   r^   r   r]   皙?r`   sparse_thresholdr   )
r   rG   ro   r	   r   issparserp   r   r(   r5   )rB   X_sparserv   rw   colr`   ry   rz   s           r'   $test_column_transformer_sparse_arrayr     sl   VZZ1-.H 1qc6"KJqc5A;' T &4}j6QR 	TNIs"57C()YQTB ??2#3#3H#=>>>()9)9()CSI()9)C)CH)MsS	TT Aa$ W%'3 783Or//9:::$R%5%5h%?L$RVVH%5%?%?%I:V	Wr*   c                  J   dt        d      dgg dg} t        j                  dt        d      ddgg dg      }t        dt	               ddgfdt               d	gfg      }t        |j                  |       |       t        |j                  |       j                  |       |       y )
Nr/   nana)r   r   br   )r\   r   r   r/   	numericalcategoricalr.   )
floatr2   rm   r	   r   r   r   rp   r(   r5   )X_listexpected_resultrz   s      r'   test_column_transformer_listr     s    %,$k2Fhhea#	
O 
.*QF3MOaS1	

B r''/Arvvf~//7Ir*   c                    t        j                  g dg dg      j                  }t        dt	               dgfdt        |       dfgd      }|j                  |       |j                  |      }t        j                  |      sJ |j                  |j                  d   |j                  d   dz   fk(  sJ t        |j                         d d dd f   t        j                  |j                  d                t        |j                        d	k(  sJ |j                  d
   d   dk7  sJ t        dt	               dgfdt        |       dfgd      }|j                  |       |j                  |      }t        j                  |      rJ |j                  |j                  d   |j                  d   dz   fk(  sJ t        |d d dd f   t        j                  |j                  d                y )NrX   rY   rf   r   rg   r/   r   r   r.   r\   r`   rh   )r2   rm   r4   r	   r   r@   r(   r5   r   r   shaper   toarrayrG   rF   rq   )rB   rs   	col_transr   s       r'   'test_column_transformer_sparse_stackingr     s   hh	9-.00G!
EGaS	!H.?.NPQ#RSI MM'!!'*G??7###==W]]1-w}}Q/?!/CDDDDw(AB/a8H1IJy&&'1,,,""2&q)[888!
EGaS	!H.?.NPQ#RSI MM'!!'*Gw'''==W]]1-w}}Q/?!/CDDDDwq!"u~rvvgmmA.>'?@r*   c                     t        j                  g dg dgd      } t        t               dgfdddgfd	
      }|j	                  |       }|j                         dk(  sJ t        |j                         t        j                  g dg dg             t        t               dgfddgfd	
      }t        j                  t        d      5  |j	                  |        d d d        y # 1 sw Y   y xY w)N)r   r/   T)r   r.   FOdtyper   r   r/   r.         ?r   csr)r/   r   r/   r/   )r   r/   r.   r   z'For a sparse output, all columns shouldmatch)r2   rm   r   r   rp   	getformatr   r   r   raisesrT   )dfrz   r   s      r'   )test_column_transformer_mixed_cols_sparser     s    	>?33	?B	 	1#A 7#
B r"G%'''w("((L,3O*PQ	 	1# 4s
B 
z)R	S  	  s   C&&C/c                     t        j                  ddgddggt              j                  } t	        dt               dgfdt               d	gfgd
      }|j                  |       }t        j                  |      rJ |j                  rJ dD ]c  }t	        dt        d      dgfdt        d      d	gfg|      }|j                  |       }t        j                  |      sJ |j                  rcJ  dD ]c  }t	        dt        d      dgfdt        d      d	gfg|      }|j                  |       }t        j                  |      rJ |j                  scJ  dD ]c  }t	        dt        d      dgfdt        d      d	gfg|      }|j                  |       }t        j                  |      rJ |j                  scJ  y )Nr   r   ABr   rf   r   rg   r/   皙?r   )g㈵ ?r/   T)sparse_outputF)g      ?r   )gQ?r   r/   )
r2   rm   objectr4   r	   r   rp   r   r   sparse_output_)rs   r   ry   thress       r'   (test_column_transformer_sparse_thresholdr   4  s   hhc
S#J/v>@@G "
MOaS	)Hmos+KLI 
!
!'
*Cs###''''  
(%=t<qcB=u=sC #
	 %%g.s###''''
(  
,%=t<qcB=u=sC #
	 %%g.??3'''++++
,  
,%=u=sC=u=sC #
	 %%g.??3'''++++
,r*   c                  \   t        j                  g dg dg      j                  } t        dt	               dfg      }d}t        j                  t        |      5  |j                  |        d d d        t        j                  t        |      5  |j                  |        d d d        t        dt               dfg      }|j                  |j                  fD ].  }t        j                  t        d      5   ||        d d d        0 y # 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   SxY w)N        r          @r         @g      @r]   r   z1D data passed to a transformerr   rR   )r2   rm   r4   r	   r   r   r   rT   r(   rp   rO   )rs   r   msgfuncs       r'   $test_column_transformer_error_msg_1Dr   h  s    hh9:<<G!G^-=q#A"BCI
+C	z	- g 
z	- )() "GZ\1#=">?I	 7 78 ]]:-?@ 	M	 	 ) )
	 	s$   D
D6	D"
DD"D+	c                     t        j                  g dg dg      j                  } t        ddt	               dfg      }d}t        j                  t        |      5  |j                  |        d d d        t        j                  t        |      5  |j                  |        d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)NrX   rY   )rf   r^   r   rg   r/   z%the 'trans2' transformer should be 2Dr   )
r2   rm   r4   r	   rK   r   r   rT   rp   r(   rs   rz   r   s      r'   test_2D_transformer_outputr   y  s    hh	9-.00G 
1Hik13MN	OB
1C	z	- "
!" 
z	- 
w " " s   B+B7+B47C c                     t        j                  d      } t        j                  g dg dg      j                  }| j                  |ddg      }t        dt               dfg      }d}t        j                  t        |	      5  |j                  |       d d d        t        j                  t        |	      5  |j                  |       d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)
Nr   rX   rY   col1col2r   rf   z%the 'trans1' transformer should be 2Dr   )r   r   r2   rm   r4   r   r	   rK   r   rT   rp   r(   )r   rs   r   rz   r   s        r'   !test_2D_transformer_output_pandasr     s    			X	&Bhh	9-.00G<<&&)9<:D 
Xy{F;<	=B
1C	z	- 
 
z	- 
t   s   C9C C C)r`   r^   r   c                 8   t        j                  g dg dg      j                  }dddgt        dd      t        j                  dg      fD ]P  }t	        dt               |fg| 	      }t        j                  t        d
      5  |j                  |       d d d        R dddgt        dd      fD ]P  }t	        dt               |fg| 	      }t        j                  t        d      5  |j                  |       d d d        R ddg}t	        dt               |fg| 	      }|j                  |       t        j                  g dg dg dg      j                  }d}t        j                  t        |      5  |j                  |       d d d        t        j                  g dg      j                  }d}t        j                  t        |      5  |j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   QxY w# 1 sw Y   }xY w# 1 sw Y   y xY w)NrX   rY         ?stringr/   sr   r]   r_   zNo valid specificationr   otherr   r   Specifying the columnsr   r   r[   	   zIX has 3 features, but ColumnTransformer is expecting 2 features as input.zIX has 1 features, but ColumnTransformer is expecting 2 features as input.)r2   rm   r4   ro   r	   r   r   r   rT   r(   r5   )r`   rs   r   rz   X_array_morer   X_array_fewererr_msgs           r'   'test_column_transformer_invalid_columnsr    s   hh	9-.00G h]E!SM288SE?C %'3 78IN]]:-EF 	FF7O	 	 8W-uS#? %'3 78IN]]:-EF 	FF7O	 	 a&C	Wegs34		JBFF7O88Y	9=>@@L
UC	z	- #
\"#HH	
 a	  	T  
z	1 $
]#$ $3	 		 	# #$ $s0   G*'G76HH*G4	7H	HHc                      G d dt               } t        j                  g dg dg      j                  }t	        d |        dgfg      }d}t        j                  t        |      5  |j                  |       d d d        y # 1 sw Y   y xY w)	Nc                       e Zd ZddZd Zy)<test_column_transformer_invalid_transformer.<locals>.NoTransNc                     | S r!   r"   r#   s      r'   r(   z@test_column_transformer_invalid_transformer.<locals>.NoTrans.fit  r   r*   c                     |S r!   r"   r>   s     r'   predictzDtest_column_transformer_invalid_transformer.<locals>.NoTrans.predict  s    Hr*   r!   )r7   r8   r9   r(   r  r"   r*   r'   NoTransr    s    		r*   r	  rX   rY   r]   r   z1All estimators should implement fit and transformr   )	r   r2   rm   r4   r	   r   r   	TypeErrorr(   )r	  rs   rz   r   s       r'   +test_column_transformer_invalid_transformerr    st    -  hh	9-.00G	Wgi!56	7B
=C	y	, 
w  s   'BBc                      t               } t               }t        | df|dgf      }t        |j                   \  }}}|dk(  sJ || |fk(  sJ |ddgfk(  sJ y )Nr   r   )standardscaler
normalizer)r   r   r   zipr   )scalernormrz   namesr   r   s         r'   test_make_column_transformerr    st    F<D	 &'!2TH:4F	GB#&#8 E<4444FD>)))w
++++r*   c                  z   t        j                  d      } t        j                  g dg dg      j                  }| j                  |ddg      }t               }t        dt               |j                  fg      }t        ||j                  f      }t        |j                  |      |j                  |             y )Nr   rX   rY   r   r   r   r  )r   r   r2   rm   r4   r   r   r	   r   r   r   rp   )r   rs   r   r  ct1ct2s         r'   #test_make_column_transformer_pandasr    s    			X	&Bhh	9-.00G<<'8)<<=D<D
fjlDLLAB
CC
!4"6
7C))$/1B1B41HIr*   c                     t               } t               }t        | df|dgfddd      }|j                  t        | df|dgf      j                  k(  sJ |j                  dk(  sJ |j
                  dk(  sJ |j                  dk(  sJ t        j                  d      }t        j                  t        |      5  t        | df|dgfd	d
d       d d d        y # 1 sw Y   y xY w)Nr   r   r   r^   g      ?)n_jobsr`   r   zRmake_column_transformer() got an unexpected keyword argument 'transformer_weights'r   ri   r/   )pcaTransfrk   )r   r   r   r   r  r`   r   reescaper   r   r
  )r  r  rz   r   s       r'   #test_make_column_transformer_kwargsr    s    F<D	 		z
B 	"FG#4thZ6HIVV	W	W 99>><<6!!!#%%%
))	1C 
y	, 
WH:(*a 8	

 
 
s   7CC c                      t               } t               }t               }t        | df|dgf|      }|j                  |k(  sJ y )Nr   r   r_   )r   r   r   r`   )r  r  r`   rz   s       r'   2test_make_column_transformer_remainder_transformerr     sJ    F<D I	 	D8*-
B <<9$$$r*   c                      t        dt               dgfdt               dgfg      } i dd dddd	d| j                  d   d   d
dddddd| j                  d   d   ddddddd| j                  dd dddddd}| j                         |k(  sJ | j	                  d       | j                         d   rJ | j	                  d       d dd	d| j                  d   d   ddd| j                  d dddd}| j                         |k(  sJ y )Nrf   r   rg   r/   r  r`   r^   r   333333?trans1__copyTtrans1__with_meantrans1__with_stdtrans2__copytrans2__with_meantrans2__with_stdr   rl   verbose_feature_names_outverboseFforce_int_remainder_cols)r$  r   rf   )r  r`   r   rf   rg   r&  r'  r(  r   rl   r)  r*  r+  )r	   r   r   
get_params
set_paramsrz   exps     r'   &test_column_transformer_get_set_paramsr1    s   	
N$qc	*X~7G!,MN
B$V 	C 	"//!$Q'	
 	 	T 	D 	"//!$Q' 	 	T 	D 	 	t 	$T 	5  	#D!C& ==?c!!!MMEM*}}2333MMM'//!$Q'! #%)$(C  ==?c!!!r*   c                     t        j                  g dg dg      j                  } t        dt	               dgfdt	        d      dgfg      }t        |d	      rJ |j                  |        t        |d	      sJ t        |j                  d   t              sJ t        |j                  j                  t              sJ t        |j                  d   t              sJ t        |j                  j                  t              sJ |j                  j                  j                  rJ |j                  j                  j                  d
k(  sJ y )Nr   r   rf   r   rg   F)with_stdr/   rq   r   )r2   rm   r4   r	   r   r0   r(   r   named_transformers_rf   rg   r3  mean_rs   rz   s     r'   (test_column_transformer_named_estimatorsr7  7  s    hh9:<<G	~'!-~u5s;	

B r?+++FF7O2'''b,,X6GGGb,,33^DDDb,,X6GGGb,,33^DDD%%,,5555!!((..#555r*   c                     t        j                  g dg dg      j                  } t        dt	               dgfg      }|j                  |        t        |j                  d   d   d      rJ t        |j                  d   d   d      sJ t        dt	               dgfg      }|j                  |        t        |j                  d   d   d      rJ t        |j                  d   d   d      sJ y )Nr   r   r]   r   r/   r5  )
r2   rm   r4   r	   r   r(   r0   r   rq   rp   r6  s     r'   test_column_transformer_cloningr9  K  s    hh9:<<G	Wn&6<=	>BFF7Orq)!,g6662##A&q)7333	Wn&6<=	>BWrq)!,g6662##A&q)7333r*   c                     t        j                  g dg dg      j                  } t        dt	               ddgfg      }t        j                  t              5  |j                          d d d        |j                  |        t        j                  d      }t        j                  t        |      5  |j                          d d d        y # 1 sw Y   dxY w# 1 sw Y   y xY w)Nr   r   r]   r   r/   zETransformer trans (type Trans) does not provide get_feature_names_outr   )r2   rm   r4   r	   r   r   r   r   get_feature_names_outr(   r  r  AttributeErrorr   s      r'   )test_column_transformer_get_feature_namesr=  Y  s    hh9:<<G	Weg1v67	8B	~	& #
  "# FF7O
))OC 
~S	1 #
  "# ## ## #s   C2CCC!c                  \   t        j                  g dg dg      j                  } t        dt	               dgfdddgfg      }t        j                  dgd	gd
gg      }t        |j                  |       |       t        |j                  |       j                  |       |       t        |j                        dk(  sJ |j                  d   d   dk7  sJ t        dddgfdddgfg      }t        |j                  |       j                  |       j                  d       t        |j                  |       j                  d       t        |j                        dk(  sJ |j                  d   d   dk7  sJ t        j                  g dg dg      j                  } t        dt	               dgfdddgfg      }| }t        |j                  |       |       t        |j                  |       j                  |       |       t        |j                        dk(  sJ |j                  d   d   dk7  sJ y )Nr   r   rf   r   rg   r^   r/   r   r   r   r.   r\   r`   )r   r   r   )r2   rm   r4   r	   r   r   rp   r(   r5   rF   rq   r   )rs   rz   r0  s      r'   'test_column_transformer_special_stringsr?  h  s   hh9:<<G	Xuw4x!6MN	OB
((SEC53%(
)Cr''0#6rvvg0093?r A%%%B"k111 
Xvs3h5LM	NBrvvg009??Hr''066?r A%%%B"k111 hh9:<<G	Xuw4xQRPS6TU	VB
Cr''0#6rvvg0093?r A%%%B"k111r*   c                     t        j                  g dg dg      j                  } t        j                  g d      j                  dd      }t        j                  g d      j                  dd      }| }t	        dt               dgfg      }t        |j                  |       |       t        |j                  |       j                  |       |       t        |j                        dk(  sJ |j                  d   d   dk(  sJ |j                  d   d   d	k(  sJ t        |j                  d   d   dg       t	        d
t               dgfgd      }t        |j                  |       |       t        |j                  |       j                  |       |       t        |j                        dk(  sJ |j                  d   d   dk(  sJ t        |j                  d   d   t              sJ t        |j                  d   d   dg       t	        dt               dgfgd      }t        |j                  |       |d d d d df          t        |j                  |       j                  |       |d d d d df          t        |j                        dk(  sJ |j                  d   d   dk(  sJ t        |j                  d   d   t              sJ t        |j                  d   d   dg       t	        dd	dgfgd      }t        |j                  |       |       t        |j                  |       j                  |       |       t        |j                        dk(  sJ |j                  d   d   dk(  sJ t        |j                  d   d   t              sJ t        |j                  d   d   dg       t        t               dgf      }|j                  d	k(  sJ y )NrX   rY   r\   r/   rf   r   r.   r`   r^   r]   r   r_   )r2   rm   r4   rn   r	   r   r   rp   r(   r5   rF   rq   r   r   r   r`   )rs   rv   X_res_secondrw   rz   s        r'   !test_column_transformer_remainderrB    s   hh	9-.00G((9%--b!4K88I&..r15LJ 
Xuw45	6Br''0+>rvvg009;Gr A%%%B"k111B"f,,,r''+A.4 
Wegs34	NBr''0*=rvvg009:Fr A%%%B"k111b&&r*1-/BCCCr''+A.4 
Xuw45	OBr''0*Q"W2EFrvvg009:a2g;NOr A%%%B"k111b&&r*1-/BCCCr''+A.4 
Xvs34	NBr''0,?rvvg009<Hr A%%%B"k111b&&r*1-/BCCCr''+A.4 
!%'A3	0B<<6!!!r*   zcols1, cols2)FTFr/   c                     dgS Nr   r"   rb   s    r'   rd   rd     s    A3 r*   c                     dgS Nr/   r"   rE  s    r'   rd   rd     s    1# r*   	force_intc                 H   t        j                  d      }t        t               |ft               |fd|       }t	        j
                         5  t	        j                  d       |j                  |       |j                  d   d   d   dk(  sJ 	 ddd       y# 1 sw Y   yxY w)	zCheck that the remainder columns are always stored as indices when
    other columns are not all specified as column names or masks, regardless of
    `force_int_remainder_cols`.
    r/   r   r   r`   r+  errorr\   r   r.   N)	r2   onesr   r   warningscatch_warningssimplefilterrp   rq   )rH  cols1cols2r%   rz   s        r'   -test_column_transformer_remainder_dtypes_intsrS    s     	A	 	%	%!*	
B 
	 	 	" 0g&
#B'*a///0 0 0s   ABB!z&force_int, cols1, cols2, expected_colsr   r   r.   C)TFF)FFTc                    t        j                  d      }t        |d   t              r*t	        j
                  d      }|j                  |g d      }t        t               |ft               |fd|       }t        j                         5  t        j                  d       |j                  |       d	d	d	       | r>d
}|j                  d   d   }t	        j                  t        |      5  |d    d	d	d	       nIt        j                         5  t        j                  d       |j                  d   d   }|d    d	d	d	       |k(  sJ y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   )xY w)zCheck that the remainder columns format matches the format of the other
    columns when they're all strings or masks, unless `force_int = True`.
    rJ  r   r   )r   r   rT  r   r   rK  rL  Nz8The format of the columns of the 'remainder' transformerr\   r   )r2   rM  r   strr   r   r   r   r   rN  rO  rP  rp   rq   warnsFutureWarning)	rH  rQ  rR  expected_colsr%   r   rz   r   colss	            r'   (test_column_transformer_remainder_dtypesr[    sQ    	A%(C   *LLOL4 
!	%	%!*	
B 
	 	 	" g&
 J#B'\\-u5 	G	 	 $$& 	!!'*##B'+DG	
 =   ! 	 		 	s$   
'E
*E-E"
EE"E+c                      t        ddgd      } t        |       dk(  sJ t        |       dk(  sJ t               }| j	                  |d       |j
                  j                  d       y )Nr   r/   F)warning_enabledz[0, 1])r   rV  reprr   _repr_pretty_textassert_called_once_with)rZ  mocks     r'   test_remainder_list_reprrc    s_    q!fe<Dt9   :!!!6DtU#II%%h/r*   zkey, expected_colsc                    t        j                  g dg dg      j                  }|}t        dt	               | fgdd      }t        |j                  |      |       t        |j                  |      j                  |      |       t        |j                        dk(  sJ |j                  d   d	   d
k(  sJ t        |j                  d   d   t              sJ |j                  d   d   |k(  sJ y )NrX   rY   rf   r   FrK  r.   r\   r   r`   r/   )r2   rm   r4   r	   r   r   rp   r(   r5   rF   rq   r   r   keyrY  rs   rw   rz   s        r'   'test_column_transformer_remainder_numpyrg  
  s     hh	9-.00GJ	
EGS	!"!&
B
 r''0*=rvvg009:Fr A%%%B"k111b&&r*1-/BCCCB"m333r*   r   r   pd-indexr   c                    t        j                  d      }t        | t              r| dk(  r|j	                  dg      } t        j                  g dg dg      j                  }|j                  |ddg      }|}t        dt               | fgd	d
      }t        |j                  |      |       t        |j                  |      j                  |      |       t        |j                         dk(  sJ |j                   d   d   dk(  sJ t        |j                   d   d   t"              sJ |j                   d   d   |k(  sJ y )Nr   rh  r   rX   rY   r   r   rf   r   FrK  r.   r\   r   r`   r/   )r   r   r   rV  Indexr2   rm   r4   r   r	   r   r   rp   r(   r5   rF   rq   r   )rf  rY  r   rs   r   rw   rz   s          r'   (test_column_transformer_remainder_pandasrk  %  s3     
		X	&B#sz 1hhy!hh	9-.00G<<'8)<<=DJ	
EGS	!"!&
B
 r''-z:rvvd|--d3Z@r A%%%B"k111b&&r*1-/BCCCB"m333r*   )FTTc                 <   t        j                  g dg dg dg      j                  }|j                         }|d d ddfxx   dz  cc<   t	        dt               | fgt               d	      }t        |j                  |      |       t        |j                  |      j                  |      |       t        |j                        dk(  sJ |j                  d
   d   dk(  sJ t        |j                  d
   d   t              sJ |j                  d
   d   |k(  sJ y )NrX   rY      r[   rZ   r/   r   r.   rf   FrK  r\   r   r`   )r2   rm   r4   r   r	   r   r;   r   rp   r(   r5   rF   rq   r   re  s        r'   -test_column_transformer_remainder_transformerro  J  s    hh	9i89;;GJ q!A#v!	
EGS	!"-!&
B r''0*=rvvg009:Fr A%%%B"k111b&&r*1-{;;;B"m333r*   c                     t        j                  g dg dg dg      j                  } t        dt	               g dfgt                     }t        |j                  |       |        t        |j                  |       j                  |       |        t        |j                        dk(  sJ |j                  d   d   d	k7  sJ y )
NrX   rY   rm  rf   r_   r/   r\   r   r`   )r2   rm   r4   r	   r   r;   r   rp   r(   r5   rF   rq   r6  s     r'   :test_column_transformer_no_remaining_remainder_transformerrq  h  s    hh	9i89;;G	Xuw	:;{}	UBr''0':rvvg0097Cr A%%%B"k111r*   c                  ,   t        j                  g dg dg dg      j                  } d| j                         d d ddf   z  }t	        ddd	gfgt               
      }t        |j                  |       |       t        |j                  |       j                  |       |       t        |j                        dk(  sJ |j                  d   d	   dk(  sJ t        |j                  d   d   t
              sJ t        |j                  d   d   ddg       y )NrX   rY   rm  r.   r/   r   rf   r^   r   r_   r\   r`   )r2   rm   r4   r   r	   r;   r   rp   r(   r5   rF   rq   r   )rs   rw   rz   s      r'   7test_column_transformer_drops_all_remainder_transformerrs  s  s    hh	9i89;;G W\\^AqsF++J	Xvs34	NBr''0*=rvvg009:Fr A%%%B"k111b&&r*1-{;;;r''+A.A7r*   c                    t        j                  g dg dg dg      j                  }t        dt	               dgfgt        |       d      }|j                  |      }t        j                  |      sJ |j                  dk(  sJ t        j                  |d d df   j                  d	d
      t        j                  d      f      }t        |j                         |       t        |j                         dk(  sJ |j                   d	   d   dk(  sJ t#        |j                   d	   d
   t
              sJ t        |j                   d	   d   d
dg       y )NrX   rY   rm  rf   r   r   r   r   rZ   r\   r/   r   r.   r`   )r2   rm   r4   r	   r   r@   rp   r   r   r   hstackrn   rG   r   r   rF   rq   r   )rB   rs   rz   r   	exp_arrays        r'   4test_column_transformer_sparse_remainder_transformerrx    s2   hh	9i89;;G	
EGaS	!"#M2
B w'G??7### ==J&&&		71a4=00Q7CDIw()4r A%%%B"k111b&&r*1-/@AAAr''+A.A7r*   c                 :   t        j                  g dg dg dg      j                  }t        dddgfgt	        |       d      }|j                  |      }t        j                  |      sJ |j                  d	k(  sJ t        |j                         t        j                  d
             t        |j                        dk(  sJ |j                  d   d   dk(  sJ t        |j                  d   d   t              sJ t        |j                  d   d   ddg       y )NrX   rY   rm  rf   r^   r   r   r   )r   r   r   r.   r\   r`   r/   )r2   rm   r4   r	   r@   rp   r   r   r   r   r   rG   rF   rq   r   )rB   rs   rz   r   s       r'   =test_column_transformer_drop_all_sparse_remainder_transformerrz    s   hh	9i89;;G	
FQC	 !#M2
B w'G??7### ==F"""w("&&)4r A%%%B"k111b&&r*1-/@AAAr''+A.A7r*   c                     t        dt               dgfgt                     } d | j                  dddd| j                  d   d   ddd| j                  d dddd}| j	                         |k(  sJ | j                  d	       | j	                         d
   rJ | j                  d       d | j                  ddddd| j                  d dddd}| j	                         |k(  sJ y )Nrf   r   r_   Tr"  r/   F)r  r`   remainder__copyremainder__with_meanremainder__with_stdr   rf   r#  r$  r%  r   rl   r)  r*  r+  )r~  r~  r   r,  )r  r`   r|  r}  r~  r   rf   r   rl   r)  r*  r+  )r	   r   r`   r   r-  r.  r/  s     r'   5test_column_transformer_get_set_params_with_remainderr    s    	
N$qc	*+~7G
B
 \\ $#//!$Q'! #%)$(C$ ==?c!!!MMeM,}}4555MMM'\\ $$#%)$(C ==?c!!!r*   c                     t        j                  g dg dg dg      j                  d      j                  } t	        g t                     }|j                         }|d   sJ |j                  |       }|j                  | j                  k(  sJ t        |j                        dk(  sJ |j                  d   d	   d
k(  sJ |j                  d   d   g dk(  sJ y )NrX   rY   rm  r   r_   r}  r/   r\   r   r`   r.   )r2   rm   astyper4   r	   r   r-  rp   r   rF   rq   )rs   rz   paramsr   s       r'   %test_column_transformer_no_estimatorsr    s    hh	9i89@@IKKG	2)9	:B]]_F()))w'G==GMM)))r A%%%B"k111B"i///r*   estpatternrf   rg   r_   z\[ColumnTransformer\].*\(1 of 3\) Processing trans1.* total=.*\n\[ColumnTransformer\].*\(2 of 3\) Processing trans2.* total=.*\n\[ColumnTransformer\].*\(3 of 3\) Processing remainder.* total=.*\n$z\[ColumnTransformer\].*\(1 of 2\) Processing trans1.* total=.*\n\[ColumnTransformer\].*\(2 of 2\) Processing remainder.* total=.*\n$z\[ColumnTransformer\].*\(1 of 2\) Processing trans1.* total=.*\n\[ColumnTransformer\].*\(2 of 2\) Processing trans2.* total=.*\n$zA\[ColumnTransformer\].*\(1 of 1\) Processing trans1.* total=.*\n$methodr(   rp   c                 h   t        j                  g dg dg dg      j                  }t        | |      }| j	                  d        ||       |j                         j                  rJ d       | j	                  d        ||       t        j                  ||j                         d         sJ y )	NrX   rY   rm  F)r*  zGot output for verbose=FalseTr   )	r2   rm   r4   r1   r.  
readouterroutr  r   )r  r  r  capsysrs   r   s         r'   test_column_transformer_verboser    s    L hh	9i89;;G3DNN5N!M  "&&F(FF&NN4N M88GV..03444r*   c                  \    t        g       j                  d      } | j                  dk(  sJ y )Nr.   )r  )r	   r.  r  rz   s    r'   0test_column_transformer_no_estimators_set_paramsr  >  s*    	2		)	)	)	3B99>>r*   c                     t        j                  g dg dg      j                  t        j                  g dg      j                  } fd}t        dt	               |fgd      }t        |j                        |        t        |j                        j                        |        t        |j                  d   d         sJ |j                  d   d   dgk(  sJ y )	NrX   rY   c                 "    t        |        dgS rD  )r   )r%   rs   s    r'   r   z8test_column_transformer_callable_specifier.<locals>.funcH  s    1g&s
r*   r]   r^   r_   r   r.   )r2   rm   r4   r	   r   r   rp   r(   r5   callabler   rq   )rv   r   rz   rs   s      @r'   *test_column_transformer_callable_specifierr  C  s    hh	9-.00G((I;'))K 
Wegt45	HBr''0+>rvvg009;GBOOA&q)***Aq!aS(((r*   c                     t        j                  d      } t        j                  g dg dg      j                  }t        j                  g dg      j                  }| j                  |ddg      fd}t        dt               |fgd	
      }t        |j                        |       t        |j                        j                        |       t        |j                  d   d         sJ |j                  d   d   dgk(  sJ y )Nr   rX   rY   r   r   r   c                     t        | j                  j                         t        | j                  j                         dgS )Nr   )r   r   values)r%   r   s    r'   r   zBtest_column_transformer_callable_specifier_dataframe.<locals>.func[  s/    199dll3188T[[1yr*   r]   r^   r_   r   r.   )r   r   r2   rm   r4   r   r	   r   r   rp   r(   r5   r  r   rq   )r   rs   rv   r   rz   r   s        @r'   4test_column_transformer_callable_specifier_dataframer  S  s    			X	&Bhh	9-.00G((I;'))K<<'8)<<=D
 
Wegt45	HBr''-{;rvvd|--d3[ABOOA&q)***Aq!gY...r*   c                  X   t         j                  j                  dd      } t        j                  dgdgg      }t        j                  | |gd      } t               }t        d|dgfgd      }t        d|dgfgd      }t        |j                  |       |j                  |              y )Nr.   r/   axisoher\   r   r_   )	r2   randomrandnrm   concatenater   r	   r   rp   )r%   X_categoriesr  tf_1tf_2s        r'   /test_column_transformer_negative_column_indexesr  g  s    
		1A88aS1#J'L
<(q1A
/CucB401]KDucA3/0MJDt))!,d.@.@.CDr*   
array_typec                     t        j                  g dg dg dg dg      } | |      }t        dt               g dfg      }|j	                  |      }|j
                  dk(  sJ y )Nr/   r.   r   rZ      r[   )r  r[      )rn  r   ri   identity)FTFT)r   r.   )r2   	transposer	   r   rp   r   )r  r%   column_transformerr   s       r'   %test_column_transformer_mask_indexingr  s  se     	iIzBCA1A*
)+-G	HI !..q1G==F"""r*   c                      ddgddgddgg} t        dt               dgfd	t               dgfg      }t        |d
      rJ |j                  |        |j                  dk(  sJ y )Nr/   r.   r   rZ   r  r[   r   r   r   n_features_in_)r	   r;   r0   r(   r  )r%   rz   s     r'   test_n_features_inr    sq     Q!Q!Q A	S+-!5[]QC7PQ	RBr+,,,FF1I!!!r*   zcols, pattern, include, excludecol_int	col_floatcol_strzat$z^col_intz	float|strz^col_szstr$r  r  r  c                    t        j                  d      }|j                  t        j                  g dt
              t        j                  g dt              g ddg d      }t        |||      }t         ||      |        y )	Nr   rX   r   r   onetwothreer  r   )dtype_includedtype_excluder  )	r   r   r   r2   rm   intr   r
   r   )rZ  r  includeexcluder   r   selectors          r'   ,test_make_column_selector_with_select_dtypesr    ss    & 
		X	&B<<xx	5/?.	

 4  D $WgH x~t,r*   c                  (   t        j                  d      } | j                  t        j                  g dt
              t        j                  g dt              g dg ddg d      }|d	   j                  d
      |d	<   t        d
t        g      }t        t        j                        }t               }t               }t        ||f||f      }t        |dd	gf|ddgf      }|j                  |      }|j                  |      }	t        ||	       y )Nr   rX   r   r   )r  r  r  )lowmiddlehigh)r  r  col_catr  r   r  categoryr  r  r  r  )r   r   r   r2   rm   r  r   r  r
   r   numberr   r   r   rp   r   )
r   r   cat_selectornum_selectorr  r  ct_selector	ct_direct
X_selectorX_directs
             r'   1test_column_transformer_with_make_column_selectorr    s    			X	&B<<xx	5/?,0		
 ?  D 9o,,Z8DO'z66JKL'bii@L
/CF)3*=?UVK'	y)$%i0H'II **40J&&t,HJ)r*   c                      t        t        j                        } t        j                  ddgg      }d}t	        j
                  t        |      5   | |       d d d        y # 1 sw Y   y xY w)Nr  rh   r   z=make_column_selector can only be applied to pandas dataframesr   )r
   r2   r  rm   r   r   rT   )r  r%   r   s      r'   test_make_column_selector_errorr    sS    #"))<H
3*A
IC	z	-   s   	A""A+c                  r   t        j                  d      } | j                  t        j                  g dt
              t        j                  g dt              g ddg d      }t        t        g      }t        j                  t        j                  |            }t         ||       ||             y )	Nr   rX   r   r   r  r  r   r  )r   r   r   r2   rm   r  r   r
   r   pickleloadsdumpsr   )r   r   r  selector_pickeds       r'    test_make_column_selector_pickler    s    			X	&B<<xx	5/?.	

 4  D $6(;Hll6<<#9:Ox~t'<=r*   	empty_colc                     g S r!   r"   rE  s    r'   rd   rd     s    B r*   )r   rm   r  c                    t        j                  d      }|j                  g dg dd      }t        dt	               ddgfdt	               | fg	      }|j                  |       t        |j                         g d
       y )Nr   r   r   r   zr  r  r   r   r  r   r   empty_featuresr   )ohe__col1_aohe__col1_bohe__col2_zr   r   r   r	   r   r(   r   r;  )r  r   r   rz   s       r'    test_feature_names_empty_columnsr    sw     
		X	&B	H	IB	MOff%56}	:

B FF2J
  "$Qr*   r  c                     dgS rG  r"   rE  s    r'   rd   rd     s    1# r*   r   c                     dgS )Nr   r"   rE  s    r'   rd   rd     s    6( r*   c                 
    ddgS NFTr"   rE  s    r'   rd   rd     s
    5$- r*   c                     t        j                  d      }|j                  g dg dd      }t        dt	               | fg      }|j                  |       t        |j                         dg       y)z1Checks name when selecting only the second columnr   r  r  r  r  r  Nr  )r  r   r   rz   s       r'   test_feature_names_out_pandasr     s]     
		X	&B	H	IB	UMOX>?	@BFF2Jr//1M?Cr*   c                     dgS rG  r"   rE  s    r'   rd   rd     s     r*   c                 
    ddgS r  r"   rE  s    r'   rd   rd     s
    udm r*   c                     ddgddgddgg}t        dt               | fg      }|j                  |       t        |j	                         dg       y)z=Checks name when selecting the second column with numpy arrayr   r  r   r  	ohe__x1_zN)r	   r   r(   r   r;  )r  r%   rz   s      r'   !test_feature_names_out_non_pandasr    sR    
 sc3Z#s,A	UMOX>?	@BFF1Ir//1K=Ar*   c                     t               }t        d|ddgfg|       }|j                         }|j                  dk(  sJ |j                  ddgdfk(  sJ |j
                  || fk(  sJ y )Nr  r   r   r   r`   r  r`    r   r	   _sk_visual_block_r  name_details
estimators)r`   r  rz   visual_blocks       r'   test_sk_visual_block_remainderr  !  s     /C	cFF#345
B '')L!5555$$&&)92(>>>>""sI&6666r*   c                      t               } t        d| ddgfg      }|j                         }|j                  dk(  sJ |j                  ddgfk(  sJ |j
                  | fk(  sJ y )Nr  r   r   r  )r  r  )r  rz   r  s      r'   #test_sk_visual_block_remainder_dropr  .  sv    
/C	%vv6F)G(H	IB'')L)))$$&&)9(;;;;""sf,,,r*   c                 ^   t        j                  d      }t               }t        d|ddgfg| d      }|j	                  g dg dg d	g d
d      }|j                  |       |j                         }|j                  dk(  sJ |j                  ddgddgfk(  sJ |j                  || fk(  sJ y )Nr   r  r   r   F)r   r`   r+  r   r   cr  r  r   rZ   r  )r   r   col3col4r  r  r   )
r   r   r   r	   r   r(   r  r  r  r  )r`   r   r  rz   r   r  s         r'   ,test_sk_visual_block_remainder_fitted_pandasr  8  s     
		X	&B
/C	cFF#345!&
B
 
##		

B FF2J'')L!5555$$&&)9FF;K(LLLL""sI&6666r*   c                 6   t        j                  g dg dgt              }t               }t	        d|ddgfg|       }|j                  |       |j                         }|j                  dk(  sJ |j                  ddgd	gfk(  sJ |j                  || fk(  sJ y )
Nr  r  r   scaler   r.   r  )r  r`   r/   )
r2   rm   r   r   r	   r(   r  r  r  r  )r`   r%   r  rz   r  s        r'   +test_sk_visual_block_remainder_fitted_numpyr  Q  s     	)Y'u5AF	A/0I
B FF1I'')L!7777$$!Q!555""vy&9999r*   explicit_colname)r   r   r   r/   c                    t        j                  d      }t        j                  g dg dg      j                  }|j                  |ddg      }t        j                  g dg dg      j                  }|j                  |ddg      }t        dt               | fg|      }|j                  |       |j                  |      }|j                  |      }	t        |	|       |j                         }
g d	|
d
<   |j                  |
      }	t        |	|       t        | t              rH|j                         }d}t        j                  t        |      5  |j                  |       ddd       yy# 1 sw Y   yxY w)z=Test the interaction between remainder and column transformerr   rX   rY   r   r   r   bycolr_   r   thirdr   r   N)r   r   r2   rm   r4   r   r	   r   r(   r5   r   r   r   rV  r   rT   )r  r`   r   X_fit_arrayX_fit_dfX_trans_array
X_trans_dftfX_fit_transr   X_extended_dfrs   r  s                r'   8test_column_transformer_reordered_column_names_remainderr  `  sI    
		X	&B((Iy1244K||K'81D|EHHHi3466Mmh5HIJ	Weg/?@AY	WBFF8,,x(K ll:&GG[) MMOM&M'll=)GG[)"C( ""$*]]:W5 	"LL!	" 	" )
	" 	"s   E//E8c                     t        j                  d      } t        j                  d      }| j	                  |g d      }|j                  dd      }t        d	t               dgfgd
      }|j                  |       d}t        j                  t        |      5  |j                  |       ddd       t        d	t               dgfgd      }|j                  |       |j                  |      }|j                  |      }t        ||       t        d	ddgfgd
      }|j                  |       |j                  |      }|j                  |      }t        ||       y# 1 sw Y   xY w)zRTest the interaction between {'drop', 'passthrough'} and
    missing column names.r   ru  )r   r   r   r  dr   r  r/   r  r  r   r_   zcolumns are missing: {'c'}r   Nr^   )r   r   r2   rM  r   r^   r	   r   r(   r   rT   r5   r   )r   r%   r   
df_droppedr  r   df_dropped_transdf_fit_transs           r'   <test_feature_name_validation_missing_columns_drop_passthoughr    s>    
		X	&B
fA	a!5	6B1%J 
Wegs34	NBFF2J
'C	z	- !
Z ! 
Wegs34	GBFF2J||J/<<#L$l3 
Wfse45	OBFF2J||J/<<#L$l3!! !s   E!!E*c                  p   t        j                  d      } g d}| j                  g dg|      }t        dt	               ddgfgd	      }|j                  |       t        |j                  |       t        |j                  t        j                        sJ |j                  j                  t        k(  sJ y
)a?  Feature names are stored in column transformer.

    Column transformer deliberately does not check for column name consistency.
    It only checks that the non-dropped names seen in `fit` are seen
    in `transform`. This behavior is already tested in
    `test_feature_name_validation_missing_columns_drop_passthough`r   r   r  r  r  r   r  r   r  r   r_   N)r   r   r   r	   r   r(   r   feature_names_in_r   r2   ndarrayr   r   )r   feature_namesr   rz   s       r'   test_feature_names_in_r    s     
		X	&B#M	yk=	9B	WegSz:;}	UBFF2Jr++];b**BJJ777%%///r*   c                       e Zd ZddZddZy)TransWithNamesNc                     || _         y r!   feature_names_out)r$   r"  s     r'   rC   zTransWithNames.__init__  s
    !2r*   c                 h    | j                   %t        j                  | j                   t              S |S )Nr   )r"  r2   asarrayr   )r$   input_featuress     r'   r;  z$TransWithNames.get_feature_names_out  s+    !!-::d44FCCr*   r!   )r7   r8   r9   rC   r;  r"   r*   r'   r  r    s    3r*   r  z'transformers, remainder, expected_namesbycol1r  r  bycol2)	bycol1__d	bycol1__c	bycol2__dremainder__aremainder__b)r(  r)  r*  r   )	bycol1__br+  remainder__cpca1pca2)r   r   r  )bycol1__pca1bycol1__pca2r.  r   )	bycol1__ar-  	bycol2__br  )bycol1__pca0r1  bycol2__pca0bycol2__pca1r+  r.  remainder__dr   r-  r)  rZ   r+  )r(  r)  	bycol2__cr*  r+  r,  c                 4   t        j                  d      }|j                  g dgg d      }t        | |      }|j	                  |       |j                         }t        |t        j                        sJ |j                  t        k(  sJ t        ||       y)DCheck feature_names_out for verbose_feature_names_out=True (default)r   r/   r.   r   rZ   r  r   r_   Nr   r   r   r	   r(   r;  r   r2   r  r   r   r   r   r`   expected_namesr   r   rz   r  s          r'   #test_verbose_feature_names_out_truer@    s    t 
		X	&B	|n.B	CB	
B FF2J$$&EeRZZ(((;;&   un-r*   
trans_name	feat_namec                     | d d  d| S )Nr.   z++r"   rA  rB  s     r'   &_feature_names_out_callable_name_clashrE  N  s    !nR	{++r*   c                 H    | j                          d|j                          S )N=)upperrD  s     r'   !_feature_names_out_callable_upperrI  R  s%     !9??#4"566r*   zBtransformers, remainder, verbose_feature_names_out, expected_names)by++dzby++crJ  zre++azre++bz!{feature_name}-{transformer_name})zd-bycol1zc-bycol1zd-bycol2)zBYCOL1=DzBYCOL1=CzBYCOL2=CzBYCOL2=DzREMAINDER=AzREMAINDER=Bc                 6   t        j                  d      }|j                  g dgg d      }t        | ||      }|j	                  |       |j                         }t        |t        j                        sJ |j                  t        k(  sJ t        ||       y)r;  r   r<  r  r   r`   r)  Nr=  )r   r`   r)  r?  r   r   rz   r  s           r'   .test_verbose_feature_names_out_callable_or_strrM  V  s    V 
		X	&B	|n.B	CB	";
B
 FF2J$$&EeRZZ(((;;&   un-r*   )r  r  r   r   )r   r   r  )r/  r0  r  r  kpca)pca0r/  kpca0kpca1r   r  r  r  )r  r  r   c                 6   t        j                  d      }|j                  g dgg d      }t        | |d      }|j	                  |       |j                         }t        |t        j                        sJ |j                  t        k(  sJ t        ||       y);Check feature_names_out for verbose_feature_names_out=Falser   r<  r  r   FrL  Nr=  r>  s          r'   $test_verbose_feature_names_out_falserT    s    j 
		X	&B	|n.B	CB	"'
B
 FF2J$$&EeRZZ(((;;&   un-r*   z*transformers, remainder, colliding_columnsz['b']z['c']z['a']z
['b', 'c']bycol3z
['a', 'b']r[   z-['pca0', 'pca1', 'pca2', 'pca3', 'pca4', ...]c                 N   t        j                  d      }|j                  g dgg d      }t        | |d      }|j	                  |       t        j                  d| d      }t        j                  t        |	      5  |j                          d
d
d
       y
# 1 sw Y   y
xY w)rS  r   r<  r  r   FrL  zOutput feature names: z[ are not unique. Please set verbose_feature_names_out=True to add prefixes to feature namesr   N)
r   r   r   r	   r(   r  r  r   rT   r;  )r   r`   colliding_columnsr   r   rz   r   s          r'   +test_verbose_feature_names_out_false_errorsrX    s    ` 
		X	&B	|n.B	CB	"'
B
 FF2J
))
 !2 3 4J 	JC 
z	- #
  "# # #s   BB$r)  c                 T   t        j                  d      }|j                  g dgg ddg      }t        dt	               ddgfd	t	               d
gfg||       }|j                  |      }t        |t        j                        sJ |j                  d       |j                  g dg|j                  dg      }|j                  |      }t        ||j                        sJ |j                         }t        |j                  |       t        |j                  |j                         y)z2Check column transformer behavior with set_output.r   r<  r  ri   r   r   r   r   r  r   r  rL  r5      N)r   r   r   r	   r  rp   r   r2   r  
set_outputr   r5   r;  r   r   )r)  r`   r   r   rz   r   df_testr"  s           r'   "test_column_transformer_set_outputr_    s    
		X	&B	|n.B2$	OB	
>#c3Z	08^=MPSu2UV";
B
 r"Ggrzz***MMHM%llL>2::bTlJGll7#Ggr||,,,002w(9:w}}gmm4r*   c                    t        j                  d      }|j                  |j                  g dd      |j                  g dd      g dg d|j                  d	|j                  d
gd      d      }t        dt        dd      dgfdt               dgfg| d      j                  d      }|r|j                  |      }n |j                  |      j                  |      }t        ||j                        sJ t        |j                  |j                                dddddddd}|j                   j#                         D ]  \  }}|||   k(  rJ  y)z6Check ColumnTransformer outputs mixed types correctly.r   dogcatsnaker  r   )greenblueredr   gffffff?g @g@r\  (   ri   r\  d   Int32)petcolorageheightdistancecolor_encodeFint8r   r   rn  ro  rL  r[  float64int64)
color_bluecolor_green	color_redro  rm  rp  rq  N)r   r   r   r   NAr	   r   r   r]  rp   r(   r5   r   r   r   r;  dtypesitems)	r`   rp   r   r   rz   r   expected_dtypesr   r   s	            r'   &test_column_transform_set_output_mixedr~    si    
		X	&B	994J9GYY7xYH""		2ruuc"2'	B	

B 
 E@	
 N$ug.	
 "'
 j8j$  ""2&&&*&&r*gr||,,,w(@(@(BC O nn**, -
U,,,,-r*   c                    t        j                  d      }|j                  |j                  g dd      g dg dd      }t	        dt        d	d
      dgfdt               dgfg| d	      }|j                  |      }t        |t        j                        sJ |j                  dk(  sJ |j                  d       |j                  |      }d
d
d
ddd}|j                  j                         D ]  \  }}|||   k(  rJ  y )Nr   ra  r  r   rh  ri  )rm  ro  rp  rr  Fint16rt  rm  ro  rL  ru  r[  rv  )pet_catpet_dog	pet_snakerp  ro  )r   r   r   r   r	   r   r   rp   r   r2   r  r   r]  r5   r{  r|  )	r`   r   r   rz   r   r  r}  r   r   s	            r'   .test_column_transform_set_output_after_fittingr    s    			X	&B	994J9G""	

B 
 EA
 N$ug.	
 "'
B r"Ggrzz***==I%%%MMHM%b!JO !''--/ -
U,,,,-r*   c                   ,    e Zd ZddZddZddZddZy)PandasOutTransformerc                     || _         y r!   offset)r$   r  s     r'   rC   zPandasOutTransformer.__init__		  s	    r*   Nc                 `    t        j                  d      }t        ||j                        sJ | S Nr   )r   r   r   r   r$   r%   r&   r   s       r'   r(   zPandasOutTransformer.fit	  s+      *!R\\***r*   c                 z    t        j                  d      }t        ||j                        sJ || j                  z
  S r  )r   r   r   r   r  r  s       r'   r5   zPandasOutTransformer.transform	  s4      *!R\\***4;;r*   c                     | S r!   r"   )r$   r5   s     r'   r]  zPandasOutTransformer.set_output	  s	     r*   )r   r!   )r7   r8   r9   rC   r(   r5   r]  r"   r*   r'   r  r  	  s    

r*   r  z;trans_1, expected_verbose_names, expected_non_verbose_namesr   r  trans_0__feat1trans_1__feat0feat1feat0c                 Z   t        j                  d      }|j                  g dg dd      }t        dt	        d      dgfd	| d
gfg      }|j                  |      }t        |t        j                        sJ t        j                  t        d      5  |j                          ddd       |j                  d       |j                  |      }t        |j                  |       |j                  d       |j                  |      }t        |j                  |       y# 1 sw Y   |xY w)zCheck that set_config(transform="pandas") is compatible with more transformers.

    Specifically, if transformers returns a DataFrame, but does not define
    `get_feature_names_out`.
    r   )r   r         @)r   r  r   )r  r  trans_0r  r  r  trans_1r  z!not provide get_feature_names_outr   Nr[  Fr)  )r   r   r   r	   r  rp   r   r2   r  r   r<  r;  r]  r   r   r.  )	r  expected_verbose_namesexpected_non_verbose_namesr   r   rz   
X_trans_npX_trans_df0X_trans_df1s	            r'   ;test_transformers_with_pandas_out_but_not_feature_names_outr  	  s   8 
		X	&B<</OLMD	,C87)D'+	

B !!$'Jj"**--- 
~-P	Q #
  "# MMHM%""4(K{**,BCMMEM2""4(K{**,FG# #s   D!!D*empty_selectionc                    t        j                  d      }|j                  ddgddggddg      }t        dd	| fd
t	               ddgfgd      }|j                  d       |j                  |      }t        |j                  ddg       |j                  d       |j                  |      }t        |j                  ddg       y)zkCheck that pandas output works when there is an empty selection.

    Non-regression test for gh-25487
    r   r   皙@r  r   r   r   r   r   r   Tr  r[  numerical__anumerical__bFN)
r   r   r   r	   r   r]  rp   r   r   r.  )r  r   r%   rz   X_outs        r'   "test_empty_selection_pandas_outputr  S	  s     
		X	&B
sCj3*-SzBA	M?;.*S#J7	
 #'
B MMHM%QEu}}~~&FGMMEM2QEu}}sCj1r*   c                  Z   t        j                  d      } | j                  ddgddggddgddg	      }t        d
 d      }t	        dddgfd|dgfg      }|j                  d       d}t        j                  t        |      5  |j                  |       ddd       y# 1 sw Y   yxY w)zmCheck column transformer raises error if indices are not aligned.

    Non-regression test for gh-26210.
    r   r   r  r  r   r   rn  r   rZ  c                 &    | j                  d      S )NT)r^   )reset_indexrE  s    r'   rd   z7test_raise_error_if_index_not_aligned.<locals>.<lambda>y	  s    !--T-* r*   z
one-to-oner!  num1r   num2r[  zConcatenating DataFrames from the transformer's output lead to an inconsistent number of samples. The output may have Pandas Indexes that do not match.r   N)	r   r   r   r   r	   r]  r   rT   rp   )r   r%   reset_index_transformerrz   r   s        r'   %test_raise_error_if_index_not_alignedr  p	  s    
 
		X	&B
sCj3*-Sz!QPA1*l 
]SE*,se4	

B MMHM%	& 
 
z	- 
  s   B!!B*c                     t        j                  d      } | j                  g dg dd      }t        t	               t        t              ft	               d      }|j                  d       |j                  |      }| j                  j                  ||       |j                  d	       |j                  |      }t        |t        j                        sJ y
)zYCheck that the output is set for the remainder.

    Non-regression test for #26306.
    r   )TFTr  )r   r   r  FrL  r[  defaultN)r   r   r   r   r   r
   r   r]  rp   testingassert_frame_equalr   r2   r  )r   r   rz   r  s       r'   test_remainder_set_outputr  	  s     
		X	&B	/i@	AB	 		2FG#%"'
B
 MMHM%


2
CJJ!!#r*MMIM&


2
Cc2::&&&r*   c                     t        j                  d      } t        | d      st        j                  d       | j	                  dddgi      }t        ddgf      }t        j                         5  t        j                  d       |j                  |       ddd       |j                         }t        j                  t        d	
      5  |j                  |       ddd       |j                  d       |j                  |       |j                  d       |j                  |j                  d             y# 1 sw Y   xY w# 1 sw Y   kxY w)zCheck behavior when a tranformer's output contains pandas.NA

    It should raise an error unless the output config is set to 'pandas'.
    r   Float64DtypezfThe issue with pd.NA tested here does not happen in old versions that do not have the extension dtypesr   r   Nr   rL  z set_output\(transform='pandas'\)r   r[  r  g      )r   r   r0   skipr   r   rN  rO  rP  rp   convert_dtypesr   rT   r]  fillna)r   r   rz   s      r'   test_transform_pd_nar  	  s   
 
		X	&B2~&-	
 
sS$K(	)B	 -#!7	8B		 	 	" g&
 
			B 
z)L	M 
 MMHM%RMMIM& RYYt_%  s   .'D8E8EEc                  ^   t        j                  d      } t        j                  d      }t        j                  ddgddgddgg      }t        j                  ddgddgddgg      }| j	                  |d	d
g      }|j	                  |d	d
g      }t        t               ddgf      }|j                  |       |j                  |      }t        ||       |j	                  |d	d
g      }| j	                  |d	d
g      }	|j                  |       |j                  |	      }
t        |
|       y)z?Check fitting and transforming on pandas and polars dataframes.r   r   r   r/   r.   rZ   r  r   r   r   r   )schemaN)
r   r   r2   rm   r   r   r   r(   r5   r   )r   pl
X_train_np	X_test_np
X_train_pd	X_test_plrz   	out_pl_in
X_train_pl	X_test_pd	out_pd_ins              r'   ,test_dataframe_different_dataframe_librariesr  	  s   			X	&B			X	&BAq6Aq6Aq623J1a&1a&1a&12I j3*=JYSz:I	 %'Aq6!2	3BFF:Y'Iy), j#s<JYc
;IFF:Y'Iy),r*   c                     t        j                  g dg dg      } t        dt               ddgfdt               ddgfg      }d}t	        j
                  t        |	      5  |d    d
d
d
       |j                  |        |d   |j                  d   u sJ |d   |j                  d   u sJ d}t	        j
                  t        |	      5  |d    d
d
d
       y
# 1 sw Y   rxY w# 1 sw Y   y
xY w)z(Check __getitem__ for ColumnTransformer.rX   r  t1r   r/   t2r.   z5ColumnTransformer is subscriptable after it is fittedr   Nz0'does_not_exist' is not a valid transformer namedoes_not_exist)
r2   rm   r	   r   r   r   r
  r(   r4  KeyError)r%   rz   r   s      r'   "test_column_transformer__getitem__r  	  s    
)Y'(A	T57QF3dEGaV5LM	NB
AC	y	, 
4 FF1Id8r--d3333d8r--d3333
<C	xs	+ 
   s    CC#C #C,transform_outputr  c                    t        j                  d      }|j                  t        j                  j                  dd            }t        dt               ddgfgd      j                  | 	      }|j                  |      }|j                  |j                  k(  sJ g d
}t        |d      r|j                  j                         |k(  sJ |j                         j                         |k(  sJ y)zCheck that when `remainder="passthrough"`, inconsistent naming is handled
    correctly by the underlying `FunctionTransformer`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/28232
    r   ri   rZ   r  r   r/   r   r  r[  )
scaler__x0
scaler__x1remainder__x2remainder__x3r   N)r   r   r   r2   r  r  r	   r   r]  rp   r   r0   r   tolistr;  )r  r   r%   preprocessorr   expected_column_namess         r'   @test_column_transformer_remainder_passthrough_naming_consistencyr  	  s     
		X	&B
RYY__R+,A$!1Aq6:; j+j,  ((+G==AGG### w	"%%'+@@@@--/668<QQQQr*   r   c           	      \   t        j                  |       }|j                  g dg dg dd      }t        ddg dfdt	               dd	gfd
t               ddgfdt	        d       g dfgd      j                  |       }|j                  |      }t        |j                        g dk(  sJ y)zCheck that we properly rename columns when using `ColumnTransformer` and
    selected columns are redundant between transformers.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/28260
    r  ri   r\     rk     i,  x1x2x3r   r   r   r  r  rT  r  Dc                     t        | g d      S Nr/   r  r   rE  s    r'   rd   z9test_column_transformer_column_renaming.<locals>.<lambda>!
      nQ.K r*   Tr   r)  r[  )A__x1A__x2A__x3B__x1B__x2C__x1C__x3N)
r   r   r   r	   r   r   r]  rp   r   r   )r   libr   transformerdf_transs        r'   'test_column_transformer_column_renamingr  
  s     

m
,C	i|?S	TB#-!34%'$6."T4L1 #$KL"

 #' j=j)  ((,H  ! &   r*   c           	         t        j                  |       }|j                  g dg dg dd      }t        ddg dfdt	               dd	gfd
t               ddgfdt	        d       g dfgd      j                  |       }t        j                  d      }t        j                  t        |      5  |j                  |       ddd       y# 1 sw Y   yxY w)zzCheck that we raise an error when using `ColumnTransformer` and
    the columns names are duplicated between transformers.r  r  r  r  r   r   r   r  r  rT  r  r  c                     t        | g d      S r  r   rE  s    r'   rd   zGtest_column_transformer_error_with_duplicated_columns.<locals>.<lambda>C
  r  r*   Fr  r[  a   Duplicated feature names found before concatenating the outputs of the transformers: ['x1', 'x2', 'x3'].
Transformer A has conflicting columns names: ['x1', 'x2', 'x3'].
Transformer B has conflicting columns names: ['x1', 'x2'].
Transformer C has conflicting columns names: ['x1', 'x3'].
r   N)r   r   r   r	   r   r   r]  r  r  r   rT   rp   )r   r  r   r  r  s        r'   5test_column_transformer_error_with_duplicated_columnsr  3
  s     

m
,C	i|?S	TB#-!34%'$6."T4L1 #$KL"

 #( j=j)  ii	GG 
z	1 &!!"%& & &s   0CCz1.3zrequires joblib >= 1.3)reasonc                  n   t         j                  j                  d      j                  d      } t	        d      }t        d|dgfgd      }t        j                  d	d
      5  |j                  |       }ddd       t        t	               j                  | dddgf                y# 1 sw Y   5xY w)z|Check that ColumnTransformer works in parallel with joblib's auto-memmapping.

    non-regression test for issue #28781
    r   ru  )sizeF)r   r  r.   )r   r  lokyr/   )
max_nbytesN)
r2   r  RandomStateuniformr   r	   joblibparallel_backendrp   r   )r%   r  r  Xts       r'   #test_column_transformer_auto_memmapr  T
  s     			a ((f(5A'F#!-.K
 
	 	 A	6 *&&q)* B(66qQCyAB* *s   %B++B4)r5   rp   r(   c                 6   t        j                  g dg dg      j                  }g d}t        dt	               dgfg      j                  ||      }t        j                  t        d      5   t        ||       dggdgd	
       ddd       y# 1 sw Y   yxY w)zTest that the right error message is raised when metadata is passed while
    not supported when `enable_metadata_routing=False`.rX   rY   r  r]   r   z1is only supported if enable_metadata_routing=Truer   r/   r   )sample_weightpropN)
r2   rm   r4   r	   r   r(   r   r   rT   r1   )r  r%   r&   trss       r'   *test_routing_passed_metadata_not_supportedr  p
  s    
 	)Y'(**AA
guw45
6
:
:1a
@C	M
 A 	VqcU1#C@A A As   -BB)enable_metadata_routingc                    t        j                  g dg dg      j                  }g d}t               }dgd}}t	        dt        |      j                  dd	      j                  dd	      d
gfg      }| dk(  r*|j                  ||||	       |j                  |||	       n t        ||       ||||	       t        |      sJ |D ]  }t        || | ||        y)z>Test that metadata is routed correctly for column transformer.rX   rY   r  r/   r   r]   )registryTr  metadatar   r5   )objr  parentr  r  N)r2   rm   r4   r   r	   r   set_fit_requestset_transform_requestr(   r5   r1   rF   r   )r  r%   r&   r  r  r  r  _trss           r'   ,test_metadata_routing_for_column_transformerr	  
  s     	)Y'(**AA{H c38M
 $h7 tdC&&TD&I	

C 1MHEa}xHVQRx== 
'	

r*   c                  @    G d dt               } t        j                  g dg dg      j                  }g d}dgd}}t	        d |        j                  d	d	
      j                  d	d	
      dgfg      }|j                  ||||
       |j                  ||||
       y)zUTest metadata routing when the sub-estimator doesn't implement
    ``fit_transform``.c                       e Zd ZddZddZy)>test_metadata_routing_no_fit_transform.<locals>.NoFitTransformNc                     |sJ |sJ | S r!   r"   )r$   r%   r&   r  r  s        r'   r(   zBtest_metadata_routing_no_fit_transform.<locals>.NoFitTransform.fit
  s      =O8Kr*   c                     |sJ |sJ |S r!   r"   )r$   r%   r  r  s       r'   r5   zHtest_metadata_routing_no_fit_transform.<locals>.NoFitTransform.transform
  s      =O8Hr*   )NNN)NNr6   r"   r*   r'   NoFitTransformr  
  s    	
	r*   r  rX   rY   r  r/   r   r]   Tr  r   N)	r   r2   rm   r4   r	   r  r  r(   rp   )r  r%   r&   r  r  r  s         r'   &test_metadata_routing_no_fit_transformr  
  s    
	 	 	)Y'(**AA c38M
   tdC&&TD&I	

C GGAqGAa-(Kr*   c                    t        j                  g dg dg      j                  }g d}dgd}}t        dt	               dgfg      }d|  }t        j                  t        t        j                  |      	      5  | d
k(  r'|j                  ||       |j                  |||       n t        ||       ||||       ddd       y# 1 sw Y   yxY w)zCTest that the right error is raised when metadata is not requested.rX   rY   r  r/   r   r]   r   zw[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for ConsumingTransformer.r   r5   r  N)r2   rm   r4   r	   r   r   r   rT   r  r  r(   r5   r1   )r  r%   r&   r  r  r  error_messages          r'   2test_metadata_routing_error_for_column_transformerr  
  s     	)Y'(**AA c38M
g';'=sCD
EC	66<X	?  
z=)A	B W[ GGAqMMM!=8ML GC A]XVW W Ws   :ACCc                  T    t        dt               dgfg      } | j                          y )Nr]   r   )r	   r   get_metadata_routingr  s    r'   +test_get_metadata_routing_works_without_fitr  
  s*     
W&:&<qcBC	DBr*   c                      t        dt               dgfgt               j                  d      j	                  d            } | j                         }|j                  ddg      t        dg      k(  sJ y )Nr]   r   Tr  r_   r(   r  )r	   r   r   r  r  r  consumessetrz   routers     r'   %test_remainder_request_always_presentr  
  sr     

>#aS	)*&(	$	'				-	
B $$&F??5:,/3
|3DDDDr*   c                      t        dt               j                  d      j                  d      d fg      } | j	                         }|j                  ddg      t        dg      k(  sJ y )Nr]   Tr  c                     g S r!   r"   )r%   s    r'   rd   z9test_unused_transformer_request_present.<locals>.<lambda>
  s    " r*   r(   r  )r	   r   r  r  r  r  r  r  s     r'   'test_unused_transformer_request_presentr   
  sr     
 $& $/&&&5	


B $$&F??5:,/3
|3DDDDr*   )__doc__r  r  rN  unittest.mockr   r  r   r2   r   numpy.testingr   scipyr   sklearnr   sklearn.baser   r   sklearn.composer	   r
   r   #sklearn.compose._column_transformerr   sklearn.exceptionsr   sklearn.feature_selectionr   sklearn.preprocessingr   r   r   r   %sklearn.tests.metadata_routing_commonr   r   r   sklearn.utils._indexingr   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr   r   r   r;   r@   rK   rO   r|   r   markparametrizer   rm   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r1  r7  r9  r=  r?  rB  rS  r[  rc  ro   rg  r   rk  ro  rq  rs  rx  rz  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  ranger@  rV  rE  rI  rM  rT  rX  r_  r~  r  r  r  r  r  r  r  r  r  r  r  r  skipif__version__r  r  r	  r  r  r  r  r   )is   0r'   <module>r6     s    	      )  " 8 
 C - 7  
 3  >m - 	D 	D - -?(D" +k8-DE`9 F`9F D%=x6IJ5%.	!E5>2$  
 *UDM:,: ; K,:^(XVT> .9W :W.J( .9A :A2,1,h"  v}&=> $ ? $F,J
<%."b6(4#26-"d 
"#
qc
	& udm40 50* ,	useaS!	use$	#%9A3?	$&:<PQ	"!"!J0 
qc
	1#	q!qc	4-	 5$-0	44$ 
qc
	q!qc	4-	 5$-0
XJ	hZ 	7)	xj)	7)6	*XJ7	tW	z*	w	 8*-
44. 
q!f	1#A	q!q!f	&	')<=	44*28  .98 :8. .98 :8(+"\0 
I EGaS)Hegs+CD%-
X
	
 EGaS)Hegs+CD'
X
	
 EGaS)Hfqc+BC'
X		
 EGaS)HmaS+IJ'
X
	
 %'A378MRX	
 EGaS)Hegs+CDPVU	
 %'A378FKP	
y@CH E?#;<
5 =ICJ
5
) /(	E 

'D^'DE	# F	#" %
[	!4D9
[	!4v6
[	!4#ut<
dVHd+
dFD)
eT*
		{D1
dSE4(
j299+t4
y	!;d;
hse,	VUD!	,dRYY4GN$-%$-&*>>$ "C	 ,/%  

$ 	
		
D
D !meT]4KLBB }n6F&GH	7 I	7- }n6F&GH7 I70 }n6F&GH: I: +-FGuwv&FG!" H H!"H4D0(U  - >+c3Z8=3%0 S	
 >+c3Z8=3%0 3	
 >+cU36C5) 9	
 >66*:;_M <	
 >3*5u==3%0 3	
 >eAh*GS9*GH3%P>eAh*GS9*GH3%P 	
$ 6C5) 	
 >+U1a[9 +&	
 >+cU365A;/ 9	
 >+c3Z8=%1+6 S	
 >+U3_= +&	
 >+cU365c?3 .)	
 >+c3Z8=%S/: 	
Ktwp.qwp. ,s ,s ,7# 7# 7 H >+c3Z8=3%0 29	
 >+c3Z8=3%0 /0	
 >+c3Z8=%S/: -	
'#&N.O&N.& - >+c3Z8=3%0  	
 >3%03*==3%0 #J	
 >+cU36C5) 	
 >66*:;_M !	
 >3*5u==3%0 	
 >eAh*GS9*GH3%P>uQx*H!T!:*HIC5Q =	
 6C5) 	
 >+U1a[96C5) 	
 >+cU365A;/ 	
 >+c3Z8=%1+6  	
 >+U3_=6C5) 	
 >+cU365c?3 #J	
 >+c3Z8=%S/:  	
 >+c3Z8=%S/: 	
Oorf.grf." 0 >+cU3=3%0 	
 >3*5u==3%0 	
 >3%03%8=3%0 	
 >3%03%86C5) 	
 >3*5u==3*5 	
 >3%03%8=3%0>3%03%8
 	
 >3*5u==3%0>3%03%8
 	
 >eAh*GS9*GH3%P>eAh*GS9*GH3%P ;	
 >3*5uQ{C=3%0>3%03%8
 	
 >3*5u==%1+6>3%03%8
 	
 >3*5uS#G=3%0>3%03%8
 	
 >3*5u==%S/:>3%03%8
 	
}gjV#WjV#, 4tUmDv}&=>5 ? E5. v}&=>4-8*- 9 ?*-Z v}&=>%- ?%-T= ( A !,/0g	
 I	
 /0g	
( H)( HF 5%.	!E5>2$  
2
208'0&@-4$ +i-BCR DR8 8X*>?" @"J 8X*>?& @&@ &$$%e(<<#  C	C0 #HIA JA #HI- 
 . J 
F -L .LD #HI-W . JW& - . -	E .	E -E .EA  +H*GR +H*Hl +H*Gs$   >~1 ~69~; =
 