
    0Ph9                       d Z ddlZddlZddlZddlZddlZddlmZ ddlZddl	Z
ddlZddlmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z> ddl?m@Z@ ddlAmBZBmCZCmDZDmEZE ddlFmGZG ddlHmIZImJZJ ddlKmLZLmMZMmNZNmOZOmPZPmQZQ ddlRmSZS ddlTmUZUmVZV  e            ZWdeWjX        jY        _Z        deWj[        jY        _Z        dZ\ G d de          Z] G d  d!e]          Z^ G d" d#ee^          Z_ G d$ d%e_          Z` G d& d'e`          Za G d( d)ee          Zb G d* d+e          Zc G d, d-e`          Zd G d. d/e          Zed0 Zfd1 Zgd2 Zhd3 Zid4 Zjd5 Zkd6 Zld7 Zmd8 Znd9 Zod: Zpd; Zqd< Zrd= Zsejt        u                    d>g d?          d@             Zvejt        u                    dAeS          dB             ZwdC ZxdD ZydE ZzdF Z{dG Z|ejt        u                    dHg dI          dJ             Z}dK Z~dL ZdM Zejt        u                    dNddNg          dO             Zejt        u                    dNddNg          dP             ZdQ ZdR Zejt        u                    dS e: e>             e/                      ef e: e>             e.                      ef e: e>                      dT f e9g           dU fg          dV             ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zdf Z G dg dhe          Zdi Zdj Zdk Zdl Zdm  ej         e9dn e`            fdo ec            fg          dpf e9dn e`            fdqdo ec            fg          drf e9dn e`            fdsdo ec            fg          drf e9dn e`            fdtg          dpf e9dudv eb            fg          dwf e9dxdv eb            fg          dwf e8dy eb            fdz eb            fg          d{f e8d|dz eb            fd}g          d~fgg d          D             Zejt        u                    de          d             Zd Zd Zd Zd Zd Zd Zejt        u                    dNddNg          d             Zejt        u                    deMeLg          d             Zd Zd Zd Zd Zd Zd Zejt        u                    dd edd          g          d             Zd Zd Z ed          ejt        u                    dddg          d                         Z ed          d             Zd Z ed          d             Zejt        u                    dg d          d             Z G d de          Zejt        u                    d e eeJ          ddhz
                       ed          d                         Zejt        u                    d e eeJ          ddhz
                       ed          d                         Zejt        u                    dg d          d             Z ed          d             Zejt        u                    dddNg           ed          d                         Z ed          d             Z ed          d             Z ed          ejt        u                    deCeBg          d                         ZdS )z
Test the pipeline module.
    N)mkdtemp)config_context)BaseEstimatorClassifierMixinTransformerMixincloneis_classifieris_regressor)KMeans)	load_iris)PCATruncatedSVD)DummyRegressor)HistGradientBoostingClassifierRandomForestClassifierRandomTreesEmbedding)NotFittedErrorUnsetMetadataPassedError)CountVectorizer)SelectKBest	f_classif)SimpleImputer)LassoLinearRegressionLogisticRegression)accuracy_scorer2_score)train_test_split)LocalOutlierFactor)FeatureUnionPipelinemake_pipeline
make_union)FunctionTransformerStandardScaler)SVC)"ConsumingNoFitTransformTransformerConsumingTransformer	_Registrycheck_recorded_metadata)get_tags)COMPOSITE_METHODSMETHODS)MinimalClassifierMinimalRegressorMinimalTransformerassert_allcloseassert_array_almost_equalassert_array_equal)CSR_CONTAINERS)_check_feature_namescheck_is_fittedF)zthe pizza pizza beer copyrightzthe pizza burger beer copyrightz!the the pizza beer beer copyrightzthe burger beer beer copyrightzthe coke burger coke copyrightzthe coke burger burgerc                       e Zd ZdZddZdS )NoFitz*Small class to test parameter dispatching.Nc                 "    || _         || _        d S Nab)selfr<   r=   s      [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/tests/test_pipeline.py__init__zNoFit.__init__U   s        NN)__name__
__module____qualname____doc__r@    rA   r?   r8   r8   R   s.        44     rA   r8   c                   $    e Zd ZddZddZd ZdS )NoTransNc                     | S r:   rG   r>   Xys      r?   fitzNoTrans.fit[       rA   Fc                      | j         | j        dS )Nr;   r;   )r>   deeps     r?   
get_paramszNoTrans.get_params^   s    V$&)))rA   c                      |d         | _         | S Nr<   r<   )r>   paramss     r?   
set_paramszNoTrans.set_paramsa   s    rA   r:   F)rC   rD   rE   rN   rR   rW   rG   rA   r?   rI   rI   Z   sK           * * * *    rA   rI   c                       e Zd Zd ZdS )NoInvTransfc                     |S r:   rG   r>   rL   s     r?   	transformzNoInvTransf.transformg       rA   N)rC   rD   rE   r]   rG   rA   r?   rZ   rZ   f   s#            rA   rZ   c                       e Zd Zd Zd ZdS )Transfc                     |S r:   rG   r\   s     r?   r]   zTransf.transforml   r^   rA   c                     |S r:   rG   r\   s     r?   inverse_transformzTransf.inverse_transformo   r^   rA   N)rC   rD   rE   r]   rc   rG   rA   r?   r`   r`   k   s2              rA   r`   c                       e Zd ZddZdS )TransfFitParamsNc                     || _         | S r:   )
fit_paramsr>   rL   rM   rg   s       r?   rN   zTransfFitParams.fitt   s    $rA   r:   rC   rD   rE   rN   rG   rA   r?   re   re   s   s(             rA   re   c                   J    e Zd Zd
dZd ZddZd Zd Zd ZexZ	xZ
Zdd	ZdS )Mult   c                     || _         d S r:   mult)r>   ro   s     r?   r@   zMult.__init__z   s    			rA   c                     dS NTrG   r>   s    r?   __sklearn_is_fitted__zMult.__sklearn_is_fitted__}       trA   Nc                     | S r:   rG   rK   s      r?   rN   zMult.fit   rO   rA   c                 :    t          j        |          | j        z  S r:   npasarrayro   r\   s     r?   r]   zMult.transform       z!}}ty((rA   c                 :    t          j        |          | j        z  S r:   rw   r\   s     r?   rc   zMult.inverse_transform   rz   rA   c                 b    t          j        |          | j        z                      d          S )Nrl   axis)rx   ry   ro   sumr\   s     r?   predictzMult.predict   s(    
1	)..A.666rA   c                 *    t          j        |          S r:   rx   r   rK   s      r?   scorez
Mult.score   s    vayyrA   )rl   r:   )rC   rD   rE   r@   rs   rN   r]   rc   r   predict_probapredict_log_probadecision_functionr   rG   rA   r?   rk   rk   y   s                ) ) )) ) )7 7 7 =DCMC%(9     rA   rk   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
successfulrr   s    r?   r@   zFitParamT.__init__   s    rA   Fc                 "    || _         d| _        d S rq   )r   fitted_r>   rL   rM   should_succeeds       r?   rN   zFitParamT.fit   s    (rA   c                     | j         S r:   r   r\   s     r?   r   zFitParamT.predict   s
    rA   c                 \    |                      |||           |                     |          S )N)r   )rN   r   r   s       r?   fit_predictzFitParamT.fit_predict   s*    An555||ArA   Nc                 8    |||z  }t          j        |          S r:   r   )r>   rL   rM   sample_weights       r?   r   zFitParamT.score   s     $M!AvayyrA   rX   rB   )	rC   rD   rE   rF   r@   rN   r   r   r   rG   rA   r?   r   r      st                          rA   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   r}   )rx   meanmeans_time
