
    h$,fUY                       d Z ddlZddl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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mZmZmZ dd
lmZmZmZ ddlm Z m!Z!m"Z"m#Z# ddl$m%Z%  G d dee      Z& G d de      Z' G d de      Z( G d de      Z) G d de      Z*d Z+d Z,ejZ                  j]                  dddg      d        Z/ejZ                  j]                  dddgdd g!      ejZ                  j]                  d"g  ej`                  ddg      ddggg d#!      ejZ                  j]                  d$ddg      d%                      Z1d& Z2d' Z3ejZ                  j]                  d(e%      d)        Z4d* Z5ejZ                  j]                  d(e%      d+        Z6d, Z7d- Z8d. Z9d/ Z:d0 Z;ejZ                  j]                  d1d2d3g      d4        Z<d5 Z=d6 Z>d7 Z?d8 Z@d9 ZAd: ZBd; ZCd< ZDd= ZEd> ZFd? ZGejZ                  j]                  d@dg ej`                  dg       eHddA       ej`                  ddg      g      dB        ZIejZ                  j]                  d@dg eHddA       ej`                  ddg      dCgdD ej`                  dCg       ej`                  dCgeJE       eHddC       eHdCdC      g	      dF        ZKejZ                  j]                  d@dg ej`                  dg       eHddA       ej`                  g dG      g      dH        ZLdI ZMdJ ZNejZ                  j]                  d(e%      dK        ZOejZ                  j]                  d(e%      dL        ZPdM ZQdN ZRejZ                  j]                  dOdPg edQ e&       dgfdR e&       dAgfg e'       S      dTf edQ e&       dgfdR e&       dAgfgd3S      dTf edQ e&       dgfdRd2dAgfgd3S      dUf edQ e&       dgfdRd3dAgfgd3S      dTf edQ e&       dgfgd3S      dUf edQ e&       dgfdR e&       dAgfgd2S      dVf edQ e&       dgfgd2S      dWfg      ejZ                  j]                  dXdYdZg      d[               ZSd\ ZTd] ZUd^ ZVd_ ZWejZ                  j]                  d`ej                  ge%      da        ZYdb ZZejZ                  j]                  dcdddegdej                  dfdddegddeJfdddegde\e]gdfdfgdeJgdfdfgdeJdfdegde]dfdegdgej                  gdfddgde\gdfddgdhej                  gdfdedfgdiddfdfgdjde\gfg dke]dfg dldej                  eJgdfg      dm        Z^dn Z_do Z`dp ZaejZ                  j]                  dqg  ej`                  g e\E      dr gg ds!      dt        ZbejZ                  j]                  dudAgdv dwgdx ddgdy g      dz        ZcejZ                  j]                  dudAgd{ ddgd| g      d}        ZdejZ                  j]                  d1d3 e       g      d~        Zed ZfejZ                  j]                  d1d3 e       g      d        ZgejZ                  j]                  d1d3 e       g      d        ZhejZ                  j]                  dg d      ejZ                  j]                  d1 e&       d3d2g      d               Zid Zjd Zk G d de&      ZlejZ                  j]                  dd el       ddgfdd3dgfgd3g dfd el       ddgfdd3dgfgd2g dfd el       dgfdd2dgfgd3g dfd elddg      g dfgd3g dfd elddg      dgfdd3dgfgd2g dfd el emd      D  cg c]  } d|  	 c}       dgfd el emd      D  cg c]  } d|  	 c}       dgfgd3g dfdd2dgfgd2g fd el        eHdAd      fgd2ddgfd el       dgfdd2 eHdd      fgd3g dfd el       ddgfdd3 eHdd      fgd3g dfd el        eHdd      fgd2ddgfd el       dgfdd2 eHdd      fgd3ddgfd el       ddgfdd3 eHdd      fgd3g dfg      d        ZnejZ                  j]                  dd el       ddgfdd3dgfgd3g dfd eldg      ddgfdd3dgfgd2ddgfd el       dgfdd2dgfgd3g dfd elddg      g dfgd3g dfd elddg      dgfdd3dgfgd2g dfd el emd      D  cg c]  } d|  	 c}       dgfd el emd      D  cg c]  } d|  	 c}       dgfgd3g dfdd2dgfgd2g fd el        eHdAd      fdd2dgfgd3g dfd el       dgfdd2 eHdd      fgd3g dfd el       ddgfdd3 eHdd      fgd2g dfd el        eHdd      fdd2dgfgd3g dfd el       dgfdd2 eHdd      fgd3ddgfd el       ddgfdd3 eHdd      fgd2g dfd el       ddgfdd3 eHdd      fgd2g dfg      d        ZoejZ                  j]                  dd el       dgfdd3dgfgd2dfd elddg      dgfdd3dgfgd2dfd eldg      dgfdd3dgfgd3dfd eldg      dgfdd2dgfgd3dfd elddg      dgfdd3ddgfgd2dfd eldg      dgfdd3dgfd eldg      dgfgd3dfd elddg      dgfdd3dgfd eldg      dgfgd3dfd el emd      D  cg c]  } d|  	 c}       dgfd el emd      D  cg c]  } d|  	 c}       dgfgd3dfd elddg       eHdAd      fdd3dgfd eldg      dgfgd3dfd elddg      dgfdd3 eHddA      fd eldg      dgfgd3dfd elddg       eHdd      fdd3dgfd eldg      dgfgd3dfd elddg      dgfdd3 eHdd      fd eldg      dgfgd3dfg      d        ZpejZ                  j]                  dddg      ejZ                  j]                  d1d2d3g      d               ZqejZ                  j]                  d1d2d3g      ejZ                  j]                  dZddg      d               ZrejZ                  j]                  d1d2d3g      d        Zs G d de      ZtejZ                  j]                  d etd      ddgddgfd2dgdgfd3ddgddgfg      d        ZuejZ                  j]                  dg  ej`                  ddg      ddggg d#!      dĄ        Zvdń ZwdƄ ZxdǄ ZydȄ ZzejZ                  j]                  dddg      d˄        Z{ejZ                  j]                  dddg      d̈́        Z|ejZ                  j]                  dddg      d΄        Z}ejZ                  j]                  dXg dϢ      dЄ        Z~ejZ                  j                  dѫ      ejZ                  j]                  dXg dϢ      d҄               ZejZ                  j                  dѫ      dӄ        ZejZ                  j                  dѫ      ejZ                  j]                  dXg dϢ      dԄ               ZejZ                  j                  dѫ      dՄ        ZejZ                  j                  dѫ      dք        ZejZ                  j                  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)assert_allclose)sparse)BaseEstimatorTransformerMixin)ColumnTransformermake_column_selectormake_column_transformer)NotFittedError)VarianceThreshold)FunctionTransformer
NormalizerOneHotEncoderStandardScaler)ConsumingTransformer	_Registrycheck_recorded_metadata)_convert_containerassert_allclose_dense_sparseassert_almost_equalassert_array_equal)CSR_CONTAINERSc                       e Zd ZddZddZy)TransNc                     | S N selfXys      Mlib/python3.12/site-packages/sklearn/compose/tests/test_column_transformer.pyfitz	Trans.fit+           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.transform.   sC    1j!::<1fa A%==#%%%r$   r   __name__
__module____qualname__r"   r/   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.fit9   r#   r$   c                     d|z  S )Nr(   r   r   r   s     r!   r/   zDoubleTrans.transform<   s    1ur$   r   r0   r   r$   r!   r5   r5   8   s    r$   r5   c                   "    e Zd Zd ZddZddZy)SparseMatrixTransc                     || _         y r   )csr_container)r   r<   s     r!   __init__zSparseMatrixTrans.__init__A   s
    *r$   Nc                     | S r   r   r   s      r!   r"   zSparseMatrixTrans.fitD   r#   r$   c                 b    t        |      }| j                  t        j                  ||            S r   )lenr<   r   eye)r   r   r    	n_sampless       r!   r/   zSparseMatrixTrans.transformG   s'    F	!!&**Y	"BCCr$   r   r1   r2   r3   r=   r"   r/   r   r$   r!   r:   r:   @   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.fitM   r#   r$   c                     |S r   r   r   s      r!   r/   zTransNo2D.transformP   s    r$   r   r0   r   r$   r!   rE   rE   L   s    r$   rE   c                       e Zd ZddZddZy)
