
    >[g9                       d Z ddlZddlZddlZddlZddlZddlmZ ddlZddl	Z
ddlZddlmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z> ddl?m@Z@ ddlAmBZBmCZCmDZDmEZE ddlFmGZG ddlHmIZImJZJ ddlKmLZLmMZMmNZNmOZOmPZPmQZQ ddlRmSZS ddlTmUZUmVZV  e       ZWdeWj                  j                  _Z        deWj                  j                  _Z        dZ\ G d de      Z] G d  d!e]      Z^ G d" d#ee^      Z_ G d$ d%e_      Z` G d& d'e`      Za G d( d)ee      Zb G d* d+e      Zc G d, d-e`      Zd G d. d/e      Zed0 Zfd1 Zgd2 Zhd3 Zid4 Zjd5 Zkd6 Zld7 Zmd8 Znd9 Zod: Zpd; Zqd< Zrd= Zsej                  j                  d>g d?      d@        Zvej                  j                  dAeS      dB        ZwdC ZxdD ZydE ZzdF Z{dG Z|ej                  j                  dHg dI      dJ        Z}dK Z~dL ZdM Zej                  j                  dNddNg      dO        Zej                  j                  dNddNg      dP        ZdQ ZdR Zej                  j                  dS e: e>        e/             ef e: e>        e.             ef e: e>             dT f e9g       dU fg      dV        ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zdf Z G dg dhe      Zdi Zdj Zdk Zdl Zdm  ej6                   e9dn e`       fdo ec       fg      dpf e9dn e`       fdqdo ec       fg      drf e9dn e`       fdsdo ec       fg      drf e9dn e`       fdtg      dpf e9dudv eb       fg      dwf e9dxdv eb       fg      dwf e8dy eb       fdz eb       fg      d{f e8d|dz eb       fd}g      d~fgg d      D        Zej                  j                  de      d        Zd Zd Zd Zd Zd Zd Zej                  j                  dNddNg      d        Zej                  j                  deMeLg      d        Zd Zd Zd Zd Zd Zd Zej                  j                  dd edd      g      d        Zd Zd Z ed      ej                  j                  dddg      d               Z ed      d        Zd Z ed      d        Zej                  j                  dg d      d        Z G d de      Zej                  j                  d e eeJ      ddhz
               ed      d               Zej                  j                  d e eeJ      ddhz
               ed      d               Zej                  j                  dg d      d        Z ed      d        Zej                  j                  dddNg       ed      d               Z ed      d        Z ed      d        Z ed      ej                  j                  deCeBg      d               Zy)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                       e Zd ZdZddZy)NoFitz*Small class to test parameter dispatching.Nc                      || _         || _        y Nab)selfr<   r=   s      V/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/tests/test_pipeline.py__init__zNoFit.__init__U   s        NN)__name__
__module____qualname____doc__r@    rA   r?   r8   r8   R   s
    4rA   r8   c                   "    e Zd ZddZddZd Zy)NoTransNc                     | S r:   rG   r>   Xys      r?   fitzNoTrans.fit[       rA   c                 4    | j                   | j                  dS )Nr;   r;   )r>   deeps     r?   
get_paramszNoTrans.get_params^   s    VV$&&))rA   c                     |d   | _         | S Nr<   r<   )r>   paramss     r?   
set_paramszNoTrans.set_paramsa   s    rA   r:   F)rC   rD   rE   rN   rR   rW   rG   rA   r?   rI   rI   Z   s    *rA   rI   c                       e Zd Zd Zy)NoInvTransfc                     |S r:   rG   r>   rL   s     r?   	transformzNoInvTransf.transformg       rA   N)rC   rD   rE   r]   rG   rA   r?   rZ   rZ   f   s    rA   rZ   c                       e Zd Zd Zd Zy)Transfc                     |S r:   rG   r\   s     r?   r]   zTransf.transforml   r^   rA   c                     |S r:   rG   r\   s     r?   inverse_transformzTransf.inverse_transformo   r^   rA   N)rC   rD   rE   r]   rc   rG   rA   r?   r`   r`   k   s    rA   r`   c                       e Zd ZddZy)TransfFitParamsNc                     || _         | S r:   )
fit_paramsr>   rL   rM   rg   s       r?   rN   zTransfFitParams.fitt   s    $rA   r:   rC   rD   rE   rN   rG   rA   r?   re   re   s   s    rA   re   c                   H    e Zd Zd	dZd Zd
dZd Zd Zd ZexZ	xZ
Zd
dZy)Multc                     || _         y r:   mult)r>   rn   s     r?   r@   zMult.__init__z   s	    	rA   c                      yNTrG   r>   s    r?   __sklearn_is_fitted__zMult.__sklearn_is_fitted__}       rA   Nc                     | S r:   rG   rK   s      r?   rN   zMult.fit   rO   rA   c                 F    t        j                  |      | j                  z  S r:   npasarrayrn   r\   s     r?   r]   zMult.transform       zz!}tyy((rA   c                 F    t        j                  |      | j                  z  S r:   rv   r\   s     r?   rc   zMult.inverse_transform   ry   rA   c                 f    t        j                  |      | j                  z  j                  d      S )N   axis)rw   rx   rn   sumr\   s     r?   predictzMult.predict   s'    

1		)..A.66rA   c                 ,    t        j                  |      S r:   rw   r   rK   s      r?   scorez
Mult.score   s    vvayrA   )r|   r:   )rC   rD   rE   r@   rr   rN   r]   rc   r   predict_probapredict_log_probadecision_functionr   rG   rA   r?   rk   rk   y   s9    ))7 =DCMC%(9rA   rk   c                   4    e Zd ZdZd ZddZd ZddZd	dZy)
	FitParamTzMock classifierc                     d| _         y )NF
successfulrq   s    r?   r@   zFitParamT.__init__   s	    rA   c                      || _         d| _        y rp   )r   fitted_r>   rL   rM   should_succeeds       r?   rN   zFitParamT.fit   s    (rA   c                     | j                   S r:   r   r\   s     r?   r   zFitParamT.predict   s    rA   c                 L    | j                  |||       | j                  |      S )N)r   )rN   r   r   s       r?   fit_predictzFitParamT.fit_predict   s"    An5||ArA   Nc                 :    |||z  }t        j                  |      S r:   r   )r>   rL   rM   sample_weights       r?   r   zFitParamT.score   s     $M!AvvayrA   rX   rB   )	rC   rD   rE   rF   r@   rN   r   r   r   rG   rA   r?   r   r      s     rA   r   c                       e Zd ZdZd Zy)DummyTransfz(Transformer which store the column meansc                 p    t        j                  |d      | _        t        j                         | _        | S )Nr   r}   )rw   meanmeans_time
timestamp_rK   s      r?   rN   zDummyTransf.fit   s(    ggaa( ))+rA   N)rC   rD   rE   rF   rN   rG   rA   r?   r   r      s
    2rA   r   c                   4    e Zd ZdZd Zd ZddZddZddZy)	DummyEstimatorParamsz,Mock classifier that takes params on predictc                      yrp   rG   rq   s    r?   rr   z*DummyEstimatorParams.__sklearn_is_fitted__   rs   rA   c                     | S r:   rG   rK   s      r?   rN   zDummyEstimatorParams.fit   rO   rA   c                     || _         | S r:   got_attributer>   rL   r   s      r?   r   zDummyEstimatorParams.predict       *rA   c                     || _         | S r:   r   r   s      r?   r   z"DummyEstimatorParams.predict_proba   r   rA   c                     || _         | S r:   r   r   s      r?   r   z&DummyEstimatorParams.predict_log_proba   r   rA   NrX   )	rC   rD   rE   rF   rr   rN   r   r   r   rG   rA   r?   r   r      s    6rA   r   c                     t        dg      } t        j                  t              5  | j	                  dggdg       d d d        d}t        dt               fg      } t        j                  t        |      5  | j	                  dggdg       d d d        t               }t        d|fg      }|j                  d      t        dd d |d	|j                  d
      k(  sJ |j                  d       |j                  dk(  sJ |j                  J t        |       t               }t        t              }t        d|fd|fg      }|j                   d   |u sJ |j                   d   |u sJ d}t        dt               fd|fg      } t        j                  t        |      5  | j	                  dggdg       d d d        |j                  d       |j"                  dk(  sJ t        |       t%        j&                  d      }t        j                  t(        |      5  |j                  d       d d d        t+        |      }|j                   d   |j                   d   usJ |j                  d      }|j                  d      }|j                  d
      D ]  }|j-                  |        |j                  d
      D ]  }|j-                  |        |j-                  d       |j-                  d       |j-                  d       |j-                  d       ||k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)N)r|   r|   r|   zRLast step of Pipeline should implement fit or be the string 'passthrough'.*NoFit.*clfmatchsvcTrQ   )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__CrG   )r!   pytestraises	TypeErrorrN   r8   rI   rR   dictrW   r<   r=   reprr&   r   r   named_stepsCreescape
ValueErrorr   pop)	pipelinemsgr   pipefilter1pipe2rV   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W[ 
"	! 
-	,< 
-	, 
.	-s/   L%7L2#L?M%L/2L<?M	Mc                  *   t        j                  ddgg      } t        dt               fdt	               ff      }|j                  | d        |j                  |        |j                  d       |j                  | d        |j                  |        y )Nr|      transfr   rM   passthrough)r   )rw   arrayr!   r`   r   rN   r   rW   rL   r   s     r?   test_pipeline_init_tupler     sw    
1a&Ah)E9;+?@ADHHQ$HJJqMOO=O)HHQ$HJJqMrA   c                  J   t         j                  } t         j                  }t               }t	        t
        d      }t        d|fd|fg      }|j                  | |       |j                  |        |j                  |        |j                  |        |j                  | |       y )Nr   kr   logistic)irisdatatargetr   r   r   r!   rN   r   r   r   r   )rL   rM   r   r   r   s        r?   test_pipeline_methods_anovar   *  s    		AA