timestamp_rK   s      r?   rN   zDummyTransf.fit   s,    gaa((( )++rA   N)rC   rD   rE   rF   rN   rG   rA   r?   r   r      s)        22    rA   r   c                   6    e Zd 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                     dS rq   rG   rr   s    r?   rs   z*DummyEstimatorParams.__sklearn_is_fitted__   rt   rA   c                     | S r:   rG   rK   s      r?   rN   zDummyEstimatorParams.fit   rO   rA   Fc                     || _         | S r:   got_attributer>   rL   r   s      r?   r   zDummyEstimatorParams.predict       *rA   c                     || _         | S r:   r   r   s      r?   r   z"DummyEstimatorParams.predict_proba   r   rA   c                     || _         | S r:   r   r   s      r?   r   z&DummyEstimatorParams.predict_log_proba   r   rA   NrX   )	rC   rD   rE   rF   rs   rN   r   r   r   rG   rA   r?   r   r      st        66               rA   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)rl   rl   rl   zRLast step of Pipeline should implement fit or be the string 'passthrough'.*NoFit.*clfmatchsvcTrQ   )svc__asvc__br   F皙?)r   anovaz<All intermediate steps should be transformers.*\bNoTrans\b.*t)svc__Cz]Invalid parameter 'C' for estimator SelectKBest(). Valid parameters are: ['k', 'score_func'].)anova__CrG   )r!   pytestraises	TypeErrorrN   r8   rI   rR   dictrW   r<   r=   reprr&   r   r   named_stepsCreescape
ValueErrorr   pop)	pipelinemsgr   pipefilter1pipe2rV   params2xs	            r?    test_pipeline_invalid_parametersr      s    !!H	y	!	! ! !qcUQC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	 
 %)*++H	y	,	,	, ! !qcUQC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ))CeS\N##D???%% *Dc* *-1__%_-H-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 )Nrl      transfr   rM   passthrough)r   )rx   arrayr!   r`   r   rN   r   rW   rL   r   s     r?   test_pipeline_init_tupler     s    
1a&Ah)E9;;+?@AADHHQ$HJJqMMMOO=O)))HHQ$HJJqMMMMMrA   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!   rN   r   r   r   r   )rL   rM   r   r   r   s        r?   test_pipeline_methods_anovar   *  s    	AA


C)q)))Ggw'*c):;<<DHHQNNNLLOOOq1JJq!rA   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)rL   rM   clf__should_succeedz.fit() got an unexpected keyword argument 'bad'r   )clf__bad)r!   r`   r   rN   r   r   r<   r=   r   r   r   r   r   )r   r   s     r?   test_pipeline_fit_paramsr   9  s'   h)E9;;+?@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 )
Nrl   r   r   r   r      )rM   r   r      )rx   r   r!   r`   r   rN   r   r   s     r?   %test_pipeline_sample_weight_supportedr   I  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======rA   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 )
Nrl   r   r   r   r   r   r   z:score() got an unexpected keyword argument 'sample_weight'r   )rx   r   r!   r`   rk   rN   r   r   r   r   r   r   )rL   r   r   s      r?   'test_pipeline_sample_weight_unsupportedr   T  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', 'transform_input', 'verbose'].r   nope)fake)fake__estimatorzInvalid parameter 'invalid_param' for estimator LinearRegression(). Valid parameters are: ['copy_X', 'fit_intercept', 'n_jobs', 'positive'].)cls__invalid_param)r!   r   r   r   r   r   r   rW   )r   	error_msgs     r?   $test_pipeline_raise_set_params_errorr   a  s   e-//0122D 		* 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!   rN   r   r   r   r   )rL   rM   r   r   r   s        r?   test_pipeline_methods_pca_svmr   |  s    	AA
$Q
/
/
/C
eD
A
A
ACeS\E3<011DHHQNNNLLOOOq1JJq!rA   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!   rN   score_samplesshapefit_transformr1   r]   )rL   r   r   r   s       r?   #test_pipeline_score_samples_pca_lofr     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OrA   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 )Nrl   r   z<'LogisticRegression' object has no attribute 'score_samples'z+'Pipeline' has no attribute 'score_samples'r   )rx   r   r"   r   rN   r   r   AttributeErrorr   
isinstancevalue	__cause__str)rL   rM   r   	inner_msg	outer_msg	exec_infos         r?   4test_score_samples_on_pipeline_without_score_samplesr    s   
1#sA
!QA +--..DHHQ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   lenrx   uniquer%   r   r&   r!   rN   r   r   r   r   r   )rL   rM   	n_samples	n_classesscalerr   r   preprocessingr   r   proba	log_probar   s                r?   'test_pipeline_methods_preprocessing_svmr    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# rA   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!   r2   )r  kmscaler_for_pipelinekm_for_pipelinescaledseparate_predr   pipeline_preds           r?   test_fit_predict_on_pipeliner    s     F	Qv	.	.	.B )**!F;;;O !!$),,FNN6**M h 34x6QRSSD$$TY//Mm];;;;;rA   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)rL   rM   transf__should_get_thisr   should_get_thisr   )r!   re   r   r   r   rg   r   r   s    r?   -test_fit_predict_with_intermediate_fit_paramsr(    s     h 1 12UIKK4HIJJD
$$     H%01BCCCCE"----4#3H#=#HHHHHHHrA   method_name)r   r   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)rL   r   )r!   r`   r   rN   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0rA   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   r}   r   )r   r   rl   r   svdselectr   )	select__k   mockr   z>All estimators should implement fit and transform.*\bNoTrans\br]   no_transformr   )r   r   copyr   r   r   r   r    rN   r]   r   r2   r   r3   raveltoarrayr   transformer_listrW   r`   rI   r   r   r   )r-  rL   rM   r/  r0  fsX_transformedX_spX_sp_transformedfs2r   s              r?   test_feature_unionr?  	  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   KKK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`   rZ   r    named_transformersr   rA  )r   rA  r:  s      r?   %test_feature_union_named_transformersrC  9  s    XXF--K	&)M;+GH	I	IB *f4444 /;>>>>  '61111 ,;;;;;;rA   c                      t          d          } t                      }t          | |          }t          |j         \  }}|dk    sJ || |fk    sJ d S )Nr   r!  )r   r   )r   r`   r#   zipr9  )r   r4  funamestransformerss        r?   test_make_unionrI  F  si    

 
 
 C88D	C		Br23E<%%%%%C;&&&&&&rA   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   
   rl   )r   r`   transformer_weights)
r   r`   r#   r9  rL  r   r   r   r   r   )r   r4  rF  r   s       r?   test_make_union_kwargsrP  O  s!   

 
 
 C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!   rN   r]   r   r2   rc   )rL   r   r   X_transX_trans2X_trans3X_backX_back2s           r?   test_pipeline_transformrW  ^  s     		A
