
    h$,f]                     b
   d 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ZddlZ	ddl
Z
ddlmZmZmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlm Z  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z= ddl>m?Z?m@Z@ ddlAmBZBmCZCmDZDmEZEmFZFmGZG ddlHmIZI ddlJmKZK  e       ZLdZM G d d      ZN G d deN      ZO G d d eO      ZP G d! d"eP      ZQ G d# d$eQ      ZR G d% d&e      ZS G d' d(e      ZT G d) d*eQ      ZU G d+ d,e      ZVd- ZWd. ZXd/ ZYd0 ZZd1 Z[d2 Z\d3 Z]d4 Z^d5 Z_d6 Z`d7 Zad8 Zbd9 Zcd: Zde
j                  j                  d;g d<      d=        Zge
j                  j                  d>eI      d?        Zhd@ ZidA ZjdB ZkdC ZldD Zme
j                  j                  dEg dF      dG        ZndH ZodI ZpdJ Zqe
j                  j                  dKddKg      dL        Zre
j                  j                  dKddKg      dM        ZsdN ZtdO ZudP ZvdQ ZwdR ZxdS ZydT ZzdU Z{dV Z|dW Z}dX Z~dY ZdZ Zd[ Z G d\ d]e      Zd^ Zd_ Zd` Zda Zdb  ej                   e3dc eQ       fdd eT       fg      def e3dc eQ       fdfdd eT       fg      dgf e3dc eQ       fdhdd eT       fg      dgf e3dc eQ       fdig      def e3djdk eS       fg      dlf e3dmdk eS       fg      dlf e2dn eS       fdo eS       fg      dpf e2dqdo eS       fdrg      dsfgg dt      D        Ze
j                  j                  due      dv        Zdw Zdx Zdy Zdz Zd{ Ze
j                  j                  dKddKg      d|        Ze
j                  j                  d}eCeBg      d~        Zd Zd Zd Zd Zd Zd Ze
j                  j                  dd edd      g      d        Zd Z G d de      Ze
j                  j7                  d      e
j                  j                  d e ee@      ddhz
              d               Ze
j                  j7                  d      e
j                  j                  d e ee@      ddhz
              d               Ze
j                  j                  dg d      d        Ze
j                  j7                  d      d        Ze
j                  j7                  d      e
j                  j                  dddKg      d               Zy)z
Test the pipeline module.
    N)mkdtemp)BaseEstimatorTransformerMixincloneis_classifier)KMeans)	load_iris)PCATruncatedSVD)DummyRegressor)HistGradientBoostingClassifierRandomForestClassifierRandomTreesEmbedding)NotFittedError)CountVectorizer)SelectKBest	f_classif)SimpleImputer)LassoLinearRegressionLogisticRegression)accuracy_scorer2_score)train_test_split)LocalOutlierFactor)FeatureUnionPipelinemake_pipeline
make_union)FunctionTransformerStandardScaler)SVC)ConsumingTransformercheck_recorded_metadata)COMPOSITE_METHODSMETHODS)MinimalClassifierMinimalRegressorMinimalTransformerassert_allcloseassert_array_almost_equalassert_array_equal)CSR_CONTAINERS)check_is_fitted)zthe pizza pizza beer copyrightzthe pizza burger beer copyrightz!the the pizza beer beer copyrightzthe burger beer beer copyrightzthe coke burger coke copyrightzthe coke burger burgerc                       e Zd ZdZddZy)NoFitz*Small class to test parameter dispatching.Nc                      || _         || _        y Nab)selfr4   r5   s      ;lib/python3.12/site-packages/sklearn/tests/test_pipeline.py__init__zNoFit.__init__B   s        NN)__name__
__module____qualname____doc__r8    r9   r7   r0   r0   ?   s
    4r9   r0   c                        e Zd Zd ZddZd Zy)NoTransc                     | S r2   r?   r6   Xys      r7   fitzNoTrans.fitH       r9   c                 4    | j                   | j                  dS )Nr3   r3   )r6   deeps     r7   
get_paramszNoTrans.get_paramsK   s    VV$&&))r9   c                     |d   | _         | S )Nr4   r4   )r6   paramss     r7   
set_paramszNoTrans.set_paramsN   s    r9   NF)r;   r<   r=   rF   rJ   rN   r?   r9   r7   rA   rA   G   s    *r9   rA   c                       e Zd Zd Zy)NoInvTransfc                     |S r2   r?   r6   rD   s     r7   	transformzNoInvTransf.transformT       r9   N)r;   r<   r=   rT   r?   r9   r7   rQ   rQ   S   s    r9   rQ   c                       e Zd Zd Zd Zy)Transfc                     |S r2   r?   rS   s     r7   rT   zTransf.transformY   rU   r9   c                     |S r2   r?   rS   s     r7   inverse_transformzTransf.inverse_transform\   rU   r9   N)r;   r<   r=   rT   rZ   r?   r9   r7   rW   rW   X   s    r9   rW   c                       e Zd Zd Zy)TransfFitParamsc                     || _         | S r2   )
fit_paramsr6   rD   rE   r^   s       r7   rF   zTransfFitParams.fita   s    $r9   Nr;   r<   r=   rF   r?   r9   r7   r\   r\   `   s    r9   r\   c                   @    e Zd ZddZd Zd Zd Zd ZexZxZ	Z
d	dZy)
Multc                     || _         y r2   mult)r6   re   s     r7   r8   zMult.__init__g   s	    	r9   c                     | S r2   r?   rC   s      r7   rF   zMult.fitj   rG   r9   c                 F    t        j                  |      | j                  z  S r2   npasarrayre   rS   s     r7   rT   zMult.transformm       zz!}tyy((r9   c                 F    t        j                  |      | j                  z  S r2   rh   rS   s     r7   rZ   zMult.inverse_transformp   rk   r9   c                 f    t        j                  |      | j                  z  j                  d      S )N   axis)ri   rj   re   sumrS   s     r7   predictzMult.predicts   s'    

1		)..A.66r9   Nc                 ,    t        j                  |      S r2   ri   rq   rC   s      r7   scorez
Mult.scorex   s    vvayr9   )rn   r2   )r;   r<   r=   r8   rF   rT   rZ   rr   predict_probapredict_log_probadecision_functionru   r?   r9   r7   rb   rb   f   s4    ))7 =DCMC%(9r9   rb   c                   4    e Zd ZdZd ZddZd ZddZd	dZy)
	FitParamTzMock classifierc                     d| _         y )NF
successful)r6   s    r7   r8   zFitParamT.__init__   s	    r9   c                     || _         y r2   r|   r6   rD   rE   should_succeeds       r7   rF   zFitParamT.fit   s	    (r9   c                     | j                   S r2   r|   rS   s     r7   rr   zFitParamT.predict   s    r9   c                 L    | j                  |||       | j                  |      S )N)r   )rF   rr   r   s       r7   fit_predictzFitParamT.fit_predict   s"    An5||Ar9   Nc                 :    |||z  }t        j                  |      S r2   rt   )r6   rD   rE   sample_weights       r7   ru   zFitParamT.score   s     $M!Avvayr9   rO   r:   )	r;   r<   r=   r>   r8   rF   rr   r   ru   r?   r9   r7   rz   rz   |   s     )r9   rz   c                       e Zd ZdZd Zy)DummyTransfz(Transformer which store the column meansc                 p    t        j                  |d      | _        t        j                         | _        | S )Nr   ro   )ri   meanmeans_time
timestamp_rC   s      r7   rF   zDummyTransf.fit   s(    ggaa( ))+r9   N)r;   r<   r=   r>   rF   r?   r9   r7   r   r      s
    2r9   r   c                   .    e Zd ZdZd ZddZddZddZy)DummyEstimatorParamsz,Mock classifier that takes params on predictc                     | S r2   r?   rC   s      r7   rF   zDummyEstimatorParams.fit   rG   r9   c                     || _         | S r2   got_attributer6   rD   r   s      r7   rr   zDummyEstimatorParams.predict       *r9   c                     || _         | S r2   r   r   s      r7   rv   z"DummyEstimatorParams.predict_proba   r   r9   c                     || _         | S r2   r   r   s      r7   rw   z&DummyEstimatorParams.predict_log_proba   r   r9   NrO   )r;   r<   r=   r>   rF   rr   rv   rw   r?   r9   r7   r   r      s    6r9   r   c                     t        dg      } t        j                  t              5  | j	                  dggdg       d d d        d}t        dt               fg      } t        j                  t        |      5  | j	                  dggdg       d d d        t               }t        d|fg      }|j                  d      t        dd d |d	|j                  d
      k(  sJ |j                  d       |j                  dk(  sJ |j                  J t        |       t               }t        t              }t        d|fd|fg      }|j                   d   |u sJ |j                   d   |u sJ d}t        dt               fd|fg      } t        j                  t        |      5  | j	                  dggdg       d d d        |j                  d       |j"                  dk(  sJ t        |       t%        j&                  d      }t        j                  t(        |      5  |j                  d       d d d        t+        |      }|j                   d   |j                   d   usJ |j                  d      }|j                  d      }|j                  d
      D ]  }|j-                  |        |j                  d
      D ]  }|j-                  |        |j-                  d       |j-                  d       |j-                  d       |j-                  d       ||k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)N)rn   rn   rn   zRLast step of Pipeline should implement fit or be the string 'passthrough'.*NoFit.*clfmatchsvcTrI   )svc__asvc__br   F皙?)r   anovaz<All intermediate steps should be transformers.*\bNoTrans\b.*t)svc__Cz]Invalid parameter 'C' for estimator SelectKBest(). Valid parameters are: ['k', 'score_func'].)anova__Cr?   )r   pytestraises	TypeErrorrF   r0   rA   rJ   dictrN   r4   r5   reprr"   r   r   named_stepsCreescape