C)q)Ggw'*c):;<DHHQNLLOq1JJq!rA   c                     t        dt               fdt               fg      } | j                  d d d       | j	                  d       sJ | j
                  d   j                  J | j
                  d   j                  J t        j                  d      }t        j                  t        |      5  | j                  d d d       d d d        y # 1 sw Y   y xY w)Nr   r   T)rL   rM   clf__should_succeedz.fit() got an unexpected keyword argument 'bad'r   )clf__bad)r!   r`   r   rN   r   r   r<   r=   r   r   r   r   r   )r   r   s     r?   test_pipeline_fit_paramsr   9  s    h)E9;+?@ADHHttH6<<H%''///H%''/// ))D
EC	y	,td+ 
-	,	,s   /CCc                     t        j                  ddgg      } t        dt               fdt	               fg      }|j                  | d        |j                  |       dk(  sJ |j                  | d       dk(  sJ |j                  | d d       dk(  sJ |j                  | t        j                  ddg            d	k(  sJ y )
Nr|   r   r   r   r      )rM   r   r      )rw   r   r!   r`   r   rN   r   r   s     r?   %test_pipeline_sample_weight_supportedr   I  s    
1a&Ah)E9;+?@ADHHQ$H::a=A::a4: A%%%::a4t:4999::arxxA'7:8A===rA   c                     t        j                  ddgg      } t        dt               fdt	               fg      }|j                  | d        |j                  |       dk(  sJ |j                  | d       dk(  sJ t        j                  d      }t        j                  t        |	      5  |j                  | t        j                  ddg             d d d        y # 1 sw Y   y xY w)
Nr|   r   r   r   r   r   r   z:score() got an unexpected keyword argument 'sample_weight'r   )rw   r   r!   r`   rk   rN   r   r   r   r   r   r   )rL   r   r   s      r?   'test_pipeline_sample_weight_unsupportedr   T  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                     t        dt               fg      } t        j                  d      }t	        j
                  t        |      5  | j                  d       d d d        t	        j
                  t        |      5  | j                  d       d d d        t        j                  d      }t	        j
                  t        |      5  | j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   y xY w)	NclszInvalid parameter 'fake' for estimator Pipeline(steps=[('cls', LinearRegression())]). Valid parameters are: ['memory', 'steps', 'transform_input', 'verbose'].r   nope)fake)fake__estimatorzInvalid parameter 'invalid_param' for estimator LinearRegression(). Valid parameters are: ['copy_X', 'fit_intercept', 'n_jobs', 'positive'].)cls__invalid_param)r!   r   r   r   r   r   r   rW   )r   	error_msgs     r?   $test_pipeline_raise_set_params_errorr   a  s    e-/012D 			*I
 
z	3V$ 
4
 
z	3/ 
4 			NI 
z	362 
4	3 
4	3
 
4	3 
4	3s$   C$=C0C<$C-0C9<Dc                  J   t         j                  } t         j                  }t        dd      }t	        ddd      }t        d|fd|fg      }|j                  | |       |j                  |        |j                  |        |j                  |        |j                  | |       y )	NTr   probabilityrandom_statefullmle
svd_solvern_componentswhitenpcar   )r   r   r   r&   r   r!   rN   r   r   r   r   )rL   rM   r   r   r   s        r?   test_pipeline_methods_pca_svmr   |  s    		AA
$Q
/C
eD
ACeS\E3<01DHHQNLLOq1JJq!rA   c                     t         j                  } t        ddd      }t        d      }t	        d|fd|fg      }|j                  |        |j                  |       j                  | j                  d   fk(  sJ |j                  |j                  |              t        |j                  |       |j                  |j                  |                    y )	Nr   r   Tr   )noveltyr   lofr   )r   r   r   r   r!   rN   score_samplesshapefit_transformr1   r]   )rL   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OrA   c                     t        j                  dgdgg      } t        j                  ddg      }t        t                     }|j	                  | |       d}d}t        j                  t        |      5 }|j                  |        d d d        t        j                  j                  t              sJ |t        |j                  j                        v sJ y # 1 sw Y   SxY w)Nr|   r   z<'LogisticRegression' object has no attribute 'score_samples'z+'Pipeline' has no attribute 'score_samples'r   )rw   r   r"   r   rN   r   r   AttributeErrorr   
isinstancevalue	__cause__str)rL   rM   r   	inner_msg	outer_msg	exec_infos         r?   4test_score_samples_on_pipeline_without_score_samplesr    s    
1#sA
!QA +-.DHHQNNI=I	~Y	791 
8 ioo//@@@IOO556666	 
8	7s   5CC"c                     t         j                  } t         j                  }| j                  d   }t	        t        j                  |            }t               }t        ddd      }t        ddd      }||fD ]  }t        d|fd	|fg      }|j                  | |       |j                  |       }	|	j                  |fk(  sJ |j                  |       }
|
j                  ||fk(  sJ |j                  |       }|j                  ||fk(  sJ |j                  |       }|j                  ||fk(  sJ |j!                  | |        y )
Nr   r   
randomizedT)r   r   r   ovr)r   r   decision_function_shape
preprocessr   )r   r   r   r   lenrw   uniquer%   r   r&   r!   rN   r   r   r   r   r   )rL   rM   	n_samples	n_classesscalerr   r   preprocessingr   r   proba	log_probar   s                r?   'test_pipeline_methods_preprocessing_svmr    s3   		AA
IBIIaL!IF
1d
CC
$Q
NC #,6EFA ,,q/}},,,""1%{{y)4444**1-	9i"8888 2215 &&9i*@@@@

1a# 'rA   c                  8   t               } t        dd      }t               }t        dd      }| j                  t        j                        }|j                  |      }t        d|fd|fg      }|j                  t        j                        }t        ||       y )Nr   auto)r   n_initr  Kmeans)r%   r   r   r   r   r   r!   r2   )r  kmscaler_for_pipelinekm_for_pipelinescaledseparate_predr   pipeline_preds           r?   test_fit_predict_on_pipeliner    s     F	Qv	.B )*!F;O !!$)),FNN6*M h 34x6QRSD$$TYY/Mm];rA   c                  d   t               } t        d      }t        d| fd|fg      }d}d}t        j                  t
        |      5 }t        |d       d d d        t        j                  j                  t
              sJ |t        |j                  j                        v sJ y # 1 sw Y   SxY w)	Nr   r   r  r   z)'Pipeline' has no attribute 'fit_predict'z+'PCA' object has no attribute 'fit_predict'r   r   )r%   r   r!   r   r   r   getattrr   r   r  r  )r  r   r   r  r  r  s         r?   0test_fit_predict_on_pipeline_without_fit_predictr#    s     F

 Ch'%67D;I=I	~Y	79m$ 
8ioo//@@@IOO556666 
8	7s   B&&B/c                     t        dt               fdt               fg      } | j                  d d dd       | j                  d   j
                  d   sJ | j                  d   j                  sJ d| j                  d   j
                  vsJ y )Nr   r   T)rL   rM   transf__should_get_thisr   should_get_thisr   )r!   re   r   r   r   rg   r   r   s    r?   -test_fit_predict_with_intermediate_fit_paramsr(    s     h 12UIK4HIJD
$$   H%001BCCCE"----4#3#3H#=#H#HHHHrA   method_name)r   r   r   c                     t        dt               fdt               fg      }|j                  d d        t	        ||       } |d d       |j
                  d   j                  sJ y )Nr   r   T)rL   r   )r!   r`   r   rN   r"  r   r   )r)  r   methods      r?   (test_predict_methods_with_predict_paramsr,    sa     h)E3G3I+JKLDHHT4T;'F
T&E"0000rA   csr_containerc                 (   t         j                  j                         }||j                  d      z  }t         j                  }t        dd      }t        d      }t        d|fd|fg      }|j                  ||       |j                  |      }|j                  |j                  d   d	fk(  sJ t        |d d d d
f   |j                  |             t        |d d d
f   |j                  ||      j                                t        d|fd|fg      } | |      }|j                  ||      }t        ||j                                t!        |      }	|j"                  d   d   |	j"                  d   d   usJ |j%                  d       |j                  ||      j                  |j                  d   dfk(  sJ t        dt'               fd|fd|fg      }|j                  ||      }|j                  |j                  d   dfk(  sJ d}
t        dt'               fdt)               fg      }t+        j,                  t.        |
      5  |j                  |       d d d        t        d|fd|ff      }|j                  ||       y # 1 sw Y   -xY w)Nr   r}   r   )r   r   r|   r   svdselectr   )	select__k   mockr   z>All estimators should implement fit and transform.*\bNoTrans\br]   no_transformr   )r   r   copyr   r   r   r   r    rN   r]   r   r2   r   r3   raveltoarrayr   transformer_listrW   r`   rI   r   r   r   )r-  rL   rM   r/  r0  fsX_transformedX_spX_sp_transformedfs2r   s              r?   test_feature_unionr?  	  so    			AQAA