1
0
0
0C%''H ll1oo''**G%%a((H  ##Hgx000gx000''00F##G,,Gfg.....rA   c                     t           j        } t           j        }t                      }t	          d|fg          }|                    | |          }|                    | |                              |           }t          ||           d S )Nr4  )	r   r   r   r`   r!   r   rN   r]   r2   )rL   rM   r   r   rR  rS  s         r?   test_pipeline_fit_transformrY  q  s|    	AAXXF&&)*++H $$Q**Gzz!Q))!,,Hgx00000rA   z
start, end))r   rl   )r   r   )rl   r   )rl   r   Nrl   )rl   NrB   c                    t          dt                      fdt                      fdt                      fgdd          }|| |         }t          |t                     sJ |j        |j        | |         k    sJ t          |j                                                  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   r1  )r!   r`   r   r   ra  listr   itemsrR   r   r   r   )startendr   
pipe_slicepipe_paramspipe_slice_paramsr   s          r?   test_pipeline_sliceri  ~  s    
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   r1  r   foobar)r`   r   r!   r   r   
IndexErrorKeyError)r   r   r   s      r?   test_pipeline_indexrn    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 )
Nr4  mock2ra  r4  )junkrG   zJLast step of Pipeline should implement fit or be the string 'passthrough'.r   rl   z0This 'Pipeline' has no attribute 'fit_transform')r`   r!   r   ra  rW   r   r   r   r   r   rN   r   r   )r\  r]  r   r   s       r?   test_set_pipeline_stepsrt    s\   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   rn   r4  ro   rp  values)r`   rk   r!   r   r4  ro   rv  )r   mult2r   s      r?   test_pipeline_named_stepsrx    s    XXFaLLLE&&)FE?;<<H X)))))(.....$....$---- (F+fe_=>>H&f4444$------rA   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 )Nrl   r   rn   r      m2badm3m5)r{  r|  r}  r~  c                     g | ]\  }}|S rG   rG   ).0name_s      r?   
<listcomp>z9test_pipeline_correctly_adjusts_steps.<locals>.<listcomp>  s    777WT1D777rA   )rx   r   rk   r!   rN   ra  )	r   rL   rM   rw  mult3mult5r   expected_namesactual_namess	            r?   %test_pipeline_correctly_adjusts_stepsr    s    
1#A
!AaLLLEaLLLEaLLLE
,tUmdE]K H LLA...N77777L\))))))rA   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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 )Nrl   r   rn   r   rz  c                  4    t          d fdfdfg          S )Nr{  r}  last)r!   )rw  r  r  s   r?   makez0test_set_pipeline_step_passthrough.<locals>.make  s$    $uGHHHrA      r}  rM  Tr   F)	ra  r{  r}  r  r_  m2__mult
last__multtransform_inputr`  r{  )r   r   r   r]   r   )r     z''str' object has no attribute 'predict'z*This 'Pipeline' has no attribute 'predict'r   r   r{  r}  r  )rx   r   rk   r3   r   rN   r   rc   rW   rR   ra  r"  r]   r   r   r   r   r   r  r  r!   )r   rL   rM   r  r   expother_methodsr+  r  r  r  rw  r  r  s              @@@r?   "test_set_pipeline_step_passthroughr    s!   
1#A
!A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   O11O58O5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 )Nrz  r   r   r   r   r   rc   )	r"   rk   r   r]   rc   r`   hasattrra  rZ   )r   s    r?   test_pipeline_ducktypingr  D  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5rA   c                     t                      } t                      }t          | |          }t          |t                    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ t          | |t                                }t          |t                    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ d S )Nr   ztransf-1rl   ztransf-2r   	fitparamt)r`   r"   r   r!   ra  r   )t1t2r   s      r?   test_make_pipeliner  `  s    	B	BR  DdH%%%%%:a=z)))):a=z))))R--DdH%%%%%:a=z)))):a=z)))):a={******rA   zpipeline, check_estimator_typec                 .    t          |           j        d u S r:   )r+   estimator_typeests    r?   <lambda>r  v  s    4< rA   c                     | j         d u S r:   )_estimator_typer  s    r?   r  r  x  s    3#6$#> rA   c                 >    t          |             ||           sJ dS )zCheck that the estimator type returned by the pipeline is correct.

    Non-regression test as part of:
    https://github.com/scikit-learn/scikit-learn/issues/30197
    N)r   )r   check_estimator_types     r?   test_pipeline_estimator_typer  o  s,    & 	NNN)))))))rA   c                      t          g           } t                      }|                                }|                                 |k    sJ dS )zCheck that we propagate properly the tags in a Pipeline.

    Non-regression test as part of:
    https://github.com/scikit-learn/scikit-learn/issues/30197
    rq  N)r!   r   __sklearn_tags__)empty_pipelinebeexpected_tagss      r?   %test_sklearn_tags_with_empty_pipeliner    sQ     B'''N	B''))M**,,======rA   c                     t           j        } t           j        }t          ddd          }t	          d          }t          d|fd|fgdd	i
          }|                    | |           |                    |           }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   rl   r   r   r0  rM  rN  r4  r1     )r   r   r   r   r   r    rN   r]   r   r`   r2   r3   r7  r   )rL   rM   r   r0  r:  r;  X_fit_transformedX_fit_transformed_wo_methods           r?   test_feature_union_weightsr    s   	AA
1A
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??????rA   c                     t           } t          dt          d          fdt          d          fg          }t          dt          d          fdt          d          fgd          }t          dt          d          fdt          d          fgd          }|                    |            |                    |           }|j        d         t          |           k    sJ |                    |            |                    |           }|j        |j        k    sJ t          |                                |                                           |	                    |           }t          |                                |                                           |                    |           }t          |                                |                                           d S )	Nwordswordanalyzercharscharr   rK  r   )
JUNK_FOOD_DOCSr    r   rN   r]   r   r  r3   r8  r   )rL   r:  fs_parallelfs_parallel2r;  X_transformed_parallelX_transformed_parallel2s          r?   test_feature_union_parallelr    s   A	ov6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RrA   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__#   tr1rl   zDTransformer tr1 (type Transf) does not provide get_feature_names_outr   )r   r    rN   r  get_feature_names_outr  r`   r   r   r   r   r   )	word_vect	char_vectftfeature_namesfeatr   s         r?    test_feature_union_feature_namesr    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 )Nrl   r   classes_r   r   )r   r   r   r"   r   r   rN   r   r   r   r"  r   r3   r  rx   r  )rL   rM   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   rz  c                     dgS Nx3rG   input_featuress    r?   r  z.test_set_feature_union_steps.<locals>.<lambda>	      $ rA   c                     dgS Nx2rG   r  s    r?   r  z.test_set_feature_union_steps.<locals>.<lambda>
  r  rA   c                     dgS )Nx5rG   r  s    r?   r  z.test_set_feature_union_steps.<locals>.<lambda>  r  rA   r{  r}  rl   m2__x2m3__x3r~  m5__x5r4  )r9  mock__x3rr  mock__x5)	rk   r  r    r3   r]   rx   ry   r9  rW   )rw  r  r  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%=%=%?%?@@@@@rA   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  rG   r  s    r?   r  z2test_set_feature_union_step_drop.<locals>.<lambda>%  r  rA   c                     dgS r  rG   r  s    r?   r  z2test_set_feature_union_step_drop.<locals>.<lambda>&  r  rA   rl   r{  r}  r  r  dropr  r  )r{  r  )
rk   r  rx   ry   r    r3   rN   r]   r   rW   )rw  r  rL   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#;#;#=#=>>>>>rA   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  rG   r  s    r?   r  z4test_set_feature_union_passthrough.<locals>.<lambda>K  r  rA   c                     dgS r  rG   r  s    r?   r  z4test_set_feature_union_passthrough.<locals>.<lambda>L  r  rA   rl   r{  r}  r  r  r   r  
m2__myfeatmyfeatr  
m3__myfeat)r{  r   r  r   r  r  r   N)passthrough__f0passthrough__f1passthrough__f2passthrough__f3	pca__pca0	pca__pca1)f0f1f2f3)r   )r  r  r  r  pca__f0pca__f1pca__f2pca__f3)r   )passthrough__pca0passthrough__pca1r  r  r  r   rN  )rk   r  rx   ry   r    r3   rN   r]   r   rW   r   r   r   r   hstack)rw  r  rL   r  columnsr   X_fts          r?   "test_set_feature_union_passthroughr  D  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::
 
 
 
 
rA   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    rN   r3   r  rL   r   r  s      r?   9test_feature_union_passthrough_get_feature_names_out_truer    s    	A
1A
F
F
FC	s|%CD	E	EBFF1III	
 	
 	
 	  ""
 
 
 
 
rA   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	
 	
 	
 	  ""
 
 
 
 
rA   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.pandasrl   r   r   r<   r=   r  c                     | dg         S rT   rG   )rL   s    r?   r  zStest_feature_union_passthrough_get_feature_names_out_false_errors.<locals>.<lambda>  s    !SE( rA   c                 ,    t          j        dg          S rT   )rx   ry   )r>   r  s     r?   r  zStest_feature_union_passthrough_get_feature_names_out_false_errors.<locals>.<lambda>  s    bj#>O>O rA   )feature_names_outr  r  Fr  zvOutput feature names: ['a'] are not unique. Please set verbose_feature_names_out=True to add prefixes to feature namesr   N)r   importorskip	DataFramer$   r    r%   rN   r   r   r   r   r  )pdrL   select_aunionr   s        r?   Atest_feature_union_passthrough_get_feature_names_out_false_errorsr"    s>   		X	&	&B
q!fq!f%Sz::A".O.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  rM  c                     g | ]}d | S )frG   )r  is     r?   r  zdtest_feature_union_passthrough_get_feature_names_out_false_errors_overlap_over_5.<locals>.<listcomp>  s    0L0L0LQQ0L0L0LrA   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  rb  ranger    rN   r   r   r   r   r  )r  rL   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   r=   r   r<   ra  r9  r   rl   rG   )
rk   r!   r    r   r   r   rN   setattrr   rW   )error_message_1error_message_2error_message_3
bad_steps1
bad_steps2r   param
bad_steps3	bad_stepsmessager  s              r?   test_step_name_validationr5    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 )Nr<   r=   gMbP?)a__b__alphaa__brz  )a__stepsa__b__C)r!   r   rW   r   r   )	estimators    r?   test_set_params_nested_pipeliner<  2  sx    330@0@*A)B C CDEFFIU999C);)=)=#>"?KKKKKrA   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)NrM  locationr`  Tr   r   r   r   r_  r   transf_2)r   r   r   r   joblibMemoryr&   r   r!   r   rN   r   r   r3   r   r   r   r   r   r  shutilrmtree)rL   rM   cachedirr_  r   r   r   cached_pipetsclf_2rA  cached_pipe_2s               r?   test_pipeline_memoryrK  8  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 )NrM  r>  r@  r   )
r   rB  rC  r"   r   r&   r_  r  rD  rE  )rF  r_  r   s      r?   test_make_pipeline_memoryrM  w  s    yyH]Hb999F[]]CEE&AAAH?f$$$$[]]CEE22H?"""x==A
M(rA   c                   &    e Zd ZddZddZddZdS )FeatureNameSaverNc                 *    t          | |d           | S )NT)reset)r5   rK   s      r?   rN   zFeatureNameSaver.fit  s    T1D1111rA   c                     |S r:   rG   rK   s      r?   r]   zFeatureNameSaver.transform  r^   rA   c                     |S r:   rG   )r>   r  s     r?   r  z&FeatureNameSaver.get_feature_names_out  s    rA   r:   )rC   rD   rE   rN   r]   r  rG   rA   r?   rO  rO    sP                   rA   rO  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 passthroughrG  passr   r   rq  Nr1  )
r!   rO  r   r   rN   r   r   r3   r  r  )r   r   s     r?   test_features_names_passthroughrW    s    &(()#&(()
  D ;;DHHTY$$$SbS	''(:;;T=O    rA   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   rq  c                     g | ]}d |v S )pizzarG   )r  r   s     r?   r  z7test_feature_names_count_vectorizer.<locals>.<listcomp>  s    ...!A...rA   Nr1  )beerburgercoke	copyrightr[  thenonsense_is_ignored)r!   r   r   r  rN   r3   r  )r   rM   s     r?   #test_feature_names_count_vectorizerrb    s    FO$5$56@R@T@T8UVWWWD..~...AHH^QSbS	''))???   SbS	''(=>>???    rA   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`.notransrq  z&does not provide get_feature_names_outr   N)
r!   rI   r   rN   r   r   r   r   r   r  )r   r   r   s      r?   8test_pipeline_feature_names_out_error_without_definitionre    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   rl   r   )r"   r   r   r   r   rN   )r   s    r?   test_pipeline_param_errorrg    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   ra  r1  rl   N)r  r   ra  r   )r  r  patternr+  s       r?   	<genexpr>rj    s       < <gh sFm<p 	/!!C!! 	"sy}Q'33 	"o 	'6n 	"!!!q< <rA   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$)rk  r   )r   N)r   Nro   zw\[Pipeline\].*\(step 1 of 2\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 2\) Processing mult.* total=.*\n$)r   r   mult1rw  z\[FeatureUnion\].*\(step 1 of 2\) Processing mult1.* total=.*\n\[FeatureUnion\].*\(step 2 of 2\) Processing mult2.* total=.*\n$)rl  r  )r  r  z@\[FeatureUnion\].*\(step 1 of 1\) Processing mult2.* total=.*\n$)rN   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rl   r   r   )r3  rz  r  r  r   F)r`  zGot output for verbose=FalseT)r"  rW   
readouterroutr   r   )r  r+  ri  capsysfuncrL   rM   s          r?   test_verbosers    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5rA   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 	Nrl   r   r   r3  rz  r  r   rl   r   n_features_in_)r%   r   r"   r  rN   rw  )rL   rM   ssgbdtr   s        r?   test_n_features_in_pipelinerz    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-.......rA   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 ru  )r%   r#   r  rN   rw  )rL   rM   rx  rF  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6rA   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 )Nr<   r   r   rh   s       r?   rN   z;test_feature_union_fit_params.<locals>.DummyTransformer.fit?  s    c1X%%  KrA   c                     |S r:   rG   rK   s      r?   r]   zAtest_feature_union_fit_params.<locals>.DummyTransformer.transformD      HrA   r:   rC   rD   rE   rN   r]   rG   rA   r?   DummyTransformerr  >  s<        	 	 	 	
	 	 	 	 	 	rA   r  dummy0dummy1r   rU   )r   r   r   r   r   r    r   r   r   rN   r   r  rL   rM   r   s       r?   test_feature_union_fit_paramsr  <  s       +]    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metadatarl   r  rh   s       r?   rN   zQtest_feature_union_fit_params_without_fit_transform.<locals>.DummyTransformer.fitX  s    j!_,,  KrA   r:   ri   rG   rA   r?   r  r  W  s(        	 	 	 	 	 	rA   r  nofittransform0nofittransform1r   )r  rl   )	r'   r   r   r   r    r   r   r   r   r  s       r?   3test_feature_union_fit_params_without_fit_transformr  S  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 )Nrl   r   r   g?)pg?)r   r   r6  r   rx   randomchoicer   astypeboolnanr"   r   r   rN   r   )rL   rM   maskr   s       r?   %test_pipeline_missing_values_leniencyr  k  s     9>>T[--//qA9QFAGSz::AA$GGDfAdG*<*>*>??D88Aq>>1%%++++++rA   c                     ddgddgddgg} g d}dt                      fg}d	di}d
}t          ||          }t          j        t          |          5  |                    | |           d d d            d S # 1 swxY w Y   d S )Nrl   r   r   r3  rz  r  rv  r   transformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.rN  r   )r`   r    r   r   r   rN   )rL   rM   r9  weightsexpected_msgr!  s         r?   3test_feature_union_warns_unknown_transformer_weightr  u  s     Q!Q!Q A		A!688,-a G	5  )wGGGE	z	6	6	6  		!Q                 s   A77A;>A;c                 ~    t          | t                                }|                                j        j        rJ d S r:   )r"   r&   r  
input_tagspairwise)r   r   s     r?   test_pipeline_get_tags_noner    s;     cee,,D$$&&1::::::rA   	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   rz  rl      r  	predictor)rx   r  RandomStaterandnr   r!   r0   rN   r   r	   r3   r   r   approxr   r1   r   r   )r  rngrL   rM   modely_preds         r?   1test_search_cv_using_minimal_compatible_estimatorr    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FrA   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 rq   r   rK   s      r?   rN   z4test_pipeline_check_if_fitted.<locals>.Estimator.fit      DLKrA   Nri   rG   rA   r?   	Estimatorr    s#        	 	 	 	 	rA   r  r   )
r   r!   r   r   r   r6   rN   r   r   r   )r  r   s     r?   test_pipeline_check_if_fittedr    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.rl   r   r   r3  rz  r  rv  r   NrU  )r    r0   r   r   r   r6   rN   )rL   rM   r!  s      r?   "test_feature_union_check_if_fittedr    s    Q!Q!Q A		A5"4"6"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_rG   r  r  s     r?   r  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ErA   )dtype)superr  rx   ry   object)r>   r  rG  	__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TrA   r:   )rC   rD   rE   r  __classcell__)r  s   @r?   AddPrefixStandardScalarr    sG        	U 	U 	U 	U 	U 	U 	U 	U 	U 	UrA   r  c                     g | ]}d | S r  rG   r  s     r?   r  zLtest_pipeline_get_feature_names_out_passes_names_through.<locals>.<listcomp>  s!    *W*W*W4+>+>+>*W*W*WrA   N)	r   r   r   r%   r"   rN   r  r  r3   )rL   rM   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XrA   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r]   Nr1  )r   r  r   r"   r%   r   
set_outputrN   r  feature_names_in_r3   )rL   rM   r   r  log_reg_feature_namess        r?   $test_pipeline_set_output_integrationr    s    
!!!dt444DAq))+=+?+?@@DOOhO'''HHQNNNSbS	7799 H6(*?@@@@@rA   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  rN   r]   r   r  r3   r  r  index)r  rL   r  X_trainX_testr!  rR  s          r?   test_feature_union_set_outputr    s    		X	&	&Bdt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3rA   c                      t                      } t                      }t          d| fd|fddg          }|d         | u sJ |d         |u sJ |d         dk    sJ |d         dk    sJ d	S )
z8Check FeatureUnion.__getitem__ returns expected results.r  r   rU  )drop_mer  rV  r   r  r  N)r%   r   r    )r  r   r!  s      r?   test_feature_union_getitemr    s    F
%%CvCL#		
 E ?f$$$$<3=M))))v%%%%%%rA   keyr   c                     t          dt                      fdt                      fg          }d}t          j        t
          |          5  ||           ddd           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   rm  )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  rU  N)r   r  r   r%   rN   r    r  r3   r  r  to_numpy)rL   r  r  r!  X_arrays        r?   $test_feature_union_feature_names_in_r     s;    !!!dt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2rA   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   )rM  rz  )sizer   r   )r   z$Missing required positional argumentr   z$Cannot use both X and Xt. Use X only)rL   XtT)recorderrorzXt was renamed X in version 1.5)r  )rx   r  r  normalr!   r   r   r   r   r   rc   warningscatch_warningssimplefilterwarnsFutureWarningr   s     r?   .test_pipeline_inverse_transform_Xt_deprecationr  A  s   
	a  ''W'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T)enable_metadata_routingr+  rN   r   c                    d fd}d }t          j        ddgddgg          }t          j        ddg          }t          j        ddgg          }t          j        d	d