ValueErrorr   pop)	pipelinemsgr   pipefilter1pipe2rM   params2xs	            r7    test_pipeline_invalid_parametersr      s8    !H	y	! !qcUQC !	 
 %)*+H	y	, !qcUQC ! )CeS\N#D???% *Dc*-1__%_-H*   
 	OO3O55C<<55==J %C)$Ggw'%67D G$///E"c))) KC#wy)E3<89H	y	, !qcUQC ! 	OO3O55C<<J ))	C 
z	- &%& $KEE"%*;*;E*BBBB __$_'FD)G__%_( 

1 5) A JJu
JJwKKKKW[! !! !<! !& &s/   L%7L2#L?M%L/2L<?M	Mc                  *   t        j                  ddgg      } t        dt               fdt	               ff      }|j                  | d        |j                  |        |j                  d       |j                  | d        |j                  |        y )Nrn      transfr   rE   passthrough)r   )ri   arrayr   rW   rz   rF   ru   rN   rD   r   s     r7   test_pipeline_init_tupler     sw    
1a&Ah)E9;+?@ADHHQ$HJJqMOO=O)HHQ$HJJqMr9   c                  J   t         j                  } t         j                  }t               }t	        t
        d      }t        d|fd|fg      }|j                  | |       |j                  |        |j                  |        |j                  |        |j                  | |       y )Nr   kr   logistic)irisdatatargetr   r   r   r   rF   rr   rv   rw   ru   )rD   rE   r   r   r   s        r7   test_pipeline_methods_anovar     s    		AA

C)q)Ggw'*c):;<DHHQNLLOq1JJq!r9   c                     t        dt               fdt               fg      } | j                  d d d       | j	                  d       sJ | j
                  d   j                  J | j
                  d   j                  J t        j                  d      }t        j                  t        |      5  | j                  d d d       d d d        y # 1 sw Y   y xY w)Nr   r   T)rD   rE   clf__should_succeedz.fit() got an unexpected keyword argument 'bad'r   )clf__bad)r   rW   rz   rF   rr   r   r4   r5   r   r   r   r   r   )r   r   s     r7   test_pipeline_fit_paramsr     s    h)E9;+?@ADHHttH6<<H%''///H%''/// ))D
EC	y	, ,td+, , ,s   /CCc                     t        j                  ddgg      } t        dt               fdt	               fg      }|j                  | d        |j                  |       dk(  sJ |j                  | d       dk(  sJ |j                  | d d       dk(  sJ |j                  | t        j                  ddg            d	k(  sJ y )
Nrn   r   r   r   r      )rE   r   r      )ri   r   r   rW   rz   rF   ru   r   s     r7   %test_pipeline_sample_weight_supportedr   /  s    
1a&Ah)E9;+?@ADHHQ$H::a=A::a4: A%%%::a4t:4999::arxxA'7:8A===r9   c                     t        j                  ddgg      } t        dt               fdt	               fg      }|j                  | d        |j                  |       dk(  sJ |j                  | d       dk(  sJ t        j                  d      }t        j                  t        |	      5  |j                  | t        j                  ddg             d d d        y # 1 sw Y   y xY w)
Nrn   r   r   r   r   r   r   z:score() got an unexpected keyword argument 'sample_weight'r   )ri   r   r   rW   rb   rF   ru   r   r   r   r   r   )rD   r   r   s      r7   'test_pipeline_sample_weight_unsupportedr   :  s    
1a&Ah)E46?;<DHHQ$H::a=A::at:,111
))P
QC	y	, 6

1BHHaV$4
56 6 6s   +)CC&c                     t        dt               fg      } t        j                  d      }t	        j
                  t        |      5  | j                  d       d d d        t	        j
                  t        |      5  | j                  d       d d d        t        j                  d      }t	        j
                  t        |      5  | j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   y xY w)	NclszInvalid parameter 'fake' for estimator Pipeline(steps=[('cls', LinearRegression())]). Valid parameters are: ['memory', 'steps', 'verbose'].r   nope)fake)fake__estimatorzInvalid parameter 'invalid_param' for estimator LinearRegression(). Valid parameters are: ['copy_X', 'fit_intercept', 'n_jobs', 'positive'].)cls__invalid_param)r   r   r   r   r   r   r   rN   )r   	error_msgs     r7   $test_pipeline_raise_set_params_errorr   G  s    e-/012D 			XI 
z	3 %V$%
 
z	3 0/0 			NI 
z	3 3623 3% %
0 03 3s$   C$=C0C<$C-0C9<Dc                  J   t         j                  } t         j                  }t        dd      }t	        ddd      }t        d|fd|fg      }|j                  | |       |j                  |        |j                  |        |j                  |        |j                  | |       y )	NTr   probabilityrandom_statefullmle
svd_solvern_componentswhitenpcar   )r   r   r   r"   r
   r   rF   rr   rv   rw   ru   )rD   rE   r   r   r   s        r7   test_pipeline_methods_pca_svmr   a  s    		AA
$Q
/C
eD
ACeS\E3<01DHHQNLLOq1JJq!r9   c                     t         j                  } t        ddd      }t        d      }t	        d|fd|fg      }|j                  |        |j                  |       j                  | j                  d   fk(  sJ |j                  |j                  |              t        |j                  |       |j                  |j                  |                    y )	Nr   r   Tr   )noveltyr   lofr   )r   r   r
   r   r   rF   score_samplesshapefit_transformr*   rT   )rD   r   r   r   s       r7   #test_pipeline_score_samples_pca_lofr   p  s    		A eD
AC
T
*CeS\E3<01DHHQKa &&1771:-777GGCa !D&&q)3+<+<S]]1=M+NOr9   c                     t        j                  dgdgg      } t        j                  ddg      }t        t                     }|j	                  | |       d}d}t        j                  t        |      5 }|j                  |        d d d        t        j                  j                  t              sJ |t        |j                  j                        v sJ y # 1 sw Y   SxY w)Nrn   r   z<'LogisticRegression' object has no attribute 'score_samples'z+'Pipeline' has no attribute 'score_samples'r   )ri   r   r   r   rF   r   r   AttributeErrorr   
isinstancevalue	__cause__str)rD   rE   r   	inner_msg	outer_msg	exec_infos         r7   4test_score_samples_on_pipeline_without_score_samplesr     s    
1#sA
!QA +-.DHHQNNI=I	~Y	7 91 ioo//@@@IOO556666	 s   5CC"c                     t         j                  } t         j                  }| j                  d   }t	        t        j                  |            }t               }t        ddd      }t        ddd      }||fD ]  }t        d|fd	|fg      }|j                  | |       |j                  |       }	|	j                  |fk(  sJ |j                  |       }
|
j                  ||fk(  sJ |j                  |       }|j                  ||fk(  sJ |j                  |       }|j                  ||fk(  sJ |j!                  | |        y )
Nr   r   
randomizedT)r   r   r   ovr)r   r   decision_function_shape
preprocessr   )r   r   r   r   lenri   uniquer!   r
   r"   r   rF   rr   rv   rw   rx   ru   )rD   rE   	n_samples	n_classesscalerr   r   preprocessingr   rr   proba	log_probarx   s                r7   'test_pipeline_methods_preprocessing_svmr    s8   		AA