AA
6C1F	s|h%78	9BFF1aLLLOM1771:q/111 mAssF3S5F5Fq5IJ}QU+V-A-A!Q-G-M-M-OP 
s|h%78	9BD''a0m-=-E-E-GH )Cq!!$C,@,@,CA,FFFF MMAMAq!''AGGAJ?::: 
)E3<(F9KL	MB$$Q*M1771:q/111 MC	VX.0KL	MB	y	,
q	 
- 
s|h%78	9BFF1aL 
-	,s   
JJc                  
   t               } t               }t        d| fd|fg      }|j                  d   | k(  sJ |j                  d   |k(  sJ |j                  j                  | k(  sJ |j                  j
                  |k(  sJ y)z6Check the behaviour of `named_transformers` attribute.r   noinvtransfN)r`   rZ   r    named_transformersr   rA  )r   rA  r:  s      r?   %test_feature_union_named_transformersrC  9  s    XF-K	&)M;+GH	IB  *f444  /;>>>   ''6111  ,,;;;rA   c                      t        d      } t               }t        | |      }t        |j                   \  }}|dk(  sJ || |fk(  sJ y )Nr   r!  )r   r   )r   r`   r#   zipr9  )r   r4  funamestransformerss        r?   test_make_unionrI  F  sU    

 C8D	C	Br223E<%%%%C;&&&rA   c                  d   t        d      } t               }t        | |d      }|j                  t        | |      j                  k(  sJ d|j                  k(  sJ t        j                  d      }t        j                  t        |      5  t        | |ddd	
       d d d        y # 1 sw Y   y xY w)Nr   r!  r   n_jobszEmake_union() got an unexpected keyword argument 'transformer_weights'r   
   r|   )r   r`   transformer_weights)
r   r`   r#   r9  rL  r   r   r   r   r   )r   r4  rF  r   s       r?   test_make_union_kwargsrP  O  s    

 C8D	Ca	(B*S$"7"H"HHHH		>> ))OC 
y	,3"2JK 
-	,	,s   B&&B/c                  j   t         j                  } t        dd      }t        d|fg      }|j	                  |       j                  |       }|j                  |       }|j                  |       }t        ||       t        ||       |j                  |      }|j                  |      }t        ||       y )Nr   r   )r   r   r   )	r   r   r   r!   rN   r]   r   r2   rc   )rL   r   r   X_transX_trans2X_trans3X_backX_back2s           r?   test_pipeline_transformrW  ^  s     			A
1
0C%'H ll1o''*G%%a(H  #Hgx0gx0''0F##G,Gfg.rA   c                      t         j                  } t         j                  }t               }t	        d|fg      }|j                  | |      }|j                  | |      j                  |       }t        ||       y )Nr4  )	r   r   r   r`   r!   r   rN   r]   r2   )rL   rM   r   r   rR  rS  s         r?   test_pipeline_fit_transformrY  q  sf    		AAXF&&)*+H $$Q*Gzz!Q))!,Hgx0rA   z
start, end))r   r|   )r   r   )r|   r   )r|   r   Nr|   )r|   NrB   c                 :   t        dt               fdt               fdt               fgdd      }|| | }t        |t               sJ |j                  |j                  | | k(  sJ t        |j                  j                               t        |j                  j                               | | k(  sJ |j                  d      }|j                  d      }|d	= |d	= ||k(  sJ d
}t        j                  t        |      5  || |d    d d d        y # 1 sw Y   y xY w)Ntransf1transf2r   123T)memoryverboseFr   stepsz*Pipeline slicing only supports a step of 1r   r1  )r!   r`   r   r   ra  listr   itemsrR   r   r   r   )startendr   
pipe_slicepipe_paramspipe_slice_paramsr   s          r?   test_pipeline_sliceri  ~  s'    
VX	FH 5y{7KLD
 eCJj(+++tzz%4444 	Z##))+,  &&()%4	5	5 //u/-K"--5-9G'"++++
6C	z	-U3r\ 
.	-	-s   ?	DDc                  j   t               } t               }t        d| fd|fg      }|d   | k(  sJ |d   | k(  sJ |d   |k(  sJ |d   |k(  sJ t        j                  t
              5  |d    d d d        t        j                  t              5  |d    d d d        y # 1 sw Y   1xY w# 1 sw Y   y xY w)Nr   r   r   r1  r   foobar)r`   r   r!   r   r   
IndexErrorKeyError)r   r   r   s      r?   test_pipeline_indexrn    s    XF
+Ch'%67D7f>V###8s??;# 
z	"Q 
# 
x	 X 
!	 	 
#	" 
!	 s   'BB)B&)B2c                     t               } t               }t        d| fg      }|j                  d   | u sJ d|fg|_        d|j                  vsJ |j                  d   |u sJ d|fg|j                  k(  sJ |j	                  d| fg       d| fg|j                  k(  sJ |j	                  |       d|fg|j                  k(  sJ |j	                  dg       t        j                  d      }t        j                  t        |      5  |j                  dggdg       d d d        d	}t        j                  t        |      5  |j                  dggdg       d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)
Nr4  mock2ra  r4  )junkrG   zJLast step of Pipeline should implement fit or be the string 'passthrough'.r   r|   z0This 'Pipeline' has no attribute 'fit_transform')r`   r!   r   ra  rW   r   r   r   r   r   rN   r   r   )r\  r]  r   r   s       r?   test_set_pipeline_stepsrt    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,/E8c                     t               } t        d      }t        d| fd|fg      }d|j                  v sJ d|j                  vsJ |j                  j                  | u sJ |j                  j
                  |u sJ t        d| fd|fg      }|j                  j                  | usJ |j                  j
                  |u sJ y )Nr   rm   r4  rn   rp  values)r`   rk   r!   r   r4  rn   rv  )r   mult2r   s      r?   test_pipeline_named_stepsrx    s    XFaLE&&)FE?;<H X)))))(.....$$...$$--- (F+fe_=>H&&f444$$---rA   r   c                 V   t        j                  dgg      }t        j                  dg      }t        d      }t        d      }t        d      }t        d|fd| fd|fd	|fg      }|j	                  ||       g d
}|j
                  D 	cg c]  \  }}	|	 }
}}	||
k(  sJ y c c}	}w )Nr|   r   rm   r      m2badm3m5)r{  r|  r}  r~  )rw   r   rk   r!   rN   ra  )r   rL   rM   rw  mult3mult5r   expected_namesname_actual_namess              r?   %test_pipeline_correctly_adjusts_stepsr    s    
1#A
!AaLEaLEaLE
,tUmdE]KH LLA.N(07WT1DL7\))) 8s   B%c                    t        j                  dgg      }t        j                  dg      }t        d      t        d      t        d      fd} |       }d}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             |j                  |        d	}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             |j                  d
      |j                  | d ddd dd	k(  sJ |j                  |        d}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             g d}|D ]  } t        ||      |        |j                         d	}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg              |       }|j                  |        d}t        |gg|j                  ||      j                  |             t        |gg|j	                  ||             t        ||j                  |gg             d}d}	t        j                  t        |	      5 }
