
    Q3j                        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Zddlm	Z	 ddl
mZ ddlmZ ddlmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZmZ ddl m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z.  G d dee      Z/ G d de      Z0 G d de      Z1 G d de      Z2 G d de      Z3ejh                  jk                  dde/dgfd e/       dgfgdfd e/       dgfde/dgfgdfdddgfde/dgfgdfde/dgfdddgfgdfg      d         Z6d! Z7d" Z8ejh                  jk                  d#d$d%g      d&        Z9ejh                  jk                  d$d'd(gd$d)g*      ejh                  jk                  d+g  ejt                  d(d(g      d(d(ggg d,*      ejh                  jk                  d-d(d'g      d.                      Z;d/ Z<d0 Z=ejh                  jk                  d1e,      d2        Z>d3 Z?ejh                  jk                  d1e,      ejh                  jk                  d#g d4      d5               Z@d6 ZAd7 ZBd8 ZCd9 ZDd: ZEejh                  jk                  d;ddg      d<        ZFd= ZGd> ZHd? ZId@ ZJdA ZKdB ZLdC ZMdD ZNdE ZOdF ZPdG ZQejh                  jk                  dHdgg dIdJgfdgdgdJgfdK dL dJgfdMgdNgdOgfg dPg dIg dQfg      dR        ZRejh                  jk                  dSdgdgf ejt                  dg      dgf eSdd      dgf ejt                  d'd(g      d(d'gfg      dT        ZTejh                  jk                  dSdgdgf eSdd      dgf ejt                  d'd(g      d(d'gfdUgdVgfdWdVgf ejt                  dUg      dVgf ejt                  dUgeUX      dVgf eSddU      dVgf eSdUdU      dVgfg	      dY        ZVejh                  jk                  dSdgddJgf ejt                  dg      ddJgf eSdd      ddJgf ejt                  g dP      g dZfg      d[        ZWd\ ZXd] ZYejh                  jk                  d1e,      d^        ZZejh                  jk                  d1e,      d_        Z[d` Z\da Z]ejh                  jk                  dbdcg ed e/       dgfd e/       dgfg e0       d      def ed e/       dgfd e/       dgfgdd      def ed e/       dgfdddgfgdd      dff ed e/       dgfdddgfgdd      def ed e/       dgfgdd      dff ed e/       dgfd e/       dgfgdd      dgf ed e/       dgfgdd      dhfg      ejh                  jk                  didjdkg      dl               Z^dm Z_dn Z`do Zadp Zbejh                  jk                  dqej                  ge,      dr        Zdds Zeejh                  jk                  dtdudvgdej                  dfdudvgddeUdwgfdudvgdegehgdfdxgdeUdwgdfdvgdehgdfdvgdehdfdvgdyej                  gdfdugdeggdfdugdzej                  gdfdvdxgd{ddfdxgd|deggfg d}ehdfg d~dej                  eUdwgdfg      d        Zid Zjd Zkd Zlejh                  jk                  dg  ejt                  g egX      d gg d*      d        Zmejh                  jk                  ddgd dgd d(d'gd g      d        Znejh                  jk                  ddgd d(d'gd g      d        Zoejh                  jk                  d;d e       g      d        Zpd Zqejh                  jk                  d;d e       g      d        Zrejh                  jk                  d;d e       g      d        Zsd Ztd Zud Zvejh                  jk                  dg d      ejh                  jk                  d; e/       ddg      d               Zwd Zxd Zy G d de/      Zzejh                  jk                  dd ez       ddgfdddgfgdg dfd ez       ddgfdddgfgdg dfd ez       dgfdddgfgdg dfd ezddg      g dfgdg dfd ezddg      dgfdddgfgdg dfd ez e{dJ      D  cg c]  } d|  	 c}       dgfd ez e{dJ      D  cg c]  } d|  	 c}       dgfgdg dfdddgfgdg fd ez        eSdd      fgdddgfd ez       dgfdd eSdd      fgdg dfd ez       ddgfdd eSdd      fgdg dfd ez        eSdd      fgdddgfd ez       dgfdd eSdd      fgdddgfd ez       ddgfdd eSdd      fgdg dfg      d        Z|de}de}fdZ~de}de}fdZejh                  jk                  dd ez       ddgfdddgfgde~g dfd ez       ddgfdddgfgddg dfd ez       ddgfdd eSdd      fgdeg dfg      d        Zejh                  jk                  dd ez       ddgfdddgfgdg dfd ezdg      ddgfdddgfgdddgfd ez       dgfdddgfgdg dfd ezddg      g dfgdg d¢fd ezddg      dgfdddgfgdg dâfd ez e{dJ      D  cg c]  } d|  	 c}       dgfd ez e{dJ      D  cg c]  } d|  	 c}       dgfgdg dŢfdddgfgdg fd ez        eSddJ      fdddgfgdg dfd ez       dgfdd eSdd      fgdg dfd ez       ddgfdd eSddJ      fgdg dfd ez        eSdd      fdddgfgdg dƢfd ez       dgfdd eSdd      fgdddgfd ez       ddgfdd eSdd      fgdg dfd ez       ddgfdd eSdd      fgdg dǢfg      dȄ        Zejh                  jk                  dd ez       dgfdddgfgddfd ezddg      dgfdddgfgddfd ezdg      dgfdddgfgddfd ezdg      dgfdddgfgddfd ezddg      dgfddddgfgddfd ezdg      dgfdddgfd ezdg      dgfgddfd ezddg      dgfdddgfd ezdg      dgfgddfd ez e{dЫ      D  cg c]  } d|  	 c}       dgfd ez e{dЫ      D  cg c]  } d|  	 c}       dgfgddfd ezddg       eSddJ      fdddgfd ezdg      dgfgddfd ezddg      dgfdd eSdd      fd ezdg      dgfgddfd ezddg       eSdd      fdddgfd ezdg      dgfgddfd ezddg      dgfdd eSdd      fd ezdg      dgfgddfg      d҄        Zejh                  jk                  dd'd(g      ejh                  jk                  d;ddg      dԄ               Zejh                  jk                  d;ddg      ejh                  jk                  dkd'd(g      dՄ               Zejh                  jk                  d;ddg      dք        Z G dׄ de      Zejh                  jk                  d edڬ۫      ddgddgfddgdgfdddgddgfg      d        Zejh                  jk                  dg  ejt                  d(d(g      d(d(ggg d,*      d        Zd Zd Zd Zd Zd Zejh                  jk                  ddd$g      d        Z G d de      Zejh                  jk                  dd$d%g      d        Zejh                  j"                  ejh                  j%                   e.ej&                         e.d      k  d      d               Zd Zejh                  jk                  dig d      d        Zejh                  jk                  dig d       ed'      d               Z ed'      d        Zejh                  jk                  dig d       ed'      d               Z ed'      d        Z ed'      d        Z ed'      d        Z ed'      ejh                  jk                  d;dd e/        e!       g      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)config_context)BaseEstimatorTransformerMixin)ColumnTransformermake_column_selectormake_column_transformer)NotFittedError)DictVectorizer)VarianceThreshold)FunctionTransformer
NormalizerOneHotEncoderStandardScaler)ConsumingTransformer	_Registrycheck_recorded_metadata_safe_indexing)_convert_containerassert_allclose_dense_sparseassert_almost_equalassert_array_equal)CSR_CONTAINERS_sparse_eye_arrayparse_versionc                       e Zd ZddZddZy)TransNc                     | S N selfXys      Z/DATA/.local/lib/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.transform2   sC    1j!::<1fa A%==#%%%r+   r"   __name__
__module____qualname__r)   r6   r#   r+   r(   r    r    .   s    r+   r    c                       e Zd ZddZd Zy)DoubleTransNc                     | S r"   r#   r$   s      r(   r)   zDoubleTrans.fit=   r*   r+   c                     d|z  S Nr/   r#   r%   r&   s     r(   r6   zDoubleTrans.transform@   s    1ur+   r"   r7   r#   r+   r(   r<   r<   <   s    r+   r<   c                   "    e Zd Zd ZddZddZy)SparseMatrixTransc                     || _         y r"   )csr_container)r%   rD   s     r(   __init__zSparseMatrixTrans.__init__E   s
    *r+   Nc                     | S r"   r#   r$   s      r(   r)   zSparseMatrixTrans.fitH   r*   r+   c                 L    t        |      }| j                  t        |            S r"   )lenrD   r   )r%   r&   r'   	n_sampless       r(   r6   zSparseMatrixTrans.transformK   s"    F	!!"3I">??r+   r"   r8   r9   r:   rE   r)   r6   r#   r+   r(   rB   rB   D   s    +@r+   rB   c                       e Zd ZddZddZy)	TransNo2DNc                     | S r"   r#   r$   s      r(   r)   zTransNo2D.fitQ   r*   r+   c                     |S r"   r#   r$   s      r(   r6   zTransNo2D.transformT   s    r+   r"   r7   r#   r+   r(   rL   rL   P   s    r+   rL   c                       e Zd ZddZddZy)
