
    Ug                       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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l,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@mAZA ddlBmCZCmDZD ddlEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZM ddlNmOZO  e            ZPdZQ G d d          ZR G d deR          ZS G d d eS          ZT G d! d"eT          ZU G d# d$eU          ZV G d% d&e          ZW G d' d(e          ZX G d) d*eU          ZY G d+ d,e          ZZd- Z[d. Z\d/ Z]d0 Z^d1 Z_d2 Z`d3 Zad4 Zbd5 Zcd6 Zdd7 Zed8 Zfd9 Zgd: Zheji        j                    d;g d<          d=             Zkeji        j                    d>eM          d?             Zld@ ZmdA ZndB ZodC ZpdD Zqeji        j                    dEg dF          dG             ZrdH ZsdI ZtdJ Zueji        j                    dKddKg          dL             Zveji        j                    dKddKg          dM             ZwdN ZxdO ZydP ZzdQ Z{dR Z|dS Z}dT Z~dU ZdV ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Z G d_ d`e          Zda Zdb Zdc Zdd Zde  ej         e5df eU            fdg eX            fg          dhf e5df eU            fdidg eX            fg          djf e5df eU            fdkdg eX            fg          djf e5df eU            fdlg          dhf e5dmdn eW            fg          dof e5dpdn eW            fg          dof e4dq eW            fdr eW            fg          dsf e4dtdr eW            fdug          dvfgg dw          D             Zeji        j                    dxe          dy             Zdz Zd{ Zd| Zd} Zd~ Zd Zeji        j                    dKddKg          d             Zeji        j                    deGeFg          d             Zd Zd Zd Zd Zd Zd Zeji        j                    dd edd          g          d             Zd Zd Z G d de          Zeji                            d          eji        j                    d e eeD          ddhz
                      d                         Zeji                            d          eji        j                    d e eeD          ddhz
                      d                         Zeji        j                    dg d          d             Zeji                            d          d             Zeji                            d          eji        j                    dddKg          d                         Zeji                            d          d             Zeji                            d          d             Zeji                            d          eji        j                    de?e>g          d                         ZdS )z
Test the pipeline module.
    N)mkdtemp)BaseEstimatorTransformerMixincloneis_classifier)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)COMPOSITE_METHODSMETHODS)MinimalClassifierMinimalRegressorMinimalTransformerassert_allcloseassert_array_almost_equalassert_array_equal)CSR_CONTAINERS)check_is_fitted)zthe pizza pizza beer copyrightzthe pizza burger beer copyrightz!the the pizza beer beer copyrightzthe burger beer beer copyrightzthe coke burger coke copyrightzthe coke burger burgerc                       e Zd ZdZddZdS )NoFitz*Small class to test parameter dispatching.Nc                 "    || _         || _        d S Nab)selfr7   r8   s      Z/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/tests/test_pipeline.py__init__zNoFit.__init__F   s        NN)__name__
__module____qualname____doc__r;    r<   r:   r3   r3   C   s.        44     r<   r3   c                   "    e Zd Zd ZddZd ZdS )NoTransc                     | S r5   rB   r9   Xys      r:   fitzNoTrans.fitL       r<   Fc                      | j         | j        dS )Nr6   r6   )r9   deeps     r:   
get_paramszNoTrans.get_paramsO   s    V$&)))r<   c                      |d         | _         | S Nr7   r7   )r9   paramss     r:   
set_paramszNoTrans.set_paramsR   s    r<   NF)r>   r?   r@   rI   rM   rR   rB   r<   r:   rD   rD   K   sF          * * * *    r<   rD   c                       e Zd Zd ZdS )NoInvTransfc                     |S r5   rB   r9   rG   s     r:   	transformzNoInvTransf.transformX       r<   N)r>   r?   r@   rX   rB   r<   r:   rU   rU   W   s#            r<   rU   c                       e Zd Zd Zd ZdS )Transfc                     |S r5   rB   rW   s     r:   rX   zTransf.transform]   rY   r<   c                     |S r5   rB   rW   s     r:   inverse_transformzTransf.inverse_transform`   rY   r<   N)r>   r?   r@   rX   r^   rB   r<   r:   r[   r[   \   s2              r<   r[   c                       e Zd Zd ZdS )TransfFitParamsc                     || _         | S r5   )
fit_paramsr9   rG   rH   rb   s       r:   rI   zTransfFitParams.fite   s    $r<   Nr>   r?   r@   rI   rB   r<   r:   r`   r`   d   s#            r<   r`   c                   B    e Zd Zd	dZd Zd Zd Zd ZexZxZ	Z
d
dZdS )Mult   c                     || _         d S r5   mult)r9   rj   s     r:   r;   zMult.__init__k   s    			r<   c                     | S r5   rB   rF   s      r:   rI   zMult.fitn   rJ   r<   c                 :    t          j        |          | j        z  S r5   npasarrayrj   rW   s     r:   rX   zMult.transformq       z!}}ty((r<   c                 :    t          j        |          | j        z  S r5   rm   rW   s     r:   r^   zMult.inverse_transformt   rp   r<   c                 b    t          j        |          | j        z                      d          S )Nrg   axis)rn   ro   rj   sumrW   s     r:   predictzMult.predictw   s(    
1	)..A.666r<   Nc                 *    t          j        |          S r5   rn   ru   rF   s      r:   scorez
Mult.score|   s    vayyr<   )rg   r5   )r>   r?   r@   r;   rI   rX   r^   rv   predict_probapredict_log_probadecision_functionry   rB   r<   r:   rf   rf   j   s             ) ) )) ) )7 7 7 =DCMC%(9     r<   rf   c                   6    e Zd ZdZd Zd	dZd Zd	dZd
dZdS )	FitParamTzMock classifierc                     d| _         d S )NF
successful)r9   s    r:   r;   zFitParamT.__init__   s    r<   Fc                     || _         d S r5   r   r9   rG   rH   should_succeeds       r:   rI   zFitParamT.fit   s    (r<   c                     | j         S r5   r   rW   s     r:   rv   zFitParamT.predict   s
    r<   c                 \    |                      |||           |                     |          S )N)r   )rI   rv   r   s       r:   fit_predictzFitParamT.fit_predict   s*    An555||Ar<   Nc                 8    |||z  }t          j        |          S r5   rx   )r9   rG   rH   sample_weights       r:   ry   zFitParamT.score   s     $M!Avayyr<   rS   r=   )	r>   r?   r@   rA   r;   rI   rv   r   ry   rB   r<   r:   r~   r~      st             ) ) ) )          r<   r~   c                       e Zd ZdZd ZdS )DummyTransfz(Transformer which store the column meansc                 l    t          j        |d          | _        t          j                    | _        | S )Nr   rs   )rn   meanmeans_time
timestamp_rF   s      r:   rI   zDummyTransf.fit   s,    gaa((( )++r<   N)r>   r?   r@   rA   rI   rB   r<   r:   r   r      s)        22    r<   r   c                   0    e Zd ZdZd ZddZddZddZdS )	DummyEstimatorParamsz,Mock classifier that takes params on predictc                     | S r5   rB   rF   s      r:   rI   zDummyEstimatorParams.fit   rJ   r<   Fc                     || _         | S r5   got_attributer9   rG   r   s      r:   rv   zDummyEstimatorParams.predict       *r<   c                     || _         | S r5   r   r   s      r:   rz   z"DummyEstimatorParams.predict_proba   r   r<   c                     || _         | S r5   r   r   s      r:   r{   z&DummyEstimatorParams.predict_log_proba   r   r<   NrS   )r>   r?   r@   rA   rI   rv   rz   r{   rB   r<   r:   r   r      se        66             r<   r   c                     t          dg          } t          j        t                    5  |                     dggdg           d d d            n# 1 swxY w Y   d}t          dt                      fg          } t          j        t          |          5  |                     dggdg           d d d            n# 1 swxY w Y   t                      }t          d|fg          }|                    d          t          dd d |d	|                    d
          k    s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  |                     dggdg           d d d            n# 1 swxY w Y   |	                    d           |j        dk    sJ t          |           t%          j        d          }t          j        t(          |          5  |	                    d           d d d            n# 1 swxY w Y   t+          |          }|j        d         |j        d         usJ |                    d          }|                    d          }|                    d
          D ]}|                    |           |                    d
          D ]}|                    |           |                    d           |                    d           |                    d           |                    d           ||k    sJ d S )N)rg   rg   rg   zRLast step of Pipeline should implement fit or be the string 'passthrough'.*NoFit.*clfmatchsvcTrL   )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__CrB   )r   pytestraises	TypeErrorrI   r3   rD   rM   dictrR   r7   r8   reprr#   r   r   named_stepsCreescape
ValueErrorr   pop)	pipelinemsgr   pipefilter1pipe2rQ   params2xs	            r:    test_pipeline_invalid_parametersr      s    !!H	y	!	! ! !qcUQC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	 
 %)*++H	y	,	,	, ! !qcUQC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ))CeS\N##D???%% *Dc* *-1__%_-H-H* *    
 	OO3O5C<<<<5===JJJ %%C)$$Ggw'%677D G$////E"c)))) KC#wyy)E3<899H	y	,	,	, ! !qcUQC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 	OO3O5C<<<<JJJ )	 C 