t        |d       d d d        t!        
j"                  j$                  t              sJ |t'        |
j"                  j$                        v sJ d	}t)        dfd| fdfg      }t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             y # 1 sw Y   xY w)Nr|   r   rm   r   rz  c                  ,    t        d fdfdfg      S )Nr{  r}  last)r!   )rw  r  r  s   r?   makez0test_set_pipeline_step_passthrough.<locals>.make  s!    $uGHHrA      r}  rM  Tr   F)	ra  r{  r}  r  r_  m2__mult
last__multtransform_inputr`  r{  )r   r   r   r]   r   )r     z''str' object has no attribute 'predict'z*This 'Pipeline' has no attribute 'predict'r   r   r{  r}  r  )rw   r   rk   r3   r   rN   r   rc   rW   rR   ra  r"  r]   r   r   r   r   r   r  r  r!   )r   rL   rM   r  r   expother_methodsr+  r  r  r  rw  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>>Pc                     t        t        d            } | j                   | j                   | j                   t        t                     } t        | d      rJ | j                   | j                   t        d      } | j                  d   dk(  sJ t        | d      rJ | j                   | j                   t        t               t                     } t        | d      rJ | j                   t        | d      rJ t        t               t                     } t        | d      rJ | j                   t        | d      rJ y )Nrz  r   r   r   r   r   rc   )	r"   rk   r   r]   rc   r`   hasattrra  rZ   )r   s    r?   test_pipeline_ducktypingr  D  s   T!W%HVX&Hx+++]+H>>! >>>>x+++VX{}5Hx+++x!4555[]FH5Hx+++x!45555rA   c                     t               } t               }t        | |      }t        |t              sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ t        | |t                     }t        |t              sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ y )Nr   ztransf-1r|   ztransf-2r   	fitparamt)r`   r"   r   r!   ra  r   )t1t2r   s      r?   test_make_pipeliner  `  s    	B	BR DdH%%%::a=z)))::a=z)))R-DdH%%%::a=z)))::a=z)))::a={***rA   zpipeline, check_estimator_typec                 0    t        |       j                  d u S r:   )r+   estimator_typeests    r?   <lambda>r  v  s    44<rA   c                     | j                   d u S r:   )_estimator_typer  s    r?   r  r  x  s    3#6#6$#>rA   c                 .    t        |         ||       sJ y)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  o  s    & 	N)))rA   c                  z    t        g       } t               }|j                         }| j                         |k(  sJ y)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
    rq  N)r!   r   __sklearn_tags__)empty_pipelinebeexpected_tagss      r?   %test_sklearn_tags_with_empty_pipeliner    s:     B'N	B'')M**,===rA   c                  :   t         j                  } t         j                  }t        ddd      }t	        d      }t        d|fd|fgdd	i
      }|j                  | |       |j                  |       }t        d|fd|fgdd	i
      }|j                  | |      }t        dt               fd|fd|fgdd	i
      }|j                  | |      }t        |d d d df   d	|j                  |       z         t        |d d df   |j                  | |      j                                t        |d d d df   d	|j                  |       z         t        |d d df   |j                  | |      j                                |j                  | j                  d   dfk(  sJ y )Nr   r  r   r   r   r   r|   r   r   r0  rM  rN  r4  r1     )r   r   r   r   r   r    rN   r]   r   r`   r2   r3   r7  r   )rL   rM   r   r0  r:  r;  X_fit_transformedX_fit_transformed_wo_methods           r?   test_feature_union_weightsr    s   		AA
1A
FC1F	
&)*
B FF1aLLLOM	
&)*
B ((A.	
&(	eS\Hf+=>#RL
B #%"2"21a"8 mAssF3R#:K:KA:N5NO}QU+V-A-A!Q-G-M-M-OP/3B37c>O>OPQ>R9RS(B/1E1Ea1K1Q1Q1ST&,,Q???rA   c                  "   t         } t        dt        d      fdt        d      fg      }t        dt        d      fdt        d      fgd      }t        dt        d      fdt        d      fgd      }|j                  |        |j	                  |       }|j
                  d   t        |       k(  sJ |j                  |        |j	                  |       }|j
                  |j
                  k(  sJ t        |j                         |j                                |j                  |       }t        |j                         |j                                |j	                  |       }t        |j                         |j                                y )	Nwordswordanalyzercharscharr   rK  r   )
JUNK_FOOD_DOCSr    r   rN   r]   r   r  r3   r8  r   )rL   r:  fs_parallelfs_parallel2r;  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RrA   c                     t        d      } t        dd      }t        d|fd| fg      }|j                  t               |j	                         }|D ]  }d|v rd	|v rJ  t        |      d
k(  sJ t        dt               fg      j                  dgg      }t        j                  d      }t        j                  t        |      5  |j	                          d d d        y # 1 sw Y   y xY w)Nr  r  char_wb)r   r   )r  ngram_ranger  r  chars__words__#   tr1r|   zDTransformer tr1 (type Transf) does not provide get_feature_names_outr   )r   r    rN   r  get_feature_names_outr  r`   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##C,c                  B   t         j                  } t         j                  }t        t	        d      t                     }|j                  | |       t        j                  t              5  t        |d       d d d        t        t	        d      t        d            }t        j                  t              5  t        |d       d d d        |j                  | |       t        |j                  t        j                  |             y # 1 sw Y   xY w# 1 sw Y   QxY w)Nr|   r   classes_r   r   )r   r   r   r"   r   r   rN   r   r   r   r"  r   r3   r  rw   r  )rL   rM   regr   s       r?   test_classes_propertyr    s    		AA
a(*:*<
=CGGAqM	~	&Z  
' a(*<!*L
MC	~	&Z  
'GGAqMs||RYYq\2 
'	& 
'	&s   *D	8D	DDc                  f   t        d      } t        d      }t        d      }d |_        d | _        d |_        t        d| fd|fg      }t        ddgg|j	                  t        j                  d	gg                   t        d
dg|j                                d|fg|_        t        dgg|j	                  t        j                  d	gg                   t        dg|j                                |j                  d|fg       t        dgg|j	                  t        j                  d	gg                   t        dg|j                                |j                  |       t        dgg|j	                  t        j                  d	gg                   t        dg|j                                y )Nr   r   rz  c                     dgS Nx3rG   input_featuress    r?   r  z.test_set_feature_union_steps.<locals>.<lambda>	      $rA   c                     dgS Nx2rG   r  s    r?   r  z.test_set_feature_union_steps.<locals>.<lambda>
  r  rA   c                     dgS )Nx5rG   r  s    r?   r  z.test_set_feature_union_steps.<locals>.<lambda>  r  rA   r{  r}  r|   m2__x2m3__x3r~  m5__x5r4  )r9  mock__x3rr  mock__x5)	rk   r  r    r3   r]   rw   rx   r9  rW   )rw  r  r  r  s       r?   test_set_feature_union_stepsr    sl   GEGEGE"?E"?E"?E	e}tUm4	5BAxbjj1#.?!@A(+R-E-E-GH !%=/Bubll2::se+<=>z2#;#;#=> MMVUO#4M5ubll2::se+<=>
|R%=%=%?@ MMuMubll2::se+<=>
|R%=%=%?@rA   c                     t        d      } t        d      }d | _        d |_        t        j                  dgg      }t	        d| fd|fg      }t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        dd	g|j                                |j                  d
       t        dgg|j                  |      j                  |             t        dgg|j                  |             t        d	g|j                                |j                  d
       t        g g|j                  |      j                  |             t        g g|j                  |             t        g |j                                |j                  |       t        dgg|j                  |      j                  |             t	        dd|fg      }t        dgg|j                  |      j                  |             t        dgg|j                  |             t        d	g|j                                y )Nr   r   c                     dgS r  rG   r  s    r?   r  z2test_set_feature_union_step_drop.<locals>.<lambda>%  r  rA   c                     dgS r  rG   r  s    r?   r  z2test_set_feature_union_step_drop.<locals>.<lambda>&  r  rA   r|   r{  r}  r  r  dropr  r  )r{  r  )
rk   r  rw   rx   r    r3   rN   r]   r   rW   )rw  r  rL   r  s       r?    test_set_feature_union_step_dropr  !  s   GEGE"?E"?E


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


QC5A	e}tUm4	5BAx!4!4Q!78Ax!1!1!!45(+R-E-E-GHMM]M#Ax!4!4Q!78Ax!1!1!!45h/1I1I8*1UVMM]M#Ax!4!4Q!78Ax!1!1!!45	|$b&>&>z&J
 MMUMAx!4!4Q!78Ax!1!1!!45h/1I1I8*1UV 
,tUm<	=BAx!4!4Q!78Ax!1!1!!45h/1I1I8*1UV		AggajG
1A
FC	5s|D	EBq"&&)--a0HWH=>q"**1-a'k:;	
 	  !9:
 MMmM$66!9q!DtRYY1v./ADtRYY1v./		
 	  !9: MMcM"q"&&)--a0WHI>?q"**1-a'l;<	
 	  !9:
 
	'%6*A.
B q1ubffQi11!4Q[ABq1ub..q1!XgX+>?	
 	  !9:
rA   c                      t         j                  } t        ddd      }t        d|fdg      }|j	                  |        t        g d|j                                y)	zDCheck feature_names_out for verbose_feature_names_out=True (default)r   r  r   r  r   r  )r  r  passthrough__x0passthrough__x1passthrough__x2passthrough__x3Nr   r   r   r    rN   r3   r  rL   r   r  s      r?   9test_feature_union_passthrough_get_feature_names_out_truer    sS    		A
1A
FC	s|%CD	EBFF1I	
 	  "
rA   c                      t         j                  } t        ddd      }t        d|fdgd      }|j	                  |        t        g d	|j                                y
)z;Check feature_names_out for verbose_feature_names_out=Falser   r  r   r  r   r  Fverbose_feature_names_out)pca0pca1x0x1r  r  Nr	  r
  s      r?   :test_feature_union_passthrough_get_feature_names_out_falser    s[    		A
1A
FC	
56RW
B FF1I	
 	  "
rA   c                     t        j                  d      } | j                  ddgddggddg      }t        d d	 
      }t	        dt               fd|fgd      }|j                  |       t        j                  d      }t        j                  t        |      5  |j                          ddd       y# 1 sw Y   yxY w)zFCheck get_feature_names_out and non-verbose names and colliding names.pandasr|   r   r   r<   r=   r  c                     | dg   S rT   rG   )rL   s    r?   r  zStest_feature_union_passthrough_get_feature_names_out_false_errors.<locals>.<lambda>  s
    !SE(rA   c                 .    t        j                  dg      S rT   )rw   rx   )r>   r  s     r?   r  zStest_feature_union_passthrough_get_feature_names_out_false_errors.<locals>.<lambda>  s    bjj#>OrA   )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%   rN   r   r   r   r   r  )pdrL   select_aunionr   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   B66B?c                     t        j                  d      } | j                  t        t	        d            gt	        d      D cg c]  }d| 	 c}      }t        ddgd      }|j                  |       t        j                  d	      }t        j                  t        |
      5  |j                          ddd       yc c}w # 1 sw Y   yxY w)zLCheck get_feature_names_out with non-verbose names and >= 5 colliding names.r  rM  fr  )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   r  r  rb  ranger    rN   r   r   r   r   r  )r  irL   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   C 