TransRaiseNc                     t        d      Nspecific message
ValueErrorr$   s      r(   r)   zTransRaise.fitY       +,,r+   c                     t        d      rR   rT   r$   s      r(   r6   zTransRaise.transform\   rV   r+   r"   r7   r#   r+   r(   rP   rP   X   s    --r+   rP   ztransformers, class_nametrans1trans2r0   droppassthroughc                     t        |       }t        j                  d| d| d      }t        j                  t
        |      5  |j                  dgg       d d d        y # 1 sw Y   y xY w)Nz Expected an estimator instance (z"()), got estimator class instead (z).matchr0   )r	   reescapepytestraises	TypeErrorr)   )transformers
class_namectmsgs       r(   7test_column_transformer_raises_class_not_instance_errorrh   `   s_     
<	(B
))
*:, 7((2|2	7C 
y	,
u 
-	,	,s   A  A)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   r0   r/   r/         r0   r   r/   TFtransrZ   	remainderc                     S r"   r#   )x	selections    r(   <lambda>z)test_column_transformer.<locals>.<lambda>       )r+   rX   rY   皙?
   rX   rY   transformer_weights)r3   arrayr5   reshapeslicer	   r    r   fit_transformr)   r6   rH   transformers_vstack)X_arrayX_res_first1DX_res_second1DX_res_first
X_res_bothcasesresrf   r{   bothrt   s             @r(   test_column_transformerr   t   sA   hh	9-.00GHHY'MXXi(N''A.KJ 
K
k
Q	1a&	:&	q!k"	q!j!	4-	 +.
$	4,	,
z"E"  	3%'9 =>&Q2++G4c:266'?44W=sC uw 345
 	2++G4c:266'?44W=sC   
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 )Nrj   rk   rX   r   rY   r0   )
r3   r|   r5   r    r	   tupler   r   r)   r6   )r   rd   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pandaspolarsc                     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d|fd|fg} dk(  r)|j                  |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                  |       t        d ||j                        dfgd      }|j                  |        dk(  r|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 )Nrj   rk   firstsecondcolumn_namesrn   r0   r   r/   TFr   indexro   rZ   rp   c                     S r"   r#   )r&   rt   s    r(   ru   z3test_column_transformer_dataframe.<locals>.<lambda>   rv   r+   rX   rY   rq   rw   rx   ry   rz   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(   rE   z?test_column_transformer_dataframe.<locals>.TransAssert.__init__2  s
    +BD(r+   Nc                     | S r"   r#   r$   s      r(   r)   z:test_column_transformer_dataframe.<locals>.TransAssert.fit5      Kr+   c                     t        || j                        sJ t        |j                        dk  rt	        |      }|S r?   )
isinstancer   rH   shaper   )r%   r&   r'   r   s      r(   r6   z@test_column_transformer_dataframe.<locals>.TransAssert.transform8  s;    a!=!=>>>177|a&q*:;Hr+   r"   rJ   )r   s   r(   TransAssertr   1  s    	C		r+   r   r   )ra   importorskipr3   r|   r5   r   r}   r~   extendSeriesr	   r    r   r   r)   r6   rH   r   r   r   	DataFramecopycolumns)r   df_libr   X_dfr   r   r   r   rf   r{   r   r   X_df2rt   s   `            @r(   !test_column_transformer_dataframer      s     !12Fhh	9-.00G!(0CD ((9%--b!4KJ
 K 
8	j)	w	!:. k
Q	1a&	:&	q!k"	q!j!	4-	 +.
$	
K	+)E, 8# MM4-7JMK	
  	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  
 F4D4DE(#	

B T	 FMMB	
 	
B T8# 		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8 $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 )Nrj   rk   r   r   r   r   c                     S r"   r#   )r&   r   s    r(   ru   z7test_column_transformer_empty_columns.<locals>.<lambda>y  s    +r+   rX   r   r0   rY   r/   ro   r[   rp   rZ   )r3   r|   r5   ra   r   r   r	   r    rP   r   r   r)   r6   rH   r   r   )
r   r   r   r   r   pdr&   columnrf   fixtures
    `        r(   %test_column_transformer_empty_columnsr   e  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 )Nrm      r/   rX   r   rY   r0   rX   rY   rq   ro   rw   rz   )ro   rq   rq   r[   rp   )
r3   aranger}   r	   r    r   output_indices_r~   r   rP   )r   rf   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   rm   r   r/   r   r   r   rX   rY   r   r0   r   rq   )ra   r   r   r3   r   r}   r	   r    r   r   r~   r   )r   r   rf   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+   rD   c                     | t        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   r0   rZ   r[   ro   皙?rq   sparse_thresholdr   )
r   r~   r	   r    r   issparser   r   r)   r6   )rD   X_sparser   r   colrq   r   rf   s           r(   $test_column_transformer_sparse_arrayr     sU   .q!45H 1qc6"KJqc5A;' &4}j6QRNIs"57C()YQTB ??2#3#3H#=>>>()9)9()CSI()9)C)CH)MsS S ( Aa$%'3 783Or//9:::$R%5%5h%?L$RVVH%5%?%?%I:V	 %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 )
Nr0   nana)r   r   br   )rn   r   r   r0   	numericalcategoricalr/   )
floatr3   r|   r	   r   r   r   r   r)   r6   )X_listexpected_resultrf   s      r(   test_column_transformer_listr     s    %,$k2Fhhea#	
O 
.*QF3MOaS1	

B r''/Arvvf~//7Ir+   )r|   r   r   c                     t        j                  g dg dg      j                  }t        ||ddg      }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 )Nrj   rk   r   r   r   rX   r   rY   r0   r   r   r/   rn   rq   rw   )r3   r|   r5   r   r	   r    rB   r)   r6   r   r   r   r   toarrayeyerH   r   )rD   r   r&   	col_transr   s        r(   'test_column_transformer_sparse_stackingr     s    	)Y'(**A1.gx=PQA!
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   r0   T)r   r/   FOdtyper   r[   r0   r/         ?r   csr)r0   r   r0   r0   )r   r0   r/   r   z'For a sparse output, all columns shouldr]   )r3   r|   r   r   r   formatr   r   ra   rb   rU   )dfrf   r   s      r(   )test_column_transformer_mixed_cols_sparser   .  s    	>?33	?B	 	1#A 7#
B r"G>>U"""w("((L,3O*PQ	 	1# 4s
B 
z)R	S 	 
T	S	Ss   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   rX   r   rY   r0   皙?r   )g㈵ ?r0   T)sparse_outputF)g      ?r   )gQ?r   r0   )
r3   r|   objectr5   r	   r   r   r   r   sparse_output_)r   r   r   thress       r(   (test_column_transformer_sparse_thresholdr   D  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      @ro   r   z1D data passed to a transformerr]   rS   )r3   r|   r5   r	   r   ra   rb   rU   r)   r   rP   )r   r   rg   funcs       r(   $test_column_transformer_error_msg_1Dr   x  s    hh9:<<G!G^-=q#A"BCI
+C	z	-g 
. 
z	-( 
. "GZ\1#=">?I	 7 78]]:-?@M A@ 9 
.	- 
.	-
 A@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)Nrj   rk   )rX   rZ   r   rY   r0   z%the 'trans2' transformer should be 2Dr]   )
r3   r|   r5   r	   rL   ra   rb   rU   r   r)   r   rf   rg   s      r(   test_2D_transformer_outputr     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   rj   rk   col1col2r   rX   z%the 'trans1' transformer should be 2Dr]   )ra   r   r3   r|   r5   r   r	   rL   rb   rU   r   r)   )r   r   r   rf   rg   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)rq   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)Nrj   rk         ?stringr0   sr   ro   rp   zNo valid specificationr]   otherr   r   Specifying the columnsr   r   rm   	   zIX has 3 features, but ColumnTransformer is expecting 2 features as input.zIX has 1 features, but ColumnTransformer is expecting 2 features as input.)r3   r|   r5   r~   r	   r    ra   rb   rU   r)   r6   )rq   r   r   rf   X_array_morerg   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 GF D 8W-uS#?%'3 78IN]]:-EFFF7O GF @ a&C	Wegs34		JBFF7O88Y	9=>@@L
UC	z	-
\" 
.HH	
 a	  	T  
z	1
]# 
2	13 GF GF 
.	- 
2	1s0   G*'G76HH*G4	7H	HHc                      G d dt               } t        j                  g dg dg      j                  }t	        d |        dgfg      }d}t        j                  t        |      5  |j                  |       d d d        y # 1 sw Y   y xY w)	Nc                       e Zd ZddZd Zy)<test_column_transformer_invalid_transformer.<locals>.NoTransNc                     | S r"   r#   r$   s      r(   r)   z@test_column_transformer_invalid_transformer.<locals>.NoTrans.fit  r   r+   c                     |S r"   r#   r@   s     r(   predictzDtest_column_transformer_invalid_transformer.<locals>.NoTrans.predict  s    Hr+   r"   )r8   r9   r:   r)   r  r#   r+   r(   NoTransr    s    		r+   r  rj   rk   ro   r   z1All estimators should implement fit and transformr]   )	r   r3   r|   r5   r	   ra   rb   rc   r)   )r  r   rf   rg   s       r(   +test_column_transformer_invalid_transformerr    sk    -  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   ziprd   )scalernormrf   namesrd   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   rj   rk   r   r   r   r  )ra   r   r3   r|   r5   r   r   r	   r   r   r   r   )r   r   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   rZ   g      ?)n_jobsrq   r   zRmake_column_transformer() got an unexpected keyword argument 'transformer_weights'r]   rx   r0   )pcaTransfrz   )r   r   r   rd   r!  rq   r   r_   r`   ra   rb   rc   )r  r  rf   rg   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   rp   )r   r   r   rq   )r  r  rq   rf   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 )NrX   r   rY   r0   rZ   333333?TF)r!  rq   r   rX   trans1__copytrans1__with_meantrans1__with_stdrY   trans2__copytrans2__with_meantrans2__with_stdrd   r{   verbose_feature_names_outverbose)r*  r*  r[   rX   )r!  rq   r   rX   rY   r,  r-  r.  rd   r{   r/  r0  )r	   r   rd   
get_params
set_paramsrf   exps     r(   &test_column_transformer_get_set_paramsr6    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   rX   r   rY   F)with_stdr0   r   r   )r3   r|   r5   r	   r   r1   r)   r   named_transformers_rX   rY   r8  mean_r   rf   s     r(   (test_column_transformer_named_estimatorsr<  E  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   ro   r   r0   r:  )
r3   r|   r5   r	   r   r)   r1   rd   r   r   r;  s     r(   test_column_transformer_cloningr>  Y  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   ro   r   r0   zETransformer trans (type Trans) does not provide get_feature_names_outr]   )r3   r|   r5   r	   r    ra   rb   r   get_feature_names_outr)   r_   r`   AttributeErrorr   s      r(   )test_column_transformer_get_feature_namesrB  g  s    hh9:<<G	Weg1v67	8B	~	&
  " 
' FF7O
))OC 
~S	1
  " 
2	1 
'	& 
2	1s   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   rX   r   rY   rZ   r0   r   r   r   r/   rn   rq   )r   r   r[   )r3   r|   r5   r	   r    r   r   r)   r6   rH   r   r   )r   rf   r5  s      r(   'test_column_transformer_special_stringsrD  v  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 )Nrj   rk   rn   r0   rX   r   r/   rq   rZ   ro   r[   rp   )r3   r|   r5   r}   r	   r    r   r   r)   r6   rH   r   r   r   r   rq   )r   r   X_res_secondr   rf   s        r(   !test_column_transformer_remainderrG    s   hh	9-.00G((9%--b!4K88I&..r15LJ 
Xuw45	6Br''0+>rvvg009;Gr A%%%B"k111B"f,,,r''+A.4 
Wegs34	NBr''0*=rvvg009:Fr A%%%B"k111b&&r*1-/BCCCr''+A.4 
Xuw45	OBr''0*Q"W2EFrvvg009:a2g;NOr A%%%B"k111b&&r*1-/BCCCr''+A.4 
Xvs34	NBr''0,?rvvg009<Hr A%%%B"k111b&&r*1-/BCCCr''+A.4 
!%'A3	0B<<6!!!r+   z%cols1, cols2, expected_remainder_cols)FTFr/   c                     dgS Nr   r#   rs   s    r(   ru   ru     s    A3r+   c                     dgS Nr0   r#   rJ  s    r(   ru   ru     s    1#r+   r   r   C)TFF)FFTc                 \   t        j                  d      }t        | t              r=t        | d   t              r*t        j                  d      }|j                  |g d      }t        t               | ft               |fd      }|j                  |       |j                  d   d   |k(  sJ y	)
z{Check that the remainder columns format matches the format of the other
    columns when they're all strings or masks.
    )r0   r   r   r   )r   r   rM  r   r[   rp   rn   N)r3   onesr   r   strra   r   r   r   r    r   r   )cols1cols2expected_remainder_colsr&   r   rf   s         r(   (test_column_transformer_remainder_dtypesrT    s     	A%:eAh#<  *LLOL4 
!	%	%
B
 QB#'>>>>r+   zkey, expected_colsc                    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 |j                  d   d   |k(  sJ y )Nrj   rk   rX   r[   rp   r/   rn   r   rq   r0   )r3   r|   r5   r	   r    r   r   r)   r6   rH   r   r   r   keyexpected_colsr   r   rf   s        r(   'test_column_transformer_remainder_numpyrY    s     hh	9-.00GJ	
EGS	!"
B r''0*=rvvg009:Fr A%%%B"k111b&&r*1-/BCCCB"m333r+   r   r   pd-indexr   c                    t        j                  d      }t        | t              r| dk(  r|j	                  dg      } t        j                  g dg dg      j                  }|j                  |ddg      }|}t        dt               | fgd	
      }t        |j                  |      |       t        |j                  |      j                  |      |       t        |j                         dk(  sJ |j                   d   d   dk(  sJ t        |j                   d   d   t"              sJ |j                   d   d   |k(  sJ y )Nr   rZ  r   rj   rk   r   r   rX   r[   rp   r/   rn   r   rq   r0   )ra   r   r   rP  Indexr3   r|   r5   r   r	   r    r   r   r)   r6   rH   r   r   )rW  rX  r   r   r   r   rf   s          r(   (test_column_transformer_remainder_pandasr]    s0     
		X	&B#sz 1hhy!hh	9-.00G<<'8)<<=DJ	
EGS	!"
B r''-z:rvvd|--d3Z@r A%%%B"k111b&&r*1-/BCCCB"m333r+   )FTTc                 :   t        j                  g dg dg dg      j                  }|j                         }|d d ddfxx   dz  cc<   t	        dt               | fgt                     }t        |j                  |      |       t        |j                  |      j                  |      |       t        |j                        dk(  sJ |j                  d	   d
   dk(  sJ t        |j                  d	   d   t              sJ |j                  d	   d   |k(  sJ y )Nrj   rk      rm   rl   r0   r   r/   rX   rp   rn   r   rq   )r3   r|   r5   r   r	   r    r<   r   r   r)   r6   rH   r   r   rV  s        r(   -test_column_transformer_remainder_transformerra    s    hh	9i89;;GJ q!A#v!	
EGS	!"-
B
 r''0*=rvvg009:Fr A%%%B"k111b&&r*1-{;;;B"m333r+   c                     t        j                  g dg dg dg      j                  } t        dt	               g dfgt                     }t        |j                  |       |        t        |j                  |       j                  |       |        t        |j                        dk(  sJ |j                  d   d   d	k7  sJ y )
Nrj   rk   r_  rX   rp   r0   rn   r   rq   )r3   r|   r5   r	   r    r<   r   r   r)   r6   rH   r   r;  s     r(   :test_column_transformer_no_remaining_remainder_transformerrc  :  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 )Nrj   rk   r_  r/   r0   r   rX   rZ   r   rp   rn   rq   )r3   r|   r5   r   r	   r<   r   r   r)   r6   rH   r   r   )r   r   rf   s      r(   7test_column_transformer_drops_all_remainder_transformerre  E  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 )Nrj   rk   r_  rX   r   r   r   r   rl   rn   r0   r   r/   rq   )r3   r|   r5   r	   r    rB   r   r   r   r   hstackr}   r   r   r   rH   r   r   )rD   r   rf   r   	exp_arrays        r(   4test_column_transformer_sparse_remainder_transformerrj  U  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 )Nrj   rk   r_  rX   rZ   r   r   r   )r   r   r   r/   rn   rq   r0   )r3   r|   r5   r	   rB   r   r   r   r   r   r   r   rH   r   r   )rD   r   rf   r   s       r(   =test_column_transformer_drop_all_sparse_remainder_transformerrl  m  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 )NrX   r   rp   Tr(  r0   F)r!  rq   remainder__copyremainder__with_meanremainder__with_stdr   rX   r)  r*  r+  rd   r{   r/  r0  )rp  rp  r[   r1  )r!  rq   rn  ro  rp  r   rX   rd   r{   r/  r0  )r	   r   rq   rd   r2  r3  r4  s     r(   5test_column_transformer_get_set_params_with_remainderrq    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 )Nrj   rk   r_  r   rp   ro  r0   rn   r   rq   r/   )r3   r|   astyper5   r	   r   r2  r   r   rH   r   )r   rf   paramsr   s       r(   %test_column_transformer_no_estimatorsru    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patternrp   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)   r   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 )	Nrj   rk   r_  F)r0  zGot output for verbose=FalseTr   )	r3   r|   r5   r2   r3  
readouterroutr_   r^   )rv  rw  rx  capsysr   r   s         r(   test_column_transformer_verboser}    s    L hh	9i89;;G3DNN5N!M  "&&F(FF&NN4N M88GV..03444r+   c                  \    t        g       j                  d      } | j                  dk(  sJ y )Nr/   )r!  )r	   r3  r!  rf   s    r(   0test_column_transformer_no_estimators_set_paramsr    s*    	2		)	)	)	3B99>>r+   c                     t        j                  g dg dg      j                  t        j                  g dg      j                  } fd}t        dt	               |fgd      }t        |j                        |        t        |j                        j                        |        t        |j                  d   d         sJ |j                  d   d   dgk(  sJ y )	Nrj   rk   c                 "    t        |        dgS rI  )r   )r&   r   s    r(   r   z8test_column_transformer_callable_specifier.<locals>.func  s    1g&s
r+   ro   rZ   rp   r   r/   )r3   r|   r5   r	   r    r   r   r)   r6   callablerd   r   )r   r   rf   r   s      @r(   *test_column_transformer_callable_specifierr    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   rj   rk   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+   ro   rZ   rp   r   r/   )ra   r   r3   r|   r5   r   r	   r    r   r   r)   r6   r  rd   r   )r   r   r   r   rf   r   s        @r(   4test_column_transformer_callable_specifier_dataframer  #  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/   r0   axisohern   r[   rp   )	r3   randomrandnr|   concatenater   r	   r   r   )r&   X_categoriesr  tf_1tf_2s        r(   /test_column_transformer_negative_column_indexesr  7  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r0   r/   r   rl      rm   )r  rm      )r`  r  rx   identity)FTFT)r   r/   )r3   	transposer	   r   r   r   )r  r&   column_transformerr   s       r(   %test_column_transformer_mask_indexingr  C  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 )Nr0   r/   r   rl   r  rm   r   r   r   n_features_in_)r	   r<   r1   r)   r  )r&   rf   s     r(   test_n_features_inr  P  sq     Q!Q!Q A	S+-!5[]QC7PQ	RBr+,,,FF1I!!!r+   zcols, pattern, include, excludecol_int	col_floatr  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   rj   r   r   onetwothreer  r   )dtype_includedtype_excluderw  )	ra   r   r   r3   r|   intr   r
   r   )colsrw  includeexcluder   r   selectors          r(   ,test_make_column_selector_with_select_dtypesr  [  ss    0 
		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        dg      }t        t        j                        }t               }t               }t        ||f||f      }t        |dd	gf|ddgf      }|j                  |      }|j                  |      }	t        ||	       y )Nr   rj   r   r   )r  r  r  )lowmiddlehigh)r  r  col_catr  r   r  categoryr  r  r  r  r  )ra   r   r   r3   r|   r  r   rs  r
   r   numberr   r   r   r   r   )