IBIIaL!IF
1d
CC
$Q
NC # ,6EFA ,,q/}},,,""1%{{y)4444**1-	9i"8888 2215 &&9i*@@@@

1a#r9   c                  8   t               } t        dd      }t               }t        dd      }| j                  t        j                        }|j                  |      }t        d|fd|fg      }|j                  t        j                        }t        ||       y )Nr   auto)r   n_initr   Kmeans)r!   r   r   r   r   r   r   r+   )r   kmscaler_for_pipelinekm_for_pipelinescaledseparate_predr   pipeline_preds           r7   test_fit_predict_on_pipeliner    s     F	Qv	.B )*!F;O !!$)),FNN6*M h 34x6QRSD$$TYY/Mm];r9   c                  d   t               } t        d      }t        d| fd|fg      }d}d}t        j                  t
        |      5 }t        |d       d d d        t        j                  j                  t
              sJ |t        |j                  j                        v sJ y # 1 sw Y   SxY w)	Nr   r   r   r   z)'Pipeline' has no attribute 'fit_predict'z+'PCA' object has no attribute 'fit_predict'r   r   )r!   r
   r   r   r   r   getattrr   r   r   r   )r   r   r   r   r   r   s         r7   0test_fit_predict_on_pipeline_without_fit_predictr    s     F

 Ch'%67D;I=I	~Y	7 %9m$%ioo//@@@IOO556666% %s   B&&B/c                     t        dt               fdt               fg      } | j                  d d dd       | j                  d   j
                  d   sJ | j                  d   j                  sJ d| j                  d   j
                  vsJ y )Nr   r   T)rD   rE   transf__should_get_thisr   should_get_thisr   )r   r\   rz   r   r   r^   r}   r   s    r7   -test_fit_predict_with_intermediate_fit_paramsr    s     h 12UIK4HIJD
$$   H%001BCCCE"----4#3#3H#=#H#HHHHr9   method_name)rr   rv   rw   c                     t        dt               fdt               fg      }|j                  d d        t	        ||       } |d d       |j
                  d   j                  sJ y )Nr   r   T)rD   r   )r   rW   r   rF   r  r   r   )r  r   methods      r7   (test_predict_methods_with_predict_paramsr    sa     h)E3G3I+JKLDHHT4T;'F
T&E"0000r9   csr_containerc                    t         j                  }||j                  d      z  }t         j                  }t	        dd      }t        d      }t        d|fd|fg      }|j                  ||       |j                  |      }|j                  |j                  d   d	fk(  sJ t        |d d d d
f   |j                  |             t        |d d d
f   |j                  ||      j                                t        d|fd|fg      } | |      }|j                  ||      }t        ||j                                t        |      }	|j                   d   d   |	j                   d   d   usJ |j#                  d       |j                  ||      j                  |j                  d   dfk(  sJ t        dt%               fd|fd|fg      }|j                  ||      }|j                  |j                  d   dfk(  sJ d}
t        dt%               fdt'               fg      }t)        j*                  t,        |
      5  |j                  |       d d d        t        d|fd|ff      }|j                  ||       y # 1 sw Y   -xY w)Nr   ro   r   )r   r   rn   r   svdselectr   )	select__k   mockr   z>All estimators should implement fit and transform.*\bNoTrans\brT   no_transformr   )r   r   r   r   r   r   r   rF   rT   r   r+   r   r,   raveltoarrayr   transformer_listrN   rW   rA   r   r   r   )r  rD   rE   r  r   fsX_transformedX_spX_sp_transformedfs2r   s              r7   test_feature_unionr.    so    			AQAA
AA
6C1F	s|h%78	9BFF1aLLLOM1771:q/111 mAssF3S5F5Fq5IJ}QU+V-A-A!Q-G-M-M-OP 
s|h%78	9BD''a0m-=-E-E-GH )Cq!!$C,@,@,CA,FFFF MMAMAq!''AGGAJ?::: 
)E3<(F9KL	MB$$Q*M1771:q/111 MC	VX.0KL	MB	y	, 
q	 
s|h%78	9BFF1aL s   <I::Jc                  
   t               } t               }t        d| fd|fg      }|j                  d   | k(  sJ |j                  d   |k(  sJ |j                  j                  | k(  sJ |j                  j
                  |k(  sJ y)z6Check the behaviour of `named_transformers` attribute.r   noinvtransfN)rW   rQ   r   named_transformersr   r0  )r   r0  r)  s      r7   %test_feature_union_named_transformersr2    s    XF-K	&)M;+GH	IB  *f444  /;>>>   ''6111  ,,;;;r9   c                      t        d      } t               }t        | |      }t        |j                   \  }}|dk(  sJ || |fk(  sJ y )Nr   r  )r   r   )r
   rW   r   zipr(  )r   r$  funamestransformerss        r7   test_make_unionr8  +  sU    

 C8D	C	Br223E<%%%%C;&&&r9   c                  d   t        d      } t               }t        | |d      }|j                  t        | |      j                  k(  sJ d|j                  k(  sJ t        j                  d      }t        j                  t        |      5  t        | |ddd	
       d d d        y # 1 sw Y   y xY w)Nr   r  r   n_jobszEmake_union() got an unexpected keyword argument 'transformer_weights'r   
   rn   )r   rW   transformer_weights)
r
   rW   r   r(  r;  r   r   r   r   r   )r   r$  r5  r   s       r7   test_make_union_kwargsr?  4  s    

 C8D	Ca	(B*S$"7"H"HHHH		>> ))OC 
y	, L3"2JKL L Ls   B&&B/c                  j   t         j                  } t        dd      }t        d|fg      }|j	                  |       j                  |       }|j                  |       }|j                  |       }t        ||       t        ||       |j                  |      }|j                  |      }t        ||       y )Nr   r   )r   r   r   )	r   r   r
   r   rF   rT   r   r+   rZ   )rD   r   r   X_transX_trans2X_trans3X_backX_back2s           r7   test_pipeline_transformrF  C  s     			A