&CCc                  p   d} d}d}dt        d      fdt        d      fg}dt        d      fdt        d      fg}t        d	ft        d
ffD ]  \  }}dt        d      f|t        d      fg}|| f||f|||z  ffD ]x  \  }}	t        j                  t
        |	      5   |di ||ij                  dggdg       d d d         |di |dt        d      fgi}
t        |
||       t        j                  t
        |	      5  |
j                  dggdg       d d d        t        j                  t
        |	      5  |
j                  dggdg       d d d         |di |dt        d      fgi}
 |
j                  di ||i t        j                  t
        |	      5  |
j                  dggdg       d d d        t        j                  t
        |	      5  |
j                  dggdg       d d d        {  y # 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   xY w)Nz3Estimator names must not contain __: got \['a__q'\]z+Names provided are not unique: \['a', 'a'\]z=Estimator names conflict with constructor arguments: \['%s'\]a__qr   r=   r   r<   ra  r9  r   r|   rG   )
rk   r!   r    r   r   r   rN   setattrr   rW   )error_message_1error_message_2error_message_3
bad_steps1
bad_steps2r   param
bad_steps3	bad_stepsmessager  s              r?   test_step_name_validationr1    s   LODOVO47#c47^4JQ.3Q.1J '*\;M,NO
UDGnud1g&67
))501#
Iw z9)ui()--seaS9 : 2#tAw 012CC	*z9!s# : z9!!A3%!- : 2#tAw 012CCNN0eY/0z9!s# : z9!!A3%!- :93#
 P :9 :9 :9 :9 :9s<   G: H9HHH+:HHHH(+H5c                      t        dt        dt               fg      fg      } | j                  dt                      | j                  dt	               fgd       y )Nr<   r=   gMbP?)a__b__alphaa__brz  )a__stepsa__b__C)r!   r   rW   r   r   )	estimators    r?   test_set_params_nested_pipeliner8  2  sX    330@*A)B CDEFIU9C);)=#>"?KrA   c                  r   t         j                  } t         j                  }t               }	 t	        j
                  |d      }t        dd      }t               }t        dt        |      fd|fg      }t        d|fd|fg|      }|j                  | |       |j                  | |       |j                  d   j                  }t        |j                  |       |j                  |              t        |j                  |       |j                  |              t        |j!                  |       |j!                  |              t        |j#                  | |      |j#                  | |             t        |j                  d   j$                  |j                  d   j$                         t'        |d	      rJ |j                  | |       t        |j                  |       |j                  |              t        |j                  |       |j                  |              t        |j!                  |       |j!                  |              t        |j#                  | |      |j#                  | |             t        |j                  d   j$                  |j                  d   j$                         ||j                  d   j                  k(  sJ t        dd      }	t               }
t        d
|
fd|	fg|      }|j                  | |       t        |j                  |       |j                  |              t        |j                  |       |j                  |              t        |j!                  |       |j!                  |              t        |j#                  | |      |j#                  | |             t        |j                  d   j$                  |j                  d
   j$                         ||j                  d
   j                  k(  sJ 	 t)        j*                  |       y # t)        j*                  |       w xY w)NrM  locationr`  Tr   r   r   r   r_  r   transf_2)r   r   r   r   joblibMemoryr&   r   r!   r   rN   r   r   r3   r   r   r   r   r   r  shutilrmtree)rL   rM   cachedirr_  r   r   r   cached_pipetsclf_2r=  cached_pipe_2s               r?   test_pipeline_memoryrG  8  s   		AAyH8 "=d3(E&M2UCLAB6 2UCLA&Q 	1A$$X.994<<?K,?,?,BC4--a0+2K2KA2NO411!4k6S6STU6VW4::a+[->->q!-DEX&--{/F/Fx/P/W/W	
 68,,, 	14<<?K,?,?,BC4--a0+2K2KA2NO411!4k6S6STU6VW4::a+[->->q!-DEX&--{/F/Fx/P/W/W	
 [,,X6AAAAA 15= (#eU^4V
 	!Q 	4<<?M,A,A!,DE4--a0-2M2Ma2PQ""1%}'F'Fq'I	
 	4::a+]-@-@A-FGX&--%%j188	
 ]..z:EEEEEhhs   OP P6c                  @   t               } t        j                  | d      }t        t	               t               |      }|j                  |u sJ t        t	               t                     }|j                  J t        |      dk(  sJ t        j                  |        y )NrM  r:  r<  r   )
r   r>  r?  r"   r   r&   r_  r  r@  rA  )rB  r_  r   s      r?   test_make_pipeline_memoryrI  w  s{    yH]]Hb9F[]CE&AH??f$$$[]CE2H??"""x=A
MM(rA   c                   $    e Zd ZddZddZddZy)FeatureNameSaverNc                 "    t        | |d       | S )NT)reset)r5   rK   s      r?   rN   zFeatureNameSaver.fit  s    T1D1rA   c                     |S r:   rG   rK   s      r?   r]   zFeatureNameSaver.transform  r^   rA   c                     |S r:   rG   )r>   r  s     r?   r  z&FeatureNameSaver.get_feature_names_out  s    rA   r:   )rC   rD   rE   rN   r]   r  rG   rA   r?   rK  rK    s    rA   rK  c                     t        dt               fddt               fg      } t               }| j	                  |j
                  |j                         t        | dd j                  |j                        |j                         y)z5Check pipeline.get_feature_names_out with passthroughrG  passr   r   rq  Nr1  )
r!   rK  r   r   rN   r   r   r3   r  r  )r   r   s     r?   test_features_names_passthroughrS    su    &()#&()
D ;DHHTYY$Sb	''(:(:;T=O=OrA   c                  &   t        dt               fdt               fg      } t        D cg c]  }d|v  }}| j	                  t        |       t        | dd j                         g d       t        | dd j                  d      g d       yc c}w )	z5Check pipeline.get_feature_names_out with vectorizersvectr   rq  pizzaNr1  )beerburgercoke	copyrightrV  thenonsense_is_ignored)r!   r   r   r  rN   r3   r  )r   r   rM   s      r?   #test_feature_names_count_vectorizerr]    s    FO$56@R@T8UVWD-.~!A~A.HH^QSb	'')? Sb	''(=>? 	/s   Bc                     t        dt               fg      } t               }| j                  |j                  |j
                         d}t        j                  t        |      5  | j                          ddd       y# 1 sw Y   yxY w)zZCheck that error is raised when a transformer does not define
    `get_feature_names_out`.notransrq  z&does not provide get_feature_names_outr   N)
r!   rI   r   rN   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                      t        t                     } t        j                  t        d      5  | j                  dgdggddgddg       d d d        y # 1 sw Y   y xY w)Nz8Pipeline.fit does not accept the sample_weight parameterr   r   r|   r   )r"   r   r   r   r   rN   )r   s    r?   test_pipeline_param_errorrb    sV    
*,
-C	T
 	!qc