r   r   cat_selectornum_selectorr  r  ct_selector	ct_direct
X_selectorX_directs
             r(   1test_column_transformer_with_make_column_selectorr    s    			X	&B<<xx	5/?,0		
 ?  D 9o,,Z8DO'z686TUL'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  rw   r   z=make_column_selector can only be applied to pandas dataframesr]   )r
   r3   r  r|   ra   rb   rU   )r  r&   rg   s      r(   test_make_column_selector_errorr    sJ    #"))<H
3*A
IC	z	- 
.	-	-s   	A""A+c                  t   t        j                  d      } | j                  t        j                  g dt
              t        j                  g dt              g ddg d      }t        t        dg	      }t        j                  t        j                  |            }t         ||       ||             y )
Nr   rj   r   r   r  r  r   r  r  )ra   r   r   r3   r|   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 $682DEHll6<<#9:Ox~t'<=r+   	empty_colc                     g S r"   r#   rJ  s    r(   ru   ru     s    Br+   )r   r|   r  c                    t        j                  d      }|j                  g dg dd      }t        dt	               ddgfdt	               | fg	      }|j                  |       t        |j                         g d
       y )Nr   r   r   r   zr  r  r   r   r  r   r   empty_featuresrd   )ohe__col1_aohe__col1_bohe__col2_zra   r   r   r	   r   r)   r   r@  )r  r   r   rf   s       r(    test_feature_names_empty_columnsr    sw     
		X	&B	H	IB	MOff%56}	:

