
    lri=                       d Z ddlZddlZddlZddlZddlmZ ddlZddlZ	ddl
Z
ddlmZ 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l/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z= ddl>m?Z? ddl@mAZAmBZBmCZCmDZD ddlEmFZF ddlGmHZHmIZI ddlJmKZKmLZLmMZMmNZNmOZOmPZP ddlQmRZR ddlSmTZTmUZU  e            ZVdeVjW        jX        _Y        deVjZ        jX        _Y        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_          Z` G d( d)ee          Za G d* d+e          Zb G d, d-e_          Zc G d. d/e          Zdd0 Zed1 Zfd2 Zgd3 Zhd4 Zid5 Zjd6 Zkd7 Zld8 Zmd9 Znd: Zod; Zpd< Zqd= Zrd> Zse
jt        u                    d?g d@          dA             Zve
jt        u                    dBeR          dC             ZwdD ZxdE ZydF ZzddHZ{dI Z|dJ Z}dK Z~e
jt        u                    dLg dM          dN             ZdO ZdP ZdQ Ze
jt        u                    dRddRg          dS             Ze
jt        u                    dRddRg          dT             ZdU ZdV Ze
jt        u                    dW e9 e=             e.                      ef e9 e=             e-                      ef e9 e=                      dX f e8g           dY fg          dZ             Zd[ Zd\ Ze
jt        j        d]             Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zdf Zdg Zdh Zdi Zdj Z G dk dle          Zdm Zdn Zdo Zdp Zdq  ej         e8dr e_            fds eb            fg          dtf e8dr e_            fduds eb            fg          dvf e8dr e_            fdwds eb            fg          dvf e8dr e_            fdxg          dtf e8dydz ea            fg          d{f e8d|dz ea            fg          d{f e7d} ea            fd~ ea            fg          df e7dd~ ea            fdg          dfgg d          D             Ze
jt        u                    de          d             Zd Zd Zd Zd Zd Zd Ze
jt        u                    dRddRg          d             Ze
jt        u                    deLeKg          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 eeI          ddhz
                       ed          d                         Ze
jt        u                    d e eeI          ddhz
                       ed          d                         Ze
jt        u                    dg d          d             Z ed          d             Ze
jt        u                    dddRg           ed          d                         Z ed          d             Z ed          d             Z ed          e
jt        u                    deBeAg          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/bestrading.cuttalo.com/services/ml-inference/venv/lib/python3.11/site-packages/sklearn/tests/test_pipeline.py__init__zNoFit.__init__T   s        NN)__name__
__module____qualname____doc__r@    rA   r?   r8   r8   Q   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.fitZ       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_params`   s    rA   r:   F)rC   rD   rE   rN   rR   rW   rG   rA   r?   rI   rI   Y   sK           * * * *    rA   rI   c                       e Zd Zd ZdS )NoInvTransfc                     |S r:   rG   r>   rL   s     r?   	transformzNoInvTransf.transformf       rA   N)rC   rD   rE   r]   rG   rA   r?   rZ   rZ   e   s#            rA   rZ   c                       e Zd Zd Zd ZdS )Transfc                     |S r:   rG   r\   s     r?   r]   zTransf.transformk   r^   rA   c                     |S r:   rG   r\   s     r?   inverse_transformzTransf.inverse_transformn   r^   rA   N)rC   rD   rE   r]   rc   rG   rA   r?   r`   r`   j   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.fits   s    $rA   r:   rC   rD   rE   rN   rG   rA   r?   re   re   r   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__y   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   x   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                      t           j        } t           j        }t          g           }d}t	          j        t          |          5  |                    | |           d d d            d S # 1 swxY w Y   d S )Nz(The pipeline is empty. Please add steps.r   )irisdatatargetr!   r   r   r   rN   )rL   rM   r   r   s       r?   test_empty_pipeliner     s    	AAB<<D
4C	z	-	-	-  A                 s   A))A-0A-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)r   r   r   r   r   r   r!   rN   r   r   r   r   )rL   rM   r   r   r   s        r?   test_pipeline_methods_anovar   3  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   B  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   R  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   ]  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', 'tol'].)cls__invalid_param)r!   r   r   r   r   r   r   rW   )r   	error_msgs     r?   $test_pipeline_raise_set_params_errorr   j  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 		U 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   r0  r1  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   rB  )r   rB  r;  s      r?   %test_feature_union_named_transformersrD  B  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#   zipr:  )r   r5  funamestransformerss        r?   test_make_unionrJ  O  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#   r:  rM  r   r   r   r   r   )r   r5  rG  r   s       r?   test_make_union_kwargsrQ  X  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r   c                 <     t                      } fd|_        |S )z>Helper to create a mock transformer with custom feature names.c                 :    fdt                    D             S )Nc                     g | ]} | 	S rG   rG   ).0i	base_names     r?   
<listcomp>z=create_mock_transformer.<locals>.<lambda>.<locals>.<listcomp>j  s1     9 9 99a9 9 9rA   )range)input_featuresrW  
n_featuress    r?   <lambda>z)create_mock_transformer.<locals>.<lambda>j  s3     9 9 9 9#(#4#49 9 9 rA   )r`   get_feature_names_out)rW  r[  r5  s   `` r?   create_mock_transformerr^  g  s2    88D" " " " "D KrA   c                  >   t           j        } t           j        }t                      }t	          d          }t          ||d          }|j        rJ t          ||d          }|                    | |           t          g d|	                                           d S )Nr   Fverbose_feature_names_outT)	pca__pca0	pca__pca1	pca__pca2	pca__pca3transf__transf0transf__transf1transf__transf2)
r   r   r   r   r^  r#   ra  rN   r3   r]  )rL   rM   r   r5  unionfu_unions         r?   0test_make_union_passes_verbose_feature_names_outrk  p  s     		AA
%%C"8,,DsDEBBBE....#ttDDDHLLA	
 	
 	
 	&&((    rA   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_transformrr    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 )Nr5  )	r   r   r   r`   r!   r   rN   r]   r2   )rL   rM   r   r   rm  rn  s         r?   test_pipeline_fit_transformrt    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   r2  )r!   r`   r   r   r|  listr   itemsrR   r   r   r   )startendr   