TransRaiseNc                     t        d      Nspecific message
ValueErrorr   s      r!   r"   zTransRaise.fitU       +,,r$   c                     t        d      rK   rM   r   s      r!   r/   zTransRaise.transformX   rO   r$   r   r0   r   r$   r!   rI   rI   T   s    --r$   rI   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皙?
   r`   ra   transformer_weights)r,   arrayr.   reshapeslicer   r   r   fit_transformr"   r/   r@   transformers_vstack)X_arrayX_res_first1DX_res_second1DX_res_first
X_res_bothcasesresctrf   bothr]   s             @r!   test_column_transformerrv   \   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 )NrR   rS   r`   r   ra   r)   )
r,   rg   r.   r   r   tupler   rj   r"   r/   )rm   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~   pandasrR   rS   firstsecond)columns_namerV   r)   r   r(   TF)indexrW   rX   rY   c                     S r   r   )r   r]   s    r!   r^   z3test_column_transformer_dataframe.<locals>.<lambda>   r_   r$   r`   ra   rZ   rb   rc   rd   re   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!   r=   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!   r/   z@test_column_transformer_dataframe.<locals>.TransAssert.transform$  s9    a!=!=>>>!]112JJLHr$   r   rC   )r   s   r!   TransAssertr     s    	C		r$   r   r   )pytestimportorskipr,   rg   r.   r   rh   ri   extendr   r   r   r   rj   r"   r/   r@   rk   rl   r   	DataFramecopycolumns)r}   rm   X_dfrp   rq   rr   rs   rt   rf   ru   r   X_df2r   r]   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 )NrR   rS   r   r   r   r   c                     S r   r   )r   r   s    r!   r^   z7test_column_transformer_empty_columns.<locals>.<lambda>g  s    + r$   r`   r   r)   ra   r(   rW   passthroughrY   rX   )r,   rg   r.   r   r   r   r   r   rI   r   rj   r"   r/   r@   rk   r   )
r   r   r   rm   rq   pdr   columnrt   fixtures
    `        r!   %test_column_transformer_empty_columnsr   S  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 )NrU      r(   r`   r   ra   r)   r`   ra   rZ   rW   rb   re   )rW   rZ   rZ   r   rY   )