B FF2J
  "$Qr+   r  c                     dgS rL  r#   rJ  s    r(   ru   ru     s    1#r+   r   c                     dgS )Nr   r#   rJ  s    r(   ru   ru     s    6(r+   c                 
    ddgS NFTr#   rJ  s    r(   ru   ru     s    5$-r+   c                     t        j                  d      }|j                  g dg dd      }t        dt	               | fg      }|j                  |       t        |j                         dg       y)z1Checks name when selecting only the second columnr   r  r  r  r  r  Nr  )r  r   r   rf   s       r(   test_feature_names_out_pandasr    s]     
		X	&B	H	IB	UMOX>?	@BFF2Jr//1M?Cr+   c                     dgS rL  r#   rJ  s    r(   ru   ru     s    r+   c                 
    ddgS r  r#   rJ  s    r(   ru   ru     s    udmr+   c                     ddgddgddgg}t        dt               | fg      }|j                  |       t        |j	                         dg       y)z=Checks name when selecting the second column with numpy arrayr   r  r   r  	ohe__x1_zN)r	   r   r)   r   r@  )r  r&   rf   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g fk(  sJ |j
                  || fk(  sJ y )Nr  r   r   rd   rq   r  rq   r   r	   _sk_visual_block_r  name_details
estimators)rq   r  rf   visual_blocks       r(   test_sk_visual_block_remainderr    s     /C	cFF#345
B '')L!5555$$&&)92(>>>>""sI&6666r+   c                      t               } t        d| ddgfg      }|j                         }|j                  dk(  sJ |j                  ddgfk(  sJ |j
                  | fk(  sJ y )Nr  r   r   r  )r  r  )r  rf   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 t        |j                  d   t              sJ | dk(  r t        |j                  d   t              sJ y t        |j                  d   t              sJ y )Nr   r  r   r   r  r   r   cr  r  r   rl   r  )r   r   col3col4r  r  r  r   r[   r0   )ra   r   r   r	   r   r)   r  r  r  r   r  r   r   )rq   r   r  rf   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l--a0-@@@M!
 ,11!46IJJJ,11!4nEEEr+   c                    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 t        |j                  d   t              sJ | d
