
    -i=                       S r SSKrSSKrSSKrSSKrSSKJr  SSKrSSKr	SSK
r
SSKJr  SSKJrJrJrJrJrJr  SSKJr  SSKJr  SSKJrJr  SS	KJr  SS
KJrJrJ r   SSK!J"r"J#r#  SSK$J%r%  SSK&J'r'J(r(  SSK)J*r*  SSK+J,r,J-r-J.r.  SSK/J0r0J1r1  SSK2J3r3  SSK4J5r5  SSK6J7r7J8r8J9r9J:r:  SSK;J<r<J=r=  SSK>J?r?  SSK@JArAJBrBJCrCJDrD  SSKEJFrF  SSKGJHrHJIrI  SSKJJKrKJLrLJMrMJNrNJOrOJPrP  SSKQJRrR  SSKSJTrTJUrU  \" 5       rVS\VR                  R                  lY        S\VR                  R                  lY        Sr[ " S S\5      r\ " S  S!\\5      r] " S" S#\\]5      r^ " S$ S%\^5      r_ " S& S'\_5      r` " S( S)\\5      ra " S* S+\5      rb " S, S-\_5      rc " S. S/\5      rdS0 reS1 rfS2 rgS3 rhS4 riS5 rjS6 rkS7 rlS8 rmS9 rnS: roS; rpS< rqS= rrS> rs\
R                  R                  S?/ S@Q5      SA 5       rv\
R                  R                  SB\R5      SC 5       rwSD rxSE rySF rzSSG jr{SH r|SI r}SJ r~\
R                  R                  SK/ SLQ5      SM 5       rSN rSO rSP r\
R                  R                  SQSSQ/5      SR 5       r\
R                  R                  SQSSQ/5      SS 5       rST rSU r\
R                  R                  SV\9" \=" 5       \." 5       5      \4\9" \=" 5       \-" 5       5      \4\9" \=" 5       5      SW 4\8" / 5      SX 4/5      SY 5       rSZ rS[ rS\ rS] rS^ rS_ rS` rSa rSb rSc rSd rSe rSf rSg rSh rSi r " Sj Sk\5      rSl rSm rSn rSo rSp \GR:                  " \8" Sq\_" 5       4Sr\b" 5       4/5      Ss4\8" Sq\_" 5       4StSr\b" 5       4/5      Su4\8" Sq\_" 5       4SvSr\b" 5       4/5      Su4\8" Sq\_" 5       4Sw/5      Ss4\8" SxSy\a" 5       4/5      Sz4\8" S{Sy\a" 5       4/5      Sz4\7" S|\a" 5       4S}\a" 5       4/5      S~4\7" SS}\a" 5       4S/5      S4// SQ5       5       r\
R                  R                  S\5      S 5       rS rS rS rS rS rS r\
R                  R                  SQSSQ/5      S 5       r\
R                  R                  S\L\K/5      S 5       rS rS rS rS rS rS r\
R                  R                  SS\" SS5      /5      S 5       rS rS r\" SS9\
R                  R                  SSS/5      S 5       5       r\" SS9S 5       rS r\" SS9S 5       r\
R                  R                  S/ SQ5      S 5       r " S S\5      r\
R                  R                  S\" \" \I5      SS1-
  5      5      \" SS9S 5       5       r\
R                  R                  S\" \" \I5      SS1-
  5      5      \" SS9S 5       5       r\
R                  R                  S/ SQ5      S 5       r\" SS9S 5       r\
R                  R                  SSSQ/5      \" SS9S 5       5       r\" SS9S 5       r\" SS9S 5       r\" SS9\
R                  R                  S\B\A/5      S 5       5       rg)z
Test the pipeline module.
    N)mkdtemp)config_context)BaseEstimatorClassifierMixinTransformerMixincloneis_classifieris_regressor)KMeans)	load_iris)PCATruncatedSVD)DummyRegressor)HistGradientBoostingClassifierRandomForestClassifierRandomTreesEmbedding)NotFittedErrorUnsetMetadataPassedError)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)"ConsumingNoFitTransformTransformerConsumingTransformer	_Registrycheck_recorded_metadata)get_tags)COMPOSITE_METHODSMETHODS)MinimalClassifierMinimalRegressorMinimalTransformerassert_allcloseassert_array_almost_equalassert_array_equal)CSR_CONTAINERS)_check_feature_namescheck_is_fittedF)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                   "    \ rS rSrSrSS jrSrg)NoFitQ   z*Small class to test parameter dispatching.Nc                     Xl         X l        g Nab)selfr=   r>   s      N/var/www/html/venv/lib/python3.13/site-packages/sklearn/tests/test_pipeline.py__init__NoFit.__init__T   s        r<   NN)__name__
__module____qualname____firstlineno____doc__rA   __static_attributes__ rC   r@   r8   r8   Q   s
    4rC   r8   c                   .    \ rS rSrSS jrSS jrS rSrg)	NoTransY   Nc                     U $ r;   rK   r?   Xys      r@   fitNoTrans.fitZ       rC   c                 4    U R                   U R                  S.$ )Nr<   r<   )r?   deeps     r@   
get_paramsNoTrans.get_params]   s    VV$&&))rC   c                     US   U l         U $ Nr=   r=   )r?   paramss     r@   
set_paramsNoTrans.set_params`   s    rC   r\   r;   F)rE   rF   rG   rH   rS   rX   r^   rJ   rK   rC   r@   rM   rM   Y   s    *rC   rM   c                       \ rS rSrS rSrg)NoInvTransfe   c                     U$ r;   rK   r?   rQ   s     r@   	transformNoInvTransf.transformf       rC   rK   N)rE   rF   rG   rH   rf   rJ   rK   rC   r@   rb   rb   e   s    rC   rb   c                        \ rS rSrS rS rSrg)Transfj   c                     U$ r;   rK   re   s     r@   rf   Transf.transformk   rh   rC   c                     U$ r;   rK   re   s     r@   inverse_transformTransf.inverse_transformn   rh   rC   rK   N)rE   rF   rG   rH   rf   ro   rJ   rK   rC   r@   rj   rj   j   s    rC   rj   c                       \ rS rSrSS jrSrg)TransfFitParamsr   Nc                     X0l         U $ r;   
fit_paramsr?   rQ   rR   rv   s       r@   rS   TransfFitParams.fits   s    $rC   ru   r;   rE   rF   rG   rH   rS   rJ   rK   rC   r@   rr   rr   r   s    rC   rr   c                   V    \ rS rSrSS jrS rSS jrS rS rS r	\	=r
=rrSS	 jrS
rg)Multx   c                     Xl         g r;   mult)r?   r   s     r@   rA   Mult.__init__y   s    	rC   c                     gNTrK   r?   s    r@   __sklearn_is_fitted__Mult.__sklearn_is_fitted__|       rC   Nc                     U $ r;   rK   rP   s      r@   rS   Mult.fit   rU   rC   c                 H    [         R                  " U5      U R                  -  $ r;   npasarrayr   re   s     r@   rf   Mult.transform       zz!}tyy((rC   c                 H    [         R                  " U5      U R                  -  $ r;   r   re   s     r@   ro   Mult.inverse_transform   r   rC   c                 b    [         R                  " U5      U R                  -  R                  SS9$ )N   axis)r   r   r   sumre   s     r@   predictMult.predict   s'    

1		)..A.66rC   c                 .    [         R                  " U5      $ r;   r   r   rP   s      r@   score
Mult.score   s    vvayrC   r~   )r   r;   )rE   rF   rG   rH   rA   r   rS   rf   ro   r   predict_probapredict_log_probadecision_functionr   rJ   rK   rC   r@   r{   r{   x   s9    ))7 =DCMC%(9rC   r{   c                   B    \ rS rSrSrS rS
S jrS rS
S jrSS jr	S	r
g)	FitParamT   zMock classifierc                     SU l         g )NF
successfulr   s    r@   rA   FitParamT.__init__   s	    rC   c                     X0l         SU l        g r   )r   fitted_r?   rQ   rR   should_succeeds       r@   rS   FitParamT.fit   s    (rC   c                     U R                   $ r;   r   re   s     r@   r   FitParamT.predict   s    rC   c                 D    U R                  XUS9  U R                  U5      $ )N)r   )rS   r   r   s       r@   fit_predictFitParamT.fit_predict   s     n5||ArC   Nc                 <    Ub  X-  n[         R                  " U5      $ r;   r   )r?   rQ   rR   sample_weights       r@   r   FitParamT.score   s    $!AvvayrC   )r   r   r`   rD   )rE   rF   rG   rH   rI   rA   rS   r   r   r   rJ   rK   rC   r@   r   r      s     rC   r   c                       \ rS rSrSrS rSrg)DummyTransf   z(Transformer which store the column meansc                 n    [         R                  " USS9U l        [        R                  " 5       U l        U $ )Nr   r   )r   meanmeans_time
timestamp_rP   s      r@   rS   DummyTransf.fit   s(    ggaa( ))+rC   )r   r   N)rE   rF   rG   rH   rI   rS   rJ   rK   rC   r@   r   r      s
    2rC   r   c                   B    \ rS rSrSrS rS rS