r,   arangerh   r   r   rj   output_indices_ri   r   rI   )rm   rt   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   rU   r   r(   r   r   r   r`   ra   r   r)   r   rZ   )r   r   r   r,   r   rh   r   r   rj   r   ri   r   )r   r   rt   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$   r<   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)   rX   r   rW   皙?rZ   sparse_thresholdr   )
r   rA   ri   r   r   issparserj   r   r"   r/   )r<   X_sparserp   rq   colrZ   rs   rt   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   )rV   r   r   r)   	numericalcategoricalr(   )
floatr,   rg   r   r   r   r   rj   r"   r/   )X_listexpected_resultrt   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 )NrR   rS   r`   r   ra   r)   r   r   r(   rV   rZ   rb   )r,   rg   r.   r   r   r:   r"   r/   r   r   shaper   toarrayrA   r@   rk   )r<   rm   	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)r,   rg   r	   r   rj   	getformatr   r   r   raisesrN   )dfrt   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   r`   r   ra   r)   皙?r   )g㈵ ?r)   T)sparse_outputF)g      ?r   )gQ?r   r)   )
r,   rg   objectr.   r   r   rj   r   r   sparse_output_)rm   r   rs   thress       r!   (test_column_transformer_sparse_thresholdr   /  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      @rW   r   z1D data passed to a transformerr   rL   )r,   rg   r.   r   r   r   r   rN   r"   rj   rI   )rm   r   msgfuncs       r!   $test_column_transformer_error_msg_1Dr   c  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)NrR   rS   )r`   rX   r   ra   r)   z%the 'trans2' transformer should be 2Dr   )
r,   rg   r.   r   rE   r   r   rN   rj   r"   rm   rt   r   s      r!   test_2D_transformer_outputr   t  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   rR   rS   col1col2r   r`   z%the 'trans1' transformer should be 2Dr   )r   r   r,   rg   r.   r   r   rE   r   rN   rj   r"   )r   rm   r   rt   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)rZ   rX   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)NrR   rS         ?stringr)   sr   rW   rY   zNo valid specificationr   otherr   r   Specifying the columnsr   r   rU   	   zIX has 3 features, but ColumnTransformer is expecting 2 features as input.zIX has 1 features, but ColumnTransformer is expecting 2 features as input.)r,   rg   r.   ri   r   r   r   r   rN   r"   r/   )rZ   rm   r   rt   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   r8   s     r!   predictzDtest_column_transformer_invalid_transformer.<locals>.NoTrans.predict  s    Hr$   r   )r1   r2   r3   r"   r  r   r$   r!   NoTransr     s    		r$   r  rR   rS   rW   r   z1All estimators should implement fit and transformr   )	r   r,   rg   r.   r   r   r   	TypeErrorr"   )r  rm   rt   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	   zipry   )scalernormrt   namesry   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   rR   rS   r   r   r   r  )r   r   r,   rg   r.   r   r   r   r   r	   r   rj   )r   rm   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   rX   g      ?)n_jobsrZ   r   zRmake_column_transformer() got an unexpected keyword argument 'transformer_weights'r   rc   r)   )pcaTransfre   )r   r   r	   ry   r  rZ   r   reescaper   r   r  )r
  r  rt   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   rY   )r   r   r	   rZ   )r
  r  rZ   rt   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      } d dd| j                  d   d   ddd| j                  d   d   ddd| j                  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}| j                         |k(  sJ y )Nr`   r   ra   r)   rX   333333?TF)r  rZ   r   r`   trans1__copytrans1__with_meantrans1__with_stdra   trans2__copytrans2__with_meantrans2__with_stdry   rf   verbose_feature_names_outverbose)r  r  r   r`   )r  rZ   r   r`   ra   r   r!  r"  ry   rf   r#  r$  )r   r   ry   