k(  r t        |j                  d	   t              sJ y t        |j                  d	   t              sJ y )Nr  r  r   scaler   r/   r  )r  rq   r0   r[   )r3   r|   r   r   r	   r)   r  r  r  r   r  r   )rq   r&   r  rf   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l--a0.AAAM!
 ,11!46IJJJ,11!4nEEEr+   c                  J   t        j                  d      } t               }t        d|dgfgd      }| j	                  g dg dd      }|j                         }|j                  dgg fk(  sJ |j                  |       |j                         }|j                  dgd	gfk(  sJ y
)zCheck that the visual block `name_details` matches the `feature_names_in_`
    Non-regression test - when remainder_columns logic is removed it should fail
    https://github.com/scikit-learn/scikit-learn/pull/31442#discussion_r2841235711
    r   r  r   r[   r  r  r  r  r   N)ra   r   r   r	   r   r  r  r)   )r   r  rf   r   r  s        r(   /test_sk_visual_block_remainder_col_names_pandasr  C  s    
 
		X	&B
/C	cF8,-
B 
##	

B '')L$$&2666FF2J '')L$$&F8(<<<<r+   c                  n   t        dt               ddgfgd      } t        j                  ddgddgg      }| j	                  |       | j                         }|j                  dk(  sJ |j                  ddgfk(  sJ t        |j                  d   t              sJ t        |j                        dk(  sJ y	)
zCheck that visual_block doesn't return remainder when it has no columns
    Non-regression test - https://github.com/scikit-learn/scikit-learn/issues/33513
    norm1r   r0   r[   rp   rl   r   )r  N)r	   r   r3   r|   r)   r  r  r  r   r  rH   )rf   r&   r  s      r(   #test_sk_visual_block_full_transformr  _  s     
WjlQF;<	VB
1a&1a&!"AFF1I'')L+++$$!Q	111l--a0*===|&&'1,,,r+   c                     t        j                  d      } | j                  ddgddgddgd      }t        d	t	               d
gfgd      }|j                  |       |j                         }|j                  d
gddgfk(  sJ y)zCheck that remainder still uses available string column names in visual block
    even when transformer columns are specified by integer index.
    r   r0   r/   r   rl   r  rm   r  r  r   r[   rp   r   r  N)ra   r   r   r	   r   r)   r  r  )r   r&   rf   r  s       r(   .test_sk_visual_block_int_remainder_cols_pandasr  m  s     
		X	&B
Aq6AaV<=A	X~'7!=>-	XBFF1I'')L$$!sCj(9999r+   explicit_colname)r   r   r   r0   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   rj   rk   r   r   r   bycolrp   r  thirdr  r]   N)ra   r   r3   r|   r5   r   r	   r    r)   r6   r   r   r   rP  rb   rU   )r  rq   r   X_fit_arrayX_fit_dfX_trans_array
X_trans_dftfX_fit_transr   X_extended_dfr   r
  s                r(   8test_column_transformer_reordered_column_names_remainderr	  y  s@    
		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! 65 )
 65s   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   rg  )r   r   r   r  dr   r  r0   r  r   r[   rp   zcolumns are missing: {'c'}r]   NrZ   )ra   r   r3   rO  r   rZ   r	   r    r)   rb   rU   r6   r   )r   r&   r   