S jrS
S jrS
S jr	Sr
g	)DummyEstimatorParams   z,Mock classifier that takes params on predictc                     gr   rK   r   s    r@   r   *DummyEstimatorParams.__sklearn_is_fitted__   r   rC   c                     U $ r;   rK   rP   s      r@   rS   DummyEstimatorParams.fit   rU   rC   c                     X l         U $ r;   got_attributer?   rQ   r   s      r@   r   DummyEstimatorParams.predict       *rC   c                     X l         U $ r;   r   r   s      r@   r   "DummyEstimatorParams.predict_proba   r   rC   c                     X l         U $ r;   r   r   s      r@   r   &DummyEstimatorParams.predict_log_proba   r   rC   r   Nr`   )rE   rF   rG   rH   rI   r   rS   r   r   r   rJ   rK   rC   r@   r   r      s    6rC   r   c            	         [        S/5      n [        R                  " [        5         U R	                  S//S/5        S S S 5        Sn[        S[        5       4/5      n [        R                  " [        US9   U R	                  S//S/5        S S S 5        [        5       n[        SU4/5      nUR                  SS9[        SS S US	.UR                  S
S9D6:X  d   eUR                  SS9  UR                  S:X  d   eUR                  b   e[        U5        [        5       n[        [        5      n[        SU4SU4/5      nUR                   S   UL d   eUR                   S   UL d   eSn[        S[        5       4SU4/5      n [        R                  " [        US9   U R	                  S//S/5        S S S 5        UR                  SS9  UR"                  S:X  d   e[        U5        [$        R&                  " S5      n[        R                  " [(        US9   UR                  SS9  S S S 5        [+        U5      nUR                   S   UR                   S   Ld   eUR                  SS9nUR                  SS9nUR                  S
S9 H  nUR-                  U5        M     UR                  S
S9 H  nUR-                  U5        M     UR-                  S5        UR-                  S5        UR-                  S5        UR-                  S5        Xg:X  d   eg ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN)= f)N)r   r   r   zRLast step of Pipeline should implement fit or be the string 'passthrough'.*NoFit.*clfmatchsvcTrW   )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__CrK   )r!   pytestraises	TypeErrorrS   r8   rM   rX   dictr^   r=   r>   reprr&   r   r   named_stepsCreescape
ValueErrorr   pop)	pipelinemsgr   pipefilter1pipe2r]   params2xs	            r@    test_pipeline_invalid_parametersr      s    !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[ 
"	! 
-	,< 
-	, 
.	-s/   L6L#L5M
L #
L25
M
Mc                      [         R                  n [         R                  n[        / 5      nSn[        R
                  " [        US9   UR                  X5        S S S 5        g ! , (       d  f       g = f)Nz(The pipeline is empty. Please add steps.r   )irisdatatargetr!   r   r   r   rS   )rQ   rR   r   r   s       r@   test_empty_pipeliner     sG    		AAB<D
4C	z	- 
.	-	-s   A""
A0c                     [         R                  " SS//5      n [        S[        5       4S[	        5       445      nUR                  U S S9  UR                  U 5        UR                  SS9  UR                  U S S9  UR                  U 5        g )Nr      transfr   rR   passthrough)r   )r   arrayr!   rj   r   rS   r   r^   rQ   r   s     r@   test_pipeline_init_tupler   '  sw    
1a&Ah)E9;+?@ADHHQ$HJJqMOO=O)HHQ$HJJqMrC   c                  @   [         R                  n [         R                  n[        5       n[	        [
        SS9n[        SU4SU4/5      nUR                  X5        UR                  U 5        UR                  U 5        UR                  U 5        UR                  X5        g )Nr   kr   logistic)r   r   r   r   r   r   r!   rS   r   r   r   r   )rQ   rR   r   r   r   s        r@   test_pipeline_methods_anovar   3  s    		AA

C)q)Ggw'*c):;<DHHQNLLOq1JJqrC   c                     [        S[        5       4S[        5       4/5      n U R                  S S SS9  U R	                  S 5      (       d   eU R
                  S   R                  b   eU R
                  S   R                  b   e[        R                  " S5      n[        R                  " [        US9   U R                  S S SS9  S S S 5        g ! , (       d  f       g = f)Nr   r   T)rQ   rR   clf__should_succeedz.fit() got an unexpected keyword argument 'bad'r   )clf__bad)r!   rj   r   rS   r   r   r=   r>   r   r   r   r   r   )r   r   s     r@   test_pipeline_fit_paramsr  B  s    h)E9;+?@ADHHttH6<<H%''///H%''/// ))D
EC	y	,td+ 
-	,	,s   2C
Cc                  x   [         R                  " SS//5      n [        S[        5       4S[	        5       4/5      nUR                  U S S9  UR                  U 5      S:X  d   eUR                  U S S9S:X  d   eUR                  U S S S9S:X  d   eUR                  U [         R                  " SS/5      S9S	:X  d   eg )
Nr   r   r   r   r      )rR   r   r      )r   r   r!   rj   r   rS   r   r   s     r@   %test_pipeline_sample_weight_supportedr  R  s    
1a&Ah)E9;+?@ADHHQ$H::a=A::a4: A%%%::a4t:4999::arxxA'7:8A===rC   c                     [         R                  " SS//5      n [        S[        5       4S[	        5       4/5      nUR                  U S S9  UR                  U 5      S:X  d   eUR                  U S S9S:X  d   e[        R                  " S5      n[        R                  " [        US	9   UR                  U [         R                  " SS/5      S9  S S S 5        g ! , (       d  f       g = f)
Nr   r   r   r   r   r  r  z:score() got an unexpected keyword argument 'sample_weight'r   )r   r   r!   rj   r{   rS   r   r   r   r   r   r   )rQ   r   r   s      r@   'test_pipeline_sample_weight_unsupportedr	  ]  s    
1a&Ah)E46?;<DHHQ$H::a=A::at:,111
))P
QC	y	,

1BHHaV$4
5 
-	,	,s   ''C
C%c                     [        S[        5       4/5      n [        R                  " S5      n[        R
                  " [        US9   U R                  SS9  S S S 5        [        R
                  " [        US9   U R                  SS9  S S S 5        [        R                  " S5      n[        R
                  " [        US9   U R                  SS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       Ng= f! , (       d  f       g = f)	NclszInvalid parameter 'fake' for estimator Pipeline(steps=[('cls', LinearRegression())]). Valid parameters are: ['memory', 'steps', 'transform_input', 'verbose'].r   nope)fake)fake__estimatorzInvalid parameter 'invalid_param' for estimator LinearRegression(). Valid parameters are: ['copy_X', 'fit_intercept', 'n_jobs', 'positive', 'tol'].)cls__invalid_param)r!   r   r   r   r   r   r   r^   )r   	error_msgs     r@   $test_pipeline_raise_set_params_errorr  j  s    e-/012D 			*I
 
z	3V$ 
4
 
z	3/ 
4 			UI 
z	362 
4	3 
4	3
 
4	3 
4	3s$   C7C(>C9
C%(
C69
Dc                  :   [         R                  n [         R                  n[        SSS9n[	        SSSS9n[        SU4SU4/5      nUR                  X5        UR                  U 5        UR                  U 5        UR                  U 5        UR                  X5        g )	NTr   probabilityrandom_statefullmle
svd_solvern_componentswhitenpcar   )r   r   r   r&   r   r!   rS   r   r   r   r   )rQ   rR   r   r  r   s        r@   test_pipeline_methods_pca_svmr    s    		AA
$Q
/C
eD
ACeS\E3<01DHHQNLLOq1JJqrC   c                     [         R                  n [        SSSS9n[        SS9n[	        SU4SU4/5      nUR                  U 5        UR                  U 5      R                  U R                  S   4:X  d   eUR                  UR                  U 5      5        [        UR                  U 5      UR                  UR                  U 5      5      5        g )	Nr  r  Tr  )noveltyr  lofr   )r   r   r   r   r!   rS   score_samplesshapefit_transformr1   rf   )rQ   r  r   r   s       r@   #test_pipeline_score_samples_pca_lofr$    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OrC   c                     [         R                  " S/S//5      n [         R                  " SS/5      n[        [        5       5      nUR	                  X5        SnSn[
        R                  " [        US9 nUR                  U 5        S S S 5        [        WR                  R                  [        5      (       d   eU[        UR                  R                  5      ;   d   eg ! , (       d  f       N_= f)Nr   r   z<'LogisticRegression' object has no attribute 'score_samples'z+'Pipeline' has no attribute 'score_samples'r   )r   r   r"   r   rS   r   r   AttributeErrorr!  
isinstancevalue	__cause__str)rQ   rR   r   	inner_msg	outer_msg	exec_infos         r@   4test_score_samples_on_pipeline_without_score_samplesr.    s    
1#sA
!QA +-.DHHQNNI=I	~Y	791 
8 ioo//@@@@IOO556666	 
8	7s   4C
C-c                  z   [         R                  n [         R                  nU R                  S   n[	        [
        R                  " U5      5      n[        5       n[        SSSS9n[        SSSS9nXE4 H  n[        SU4S	U4/5      nUR                  X5        UR                  U 5      n	U	R                  U4:X  d   eUR                  U 5      n
U
R                  X#4:X  d   eUR                  U 5      nUR                  X#4:X  d   eUR                  U 5      nUR                  X#4:X  d   eUR!                  X5        M     g )
Nr   r   
randomizedT)r  r  r  ovr)r  r  decision_function_shape
preprocessr   )r   r   r   r"  lenr   uniquer%   r   r&   r!   rS   r   r   r   r   r   )rQ   rR   	n_samples	n_classesscalerr  r   preprocessingr   r   proba	log_probar   s                r@   'test_pipeline_methods_preprocessing_svmr<    s'   		AA
IBIIaL!IF
1d
CC
$Q
NC ,6EF ,,q/}},,,""1%{{y4444**1-	9"8888 2215 &&9*@@@@

1# 'rC   c                  *   [        5       n [        SSS9n[        5       n[        SSS9nU R                  [        R                  5      nUR                  U5      n[        SU4SU4/5      nUR                  [        R                  5      n[        Xu5        g )Nr   auto)r  n_initr8  Kmeans)r%   r   r#  r   r   r   r!   r2   )r8  kmscaler_for_pipelinekm_for_pipelinescaledseparate_predr   pipeline_preds           r@   test_fit_predict_on_pipelinerG    s     F	Qv	.B )*!F;O !!$)),FNN6*M h 34x6QRSD$$TYY/Mm;rC   c                  r   [        5       n [        SS9n[        SU 4SU4/5      nSnSn[        R                  " [
        US9 n[        US5        S S S 5        [        WR                  R                  [
        5      (       d   eU[        UR                  R                  5      ;   d   eg ! , (       d  f       N_= f)	Nr  r  r8  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*  )r8  r  r   r,  r+  r-  s         r@   0test_fit_predict_on_pipeline_without_fit_predictrK    s     F

 Ch'%67D;I=I	~Y	79m$ 
8ioo//@@@@IOO556666 
8	7s   B((
B6c                  .   [        S[        5       4S[        5       4/5      n U R                  S S SSS9  U R                  S   R
                  S   (       d   eU R                  S   R                  (       d   eSU R                  S   R
                  ;  d   eg )Nr   r   T)rQ   rR   transf__should_get_thisr   should_get_thisr   )r!   rr   r   r   r   rv   r   r   s    r@   -test_fit_predict_with_intermediate_fit_paramsrP    s     h 12UIK4HIJD
$$   H%001BCCCE"----4#3#3H#=#H#HHHHrC   method_name)r   r   r   c                     [        S[        5       4S[        5       4/5      nUR                  S S 5        [	        X5      nU" S SS9  UR
                  S   R                  (       d   eg )Nr   r   T)rQ   r   )r!   rj   r   rS   rJ  r   r   )rQ  r   methods      r@   (test_predict_methods_with_predict_paramsrT    s_     h)E3G3I+JKLDHHT4T'F
T&E"0000rC   csr_containerc                    [         R                  R                  5       nXR                  SS9-  n[         R                  n[        SSS9n[        SS9n[        SU4SU4/5      nUR                  X5        UR                  U5      nUR                  UR                  S   S	4:X  d   e[        US S 2S S
24   UR                  U5      5        [        US S 2S
4   UR                  X5      R                  5       5        [        SU4SU4/5      nU " U5      nUR                  Xr5      n[        XhR                  5       5        [!        U5      n	UR"                  S   S   U	R"                  S   S   Ld   eUR%                  SS9  UR                  X5      R                  UR                  S   S4:X  d   e[        S['        5       4SU4SU4/5      nUR                  X5      nUR                  UR                  S   S4:X  d   eSn
[        S['        5       4S[)        5       4/5      n[*        R,                  " [.        U
S9   UR                  U5        S S S 5        [        SU4SU445      nUR                  X5        g ! , (       d  f       N1= f)Nr   r   r   )r  r  r   r   svdselectr  )	select__k   mockr  z>All estimators should implement fit and transform.*\bNoTrans\brf   no_transformr   )r   r   copyr   r   r   r   r    rS   rf   r"  r2   r#  r3   raveltoarrayr   transformer_listr^   rj   rM   r   r   r   )rU  rQ   rR   rW  rX  fsX_transformedX_spX_sp_transformedfs2r   s              r@   test_feature_unionrg    s^    			AQAA
AA
6C1F	s|h%78	9BFF1LLLOM1771:q/111 mAssF3S5F5Fq5IJ}QU+V-A-A!-G-M-M-OP 
s|h%78	9BD''0m-E-E-GH )Cq!!$C,@,@,CA,FFFF MMAMA!''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FF1L 
-	,s   9I66
Jc                     [        5       n [        5       n[        SU 4SU4/5      nUR                  S   U :X  d   eUR                  S   U:X  d   eUR                  R                  U :X  d   eUR                  R
                  U:X  d   eg)z6Check the behaviour of `named_transformers` attribute.r   noinvtransfN)rj   rb   r    named_transformersr   ri  )r   ri  rb  s      r@   %test_feature_union_named_transformersrk  B  s    XF-K	&)M;+GH	IB  *f444  /;>>>   ''6111  ,,;;;rC   c                      [        SS9n [        5       n[        X5      n[        UR                  6 u  p4US:X  d   eX@U4:X  d   eg )Nr  rI  )r  r   )r   rj   r#   zipra  )r  r\  funamestransformerss        r@   test_make_unionrq  O  sO    

 C8D	C	Br223E%%%%;&&&rC   c                  X   [        SS9n [        5       n[        XSS9nUR                  [        X5      R                  :X  d   eSUR                  :X  d   e[
        R                  " S5      n[        R                  " [        US9   [        XSSS	.S
9  S S S 5        g ! , (       d  f       g = f)Nr  rI  r  n_jobszEmake_union() got an unexpected keyword argument 'transformer_weights'r   
   r   )r  rj   transformer_weights)
r   rj   r#   ra  rt  r   r   r   r   r   )r  r\  rn  r   s       r@   test_make_union_kwargsrx  X  s    

 C8D	Ca	(B*S"7"H"HHHH		>> ))OC 
y	,3"2JK 
-	,	,s   B
B)c                 6   ^ ^ [        5       nU U4S jUl        U$ )z>Helper to create a mock transformer with custom feature names.c                 N   > [        T5       Vs/ s H	  nT U 3PM     sn$ s  snf r;   )range)input_featuresi	base_name
n_featuress     r@   <lambda>)create_mock_transformer.<locals>.<lambda>j  s.    #(#49#4a9+aS#49 9s   ")rj   get_feature_names_out)r~  r  r\  s   `` r@   create_mock_transformerr  g  s    8D"D KrC   c                     [         R                  n [         R                  n[        5       n[	        S5      n[        X#SS9nUR                  (       a   e[        X#SS9nUR                  X5        [        / SQUR                  5       5        g )Nr   Fverbose_feature_names_outT)	pca__pca0	pca__pca1	pca__pca2	pca__pca3transf__transf0transf__transf1transf__transf2)
r   r   r   r   r  r#   r  rS   r3   r  )rQ   rR   r  r\  unionfu_unions         r@   0test_make_union_passes_verbose_feature_names_outr  p  su     			AA
%C"8,DsEBE....#tDHLL	
 	&&(rC   c                  ^   [         R                  n [        SSS9n[        SU4/5      nUR	                  U 5      R                  U 5      nUR                  U 5      nUR                  U 5      n[        X45        [        X55        UR                  U5      nUR                  U5      n[        Xg5        g )Nr   r  )r  r  r  )	r   r   r   r!   rS   rf   r#  r2   ro   )rQ   r  r   X_transX_trans2X_trans3X_backX_back2s           r@   test_pipeline_transformr    s     			A
1
0C%'H ll1o''*G%%a(H  #Hg0g0''0F##G,Gf.rC   c                      [         R                  n [         R                  n[        5       n[	        SU4/5      nUR                  X5      nUR                  X5      R                  U 5      n[        XE5        g )Nr\  )	r   r   r   rj   r!   r#  rS   rf   r2   )rQ   rR   r   r   r  r  s         r@   test_pipeline_fit_transformr    s`    		AAXF&&)*+H $$Q*Gzz!))!,Hg0rC   z
start, end))r   r   )r   r   )r   r   )r   r  Nr   )r   NrD   c                 4   [        S[        5       4S[        5       4S[        5       4/SSS9nX U n[        U[         5      (       d   eUR                  UR                  X :X  d   e[        UR                  R                  5       5      [        UR                  R                  5       5      X :X  d   eUR                  SS9nUR                  SS9nUS		 US		 XE:X  d   eS
n[        R                  " [        US9   X US2     S S S 5        g ! , (       d  f       g = f)Ntransf1transf2r   123T)memoryverboseFr   stepsz*Pipeline slicing only supports a step of 1r   rY  )r!   rj   r   r'  r  listr   itemsrX   r   r   r   )startendr   
pipe_slicepipe_paramspipe_slice_paramsr   s          r@   test_pipeline_slicer    s    
VX	FH 5y{7KLD
 CJj(++++tzz%4444 	Z##))+,  &&()%4	5	5 //u/-K"--5-9G'"+++
6C	z	-3r\ 
.	-	-s   8D		
Dc                     [        5       n [        5       n[        SU 4SU4/5      nUS   U :X  d   eUS   U :X  d   eUS   U:X  d   eUS   U:X  d   e[        R                  " [
        5         US     S S S 5        [        R                  " [        5         US     S S S 5        g ! , (       d  f       N7= f! , (       d  f       g = f)Nr   r   r   rY  r  foobar)rj   r   r!   r   r   
IndexErrorKeyError)r   r   r   s      r@   test_pipeline_indexr    s    XF
+Ch'%67D7f>V###8s??;# 
z	"Q 
# 
x	 X 
!	 	 
#	" 
!	 s   ,B#B4#
B14
Cc                      [        5       n [        5       n[        SU 4/5      nUR                  S   U L d   eSU4/Ul        SUR                  ;  d   eUR                  S   UL d   eSU4/UR                  :X  d   eUR	                  SU 4/S9  SU 4/UR                  :X  d   eUR	                  US9  SU4/UR                  :X  d   eUR	                  S/S9  [
        R                  " S5      n[        R                  " [        US9   UR                  S//S/5        S S S 5        S	n[        R                  " [        US9   UR                  S//S/5        S S S 5        g ! , (       d  f       NH= f! , (       d  f       g = f)
Nr\  mock2r  r\  )junkrK   zJLast step of Pipeline should implement fit or be the string 'passthrough'.r   r   z0This 'Pipeline' has no attribute 'fit_transform')rj   r!   r   r  r^   r   r   r   r   r   rS   r&  r#  )r  r  r   r   s       r@   test_set_pipeline_stepsr    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* 
2	1	 
-	, 
2	1s   E?E/
E,/
E=c                     [        5       n [        SS9n[        SU 4SU4/5      nSUR                  ;   d   eSUR                  ;  d   eUR                  R                  U L d   eUR                  R
                  UL d   e[        SU 4SU4/5      nUR                  R                  U Ld   eUR                  R
                  UL d   eg )Nr   r~   r\  r   r  values)rj   r{   r!   r   r\  r   r  )r   mult2r   s      r@   test_pipeline_named_stepsr    s    XFaLE&&)FE?;<H X)))))(.....$$...$$--- (F+fe_=>H&&f444$$---rC   r   c                 J   [         R                  " S//5      n[         R                  " S/5      n[        SS9n[        SS9n[        SS9n[        SU4SU 4SU4S	U4/5      nUR	                  X5        / S
QnUR
                   VV	s/ s H  u  pUPM	     n
nn	Xz:X  d   eg s  sn	nf )Nr   r   r~   r     m2badm3m5)r  r  r  r  )r   r   r{   r!   rS   r  )r   rQ   rR   r  mult3mult5r   expected_namesname_actual_namess              r@   %test_pipeline_correctly_adjusts_stepsr    s    
1#A
!AaLEaLEaLE
,tUmdE]KH LL.N(07WTDL7))) 8s   Bc                   ^^^ [         R                  " S//5      n[         R                  " S/5      n[        SS9m[        SS9m[        SS9mUUU4S jnU" 5       nSn[        U//UR	                  X5      5        [        U/UR                  U5      R                  U5      5        [        XR                  U//5      5        UR                  U S9  S	n[        U//UR	                  X5      5        [        U/UR                  U5      R                  U5      5        [        XR                  U//5      5        UR                  S
S9UR                  TU TS SSS SS.	:X  d   eUR                  U S9  Sn[        U//UR	                  X5      5        [        U/UR                  U5      R                  U5      5        [        XR                  U//5      5        / SQnU H  n[        XG5      " U5        M     UR                  TS9  S	n[        U//UR	                  X5      5        [        U/UR                  U5      R                  U5      5        [        XR                  U//5      5        U" 5       nUR                  U S9  Sn[        U//UR                  X5      R                  U5      5        [        U//UR	                  X5      5        [        XR                  U//5      5        SnSn	[        R                  " [        U	S9 n
[        US5        S S S 5        [!        W
R"                  R$                  [        5      (       d   eU['        U
R"                  R$                  5      ;   d   eS	n[)        ST4SU 4ST4/5      n[        U//UR	                  X5      5        [        U/UR                  U5      R                  U5      5        [        XR                  U//5      5        g ! , (       d  f       N= f)Nr   r   r~   r  r  c                  ,   > [        ST 4ST4ST4/5      $ )Nr  r  last)r!   )r  r  r  s   r@   make0test_set_pipeline_step_passthrough.<locals>.make*  s!    $uGHHrC      r  ru  Tr   F)	r  r  r  r  r  m2__mult
last__multtransform_inputr  r  )r   r   r   rf   r   )r     z''str' object has no attribute 'predict'z*This 'Pipeline' has no attribute 'predict'r   r   r  r  r  )r   r   r{   r3   r#  rS   r   ro   r^   rX   r  rJ  rf   r   r   r&  r'  r(  r)  r*  r!   )r   rQ   rR   r  r   expother_methodsrS  r+  r,  r-  r  r  r  s              @@@r@   "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	79)$ 
8ioo//@@@@IOO556666 C${(;fe_MNHw 6 6q <=uhll1o55a89q44seW=> 
8	7s   O##
O1c                     [        [        S5      5      n U R                    U R                    U R                    [        [        5       5      n [        U S5      (       a   eU R                    U R                    [        S5      n U R                  S   S:X  d   e[        U S5      (       a   eU R                    U R                    [        [        5       [        5       5      n [        U S5      (       a   eU R                    [        U S5      (       a   e[        [        5       [        5       5      n [        U S5      (       a   eU R                    [        U S5      (       a   eg )Nr  r   r   r   r   r   ro   )	r"   r{   r   rf   ro   rj   hasattrr  rb   )r   s    r@   test_pipeline_ducktypingr  s  s&   T!W%HVX&Hx++++]+H>>! >>>>x++++VX{}5Hx++++x!45555[]FH5Hx++++x!455555rC   c                     [        5       n [        5       n[        X5      n[        U[        5      (       d   eUR                  S   S   S:X  d   eUR                  S   S   S:X  d   e[        X[        5       5      n[        U[        5      (       d   eUR                  S   S   S:X  d   eUR                  S   S   S:X  d   eUR                  S   S   S:X  d   eg )Nr   ztransf-1r   ztransf-2r   	fitparamt)rj   r"   r'  r!   r  r   )t1t2r   s      r@   test_make_pipeliner    s    	B	B DdH%%%%::a=z)))::a=z)))-DdH%%%%::a=z)))::a=z)))::a={***rC   zpipeline, check_estimator_typec                 0    [        U 5      R                  S L $ r;   )r+   estimator_typeests    r@   r  r    s    44<rC   c                     U R                   S L $ r;   )_estimator_typer  s    r@   r  r    s    3#6#6$#>rC   c                 8    [        U 5        U" U 5      (       d   eg)zCheck that the estimator type returned by the pipeline is correct.

Non-regression test as part of:
https://github.com/scikit-learn/scikit-learn/issues/30197
N)r   )r   check_estimator_types     r@   test_pipeline_estimator_typer    s    & 	N))))rC   c                  v    [        / S9n [        5       nUR                  5       nU R                  5       U:X  d   eg)zCheck that we propagate properly the tags in a Pipeline.

Non-regression test as part of:
https://github.com/scikit-learn/scikit-learn/issues/30197
r  N)r!   r   __sklearn_tags__)empty_pipelinebeexpected_tagss      r@   %test_sklearn_tags_with_empty_pipeliner    s:     B'N	B'')M**,===rC   c                     [         R                  n [         R                  n[        SSSS9n[	        SS9n[        SU4SU4/SS	0S
9nUR                  X5        UR                  U 5      n[        SU4SU4/SS	0S
9nUR                  X5      n[        S[        5       4SU4SU4/SS	0S
9nUR                  X5      n[        US S 2S S24   S	UR                  U 5      -  5        [        US S 2S4   UR                  X5      R                  5       5        [        US S 2S S24   S	UR                  U 5      -  5        [        US S 2S4   UR                  X5      R                  5       5        UR                  U R                  S   S4:X  d   eg )Nr   r0  r   r  r  r  r   r   r  rX  ru  rv  r\  rY     )r   r   r   r   r   r    rS   rf   r#  rj   r2   r3   r_  r"  )rQ   rR   r  rX  rb  rc  X_fit_transformedX_fit_transformed_wo_methods           r@   test_feature_union_weightsr    s   		AA
1A
FC1F	
&)*
B FF1LLLOM	
&)*
B ((.	
&(	eS\Hf+=>#RL
B #%"2"21"8 mAssF3R#:K:KA:N5NO}QU+V-A-A!-G-M-M-OP/3B37c>O>OPQ>R9RS(B/1E1Ea1K1Q1Q1ST&,,Q???rC   c                     [         n [        S[        SS94S[        SS94/5      n[        S[        SS94S[        SS94/SS9n[        S[        SS94S[        SS94/SS9nUR                  U 5        UR	                  U 5      nUR
                  S   [        U 5      :X  d   eUR                  U 5        UR	                  U 5      nUR
                  UR
                  :X  d   e[        UR                  5       UR                  5       5        UR                  U 5      n[        UR                  5       UR                  5       5        UR	                  U 5      n[        UR                  5       UR                  5       5        g )	Nwordswordanalyzercharscharr   rs  r   )
JUNK_FOOD_DOCSr    r   rS   rf   r"  r4  r3   r`  r#  )rQ   rb  fs_parallelfs_parallel2rc  X_transformed_parallelX_transformed_parallel2s          r@   test_feature_union_parallelr    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RrC   c                     [        SS9n [        SSS9n[        SU4SU 4/5      nUR                  [        5        UR	                  5       nU H  nSU;   a  M  S	U;   a  M   e   [        U5      S
:X  d   e[        S[        5       4/5      R                  S//5      n[        R                  " S5      n[        R                  " [        US9   UR	                  5         S S S 5        g ! , (       d  f       g = f)Nr  r  char_wb)r  r  )r  ngram_ranger  r  chars__words__#   tr1r   zDTransformer tr1 (type Transf) does not provide get_feature_names_outr   )r   r    rS   r  r  r4  rj   r   r   r   r   r&  )	word_vect	char_vectftfeature_namesfeatr   s         r@    test_feature_union_feature_namesr    s    0IGI	+gy-AB	CBFF>,,.MD I$555 }###	vx()	*	.	.u	5B
))NC 
~S	1
  " 
2	1	1s   
C$$
C2c                  F   [         R                  n [         R                  n[        [	        SS9[        5       5      nUR                  X5        [        R                  " [        5         [        US5        S S S 5        [        [	        SS9[        SS95      n[        R                  " [        5         [        US5        S S S 5        UR                  X5        [        UR                  [        R                  " U5      5        g ! , (       d  f       N= f! , (       d  f       N[= f)Nr   r   classes_r   r  )r   r   r   r"   r   r   rS   r   r   r&  rJ  r   r3   r  r   r5  )rQ   rR   regr   s       r@   test_classes_propertyr  #  s    		AA
a(*:*<
=CGGAM	~	&Z  
' a(*<!*L
MC	~	&Z  
'GGAMs||RYYq\2 
'	& 
'	&s   'D0D
D
D c                  b   [        S5      n [        S5      n[        S5      nS Ul        S U l        S Ul        [        SU 4SU4/5      n[        SS//UR	                  [
        R                  " S	//5      5      5        [        S
S/UR                  5       5        SU4/Ul        [        S//UR	                  [
        R                  " S	//5      5      5        [        S/UR                  5       5        UR                  SU4/S9  [        S//UR	                  [
        R                  " S	//5      5      5        [        S/UR                  5       5        UR                  US9  [        S//UR	                  [
        R                  " S	//5      5      5        [        S/UR                  5       5        g )Nr   r  r  c                     S/$ Nx3rK   r|  s    r@   r  .test_set_feature_union_steps.<locals>.<lambda>8      $rC   c                     S/$ Nx2rK   r  s    r@   r  r  9  r  rC   c                     S/$ )Nx5rK   r  s    r@   r  r  :  r  rC   r  r  r   m2__x2m3__x3r  m5__x5r\  )ra  mock__x3r  mock__x5)	r{   r  r    r3   rf   r   r   ra  r^   )r  r  r  r	  s       r@   test_set_feature_union_stepsr#  3  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%=%=%?@rC   c                     [        S5      n [        S5      nS U l        S Ul        [        R                  " S//5      n[	        SU 4SU4/5      n[        SS//UR                  U5      R                  U5      5        [        SS//UR                  U5      5        [        SS	/UR                  5       5        UR                  S
S9  [        S//UR                  U5      R                  U5      5        [        S//UR                  U5      5        [        S	/UR                  5       5        UR                  S
S9  [        / /UR                  U5      R                  U5      5        [        / /UR                  U5      5        [        / UR                  5       5        UR                  US9  [        S//UR                  U5      R                  U5      5        [	        SSU4/5      n[        S//UR                  U5      R                  U5      5        [        S//UR                  U5      5        [        S	/UR                  5       5        g )Nr   r  c                     S/$ r  rK   r  s    r@   r  2test_set_feature_union_step_drop.<locals>.<lambda>T  r  rC   c                     S/$ r  rK   r  s    r@   r  r&  U  r  rC   r   r  r  r  r  dropr  r  )r  r(  )
r{   r  r   r   r    r3   rS   rf   r#  r^   )r  r  rQ   r	  s       r@    test_set_feature_union_step_dropr)  P  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#;#;#=>rC   c                  	   [        S5      n [        S5      nS U l        S Ul        [        R                  " S//5      n[	        SU 4SU4/5      n[        SS//UR                  U5      R                  U5      5        [        SS//UR                  U5      5        [        SS	/UR                  5       5        UR                  S
S9  [        SS//UR                  U5      R                  U5      5        [        SS//UR                  U5      5        [        SS	/UR                  S/5      5        UR                  S
S9  [        SS//UR                  U5      R                  U5      5        [        SS//UR                  U5      5        [        SS/UR                  S/5      5        UR                  US9  [        SS//UR                  U5      R                  U5      5        [        SS//UR                  U5      5        [        SS	/UR                  S/5      5        [	        SSU4/5      n[        SS//UR                  U5      R                  U5      5        [        SS//UR                  U5      5        [        SS	/UR                  S/5      5        [        R                  nUR                  S   n[        SSSS9n[	        SSU4/5      n[        X#R                  U5      R                  U5      SS2SU24   5        [        X#R                  U5      SS2SU24   5        [        / SQUR                  / SQ5      5        UR                  S
S9  UR                  U5      R                  U5      n[        U[        R                  " X"/5      5        UR                  U5      n[        U[        R                  " X"/5      5        [        / SQUR                  / SQ5      5        UR                  US9  [        X#R                  U5      R                  U5      SS2U* S24   5        [        X#R                  U5      SS2U* S24   5        [        / SQUR                  / SQ5      5        [	        SSU4/S
S0S9n[        US-  UR                  U5      R                  U5      SS2SU24   5        [        US-  UR                  U5      SS2SU24   5        [        / SQUR                  / SQ5      5        g)z@Check the behaviour of setting a transformer to `"passthrough"`.r   r  c                     S/$ r  rK   r  s    r@   r  4test_set_feature_union_passthrough.<locals>.<lambda>z  r  rC   c                     S/$ r  rK   r  s    r@   r  r,  {  r  rC   r   r  r  r  r  r   r  
m2__myfeatmyfeatr  
m3__myfeat)r  r   r0  r   r  r  r  N)passthrough__f0passthrough__f1passthrough__f2passthrough__f3r  r  )f0f1f2f3)r  )r1  r2  r3  r4  pca__f0pca__f1pca__f2pca__f3)r   )passthrough__pca0passthrough__pca1r9  r:  r;  r<  rv  )r{   r  r   r   r    r3   rS   rf   r#  r^   r   r   r"  r   hstack)r  r  rQ   r	  columnsr  X_fts          r@   "test_set_feature_union_passthroughrB  s  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v./ADtRYYv./		
 	  !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:
rC   c                      [         R                  n [        SSSS9n[        SU4S/5      nUR	                  U 5        [        / SQUR                  5       5        g)	zDCheck feature_names_out for verbose_feature_names_out=True (default)r   r0  r   r  r  r  )r  r  passthrough__x0passthrough__x1passthrough__x2passthrough__x3Nr   r   r   r    rS   r3   r  rQ   r  r	  s      r@   9test_feature_union_passthrough_get_feature_names_out_truerJ    sS    		A
1A
FC	s|%CD	EBFF1I	
 	  "
rC   c                      [         R                  n [        SSSS9n[        SU4S/SS9nUR	                  U 5        [        / S	QUR                  5       5        g
)z;Check feature_names_out for verbose_feature_names_out=Falser   r0  r   r  r  r  Fr  )pca0pca1x0x1r  r  NrH  rI  s      r@   :test_feature_union_passthrough_get_feature_names_out_falserP    s[    		A
1A
FC	
56RW
B FF1I	
 	  "
rC   c                  |   [         R                  " S5      n U R                  SS/SS//SS/S9n[        S S	 S
9n[	        S[        5       4SU4/SS9nUR                  U5        [        R                  " S5      n[         R                  " [        US9   UR                  5         SSS5        g! , (       d  f       g= f)zFCheck get_feature_names_out and non-verbose names and colliding names.pandasr   r   r  r=   r>   r@  c                     U S/   $ r[   rK   rQ   s    r@   r  Stest_feature_union_passthrough_get_feature_names_out_false_errors.<locals>.<lambda>  s
    !SE(rC   c                 0    [         R                  " S/5      $ r[   )r   r   )r?   r  s     r@   r  rV    s    bjj#>OrC   )feature_names_outr  r  Fr  zvOutput feature names: ['a'] are not unique. Please set verbose_feature_names_out=True to add prefixes to feature namesr   N)r   importorskip	DataFramer$   r    r%   rS   r   r   r   r   r  )pdrQ   select_ar  r   s        r@   Atest_feature_union_passthrough_get_feature_names_out_false_errorsr]    s    			X	&B
q!fq!f%Sz:A".OH 
 	!D(#34"'E 
IIaL
))	UC
 
z	-##% 
.	-	-s   B--
B;c                     [         R                  " S5      n U R                  [        [	        S5      5      /[	        S5       Vs/ s H  nSU 3PM
     snS9n[        SS/SS9nUR                  U5        [        R                  " S	5      n[         R                  " [        US
9   UR                  5         SSS5        gs  snf ! , (       d  f       g= f)zLCheck get_feature_names_out with non-verbose names and >= 5 colliding names.rR  ru  frS  )r  r   )r  r   Fr  zOutput feature names: ['f0', 'f1', 'f2', 'f3', 'f4', ...] are not unique. Please set verbose_feature_names_out=True to add prefixes to feature namesr   N)r   rY  rZ  r  r{  r    rS   r   r   r   r   r  )r[  r}  rQ   r  r   s        r@   Ptest_feature_union_passthrough_get_feature_names_out_false_errors_overlap_over_5r`  %  s    			X	&B
d59o&%)0L)Q1QC)0LMA	 56"'E
 
IIaL
))	C 
z	-##% 
.	- 1M 
.	-s   B=
#C
Cc                     Sn SnSnS[        S5      4S[        S5      4/nS[        S5      4S[        S5      4/n[        S	4[        S
44 GH  u  pVS[        S5      4U[        S5      4/nX04XA4XrU-  44 GHk  u  p[        R                  " [
        U	S9   U" S0 Xh0D6R                  S//S/5        S S S 5        U" S0 US[        S5      4/0D6n
[        XU5        [        R                  " [
        U	S9   U
R                  S//S/5        S S S 5        [        R                  " [
        U	S9   U
R                  S//S/5        S S S 5        U" S0 US[        S5      4/0D6n
U
R                  " S0 Xh0D6  [        R                  " [
        U	S9   U
R                  S//S/5        S S S 5        [        R                  " [
        U	S9   U
R                  S//S/5        S S S 5        GMn     GM     g ! , (       d  f       GNA= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       GM  = f)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   r>   r  r=   r  ra  r   r   rK   )
r{   r!   r    r   r   r   rS   setattrr#  r^   )error_message_1error_message_2error_message_3
bad_steps1
bad_steps2r  param
bad_steps3	bad_stepsmessager  s              r@   test_step_name_validationrm  ;  s   LODOVO47#c47^4JQ.3Q.1J '*\;M,NO
DGnud1g&67
))501#
I z9)u()--seaS9 : 2#tAw 012CC	*z9!s# : z9!!A3%!- : 2#tAw 012CNN0e/0z9!s# : z9!!A3%!- :93#
 P :9 :9 :9 :9 :9s<   G,5G>,HH H1,
G;>
H
H 
H.1
Ic                      [        S[        S[        5       4/5      4/5      n U R                  S[        5       S9  U R                  S[	        5       4/SS9  g )Nr=   r>   gMbP?)a__b__alphaa__br  )a__stepsa__b__C)r!   r   r^   r   r   )	estimators    r@   test_set_params_nested_pipelinert  a  sX    330@*A)B CDEFIU9C);)=#>"?KrC   c                  P   [         R                  n [         R                  n[        5       n [        R
                  " USS9n[        SSS9n[        5       n[        S[        U5      4SU4/5      n[        SU4SU4/US9nUR                  X5        UR                  X5        UR                  S   R                  n[        UR                  U 5      UR                  U 5      5        [        UR                  U 5      UR                  U 5      5        [        UR!                  U 5      UR!                  U 5      5        [        UR#                  X5      UR#                  X5      5        [        UR                  S   R$                  UR                  S   R$                  5        ['        US	5      (       a   eUR                  X5        [        UR                  U 5      UR                  U 5      5        [        UR                  U 5      UR                  U 5      5        [        UR!                  U 5      UR!                  U 5      5        [        UR#                  X5      UR#                  X5      5        [        UR                  S   R$                  UR                  S   R$                  5        XR                  S   R                  :X  d   e[        SSS9n	[        5       n
[        S
U
4SU	4/US9nUR                  X5        [        UR                  U 5      UR                  U 5      5        [        UR                  U 5      UR                  U 5      5        [        UR!                  U 5      UR!                  U 5      5        [        UR#                  X5      UR#                  X5      5        [        UR                  S   R$                  UR                  S
   R$                  5        XR                  S
   R                  :X  d   e [(        R*                  " U5        g ! [(        R*                  " U5        f = f)Nru  locationr  Tr   r  r   r   r  r   transf_2)r   r   r   r   joblibMemoryr&   r   r!   r   rS   r   r   r3   r   r   r   r   r   r  shutilrmtree)rQ   rR   cachedirr  r   r   r   cached_pipetsclf_2ry  cached_pipe_2s               r@   test_pipeline_memoryr  g  sl   		AAyH8 "=d3(E&M2UCLAB6 2UCLA&Q 	$$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,,,, 	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
 	! 	4<<?M,A,A!,DE4--a0-2M2Ma2PQ""1%}'F'Fq'I	
 	4::a+]-@-@-FGX&--%%j188	
 ..z:EEEEEhhs   O	P P%c                  >   [        5       n [        R                  " U SS9n[        [	        5       [        5       US9nUR                  UL d   e[        [	        5       [        5       5      nUR                  b   e[        U5      S:X  d   e[        R                  " U 5        g )Nru  rv  rx  r   )
r   rz  r{  r"   r   r&   r  r4  r|  r}  )r~  r  r   s      r@   test_make_pipeline_memoryr    s{    yH]]Hb9F[]CE&AH??f$$$[]CE2H??"""x=A
MM(rC   c                   2    \ rS rSrSS jrSS jrSS jrSrg)FeatureNameSaveri  Nc                     [        XSS9  U $ )NT)reset)r5   rP   s      r@   rS   FeatureNameSaver.fit  s    TD1rC   c                     U$ r;   rK   rP   s      r@   rf   FeatureNameSaver.transform  rh   rC   c                     U$ r;   rK   )r?   r|  s     r@   r  &FeatureNameSaver.get_feature_names_out  s    rC   rK   r;   )rE   rF   rG   rH   rS   rf   r  rJ   rK   rC   r@   r  r    s    rC   r  c                     [        S[        5       4SS[        5       4/S9n [        5       nU R	                  UR
                  UR                  5        [        U SS R                  UR                  5      UR                  5        g)z5Check pipeline.get_feature_names_out with passthroughro  passr   r   r  NrY  )
r!   r  r   r   rS   r   r   r3   r  r
  )r   r   s     r@   test_features_names_passthroughr    su    &()#&()
D ;DHHTYY$Sb	''(:(:;T=O=OrC   c                  (   [        S[        5       4S[        5       4/S9n [         Vs/ s H  nSU;   PM
     nnU R	                  [        U5        [        U SS R                  5       / SQ5        [        U SS R                  S5      / SQ5        gs  snf )	z5Check pipeline.get_feature_names_out with vectorizersvectr   r  pizzaNrY  )beerburgercoke	copyrightr  thenonsense_is_ignored)r!   r   r   r  rS   r3   r  )r   r   rR   s      r@   #test_feature_names_count_vectorizerr    s    FO$56@R@T8UVWD-.~!A~A.HH^QSb	'')? Sb	''(=>? 	/s   Bc                     [        S[        5       4/S9n [        5       nU R                  UR                  UR
                  5        Sn[        R                  " [        US9   U R                  5         SSS5        g! , (       d  f       g= f)zVCheck 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!   rM   r   rS   r   r   r   r   r&  r  )r   r   r   s      r@   8test_pipeline_feature_names_out_error_without_definitionr    s`     Iwy123D;DHHTYY$
2C	~S	1""$ 
2	1	1s    A::
Bc                      [        [        5       5      n [        R                  " [        SS9   U R                  S/S//SS/SS/S9  S S S 5        g ! , (       d  f       g = f)Nz8Pipeline.fit does not accept the sample_weight parameterr   r   r   r  )r"   r   r   r   r   rS   )r   s    r@   test_pipeline_param_errorr    sV    
*,
-C	T
 	!qc
QF1a&9
 
 
s   A
Ac              #      #    U  H^  u  u  pn[        X5      (       d  M  US :X  a8  [        US5      (       a'  [        UR                  S   S   [        5      (       a  MX  XU4v   M`     g7f)r#  r  rY  r   N)r  r'  r  r   ).0r  patternrS  s       r@   	<genexpr>r    sj      <3#h sk n 	/!C!!syy}Q'3s S63#s   A(: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   Nr   zw\[Pipeline\].*\(step 1 of 2\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 2\) Processing mult.* total=.*\n$)r   r   mult1r  z\[FeatureUnion\].*\(step 1 of 2\) Processing mult1.* total=.*\n\[FeatureUnion\].*\(step 2 of 2\) Processing mult2.* total=.*\n$)r  r(  )r  r(  z@\[FeatureUnion\].*\(step 1 of 1\) Processing mult2.* total=.*\n$)rS   r#  r   zest, pattern, methodc                 H   [        X5      n/ SQ/ SQ/nS/S//nU R                  SS9  U" XV5        UR                  5       R                  (       a   S5       eU R                  SS9  U" XV5        [        R
                  " X#R                  5       R                  5      (       d   eg )	Nr   r   r  )r[  r  r  r  r  F)r  zGot output for verbose=FalseT)rJ  r^   
readouterroutr   r   )r  rS  r  capsysfuncrQ   rR   s          r@   test_verboser  0  s    3D	IA
qc
ANN5N!J  "&&F(FF&NN4N J88G..0445555rC   c                     SS/SS/SS//n / SQn[        5       n[        5       n[        X#5      n[        US5      (       a   eUR	                  X5        UR
                  UR
                  s=:X  a  S:X  d   e   e[        5       n[        5       n[        X#5      nUR	                  X5        UR
                  UR
                  s=:X  a  S:X  d   e   e[        US5      (       a   eg 	Nr   r   r  r[  r  r  r   r   r   n_features_in_)r%   r   r"   r  rS   r  )rQ   rR   ssgbdtr   s        r@   test_n_features_in_pipeliner  @  s     Q!Q!Q AA		B)+D"Dt-....HHQN""3"38q88888 
	B)+D"DFF1L""3"38q88888t-.....rC   c                  x   SS/SS/SS//n / SQn[        5       n[        U5      n[        US5      (       a   eUR                  X5        UR                  UR                  s=:X  a  S:X  d   e   e[        5       n[        U5      nUR                  X5        UR                  UR                  s=:X  a  S:X  d   e   eg r  )r%   r#   r  rS   r  )rQ   rR   r  rn  s       r@    test_n_features_in_feature_unionr  W  s     Q!Q!Q AA		B	BBr+,,,,FF1L 1 16Q66666 
	B	BBFF1L 1 16Q66666rC   c                      " S S[         [        5      n [        R                  [        R                  p![        SU " 5       4SU " 5       4/5      n[        R                  " [        5         UR                  X5        S S S 5        [        R                  " [        5         UR                  X5        S S S 5        UR                  XSS9  UR                  XSS9  g ! , (       d  f       Nc= f! , (       d  f       N@= f)Nc                   (    \ rS rSrSS jrSS jrSrg)7test_feature_union_fit_params.<locals>.DummyTransformerim  Nc                 "    USS0:w  a  [         eU $ )Nr=   r   r   rw   s       r@   rS   ;test_feature_union_fit_params.<locals>.DummyTransformer.fitn  s    c1X%  KrC   c                     U$ r;   rK   rP   s      r@   rf   Atest_feature_union_fit_params.<locals>.DummyTransformer.transforms      HrC   rK   r;   rE   rF   rG   rH   rS   rf   rJ   rK   rC   r@   DummyTransformerr  m  s    	
	rC   r  dummy0dummy1r   r\   )r   r   r   r   r   r    r   r   r   rS   r#  r  rQ   rR   r   s       r@   test_feature_union_fit_paramsr  k  s    +]  99dkkqx!1!34xAQAS6TUVA	z	"	a 
# 
z	"	 
# EE!!EOOAAO 
#	" 
#	"s   )CC)
C&)
C7c                  >    " S S[         5      n [        R                  [        R                  p![	        SU " 5       4SU " 5       4/5      n[
        R                  " [        5         UR                  XSS9  S S S 5        UR                  XSS9  g ! , (       d  f       N= f)Nc                       \ rS rSrSS jrSrg)Mtest_feature_union_fit_params_without_fit_transform.<locals>.DummyTransformeri  Nc                 "    USS0:w  a  [         eU $ )Nmetadatar   r  rw   s       r@   rS   Qtest_feature_union_fit_params_without_fit_transform.<locals>.DummyTransformer.fit  s    j!_,  KrC   rK   r;   ry   rK   rC   r@   r  r    s    	rC   r  nofittransform0nofittransform1r   )r  r   )	r'   r   r   r   r    r   r   r   r#  r  s       r@   3test_feature_union_fit_params_without_fit_transformr    s    =  99dkkq 0 23 0 23	
	A 
z	"	q) 
# OOA1O% 
#	"s   $B
Bc                     [         R                  R                  5       [         R                  R                  5       p[        R
                  R                  SS/U R                  SS/S9R                  [        5      n[        R                  X'   [        [        5       [        5       5      nUR                  X5      R                  X5      S:  d   eg )Nr   r   r   g?)pg?)r   r   r^  r   r   randomchoicer"  astypeboolnanr"   r   r   rS   r   )rQ   rR   maskr   s       r@   %test_pipeline_missing_values_leniencyr    s     99>>T[[--/q99QFAGGSz:AA$GDffAG*<*>?D88A>%+++rC   c                      SS/SS/SS//n / SQnS[        5       4/nS	S0nS
n[        X#S9n[        R                  " [        US9   UR                  X5        S S S 5        g ! , (       d  f       g = f)Nr   r   r  r[  r  r  r  r   transformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.rv  r   )rj   r    r   r   r   rS   )rQ   rR   ra  weightsexpected_msgr  s         r@   3test_feature_union_warns_unknown_transformer_weightr    sw     Q!Q!Q AA!68,-a G	5  )GE	z	6		! 
7	6	6s   A  
A.c                     [        U [        5       5      nUR                  5       R                  R                  (       a   eg r;   )r"   r&   r  
input_tagspairwise)r   r   s     r@   test_pipeline_get_tags_noner    s3     ce,D$$&11:::::rC   	Predictorc                 b   [         R                  R                  S5      nUR                  SS5      [         R                  " S/S-  S/S-  -   5      p2[        S[        5       4SU " 5       4/5      nUR                  X#5        UR                  U5      n[        U5      (       aA  [        US5        UR                  X#5      [        R                  " [        X55      5      :X  d   eg [        XSR!                  5       5        UR                  X#5      [        R                  " [#        X55      5      :X  d   eg )	Nr      r   r  r      r  	predictor)r   r  RandomStaterandnr   r!   r0   rS   r   r	   r3   r   r   approxr   r1   r   r   )r  rngrQ   rR   modely_preds         r@   1test_search_cv_using_minimal_compatible_estimatorr    s     ))


"C99RRXXqcAgb&89q
+-	.ik0JKE 
IIaO]]1FU61%{{1 FMM.2K$LLLL){{1 FMM(12E$FFFFrC   c                  8    " S S[         5      n [        SU " 5       4/5      n[        R                  " [        5         [        U5        S S S 5        UR                  [        R                  [        R                  5        [        U5        g ! , (       d  f       NH= f)Nc                       \ rS rSrS rSrg)0test_pipeline_check_if_fitted.<locals>.Estimatori  c                     SU l         U $ r   r   rP   s      r@   rS   4test_pipeline_check_if_fitted.<locals>.Estimator.fit      DLKrC   r  Nry   rK   rC   r@   	Estimatorr    s    	rC   r  r   )
r   r!   r   r   r   r6   rS   r   r   r   )r  r   s     r@   test_pipeline_check_if_fittedr    sd    M 
 %-./H	~	&! 
'LLDKK(H 
'	&s   B
Bc                     SS/SS/SS//n / SQn[        S[        5       4/5      n[        R                  " [        5         [        U5        S	S	S	5        UR                  X5        [        U5        [        S
/5      n[        U5        [        S[        5       4S
/5      n[        R                  " [        5         [        U5        S	S	S	5        UR                  X5        [        U5        g	! , (       d  f       N= f! , (       d  f       N<= f)z1Check __sklearn_is_fitted__ is defined correctly.r   r   r  r[  r  r  r  r   Nr  )r    r0   r   r   r   r6   rS   )rQ   rR   r  s      r@   "test_feature_union_check_if_fittedr    s     Q!Q!Q AA5"4"6789E	~	& 
' 
IIaOE 123EE5"4"679PQRE	~	& 
' 
IIaOE 
'	& 
'	&s    C)8C:)
C7:
Dc                  >   [         R                  [         R                  p " S S[        5      n[	        U" 5       [        5       5      nUR                  X5        [         R                  nUR                  U5      n[        XT Vs/ s H  nSU 3PM
     sn5        gs  snf )zJCheck that pipeline passes names through.

Non-regresion test for #21349.
c                   ,   ^  \ rS rSrSU 4S jjrSrU =r$ )Ytest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalari  c                    > [         TU ]  US9n[        R                  " U Vs/ s H  nSU 3PM
     sn[        S9$ s  snf )Nr  
my_prefix_)dtype)superr  r   r   object)r?   r|  ro  r  	__class__s       r@   r  otest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_out  s?    G11PE::uEutD62uEVTTEs   <rK   r;   )rE   rF   rG   rH   r  rJ   __classcell__)r  s   @r@   AddPrefixStandardScalarr    s    	U 	UrC   r  r  N)	r   r   r   r%   r"   rS   r
  r  r3   )rQ   rR   r  r   input_namesrX  r  s          r@   8test_pipeline_get_feature_names_out_passes_names_throughr    s    
 99dkkqU. U
 02N4DEDHHQN$$K22;?(;*W;4Zv+>;*WX*Ws   B
c                     [         R                  " S5        [        SSS9u  p[        [	        5       [        5       5      nUR                  SS9  UR                  X5        USS R                  5       nUS   R                  n[        X45        g)z.Test pipeline's set_output with feature names.rR  Tas_frame
return_X_yrf   NrY  )r   rY  r   r"   r%   r   
set_outputrS   r  feature_names_in_r3   )rQ   rR   r   r  log_reg_feature_namess        r@   $test_pipeline_set_output_integrationr    sx    
!dt4DA)+=+?@DOOhO'HHQNSb	779 H66(@rC   c                     [         R                  " S5      n [        SSS9u  p[        USS9u  p4[	        S[        5       4S[        5       4/5      nUR                  SS9  UR                  U5        UR                  U5      n[        X`R                  5      (       d   e[        UR                  UR                  5       5        [        UR                  UR                  5        g	)
z'Test feature union with set_output API.rR  Tr  r   r  scalarr  r  N)r   rY  r   r   r    r%   r   r  rS   rf   r'  rZ  r3   r@  r  index)r[  rQ   r  X_trainX_testr  r  s          r@   test_feature_union_set_outputr  "  s    			X	&Bdt4DA&qq9OG8^%56GHE	x(	IIgoof%Gg||,,,,w(C(C(EFw}}fll3rC   c                      [        5       n [        5       n[        SU 4SU4SS/5      nUS   U L d   eUS   UL d   eUS   S:X  d   eUS   S:X  d   eg	)
z8Check FeatureUnion.__getitem__ returns expected results.r  r  r  )drop_mer(  r  r   r  r(  N)r%   r   r    )r  r  r  s      r@   test_feature_union_getitemr  2  s    F
%CvCL#		
E ?f$$$<3=M)))v%%%rC   keyr   c                     [        S[        5       4S[        5       4/5      nSn[        R                  " [
        US9   X     SSS5        g! , (       d  f       g= f)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  r  r   s      r@    test_feature_union_getitem_errorr  D  sE     8^%56GHE
*C	xs	+
 
,	+	+s   A
Ac                  `   [         R                  " S5        [        SSS9u  p[        5       nUR	                  U 5        [        SU4/5      n[        US5      (       d   e[        U R                  UR                  5        [        UR                  UR                  5        [        S/5      nUR	                  U 5        [        US5      (       d   e[        U R                  UR                  5        U R                  5       n[        S/5      nUR	                  U5        [        US5      (       a   eg)zlEnsure feature union has `.feature_names_in_` attribute if `X` has a
`columns` attribute.

Test for #24754.
rR  Tr  scaler  r  N)r   rY  r   r%   rS   r    r  r3   r@  r  to_numpy)rQ   r  r8  r  X_arrays        r@   $test_feature_union_feature_names_in_r   O  s    !dt4DA 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22rC   c                     [         R                  " S5      R                  SS5      n [        R                  " [
        SS9   [        S[        S 5      4S[        S	 5      4/5      R                  U 5        S
S
S
5        g
! , (       d  f       g
= f)z?Test that FeatureUnion raises error for 1D transformer outputs.r  r  r   z@Transformer 'b' returned an array or dataframe with 1 dimensionsr   r=   c                     U $ r;   rK   rU  s    r@   r  .test_feature_union_1d_output.<locals>.<lambda>y  s    ArC   r>   c                     U S S 2S4   $ r  rK   rU  s    r@   r  r#  z  s    AadGrC   N)	r   arangereshaper   r   r   r    r$   r#  rU  s    r@   test_feature_union_1d_outputr'  o  sv    
		!Q"A	P
 	)+67)*;<=	

 -

 
 
s    5A>>
BT)enable_metadata_routingrS  rS   r#  c                   ^ S mU4S jnS n[         R                  " SS/SS//5      n[         R                  " SS/5      n[         R                  " SS//5      n[         R                  " S	S
//5      n[         R                  " SS//5      nU" 5       u  ppnUR                  UUUUUS9  U" U	SS/XWS9  U" U
SS/5        U" USS/US-   US9  U" UU R                  S5      US-   US9  g)zLTest that with transform_input, data is correctly transformed for each step.c                 H    [        U S9R                  XS9R                  XS9$ )z$Get a transformer with requests set.registryr   r  )r(   set_fit_requestset_transform_request)r,  r   r  s      r@   get_transformer6test_transform_input_pipeline.<locals>.get_transformer  s+     !(3_=_L"""R	
rC   c                     > [        5       [        5       [        5       [        5       4u  pp#[        T" U SSS9T" USSS9T" USSS9T" USSS9S/S9nX@XU4$ )zGet a pipeline and corresponding registries.

The pipeline has 4 steps, with different request values set to test different
cases. One is aliased.
Tr-  Fother_weightsr   r  )r)   r"   )
registry_1
registry_2
registry_3
registry_4r   r0  s        r@   get_pipeline3test_transform_input_pipeline.<locals>.get_pipeline  sw     KKKK	:
6

 JdTJJeeLJdTJJoPTU,-
 CCrC   c                 X    U (       d   eU  H  nU H  n[        U4UUS.UD6  M     M     g)zACheck that the right metadata was recorded for the given methods.)rS  parentN)r*   )r,  methodsr  rs  rS  s        r@   check_metadata5test_transform_input_pipeline.<locals>.check_metadata  s=    x!I!'!! 	 " "rC   r   r   r  r[  r   r  (   d      )r   r3  r  rS   rf   r-  r  N)r   r   rS   split)rS  r9  r>  rQ   rR   r   r3  r  r   r5  r6  r7  r8  r0  s                @r@   test_transform_input_pipelinerD    s   

D*
 	1a&1a&!"A
!QAHHq!fX&MHHr2hZ(Mxx#s%H;G>8DjjHH		##   UK( :{34	#a'	 S#a'	rC   c            	          " S S[         [        5      n  " S S[        [        5      n[        R                  " SS//5      n[        R                  " SS/5      n[        R                  " SS//5      n[        R                  " SS/5      n[        SU " 5       4S	U" 5       R                  S
S
S94/S/S9nUR                  X#XES9  g)z;Test that the right transformed values are passed to `fit`.c                        \ rS rSrS rS rSrg)>test_transform_input_explicit_value_check.<locals>.Transformeri  c                     SU l         U $ r   r  rP   s      r@   rS   Btest_transform_input_explicit_value_check.<locals>.Transformer.fit  r  rC   c                     US-   $ r  rK   re   s     r@   rf   Htest_transform_input_explicit_value_check.<locals>.Transformer.transform      q5LrC   r  Nr  rK   rC   r@   TransformerrG        		rC   rM  c                       \ rS rSrSS jrSrg)<test_transform_input_explicit_value_check.<locals>.Estimatori  Nc                    [        U[        R                  " SS//5      5        [        U[        R                  " SS/5      5        [        U[        R                  " SS//5      5        [        U[        R                  " SS/5      5        U $ )Nr   r   r   r  )r3   r   r   r?   rQ   rR   X_valy_vals        r@   rS   @test_transform_input_explicit_value_check.<locals>.Estimator.fit  sg    q"((QF8"45q"((Aq6"23ubhhAx&89ubhh1v&67KrC   rK   rD   ry   rK   rC   r@   r  rP    s    	rC   r  r   r   r   r  rs  TrS  rT  rS  r4  N)r   r   r   r   r   r!   r.  rS   )rM  r  rQ   rR   rS  rT  r   s          r@   )test_transform_input_explicit_value_checkrW    s    & O]  	1a&A
!QAHHq!fXEHHaVEKM*)+55D5MN	
 !	D 	HHQH,rC   c                     [         R                  " SS/SS//5      n [         R                  " SS/5      nSn[        R                  " [        US9   [        [        5       S/S	9R                  X5        S
S
S
5        g
! , (       d  f       g
= f)z<Make sure the right error is raised if slep6 is not enabled.r   r   r  r[  r   z;The `transform_input` parameter can only be set if metadatar   blahr4  N)r   r   r   r   r   r"   r   rS   )rQ   rR   r   s      r@   test_transform_input_no_slep6rZ    sg    
1a&1a&!"A
!QA
GC	z	-kmfX>BB1H 
.	-	-s   #A<<
B
c            	          " S S[         [        5      n  " S S[        [        5      n[        R                  " SS//5      n[        R                  " SS/5      n[        R                  " SS//5      n[        R                  " SS/5      n[        R                  " SS	//5      n[        R                  " SS/5      n[        S
U" 5       4SU " 5       R                  SSS94/S/S9nUR                  X#XF4XW4S9  g)zHTest that if metadata is a tuple of arrays, both arrays are transformed.c                       \ rS rSrSS jrSrg)-test_transform_tuple_input.<locals>.Estimatori  Nc                    [        U[        5      (       d   e[        U[        5      (       d   e[        US   [        R                  " SS//5      5        [        US   [        R                  " SS/5      5        [        US   [        R                  " SS//5      5        [        US   [        R                  " SS/5      5        SU l        U $ )Nr   r   r  r         T)r'  tupler3   r   r   r   rR  s        r@   rS   1test_transform_tuple_input.<locals>.Estimator.fit  s    eU++++eU++++uQxAq6();<uQx1a&)9:uQxB8*)=>uQx1a&)9:DLKrC   r  rD   ry   rK   rC   r@   r  r]    s    		rC   r  c                        \ rS rSrS rS rSrg)/test_transform_tuple_input.<locals>.Transformeri  c                     SU l         U $ r   r  rP   s      r@   rS   3test_transform_tuple_input.<locals>.Transformer.fit  r  rC   c                     US-   $ r  rK   re   s     r@   rf   9test_transform_tuple_input.<locals>.Transformer.transform  rL  rC   r  Nr  rK   rC   r@   rM  rd    rN  rC   rM  r   r   r   ru  r_  r  rs  TrV  rS  r4  N)r   r   r   r   r   r!   r.  rS   )	r  rM  rQ   rR   X_val0y_val0X_val1y_val1r   s	            r@   test_transform_tuple_inputrm    s    
O] 
&  	1a&A
!QAXX1vhFXXq!fFXXBxj!FXXq!fFKM*)+55D5MN	
 !	D 	HHQ&)&1AHBrC   )r   r   r   r   r   r!  rf   ro   c                      " S S[         5      n[        SU" 5       4/5      n[        R                  " [        SS9   [        X 5      " S//5        S S S 5        g ! , (       d  f       g = f)Nc                   N    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rSrg):test_pipeline_warns_not_fitted.<locals>.StatelessEstimatori8  zStateless estimator that doesn't check if it's fitted.

Stateless estimators that don't require fit, should properly set the
`requires_fit` flag and implement a `__sklearn_check_is_fitted__` returning
`True`.
c                     U $ r;   rK   rP   s      r@   rS   >test_pipeline_warns_not_fitted.<locals>.StatelessEstimator.fit@  s    KrC   c                     U$ r;   rK   re   s     r@   rf   Dtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.transformC  r  rC   c                 @    [         R                  " [        U5      5      $ r;   r   onesr4  re   s     r@   r   Btest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predictF      773q6?"rC   c                 @    [         R                  " [        U5      5      $ r;   rv  re   s     r@   r   Htest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict_probaI  ry  rC   c                 @    [         R                  " [        U5      5      $ r;   r   zerosr4  re   s     r@   r   Ltest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict_log_probaL  s    88CF##rC   c                 @    [         R                  " [        U5      5      $ r;   rv  re   s     r@   r   Ltest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.decision_functionO  ry  rC   c                     gr  rK   rP   s      r@   r   @test_pipeline_warns_not_fitted.<locals>.StatelessEstimator.scoreR  s    rC   c                 @    [         R                  " [        U5      5      $ r;   rv  re   s     r@   r!  Htest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.score_samplesU  ry  rC   c                     U$ r;   rK   re   s     r@   ro   Ltest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.inverse_transformX  r  rC   rK   N)rE   rF   rG   rH   rI   rS   rf   r   r   r   r   r   r!  ro   rJ   rK   rC   r@   StatelessEstimatorrp  8  s4    				#	#	$	#		#	rC   r  rs  z)This Pipeline instance is not fitted yet.r   r   )r   r!   r   warnsFutureWarningrJ  )rS  r  r   s      r@   test_pipeline_warns_not_fittedr  *  sT    !] !F k#5#789:D	m+V	Wse$ 
X	W	Ws   A
A'c                   ~    \ rS rSrS rSS jrSS jrSS jrSS jrSS jr	SS	 jr
SS
 jrSS jrSS jrSS jrSrg)SimpleEstimatorid  c                     gr   rK   r   s    r@   r   %SimpleEstimator.__sklearn_is_fitted__g  r   rC   Nc                 .    Uc   U5       eUc   U5       eU $ r;   rK   r?   rQ   rR   r   props        r@   rS   SimpleEstimator.fitj  s)    (7-7(%%rC   c                      Uc   eUc   eUS-   $ r  rK   r  s        r@   r#  SimpleEstimator.fit_transformo  #    (((1urC   c                 T    Uc   eUc   e[         R                  " [        U5      5      $ r;   rv  r  s        r@   r   SimpleEstimator.fit_predictt  ,    (((wws1vrC   c                 T    Uc   eUc   e[         R                  " [        U5      5      $ r;   rv  r?   rQ   r   r  s       r@   r   SimpleEstimator.predicty  r  rC   c                 T    Uc   eUc   e[         R                  " [        U5      5      $ r;   rv  r  s       r@   r   SimpleEstimator.predict_proba~  r  rC   c                 T    Uc   eUc   e[         R                  " [        U5      5      $ r;   r}  r  s       r@   r   !SimpleEstimator.predict_log_proba  s-    (((xxArC   c                 T    Uc   eUc   e[         R                  " [        U5      5      $ r;   rv  r  s       r@   r   !SimpleEstimator.decision_function  r  rC   c                     Uc   eUc   egr  rK   r  s        r@   r   SimpleEstimator.score  s    (((rC   c                      Uc   eUc   eUS-   $ r  rK   r  s       r@   rf   SimpleEstimator.transform  r  rC   c                      Uc   eUc   eUS-
  $ r  rK   r  s       r@   ro   !SimpleEstimator.inverse_transform  r  rC   rK   rD   )rE   rF   rG   rH   r   rS   r#  r   r   r   r   r   r   rf   ro   rJ   rK   rC   r@   r  r  d  s9    




 



rC   r  rC  partial_fitc                    S n[         R                  " S//5      [         R                  " S/5      p2S/SSpen[        5       nU" XpSSS9nU" USSSS9n[        5       R	                  SSS9R                  SSS9R                  SSS9n[        S	U4S
U4/5      n	SU ;  a  U	R                  X#XES9n	 [        X5      " X#XEUS9  [        USSUUS9  [        USSUUS9  g! [         a    [        X5      " X$XVS9   N7f = f)z5Test that metadata is routed correctly for pipelines.c                 r    U[         ;   a
  [         U   nOU/nU H  n[        U SU S35      " S0 UD6  M     U $ )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__requestrK   )r,   rJ  )r  rS  kwargr=  s       r@   set_request7test_metadata_routing_for_pipeline.<locals>.set_request  sH     &&'/GhGFC4xx01:E: 
rC   r   r=   r>   Tr   r  rS   r-  trsrs  )r   r  r  )objrS  r<  r   r  rf   N)r   r   r  r(   r.  r/  set_inverse_transform_requestr!   rS   rJ  r   r*   )
rS  r  rQ   rR   r   r  r  r  r  r   s
             r@   "test_metadata_routing_for_pipeliner    s6   
 88aSE?BHHaSMq%&CcM 
C
cD
AC
c54
@C	td	;		TD		A	&	&TD	&	I	  %S'9:;HF<<M<M
!8	
 # #  
!	

s   /C C87C8c                 B   S//S/p!S/SpC[        5       n[        SU4/5      nSU  3n[        R                  " [        [
        R                  " U5      S9    [        X`5      " XX4S9  SSS5        g! [         a    [        X`5      " XUS9   N%f = f! , (       d  f       g= f)zBTest that metadata is not routed for pipelines when not requested.r   r=   rs  zn[sample_weight, prop] are passed but are not explicitly set as requested or not requested for SimpleEstimator.r   r  N)	r  r!   r   r   r   r   r   rJ  r   )rS  rQ   rR   r   r  r  r   error_messages           r@   (test_metadata_routing_error_for_pipeliner    s     C51#q#s4

C+s+,-H	117	:  
z=)A	B	QH%a-S 
C	B  	Q H%a4P	Q	 
C	Bs*   BA00B
BBB
B)r   rf   ro   c                     [        S[        5       4/5      n[        R                  " [        SS9   [        X5      " S//S/SS9  SSS5        g! , (       d  f       g= f)z}Test that the right error message is raised when metadata is passed while
not supported when `enable_metadata_routing=False`.rs  z1is only supported if enable_metadata_routing=Truer   r   r=   r  N)r!   r  r   r   r   rJ  )rS  r   s     r@   *test_routing_passed_metadata_not_supportedr    sT     k?#4567D	M
 	seA3SA
 
 
s   A
Ac                      [        S[        5       4S[        5       4/5      n U R                  S//S/5        U R	                  S//5        g)zFTest that pipeline works with estimators that have a `__len__` method.r  rs  r   N)r!   r   r   rS   r   rO  s    r@   %test_pipeline_with_estimator_with_lenr  		  sN     
%'	(;8N8P*QRD 	HHqcUQCLL1#rC   	last_stepc                     [        S[        5       4SU 4/5      nUR                  S//S/5      R                  S/S/S//5      S/S/S//:X  d   eg)zyTest that the pipeline works when there is not last step.

It should just ignore and pass through the data on transform.
r  rs  r   r   r  N)r!   r$   rS   rf   )r  r   s     r@   test_pipeline_with_no_last_stepr  	  sc     e023k95MNOD88aSEA3))A3aS/:sQC!oMMMrC   c                     [         R                  " SS/SS/SS//5      n / SQn/ SQSp2[        S	[        5       4/5      nS
[        R                   S3n[
        R                  " [        [        R                  " U5      S9   UR                  XX#S9  SSS5        [        S	[        5       R                  SSS94/5      nS
[        R                   S3n[
        R                  " [        [        R                  " U5      S9   UR                  XX#S9R                  XUS9  SSS5        g! , (       d  f       N= f! , (       d  f       g= f)zCTest that the right error is raised when metadata is not requested.r   r   r   r[  r  r  r   r   r   r=   sub_transformerzb[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for z.fitr   r-  NTz
.transform)r   r   r    r(   rE   r   r   r   r   r   rS   r.  rf   )rQ   rR   r   r  feature_unionr  s         r@   )test_feature_union_metadata_routing_errorr  	  sL    	1a&1a&1a&)*AA'8 !#46J6L"M!NOM	!!5!>!> ?t	E 
 
/ryy7O	P!mO 
Q ! "$&66"& 7 	
	M	  4 = =>j	J 
 
/ryy7O	P 	 	

)AX)
F 
Q	P) 
Q	P( 
Q	Ps    D&>D7&
D47
Ec                  P    [        S[        5       4/5      n U R                  5         g)z]Test that get_metadata_routing() works regardless of the Child's
consumption of any metadata.r  N)r    r(   get_metadata_routing)r  s    r@   3test_feature_union_get_metadata_routing_without_fitr  G	  s'     !#46J6L"M!NOM&&(rC   r  c           	      J   [         R                  " SS/SS/SS//5      n/ SQn/ SQSpC[        S	U " [        5       S
9R	                  SSS9R                  SSS94SU " [        5       S
9R	                  SSS9R                  SSS94/5      nX4S.nUR                  " X40 UD6  UR                  " X40 UD6  UR                  " X40 UD6R                  " U40 UD6  UR                   H<  n U S   R                  n[        U5      (       d   eU H  n[        SUSSS.UD6  M     M>     g)z8Test that metadata is routed correctly for FeatureUnion.r   r   r   r[  r  r  r  r=   
sub_trans1r+  Tr-  
sub_trans2rS   )r  rS  r<  NrK   )r   r   r    r)   r.  r/  rS   r#  rf   ra  r,  r4  r*   )	r  rQ   rR   r   r  r  kwargsr,  	sub_transs	            r@   #test_feature_union_metadata_routingr  O	  sN    	1a&1a&1a&)*AA'8  Y[1 tdC&&TD&I	 Y[1 tdC&&TD&I		
M"  -CFa%f%//a%f%//<V<$55q>**8}}}!I#  	 "	 6rC   )r  )rI   	itertoolsr   r|  r   tempfiler   rz  numpyr   r   sklearnr   sklearn.baser   r   r   r   r	   r
   sklearn.clusterr   sklearn.datasetsr   sklearn.decompositionr   r   sklearn.dummyr   sklearn.ensembler   r   r   sklearn.exceptionsr   r   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(   r)   r*   sklearn.utilsr+    sklearn.utils._metadata_requestsr,   r-   sklearn.utils._testingr.   r/   r0   r1   r2   r3   sklearn.utils.fixesr4   sklearn.utils.validationr5   r6   r   r   flags	writeabler   r  r8   rM   rb   rj   rr   r{   r   r   r   r   r   r   r   r  r  r	  r  r  r$  r.  r<  rG  rK  rP  markparametrizerT  rg  rk  rq  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r)  rB  rJ  rP  r]  r`  rm  rt  r  r  r  r  r  r  r  productparameter_grid_test_verboser  r  r  r  r  r  r  r  r  r  r  r  r  r  r  slicer  r   r'  rD  rW  rZ  rm  r  r  sortedsetr  r  r  r  r  r  r  r  rK   rC   r@   <module>r     s    	       "  # & 3 ( 
 H ; < ( L L 4 4 0 N N E   # G  / J
 {!		 #   M 	e 	"G 
[ f ] 2 .& = ,Qh	, >
636P 7"<<,7	I D11 .9, :,^
<'L:/&
1 V8$+B." }(=>* ?*" }(=>M? ?M?`68+ $	~');)=	>N	~')9);	<lK.*+<	
 
">?**
>@B*SZ#&3 A: ?Fnb(,&.&,#.LL< ~		} 	 	%:<"+"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(.&0,$ }(=>; ?; '79J&KLG MG(
2Y*A 4 &$ E!QK 01 23@( -E?#;<J = .JZ -- .-BI -$C .$CX 	&%&%Z6m 6t 6#g,'=9Q*Q#RS-= . T=F 6#g,'=9Q*Q#RS-Q . TQ* E	B	B - . t]&;<-N . =N -%G .%GP -) .) -(*LM& .&rC   