1
0C%'H ll1o''*G%%a(H  #Hgx0gx0''0F##G,Gfg.r9   c                      t         j                  } t         j                  }t               }t	        d|fg      }|j                  | |      }|j                  | |      j                  |       }t        ||       y )Nr$  )	r   r   r   rW   r   r   rF   rT   r+   )rD   rE   r   r   rA  rB  s         r7   test_pipeline_fit_transformrH  V  sf    		AAXF&&)*+H $$Q*Gzz!Q))!,Hgx0r9   z
start, end))r   rn   )r   r   )rn   r   )rn   r   )Nrn   )rn   Nr:   c                 :   t        dt               fdt               fdt               fgdd      }|| | }t        |t               sJ |j                  |j                  | | k(  sJ t        |j                  j                               t        |j                  j                               | | k(  sJ |j                  d      }|j                  d      }|d	= |d	= ||k(  sJ d
}t        j                  t        |      5  || |d    d d d        y # 1 sw Y   y xY w)Ntransf1transf2r   123T)memoryverboseFr   stepsz*Pipeline slicing only supports a step of 1r   r!  )r   rW   rz   r   rO  listr   itemsrJ   r   r   r   )startendr   
pipe_slicepipe_paramspipe_slice_paramsr   s          r7   test_pipeline_slicerW  c  s0    
VX	FH 5y{7KLD
 eCJj(+++tzz%4444 	Z##))+,  &&()%4	5	5 //u/-K"--5-9G'"++++
6C	z	- U3r\  s   ?	DDc                  j   t               } t               }t        d| fd|fg      }|d   | k(  sJ |d   | k(  sJ |d   |k(  sJ |d   |k(  sJ t        j                  t
              5  |d    d d d        t        j                  t              5  |d    d d d        y # 1 sw Y   1xY w# 1 sw Y   y xY w)Nr   r   r   r!  r   foobar)rW   rz   r   r   r   
IndexErrorKeyError)r   r   r   s      r7   test_pipeline_indexr\    s    XF
+Ch'%67D7f>V###8s??;# 
z	" Q 
x	  X 	  s   'BB)B&)B2c                     t               } t               }t        d| fg      }|j                  d   | u sJ d|fg|_        d|j                  vsJ |j                  d   |u sJ d|fg|j                  k(  sJ |j	                  d| fg       d| fg|j                  k(  sJ |j	                  |       d|fg|j                  k(  sJ |j	                  dg       t        j                  d      }t        j                  t        |      5  |j                  dggdg       d d d        d	}t        j                  t        |      5  |j                  dggdg       d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)
Nr$  mock2rO  r$  )junkr?   zJLast step of Pipeline should implement fit or be the string 'passthrough'.r   rn   z0This 'Pipeline' has no attribute 'fit_transform')rW   r   r   rO  rN   r   r   r   r   r   rF   r   r   )rJ  rK  r   r   s       r7   test_set_pipeline_stepsrb    s   hGhG&'*+,H'7222 ()HN-----(G333g8>>111 012W(..000 W%W(..000 |n-
))TC 
y	, !qcUQC ! =C	~S	1 +uqc*+ +	! !+ +s   	E#E/#E,/E8c                     t               } t        d      }t        d| fd|fg      }d|j                  v sJ d|j                  vsJ |j                  j                  | u sJ |j                  j
                  |u sJ t        d| fd|fg      }|j                  j                  | usJ |j                  j
                  |u sJ y )Nr   rd   r$  re   r^  values)rW   rb   r   r   r$  re   rd  )r   mult2r   s      r7   test_pipeline_named_stepsrf    s    XFaLE&&)FE?;<H X)))))(.....$$...$$--- (F+fe_=>H&&f444$$---r9   r   c                 V   t        j                  dgg      }t        j                  dg      }t        d      }t        d      }t        d      }t        d|fd| fd|fd	|fg      }|j	                  ||       g d
}|j
                  D 	cg c]  \  }}	|	 }
}}	||
k(  sJ y c c}	}w )Nrn   r   rd   r      m2badm3m5)ri  rj  rk  rl  )ri   r   rb   r   rF   rO  )r   rD   rE   re  mult3mult5r   expected_namesname_actual_namess              r7   %test_pipeline_correctly_adjusts_stepsrs    s    
1#A
!AaLEaLEaLE
,tUmdE]KH LLA.N(07WT1D7L7\))) 8s   B%c           
         t        j                  dgg      }t        j                  dg      }t        d      t        d      t        d      fd} |       }d}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             |j                  |        d	}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             |j                  d
      |j                  | d ddddk(  sJ |j                  |        d}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             g d}|D ]  } t        ||      |        |j                         d	}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg              |       }|j                  |        d}t        |gg|j                  ||      j                  |             t        |gg|j	                  ||             t        ||j                  |gg             d}d}	t        j                  t        |	      5 }
t        |d       d d d        t!        
j"                  j$                  t              sJ |t'        |
j"                  j$                        v sJ d	}t)        dfd| fdfg      }t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             y # 1 sw Y   xY w)Nrn   r   rd   r   rh  c                  ,    t        d fdfdfg      S )Nri  rk  last)r   )re  rm  rn  s   r7   makez0test_set_pipeline_step_passthrough.<locals>.make  s!    $uGHHr9      rk  r<  Tr   F)rO  ri  rk  rv  rM  m2__mult
last__multrN  ri  )rv   rw   rx   rT   ru   )rv     z''str' object has no attribute 'predict'z*This 'Pipeline' has no attribute 'predict'r   rr   ri  rk  rv  )ri   r   rb   r,   r   rF   rr   rZ   rN   rJ   rO  r  rT   r   r   r   r   r   r   r   r   )r   rD   rE   rw  r   expother_methodsr  r   r   r   re  rm  rn  s              @@@r7   "test_set_pipeline_step_passthroughr    s   
1#A
!AaLEaLEaLEI vH
Cw 6 6q! <=uhll1o55a89q(44seW=>;'
Cw 6 6q! <=uhll1o55a89q(44seW=>D)	. 	 	 	 ;'
Cw 6 6q! <=uhll1o55a89q(44seW=>M   %!&!!$% 5!
Cw 6 6q! <=uhll1o55a89q(44seW=>vH[)
CwQ 2 < <Q ?@w 6 6q! <=q(44seW=>9I<I	~Y	7 %9)$%ioo//@@@IOO556666 C${(;fe_MNHw 6 6q! <=uhll1o55a89q(44seW=>% %s   "O==Pc                     t        t        d            } | j                   | j                   | j                   t        t                     } t        | d      rJ | j                   | j                   t        d      } | j                  d   dk(  sJ t        | d      rJ | j                   | j                   t        t               t                     } t        | d      rJ | j                   t        | d      rJ t        t               t                     } t        | d      rJ | j                   t        | d      rJ y )Nrh  rr   r   r   r   r   rZ   )	r   rb   rr   rT   rZ   rW   hasattrrO  rQ   )r   s    r7   test_pipeline_ducktypingr  (  s   T!W%HVX&Hx+++]+H>>! >>>>x+++VX{}5Hx+++x!4555[]FH5Hx+++x!45555r9   c                     t               } t               }t        | |      }t        |t              sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ t        | |t                     }t        |t              sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ y )Nr   ztransf-1rn   ztransf-2r   	fitparamt)rW   r   r   r   rO  rz   )t1t2r   s      r7   test_make_pipeliner  D  s    	B	BR DdH%%%::a=z)))::a=z)))R-DdH%%%::a=z)))::a=z)))::a={***r9   c                  :   t         j                  } t         j                  }t        ddd      }t	        d      }t        d|fd|fgdd	i
      }|j                  | |       |j                  |       }t        d|fd|fgdd	i
      }|j                  | |      }t        dt               fd|fd|fgdd	i
      }|j                  | |      }t        |d d d df   d	|j                  |       z         t        |d d df   |j                  | |      j                                t        |d d d df   d	|j                  |       z         t        |d d df   |j                  | |      j                                |j                  | j                  d   dfk(  sJ y )Nr   r   r   r   r   r   rn   r   r   r   r<  r=  r$  r!     )r   r   r   r
   r   r   rF   rT   r   rW   r+   r,   r&  r   )rD   rE   r   r   r)  r*  X_fit_transformedX_fit_transformed_wo_methods           r7   test_feature_union_weightsr  S  s   		AA
1A
FC1F	
&)*
B FF1aLLLOM	
&)*
B ((A.	
&(	eS\Hf+=>#RL
B #%"2"21a"8 mAssF3R#:K:KA:N5NO}QU+V-A-A!Q-G-M-M-OP/3B37c>O>OPQ>R9RS(B/1E1Ea1K1Q1Q1ST&,,Q???r9   c                  "   t         } t        dt        d      fdt        d      fg      }t        dt        d      fdt        d      fgd      }t        dt        d      fdt        d      fgd      }|j                  |        |j	                  |       }|j
                  d   t        |       k(  sJ |j                  |        |j	                  |       }|j
                  |j
                  k(  sJ t        |j                         |j                                |j                  |       }t        |j                         |j                                |j	                  |       }t        |j                         |j                                y )	Nwordswordanalyzercharscharr   r:  r   )
JUNK_FOOD_DOCSr   r   rF   rT   r   r   r,   r'  r   )rD   r)  fs_parallelfs_parallel2r*  X_transformed_parallelX_transformed_parallel2s          r7   test_feature_union_parallelr  t  s|   A	ov67ov67	