get_params
set_paramsrt   exps     r!   &test_column_transformer_get_set_paramsr*    s   	
N$qc	*X~7G!,MN
B
 //!$Q'! //!$Q'! #%)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   r`   r   ra   F)with_stdr)   rk   r   )r,   rg   r.   r   r   r*   r"   r   named_transformers_r`   ra   r,  mean_rm   rt   s     r!   (test_column_transformer_named_estimatorsr0  0  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   rW   r   r)   r.  )
r,   rg   r.   r   r   r"   r*   ry   rk   rj   r/  s     r!   test_column_transformer_cloningr2  D  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   rW   r   r)   zETransformer trans (type Trans) does not provide get_feature_names_outr   )r,   rg   r.   r   r   r   r   r
   get_feature_names_outr"   r  r  AttributeErrorr   s      r!   )test_column_transformer_get_feature_namesr6  R  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   r`   r   ra   rX   r)   r   r   r   r(   rV   rZ   )r   r   r   )r,   rg   r.   r   r   r   rj   r"   r/   r@   rk   r   )rm   rt   r)  s      r!   'test_column_transformer_special_stringsr8  a  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 )NrR   rS   rV   r)   r`   r   r(   rZ   rX   rW   r   rY   )r,   rg   r.   rh   r   r   r   rj   r"   r/   r@   rk   r   r   r	   rZ   )rm   rp   X_res_secondrq   rt   s        r!   !test_column_transformer_remainderr;  |  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$   keyr)   c                    t        j                  g dg dg      j                  }|}t        dt	               | 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       y )NrR   rS   r`   r   rY   r(   rV   r   rZ   r)   )r,   rg   r.   r   r   r   rj   r"   r/   r@   rk   r   r   r<  rm   rq   rt   s       r!   'test_column_transformer_remainder_numpyr?    s    
 hh	9-.00GJ	Xuw45	OBr''0*=rvvg009:Fr A%%%B"k111b&&r*1-/BCCCr''+A.4r$   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	
      }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       y )Nr   r@  r   rR   rS   r   r   r`   r   rY   r(   rV   r   rZ   r)   )r   r   r   strIndexr,   rg   r.   r   r   r   r   rj   r"   r/   r@   rk   r   )r<  r   rm   r   rq   rt   s         r!   (test_column_transformer_remainder_pandasrD    s(     
		X	&B#sz 1hhy!hh	9-.00G<<'8)<<=DJ	Xuw45	OBr''-z:rvvd|--d3Z@r A%%%B"k111b&&r*1-/BCCCr''+A.4r$   )TFFc                 H   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                     }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 )NrR   rS      rU   rT   r)   r   r(   r`   rY   rV   r   rZ   )r,   rg   r.   r   r   r   r5   r   rj   r"   r/   r@   rk   r   r>  s       r!   -test_column_transformer_remainder_transformerrH    s    hh	9i89;;GJ q!A#v!	Xuw45	OB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	               g dfgt                     }t        |j                  |       |        t        |j                  |       j                  |       |        t        |j                        dk(  sJ |j                  d   d   d	k7  sJ y )