z	-	-	- & &%%%& & & & & & & & & & & & & & & $KKEE"%*;E*BBBBB __$_''FD))G__%_((  

15))  A JJu
JJwKKKKWsG   AAAB<<C C 7HH!$H!	J,,J03J0c                  j   t          j        ddgg          } t          dt                      fdt	                      ff          }|                    | d            |                    |            |                    d           |                    | d            |                    |            d S )Nrg      transfr   rH   passthrough)r   )rn   arrayr   r[   r~   rI   ry   rR   rG   r   s     r:   test_pipeline_init_tupler     s    
1a&Ah)E9;;+?@AADHHQ$HJJqMMMOO=O)))HHQ$HJJqMMMMMr<   c                  ~   t           j        } t           j        }t                      }t	          t
          d          }t          d|fd|fg          }|                    | |           |                    |            |	                    |            |
                    |            |                    | |           d S )Nr   kr   logistic)irisdatatargetr   r   r   r   rI   rv   rz   r{   ry   )rG   rH   r   r   r   s        r:   test_pipeline_methods_anovar     s    	AA


C)q)))Ggw'*c):;<<DHHQNNNLLOOOq1JJq!r<   c                     t          dt                      fdt                      fg          } |                     d d d           |                     d           sJ | j        d         j        J | j        d         j        J t          j	        d          }t          j        t          |          5  |                     d d d           d d d            d S # 1 swxY w Y   d S )Nr   r   T)rG   rH   clf__should_succeedz.fit() got an unexpected keyword argument 'bad'r   )clf__bad)r   r[   r~   rI   rv   r   r7   r8   r   r   r   r   r   )r   r   s     r:   test_pipeline_fit_paramsr   #  s'   h)E9;;+?@AADHHttH666<<H%'///H%'/// )D
E
EC	y	,	,	, , ,td+++, , , , , , , , , , , , , , , , , ,s   4CC!Cc                     t          j        ddgg          } t          dt                      fdt	                      fg          }|                    | d            |                    |           dk    sJ |                    | d           dk    sJ |                    | d d           dk    sJ |                    | t          j        ddg                    d	k    sJ d S )
Nrg   r   r   r   r      )rH   r   r      )rn   r   r   r[   r~   rI   ry   r   s     r:   %test_pipeline_sample_weight_supportedr   3  s    
1a&Ah)E9;;+?@AADHHQ$H::a==A::a4:  A%%%%::a4t:449999::arxA'7'7:88A======r<   c                     t          j        ddgg          } t          dt                      fdt	                      fg          }|                    | d            |                    |           dk    sJ |                    | d           dk    sJ t          j        d          }t          j
        t          |	          5  |                    | t          j        ddg                     d d d            d S # 1 swxY w Y   d S )
Nrg   r   r   r   r   r   r   z:score() got an unexpected keyword argument 'sample_weight'r   )rn   r   r   r[   rf   rI   ry   r   r   r   r   r   )rG   r   r   s      r:   'test_pipeline_sample_weight_unsupportedr   >  s9   
1a&Ah)E466?;<<DHHQ$H::a==A::at:,,1111
)P
Q
QC	y	,	,	, 6 6

1BHaV$4$4
5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   ,C<<D D c                  J   t          dt                      fg          } t          j        d          }t	          j        t          |          5  |                     d           d d d            n# 1 swxY w Y   t	          j        t          |          5  |                     d           d d d            n# 1 swxY w Y   t          j        d          }t	          j        t          |          5  |                     d           d d d            d S # 1 swxY w Y   d S )	NclszInvalid parameter 'fake' for estimator Pipeline(steps=[('cls', LinearRegression())]). Valid parameters are: ['memory', 'steps', 'verbose'].r   nope)fake)fake__estimatorzInvalid parameter 'invalid_param' for estimator LinearRegression(). Valid parameters are: ['copy_X', 'fit_intercept', 'n_jobs', 'positive'].)cls__invalid_param)r   r   r   r   r   r   r   rR   )r   	error_msgs     r:   $test_pipeline_raise_set_params_errorr   K  s   e-//0122D 		X I 
z	3	3	3 % %V$$$% % % % % % % % % % % % % % %
 
z	3	3	3 0 0///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 		N I 
z	3	3	3 3 362223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s6   A11A58A5B::B>B>4DDDc                  |   t           j        } t           j        }t          dd          }t	          ddd          }t          d|fd|fg          }|                    | |           |                    |            |                    |            |	                    |            |
                    | |           d S )	NTr   probabilityrandom_statefullmle
svd_solvern_componentswhitenpcar   )r   r   r   r#   r
   r   rI   rv   rz   r{   ry   )rG   rH   r   r   r   s        r:   test_pipeline_methods_pca_svmr   e  s    	AA
$Q
/
/
/C
eD
A
A
ACeS\E3<011DHHQNNNLLOOOq1JJq!r<   c                     t           j        } t          ddd          }t          d          }t	          d|fd|fg          }|                    |            |                    |           j        | j        d         fk    sJ |                    |                    |                      t          |                    |           |                    |
                    |                                d S )	Nr   r   Tr   )noveltyr   lofr   )r   r   r
   r   r   rI   score_samplesshapefit_transformr-   rX   )rG   r   r   r   s       r:   #test_pipeline_score_samples_pca_lofr   t  s    	A eD
A
A
AC
T
*
*
*CeS\E3<011DHHQKKKa  &171:-7777GGCa  !!!D&&q))3+<+<S]]1=M=M+N+NOOOOOr<   c                     t          j        dgdgg          } t          j        ddg          }t          t                                }|                    | |           d}d}t          j        t          |          5 }|                    |            d d d            n# 1 swxY w Y   t          |j
        j        t                    sJ |t          |j
        j                  v sJ d S )Nrg   r   z<'LogisticRegression' object has no attribute 'score_samples'z+'Pipeline' has no attribute 'score_samples'r   )rn   r   r   r   rI   r   r   AttributeErrorr   
isinstancevalue	__cause__str)rG   rH   r   	inner_msg	outer_msg	exec_infos         r:   4test_score_samples_on_pipeline_without_score_samplesr     s   
1#sA
!QA +--..DHHQNNNNI=I	~Y	7	7	7 91               io/@@@@@IO566666666s   ?B!!B%(B%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        |fk    sJ |                    |           }
|
j        ||fk    sJ |                    |           }|j        ||fk    sJ |                    |           }|j        ||fk    sJ |                    | |           d S )
Nr   r   
randomizedT)r   r   r   ovr)r   r   decision_function_shape
preprocessr   )r   r   r   r   lenrn   uniquer"   r
   r#   r   rI   rv   rz   r{   r|   ry   )rG   rH   	n_samples	n_classesscalerr   r   preprocessingr   rv   proba	log_probar|   s                r:   'test_pipeline_methods_preprocessing_svmr    sl   	AA
IBIaLL!!IF
1d
C
C
CC
$Q
N
N
NC #  ,6EFFA ,,q//},,,,""1%%{y)44444**1--	9i"88888 22155 &9i*@@@@@