pipe_slicepipe_paramspipe_slice_paramsr   s          r?   test_pipeline_slicer    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   r2  r   foobar)r`   r   r!   r   r   
IndexErrorKeyError)r   r   r   s      r?   test_pipeline_indexr    sn   XXF
++Ch'%677D7f>V####8s????;# 
z	"	"  Q               
x	 	   X                 s$   	BBB<	CCCc                     t                      } t                      }t          d| fg          }|j        d         | u sJ d|fg|_        d|j        vsJ |j        d         |u sJ d|fg|j        k    sJ |                    d| fg           d| fg|j        k    sJ |                    |           d|fg|j        k    sJ |                    dg           t          j        d          }t          j        t          |          5  |
                    dggdg           d d d            n# 1 swxY w Y   d	}t          j        t          |          5  |                    dggdg           d d d            d S # 1 swxY w Y   d S )
Nr5  mock2r|  r5  )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   r|  rW   r   r   r   r   r   rN   r   r   )rw  rx  r   r   s       r?   test_set_pipeline_stepsr    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   r5  ro   r  values)r`   rk   r!   r   r5  ro   r  )r   mult2r   s      r?   test_pipeline_named_stepsr    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   )rU  name_s      r?   rX  z9test_pipeline_correctly_adjusts_steps.<locals>.<listcomp>  s    777WT1D777rA   )rx   r   rk   r!   rN   r|  )	r   rL   rM   r  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   r  c                  4    t          d fdfdfg          S )Nr  r  last)r!   )r  r  r  s   r?   makez0test_set_pipeline_step_passthrough.<locals>.make*  s$    $uGHHHrA      r  rN  Tr   F)	r|  r  r  r  rz  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   r|  r#  r]   r   r   r   r   r  r  r  r!   )r   rL   rM   r  r   expother_methodsr,  r  r  r  r  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 )Nr  r   r   r   r   r   rc   )	r"   rk   r   r]   rc   r`   hasattrr|  rZ   )r   s    r?   test_pipeline_ducktypingr  s  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!   r|  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?   r\  r\    s    4< rA   c                 .    t          |           j        d u S r:   r  r  s    r?   r\  r\    s    8C==#?4#G 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    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
    r  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   r1  rN  rO  r5  r2     )r   r   r   r   r   r    rN   r]   r   r`   r2   r3   r8  r   )rL   rM   r   r1  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   rL  r   )
JUNK_FOOD_DOCSr    r   rN   r]   r   r  r3   r9  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  r]  r  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   r  c                     dgS Nx3rG   rZ  s    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__x5r5  )r:  mock__x3r  mock__x5)	rk   r]  r    r3   r]   rx   ry   r:  rW   )r  r  r  r  s       r?   test_set_feature_union_stepsr  6  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>W  r  rA   c                     dgS r  rG   r  s    r?   r\  z2test_set_feature_union_step_drop.<locals>.<lambda>X  r  rA   rl   r  r  r  r  dropr  r  )r  r  )
rk   r]  rx   ry   r    r3   rN   r]   r   rW   )r  r  rL   r  s       r?    test_set_feature_union_step_dropr  S  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>}  r  rA   c                     dgS r  rG   r  s    r?   r\  z4test_set_feature_union_passthrough.<locals>.<lambda>~  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__f3rb  rc  )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  rO  )rk   r]  rx   ry   r    r3   rN   r]   r   rW   r   r   r   r   hstack)r  r  rL   r  columnsr   X_fts          r?   "test_set_feature_union_passthroughr  v  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  )rb  rc  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  Fr`  )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_ari  r   s        r?   Atest_feature_union_passthrough_get_feature_names_out_false_errorsr4    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*  rN  c                     g | ]}d | S )frG   )rU  rV  s     r?   rX  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   r0  r1  r}  rY  r    rN   r   r   r   r   r]  )r2  rL   ri  r   s       r?   Ptest_feature_union_passthrough_get_feature_names_out_false_errors_overlap_over_5r8  (  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<   r|  r:  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_validationrE  >  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__br  )a__stepsa__b__C)r!   r   rW   r   r   )	estimators    r?   test_set_params_nested_pipelinerL  d  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          }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          }	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)
NrN  locationr{  r   r  r   logregrz  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   cachedirrz  r   r   r   cached_pipetsclf_2rR  cached_pipe_2s               r?   test_pipeline_memoryr\  j  sV   	AAyyH8 "=== a000(E&MM2XsODEE6 2XsODVTTT 	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 #222== (#h%67
 
 
 	!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 )NrN  rN  rQ  r   )