NrR   rS   rF  r`   rY   r)   rV   r   rZ   )r,   rg   r.   r   r   r5   r   rj   r"   r/   r@   rk   r/  s     r!   :test_column_transformer_no_remaining_remainder_transformerrJ    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 )NrR   rS   rF  r(   r)   r   r`   rX   r   rY   rV   rZ   )r,   rg   r.   r   r   r5   r   rj   r"   r/   r@   rk   r   )rm   rq   rt   s      r!   7test_column_transformer_drops_all_remainder_transformerrL    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 )NrR   rS   rF  r`   r   r   r   r   rT   rV   r)   r   r(   rZ   )r,   rg   r.   r   r   r:   rj   r   r   r   hstackrh   rA   r   r   r@   rk   r   )r<   rm   rt   r   	exp_arrays        r!   4test_column_transformer_sparse_remainder_transformerrQ    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 )NrR   rS   rF  r`   rX   r   r   r   )r   r   r   r(   rV   rZ   r)   )r,   rg   r.   r   r:   rj   r   r   r   r   r   rA   r@   rk   r   )r<   rm   rt   r   s       r!   =test_column_transformer_drop_all_sparse_remainder_transformerrS  %  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}| j	                         |k(  sJ | j                  d	       | j	                         d
   rJ | j                  d       d | j                  ddddd| j                  d ddd}| j	                         |k(  sJ y )Nr`   r   rY   Tr  r)   F)r  rZ   remainder__copyremainder__with_meanremainder__with_stdr   r`   r  r  r  ry   rf   r#  r$  )rW  rW  r   r%  )r  rZ   rU  rV  rW  r   r`   ry   rf   r#  r$  )r   r   rZ   ry   r&  r'  r(  s     r!   5test_column_transformer_get_set_params_with_remainderrX  :  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 )NrR   rS   rF  r   rY   rV  r)   rV   r   rZ   r(   )r,   rg   astyper.   r   r   r&  rj   r   r@   rk   )rm   rt   paramsr   s       r!   %test_column_transformer_no_estimatorsr\  f  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patternr`   ra   rY   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"   rj   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 )	NrR   rS   rF  F)r$  zGot output for verbose=FalseTr   )	r,   rg   r.   r+   r'  
readouterroutr  r   )r]  r^  r_  capsysrm   r   s         r!   test_column_transformer_verboserd  t  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  rt   s    r!   0test_column_transformer_no_estimators_set_paramsrg    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 )	NrR   rS   c                 "    t        |        dgS )Nr   )r   )r   rm   s    r!   r   z8test_column_transformer_callable_specifier.<locals>.func  s    1g&s
r$   rW   rX   rY   r   r(   )r,   rg   r.   r   r   r   rj   r"   r/   callablery   rk   )rp   r   rt   rm   s      @r!   *test_column_transformer_callable_specifierrk    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   rR   rS   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$   rW   rX   rY   r   r(   )r   r   r,   rg   r.   r   r   r   r   rj   r"   r/   rj  ry   rk   )r   rm   rp   r   rt   r   s        @r!   4test_column_transformer_callable_specifier_dataframero    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oherV   r   rY   )	r,   randomrandnrg   concatenater   r   r   rj   )r   X_categoriesrs  tf_1tf_2s        r!   /test_column_transformer_negative_column_indexesrz    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   rT      rU   )r  rU      )rG  r   rc   identity)FTFT)r   r(   )r,   	transposer   r   rj   r   )r{  r   column_transformerr   s       r!   %test_column_transformer_mask_indexingr    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   rT   r  rU   r   r   r   n_features_in_)r   r5   r*   r"   r  )r   rt   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   rR   r   r   onetwothreer  r   )dtype_includedtype_excluder^  )	r   r   r   r,   rg   intr   r   r   )colsr^  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   rR   r   r   )r  r  r  )lowmiddlehigh)r  r  col_catr  r   r  categoryr  r  r  r  )r   r   r   r,   rg   r  r   rZ  r   r   numberr   r   r	   rj   r   )
r   r   cat_selectornum_selectorrs  r
  ct_selector	ct_direct