1a# r<   c                  r   t                      } t          dd          }t                      }t          dd          }|                     t          j                  }|                    |          }t          d|fd|fg          }|                    t          j                  }t          ||           d S )Nr   auto)r   n_initr  Kmeans)r"   r   r   r   r   r   r   r.   )r  kmscaler_for_pipelinekm_for_pipelinescaledseparate_predr   pipeline_preds           r:   test_fit_predict_on_pipeliner    s     F	Qv	.	.	.B )**!F;;;O !!$),,FNN6**M h 34x6QRSSD$$TY//Mm];;;;;r<   c                  v   t                      } t          d          }t          d| fd|fg          }d}d}t          j        t
          |          5 }t          |d           d d d            n# 1 swxY w Y   t          |j        j	        t
                    sJ |t          |j        j	                  v sJ d S )	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77D;I=I	~Y	7	7	7 %9m$$$% % % % % % % % % % % % % % %io/@@@@@IO566666666s   A00A47A4c                     t          dt                      fdt                      fg          } |                     d d dd           | j        d         j        d         sJ | j        d         j        sJ d| j        d         j        vsJ d S )Nr   r   T)rG   rH   transf__should_get_thisr   should_get_thisr   )r   r`   r~   r   r   rb   r   r   s    r:   -test_fit_predict_with_intermediate_fit_paramsr    s     h 1 12UIKK4HIJJD
$$     H%01BCCCCE"----4#3H#=#HHHHHHHr<   method_name)rv   rz   r{   c                     t          dt                      fdt                      fg          }|                    d d            t	          ||           } |d d           |j        d         j        sJ d S )Nr   r   T)rG   r   )r   r[   r   rI   r  r   r   )r  r   methods      r:   (test_predict_methods_with_predict_paramsr     s     h)E3G3I3I+JKLLDHHT4T;''F
FT&&&&E"000000r<   csr_containerc                    t           j        }||                    d          z  }t           j        }t	          dd          }t          d          }t          d|fd|fg          }|                    ||           |                    |          }|j	        |j	        d         d	fk    sJ t          |d d d d
f         |                    |                     t          |d d d
f         |                    ||                                                     t          d|fd|fg          } | |          }|                    ||          }t          ||                                           t          |          }	|j        d         d         |	j        d         d         usJ |                    d           |                    ||          j	        |j	        d         dfk    sJ t          dt%                      fd|fd|fg          }|                    ||          }|j	        |j	        d         dfk    sJ d}
t          dt%                      fdt'                      fg          }t)          j        t,          |
          5  |                    |           d d d            n# 1 swxY w Y   t          d|fd|ff          }|                    ||           d S )Nr   rs   r   )r   r   rg   r   svdselectr   )	select__k   mockr   z>All estimators should implement fit and transform.*\bNoTrans\brX   no_transformr   )r   r   r   r   r   r   r   rI   rX   r   r.   r   r/   raveltoarrayr   transformer_listrR   r[   rD   r   r   r   )r!  rG   rH   r#  r$  fsX_transformedX_spX_sp_transformedfs2r   s              r:   test_feature_unionr2    s    		AQAA
AA
6
6
6C1F	s|h%78	9	9BFF1aLLLLLOOM171:q/1111 mAAAssF3S5F5Fq5I5IJJJ}QQQU+V-A-A!Q-G-G-M-M-O-OPPP 
s|h%78	9	9B=D''a00m-=-E-E-G-GHHH ))Cq!!$C,@,CA,FFFFF MMAMAq!!'AGAJ?:::: 
)E3<(F9KL	M	MB$$Q**M171:q/1111 MC	VXX.0KL	M	MB	y	,	,	,  
q			               
s|h%78	9	9BFF1aLLLLLs   J//J36J3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 dS )z6Check the behaviour of `named_transformers` attribute.r   noinvtransfN)r[   rU   r   named_transformersr   r4  )r   r4  r-  s      r:   %test_feature_union_named_transformersr6  "  s    XXF--K	&)M;+GH	I	IB *f4444 /;>>>>  '61111 ,;;;;;;r<   c                      t          d          } t                      }t          | |          }t          |j         \  }}|dk    sJ || |fk    sJ d S )Nr   r  )r   r   )r
   r[   r    zipr,  )r   r(  funamestransformerss        r:   test_make_unionr<  /  si    

 
 
 C88D	C		Br23E<%%%%%C;&&&&&&r<   c                  z   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            d S # 1 swxY w Y   d S )Nr   r  r   n_jobszEmake_union() got an unexpected keyword argument 'transformer_weights'r   
   rg   )r   r[   transformer_weights)
r
   r[   r    r,  r?  r   r   r   r   r   )r   r(  r9  r   s       r:   test_make_union_kwargsrC  8  s!   

 
 
 C88D	Ca	(	(	(B*S$"7"7"HHHHH	>>>> )O C 
y	,	,	, L L3"2J2JKKKKL L L L L L L L L L L L L L L L L Ls   B00B47B4c                     t           j        } t          dd          }t          d|fg          }|                    |                               |           }|                    |           }|                    |           }t          ||           t          ||           |                    |          }|                    |          }t          ||           d S )Nr   r   )r   r   r   )	r   r   r
   r   rI   rX   r   r.   r^   )rG   r   r   X_transX_trans2X_trans3X_backX_back2s           r:   test_pipeline_transformrJ  G  s     		A
1
0
0
0C%''H ll1oo''**G%%a((H  ##Hgx000gx000''00F##G,,Gfg.....r<   c                     t           j        } t           j        }t                      }t	          d|fg          }|                    | |          }|                    | |                              |           }t          ||           d S )Nr(  )	r   r   r   r[   r   r   rI   rX   r.   )rG   rH   r   r   rE  rF  s         r:   test_pipeline_fit_transformrL  Z  s|    	AAXXF&&)*++H $$Q**Gzz!Q))!,,Hgx00000r<   z
start, end))r   rg   )r   r   )rg   r   )rg   r   )Nrg   )rg   Nr=   c                    t          dt                      fdt                      fdt                      fgdd          }|| |         }t          |t                     sJ |j        |j        | |         k    sJ t          |j                                                  t          |j                                                  | |         k    sJ |                    d          }|                    d          }|d	= |d	= ||k    sJ d
}t          j
        t          |          5  || |d          d d d            d S # 1 swxY w Y   d S )Ntransf1transf2r   123T)memoryverboseFr   stepsz*Pipeline slicing only supports a step of 1r   r%  )r   r[   r~   r   rS  listr   itemsrM   r   r   r   )startendr   
pipe_slicepipe_paramspipe_slice_paramsr   s          r:   test_pipeline_slicer[  g  s    
VXX	FHH 5y{{7KL  D
 eCiJj(+++++tz%)44444 	Z#))++,, &&(())%)4	5 	5 	5 	5 //u/--K"--5-99G'"+++++
6C	z	-	-	-  U3r\                 s   *EE
Ec                     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            n# 1 swxY w Y   t          j        t                    5  |d          d d d            d S # 1 swxY w Y   d S )Nr   r   r   r%  r   foobar)r[   r~   r   r   r   
IndexErrorKeyError)r   r   r   s      r:   test_pipeline_indexr`    sn   XXF
++Ch'%677D7f>V####8s????;# 
z	"	"  Q               
x	 	   X                 s$   	BBB<	CCC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 |                    d| fg           d| fg|j        k    sJ |                    |           d|fg|j        k    sJ |                    dg           t          j        d          }t          j        t          |          5  |
                    dggdg           d d d            n# 1 swxY w Y   d	}t          j        t          |          5  |                    dggdg           d d d            d S # 1 swxY w Y   d S )
Nr(  mock2rS  r(  )junkrB   zJLast step of Pipeline should implement fit or be the string 'passthrough'.r   rg   z0This 'Pipeline' has no attribute 'fit_transform')r[   r   r   rS  rR   r   r   r   r   r   rI   r   r   )rN  rO  r   r   s       r:   test_set_pipeline_stepsrf    s\   hhGhhG&'*+,,H'72222 ()HN-----(G3333g8>1111 01222W(.0000 W%%%W(.0000 |n---
)T C 
y	,	,	, ! !qcUQC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! =C	~S	1	1	1 + +uqc***+ + + + + + + + + + + + + + + + + +s$   D11D58D5F  FFc                  B   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 d S )Nr   ri   r(  rj   rb  values)r[   rf   r   r   r(  rj   rh  )r   mult2r   s      r:   test_pipeline_named_stepsrj    s    XXFaLLLE&&)FE?;<<H X)))))(.....$....$---- (F+fe_=>>H&f4444$------r<   r   c                 X   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          }|                    ||           g d
}d |j        D             }||k    sJ d S )Nrg   r   ri   r      m2badm3m5)rm  rn  ro  rp  c                     g | ]\  }}|S rB   rB   ).0name_s      r:   
<listcomp>z9test_pipeline_correctly_adjusts_steps.<locals>.<listcomp>  s    777WT1D777r<   )rn   r   rf   r   rI   rS  )	r   rG   rH   ri  mult3mult5r   expected_namesactual_namess	            r:   %test_pipeline_correctly_adjusts_stepsrz    s    
1#A
!AaLLLEaLLLEaLLLE
,tUmdE]K H LLA...N77777L\))))))r<   c           
      	   t          j        dgg          }t          j        dg          }t          d          t          d          t          d          fd} |            }d}t          |gg|                    ||                     t          |g|                    |                              |                     t          ||                    |gg                     |                    |            d	}t          |gg|                    ||                     t          |g|                    |                              |                     t          ||                    |gg                     |	                    d
          |j
        | d ddddk    sJ |                    |            d}t          |gg|                    ||                     t          |g|                    |                              |                     t          ||                    |gg                     g d}|D ]} t          ||          |           |                               d	}t          |gg|                    ||                     t          |g|                    |                              |                     t          ||                    |gg                      |            }|                    |            d}t          |gg|                    ||                              |                     t          |gg|                    ||                     t          ||                    |gg                     d}d}	t          j        t          |	          5 }