df_droppedr  rg   df_dropped_transdf_fit_transs           r(   =test_feature_name_validation_missing_columns_drop_passthroughr    s7    
		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_passthrough`r   r   r  r  r  r   r   r   r  r[   rp   N)ra   r   r   r	   r    r)   r   feature_names_in_r   r3   ndarrayr   r   )r   feature_namesr   rf   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(   rE   zTransWithNames.__init__  s
    !2r+   c                 h    | j                   %t        j                  | j                   t              S |S )Nr   )r  r3   asarrayr   )r%   input_featuress     r(   r@  z$TransWithNames.get_feature_names_out  s+    !!-::d44FCCr+   r"   )r8   r9   r:   rE   r@  r#   r+   r(   r  r    s    3r+   r  z'transformers, remainder, expected_namesbycol1r  r  bycol2)	bycol1__d	bycol1__c	bycol2__dremainder__aremainder__b)r!  r"  r#  r   )	bycol1__br$  remainder__cpca1pca2)r   r   r  )bycol1__pca1bycol1__pca2r'  r   )	bycol1__ar&  	bycol2__br"  )bycol1__pca0r*  bycol2__pca0bycol2__pca1r$  r'  remainder__dr   r&  r"  rl   r$  )r!  r"  	bycol2__cr#  r$  r%  c                 4   t        j                  d      }|j                  g dgg d      }t        | |      }|j	                  |       |j                         }t        |t        j                        sJ |j                  t        k(  sJ t        ||       y)DCheck feature_names_out for verbose_feature_names_out=True (default)r   r0   r/   r   rl   r  r   rp   Nra   r   r   r	   r)   r@  r   r3   r  r   r   r   rd   rq   expected_namesr   r   rf   r  s          r(   #test_verbose_feature_names_out_truer9    s    t 
		X	&B	|n.B	CB	
B FF2J$$&EeRZZ(((;;&   un-r+   
trans_name	feat_namec                     | d d  d| S )Nr/   z++r#   r:  r;  s     r(   &_feature_names_out_callable_name_clashr>  g  s    !nR	{++r+   c                 H    | j                          d|j                          S )N=)upperr=  s     r(   !_feature_names_out_callable_upperrB  k  s%     !9??#4"566r+   zBtransformers, remainder, verbose_feature_names_out, expected_names)by++dzby++crC  zre++azre++bz!{feature_name}-{transformer_name})zd-bycol1zc-bycol1zd-bycol2)zBYCOL1=DzBYCOL1=CzBYCOL2=CzBYCOL2=DzREMAINDER=AzREMAINDER=Bc                 6   t        j                  d      }|j                  g dgg d      }t        | ||      }|j	                  |       |j                         }t        |t        j                        sJ |j                  t        k(  sJ t        ||       y)r4  r   r5  r  r   rq   r/  Nr6  )rd   rq   r/  r8  r   r   rf   r  s           r(   .test_verbose_feature_names_out_callable_or_strrF  o  s    V 
		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   r5  r  r   FrE  Nr6  r7  s          r(   $test_verbose_feature_names_out_falserM    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']rm   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)rL  r   r5  r  r   FrE  zOutput feature names: z[ are not unique. Please set verbose_feature_names_out=True to add prefixes to feature namesr]   N)
ra   r   r   r	   r)   r_   r`   rb   rU   r@  )rd   rq   colliding_columnsr   r   rf   rg   s          r(   +test_verbose_feature_names_out_false_errorsrQ  -  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   r5  r  rx   r   r   r   r   r  r   r  rE  r6      N)ra   r   r   r	   r  r   r   r3   r  
set_outputr   r6   r@  r   r   )r/  rq   r   r   rf   r   df_testr  s           r(   "test_column_transformer_set_outputrX    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@rU  (   rx   rU  d   Int32)petcolorageheightdistancecolor_encodeFint8r   r   rg  rh  rE  rT  float64int64)
color_bluecolor_green	color_redrh  rf  ri  rj  N)ra   r   r   r   NAr	   r   r   rV  r   r)   r6   r   r   r   r@  dtypesitems)	rq   r   r   r   rf   r   expected_dtypesr   r   s	            r(   &test_column_transform_set_output_mixedrw    sd    
		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   rZ  r  r   ra  rb  )rf  rh  ri  rk  Fint16rm  rf  rh  rE  rn  rT  ro  )pet_catpet_dog	pet_snakeri  rh  )ra   r   r   r   r	   r   r   r   r   r3   r  r   rV  r6   rt  ru  )	rq   r   r   rf   r   r  rv  r   r   s	            r(   .test_column_transform_set_output_after_fittingr}    s   			X	&B	994J9G""	

B 
 EA
 N$ug.	
 "'