X_selectorX_directs
             r!   1test_column_transformer_with_make_column_selectorr  8  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  rb   r   z=make_column_selector can only be applied to pandas dataframesr   )r   r,   r  rg   r   r   rN   )r  r   r   s      r!   test_make_column_selector_errorr  W  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   rR   r   r   r  r  r   r  )r   r   r   r,   rg   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   r\   s    r!   r^   r^   s  s    B r$   )r   rg   rj  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   rs  r   r   empty_featuresry   )ohe__col1_aohe__col1_bohe__col2_zr   r   r   r   r   r"   r   r4  )r  r   r   rt   s       r!    test_feature_names_empty_columnsr  q  sw     
		X	&B	H	IB	MOff%56}	:

B FF2J
  "$Qr$   r  c                     dgS Nr)   r   r  s    r!   r^   r^     s    1# r$   r   c                     dgS )Nr   r   r  s    r!   r^   r^     s    6( r$   c                 
    ddgS NFTr   r  s    r!   r^   r^     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  rs  r  Nr  )r  r   r   rt   s       r!   test_feature_names_out_pandasr    s]     
		X	&B	H	IB	UMOX>?	@BFF2Jr//1M?Cr$   c                     dgS r  r   r  s    r!   r^   r^     s     r$   c                 
    ddgS r  r   r  s    r!   r^   r^     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   rs  	ohe__x1_zN)r   r   r"   r   r4  )r  r   rt   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 )Nrs  r   r   ry   rZ   rs  rZ    r   r   _sk_visual_block_r  name_details
estimators)rZ   rs  rt   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 )Nrs  r   r   r  )rs  r  )rs  rt   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|       }|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   rs  r   r   r  r   r   cr  r}  )r   rT   r  )r   r   col3col4r  r  r  )
r   r   r   r   r   r"   r  r  r  r  )rZ   r   rs  rt   r   r  s         r!   ,test_sk_visual_block_remainder_fitted_pandasr    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  rZ   r)   )
r,   rg   r   r   r   r"   r  r  r  r  )rZ   r   r
  rt   r  s        r!   +test_sk_visual_block_remainder_fitted_numpyr    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   rR   rS   r   r   r   bycolrY   r   thirdr   r   N)r   r   r,   rg   r.   r   r   r   r"   r/   r   r   r   rB  r   rN   )r  rZ   r   X_fit_arrayX_fit_dfX_trans_array