t          |d           d d d            n# 1 swxY w Y   t!          |
j        j        t                    sJ |t'          |
j        j                  v sJ d	}t)          dfd| fdfg          }t          |gg|                    ||                     t          |g|                    |                              |                     t          ||                    |gg                     d S )Nrg   r   ri   r   rl  c                  4    t          d fdfdfg          S )Nrm  ro  last)r   )ri  rv  rw  s   r:   makez0test_set_pipeline_step_passthrough.<locals>.make  s$    $uGHHHr<      ro  r@  Tr   F)rS  rm  ro  r}  rQ  m2__mult
last__multrR  rm  )rz   r{   r|   rX   ry   )r}     z''str' object has no attribute 'predict'z*This 'Pipeline' has no attribute 'predict'r   rv   rm  ro  r}  )rn   r   rf   r/   r   rI   rv   r^   rR   rM   rS  r  rX   r   r   r   r   r   r   r   r   )r   rG   rH   r~  r   expother_methodsr  r   r   r   ri  rv  rw  s              @@@r:   "test_set_pipeline_step_passthroughr    s   
1#A
!AaLLLEaLLLEaLLLEI I I I I I I tvvH
Cw 6 6q! < <===uhll1oo55a88999q(44seW==>>>;'''
Cw 6 6q! < <===uhll1oo55a88999q(44seW==>>>D))	. 	. 	 	 	 	 ;'''
Cw 6 6q! < <===uhll1oo55a88999q(44seW==>>>  M   % %!&!!!$$$$5!!!
Cw 6 6q! < <===uhll1oo55a88999q(44seW==>>>tvvH[)))
CwQ 2 2 < <Q ? ?@@@w 6 6q! < <===q(44seW==>>>9I<I	~Y	7	7	7 %9)$$$% % % % % % % % % % % % % % %io/@@@@@IO5666666 C${(;fe_MNNHw 6 6q! < <===uhll1oo55a88999q(44seW==>>>>>s   O00O47O4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 d S )Nrl  rv   r   r   r   r   r^   )	r   rf   rv   rX   r^   r[   hasattrrS  rU   )r   s    r:   test_pipeline_ducktypingr  ,  sW   T!WW%%HVXX&&Hx+++++]++H>! >>>>>x+++++VXX{}}55Hx+++++x!455555[]]FHH55Hx+++++x!45555555r<   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 d S )Nr   ztransf-1rg   ztransf-2r   	fitparamt)r[   r   r   r   rS  r~   )t1t2r   s      r:   test_make_pipeliner  H  s    	B	BR  DdH%%%%%:a=z)))):a=z))))R--DdH%%%%%:a=z)))):a=z)))):a={******r<   c                     t           j        } t           j        }t          ddd          }t	          d          }t          d|fd|fgdd	i
          }|                    | |           |                    |           }t          d|fd|fgdd	i
          }|                    | |          }t          dt                      fd|fd|fgdd	i
          }|                    | |          }t          |d d d df         d	|                    |           z             t          |d d df         |                    | |                                                     t          |d d d df         d	|                    |           z             t          |d d df         |                    | |                                                     |j        | j        d         dfk    sJ d S )Nr   r   r   r   r   r   rg   r   r   r$  r@  rA  r(  r%     )r   r   r   r
   r   r   rI   rX   r   r[   r.   r/   r*  r   )rG   rH   r   r$  r-  r.  X_fit_transformedX_fit_transformed_wo_methods           r:   test_feature_union_weightsr  W  s   	AA
1A
F
F
FC1F	
&)*
 
 
B FF1aLLLLLOOM	
&)*
 
 
B ((A..	
&((	eS\Hf+=>#RL
 
 
B #%"2"21a"8"8 mAAAssF3R#:K:KA:N:N5NOOO}QQQU+V-A-A!Q-G-G-M-M-O-OPPP/3B37c>O>OPQ>R>R9RSSS(B/1E1Ea1K1K1Q1Q1S1STTT&,Q??????r<   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        d         t          |           k    sJ |                    |            |                    |           }|j        |j        k    sJ t          |                                |                                           |	                    |           }t          |                                |                                           |                    |           }t          |                                |                                           d S )	Nwordswordanalyzercharscharr   r>  r   )
JUNK_FOOD_DOCSr   r   rI   rX   r   r   r/   r+  r   )rG   r-  fs_parallelfs_parallel2r.  X_transformed_parallelX_transformed_parallel2s          r:   test_feature_union_parallelr  x  s   A	ov6667ov6667	

 
B ov6667ov6667	
   K  ov6667ov6667	
   L FF1IIILLOOMq!SVV++++OOA(22155"8">>>>>},,..0F0N0N0P0PQQQ +88;;},,..0G0O0O0Q0QRRR +44Q77},,..0G0O0O0Q0QRRRRRr<   c                  4   t          d          } t          dd          }t          d|fd| fg          }|                    t                     |                                }|D ]}d|v sd	|v sJ t          |          d
k    sJ t          dt                      fg                              dgg          }t          j        d          }t          j
        t          |          5  |                                 d d d            d S # 1 swxY w Y   d S )Nr  r  char_wb)r   r   )r  ngram_ranger  r  chars__words__#   tr1rg   zDTransformer tr1 (type Transf) does not provide get_feature_names_outr   )r   r   rI   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    ss   000IGGGI	+gy-AB	C	CBFF>,,..M 6 6D  I$5$5$5$5}####	vxx()	*	*	.	.u	5	5B
)N C 
~S	1	1	1 # #
  """# # # # # # # # # # # # # # # # # #s   +DDDc                     t           j        } t           j        }t          t	          d          t                                }|                    | |           t          j        t                    5  t          |d           d d d            n# 1 swxY w Y   t          t	          d          t          d                    }t          j        t                    5  t          |d           d d d            n# 1 swxY w Y   |                    | |           t          |j        t          j        |                     d S )Nrg   r   classes_r   r   )r   r   r   r   r   r   rI   r   r   r   r  r   r/   r  rn   r  )rG   rH   regr   s       r:   test_classes_propertyr    s   	AA
a(((*:*<*<
=
=CGGAqMMM	~	&	& ! !Z   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! a(((*<!*L*L*L
M
MC	~	&	& ! !Z   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !GGAqMMMs|RYq\\22222s$   2BBBC<<D D c                     t          d          } t          d          }t          d          }d |_        d | _        d |_        t          d| fd|fg          }t          ddgg|                    t          j        d	gg                               t          d
dg|                                           d|fg|_        t          dgg|                    t          j        d	gg                               t          dg|                                           |                    d|fg           t          dgg|                    t          j        d	gg                               t          dg|                                           |                    |           t          dgg|                    t          j        d	gg                               t          dg|                                           d S )Nr   r   rl  c                     dgS Nx3rB   input_featuress    r:   <lambda>z.test_set_feature_union_steps.<locals>.<lambda>      $ r<   c                     dgS Nx2rB   r  s    r:   r  z.test_set_feature_union_steps.<locals>.<lambda>  r  r<   c                     dgS )Nx5rB   r  s    r:   r  z.test_set_feature_union_steps.<locals>.<lambda>  r  r<   rm  ro  rg   m2__x2m3__x3rp  m5__x5r(  )r,  mock__x3rd  mock__x5)	rf   r  r   r/   rX   rn   ro   r,  rR   )ri  rv  rw  r  s       r:   test_set_feature_union_stepsr    s   GGEGGEGGE"?"?E"?"?E"?"?E	e}tUm4	5	5BAxbj1#.?.?!@!@AAA(+R-E-E-G-GHHH !%=/Bubll2:se+<+<==>>>z2#;#;#=#=>>> MMVUO#4M555ubll2:se+<+<==>>>
|R%=%=%?%?@@@ MMuMubll2:se+<+<==>>>
|R%=%=%?%?@@@@@r<   c                     t          d          } t          d          }d | _        d |_        t          j        dgg          }t	          d| fd|fg          }t          ddgg|                    |                              |                     t          ddgg|                    |                     t          dd	g|                                           |	                    d
           t          dgg|                    |                              |                     t          dgg|                    |                     t          d	g|                                           |	                    d
           t          g g|                    |                              |                     t          g g|                    |                     t          g |                                           |	                    |           t          dgg|                    |                              |                     t	          dd|fg          }t          dgg|                    |                              |                     t          dgg|                    |                     t          d	g|                                           d S )Nr   r   c                     dgS r  rB   r  s    r:   r  z2test_set_feature_union_step_drop.<locals>.<lambda>  r  r<   c                     dgS r  rB   r  s    r:   r  z2test_set_feature_union_step_drop.<locals>.<lambda>  r  r<   rg   rm  ro  r  r  dropr  r  )rm  r  )
rf   r  rn   ro   r   r/   rI   rX   r   rR   )ri  rv  rG   r  s       r:    test_set_feature_union_step_dropr    s   GGEGGE"?"?E"?"?E

QC5A	e}tUm4	5	5BAx!4!4Q!7!7888Ax!1!1!!4!4555(+R-E-E-G-GHHHMMVMubffQii11!44555ub..q11222z2#;#;#=#=>>>MMVMtRVVAYY0033444tR--a00111r23355666 MMUMubffQii11!44555 
~e}5	6	6BubffQii11!44555ub..q11222z2#;#;#=#=>>>>>r<   c                     t          d          } t          d          }d | _        d |_        t          j        dgg          }t	          d| fd|fg          }t          ddgg|                    |                              |                     t          ddgg|                    |                     t          dd	g|                                           |	                    d
           t          ddgg|                    |                              |                     t          ddgg|                    |                     t          dd	g|                    dg                     |	                    d
           t          ddgg|                    |                              |                     t          ddgg|                    |                     t          ddg|                    dg                     |	                    |           t          ddgg|                    |                              |                     t          ddgg|                    |                     t          dd	g|                    dg                     t	          dd|fg          }t          ddgg|                    |                              |                     t          ddgg|                    |                     t          dd	g|                    dg                     t          j        }|j        d         }t          ddd          }t	          dd|fg          }t          ||                    |                              |          ddd|f                    t          ||                    |          ddd|f                    t          g d|                    g d                     |	                    d
           |                    |                              |          }t          |t          j        ||g                     |                    |          }t          |t          j        ||g                     t          g d|                    g d                     |	                    |           t          ||                    |                              |          dd| df                    t          ||                    |          dd| df                    t          g d|                    g d                     t	          dd|fgd
di          }t          |dz  |                    |                              |          ddd|f                    t          |dz  |                    |          ddd|f                    t          g d|                    g d                     dS )z@Check the behaviour of setting a transformer to `"passthrough"`.r   r   c                     dgS r  rB   r  s    r:   r  z4test_set_feature_union_passthrough.<locals>.<lambda>  r  r<   c                     dgS r  rB   r  s    r:   r  z4test_set_feature_union_passthrough.<locals>.<lambda>  r  r<   rg   rm  ro  r  r  r   r  
m2__myfeatmyfeatr  
m3__myfeat)rm  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  rA  )rf   r  rn   ro   r   r/   rI   rX   r   rR   r   r   r   r
   hstack)ri  rv  rG   r  columnsr   X_fts          r:   "test_set_feature_union_passthroughr    sF   GGEGGE #@"?E"?"?E

QC5A	e}tUm4	5	5BAx!4!4Q!7!7888Ax!1!1!!4!4555(+R-E-E-G-GHHHMM]M###Ax!4!4Q!7!7888Ax!1!1!!4!4555h/1I1I8*1U1UVVVMM]M###Ax!4!4Q!7!7888Ax!1!1!!4!4555	|$b&>&>z&J&J  
 MMUMAx!4!4Q!7!7888Ax!1!1!!4!4555h/1I1I8*1U1UVVV 
,tUm<	=	=BAx!4!4Q!7!7888Ax!1!1!!4!4555h/1I1I8*1U1UVVV	AgajG
1A
F
F
FC	5s|D	E	EBq"&&))--a00HWH=>>>q"**1--aaa'k:;;;	
 	
 	
 	  !9!9!9::
 
 
 MMmM$$$66!99q!!DtRY1v..///ADtRY1v..///		
 		
 		
 	  !9!9!9::   MMcM"""q"&&))--a00WHII>???q"**1--aaa'l;<<<	
 	
 	
 	  !9!9!9::
 
 
 
	'%6*A.
 
 