QF1a&9
 
 
s   AAc              #      K   | ]L  \  \  }}}t        ||      r8|d k(  r,t        |d      r t        |j                  d   d   t              s|||f N yw)r   ra  r1  r|   N)r  r   ra  r   ).0r  patternr+  s       r?   	<genexpr>rf    sc      <3#gh sF/!C!syy}Q'3s 	'63#s   AAr   r   zv\[Pipeline\].*\(step 1 of 2\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 2\) Processing clf.* total=.*\n$)noopNz\[Pipeline\].*\(step 1 of 3\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 3\) Processing noop.* total=.*\n\[Pipeline\].*\(step 3 of 3\) Processing clf.* total=.*\n$)rg  r   )r   N)r   Nrn   zw\[Pipeline\].*\(step 1 of 2\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 2\) Processing mult.* total=.*\n$)r   r   mult1rw  z\[FeatureUnion\].*\(step 1 of 2\) Processing mult1.* total=.*\n\[FeatureUnion\].*\(step 2 of 2\) Processing mult2.* total=.*\n$)rh  r  )r  r  z@\[FeatureUnion\].*\(step 1 of 1\) Processing mult2.* total=.*\n$)rN   r   r   zest, pattern, methodc                 F   t        | |      }g dg dg}dgdgg}| j                  d        |||       |j                         j                  rJ d       | j                  d        |||       t	        j
                  ||j                         j                        sJ y )	Nr|   r   r   )r3  rz  r  r  r   F)r`  zGot output for verbose=FalseT)r"  rW   
readouterroutr   r   )r  r+  re  capsysfuncrL   rM   s          r?   test_verbosero    s    3D	IA
qc
ANN5N!AJ  "&&F(FF&NN4N AJ88GV..044555rA   c                     ddgddgddgg} g d}t               }t               }t        ||      }t        |d      rJ |j	                  | |       |j
                  |j
                  cxk(  rdk(  sJ  J t               }t               }t        ||      }|j	                  | |       |j
                  |j
                  cxk(  rdk(  sJ  J t        |d      rJ y 	Nr|   r   r   r3  rz  r  r   r|   r   n_features_in_)r%   r   r"   r  rN   rs  )rL   rM   ssgbdtr   s        r?   test_n_features_in_pipelinerv    s     Q!Q!Q AA		B)+DT"Dt-...HHQN""3"38q88888 
	B)+DT"DFF1aL""3"38q88888t-....rA   c                  j   ddgddgddgg} g d}t               }t        |      }t        |d      rJ |j                  | |       |j                  |j                  cxk(  rdk(  sJ  J t               }t        |      }|j                  | |       |j                  |j                  cxk(  rdk(  sJ  J y rq  )r%   r#   r  rN   rs  )rL   rM   rt  rF  s       r?    test_n_features_in_feature_unionrx  (  s     Q!Q!Q AA		B	BBr+,,,FF1aL 1 16Q66666 
	B	BBFF1aL 1 16Q66666rA   c                      G d dt         t              } t        j                  t        j                  }}t        d |        fd |        fg      }t        j                  t              5  |j                  ||       d d d        t        j                  t              5  |j                  ||       d d d        |j                  ||d       |j                  ||d       y # 1 sw Y   fxY w# 1 sw Y   >xY w)Nc                       e Zd ZddZddZy)7test_feature_union_fit_params.<locals>.DummyTransformerNc                      |ddik7  rt         | S )Nr<   r   r   rh   s       r?   rN   z;test_feature_union_fit_params.<locals>.DummyTransformer.fit?  s    c1X%  KrA   c                     |S r:   rG   rK   s      r?   r]   zAtest_feature_union_fit_params.<locals>.DummyTransformer.transformD      HrA   r:   rC   rD   rE   rN   r]   rG   rA   r?   DummyTransformerr{  >  s    	
	rA   r  dummy0dummy1r   rU   )r   r   r   r   r   r    r   r   r   rN   r   r  rL   rM   r   s       r?   test_feature_union_fit_paramsr  <  s    +]  99dkkqAx!1!34xAQAS6TUVA	z	"	a 
# 
z	"	1 
# EE!Q!EOOAqAO 
#	" 
#	"s   )C!C-!C*-C6c                  D    G d dt               } t        j                  t        j                  }}t	        d |        fd |        fg      }t        j                  t              5  |j                  ||d       d d d        |j                  ||d       y # 1 sw Y   xY w)Nc                       e Zd ZddZy)Mtest_feature_union_fit_params_without_fit_transform.<locals>.DummyTransformerNc                      |ddik7  rt         | S )Nmetadatar|   r}  rh   s       r?   rN   zQtest_feature_union_fit_params_without_fit_transform.<locals>.DummyTransformer.fitX  s    j!_,  KrA   r:   ri   rG   rA   r?   r  r  W  s    	rA   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  s    =  99dkkqA 0 23 0 23	
	A 
z	"	1q) 
# OOAq1O% 
#	"s   $BBc                     t         j                  j                         t         j                  j                         }} t        j
                  j                  ddg| j                  ddg      j                  t              }t        j                  | |<   t        t               t                     }|j                  | |      j                  | |      dkD  sJ y )Nr|   r   r   g?)pg?)r   r   r6  r   rw   randomchoicer   astypeboolnanr"   r   r   rN   r   )rL   rM   maskr   s       r?   %test_pipeline_missing_values_leniencyr  k  s     99>>T[[--/qA99QFAGGSz:AA$GDffAdG*<*>?D88Aq>1%+++rA   c                      ddgddgddgg} g d}dt               fg}d	di}d
}t        ||      }t        j                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY w)Nr|   r   r   r3  rz  r  rr  r   transformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.rN  r   )r`   r    r   r   r   rN   )rL   rM   r9  weightsexpected_msgr  s         r?   3test_feature_union_warns_unknown_transformer_weightr  u  s{     Q!Q!Q AA!68,-a G	5  )wGE	z	6		!Q 
7	6	6s   A''A0c                 x    t        | t                     }|j                         j                  j                  rJ y r:   )r"   r&   r  
input_tagspairwise)r   r   s     r?   test_pipeline_get_tags_noner    s3     ce,D$$&11:::::rA   	Predictorc                 \   t         j                  j                  d      }|j                  dd      t        j                  dgdz  dgdz  z         }}t        dt               fd |        fg      }|j                  ||       |j                  |      }t        |      rAt        |d       |j                  ||      t        j                  t        ||            k(  sJ y t        ||j!                                |j                  ||      t        j                  t#        ||            k(  sJ y )	Nr      r   rz  r|      r  	predictor)rw   r  RandomStaterandnr   r!   r0   rN   r   r	   r3   r   r   approxr   r1   r   r   )r  rngrL   rM   modely_preds         r?   1test_search_cv_using_minimal_compatible_estimatorr    s     ))


"C99RRXXqcAgb&89qA
+-	.ik0JKE 
IIaO]]1FU61%{{1a FMM.F2K$LLLL){{1a FMM(1f2E$FFFFrA   c                  ,    G d dt               } t        d |        fg      }t        j                  t              5  t        |       d d d        |j                  t        j                  t        j                         t        |       y # 1 sw Y   CxY w)Nc                       e Zd Zd Zy)0test_pipeline_check_if_fitted.<locals>.Estimatorc                     d| _         | S rp   r   rK   s      r?   rN   z4test_pipeline_check_if_fitted.<locals>.Estimator.fit      DLKrA   Nri   rG   rA   r?   	Estimatorr    s    	rA   r  r   )
r   r!   r   r   r   r6   rN   r   r   r   )r  r   s     r?   test_pipeline_check_if_fittedr    sd    M 
 %-./H	~	&! 
'LLDKK(H 
'	&s   B

Bc                     ddgddgddgg} g d}t        dt               fg      }t        j                  t              5  t        |       d	d	d	       |j                  | |       t        |       t        d
g      }t        |       t        dt               fd
g      }t        j                  t              5  t        |       d	d	d	       |j                  | |       t        |       y	# 1 sw Y   xY w# 1 sw Y   3xY w)z1Check __sklearn_is_fitted__ is defined correctly.r|   r   r   r3  rz  r  rr  r   NrQ  )r    r0   r   r   r   r6   rN   )rL   rM   r  s      r?   "test_feature_union_check_if_fittedr    s     Q!Q!Q AA5"4"6789E	~	& 
' 
IIaOE 123EE5"4"679PQRE	~	& 
' 
IIaOE 
'	& 
'	&s   C)7C5)C25C>c                  >   t         j                  t         j                  }}  G d dt              }t	         |       t                     }|j                  | |       t         j                  }|j                  |      }t        ||D cg c]  }d| 	 c}       yc c}w )zRCheck that pipeline passes names through.

    Non-regresion test for #21349.
    c                         e Zd Zd fd	Z xZS )Ytest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalarc                     t         |   |      }t        j                  |D cg c]  }d| 	 c}t              S c c}w )Nr  
my_prefix_)dtype)superr  rw   rx   object)r>   r  rG  r  	__class__s       r?   r  zotest_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   >r:   )rC   rD   rE   r  __classcell__)r  s   @r?   AddPrefixStandardScalarr    s    	U 	UrA   r  r  N)	r   r   r   r%   r"   rN   r  r  r3   )rL   rM   r  r   input_namesr  r  s          r?   8test_pipeline_get_feature_names_out_passes_names_throughr    s    
 99dkkqAU. U
 02N4DEDHHQN$$K22;?(;*W;4Zv+>;*WX*Ws   B
c                  *   t        j                  d       t        dd      \  } }t        t	               t                     }|j                  d       |j                  | |       |dd j                         }|d   j                  }t        ||       y)z.Test pipeline's set_output with feature names.r  Tas_frame
return_X_yr]   Nr1  )r   r  r   r"   r%   r   
set_outputrN   r  feature_names_in_r3   )rL   rM   r   r  log_reg_feature_namess        r?   $test_pipeline_set_output_integrationr    s    
!dt4DAq)+=+?@DOOhO'HHQNSb	779 H66(*?@rA   c                     t        j                  d      } t        dd      \  }}t        |d      \  }}t	        dt               fdt               fg      }|j                  d       |j                  |       |j                  |      }t        || j                        sJ t        |j                  |j                                t        |j                  |j                         y	)
z'Test feature union with set_output API.r  Tr  r   r  scalarr   r  N)r   r  r   r   r    r%   r   r  rN   r]   r   r  r3   r  r  index)r  rL   r  X_trainX_testr  rR  s          r?   test_feature_union_set_outputr    s    			X	&Bdt4DAq&qq9OGV8^%56GHE	x(	IIgoof%Ggr||,,,w(C(C(EFw}}fll3rA   c                      t               } t               }t        d| fd|fddg      }|d   | u sJ |d   |u sJ |d   dk(  sJ |d   dk(  sJ y	)
z8Check FeatureUnion.__getitem__ returns expected results.r  r   rQ  )drop_mer  rR  r   r  r  N)r%   r   r    )r  r   r  s      r?   test_feature_union_getitemr    s    F
%CvCL#		
E ?f$$$<3=M)))v%%%rA   keyr   c                     t        dt               fdt               fg      }d}t        j                  t
        |      5  ||     ddd       y# 1 sw Y   yxY w)z5Raise error when __getitem__ gets a non-string input.r  r   zOnly string keys are supportedr   N)r    r%   r   r   r   rm  )r  r  r   s      r?    test_feature_union_getitem_errorr    sG     8^%56GHE