X_trans_dftfX_fit_transr   X_extended_dfrm   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   rN  )r   r   r   r  dr   r  r)   rq  r  r   rY   zcolumns are missing: {'c'}r   NrX   )r   r   r,   onesr   rX   r   r   r"   r   rN   r/   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   rY   N)r   r   r   r   r   r"   r   feature_names_in_r   r,   ndarrayr   r   )r   feature_namesr   rt   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!   r=   zTransWithNames.__init__C  s
    !2r$   c                 h    | j                   %t        j                  | j                   t              S |S )Nr   )r  r,   asarrayr   )r   input_featuress     r!   r4  z$TransWithNames.get_feature_names_outF  s+    !!-::d44FCCr$   r   )r1   r2   r3   r=   r4  r   r$   r!   r  r  B  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(   r  )bycol1__pca0r  bycol2__pca0bycol2__pca1r  r
  remainder__dr   r	  r  rT   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)zDCheck feature_names_out for verbose_feature_names_out=True (default)r   r)   r(   r   rT   r  r   rY   Nr   r   r   r   r"   r4  r   r,   r  r   r   r   ry   rZ   expected_namesr   r   rt   r  s          r!   #test_verbose_feature_names_out_truer  L  s    t 
		X	&B	|n.B	CB	
B FF2J$$&EeRZZ(((;;&   un-r$   )r  r  r   r   )r   r   r  )r  r  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   FrZ   r#  Nr  r  s          r!   $test_verbose_feature_names_out_falser#    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']rU   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)r!  r   r  r  r   Fr"  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   rN   r4  )ry   rZ   colliding_columnsr   r   rt   r   s          r!   +test_verbose_feature_names_out_false_errorsr'  X  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  rc   r   r   r   r   r  r   r  r"  r/      N)r   r   r   r   r  rj   r   r,   r  
set_outputr   r/   r4  r   r   )r#  rZ   r   r   rt   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+  (   rc   r+  d   Int32)petcolorageheightdistancecolor_encodeFint8r   r   r=  r>  r"  r*  float64int64)
color_bluecolor_green	color_redr>  r<  r?  r@  N)r   r   r   r   NAr   r   r   r,  rj   r"   r/   r   r   r   r4  dtypesitems)	rZ   rj   r   r   rt   r   expected_dtypesr   r   s	            r!   &test_column_transform_set_output_mixedrM    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   r0  r  r   r7  r8  )r<  r>  r?  rA  Fint16rC  r<  r>  r"  rD  r*  rE  )pet_catpet_dog	pet_snaker?  r>  )r   r   r   r   r   r   r   rj   r   r,   r  r   r,  r/   rJ  rK  )	rZ   r   r   rt   r   r  rL  r   r   s	            r!   .test_column_transform_set_output_after_fittingrS  !  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   rX  s     r!   r=   zPandasOutTransformer.__init__M  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.fitP  s+      *!R\\***r$   c                 z    t        j                  d      }t        ||j                        sJ || j                  z
  S rZ  )r   r   r   r   rX  r[  s       r!   r/   zPandasOutTransformer.transformU  s4      *!R\\***4;;r$   c                     | S r   r   )r   r/   s     r!   r,  zPandasOutTransformer.set_outputZ  s	     r$   )r   r   )r1   r2   r3   r=   r"   r/   r,  r   r$   r!   rU  rU  L  s    

r$   rU  z;trans_1, expected_verbose_names, expected_non_verbose_namesr   rW  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   rc  r   )ra  r`  trans_0rc  rW  r`  trans_1ra  z!not provide get_feature_names_outr   Nr*  Fr#  )r   r   r   r   rU  rj   r   r,   r  r   r5  r4  r,  r   r   r'  )	re  expected_verbose_namesexpected_non_verbose_namesr   r   rt   
X_trans_npX_trans_df0X_trans_df1s	            r!   ;test_transformers_with_pandas_out_but_not_feature_names_outrl  `  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   皙@rc  r   r   r   r   r   r   Trf  r*  numerical__anumerical__bFN)
r   r   r   r   r   r,  rj   r   r   r'  )rm  r   r   rt   X_outs        r!   "test_empty_selection_pandas_outputrs    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   ro  rc  r   r   rG  r   r)  c                 &    | j                  d      S )NT)rX   )reset_indexr  s    r!   r^   z7test_raise_error_if_index_not_aligned.<locals>.<lambda>  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   rN   rj   )r   r   reset_index_transformerrt   r   s        r!   %test_raise_error_if_index_not_alignedrz    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  Fr"  r*  defaultN)r   r   r   r	   r   r   r   r,  rj   testingassert_frame_equalr   r,   r  )r   r   rt   rb  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       t        j                         5  t        j                  d       |j                  d       |j                  |       ddd       |j                  d       t        j                         5  t        j                  d       |j                  |j                  d             ddd       y# 1 sw Y   	xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)zCheck behavior when a tranformer's output contains pandas.NA

    It should emit a warning 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   errorz set_output\(transform='pandas'\)r   r*  r|  g      )r   r   r*   skipr   r	   warningscatch_warningssimplefilterrj   convert_dtypeswarnsFutureWarningr,  fillna)r   r   rt   s      r!   test_transform_pd_nar    s   
 
		X	&B2~&-	
 
sS$K(	)B	 -#!7	8B		 	 	" g&
 
			B	m+N	O 
 
	 	 	" g&
)
 MMIM&		 	 	" *g&
4)* * 
  * *s0   .'FF)69F56GF&)F25F>G
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(   rT   r  r   r   r   r   )schemaN)
r   r   r,   rg   r   r	   r   r"   r/   r   )r   pl
X_train_np	X_test_np
X_train_pd	X_test_plrt   	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$   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   rc   rT   r
  r   r)   r   r  r*  )
scaler__x0
scaler__x1remainder__x2remainder__x3r   N)r   r   r   r,   rt  ru  r   r   r,  rj   r   r*   r   tolistr4  )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}  rc   r+     r:     i,  x1x2x3r   r   r   r  r  Cr  Dc                     | g    S r   r   r  s    r!   r^   z9test_column_transformer_column_renaming.<locals>.<lambda>S	  
    " r$   Try   r#  r*  )A__x1A__x2A__x3B__x1B__x2C__x1C__x3N)
r   r   r   r   r   r   r,  rj   r   r   )r   libr   transformerdf_transs        r!   'test_column_transformer_column_renamingr  A	  s     

m
,C	i|?S	TB#-!34%'$6."T4L1%o68JK
 #'	 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  r  r  r  c                     | g    S r   r   r  s    r!   r^   zGtest_column_transformer_error_with_duplicated_columns.<locals>.<lambda>q	  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   rN   rj   )r   r  r   r  r   s        r!   5test_column_transformer_error_with_duplicated_columnsr  c	  s     

m
,C	i|?S	TB#-!34%'$6."T4L1%o68JK
 #(	 j=j)  ii	GG 
z	1 &!!"%& & &s   0CC)r/   rj   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`.rR   rS   r}  rW   r   z1is only supported if enable_metadata_routing=Truer   r)   r   )sample_weightpropN)
r,   rg   r.   r   r   r"   r   r   rN   r+   )r_  r   r    trss       r!   *test_routing_passed_metadata_not_supportedr  	  s    
 	)Y'(**AA