B q1ubffQii11!44QQQ[ABBBq1ub..q11!!!XgX+>???	
 	
 	
 	  !9!9!9::
 
 
 
 
r<   c                      t           j        } t          ddd          }t          d|fdg          }|                    |            t          g d|                                           dS )	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   rI   r/   r  rG   r   r  s      r:   9test_feature_union_passthrough_get_feature_names_out_truer  y  s    	A
1A
F
F
FC	s|%CD	E	EBFF1III	
 	
 	
 	  ""
 
 
 
 
r<   c                      t           j        } t          ddd          }t          d|fdgd          }|                    |            t          g d	|                                           d
S )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
F
F
FC	
56RW
 
 
B FF1III	
 	
 	
 	  ""
 
 
 
 
r<   c                     t          j        d          } |                     ddgddggddg          }t          d d	 
          }t	          dt                      fd|fgd          }|                    |           t          j        d          }t          j	        t          |          5  |                                 ddd           dS # 1 swxY w Y   dS )zFCheck get_feature_names_out and non-verbose names and colliding names.pandasrg   r   r   r7   r8   r  c                     | dg         S rO   rB   )rG   s    r:   r  zStest_feature_union_passthrough_get_feature_names_out_false_errors.<locals>.<lambda>  s    !SE( r<   c                 ,    t          j        dg          S rO   )rn   ro   )r9   rt  s     r:   r  zStest_feature_union_passthrough_get_feature_names_out_false_errors.<locals>.<lambda>  s    bj#>O>O r<   )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"   rI   r   r   r   r   r  )pdrG   select_aunionr   s        r:   Atest_feature_union_passthrough_get_feature_names_out_false_errorsr    s>   		X	&	&B
q!fq!f%Sz::A".O.O  H 
  	!D(#34"'  E 
IIaLLL
)	U C
 
z	-	-	- & &##%%%& & & & & & & & & & & & & & & & & &s   .CCCc                     t          j        d          } |                     t          t	          d                    gd t	          d          D                       }t          ddgd          }|                    |           t          j        d	          }t          j	        t          |
          5  |                                 ddd           dS # 1 swxY w Y   dS )zLCheck get_feature_names_out with non-verbose names and >= 5 colliding names.r  r@  c                     g | ]}d | S )frB   )rr  is     r:   ru  zdtest_feature_union_passthrough_get_feature_names_out_false_errors_overlap_over_5.<locals>.<listcomp>  s    0L0L0LQQ0L0L0Lr<   r  )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   rT  ranger   rI   r   r   r   r   r  )r  rG   r  r   s       r:   Ptest_feature_union_passthrough_get_feature_names_out_false_errors_overlap_over_5r
    s   		X	&	&B
d599oo&0L0L%))0L0L0LMMA	 56"'  E
 
IIaLLL
)	 C 
z	-	-	- & &##%%%& & & & & & & & & & & & & & & & & &s   5CCCc                     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 ]\  }}	t          j        t
          |	          5   |di ||i                    dggdg           d d d            n# 1 swxY w Y    |di |dt          d          fgi}
t          |
||           t          j        t
          |	          5  |
                    dggdg           d d d            n# 1 swxY w Y   t          j        t
          |	          5  |
                    dggdg           d d d            n# 1 swxY w Y    |di |dt          d          fgi}
 |
j	        di ||i t          j        t
          |	          5  |
                    dggdg           d d d            n# 1 swxY w Y   t          j        t
          |	          5  |
                    dggdg           d d d            n# 1 swxY w Y   d S )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   r8   r   r7   rS  r,  r   rg   rB   )
rf   r   r   r   r   r   rI   setattrr   rR   )error_message_1error_message_2error_message_3
bad_steps1
bad_steps2r   param
bad_steps3	bad_stepsmessageests              r:   test_step_name_validationr    s	   LODOVO477#c477^4JQ.3Q.1J '*\;M,NO . .
UDGGnud1gg&67
))501#
 	. 	.Iw z999 : :))ui())--seaS999: : : : : : : : : : : : : : : #22#tAww 0122CC	***z999 $ $!s###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ z999 . .!!A3%!---. . . . . . . . . . . . . . . #22#tAww 0122CCN00eY/000z999 $ $!s###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ z999 . .!!A3%!---. . . . . . . . . . . . . . .3	.. .sZ   4"C""C&)C&3EE E?F%%F),F)4HH!H I&&I*-I*c                      t          dt          dt                      fg          fg          } |                     dt                                 |                     dt	                      fgd           d S )Nr7   r8   gMbP?)a__b__alphaa__brl  )a__stepsa__b__C)r   r   rR   r   r   )	estimators    r:   test_set_params_nested_pipeliner    sx    330@0@*A)B C CDEFFIU999C);)=)=#>"?KKKKKr<   c                  	   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        d         j        }t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    | |          |                    | |                     t          |j        d         j        |j        d         j                   t'          |d	          rJ |
                    | |           t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    | |          |                    | |                     t          |j        d         j        |j        d         j                   ||j        d         j        k    sJ t          dd          }	t                      }
t          d
|
fd|	fg|          }|
                    | |           t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    | |          |                    | |                     t          |j        d         j        |j        d
         j                   ||j        d
         j        k    sJ 	 t)          j        |           d S # t)          j        |           w xY w)Nr@  locationrR  Tr   r   r   r   rQ  r   transf_2)r   r   r   r   joblibMemoryr#   r   r   r   rI   r   r   r/   rv   rz   r{   ry   r   r  shutilrmtree)rG   rH   cachedirrQ  r   r   r   cached_pipetsclf_2r$  cached_pipe_2s               r:   test_pipeline_memoryr.    sY   	AAyyH8 "===d333(E&MM2UCLABB6 2UCLA&QQQ 	1A$X.94<<??K,?,?,B,BCCC4--a00+2K2KA2N2NOOO411!44k6S6STU6V6VWWW4::a++[->->q!-D-DEEEX&-{/Fx/P/W	
 	
 	
 68,,,,, 	14<<??K,?,?,B,BCCC4--a00+2K2KA2N2NOOO411!44k6S6STU6V6VWWW4::a++[->->q!-D-DEEEX&-{/Fx/P/W	
 	
 	
 [,X6AAAAA 1555== (#eU^4V
 
 
 	!Q 	4<<??M,A,A!,D,DEEE4--a00-2M2Ma2P2PQQQ""1%%}'F'Fq'I'I	
 	
 	
 	4::a++]-@-@A-F-FGGGX&-%j18	
 	
 	
 ].z:EEEEEEhhs   Q.R- -Sc                  l   t                      } t          j        | d          }t          t	                      t                      |          }|j        |u sJ t          t	                      t                                }|j        J t          |          dk    sJ t          j	        |            d S )Nr@  r!  r#  r   )