*C	xs	+c
 
,	+	+s   AAc                  H   t        j                  d       t        dd      \  } }t               }|j	                  |        t        d|fg      }t        |d      sJ t        | j                  |j                         t        |j                  |j                         t        dg      }|j	                  |        t        |d      sJ t        | j                  |j                         | j                         }t        dg      }|j	                  |       t        |d      rJ y)zxEnsure feature union has `.feature_names_in_` attribute if `X` has a
    `columns` attribute.

    Test for #24754.
    r  Tr  scaler  rQ  N)r   r  r   r%   rN   r    r  r3   r  r  to_numpy)rL   r  r  r  X_arrays        r?   $test_feature_union_feature_names_in_r     s     !dt4DAq F
JJqM7F+,-E5-...qyy%"9"9:v//1H1HI 123E	IIaL5-...qyy%"9"9: jjlG123E	IIgu12222rA   c                     t         j                  j                  d      j                  d      } t	        dt        d      fg      }|j                  |       } t        j                  t        d      5  |j                          d d d        t        j                  t        d	      5  |j                  | | 
       d d d        t        j                  d      5  t        j                  d       |j                  |        d d d        t        j                  t        d      5  |j                  |        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   y xY w)Nr   )rM  rz  )sizer   r   )r   z$Missing required positional argumentr   z$Cannot use both X and Xt. Use X only)rL   XtT)recorderrorzXt was renamed X in version 1.5)r  )rw   r  r  normalr!   r   r   r   r   r   rc   warningscatch_warningssimplefilterwarnsFutureWarningr   s     r?   .test_pipeline_inverse_transform_Xt_deprecationr  A  s   
		a ''W'5AeSa0123D1A	y(N	O  
P 
y(N	Oq) 
P 
	 	 	-g&q! 