B ov67ov67	
 K  ov67ov67	
 L FF1ILLOMq!SV+++OOA(2215"8">">>>>},,.0F0N0N0PQ +88;},,.0G0O0O0QR +44Q7},,.0G0O0O0QRr9   c                     t        d      } t        dd      }t        d|fd| fg      }|j                  t               |j	                         }|D ]  }d|v rd	|v rJ  t        |      d
k(  sJ t        dt               fg      j                  dgg      }t        j                  d      }t        j                  t        |      5  |j	                          d d d        y # 1 sw Y   y xY w)Nr  r  char_wb)r   r   )r  ngram_ranger  r  chars__words__#   tr1rn   zDTransformer tr1 (type Transf) does not provide get_feature_names_outr   )r   r   rF   r  get_feature_names_outr   rW   r   r   r   r   r   )	word_vect	char_vectftfeature_namesfeatr   s         r7    test_feature_union_feature_namesr    s    0IGI	+gy-AB	CBFF>,,.M 6D I$5556}###	vx()	*	.	.u	5B
))NC 
~S	1 #
  "# # #s   	C##C,c                  B   t         j                  } t         j                  }t        t	        d      t                     }|j                  | |       t        j                  t              5  t        |d       d d d        t        t	        d      t        d            }t        j                  t              5  t        |d       d d d        |j                  | |       t        |j                  t        j                  |             y # 1 sw Y   xY w# 1 sw Y   QxY w)Nrn   r   classes_r   r   )r   r   r   r   r   r   rF   r   r   r   r  r   r,   r  ri   r   )rD   rE   regr   s       r7   test_classes_propertyr    s    		AA
a(*:*<
=CGGAqM	~	& !Z ! a(*<!*L
MC	~	& !Z !GGAqMs||RYYq\2! !! !s   *D	8D	DDc                  f   t        d      } t        d      }t        d      }d |_        d | _        d |_        t        d| fd|fg      }t        ddgg|j	                  t        j                  d	gg                   t        d
dg|j                                d|fg|_        t        dgg|j	                  t        j                  d	gg                   t        dg|j                                |j                  d|fg       t        dgg|j	                  t        j                  d	gg                   t        dg|j                                |j                  |       t        dgg|j	                  t        j                  d	gg                   t        dg|j                                y )Nr   r   rh  c                     dgS Nx3r?   input_featuress    r7   <lambda>z.test_set_feature_union_steps.<locals>.<lambda>      $ r9   c                     dgS Nx2r?   r  s    r7   r  z.test_set_feature_union_steps.<locals>.<lambda>  r  r9   c                     dgS )Nx5r?   r  s    r7   r  z.test_set_feature_union_steps.<locals>.<lambda>  r  r9   ri  rk  rn   m2__x2m3__x3rl  m5__x5r$  )r(  mock__x3r`  mock__x5)	rb   r  r   r,   rT   ri   rj   r(  rN   )re  rm  rn  r  s       r7   test_set_feature_union_stepsr    sl   GEGEGE"?E"?E"?E	e}tUm4	5BAxbjj1#.?!@A(+R-E-E-GH !%=/Bubll2::se+<=>z2#;#;#=> MMVUO#4M5ubll2::se+<=>
|R%=%=%?@ MMuMubll2::se+<=>
|R%=%=%?@r9   c                     t        d      } t        d      }d | _        d |_        t        j                  dgg      }t	        d| fd|fg      }t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        dd	g|j                                |j                  d
       t        dgg|j                  |      j                  |             t        dgg|j                  |             t        d	g|j                                |j                  d
       t        g g|j                  |      j                  |             t        g g|j                  |             t        g |j                                |j                  |       t        dgg|j                  |      j                  |             t	        dd|fg      }t        dgg|j                  |      j                  |             t        dgg|j                  |             t        d	g|j                                y )Nr   r   c                     dgS r  r?   r  s    r7   r  z2test_set_feature_union_step_drop.<locals>.<lambda>  r  r9   c                     dgS r  r?   r  s    r7   r  z2test_set_feature_union_step_drop.<locals>.<lambda>  r  r9   rn   ri  rk  r  r  dropr|  ry  )ri  r  )
rb   r  ri   rj   r   r,   rF   rT   r   rN   )re  rm  rD   r  s       r7    test_set_feature_union_step_dropr    s   GEGE"?E"?E


QC5A	e}tUm4	5BAx!4!4Q!78Ax!1!1!!45(+R-E-E-GHMMVMubffQi11!45ub..q12z2#;#;#=>MMVMtRVVAY0034tR--a01r23356 MMUMubffQi11!45 
~e}5	6BubffQi11!45ub..q12z2#;#;#=>r9   c                  
   t        d      } t        d      }d | _        d |_        t        j                  dgg      }t	        d| fd|fg      }t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        dd	g|j                                |j                  d
       t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        dd	g|j                  dg             |j                  d
       t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        ddg|j                  dg             |j                  |       t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        dd	g|j                  dg             t	        dd|fg      }t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        dd	g|j                  dg             t        j                  }|j                  d   }t        ddd      }t	        dd|fg      }t        ||j                  |      j                  |      ddd|f          t        ||j                  |      ddd|f          t        g d|j                  g d             |j                  d
       |j                  |      j                  |      }t        |t        j                  ||g             |j                  |      }t        |t        j                  ||g             t        g d|j                  g d             |j                  |       t        ||j                  |      j                  |      dd| df          t        ||j                  |      dd| df          t        g d|j                  g d             t	        dd|fgd
di      }t        |dz  |j                  |      j                  |      ddd|f          t        |dz  |j                  |      ddd|f          t        g d|j                  g d             y)z@Check the behaviour of setting a transformer to `"passthrough"`.r   r   c                     dgS r  r?   r  s    r7   r  z4test_set_feature_union_passthrough.<locals>.<lambda>  r  r9   c                     dgS r  r?   r  s    r7   r  z4test_set_feature_union_passthrough.<locals>.<lambda>  r  r9   rn   ri  rk  r  r  r   r|  
m2__myfeatmyfeatry  
m3__myfeat)ri  r   r   r   r  r  r   N)passthrough__f0passthrough__f1passthrough__f2passthrough__f3	pca__pca0	pca__pca1)f0f1f2f3)r   )r  r  r  r  pca__f0pca__f1pca__f2pca__f3)r   )passthrough__pca0passthrough__pca1r  r  r  r  r=  )rb   r  ri   rj   r   r,   rF   rT   r   rN   r   r   r   r
   hstack)re  rm  rD   r  columnsr   X_fts          r7   "test_set_feature_union_passthroughr    s   GEGE #@E"?E


QC5A	e}tUm4	5BAx!4!4Q!78Ax!1!1!!45(+R-E-E-GHMM]M#Ax!4!4Q!78Ax!1!1!!45h/1I1I8*1UVMM]M#Ax!4!4Q!78Ax!1!1!!45	|$b&>&>z&J
 MMUMAx!4!4Q!78Ax!1!1!!45h/1I1I8*1UV 
,tUm<	=BAx!4!4Q!78Ax!1!1!!45h/1I1I8*1UV		AggajG
1A
FC	5s|D	EBq"&&)--a0HWH=>q"**1-a'k:;	
 	  !9:
 MMmM$66!9q!DtRYY1v./ADtRYY1v./		
 	  !9: MMcM"q"&&)--a0WHI>?q"**1-a'l;<	
 	  !9:
 
	'%6*A.
B q1ubffQi11!4Q[ABq1ub..q1!XgX+>?	
 	  !9:
r9   c                      t         j                  } t        ddd      }t        d|fdg      }|j	                  |        t        g d|j                                y)	z`Check that get_feature_names_out works with passthrough without
    passing input_features.
    r   r   r   r  r   r  )r  r  passthrough__x0passthrough__x1passthrough__x2passthrough__x3N)r   r   r
   r   rF   r,   r  )rD   r   r  s      r7   4test_feature_union_passthrough_get_feature_names_outr  u  sU     			A
1A
FC	s|%CD	EBFF1I	
 	  "
r9   c                  p   d} d}d}dt        d      fdt        d      fg}dt        d      fdt        d      fg}t        d	ft        d
ffD ]  \  }}dt        d      f|t        d      fg}|| f||f|||z  ffD ]x  \  }}	t        j                  t
        |	      5   |di ||ij                  dggdg       d d d         |di |dt        d      fgi}
t        |
||       t        j                  t
        |	      5  |
j                  dggdg       d d d        t        j                  t
        |	      5  |
j                  dggdg       d d d         |di |dt        d      fgi}
 |
j                  di ||i t        j                  t
        |	      5  |
j                  dggdg       d d d        t        j                  t
        |	      5  |