gg          }t          j        ddgg          } |            \  }}	}
}}|                    |||||            ||	ddg||            ||
ddg            ||ddg|dz   |            |||                     d          |dz   |           dS )zLTest that with transform_input, data is correctly transformed for each step.c                 v    t          |                               ||                              ||          S )z$Get a transformer with requests set.registryr   r  )r(   set_fit_requestset_transform_request)r  r   r  s      r?   get_transformerz6test_transform_input_pipeline.<locals>.get_transformer]  s;     !(333_=8_LL"""RR	
rA   c            
         t                      t                      t                      t                      f\  } }}}t           | dd           |dd           |dd           |dd          dg          }|| |||fS )zGet a pipeline and corresponding registries.

        The pipeline has 4 steps, with different request values set to test different
        cases. One is aliased.
        Tr  Fother_weightsr   r  )r)   r"   )
registry_1
registry_2
registry_3
registry_4r   r  s        r?   get_pipelinez3test_transform_input_pipeline.<locals>.get_pipelinee  s     KKKKKKKK	:
6
J
J OJdTJJJOJeeLLLOJdTJJJOJoPTUUU,-
 
 
 ZZCCrA   c                 B    | sJ | D ]}|D ]}t          |f||d| dS )zACheck that the right metadata was recorded for the given methods.)r+  parentN)r*   )r  methodsr  r;  r+  s        r?   check_metadataz5test_transform_input_pipeline.<locals>.check_metadataz  sl    ! 	 	I!  '!!  	   	 	rA   rl   r   r   r3  r   r  (   d      )r   r  r  rN   r]   r  r  N)rx   r   rN   split)r+  r  r  rL   rM   r   r  r  r   r  r  r  r   r  s                @r?   test_transform_input_pipeliner
  X  s   

 
 
D D D D D*
 
 
 	1a&1a&!""A
!QAHq!fX&&MHr2hZ((Mx#s%%H;G<>>8D*j*jHH		##     NUK(PX    N:{3444N	#a'	    NS#a'	     rA   c                      G d dt           t                    }  G d dt          t                    }t          j        ddgg          }t          j        ddg          }t          j        ddgg          }t          j        ddg          }t          d |             fd	 |                                d
d
          fgdg          }|                    ||||           dS )z;Test that the right transformed values are passed to `fit`.c                       e Zd Zd Zd ZdS )>test_transform_input_explicit_value_check.<locals>.Transformerc                     d| _         | S rq   r  rK   s      r?   rN   zBtest_transform_input_explicit_value_check.<locals>.Transformer.fit  r  rA   c                     |dz   S rZ  rG   r\   s     r?   r]   zHtest_transform_input_explicit_value_check.<locals>.Transformer.transform      q5LrA   Nr  rG   rA   r?   Transformerr    2        	 	 		 	 	 	 	rA   r  c                       e Zd ZddZdS )<test_transform_input_explicit_value_check.<locals>.EstimatorNc                 *   t          |t          j        ddgg                     t          |t          j        ddg                     t          |t          j        ddgg                     t          |t          j        ddg                     | S )Nrl   r   r   r   )r3   rx   r   r>   rL   rM   X_valy_vals        r?   rN   z@test_transform_input_explicit_value_check.<locals>.Estimator.fit  s    q"(QF8"4"4555q"(Aq6"2"2333ubhAx&8&8999ubh1v&6&6777KrA   rB   ri   rG   rA   r?   r  r    s(        	 	 	 	 	 	rA   r  r   rl   r   r  r;  Tr  r  r  r  N)r   r   r   rx   r   r!   r  rN   )r  r  rL   rM   r  r  r   s          r?   )test_transform_input_explicit_value_checkr    s       &       O]    	1a&A
!QAHq!fXEHaVEKKMM*))++55D5MMN	
 !	  D 	HHQeH,,,,,rA   c                  6   t          j        ddgddgg          } t          j        ddg          }d}t          j        t          |          5  t          t                      dg	                              | |           d
d
d
           d
S # 1 swxY w Y   d
S )z<Make sure the right error is raised if slep6 is not enabled.rl   r   r   r3  r   z;The `transform_input` parameter can only be set if metadatar   blahr  N)rx   r   r   r   r   r"   r   rN   )rL   rM   r   s      r?   test_transform_input_no_slep6r    s    
1a&1a&!""A
!QA
GC	z	-	-	- I IkmmfX>>>BB1aHHHI I I I I I I I I I I I I I I I I Is   3BBBc                  ,    G d dt           t                    }  G d dt          t                    }t          j        ddgg          }t          j        ddg          }t          j        ddgg          }t          j        ddg          }t          j        dd	gg          }t          j        ddg          }t          d
 |            fd |                                 dd          fgdg          }|                    ||||f||f           dS )zHTest that if metadata is a tuple of arrays, both arrays are transformed.c                       e Zd ZddZdS )-test_transform_tuple_input.<locals>.EstimatorNc                    t          |t                    sJ t          |t                    sJ t          |d         t          j        ddgg                     t          |d         t          j        ddg                     t          |d         t          j        ddgg                     t          |d         t          j        ddg                     d| _        | S )Nr   r   r   rl         T)r   tupler3   rx   r   r   r  s        r?   rN   z1test_transform_tuple_input.<locals>.Estimator.fit  s    eU+++++eU+++++uQxAq6(););<<<uQx1a&)9)9:::uQxB8*)=)=>>>uQx1a&)9)9:::DLKrA   rB   ri   rG   rA   r?   r  r     s(        		 		 		 		 		 		rA   r  c                       e Zd Zd Zd ZdS )/test_transform_tuple_input.<locals>.Transformerc                     d| _         | S rq   r  rK   s      r?   rN   z3test_transform_tuple_input.<locals>.Transformer.fit  r  rA   c                     |dz   S rZ  rG   r\   s     r?   r]   z9test_transform_tuple_input.<locals>.Transformer.transform  r  rA   Nr  rG   rA   r?   r  r&    r  rA   r  rl   r   r   rM  r"  r  r;  Tr  r  r  N)r   r   r   rx   r   r!   r  rN   )	r  r  rL   rM   X_val0y_val0X_val1y_val1r   s	            r?   test_transform_tuple_inputr-    sP   
 
 
 
 
O] 
 
 
    &    	1a&A
!QAX1vhFXq!fFXBxj!!FXq!fFKKMM*))++55D5MMN	
 !	  D 	HHQ&&)&&1AHBBBBBrA   )r   r   r   r   r   r   r]   rc   c                      G d dt                     }t          d |            fg          }t          j        t          d          5   t          ||           dgg           d d d            d S # 1 swxY w Y   d S )Nc                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS ):test_pipeline_warns_not_fitted.<locals>.StatelessEstimatorzStateless estimator that doesn't check if it's fitted.

        Stateless estimators that don't require fit, should properly set the
        `requires_fit` flag and implement a `__sklearn_check_is_fitted__` returning
        `True`.
        c                     | S r:   rG   rK   s      r?   rN   z>test_pipeline_warns_not_fitted.<locals>.StatelessEstimator.fit  s    KrA   c                     |S r:   rG   r\   s     r?   r]   zDtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.transform  r  rA   c                 D    t          j        t          |                    S r:   rx   onesr  r\   s     r?   r   zBtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict      73q66??"rA   c                 D    t          j        t          |                    S r:   r4  r\   s     r?   r   zHtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict_proba  r6  rA   c                 D    t          j        t          |                    S r:   rx   zerosr  r\   s     r?   r   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict_log_proba!  s    8CFF###rA   c                 D    t          j        t          |                    S r:   r4  r\   s     r?   r   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.decision_function$  r6  rA   c                     dS rZ  rG   rK   s      r?   r   z@test_pipeline_warns_not_fitted.<locals>.StatelessEstimator.score'  s    1rA   c                 D    t          j        t          |                    S r:   r4  r\   s     r?   r   zHtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.score_samples*  r6  rA   c                     |S r:   rG   r\   s     r?   rc   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.inverse_transform-  r  rA   N)rC   rD   rE   rF   rN   r]   r   r   r   r   r   r   rc   rG   rA   r?   StatelessEstimatorr0    s        	 		 	 		 	 		# 	# 	#	# 	# 	#	$ 	$ 	$	# 	# 	#	 	 		# 	# 	#	 	 	 	 	rA   r?  r;  z)This Pipeline instance is not fitted yet.r   rl   )r   r!   r   r  r  r"  )r+  r?  r   s      r?   test_pipeline_warns_not_fittedr@    s    ! ! ! ! !] ! ! !F k#5#5#7#789::D	m+V	W	W	W % %fse$$$% % % % % % % % % % % % % % % % % %s   	A22A69A6c                   d    e Zd Zd ZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZdS )SimpleEstimatorc                     dS rq   rG   rr   s    r?   rs   z%SimpleEstimator.__sklearn_is_fitted__<  rt   rA   Nc                 6    |
J |            |
J |            | S r:   rG   r>   rL   rM   r   props        r?   rN   zSimpleEstimator.fit?  s/    ((-(((rA   c                     |J |J |dz   S rZ  rG   rE  s        r?   r   zSimpleEstimator.fit_transformD  #    (((1urA   c                 T    |J |J t          j        t          |                    S r:   r4  rE  s        r?   r   zSimpleEstimator.fit_predictI  .    (((ws1vvrA   c                 T    |J |J t          j        t          |                    S r:   r4  r>   rL   r   rF  s       r?   r   zSimpleEstimator.predictN  rJ  rA   c                 T    |J |J t          j        t          |                    S r:   r4  rL  s       r?   r   zSimpleEstimator.predict_probaS  rJ  rA   c                 T    |J |J t          j        t          |                    S r:   r9  rL  s       r?   r   z!SimpleEstimator.predict_log_probaX  s0    (((xArA   c                 T    |J |J t          j        t          |                    S r:   r4  rL  s       r?   r   z!SimpleEstimator.decision_function]  rJ  rA   c                     |J |J dS rZ  rG   rE  s        r?   r   zSimpleEstimator.scoreb  s    (((qrA   c                     |J |J |dz   S rZ  rG   rL  s       r?   r]   zSimpleEstimator.transformg  rH  rA   c                     |J |J |dz
  S rZ  rG   rL  s       r?   rc   z!SimpleEstimator.inverse_transforml  rH  rA   rB   )rC   rD   rE   rs   rN   r   r   r   r   r   r   r   r]   rc   rG   rA   r?   rB  rB  9  s             
   
   
   
   
       
   
   
   
     rA   rB  r	  partial_fitc                    d }t          j        dgg          t          j        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|	                    ||||          }		  t          |	|           |||||           n-# t          $ r   t          |	|           ||||           Y nw xY wt          |dd||           t          |d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__requestrG   )r,   r"  )r  r+  kwargr  s       r?   set_requestz7test_metadata_routing_for_pipeline.<locals>.set_requestx  sf     &&&'/GGhG 	; 	;F1GC000011::E::::
rA   rl   r<   r=   Tr   rF  rN   r  trsr;  )r   rF  r  )objr+  r  r   r  r]   N)rx   r   rB  r(   r  r  set_inverse_transform_requestr!   rN   r"  r   r*   )
r+  rY  rL   rM   r   rF  r  r  r[  r   s
             r?   "test_metadata_routing_for_pipeliner^  s  s   
   8aSE??BHaSMMqA%&Cc4M 

C
+c6D
A
A
AC
+c54
@
@
@C	td	;	;		TD		A	A	&	&TD	&	I	I	  %S'9:;;HF<<1M<MM
!&!!qD8	
 	
 	
 	
 	
  
 
 
!&!!]	
 	
 	
 	
 	
 	

 #    #     s   "D '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.rl   r<   r;  zn[sample_weight, prop] are passed but are not explicitly set as requested or not requested for SimpleEstimator.r   rZ  N)	rB  r!   r   r   r   r   r   r"  r   )r+  rL   rM   r   rF  r  r   error_messages           r?   (test_metadata_routing_error_for_pipelinera    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   r]   rc   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   rl   r<   rZ  N)r!   rB  r   r   r   r"  )r+  r   s     r?   *test_routing_passed_metadata_not_supportedrc    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;  rl   N)r!   r   r   rN   r   r'  s    r?   %test_pipeline_with_estimator_with_lenre    sk     
%''	(;8N8P8P*QR D 	HHqcUQCLL1#rA   	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;  rl   r   r   N)r!   r$   rN   r]   )rf  r   s     r?   test_pipeline_with_no_last_steprh    sx     e0223k95MNOOD88aSEA3))A3aS/::sQC!oMMMMMMrA   c                     t          j        ddgddgddgg          } g d}g dd}}t          d	t                      fg          }d
t          j         d}t          j        t          t          j	        |                    5  |
                    | |||           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   rl   r   r3  r  rn  rl   rl   rl   r<   sub_transformerzb[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for z.fitr   r  NTz
.transform)rx   r   r    r(   rC   r   r   r   r   r   rN   r  r]   )rL   rM   r   r  feature_unionr`  s         r?   )test_feature_union_metadata_routing_errorrm    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.rk  N)r    r(   get_metadata_routing)rl  s    r?   3test_feature_union_get_metadata_routing_without_fitrp  	  s9     !#46J6L6L"M!NOOM&&(((((rA   r  c           	      t   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 ]5} | d         j
        }t          |          sJ |D ]}t          d|ddd| 6dS )z8Test that metadata is routed correctly for FeatureUnion.r   rl   r   r3  r  rn  rj  r<   
sub_trans1r  Tr  
sub_trans2rN   )r\  r+  r  NrG   )rx   r   r    r)   r  r  rN   r   r]   r9  r  r  r*   )	r  rL   rM   r   r  rl  kwargsr  	sub_transs	            r?   #test_feature_union_metadata_routingrv  $	  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#   	   		
 
rA   )rF   	itertoolsr   rD  r   r  tempfiler   rB  numpyrx   r   sklearnr   sklearn.baser   r   r   r   r	   r
   sklearn.clusterr   sklearn.datasetsr   sklearn.decompositionr   r   sklearn.dummyr   sklearn.ensembler   r   r   sklearn.exceptionsr   r   sklearn.feature_extraction.textr   sklearn.feature_selectionr   r   sklearn.imputer   sklearn.linear_modelr   r   r   sklearn.metricsr   r   sklearn.model_selectionr   sklearn.neighborsr   sklearn.pipeliner    r!   r"   r#   sklearn.preprocessingr$   r%   sklearn.svmr&   %sklearn.tests.metadata_routing_commonr'   r(   r)   r*   sklearn.utilsr+    sklearn.utils._metadata_requestsr,   r-   sklearn.utils._testingr.   r/   r0   r1   r2   r3   sklearn.utils.fixesr4   sklearn.utils.validationr5   r6   r   r   flags	writeabler   r  r8   rI   rZ   r`   re   rk   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r#  r(  markparametrizer,  r?  rC  rI  rP  rW  rY  ri  rn  rt  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r(  r5  r<  rK  rM  rO  rW  rb  re  rg  productparameter_grid_test_verbosers  rz  r|  r  r  r  r  r  r  r  r  r  r  r  r  slicer  r  r  r
  r  r  r-  r@  rB  sortedsetr^  ra  rc  re  rh  rm  rp  rv  rG   rA   r?   <module>r     sl        				                " " " " " "                # " " " " " & & & & & & 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                  # " " " " " G G G G G G G G                / . . . . . J J J J J J J J
 y{{!	 #      M   	 	 	 	 	e 	 	 	    "G   
    [       f       ]   2       .    &       =   ,Q Q Qh	 	 	  , , , > > >
6 
6 
63 3 36  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. . ." }(=>>* * ?>*" }(=>>M? M? ?>M?`6 6 68+ + + $	~~''););)=)=	>	>N	~~'')9)9););	<	<lKM..**++<<	
 
">>? * * *
> 
> 
>@ @ @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% % %. ---E?#;<<J J =< .-JZ ---- - .--BI I I ---$C $C .-$CX 	 	 	 &% &% &%Z6 6 6 6 6m 6 6 6t 66##g,,'=9Q*Q#R#RSS---= = .- TS=F 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 & &  .-& & &rA   