. 
m+L	M!$ 
N	M 
P	O 
P	O 
.	- 
N	Ms0   4E (E'E$E$ E	EE!$E-T)enable_metadata_routingr+  rN   r   c                    d fd}d }t        j                  ddgddgg      }t        j                  ddg      }t        j                  ddgg      }t        j                  d	d
gg      }t        j                  ddgg      } |       \  }}	}
}}|j                  |||||        ||	ddg||        ||
ddg        ||ddg|dz   |        ||| j                  d      |dz   |       y)zLTest that with transform_input, data is correctly transformed for each step.c                 ^    t        |       j                  ||      j                  ||      S )z$Get a transformer with requests set.registryr   r  )r(   set_fit_requestset_transform_request)r  r   r  s      r?   get_transformerz6test_transform_input_pipeline.<locals>.get_transformer]  s/     !(3_=8_L"""R	
rA   c            
          t               t               t               t               f\  } }}}t         | dd       |dd       |dd       |dd      dg      }|| |||fS )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   r  s        r?   get_pipelinez3test_transform_input_pipeline.<locals>.get_pipelinee  s     KKKK	:
6
J
J JdTJJeeLJdTJJoPTU,-
 ZZCCrA   c                 F    | sJ | D ]  }|D ]  }t        |f||d|   y)zACheck that the right metadata was recorded for the given methods.)r+  parentN)r*   )r  methodsr  r7  r+  s        r?   check_metadataz5test_transform_input_pipeline.<locals>.check_metadataz  s=    x!I!'!! 	 " "rA   r|   r   r   r3  r   r  (   d      )r   r  r  rN   r]   r  r  N)rw   r   rN   split)r+  r  r  rL   rM   r   r  r  r   r  r  r  r  r  s                @r?   test_transform_input_pipeliner  X  s   

D*
 	1a&1a&!"A
!QAHHq!fX&MHHr2hZ(Mxx#s%H;G>8D*j*jHH		##   UK(PX :{34	#a'	 S#a'	rA   c                      G d dt         t              }  G d dt        t              }t        j                  ddgg      }t        j                  ddg      }t        j                  ddgg      }t        j                  ddg      }t        d |        fd	 |       j                  d
d
      fgdg      }|j                  ||||       y)z;Test that the right transformed values are passed to `fit`.c                       e Zd Zd Zd Zy)>test_transform_input_explicit_value_check.<locals>.Transformerc                     d| _         | S rp   r  rK   s      r?   rN   zBtest_transform_input_explicit_value_check.<locals>.Transformer.fit  r  rA   c                     |dz   S rZ  rG   r\   s     r?   r]   zHtest_transform_input_explicit_value_check.<locals>.Transformer.transform      q5LrA   Nr  rG   rA   r?   Transformerr        		rA   r	  c                       e Zd ZddZy)<test_transform_input_explicit_value_check.<locals>.EstimatorNc                    t        |t        j                  ddgg             t        |t        j                  ddg             t        |t        j                  ddgg             t        |t        j                  ddg             | S )Nr|   r   r   r   )r3   rw   r   r>   rL   rM   X_valy_vals        r?   rN   z@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KrA   rB   ri   rG   rA   r?   r  r    s    	rA   r  r   r|   r   r  r7  Tr  r  r  r  N)r   r   r   rw   r   r!   r  rN   )r	  r  rL   rM   r  r  r   s          r?   )test_transform_input_explicit_value_checkr    s    & O]  	1a&A
!QAHHq!fXEHHaVEKM*)+55D5MN	
 !	D 	HHQeH,rA   c                     t        j                  ddgddgg      } t        j                  ddg      }d}t        j                  t        |      5  t        t               dg	      j                  | |       d
d
d
       y
# 1 sw Y   y
xY w)z<Make sure the right error is raised if slep6 is not enabled.r|   r   r   r3  r   z;The `transform_input` parameter can only be set if metadatar   blahr  N)rw   r   r   r   r   r"   r   rN   )rL   rM   r   s      r?   test_transform_input_no_slep6r    si    
1a&1a&!"A
!QA
GC	z	-kmfX>BB1aH 
.	-	-s   'B  B	c                      G d dt         t              }  G d dt        t              }t        j                  ddgg      }t        j                  ddg      }t        j                  ddgg      }t        j                  ddg      }t        j                  dd	gg      }t        j                  ddg      }t        d
 |       fd |        j                  dd      fgdg      }|j                  ||||f||f       y)zHTest that if metadata is a tuple of arrays, both arrays are transformed.c                       e Zd ZddZy)-test_transform_tuple_input.<locals>.EstimatorNc                    t        |t              sJ t        |t              sJ t        |d   t        j                  ddgg             t        |d   t        j                  ddg             t        |d   t        j                  ddgg             t        |d   t        j                  ddg             d| _        | S )Nr   r   r   r|         T)r   tupler3   rw   r   r   r  s        r?   rN   z1test_transform_tuple_input.<locals>.Estimator.fit  s    eU+++eU+++uQxAq6();<uQx1a&)9:uQxB8*)=>uQx1a&)9:DLKrA   rB   ri   rG   rA   r?   r  r    s    		rA   r  c                       e Zd Zd Zd Zy)/test_transform_tuple_input.<locals>.Transformerc                     d| _         | S rp   r  rK   s      r?   rN   z3test_transform_tuple_input.<locals>.Transformer.fit  r  rA   c                     |dz   S rZ  rG   r\   s     r?   r]   z9test_transform_tuple_input.<locals>.Transformer.transform  r  rA   Nr  rG   rA   r?   r	  r    r
  rA   r	  r|   r   r   rM  r  r  r7  Tr  r  r  N)r   r   r   rw   r   r!   r  rN   )	r  r	  rL   rM   X_val0y_val0X_val1y_val1r   s	            r?   test_transform_tuple_inputr%    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BrA   )r   r   r   r   r   r   r]   rc   c                      G d dt               }t        d |       fg      }t        j                  t        d      5   t        ||       dgg       d d d        y # 1 sw Y   y xY w)Nc                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy):test_pipeline_warns_not_fitted.<locals>.StatelessEstimatorzStateless 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                     | S r:   rG   rK   s      r?   rN   z>test_pipeline_warns_not_fitted.<locals>.StatelessEstimator.fit  s    KrA   c                     |S r:   rG   r\   s     r?   r]   zDtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.transform  r  rA   c                 >    t        j                  t        |            S r:   rw   onesr  r\   s     r?   r   zBtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict      773q6?"rA   c                 >    t        j                  t        |            S r:   r,  r\   s     r?   r   zHtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict_proba  r.  rA   c                 >    t        j                  t        |            S r:   rw   zerosr  r\   s     r?   r   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict_log_proba!  s    88CF##rA   c                 >    t        j                  t        |            S r:   r,  r\   s     r?   r   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.decision_function$  r.  rA   c                      yrZ  rG   rK   s      r?   r   z@test_pipeline_warns_not_fitted.<locals>.StatelessEstimator.score'  s    rA   c                 >    t        j                  t        |            S r:   r,  r\   s     r?   r   zHtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.score_samples*  r.  rA   c                     |S r:   rG   r\   s     r?   rc   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.inverse_transform-  r  rA   N)rC   rD   rE   rF   rN   r]   r   r   r   r   r   r   rc   rG   rA   r?   StatelessEstimatorr(    s4    				#	#	$	#		#	rA   r7  r7  z)This Pipeline instance is not fitted yet.r   r|   )r   r!   r   r  r  r"  )r+  r7  r   s      r?   test_pipeline_warns_not_fittedr8    sX    !] !F k#5#789:D	m+V	Wfse$ 
X	W	Ws   AA%c                   b    e Zd Zd ZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZy)SimpleEstimatorc                      yrp   rG   rq   s    r?   rr   z%SimpleEstimator.__sklearn_is_fitted__<  rs   rA   Nc                 *    |J |       |J |       | S r:   rG   r>   rL   rM   r   props        r?   rN   zSimpleEstimator.fit?  s)    (7-7(%%rA   c                     |J |J |dz   S rZ  rG   r=  s        r?   r   zSimpleEstimator.fit_transformD  #    (((1urA   c                 N    |J |J t        j                  t        |            S r:   r,  r=  s        r?   r   zSimpleEstimator.fit_predictI  ,    (((wws1vrA   c                 N    |J |J t        j                  t        |            S r:   r,  r>   rL   r   r>  s       r?   r   zSimpleEstimator.predictN  rB  rA   c                 N    |J |J t        j                  t        |            S r:   r,  rD  s       r?   r   zSimpleEstimator.predict_probaS  rB  rA   c                 N    |J |J t        j                  t        |            S r:   r1  rD  s       r?   r   z!SimpleEstimator.predict_log_probaX  s-    (((xxArA   c                 N    |J |J t        j                  t        |            S r:   r,  rD  s       r?   r   z!SimpleEstimator.decision_function]  rB  rA   c                     |J |J yrZ  rG   r=  s        r?   r   zSimpleEstimator.scoreb  s    (((rA   c                     |J |J |dz   S rZ  rG   rD  s       r?   r]   zSimpleEstimator.transformg  r@  rA   c                     |J |J |dz
  S rZ  rG   rD  s       r?   rc   z!SimpleEstimator.inverse_transforml  r@  rA   rB   )rC   rD   rE   rr   rN   r   r   r   r   r   r   r   r]   rc   rG   rA   r?   r:  r:  9  s9    




 



rA   r:  r  partial_fitc                 >   d }t        j                  dgg      t        j                  dg      }}dgdd}}}t               } ||| dd      } ||ddd      }t               j	                  dd      j                  dd      j                  dd      }t        d	|fd
|fg      }	d| vr|	j                  ||||      }		  t        |	|       |||||       t        |dd||       t        |dd||       y# t        $ r  t        |	|       ||||       Y Bw xY w)z5Test that metadata is routed correctly for pipelines.c                 j    |t         v r
t         |   }n|g}|D ]  } t        | d| d      di |  | S )zSet requests for a given method.

        If the given method is a composite method, set the same requests for
        all the methods that compose it.
        set__requestrG   )r,   r"  )r  r+  kwargr  s       r?   set_requestz7test_metadata_routing_for_pipeline.<locals>.set_requestx  sJ     &&'/GhGF1GC4xx01:E: 
rA   r|   r<   r=   Tr   r>  rN   r  trsr7  )r   r>  r  )objr+  r  r   r  r]   N)rw   r   r:  r(   r  r  set_inverse_transform_requestr!   rN   r"  r   r*   )
r+  rQ  rL   rM   r   r>  r  r  rS  r   s
             r?   "test_metadata_routing_for_pipelinerV  s  sP   
 88aSE?BHHaSMqA%&Cc4M 
C
c6D
AC
c54
@C	td	;		TD		A	&	&TD	&	I	  %S'9:;HF<<1M<M
!&!qD8	
 # #  
!&!]	

s   C: :DDc                 R   dggdg}}dgd}}t               }t        d|fg      }d|  }t        j                  t        t        j                  |            5  	  t        ||       ||||       ddd       y# t        $ r  t        ||       |||       Y )w xY w# 1 sw Y   yxY w)zBTest that metadata is not routed for pipelines when not requested.r|   r<   r7  zn[sample_weight, prop] are passed but are not explicitly set as requested or not requested for SimpleEstimator.r   rR  N)	r:  r!   r   r   r   r   r   r"  r   )r+  rL   rM   r   r>  r  r   error_messages           r?   (test_metadata_routing_error_for_pipelinerY    s     C51#qA#s4M

C+s+,-H	117	:  
z=)A	B	Q%GHf%a-dS 
C	B  	Q &GHf%a}4P	Q	 
C	Bs*   BA99BBBBB&)r   r]   rc   c                     t        dt               fg      }t        j                  t        d      5   t        ||       dggdgd       ddd       y# 1 sw Y   yxY w)zTest that the right error message is raised when metadata is passed while
    not supported when `enable_metadata_routing=False`.r7  z1is only supported if enable_metadata_routing=Truer   r|   r<   rR  N)r!   r:  r   r   r   r"  )r+  r   s     r?   *test_routing_passed_metadata_not_supportedr[    sX     k?#4567D	M
 	fseA3SA
 
 
s   AAc                      t        dt               fdt               fg      } | j                  dggdg       | j	                  dgg       y)zFTest that pipeline works with estimators that have a `__len__` method.rS  r7  r|   N)r!   r   r   rN   r   r'  s    r?   %test_pipeline_with_estimator_with_lenr]    sN     
%'	(;8N8P*QRD 	HHqcUQCLL1#rA   	last_stepc                     t        dt               fd| fg      }|j                  dggdg      j                  dgdgdgg      dgdgdggk(  sJ y)zTest that the pipeline works when there is not last step.

    It should just ignore and pass through the data on transform.
    rS  r7  r|   r   r   N)r!   r$   rN   r]   )r^  r   s     r?   test_pipeline_with_no_last_stepr`    sc     e023k95MNOD88aSEA3))A3aS/:sQC!oMMMrA   c                     t        j                  ddgddgddgg      } g d}g dd}}t        d	t               fg      }d
t        j                   d}t        j                  t        t        j                  |            5  |j                  | |||       ddd       t        d	t               j                  dd      fg      }d
t        j                   d}t        j                  t        t        j                  |            5  |j                  | |||      j                  | ||       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zCTest that the right error is raised when metadata is not requested.r   r|   r   r3  r  rj  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)rw   r   r    r(   rC   r   r   r   r   r   rN   r  r]   )rL   rM   r   r  feature_unionrX  s         r?   )test_feature_union_metadata_routing_errorre    sX    	1a&1a&1a&)*AA'8M !#46J6L"M!NOM	!!5!>!> ?t	E 
 
/ryy7O	P!QmhO 
Q ! "$&66"& 7 	
	M	  4 = =>j	J 
 
/ryy7O	Pq 	 	

)A]X)
F 
Q	P) 
Q	P( 
Q	Ps   D9(E9EEc                  P    t        dt               fg      } | j                          y)zaTest that get_metadata_routing() works regardless of the Child's
    consumption of any metadata.rc  N)r    r(   get_metadata_routing)rd  s    r?   3test_feature_union_get_metadata_routing_without_fitrh  	  s'     !#46J6L"M!NOM&&(rA   r  c           	      d   t        j                  ddgddgddgg      }g d}g dd}}t        d	 | t               
      j	                  dd      j                  dd      fd | t               
      j	                  dd      j                  dd      fg      }||d} |j                  ||fi |  |j                  ||fi |   |j                  ||fi |j                  |fi | |j                  D ]4  } | d   j                  }t        |      sJ |D ]  }t        d|ddd|  6 y)z8Test that metadata is routed correctly for FeatureUnion.r   r|   r   r3  r  rj  rb  r<   
sub_trans1r  Tr  
sub_trans2rN   )rT  r+  r  NrG   )rw   r   r    r)   r  r  rN   r   r]   r9  r  r  r*   )	r  rL   rM   r   r  rd  kwargsr  	sub_transs	            r?   #test_feature_union_metadata_routingrn  $	  s_    	1a&1a&1a&)*AA'8M  Y[1 tdC&&TD&I	 Y[1 tdC&&TD&I		
M"  -(CFMa%f%M1///Ma%f%//<V<$55q>**8}}!I#  	 "	 6rA   )rF   	itertoolsr   r@  r   r  tempfiler   r>  numpyrw   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   rI   rZ   r`   re   rk   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r#  r(  markparametrizer,  r?  rC  rI  rP  rW  rY  ri  rn  rt  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r1  r8  rG  rI  rK  rS  r]  r`  rb  productparameter_grid_test_verbosero  rv  rx  r  r  r  r  r  r  r  r  r  r  r  r  slicer  r  r  r  r  r  r%  r8  r:  sortedsetrV  rY  r[  r]  r`  re  rh  rn  rG   rA   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"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3B%. -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& .&rA   