j                  dggdg       d d d        {  y # 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   xY w)Nz3Estimator names must not contain __: got \['a__q'\]z+Names provided are not unique: \['a', 'a'\]z=Estimator names conflict with constructor arguments: \['%s'\]a__qr   r5   r   r4   rO  r(  r   rn   r?   )
rb   r   r   r   r   r   rF   setattrr   rN   )error_message_1error_message_2error_message_3
bad_steps1
bad_steps2r   param
bad_steps3	bad_stepsmessageests              r7   test_step_name_validationr    sH   LODOVO47#c47^4JQ.3Q.1J '*\;M,NO .
UDGnud1g&67
))501#
 	.Iw z9 :)ui()--seaS9: 2#tAw 012CC	*z9 $!s#$ z9 .!!A3%!-. 2#tAw 012CCNN0eY/0z9 $!s#$ z9 .!!A3%!-. .3	..: :$ $. .$ $. .s<   G: H9HHH+:HHHH(+H5c                      t        dt        dt               fg      fg      } | j                  dt                      | j                  dt	               fgd       y )Nr4   r5   gMbP?)a__b__alphaa__brh  )a__stepsa__b__C)r   r   rN   r   r   )	estimators    r7   test_set_params_nested_pipeliner    sX    330@*A)B CDEFIU9C);)=#>"?Kr9   c                  r   t         j                  } t         j                  }t               }	 t	        j
                  |d      }t        dd      }t               }t        dt        |      fd|fg      }t        d|fd|fg|      }|j                  | |       |j                  | |       |j                  d   j                  }t        |j                  |       |j                  |              t        |j                  |       |j                  |              t        |j!                  |       |j!                  |              t        |j#                  | |      |j#                  | |             t        |j                  d   j$                  |j                  d   j$                         t'        |d	      rJ |j                  | |       t        |j                  |       |j                  |              t        |j                  |       |j                  |              t        |j!                  |       |j!                  |              t        |j#                  | |      |j#                  | |             t        |j                  d   j$                  |j                  d   j$                         ||j                  d   j                  k(  sJ t        dd      }	t               }
t        d
|
fd|	fg|      }|j                  | |       t        |j                  |       |j                  |              t        |j                  |       |j                  |              t        |j!                  |       |j!                  |              t        |j#                  | |      |j#                  | |             t        |j                  d   j$                  |j                  d
   j$                         ||j                  d
   j                  k(  sJ 	 t)        j*                  |       y # t)        j*                  |       w xY w)Nr<  locationrN  Tr   r   r   r   rM  r   transf_2)r   r   r   r   joblibMemoryr"   r   r   r   rF   r   r   r,   rr   rv   rw   ru   r   r  shutilrmtree)rD   rE   cachedirrM  r   r   r   cached_pipetsclf_2r  cached_pipe_2s               r7   test_pipeline_memoryr    s   		AAyH8 "=d3(E&M2UCLAB6 2UCLA&Q 	1A$$X.994<<?K,?,?,BC4--a0+2K2KA2NO411!4k6S6STU6VW4::a+[->->q!-DEX&--{/F/Fx/P/W/W	
 68,,, 	14<<?K,?,?,BC4--a0+2K2KA2NO411!4k6S6STU6VW4::a+[->->q!-DEX&--{/F/Fx/P/W/W	
 [,,X6AAAAA 15= (#eU^4V
 	!Q 	4<<?M,A,A!,DE4--a0-2M2Ma2PQ""1%}'F'Fq'I	
 	4::a+]-@-@A-FGX&--%%j188	
 ]..z:EEEEEhhs   OP P6c                  @   t               } t        j                  | d      }t        t	               t               |      }|j                  |u sJ t        t	               t                     }|j                  J t        |      dk(  sJ t        j                  |        y )Nr<  r  r   r   )
r   r  r  r   r   r"   rM  r   r  r  )r  rM  r   s      r7   test_make_pipeline_memoryr    s{    yH]]Hb9F[]CE&AH??f$$$[]CE2H??"""x=A
MM(r9   c                   $    e Zd ZddZddZddZy)FeatureNameSaverNc                 ,    | j                  |d       | S )NT)reset)_check_feature_namesrC   s      r7   rF   zFeatureNameSaver.fit  s    !!!4!0r9   c                     |S r2   r?   rC   s      r7   rT   zFeatureNameSaver.transform  rU   r9   c                     |S r2   r?   )r6   r  s     r7   r  z&FeatureNameSaver.get_feature_names_out
  s    r9   r2   )r;   r<   r=   rF   rT   r  r?   r9   r7   r  r    s    r9   r  c                     t        dt               fddt               fg      } t               }| j	                  |j
                  |j                         t        | dd j                  |j                        |j                         y)z5Check pipeline.get_feature_names_out with passthroughr6  passr   r   r_  Nr!  )
r   r  r   r	   rF   r   r   r,   r  r  )r   r   s     r7   test_features_names_passthroughr    su    &()#&()
D ;DHHTYY$Sb	''(:(:;T=O=Or9   c                  &   t        dt               fdt               fg      } t        D cg c]  }d|v  }}| j	                  t        |       t        | dd j                         g d       t        | dd j                  d      g d       yc c}w )	z5Check pipeline.get_feature_names_out with vectorizersvectr   r_  pizzaNr!  )beerburgercoke	copyrightr  thenonsense_is_ignored)r   r   r   r  rF   r,   r  )r   r   rE   s      r7   #test_feature_names_count_vectorizerr"    s    FO$56@R@T8UVWD-.!A.A.HH^QSb	'')? Sb	''(=>? 	/s   Bc                     t        dt               fg      } t               }| j                  |j                  |j
                         d}t        j                  t        |      5  | j                          ddd       y# 1 sw Y   yxY w)zZCheck that error is raised when a transformer does not define
    `get_feature_names_out`.notransr_  z&does not provide get_feature_names_outr   N)
r   rA   r	   rF   r   r   r   r   r   r  )r   r   r   s      r7   8test_pipeline_feature_names_out_error_without_definitionr%  -  si     Iwy123D;DHHTYY$
2C	~S	1 %""$% % %s   %A??Bc                      t        t                     } t        j                  t        d      5  | j                  dgdggddgddg       d d d        y # 1 sw Y   y xY w)Nz8Pipeline.fit does not accept the sample_weight parameterr   r   rn   r   )r   r   r   r   r   rF   )r   s    r7   test_pipeline_param_errorr'  9  s[    
*,
-C	T
 : 	!qc
QF1a&9: : :s   AAc              #      K   | ]L  \  \  }}}t        ||      r8|d k(  r,t        |d      r t        |j                  d   d   t              s|||f N yw)r   rO  r!  rn   N)r  r   rO  rz   ).0r  patternr  s       r7   	<genexpr>r+  A  s^      <gh sF/!C!syy}Q'3s 	'6<s   AAr   r   zv\[Pipeline\].*\(step 1 of 2\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 2\) Processing clf.* total=.*\n$)noopNz\[Pipeline\].*\(step 1 of 3\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 3\) Processing noop.* total=.*\n\[Pipeline\].*\(step 3 of 3\) Processing clf.* total=.*\n$)r,  r   )r   N)r   Nre   zw\[Pipeline\].*\(step 1 of 2\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 2\) Processing mult.* total=.*\n$)r   r   mult1re  z\[FeatureUnion\].*\(step 1 of 2\) Processing mult1.* total=.*\n\[FeatureUnion\].*\(step 2 of 2\) Processing mult2.* total=.*\n$)r-  r  )rm  r  z@\[FeatureUnion\].*\(step 1 of 1\) Processing mult2.* total=.*\n$)rF   r   r   zest, pattern, methodc                 F   t        | |      }g dg dg}dgdgg}| j                  d        |||       |j                         j                  rJ d       | j                  d        |||       t	        j
                  ||j                         j                        sJ y )	N)rn   r   r   )r#  rh  r}  r  r   F)rN  zGot output for verbose=FalseT)r  rN   