B r"Ggrzz***==I%%%MMHM%b!JO !''--/
U,,,, 0r+   c                   ,    e Zd ZddZddZddZddZy)PandasOutTransformerc                     || _         y r"   offsetr%   r  s     r(   rE   zPandasOutTransformer.__init__"	  	    r+   Nc                 `    t        j                  d      }t        ||j                        sJ | S Nr   )ra   r   r   r   r%   r&   r'   r   s       r(   r)   zPandasOutTransformer.fit%	  s+      *!R\\***r+   c                 z    t        j                  d      }t        ||j                        sJ || j                  z
  S r  )ra   r   r   r   r  r  s       r(   r6   zPandasOutTransformer.transform*	  s4      *!R\\***4;;r+   c                     | S r"   r#   r%   r6   s     r(   rV  zPandasOutTransformer.set_output/	  	     r+   r   r"   r8   r9   r:   rE   r)   r6   rV  r#   r+   r(   r  r  !	  s    

r+   r  z;trans_1, expected_verbose_names, expected_non_verbose_namesr   r  trans_0__feat1trans_1__feat0feat1feat0c                 Z   t        j                  d      }|j                  g dg dd      }t        dt	        d      dgfd	| d
gfg      }|j                  |      }t        |t        j                        sJ t        j                  t        d      5  |j                          ddd       |j                  d       |j                  |      }t        |j                  |       |j                  d       |j                  |      }t        |j                  |       y# 1 sw Y   |xY w)zCheck that set_config(transform="pandas") is compatible with more transformers.

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

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

    Non-regression test for gh-26210.
    r   r   r  r  r   r   r`  r   rS  c                 &    | j                  d      S )NT)rZ   )reset_indexrJ  s    r(   ru   z7test_raise_error_if_index_not_aligned.<locals>.<lambda>	  s    !--T-*r+   z
one-to-oner  num1r[   num2rT  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)	ra   r   r   r   r	   rV  rb   rU   r   )r   r&   reset_index_transformerrf   rg   s        r(   %test_raise_error_if_index_not_alignedr  	  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  FrE  rT  defaultN)ra   r   r   r   r   r
   r   rV  r   testingassert_frame_equalr   r3   r  )r   r   rf   r{  s       r(   test_remainder_set_outputr  	  s     
		X	&B	/i@	AB	 		2FG#%"'
B
 MMHM%


2
CJJ!!#r*MMIM&


2
Cc2::&&&r+   c                     t        j                  d      } t        | d      st        j                  d       | j	                  dddgi      }t        ddgf      }t        j                         5  t        j                  d       |j                  |       ddd       |j                         }t        j                  t        d	
      5  |j                  |       ddd       |j                  d       |j                  |       |j                  d       |j                  |j                  d             y# 1 sw Y   xY w# 1 sw Y   kxY w)zCheck behavior when a transformer's output contains pandas.NA

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

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/28232
    r   rx   rl   r  r   r0   r[   r  rT  )
scaler__x0
scaler__x1remainder__x2remainder__x3r   N)ra   r   r   r3   r  r  r	   r   rV  r   r   r1   r   tolistr@  )r  r   r&   preprocessorr   expected_column_namess         r(   @test_column_transformer_remainder_passthrough_naming_consistencyr  	
  s     
		X	&B
RYY__R+,A$!1Aq6:; j+j,  ((+G==AGG### w	"%%'+@@@@--/668<QQQQr+   c                   ,    e Zd ZddZddZddZddZy)DfOutTransformerc                     || _         y r"   r  r  s     r(   rE   zDfOutTransformer.__init__(
  r  r+   Nc                     | S r"   r#   r$   s      r(   r)   zDfOutTransformer.fit+
  r*   r+   c                      || j                   z
  S r"   r  r$   s      r(   r6   zDfOutTransformer.transform.
  s    4;;r+   c                     | S r"   r#   r  s     r(   rV  zDfOutTransformer.set_output1
  r  r+   r  r"   r  r#   r+   r(   r  r  '
  s    r+   r  dataframe_libc           
         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	dgfdt	        d       g dfg      j                  |       }|j                  |      }t        |j                        g dk(  sJ |j                  d       t        j                  t        d      5  |j                  |       ddd       y# 1 sw Y   yxY w)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  )rx   rU     )rd     i,  )x1x2x3r   r[   r   r  r  rM  r  DEc                     t        | g d      S )Nr0   r  r   rJ  s    r(   ru   z9test_column_transformer_column_renaming.<locals>.<lambda>L
  s    nQ.Kr+   r  rT  )	A__x1A__x2A__x3B__x1B__x2C__x1C__x3D__x2D__x3Fr  z%Output feature names:.*are not uniquer]   N)ra   r   r   r	   r   r   r  rV  r   r   r   r3  rb   rU   )r  libr   transformerdf_transs        r(   'test_column_transformer_column_renamingr  7
  s    

m
,C	i|?S	TB#-!34%'$6."T4L1"$tTl3 #$KL"
 j=j)   ((,H  ! 
& 
 
 
 U;	z)Q	R!!"% 
S	R	Rs   'DDz1.3zrequires joblib >= 1.3)reasonc                 n   t         j                  j                  |       j                  d      }t	        d      }t        d|dgfgd      }t        j                  d	d
      5  |j                  |      }ddd       t        t	               j                  |dddgf                y# 1 sw Y   5xY w)z|Check that ColumnTransformer works in parallel with joblib's auto-memmapping.

    non-regression test for issue #28781
    rg  )sizeF)r   r  r   r/   )rd   r!  lokyr0   )
max_nbytesN)
r3   r  RandomStateuniformr   r	   joblibparallel_backendr   r   )global_random_seedr&   r  r  Xts        r(   #test_column_transformer_auto_memmapr  g
  s     			0199v9FA'F#!-.K
 
	 	 A	6&&q) 
7 B(66qQCyAB 
7	6s   %B++B4c                  6   t        j                  d      } | j                  ddddddgddgdddg      }t        t	        d	
      dft               dgf      }|j                  d       |j                  |      }t        |j                        ddgk(  sJ y)zCheck index handling when both pd.Series and pd.DataFrame slices are used in
    ColumnTransformer.

    Non-regression test for issue #31546.
    r   r0   r/   )foobarr   )r   baz)dict_col	dummy_colr   Fr   r  r  rT  N)
ra   r   r   r   r   r   rV  r   r   r   )r   r   tr&   s       r(   )test_column_transformer_non_default_indexr  
  s     
		X	&B	!"1-q/CDQ	
 !f 
 