r   rS  rT  r"   r   r&   rz  r  rU  rV  )rW  rz  r   s      r?   test_make_pipeline_memoryr^    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>   rZ  s     r?   r]  z&FeatureNameSaver.get_feature_names_out  s    rA   r:   )rC   rD   rE   rN   r]   r]  rG   rA   r?   r`  r`    sP                   rA   r`  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 passthroughrH  passr   r   r  Nr2  )
r!   r`  r   r   rN   r   r   r3   r]  r  )r   r   s     r?   test_features_names_passthroughrh    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   r  c                     g | ]}d |v S )pizzarG   )rU  r   s     r?   rX  z7test_feature_names_count_vectorizer.<locals>.<listcomp>  s    ...!A...rA   Nr2  )beerburgercoke	copyrightrl  thenonsense_is_ignored)r!   r   r   r  rN   r3   r]  )r   rM   s     r?   #test_feature_names_count_vectorizerrs    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`.notransr  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_definitionrv    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_errorrx    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   r|  r2  rl   N)r  r   r|  r   )rU  r  patternr,  s       r?   	<genexpr>r{    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$)r|  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   mult1r  z\[FeatureUnion\].*\(step 1 of 2\) Processing mult1.* total=.*\n\[FeatureUnion\].*\(step 2 of 2\) Processing mult2.* total=.*\n$)r}  r  )r  r  z@\[FeatureUnion\].*\(step 1 of 1\) Processing mult2.* total=.*\n$)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   )r4  r  r  r  r   F)r{  zGot output for verbose=FalseT)r#  rW   
readouterroutr   r   )r  r,  rz  capsysfuncrL   rM   s          r?   test_verboser  3  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   r4  r  r  r   rl   r   n_features_in_)r%   r   r"   r  rN   r  )rL   rM   ssgbdtr   s        r?   test_n_features_in_pipeliner  C  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 r  )r%   r#   r  rN   r  )rL   rM   r  rG  s       r?    test_n_features_in_feature_unionr  Z  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.fitq  s    c1X%%  KrA   c                     |S r:   rG   rK   s      r?   r]   zAtest_feature_union_fit_params.<locals>.DummyTransformer.transformv      HrA   r:   rC   rD   rE   rN   r]   rG   rA   r?   DummyTransformerr  p  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  n  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.fit  s    j!_,,  KrA   r:   ri   rG   rA   r?   r  r    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       =    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   r7  r   rx   randomchoicer   astypeboolnanr"   r   r   rN   r   )rL   rM   maskr   s       r?   %test_pipeline_missing_values_leniencyr    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   r4  r  r  r  r   transformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.rO  r   )r`   r    r   r   r   rN   )rL   rM   r:  weightsexpected_msgri  s         r?   3test_feature_union_warns_unknown_transformer_weightr    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   r  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   r4  r  r  r  r   Nrf  )r    r0   r   r   r   r6   rN   )rL   rM   ri  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   rU  r  s     r?   rX  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>   rZ  rH  	__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?   rX  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]   Nr2  )r   r0  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   r0  r   r   r    r%   r   r  rN   r]   r   r1  r3   r  r]  index)r2  rL   r  X_trainX_testri  rm  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   rf  )drop_mer  rg  r   r  r  N)r%   r   r    )r  r   ri  s      r?   test_feature_union_getitemr  5  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   r  )r  ri  r   s      r?    test_feature_union_getitem_errorr  G  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  rf  N)r   r0  r   r%   rN   r    r  r3   r  r  to_numpy)rL   r  r  ri  X_arrays        r?   $test_feature_union_feature_names_in_r  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                  F   t          j        d                              dd          } t          j        t
          d          5  t          dt          d           fdt          d	           fg                              |            d
d
d
           d
S # 1 swxY w Y   d
S )z?Test that FeatureUnion raises error for 1D transformer outputs.r  r   r   z@Transformer 'b' returned an array or dataframe with 1 dimensionsr   r<   c                     | S r:   rG   r-  s    r?   r\  z.test_feature_union_1d_output.<locals>.<lambda>|  s    A rA   r=   c                     | d d df         S ru  rG   r-  s    r?   r\  z.test_feature_union_1d_output.<locals>.<lambda>}  s    AaaadG rA   N)	rx   arangereshaper   r   r   r    r$   r   r-  s    r?   test_feature_union_1d_outputr  r  s    
	!Q""A	P
 
 
 	 	 	)++667)*;*;<<=	
 	

 -


	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ABBB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_pipeline  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  rK  r,  s        r?   check_metadataz5test_transform_input_pipeline.<locals>.check_metadata  sl    ! 	 	I!  '!!  	   	 	rA   rl   r   r   r4  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    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 ru  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  rK  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   r4  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 ru  rG   r\   s     r?   r]   z9test_transform_tuple_input.<locals>.Transformer.transform  r  rA   Nr  rG   rA   r?   r  r1    r  rA   r  rl   r   r   rN  r-  r  rK  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_inputr8     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                    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.fitB  s    KrA   c                     |S r:   rG   r\   s     r?   r]   zDtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.transformE  r  rA   c                 D    t          j        t          |                    S r:   rx   onesr  r\   s     r?   r   zBtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predictH      73q66??"rA   c                 D    t          j        t          |                    S r:   r?  r\   s     r?   r   zHtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict_probaK  rA  rA   c                 D    t          j        t          |                    S r:   rx   zerosr  r\   s     r?   r   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict_log_probaN  s    8CFF###rA   c                 D    t          j        t          |                    S r:   r?  r\   s     r?   r   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.decision_functionQ  rA  rA   c                     dS ru  rG   rK   s      r?   r   z@test_pipeline_warns_not_fitted.<locals>.StatelessEstimator.scoreT  s    1rA   c                 D    t          j        t          |                    S r:   r?  r\   s     r?   r   zHtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.score_samplesW  rA  rA   c                     |S r:   rG   r\   s     r?   rc   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.inverse_transformZ  r  rA   N)rC   rD   rE   rF   rN   r]   r   r   r   r   r   r   rc   rG   rA   r?   StatelessEstimatorr;  :  s        	 		 	 		 	 		# 	# 	#	# 	# 	#	$ 	$ 	$	# 	# 	#	 	 		# 	# 	#	 	 	 	 	rA   rJ  rK  rl   )r   r!   r   r   r   r#  )r,  rJ  r   s      r?   test_pipeline_warns_not_fittedrK  ,  s    ! ! ! ! !] ! ! !F k#5#5#7#789::D	~	&	& % %fse$$$% % % % % % % % % % % % % % % % % %s   A00A47A4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__i  rt   rA   Nc                 6    |
J |            |
J |            | S r:   rG   r>   rL   rM   r   props        r?   rN   zSimpleEstimator.fitl  s/    ((-(((rA   c                     |J |J |dz   S ru  rG   rP  s        r?   r   zSimpleEstimator.fit_transformq  #    (((1urA   c                 T    |J |J t          j        t          |                    S r:   r?  rP  s        r?   r   zSimpleEstimator.fit_predictv  .    (((ws1vvrA   c                 T    |J |J t          j        t          |                    S r:   r?  r>   rL   r   rQ  s       r?   r   zSimpleEstimator.predict{  rU  rA   c                 T    |J |J t          j        t          |                    S r:   r?  rW  s       r?   r   zSimpleEstimator.predict_proba  rU  rA   c                 T    |J |J t          j        t          |                    S r:   rD  rW  s       r?   r   z!SimpleEstimator.predict_log_proba  s0    (((xArA   c                 T    |J |J t          j        t          |                    S r:   r?  rW  s       r?   r   z!SimpleEstimator.decision_function  rU  rA   c                     |J |J dS ru  rG   rP  s        r?   r   zSimpleEstimator.score  s    (((qrA   c                     |J |J |dz   S ru  rG   rW  s       r?   r]   zSimpleEstimator.transform  rS  rA   c                     |J |J |dz
  S ru  rG   rW  s       r?   rc   z!SimpleEstimator.inverse_transform  rS  rA   rB   )rC   rD   rE   rs   rN   r   r   r   r   r   r   r   r]   rc   rG   rA   r?   rM  rM  f  s             
   
   
   
   
       
   
   
   
     rA   rM  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_request  sf     &&&'/GGhG 	; 	;F1GC000011::E::::
rA   rl   r<   r=   Tr   rQ  rN   r  trsrK  )r   rQ  r  )objr,  r  r   r  r]   N)rx   r   rM  r(   r  r  set_inverse_transform_requestr!   rN   r#  r   r*   )
r,  rd  rL   rM   r   rQ  r  r  rf  r   s
             r?   "test_metadata_routing_for_pipelineri    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<   rK  zn[sample_weight, prop] are passed but are not explicitly set as requested or not requested for SimpleEstimator.r   re  N)	rM  r!   r   r   r   r   r   r#  r   )r,  rL   rM   r   rQ  r  r   error_messages           r?   (test_metadata_routing_error_for_pipelinerl    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`.rK  z1is only supported if enable_metadata_routing=Truer   rl   r<   re  N)r!   rM  r   r   r   r#  )r,  r   s     r?   *test_routing_passed_metadata_not_supportedrn    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.rf  rK  rl   N)r!   r   r   rN   r   r(  s    r?   %test_pipeline_with_estimator_with_lenrp  	  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.
    rf  rK  rl   r   r   N)r!   r$   rN   r]   )rq  r   s     r?   test_pipeline_with_no_last_steprs  	  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   r4  r  r  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_unionrk  s         r?   )test_feature_union_metadata_routing_errorrx   	  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.rv  N)r    r(   get_metadata_routing)rw  s    r?   3test_feature_union_get_metadata_routing_without_fitr{  I	  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   r4  r  r  ru  r<   
sub_trans1r  Tr  
sub_trans2rN   )rg  r,  r  NrG   )rx   r   r    r)   r  r  rN   r   r]   r:  r   r  r*   )	r  rL   rM   r   r  rw  kwargsr   	sub_transs	            r?   #test_feature_union_metadata_routingr  Q	  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   )r   )rF   	itertoolsr   rU  r   tempfiler   rS  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$  r)  markparametrizer-  r@  rD  rJ  rQ  r^  rk  rr  rt  r  r  r  r  r  r  r  r  r  r  r  thread_unsafer  r  r  r  r  r  r"  r(  r4  r8  rE  rL  r\  r^  r`  rh  rs  rv  rx  productparameter_grid_test_verboser  r  r  r  r  r  r  r  r  r  r  r  r  r  r  slicer  r  r  r  r%  r(  r8  rK  rM  sortedsetri  rl  rn  rp  rs  rx  r{  r  rG   rA   r?   <module>r     s        				               " " " " " "                # " " " " " & & & & & & 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..**++<<	
 
"GGH * * *
> 
> 
>@ @ @F *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 3@  ( ---E?#;<<J J =< .-JZ ---- - .--BI I I ---$C $C .-$CV 	 	 	 &% &% &%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   