readouterroutr   r   )r  r  r*  capsysfuncrD   rE   s          r7   test_verboser3    s    3D	IA
qc
ANN5N!AJ  "&&F(FF&NN4N AJ88GV..044555r9   c                     ddgddgddgg} g d}t               }t               }t        ||      }t        |d      rJ |j	                  | |       |j
                  |j
                  cxk(  rdk(  sJ  J t               }t               }t        ||      }|j	                  | |       |j
                  |j
                  cxk(  rdk(  sJ  J t        |d      rJ y 	Nrn   r   r   r#  rh  r}  r   rn   r   n_features_in_)r!   r   r   r  rF   r7  )rD   rE   ssgbdtr   s        r7   test_n_features_in_pipeliner:    s     Q!Q!Q AA		B)+DT"Dt-...HHQN""3"38q88888 
	B)+DT"DFF1aL""3"38q88888t-....r9   c                  j   ddgddgddgg} g d}t               }t        |      }t        |d      rJ |j                  | |       |j                  |j                  cxk(  rdk(  sJ  J t               }t        |      }|j                  | |       |j                  |j                  cxk(  rdk(  sJ  J y r5  )r!   r   r  rF   r7  )rD   rE   r8  r5  s       r7    test_n_features_in_feature_unionr<    s     Q!Q!Q AA		B	BBr+,,,FF1aL 1 16Q66666 
	B	BBFF1aL 1 16Q66666r9   c                      G d dt         t              } t        j                  t        j                  }}t        d |        fd |        fg      }t        j                  t              5  |j                  ||       d d d        t        j                  t              5  |j                  ||       d d d        |j                  ||d       |j                  ||d       y # 1 sw Y   fxY w# 1 sw Y   >xY w)Nc                       e Zd ZddZddZy),test_feature_union_fit_params.<locals>.DummyNc                      |ddik7  rt         | S )Nr4   r   )r   r_   s       r7   rF   z0test_feature_union_fit_params.<locals>.Dummy.fit  s    c1X%  Kr9   c                     |S r2   r?   rC   s      r7   rT   z6test_feature_union_fit_params.<locals>.Dummy.transform  s    Hr9   r2   )r;   r<   r=   rF   rT   r?   r9   r7   Dummyr?    s    	
	r9   rB  dummy0dummy1r   rL   )r   r   r   r   r   r   r   r   r   rF   r   )rB  rD   rE   r   s       r7   test_feature_union_fit_paramsrE    s     -  99dkkqAx)Heg+>?@A	z	" 	a 
z	" 	1 EE!Q!EOOAqAO  s   )C!C-!C*-C6c                  v   t         j                  t         j                  }} t        j                  j                  ddg| j                  ddg      j                  t              }t        j                  | |<   t        t               t                     }|j                  | |      j                  | |      dkD  sJ y )Nrn   r   r   g?)pg?)r   r   r   ri   randomchoicer   astypeboolnanr   r   r   rF   ru   )rD   rE   maskr   s       r7   %test_pipeline_missing_values_leniencyrN    s     99dkkqA99QFAGGSz:AA$GDffAdG*<*>?D88Aq>1%+++r9   c                      ddgddgddgg} g d}dt               fg}d	di}d
}t        ||      }t        j                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY w)Nrn   r   r   r#  rh  r}  r6  r   transformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.r=  r   )rW   r   r   r   r   rF   )rD   rE   r(  weightsexpected_msgunions         r7   3test_feature_union_warns_unknown_transformer_weightrT    s     Q!Q!Q AA!68,-a G	5  )wGE	z	6 		!Q  s   A''A0c                 V    t        | t                     }|j                         d   rJ y )Npairwise)r   r"   	_get_tags)r   r   s     r7   test_pipeline_get_tags_nonerX    s*     ce,D~~
++++r9   	Predictorc                 \   t         j                  j                  d      }|j                  dd      t        j                  dgdz  dgdz  z         }}t        dt               fd |        fg      }|j                  ||       |j                  |      }t        |      rAt        |d       |j                  ||      t        j                  t        ||            k(  sJ y t        ||j!                                |j                  ||      t        j                  t#        ||            k(  sJ y )	Nr      r   rh  rn      rP  	predictor)ri   rH  RandomStaterandnr   r   r)   rF   rr   r   r,   ru   r   approxr   r*   r   r   )rY  rngrD   rE   modely_preds         r7   1test_search_cv_using_minimal_compatible_estimatorrd    s     ))


"C99RRXXqcAgb&89qA
+-	.ik0JKE 
IIaO]]1FU61%{{1a FMM.F2K$LLLL){{1a FMM(1f2E$FFFFr9   c                  ,    G d dt               } t        d |        fg      }t        j                  t              5  t        |       d d d        |j                  t        j                  t        j                         t        |       y # 1 sw Y   CxY w)Nc                       e Zd Zd Zy)0test_pipeline_check_if_fitted.<locals>.Estimatorc                     d| _         | S )NT)fitted_rC   s      r7   rF   z4test_pipeline_check_if_fitted.<locals>.Estimator.fit  s    DLKr9   Nr`   r?   r9   r7   	Estimatorrg    s    	r9   rj  r   )
r   r   r   r   r   r.   rF   r   r   r   )rj  r   s     r7   test_pipeline_check_if_fittedrk    sk    M 
 %-./H	~	& "!"LLDKK(H" "s   B

Bc                     ddgddgddgg} g d}t        dt               fg      }t        j                  t              5  t        |       d	d	d	       |j                  | |       t        |       t        d
g      }t        |       t        dt               fd
g      }t        j                  t              5  t        |       d	d	d	       |j                  | |       t        |       y	# 1 sw Y   xY w# 1 sw Y   3xY w)z1Check __sklearn_is_fitted__ is defined correctly.rn   r   r   r#  rh  r}  r6  r   Nr  )r   r)   r   r   r   r.   rF   )rD   rE   rS  s      r7   "test_feature_union_check_if_fittedrm    s     Q!Q!Q AA5"4"6789E	~	&  
IIaOE 123EE5"4"679PQRE	~	&  
IIaOE  s   C)7C5)C25C>c                  >   t         j                  t         j                  }}  G d dt              }t	         |       t                     }|j                  | |       t         j                  }|j                  |      }t        ||D cg c]  }d| 	 c}       yc c}w )zRCheck that pipeline passes names through.

    Non-regresion test for #21349.
    c                         e Zd Zd fd	Z xZS )Ytest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalarc                     t         |   |      }t        j                  |D cg c]  }d| 	 c}t              S c c}w )Nr  
my_prefix_)dtype)superr  ri   rj   object)r6   r  r6  rp  	__class__s       r7   r  zotest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_out=  s;    G11PE::uEtD62EVTTEs   >r2   )r;   r<   r=   r  __classcell__)rv  s   @r7   AddPrefixStandardScalarrp  <  s    	U 	Ur9   rx  rr  N)	r   r   r   r!   r   rF   r  r  r,   )rD   rE   rx  r   input_namesfeature_names_outrp  s          r7   8test_pipeline_get_feature_names_out_passes_names_throughr{  5  s    
 99dkkqAU. U
 02N4DEDHHQN$$K22;?(;*W4Zv+>*WX*Ws   B
c                  *   t        j                  d       t        dd      \  } }t        t	               t                     }|j                  d       |j                  | |       |dd j                         }|d   j                  }t        ||       y)z.Test pipeline's set_output with feature names.pandasTas_frame
return_X_yrT   Nr!  )r   importorskipr	   r   r!   r   
set_outputrF   r  feature_names_in_r,   )rD   rE   r   r  log_reg_feature_namess        r7   $test_pipeline_set_output_integrationr  J  s    
!dt4DAq)+=+?@DOOhO'HHQNSb	779 H66(*?@r9   c                     t        j                  d      } t        dd      \  }}t        |d      \  }}t	        dt               fdt               fg      }|j                  d       |j                  |       |j                  |      }t        || j                        sJ t        |j                  |j                                t        |j                  |j                         y	)
z'Test feature union with set_output API.r}  Tr~  r   r  scalarr   r  N)r   r  r	   r   r   r!   r
   r  rF   rT   r   	DataFramer,   r  r  index)pdrD   rq  X_trainX_testrS  rA  s          r7   test_feature_union_set_outputr  Z  s    			X	&Bdt4DAq&qq9OGV8^%56GHE	x(	IIgoof%Ggr||,,,w(C(C(EFw}}fll3r9   c                      t               } t               }t        d| fd|fddg      }|d   | u sJ |d   |u sJ |d   dk(  sJ |d   dk(  sJ y	)
z8Check FeatureUnion.__getitem__ returns expected results.r  r   r  )drop_mer  r  r   r  r  N)r!   r
   r   )r  r   rS  s      r7   test_feature_union_getitemr  j  s    F