B 	 	u	%z2		.	A LL8L$	A=QF"""r+   )r6   r   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`.rj   rk   r  ro   r   z1is only supported if enable_metadata_routing=Truer]   r0   r   )sample_weightpropN)
r3   r|   r5   r	   r    r)   ra   rb   rU   r2   )rx  r&   r'   trss       r(   *test_routing_passed_metadata_not_supportedr  
  s    
 	)Y'(**AA
guw45
6
:
:1a
@C	M
 	VqcU1#C@
 
 
s   -BB)enable_metadata_routingc                    t        j                  g dg dg      j                  }g d}t               }dgd}}t	        dt        |      j                  dd	      j                  dd	      d
gfg      }| dk(  r*|j                  ||||	       |j                  |||	       n t        ||       ||||	       t        |      sJ |D ]  }t        || | ||        y)z>Test that metadata is routed correctly for column transformer.rj   rk   r  r0   r   ro   )registryTr  metadatar   r6   )objrx  parentr  r  N)r3   r|   r5   r   r	   r   set_fit_requestset_transform_requestr)   r6   r2   rH   r   )rx  r&   r'   r  r  r  r
  _trss           r(   ,test_metadata_routing_for_column_transformerr  
  s     	)Y'(**AA{H c38M
 $h7 tdC&&TD&I	

C 1MHEa}xHVQRx=='	
 r+   c                  @    G d dt               } t        j                  g dg dg      j                  }g d}dgd}}t	        d |        j                  d	d	
      j                  d	d	
      dgfg      }|j                  ||||
       |j                  ||||
       y)zUTest metadata routing when the sub-estimator doesn't implement
    ``fit_transform``.c                       e Zd ZddZddZy)>test_metadata_routing_no_fit_transform.<locals>.NoFitTransformNc                     |sJ |sJ | S r"   r#   )r%   r&   r'   r  r  s        r(   r)   zBtest_metadata_routing_no_fit_transform.<locals>.NoFitTransform.fit
  s      =O8Kr+   c                     |sJ |sJ |S r"   r#   )r%   r&   r  r  s       r(   r6   zHtest_metadata_routing_no_fit_transform.<locals>.NoFitTransform.transform
  s      =O8Hr+   )NNN)NNr7   r#   r+   r(   NoFitTransformr  
  s    	
	r+   r  rj   rk   r  r0   r   ro   Tr  r   N)	r   r3   r|   r5   r	   r  r  r)   r   )r  r&   r'   r  r  r
  s         r(   &test_metadata_routing_no_fit_transformr  
  s    
	 	 	)Y'(**AA c38M
   tdC&&TD&I	

C GGAqGAa-(Kr+   c                    t        j                  g dg dg      j                  }g d}dgd}}t        dt	               dgfg      }d|  }t        j                  t        t        j                  |      	      5  | d
k(  r'|j                  ||       |j                  |||       n t        ||       ||||       ddd       y# 1 sw Y   yxY w)zCTest that the right error is raised when metadata is not requested.rj   rk   r  r0   r   ro   r   zw[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for ConsumingTransformer.r]   r6   r  N)r3   r|   r5   r	   r   ra   rb   rU   r_   r`   r)   r6   r2   )rx  r&   r'   r  r  r
  error_messages          r(   2test_metadata_routing_error_for_column_transformerr   
  s     	)Y'(**AA c38M
g';'=sCD
EC	66<X	?  
z=)A	B[ GGAqMMM!=8ML GC A]XV 
C	B	Bs   :ACCc                  T    t        dt               dgfg      } | j                          y )Nro   r   )r	   r   get_metadata_routingr  s    r(   +test_get_metadata_routing_works_without_fitr#    s*     
W&:&<qcBC	DBr+   c                      t        dt               dgfgt               j                  d      j	                  d            } | j                         }|j                  ddg      t        dg      k(  sJ y )Nro   r   Tr  rp   r)   r  )r	   r   r   r  r  r"  consumessetrf   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 )Nro   Tr%  c                     g S r"   r#   )r&   s    r(   ru   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+   c                 N   t        j                  ddgddgg      }ddg}ddg}t        | t              r"| j	                  d      j                  d       t               j	                  d      j                  d      }t        d|dgfg| 	      }|j                  |||
       y )Nr0   r/   r   rl   r   T)r  ro   rp   )r'   r  )r3   r|   r   r   r  r  r	   r   )rq   r&   r'   r  r  rf   s         r(   -test_metadata_routing_with_remainder_no_errorr/  /  s     	1a&1a&!"A	
AAFM )12!!!5KK 	L 	

 		t	,		T		2 
 
WkA378I	NB Q!=9r+   )__doc__r  r_   r  r  r   r3   ra   numpy.testingr   scipyr   sklearnr   sklearn.baser   r   sklearn.composer	   r
   r   sklearn.exceptionsr   sklearn.feature_extractionr   sklearn.feature_selectionr   sklearn.preprocessingr   r   r   r   %sklearn.tests.metadata_routing_commonr   r   r   sklearn.utils._indexingr   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr   r   r   r    r<   rB   rL   rP   markparametrizerh   r   r   r   r|   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r$  r&  r6  r<  r>  rB  rD  rG  rT  r~   rY  r   r]  ra  rc  re  rj  rl  rq  ru  r}  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  ranger9  rP  r>  rB  rF  rM  rQ  rX  rw  r}  r  r  r  r  r  r  r  r  r  r  r  thread_unsafeskipif__version__r  r  r  r  r  r   r#  r*  r-  r/  )is   0r(   <module>rE     s    	     )  " 8 
 . 5 7  
 3  Q Pm - 	@ 	@ - - UQC
 8UWqc":	;WEUWqc
"Xuqc$:	;WE6A3
(EA3!7	8'BUQC
 =-!"E	FP	?(D" +h-ABZ9 CZ9z D%=x6IJ5%.	!E5>2$  
 *UDM:,: ; K,:^(XVT> .9W :W.J( .9+-JKA L :A6,1,h"  v}&=> $ ? $F,J
<%,"^6(4#26-"` +
"QC(
qcA3	s+
u	35IJ	?	?( 
qc
	1#	q!qc	4-	 5$-0	44" 
qc
	q!qc	4-	 5$-0
XJ	hZ 	7)	xj)	7)6	*XJ7	tW	z*	w	 8*-
44, 
q!f	1#A	q!q!f	&	')<=	44(28  .98 :8. .98 :8()"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/AB
[	!4#ut<
dVX.5
ugt,
eT*
		{D1
dSE4(
j299+t4
y	!;d;
hse,	VUD!/YY)		
.-/.-&*>>" "C	 ,/%  

$ 	
		
D
D !meT]4KLBB }n6F&GH	7 I	7- }n6F&GHF IF> }n6F&GHF IF,=8-	: +-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*GhS9h*GH3%P>eAh*GhS9h*GH3%P 	
$ 6C5) 	
 >+U1a[9 +&	
 >+cU365A;/ 9	
 >+c3Z8=%1+6 S	
 >+U3_= +&	
 >+cU365c?3 .)	
 >+c3Z8=%S/: 	
Ktwp.qwp. ,s ,s ,7# 7# 7 H >+c3Z8=3%0 29	
 >+c3Z8=3%0 /0	
 >+c3Z8=%S/: -	
'#&N.O&N.& - >+c3Z8=3%0  	
 >3%03*==3%0 #J	
 >+cU36C5) 	
 >66*:;_M !	
 >3*5u==3%0 	
 >eAh*GhS9h*GH3%P>uQx*Hx!T!:x*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*GhS9h*GH3%P>eAh*GhS9h*GH3%P ;	
 >3*5uQ{C=3%0>3%03%8
 	
 >3*5u==%1+6>3%03%8
 	
 >3*5uS#G=3%0>3%03%8
 	
 >3*5u==%S/:>3%03%8
 	
}gjV#WjV#, 4tUmDv}&=>5 ? E5. v}&=>4-8*- 9 ?*-Z v}&=>%- ?%-T= ( A !,/0g	
 I	
 /0g	
( H)( HF 5%.	!E5>2$  
2
208'0&@-4$ +i-BCR DR:}   8X*>?*& @*&^ &$$%e(<<#  C	 
C(#6 #HIA JA #HI- 
 . J 
F -L .LD #HI-W . JW& - . -	E .	E -E .E$ -	: .:]! +H*GR +H*Hl +H*Gs*   5A@(A@-0A@2A@7A@<4AA 