guw45
6
:
:1a
@C	M
 A 	VqcU1#C@A A As   -BBenable_slep006c                    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.rR   rS   r}  r)   r   rW   )registryTr  metadatar   r/   )objr_  r  r  N)r,   rg   r.   r   r   r   set_fit_requestset_transform_requestr"   r/   r+   r@   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 1a}xHVQRx== 
V=8	

r$   c                  T    G d dt               } t        j                  g dg dg      j                  }g d}t	                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!   r/   zHtest_metadata_routing_no_fit_transform.<locals>.NoFitTransform.transform	  s      =O8Hr$   )NNN)NNr0   r   r$   r!   NoFitTransformr  	  s    	
	r$   r  rR   rS   r}  r)   r   rW   Tr  r   N)
r   r,   rg   r.   r   r   r  r  r"   rj   )r  r   r    r  r  r  s         r!   &test_metadata_routing_no_fit_transformr  	  s    
	 	 	)Y'(**AAK 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.rR   rS   r}  r)   r   rW   r   zm[sample_weight, metadata] are passed but are not explicitly set as requested or not for ConsumingTransformer.r   r/   r  N)r,   rg   r.   r   r   r   r   rN   r  r  r"   r/   r+   )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	,,28	5  
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 )NrW   r   )r   r   get_metadata_routingrf  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 )NrW   r   Tr  rY   r"   r  )r   r   r   r  r  r  consumessetrt   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 )NrW   Tr  c                     g S r   r   )r   s    r!   r^   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  r  r   r,   r   numpy.testingr   scipyr   sklearn.baser   r   sklearn.composer   r   r	   sklearn.exceptionsr
   sklearn.feature_selectionr   sklearn.preprocessingr   r   r   r   %sklearn.tests.metadata_routing_commonr   r   r   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr   r   r5   r:   rE   rI   rv   r|   markparametrizer   rg   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r*  r0  r2  r6  r8  r;  ri   r?  r   rD  rH  rJ  rL  rQ  rS  rX  r\  rd  rg  rk  ro  rz  r   r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ranger  r#  r'  r.  rM  rS  rU  rl  rs  rz  r  r  r  r  r  r  r  usefixturesr  r  r  r  r  r  )is   0r!   <module>r     sa    	    )  8 
 . 7  
  /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
<%,"^6(4#26-"` 	QC1#aXRXXtUm-DE55 		
a$		''&)dGgw
55& 	QC1#aXRXX6J-KL88"28  .98 :8. .98 :8()"X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7, }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.  - >+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'2*B-4 +i-BCR DR8 8X*>? @B 8X*>?& @&@ #HIA JA )*#HI
 J +
> )* L + LF )*#HIW J +W& )* + )*	E +	E )*E +EW +H*GN +H*Hl +H*Gs$   
y+,y0y5*y:*y?z 