%CvCL#		
E ?f$$$<3=M)))v%%%r9   keyr   c                     t        dt               fdt               fg      }d}t        j                  t
        |      5  ||     ddd       y# 1 sw Y   yxY w)z5Raise error when __getitem__ gets a non-string input.r  r   zOnly string keys are supportedr   N)r   r!   r
   r   r   r[  )r  rS  r   s      r7    test_feature_union_getitem_errorr  |  sP     8^%56GHE
*C	xs	+ c
  s   AAc                  H   t        j                  d       t        dd      \  } }t               }|j	                  |        t        d|fg      }t        |d      sJ t        | j                  |j                         t        |j                  |j                         t        dg      }|j	                  |        t        |d      sJ t        | j                  |j                         | j                         }t        dg      }|j	                  |       t        |d      rJ y)zxEnsure feature union has `.feature_names_in_` attribute if `X` has a
    `columns` attribute.

    Test for #24754.
    r}  Tr~  scaler  r  N)r   r  r	   r!   rF   r   r  r,   r  r  to_numpy)rD   rq  r   rS  X_arrays        r7   $test_feature_union_feature_names_in_r    s     !dt4DAq F
JJqM7F+,-E5-...qyy%"9"9:v//1H1HI 123E	IIaL5-...qyy%"9"9: jjlG123E	IIgu12222r9   c                   \    e Zd ZddZddZddZddZddZddZddZ	dd	Z
dd
ZddZy)SimpleEstimatorNc                     |J |J | S r2   r?   r6   rD   rE   r   props        r7   rF   zSimpleEstimator.fit  s    (((r9   c                     |J |J y r2   r?   r  s        r7   r   zSimpleEstimator.fit_transform      (((r9   c                     |J |J y r2   r?   r  s        r7   r   zSimpleEstimator.fit_predict  r  r9   c                     |J |J y r2   r?   r6   rD   r   r  s       r7   rr   zSimpleEstimator.predict  r  r9   c                     |J |J y r2   r?   r  s       r7   rv   zSimpleEstimator.predict_proba  r  r9   c                     |J |J y r2   r?   r  s       r7   rw   z!SimpleEstimator.predict_log_proba  r  r9   c                     |J |J y r2   r?   r  s       r7   rx   z!SimpleEstimator.decision_function  r  r9   c                     |J |J y r2   r?   r  s        r7   ru   zSimpleEstimator.score  r  r9   c                     |J |J y r2   r?   r  s       r7   rT   zSimpleEstimator.transform  r  r9   c                     |J |J y r2   r?   r  s       r7   rZ   z!SimpleEstimator.inverse_transform  r  r9   r:   )r;   r<   r=   rF   r   r   rr   rv   rw   rx   ru   rT   rZ   r?   r9   r7   r  r    s4    
         r9   r  enable_slep006r  splitpartial_fitc                    d }dggdg}}dgdd}}}t               } ||| dd      } ||ddd      }t               j                  dd      j                  dd      j	                  dd      }t        d	|fd
|fg      }	d| vr|	j                  dggdg|||      }		  t        |	|       |||||       t        |d||       t        |d||       y# t        $ r  t        |	|       ||||       Y @w xY w)z5Test that metadata is routed correctly for pipelines.c                 j    |t         v r
t         |   }n|g}|D ]  } t        | d| d      di |  | S )zSet requests for a given method.

        If the given method is a composite method, set the same requests for
        all the methods that compose it.
        set__requestr?   )r%   r  )r  r  kwargmethodss       r7   set_requestz7test_metadata_routing_for_pipeline.<locals>.set_request  sO     &&'/GhG 	;F1GC4xx01:E:	;
r9   rn   r4   r5   Tr   r  rF   )r   metadatatrsr  )r   r  r  )objr  r   r  rT   N)
r  r#   set_fit_requestset_transform_requestset_inverse_transform_requestr   rF   r  r   r$   )
r  r  rD   rE   r   r  r  r  r  r   s
             r7   "test_metadata_routing_for_pipeliner    sB    C51#qA%&Cc4M 
C
c6D
AC
c54
@C	td	;		TD		A	&	&TD	&	I	  %S'9:;HF<<SEA3m$   

!&!qD8	
 ]X =8  
!&!]	

s    C C87C8c                 R   dggdg}}dgd}}t               }t        d|fg      }d|  }t        j                  t        t        j                  |            5  	  t        ||       ||||       ddd       y# t        $ r  t        ||       |||       Y )w xY w# 1 sw Y   yxY w)zBTest that metadata is not routed for pipelines when not requested.rn   r4   r  zd[sample_weight, prop] are passed but are not explicitly set as requested or not for SimpleEstimator.r   r  N)	r  r   r   r   r   r   r   r  r   )r  rD   rE   r   r  r  r   error_messages           r7   (test_metadata_routing_error_for_pipeliner    s     C51#qA#s4M

C+s+,-H	''-h	0  
z=)A	B Q	Q%GHf%a-dSQ Q  	Q &GHf%a}4P	Q	Q Qs*   BA99BBBBB&)rx   rT   rZ   c                     t        dt               fg      }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`.r  z1is only supported if enable_metadata_routing=Truer   rn   r4   r  N)r   r  r   r   r   r  )r  r   s     r7   *test_routing_passed_metadata_not_supportedr  /  sa     k?#4567D	M
 B 	fseA3SAB B Bs   AAc                      t        dt               fdt               fg      } | j                  dggdg       | j	                  dgg       y)zFTest that pipeline works with estimators that have a `__len__` method.r  r  rn   N)r   r   r   rF   rr   r  s    r7   %test_pipeline_with_estimator_with_lenr  >  sN     
%'	(;8N8P*QRD 	HHqcUQCLL1#r9   	last_stepc                     t        dt               fd| fg      }|j                  dggdg      j                  dgdgdgg      dgdgdggk(  sJ y)zTest that the pipeline works when there is not last step.

    It should just ignore and pass through the data on transform.
    r  r  rn   r   r   N)r   r    rF   rT   )r  r   s     r7   test_pipeline_with_no_last_stepr  H  sc     e023k95MNOD88aSEA3))A3aS/:sQC!oMMMr9   )r>   	itertoolsr   r  r   tempfiler   r  numpyri   r   sklearn.baser   r   r   r   sklearn.clusterr   sklearn.datasetsr	   sklearn.decompositionr
   r   sklearn.dummyr   sklearn.ensembler   r   r   sklearn.exceptionsr   sklearn.feature_extraction.textr   sklearn.feature_selectionr   r   sklearn.imputer   sklearn.linear_modelr   r   r   sklearn.metricsr   r   sklearn.model_selectionr   sklearn.neighborsr   sklearn.pipeliner   r   r   r   sklearn.preprocessingr    r!   sklearn.svmr"   %sklearn.tests.metadata_routing_commonr#   r$    sklearn.utils._metadata_requestsr%   r&   sklearn.utils._testingr'   r(   r)   r*   r+   r,   sklearn.utils.fixesr-   sklearn.utils.validationr.   r   r  r0   rA   rQ   rW   r\   rb   rz   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  markparametrizer  r.  r2  r8  r?  rF  rH  rW  r\  rb  rf  rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r%  r'  productparameter_grid_test_verboser3  r:  r<  rE  rN  rT  rX  rd  rk  rm  r{  r  r  r  slicer  r  r  usefixturessortedsetr  r  r  r  r  r?   r9   r7   <module>r     sF    	       N N " & 3 ( 
 . ; < ( L L 4 4 0 N N E  H  / 4{ 	e 	' 
[ f = , ,& = &Qh	, >
634P 7"<<,7	I D11 .9, :,^
<'L/&
1 V8$+B." }(=>* ?*" }(=>L? ?L?^68+@B*SZ#&3 A: ?Fnb,#.LL< ~		} 	 	%:<"3)"3"3 8VX.	0DEFN 8VX.	@TUVN !68,/	,N 8VX.>?N *VTV,<=>O 3fdf5EFGO w/'461BCDT /'461BDUVWSY0	
b 	0e3#< ~ /1LM6 N6/.7(.,$ }(=>, ?, '79J&KLG MG(
2Y*A 4 &$ E!QK 01 23H* m * Z )*6#g,'=9Q*Q#RS7 T +7t )* 6#g,'=9Q*Q#RSQ T	 +
Q* E	B	B )* + )*t]&;<N = +Nr9   