r   r%  r&  r   r   r#   rQ  r   r'  r(  )r)  rQ  r   s      r:   test_make_pipeline_memoryr0  ;  s    yyH]Hb999F[]]CEE&AAAH?f$$$$[]]CEE22H?"""x==A
M(r<   c                   &    e Zd ZddZddZddZdS )FeatureNameSaverNc                 4    |                      |d           | S )NT)reset)_check_feature_namesrF   s      r:   rI   zFeatureNameSaver.fitH  s     !!!4!000r<   c                     |S r5   rB   rF   s      r:   rX   zFeatureNameSaver.transformL  rY   r<   c                     |S r5   rB   )r9   r  s     r:   r  z&FeatureNameSaver.get_feature_names_outO  s    r<   r5   )r>   r?   r@   rI   rX   r  rB   r<   r:   r2  r2  G  sP                   r<   r2  c                  *   t          dt                      fddt                      fg          } t                      }|                     |j        |j                   t          | dd                             |j	                  |j	                   dS )z5Check pipeline.get_feature_names_out with passthroughr:  passr   r   rc  Nr%  )
r   r2  r   r	   rI   r   r   r/   r  r  )r   r   s     r:   test_features_names_passthroughr;  S  s    &(()#&(()
  D ;;DHHTY$$$SbS	''(:;;T=O    r<   c                  l   t          dt                      fdt                      fg          } d t          D             }|                     t          |           t          | dd                                         g d           t          | dd                             d          g d           dS )	z5Check pipeline.get_feature_names_out with vectorizersvectr   rc  c                     g | ]}d |v S )pizzarB   )rr  r   s     r:   ru  z7test_feature_names_count_vectorizer.<locals>.<listcomp>f  s    ...!A...r<   Nr%  )beerburgercoke	copyrightr?  thenonsense_is_ignored)r   r   r   r  rI   r/   r  )r   rH   s     r:   #test_feature_names_count_vectorizerrF  c  s    FO$5$56@R@T@T8UVWWWD..~...AHH^QSbS	''))???   SbS	''(=>>???    r<   c                  4   t          dt                      fg          } t                      }|                     |j        |j                   d}t          j        t          |          5  | 	                                 ddd           dS # 1 swxY w Y   dS )zZCheck that error is raised when a transformer does not define
    `get_feature_names_out`.notransrc  z&does not provide get_feature_names_outr   N)
r   rD   r	   rI   r   r   r   r   r   r  )r   r   r   s      r:   8test_pipeline_feature_names_out_error_without_definitionrI  r  s     Iwyy12333D;;DHHTY$$$
2C	~S	1	1	1 % %""$$$% % % % % % % % % % % % % % % % % %s   +BBBc                      t          t                                } t          j        t          d          5  |                     dgdggddgddg           d d d            d S # 1 swxY w Y   d S )Nz8Pipeline.fit does not accept the sample_weight parameterr   r   rg   r   )r   r   r   r   r   rI   )r   s    r:   test_pipeline_param_errorrK  ~  s    
*,,
-
-C	T
 
 
 : : 	!qc
QF1a&999: : : : : : : : : : : : : : : : : :s   !A%%A),A)c              #      K   | ][\  \  }}}t          ||          rC|d k    r6t          |d          r&t          |j        d         d         t                    T|||fV  \dS )r   rS  r%  rg   N)r  r   rS  r~   )rr  r  patternr  s       r:   	<genexpr>rN    s       < <gh sFm<p 	/!!C!! 	"sy}Q'33 	"o 	'6n 	"!!!q< <r<   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$)rO  r   )r   N)r   Nrj   zw\[Pipeline\].*\(step 1 of 2\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 2\) Processing mult.* total=.*\n$)r   r   mult1ri  z\[FeatureUnion\].*\(step 1 of 2\) Processing mult1.* total=.*\n\[FeatureUnion\].*\(step 2 of 2\) Processing mult2.* total=.*\n$)rP  r  )rv  r  z@\[FeatureUnion\].*\(step 1 of 1\) Processing mult2.* total=.*\n$)rI   r   r   zest, pattern, methodc                 l   t          | |          }g dg dg}dgdgg}|                     d            |||           |                                j        r
J d            |                     d            |||           t	          j        ||                                j                  sJ d S )	Nrg   r   r   )r'  rl  r  r  r   F)rR  zGot output for verbose=FalseT)r  rR   
readouterroutr   r   )r  r  rM  capsysfuncrG   rH   s          r:   test_verboserW    s    3D	IIIA
qc
ANN5N!!!DAJJJ  ""&FF(FFFFNN4N   DAJJJ8GV..0045555555r<   c                     ddgddgddgg} g d}t                      }t                      }t          ||          }t          |d          rJ |                    | |           |j        |j        cxk    rdk    sn J t                      }t                      }t          ||          }|                    | |           |j        |j        cxk    rdk    sn J t          |d          rJ d S 	Nrg   r   r   r'  rl  r  r   rg   r   n_features_in_)r"   r   r   r  rI   r[  )rG   rH   ssgbdtr   s        r:   test_n_features_in_pipeliner^    s    Q!Q!Q A		A			B)++DT""Dt-.....HHQNNN""38888q888888 
		B)++DT""DFF1aLLL""38888q888888t-.......r<   c                     ddgddgddgg} g d}t                      }t          |          }t          |d          rJ |                    | |           |j        |j        cxk    rdk    sn J t                      }t          |          }|                    | |           |j        |j        cxk    rdk    sn J d S rY  )r"   r    r  rI   r[  )rG   rH   r\  r9  s       r:    test_n_features_in_feature_unionr`    s     Q!Q!Q A		A			B	BBr+,,,,,FF1aLLL 16666Q666666 
		B	BBFF1aLLL 16666Q66666666r<   c                  .    G d dt           t                    } t          j        t          j        }}t          d |             fd |             fg          }t          j        t                    5  |	                    ||           d d d            n# 1 swxY w Y   t          j        t                    5  |
                    ||           d d d            n# 1 swxY w Y   |	                    ||d           |
                    ||d           d S )Nc                       e Zd ZddZddZdS )7test_feature_union_fit_params.<locals>.DummyTransformerNc                 $    |ddik    rt           | S )Nr7   r   r   rc   s       r:   rI   z;test_feature_union_fit_params.<locals>.DummyTransformer.fit  s    c1X%%  Kr<   c                     |S r5   rB   rF   s      r:   rX   zAtest_feature_union_fit_params.<locals>.DummyTransformer.transform  s    Hr<   r5   )r>   r?   r@   rI   rX   rB   r<   r:   DummyTransformerrc    s<        	 	 	 	
	 	 	 	 	 	r<   rg  dummy0dummy1r   rP   )r   r   r   r   r   r   r   r   r   rI   r   rg  rG   rH   r   s       r:   test_feature_union_fit_paramsrk     s       +]    9dkqAx!1!1!3!34xAQAQASAS6TUVVA	z	"	"  	a               
z	"	"  	1               EE!Q!EOOAqAOs$   0BBB7CC!Cc                  h    G d dt                     } t          j        t          j        }}t	          d |             fd |             fg          }t          j        t                    5  |                    ||d           d d d            n# 1 swxY w Y   |                    ||d           d S )Nc                       e Zd ZddZdS )Mtest_feature_union_fit_params_without_fit_transform.<locals>.DummyTransformerNc                 $    |ddik    rt           | S )Nmetadatarg   re  rc   s       r:   rI   zQtest_feature_union_fit_params_without_fit_transform.<locals>.DummyTransformer.fit  s    j!_,,  Kr<   r5   rd   rB   r<   r:   rg  rn    s(        	 	 	 	 	 	r<   rg  nofittransform0nofittransform1r   )rp  rg   )	r$   r   r   r   r   r   r   r   r   rj  s       r:   3test_feature_union_fit_params_without_fit_transformrs    s       =    9dkqA 0 0 2 23 0 0 2 23	
	 	A 
z	"	" * *	1q)))* * * * * * * * * * * * * * * OOAq1O%%%%%s   *BBBc                     t           j        t           j        }} t          j                            ddg| j        ddg                              t                    }t          j	        | |<   t          t                      t                                }|                    | |                              | |          dk    sJ d S )Nrg   r   r   g?)pg?)r   r   r   rn   randomchoicer   astypeboolnanr   r   r   rI   ry   )rG   rH   maskr   s       r:   %test_pipeline_missing_values_leniencyr|  /  s     9dkqA9QFAGSz::AA$GGDfAdG*<*>*>??D88Aq>>1%%++++++r<   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  |                    | |           d d d            d S # 1 swxY w Y   d S )Nrg   r   r   r'  rl  r  rZ  r   transformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.rA  r   )r[   r   r   r   r   rI   )rG   rH   r,  weightsexpected_msgr  s         r:   3test_feature_union_warns_unknown_transformer_weightr  9  s     Q!Q!Q A		A!688,-a G	5  )wGGGE	z	6	6	6  		!Q                 s   A77A;>A;c                 v    t          | t                                }|                                d         rJ d S )Npairwise)r   r#   	_get_tags)r   r   s     r:   test_pipeline_get_tags_noner  K  s8     cee,,D~~
++++++r<   	Predictorc                    t           j                            d          }|                    dd          t          j        dgdz  dgdz  z             }}t          dt                      fd |             fg          }|                    ||           |                    |          }t          |          rNt          |d           |                    ||          t          j        t          ||                    k    sJ d S t          ||                                           |                    ||          t          j        t#          ||                    k    sJ d S )	Nr      r   rl  rg      r~  	predictor)rn   rv  RandomStaterandnr   r   r,   rI   rv   r   r/   ry   r   approxr   r-   r   r   )r  rngrG   rH   modely_preds         r:   1test_search_cv_using_minimal_compatible_estimatorr  W  sH    )


"
"C99RRXqcAgb&899qA
+--	.iikk0JK E 
IIaOOO]]1FU G61%%%{{1a  FM.F2K2K$L$LLLLLLL))){{1a  FM(1f2E2E$F$FFFFFFFr<   c                  R    G d dt                     } t          d |             fg          }t          j        t                    5  t          |           d d d            n# 1 swxY w Y   |                    t          j        t          j	                   t          |           d S )Nc                       e Zd Zd ZdS )0test_pipeline_check_if_fitted.<locals>.Estimatorc                     d| _         | S )NT)fitted_rF   s      r:   rI   z4test_pipeline_check_if_fitted.<locals>.Estimator.fitn  s    DLKr<   Nrd   rB   r<   r:   	Estimatorr  m  s#        	 	 	 	 	r<   r  r   )
r   r   r   r   r   r1   rI   r   r   r   )r  r   s     r:   test_pipeline_check_if_fittedr  l  s        M   
 %-.//H	~	&	& " "!!!" " " " " " " " " " " " " " "LLDK(((Hs   A##A'*A'c                  p   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	           n# 1 swxY w Y   |                    | |           t          |           t          d
g          }t          |           t          dt                      fd
g          }t          j        t                    5  t          |           d	d	d	           n# 1 swxY w Y   |                    | |           t          |           d	S )z1Check __sklearn_is_fitted__ is defined correctly.rg   r   r   r'  rl  r  rZ  r   Nr9  )r   r,   r   r   r   r1   rI   )rG   rH   r  s      r:   "test_feature_union_check_if_fittedr  y  s    Q!Q!Q A		A5"4"6"67899E	~	&	&                 
IIaOOOE 1233EE5"4"6"679PQRRE	~	&	&                 
IIaOOOEs$   A##A'*A'*DD
D
c                  F   t           j        t           j        }}  G d dt                    }t	           |            t                                }|                    | |           t           j        }|                    |          }t          |d |D                        dS )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>.AddPrefixStandardScalarNc                     t                                          |          }t          j        d |D             t                    S )Nr  c                     g | ]}d | S 
my_prefix_rB   rr  rs  s     r:   ru  ztest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_out.<locals>.<listcomp>  s!    EEEt2D22EEEr<   )dtype)superr  rn   ro   object)r9   r  r:  	__class__s      r:   r  zotest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_out  sA    GG111PPE:EEuEEEVTTTTr<   r5   )r>   r?   r@   r  __classcell__)r  s   @r:   AddPrefixStandardScalarr    sG        	U 	U 	U 	U 	U 	U 	U 	U 	U 	Ur<   r  c                     g | ]}d | S r  rB   r  s     r:   ru  zLtest_pipeline_get_feature_names_out_passes_names_through.<locals>.<listcomp>  s!    *W*W*W4+>+>+>*W*W*Wr<   N)	r   r   r   r"   r   rI   r  r  r/   )rG   rH   r  r   input_namesr  s         r:   8test_pipeline_get_feature_names_out_passes_names_throughr    s    
 9dkqAU U U U U. U U U
 0022N4D4DEEDHHQNNN$K22;??(*W*W;*W*W*WXXXXXr<   c                  p   t          j        d           t          dd          \  } }t          t	                      t                                }|                    d           |                    | |           |dd                                         }|d         j	        }t          ||           dS )z.Test pipeline's set_output with feature names.r  Tas_frame
return_X_yrX   Nr%  )r   r  r	   r   r"   r   
set_outputrI   r  feature_names_in_r/   )rG   rH   r   r  log_reg_feature_namess        r:   $test_pipeline_set_output_integrationr    s    
!!!dt444DAq))+=+?+?@@DOOhO'''HHQNNNSbS	7799 H6(*?@@@@@r<   c                     t          j        d          } t          dd          \  }}t          |d          \  }}t	          dt                      fdt                      fg          }|                    d           |                    |           |	                    |          }t          || j                  sJ t          |j        |                                           t          |j        |j                   d	S )
z'Test feature union with set_output API.r  Tr  r   r  scalarr   r  N)r   r  r	   r   r   r"   r
   r  rI   rX   r   r   r/   r  r  index)r  rG   rt  X_trainX_testr  rE  s          r:   test_feature_union_set_outputr    s    		X	&	&Bdt444DAq&qq999OGV8^%5%56GHHE	x(((	IIgoof%%Ggr|,,,,,w(C(C(E(EFFFw}fl33333r<   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 d	S )
z8Check FeatureUnion.__getitem__ returns expected results.r  r   r9  )drop_mer  r:  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%%%%%%r<   keyr   c                     t          dt                      fdt                      fg          }d}t          j        t
          |          5  ||           ddd           dS # 1 swxY w Y   dS )z5Raise error when __getitem__ gets a non-string input.r  r   zOnly string keys are supportedr   N)r   r"   r
   r   r   r_  )r  r  r   s      r:    test_feature_union_getitem_errorr    s     8^%5%56GHHE
*C	xs	+	+	+  c

                 s   	A!!A%(A%c                     t          j        d           t          dd          \  } }t                      }|                    |            t          d|fg          }t          |d          sJ t          | j        |j	                   t          |j	        |j	                   t          dg          }|                    |            t          |d          sJ t          | j        |j	                   | 
                                }t          dg          }|                    |           t          |d          rJ dS )zxEnsure feature union has `.feature_names_in_` attribute if `X` has a
    `columns` attribute.

    Test for #24754.
    r  Tr  scaler  r9  N)r   r  r	   r"   rI   r   r  r/   r  r  to_numpy)rG   rt  r  r  X_arrays        r:   $test_feature_union_feature_names_in_r    s;    !!!dt444DAq F
JJqMMM7F+,--E5-.....qy%"9:::v/1HIII 1233E	IIaLLL5-.....qy%"9::: jjllG1233E	IIgu12222222r<   c                  8   t           j                            d                              d          } t	          dt          d          fg          }|                    |           } t          j        t          d          5  |
                                 d d d            n# 1 swxY w Y   t          j        t          d	          5  |
                    | | 
           d d d            n# 1 swxY w Y   t          j        d          5  t          j        d           |
                    |            d d d            n# 1 swxY w Y   t          j        t          d          5  |
                    |            d d d            d S # 1 swxY w Y   d S )Nr   )r@  rl  )sizer   r   )r   z$Missing required positional argumentr   z$Cannot use both X and Xt. Use X only)rG   XtT)recorderrorzXt was renamed X in version 1.5)r  )rn   rv  r  normalr   r
   r   r   r   r   r^   warningscatch_warningssimplefilterwarnsFutureWarningr   s     r:   .test_pipeline_inverse_transform_Xt_deprecationr    s   
	a  ''W'55AeSa0001233D1A	y(N	O	O	O ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 
y(N	O	O	O * *q)))* * * * * * * * * * * * * * * 
	 	-	-	- " "g&&&q!!!" " " " " " " " " " " " " " " 
m+L	M	M	M % %!$$$% % % % % % % % % % % % % % % % % %sH   B%%B),B)C//C36C3*EE	E	+FFFc                   ^    e Zd ZddZddZddZddZddZddZddZ	dd	Z
dd
ZddZdS )SimpleEstimatorNc                     |J |J | S r5   rB   r9   rG   rH   r   props        r:   rI   zSimpleEstimator.fit  s    (((r<   c                     |J |J d S r5   rB   r  s        r:   r   zSimpleEstimator.fit_transform$       (((r<   c                     |J |J d S r5   rB   r  s        r:   r   zSimpleEstimator.fit_predict(  r  r<   c                     |J |J d S r5   rB   r9   rG   r   r  s       r:   rv   zSimpleEstimator.predict,  r  r<   c                     |J |J d S r5   rB   r  s       r:   rz   zSimpleEstimator.predict_proba0  r  r<   c                     |J |J d S r5   rB   r  s       r:   r{   z!SimpleEstimator.predict_log_proba4  r  r<   c                     |J |J d S r5   rB   r  s       r:   r|   z!SimpleEstimator.decision_function8  r  r<   c                     |J |J d S r5   rB   r  s        r:   ry   zSimpleEstimator.score<  r  r<   c                     |J |J d S r5   rB   r  s       r:   rX   zSimpleEstimator.transform@  r  r<   c                     |J |J d S r5   rB   r  s       r:   r^   z!SimpleEstimator.inverse_transformD  r  r<   r=   )r>   r?   r@   rI   r   r   rv   rz   r{   r|   ry   rX   r^   rB   r<   r:   r  r    s           
                                                                   r<   r  enable_slep006r  splitpartial_fitc                 l   d }dggdg}}dgdd}}}t                      } ||| dd          } ||ddd          }t                                          dd                              dd                              dd          }t          d	|fd
|fg          }	d| vr|	                    dggdg|||          }		  t          |	|           |||||           n-# t          $ r   t          |	|           ||||           Y nw xY wt          |d||           t          |d||           dS )z5Test that metadata is routed correctly for pipelines.c                 x    |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__requestrB   )r(   r  )r  r  kwargmethodss       r:   set_requestz7test_metadata_routing_for_pipeline.<locals>.set_requestO  sf     &&&'/GGhG 	; 	;F1GC000011::E::::
r<   rg   r7   r8   Tr   r  rI   r   rp  trsr  )r   r  rp  )objr  r   rp  rX   N)
r  r%   set_fit_requestset_transform_requestset_inverse_transform_requestr   rI   r  r   r'   )
r  r  rG   rH   r   r  rp  r  r  r   s
             r:   "test_metadata_routing_for_pipeliner  I  s      C51#qA%&Cc4M 

C
+c6D
A
A
AC
+c54
@
@
@C	td	;	;		TD		A	A	&	&TD	&	I	I	  %S'9:;;HF<<SEA3m$   
 

!&!!qD8	
 	
 	
 	
 	
  
 
 
!&!!]	
 	
 	
 	
 	
 	

 ]X    =8     s   C! !'D
Dc                    dggdg}}dgd}}t                      }t          d|fg          }d|  }t          j        t          t          j        |                    5  	  t          ||           ||||           n,# t          $ r  t          ||           |||           Y nw xY wddd           dS # 1 swxY w Y   dS )zBTest that metadata is not routed for pipelines when not requested.rg   r7   r  zn[sample_weight, prop] are passed but are not explicitly set as requested or not requested for SimpleEstimator.r   r  N)	r  r   r   r   r   r   r   r  r   )r  rG   rH   r   r  r  r   error_messages           r:   (test_metadata_routing_error_for_pipeliner    sb    C51#qA#s4M


C+s+,--H	:17	: 	:  
z=)A)A	B	B	B Q Q	Q%GHf%%a-dSSSSS 	Q 	Q 	Q &GHf%%a}4PPPPPP	Q	Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Qs6   B8!A?>B8?&B(%B8'B((B88B<?B<)r|   rX   r^   c                     t          dt                      fg          }t          j        t          d          5   t          ||           dggdgd           ddd           dS # 1 swxY w Y   dS )zTest that the right error message is raised when metadata is passed while
    not supported when `enable_metadata_routing=False`.r  z1is only supported if enable_metadata_routing=Truer   rg   r7   r  N)r   r  r   r   r   r  )r  r   s     r:   *test_routing_passed_metadata_not_supportedr    s     k?#4#45677D	M
 
 
 B B 	fseA3SAAAAB B B B B B B B B B B B B B B B B Bs    A''A+.A+c                      t          dt                      fdt                      fg          } |                     dggdg           |                     dgg           dS )zFTest that pipeline works with estimators that have a `__len__` method.r  r  rg   N)r   r   r   rI   rv   r  s    r:   %test_pipeline_with_estimator_with_lenr    sk     
%''	(;8N8P8P*QR D 	HHqcUQCLL1#r<   	last_stepc                     t          dt                      fd| fg          }|                    dggdg                              dgdgdgg          dgdgdggk    sJ dS )zTest that the pipeline works when there is not last step.

    It should just ignore and pass through the data on transform.
    r  r  rg   r   r   N)r   r!   rI   rX   )r  r   s     r:   test_pipeline_with_no_last_stepr    sx     e0223k95MNOOD88aSEA3))A3aS/::sQC!oMMMMMMr<   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  |
                    | |||           ddd           n# 1 swxY w Y   t          d	t                                          dd          fg          }d
t          j         d}t          j        t          t          j	        |                    5  |
                    | |||                              | ||           ddd           dS # 1 swxY w Y   dS )zCTest that the right error is raised when metadata is not requested.r   rg   r   r'  r  rR  rg   rg   rg   r7   sub_transformerzb[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for z.fitr   r  NTz
.transform)rn   r   r   r%   r>   r   r   r   r   r   rI   r  rX   )rG   rH   r   rp  feature_unionr  s         r:   )test_feature_union_metadata_routing_errorr    sZ    	1a&1a&1a&)**A		A'ii8M !#46J6L6L"M!NOOM	E!5!>	E 	E 	E 
 
/ry7O7O	P	P	P P P!QmhOOOP P P P P P P P P P P P P P P ! "$&&66"& 7  	
	 	M	J 4 =	J 	J 	J 
 
/ry7O7O	P	P	P G Gq 	 	
 	

)A]X)
F
F
FG G G G G G G G G G G G G G G G G Gs$   B))B-0B-$0E!!E%(E%c                  j    t          dt                      fg          } |                                  dS )zaTest that get_metadata_routing() works regardless of the Child's
    consumption of any metadata.r   N)r   r%   get_metadata_routing)r  s    r:   3test_feature_union_get_metadata_routing_without_fitr    s9     !#46J6L6L"M!NOOM&&(((((r<   r~  c                 r   t          j        ddgddgddgg          }g d}g dd}}t          d	 | t                      
                              dd                              dd          fd | t                      
                              dd                              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| 5dS )z8Test that metadata is routed correctly for FeatureUnion.r   rg   r   r'  r  rR  r  r7   
sub_trans1)registryTr  
sub_trans2rI   )r  r  NrB   )rn   r   r   r&   r  r  rI   r   rX   r,  r  r   r'   )	r~  rG   rH   r   rp  r  kwargsr  	sub_transs	            r:   #test_feature_union_metadata_routingr    s    	1a&1a&1a&)**A		A'ii8M  Y[[111 tdCC&&TD&II	 Y[[111 tdCC&&TD&II		
 M"  -(CCFMa%%f%%%M1//////Ma%%f%%/<<V<<<$5 	 	q>*8}}! 	 	I#      			 	r<   )rA   	itertoolsr   r'  r   r  tempfiler   r%  numpyrn   r   sklearn.baser   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.utils._metadata_requestsr(   r)   sklearn.utils._testingr*   r+   r,   r-   r.   r/   sklearn.utils.fixesr0   sklearn.utils.validationr1   r   r  r3   rD   rU   r[   r`   rf   r~   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  markparametrizer   r2  r6  r<  rC  rJ  rL  r[  r`  rf  rj  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r.  r0  r2  r;  rF  rI  rK  productparameter_grid_test_verboserW  r^  r`  rk  rs  r|  r  r  r  r  r  r  r  r  r  slicer  r  r  r  usefixturessortedsetr  r  r  r  r  r  r  r  rB   r<   r:   <module>r.     sL        				                N N N N N N N N N N N N " " " " " " & & & & & & 3 3 3 3 3 3 3 3 ( ( ( ( ( (         
 H G G G G G G G ; ; ; ; ; ; < < < < < < < < ( ( ( ( ( ( L L L L L L L L L L 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 N N N N N N N N N N N N E E E E E E E E                  H G G G G G G G                / . . . . . 4 4 4 4 4 4y{{       	 	 	 	 	e 	 	 	    '   
    [       f       =   ,       ,    &       =   &Q Q Qh	 	 	  , , , > > >
6 
6 
63 3 34  P P P 7 7 7"  << < <,7 7 7	I 	I 	I DDD 1 1 1 .99, , :9,^
< 
< 
<' ' 'L L L/ / /&
1 
1 
1 VVV   8  $+ + +B. . ." }(=>>* * ?>*" }(=>>L? L? ?>L?^6 6 68+ + +@ @ @B*S *S *SZ# # #&3 3 3 A A A: ?  ?  ?Fn n nb  (  ,& & &.& & &,#. #. #.LL L L<  <  < ~	 	 		 	 	 	 	} 	 	 	     	% 	% 	%: : :< <"3)"3 8VVXX.		0DEFFN 8VVXX.		@TUVVN !6688,/		, N 8VVXX.>??N *VTTVV,<=>>O 3fddff5EFGGO w/'44661BCDDT /'44661BDUVWWSY0	
b 	0//e3# 3#< < < ~ /1LMM6 6 NM6/ / /.7 7 7(  .& & &0, , ,  $ }(=>>, , ?>, '79J&KLLG G MLG(
 
 
  2Y Y Y*A A A 4 4 4 & & &$ EE!QKK 011  213 3 3B% % %.*  *  *  *  * m *  *  * Z )**66##g,,'=9Q*Q#R#RSS7 7 TS +*7t )** 66##g,,'=9Q*Q#R#RSSQ Q TS	 +*
Q* EEE 	B 	B 	B )**  +* )**t]&;<<N N =< +*N )**%G %G +*%GP )**) ) +*) )**(*LM % %  +*% % %r<   