
    Q3jb                    H   d Z ddlZddlZddlZddlZddlmZ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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/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z?m@Z@mAZAmBZB ddlCmDZDmEZE ddlFmGZG ddlHmIZImJZJmKZKmLZL ddlMmNZN ddlOmPZPmQZQmRZRmSZS ddlTmUZUmVZV ddlWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^ ddl_m`Z` ddlambZbmcZc  e       Zddedj                  j                  _g        dedj                  j                  _g        d Zi G d! d"e      Zj G d# d$ej      Zk G d% d&eek      Zl G d' d(el      Zm G d) d*em      Zn G d+ d,ee      Zo G d- d.e      Zp G d/ d0em      Zq G d1 d2e      Zrd3 Zsej                  j                  d4 e@d5efg      d6f e@d5efd7g      d6f e@d8d5efg      d6f e@d9d5efg      d6f e@d:eEfd5 e       fg      d;f e?d5efd< e        fg      d6f e?d5 e       fd<e fg      d=f e?d>d<e fg      d=f e?d5efd8g      d6fg	      d?        Zvd@ ZwdA ZxdB ZydC ZzdD Z{dE Z|dF Z}dG Z~dH ZdI ZdJ ZdK ZdL ZdM ZdN Zej                  j                  dOg dP      dQ        Zej                  j                  dRe`      dS        ZdT ZdU ZdV ZddWZdX ZdY ZdZ Zej                  j                  d[g d\      d]        Zd^ Zd_ Zd` Zej                  j                  daddag      db        Zej                  j                  daddag      dc        Zdd Zde Zej                  j                  df eA eE        e6             ef eA eE        e5             ef eA eE             dg f e@g       dh fg      di        Zdj Zdk Zej                  j4                  dl        Zdm Zdn Zdo Zdp Zdq Zdr Zds Zdt Zdu Z G dv dwe      Zej                  j                  dxdydzg      ej                  j                  d{ eE        e       dagg d|}      d~               Zd Zd Zd Zd Z G d de      Zd Zd Zd Zd Zd  ej`                   e@d em       fd ep       fg      df e@d em       fdd ep       fg      df e@d em       fdd ep       fg      df e@d em       fdg      df e@dd eo       fg      df e@dd eo       fg      df e?d eo       fd eo       fg      df e?dd eo       fdg      dfgg d      D        Zej                  j                  de      d        Zd Zd Zd Zd Zd Zd Zej                  j                  daddag      d        Zej                  j                  deYeXg      d        Zd Zd Zd Zd Zej                  j                  ddydzg      d        Zd Zej                  j                  dd edd      g      d        Zd Zd Zej                  j                  d eS             d        Zd Z ed      ej                  j                  dddg      d               Z ed      d        Zd Z ed      d        Zej                  j                  dg d      d        Z G d de      Zej                  j                  d e eeV      ddhz
               ed      dń               Zej                  j                  d e eeV      ddhz
               ed      dƄ               Zej                  j                  dg dǢ      dȄ        Z ed      dɄ        Zej                  j                  dddag       ed      d˄               Z ed      d̄        Z ed      d̈́        Z ed      ej                  j                  deJeIg      dτ               ZedЄ        Zedф        Zed҄        Zy)z
Test the pipeline module.
    N)TemporaryDirectorymkdtemp)config_context)BaseEstimatorClassifierMixinTransformerMixincloneis_classifieris_regressor)MaxIterEstimatorRecordingAutoPropagatedCallbackRecordingCallbackskip_callback_test_if_wasm)KMeans)	load_iris)PCATruncatedSVD)DummyRegressor)HistGradientBoostingClassifierRandomForestClassifierRandomTreesEmbedding)NotFittedErrorUnsetMetadataPassedError)CountVectorizer)SelectKBest	f_classif)SimpleImputer)Nystroem)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)_atol_for_typeget_namespace_and_devicemove_to)yield_namespace_device_dtype_combinations)COMPOSITE_METHODSMETHODS)MinimalClassifierMinimalRegressorMinimalTransformer_array_api_for_testsassert_allcloseassert_array_almost_equalassert_array_equal)CSR_CONTAINERS)_check_feature_namescheck_is_fittedF)zthe pizza pizza beer copyrightzthe pizza burger beer copyrightz!the the pizza beer beer copyrightzthe burger beer beer copyrightzthe coke burger coke copyrightzthe coke burger burgerc                       e Zd ZdZddZy)NoFitz*Small class to test parameter dispatching.Nc                      || _         || _        y Nab)selfrG   rH   s      H/DATA/.local/lib/python3.12/site-packages/sklearn/tests/test_pipeline.py__init__zNoFit.__init__b   s        NN)__name__
__module____qualname____doc__rK    rL   rJ   rC   rC   _   s
    4rL   rC   c                   "    e Zd ZddZddZd Zy)NoTransNc                     | S rE   rR   rI   Xys      rJ   fitzNoTrans.fith       rL   c                 4    | j                   | j                  dS )NrF   rF   )rI   deeps     rJ   
get_paramszNoTrans.get_paramsk   s    VV$&&))rL   c                     |d   | _         | S NrG   rG   )rI   paramss     rJ   
set_paramszNoTrans.set_paramsn   s    rL   rE   F)rN   rO   rP   rY   r]   rb   rR   rL   rJ   rT   rT   g   s    *rL   rT   c                       e Zd Zd Zy)NoInvTransfc                     |S rE   rR   rI   rW   s     rJ   	transformzNoInvTransf.transformt       rL   N)rN   rO   rP   rh   rR   rL   rJ   re   re   s   s    rL   re   c                       e Zd Zd Zd Zy)Transfc                     |S rE   rR   rg   s     rJ   rh   zTransf.transformy   ri   rL   c                     |S rE   rR   rg   s     rJ   inverse_transformzTransf.inverse_transform|   ri   rL   N)rN   rO   rP   rh   rn   rR   rL   rJ   rk   rk   x   s    rL   rk   c                       e Zd ZddZy)TransfFitParamsNc                     || _         | S rE   )
fit_paramsrI   rW   rX   rr   s       rJ   rY   zTransfFitParams.fit   s    $rL   rE   rN   rO   rP   rY   rR   rL   rJ   rp   rp      s    rL   rp   c                   H    e Zd Zd	dZd Zd
dZd Zd Zd ZexZ	xZ
Zd
dZy)Multc                     || _         y rE   mult)rI   ry   s     rJ   rK   zMult.__init__   s	    	rL   c                      yNTrR   rI   s    rJ   __sklearn_is_fitted__zMult.__sklearn_is_fitted__       rL   Nc                     | S rE   rR   rV   s      rJ   rY   zMult.fit   rZ   rL   c                 F    t        j                  |      | j                  z  S rE   npasarrayry   rg   s     rJ   rh   zMult.transform       zz!}tyy((rL   c                 F    t        j                  |      | j                  z  S rE   r   rg   s     rJ   rn   zMult.inverse_transform   r   rL   c                 f    t        j                  |      | j                  z  j                  d      S )N   axis)r   r   ry   sumrg   s     rJ   predictzMult.predict   s'    

1		)..A.66rL   c                 ,    t        j                  |      S rE   r   r   rV   s      rJ   scorez
Mult.score   s    vvayrL   )r   rE   )rN   rO   rP   rK   r}   rY   rh   rn   r   predict_probapredict_log_probadecision_functionr   rR   rL   rJ   rv   rv      s9    ))7 =DCMC%(9rL   rv   c                   4    e Zd ZdZd ZddZd ZddZd	dZy)
	FitParamTzMock classifierc                     d| _         y )NF
successfulr|   s    rJ   rK   zFitParamT.__init__   s	    rL   c                      || _         d| _        y r{   )r   fitted_rI   rW   rX   should_succeeds       rJ   rY   zFitParamT.fit   s    (rL   c                     | j                   S rE   r   rg   s     rJ   r   zFitParamT.predict   s    rL   c                 L    | j                  |||       | j                  |      S )N)r   )rY   r   r   s       rJ   fit_predictzFitParamT.fit_predict   s"    An5||ArL   Nc                 :    |||z  }t        j                  |      S rE   r   )rI   rW   rX   sample_weights       rJ   r   zFitParamT.score   s     $M!AvvayrL   rc   rM   )	rN   rO   rP   rQ   rK   rY   r   r   r   rR   rL   rJ   r   r      s     rL   r   c                       e Zd ZdZd Zy)DummyTransfz(Transformer which store the column meansc                 p    t        j                  |d      | _        t        j                         | _        | S )Nr   r   )r   meanmeans_time
timestamp_rV   s      rJ   rY   zDummyTransf.fit   s(    ggaa( ))+rL   N)rN   rO   rP   rQ   rY   rR   rL   rJ   r   r      s
    2rL   r   c                   4    e Zd ZdZd Zd ZddZddZddZy)	DummyEstimatorParamsz,Mock classifier that takes params on predictc                      yr{   rR   r|   s    rJ   r}   z*DummyEstimatorParams.__sklearn_is_fitted__   r~   rL   c                     | S rE   rR   rV   s      rJ   rY   zDummyEstimatorParams.fit   rZ   rL   c                     || _         | S rE   got_attributerI   rW   r   s      rJ   r   zDummyEstimatorParams.predict       *rL   c                     || _         | S rE   r   r   s      rJ   r   z"DummyEstimatorParams.predict_proba   r   rL   c                     || _         | S rE   r   r   s      rJ   r   z&DummyEstimatorParams.predict_log_proba   r   rL   Nrc   )	rN   rO   rP   rQ   r}   rY   r   r   r   rR   rL   rJ   r   r      s    6rL   r   c                     t        dg      } t        j                  t              5  | j	                  dggdg       d d d        d}t        dt               fg      } t        j                  t        |      5  | j	                  dggdg       d d d        t               }t        d|fg      }|j                  d      t        dd d |d	|j                  d
      k(  sJ |j                  d       |j                  dk(  sJ |j                  J t        |       t               }t        t              }t        d|fd|fg      }|j                   d   |u sJ |j                   d   |u sJ d}t        dt               fd|fg      } t        j                  t        |      5  | j	                  dggdg       d d d        |j                  d       |j"                  dk(  sJ t        |       t%        j&                  d      }t        j                  t(        |      5  |j                  d       d d d        t+        |      }|j                   d   |j                   d   usJ |j                  d      }|j                  d      }|j                  d
      D ]  }|j-                  |        |j                  d
      D ]  }|j-                  |        |j-                  d       |j-                  d       |j-                  d       |j-                  d       ||k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)N)r   r   r   zRLast step of Pipeline should implement fit or be the string 'passthrough'.*NoFit.*clfmatchsvcTr\   )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__CrR   )r'   pytestraises	TypeErrorrY   rC   rT   r]   dictrb   rG   rH   reprr,   r   r   named_stepsCreescape
ValueErrorr	   pop)	pipelinemsgr   pipefilter1pipe2ra   params2xs	            rJ    test_pipeline_invalid_parametersr      s    !H	y	!qcUQC  
"	 
 %)*+H	y	,qcUQC  
- )CeS\N#D???% *Dc*-1__%_-H*   
 	OO3O55C<<55==J %C)$Ggw'%67D G$///E"c))) KC#wy)E3<89H	y	,qcUQC  
- 	OO3O55C<<J ))	C 
z	-% 
. $KEE"%*;*;E*BBBB __$_'FD)G__%_(

1 ) 5)A * JJu
JJwKKKKW[ 
"	! 
-	,< 
-	, 
.	-s/   L%7L2#L?M%L/2L<?M	Mzmeta_estimators, class_namepcar   )identNpassthroughr   )r   Nscaler+   svdr   )dropr   c                     t        |       } t        j                  d| d| d      }t        j                  t
        |      5  | j                  dgg       d d d        y # 1 sw Y   y xY w)Nz Expected an estimator instance (z"()), got estimator class instead (z).r   r   )r	   r   r   r   r   r   rY   )meta_estimators
class_namer   s      rJ   3test_meta_estimator_raises_class_not_instance_errorr   +  sb      O,O
))
*:, 7((2|2	7C 
y	,aSE" 
-	,	,s   A  A)c                      t         j                  } t         j                  }t        g       }d}t	        j
                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY w)Nz(The pipeline is empty. Please add steps.r   )irisdatatargetr'   r   r   r   rY   )rW   rX   r   r   s       rJ   test_empty_pipeliner   D  sI    		AAB<D
4C	z	-A 
.	-	-s   	A%%A.c                  <    t        g       } t        |       }d|v sJ y)z+Check that dir() works on an empty pipelinestepsN)r'   dir)r   attrss     rJ   test_empty_pipeline_dirr   N  s"    B<DIEerL   c                  *   t        j                  ddgg      } t        dt               fdt	               ff      }|j                  | d        |j                  |        |j                  d       |j                  | d        |j                  |        y )Nr      transfr   rX   r   )r   )r   arrayr'   rk   r   rY   r   rb   rW   r   s     rJ   test_pipeline_init_tupler   U  sw    
1a&Ah)E9;+?@ADHHQ$HJJqMOO=O)HHQ$HJJqMrL   c                  J   t         j                  } t         j                  }t               }t	        t
        d      }t        d|fd|fg      }|j                  | |       |j                  |        |j                  |        |j                  |        |j                  | |       y )Nr   kr   logistic)r   r   r   r!   r   r   r'   rY   r   r   r   r   )rW   rX   r   r   r   s        rJ   test_pipeline_methods_anovar   a  s    		AA

C)q)Ggw'*c):;<DHHQNLLOq1JJq!rL   c                     t        dt               fdt               fg      } | j                  d d d       | j	                  d       sJ | j
                  d   j                  J | j
                  d   j                  J t        j                  d      }t        j                  t        |      5  | j                  d d d       d d d        y # 1 sw Y   y xY w)Nr   r   T)rW   rX   clf__should_succeedz.fit() got an unexpected keyword argument 'bad'r   )clf__bad)r'   rk   r   rY   r   r   rG   rH   r   r   r   r   r   )r   r   s     rJ   test_pipeline_fit_paramsr   p  s    h)E9;+?@ADHHttH6<<H%''///H%''/// ))D
EC	y	,td+ 
-	,	,s   /CCc                     t        j                  ddgg      } t        dt               fdt	               fg      }|j                  | d        |j                  |       dk(  sJ |j                  | d       dk(  sJ |j                  | d d       dk(  sJ |j                  | t        j                  ddg            d	k(  sJ y )
Nr   r   r   r   r      )rX   r   r      )r   r   r'   rk   r   rY   r   r   s     rJ   %test_pipeline_sample_weight_supportedr     s    
1a&Ah)E9;+?@ADHHQ$H::a=A::a4: A%%%::a4t:4999::arxxA'7:8A===rL   c                     t        j                  ddgg      } t        dt               fdt	               fg      }|j                  | d        |j                  |       dk(  sJ |j                  | d       dk(  sJ t        j                  d      }t        j                  t        |	      5  |j                  | t        j                  ddg             d d d        y # 1 sw Y   y xY w)
Nr   r   r   r   r   r   r   z:score() got an unexpected keyword argument 'sample_weight'r   )r   r   r'   rk   rv   rY   r   r   r   r   r   r   )rW   r   r   s      rJ   'test_pipeline_sample_weight_unsupportedr     s    
1a&Ah)E46?;<DHHQ$H::a=A::at:,111
))P
QC	y	,

1BHHaV$4
5 
-	,	,s   +)CC&c                     t        dt               fg      } t        j                  d      }t	        j
                  t        |      5  | j                  d       d d d        t	        j
                  t        |      5  | j                  d       d d d        t        j                  d      }t	        j
                  t        |      5  | j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   y xY w)	NclszInvalid parameter 'fake' for estimator Pipeline(steps=[('cls', LinearRegression())]). Valid parameters are: ['memory', 'steps', 'transform_input', 'verbose'].r   nope)fake)fake__estimatorzInvalid parameter 'invalid_param' for estimator LinearRegression(). Valid parameters are: ['copy_X', 'fit_intercept', 'n_jobs', 'positive', 'tol'].)cls__invalid_param)r'   r    r   r   r   r   r   rb   )r   	error_msgs     rJ   $test_pipeline_raise_set_params_errorr    s    e-/012D 			*I
 
z	3V$ 
4
 
z	3/ 
4 			UI 
z	362 
4	3 
4	3
 
4	3 
4	3s$   C$=C0C<$C-0C9<Dc                  D   t         j                  } t         j                  }t               }t	        ddd      }t        d|fd|fg      }|j                  | |       |j                  |        |j                  |        |j                  |        |j                  | |       y )NfullmleT
svd_solvern_componentswhitenr   
classifier)r   r   r   r!   r   r'   rY   r   r   r   r   )rW   rX   r   r   r   s        rJ   $test_pipeline_methods_pca_classifierr    s    		AA

C
eD
ACeS\L##678DHHQNLLOq1JJq!rL   c                     t         j                  } t        ddd      }t        d      }t	        d|fd|fg      }|j                  |        |j                  |       j                  | j                  d   fk(  sJ |j                  |j                  |              t        |j                  |       |j                  |j                  |                    y )	Nr  r  Tr	  )noveltyr   lofr   )r   r   r   r%   r'   rY   score_samplesshapefit_transformr<   rh   )rW   r   r  r   s       rJ   #test_pipeline_score_samples_pca_lofr    s    		A eD
AC
T
*CeS\E3<01DHHQKa &&1771:-777GGCa !D&&q)3+<+<S]]1=M+NOrL   c                     t        j                  dgdgg      } t        j                  ddg      }t        t                     }|j	                  | |       d}d}t        j                  t        |      5 }|j                  |        d d d        t        j                  j                  t              sJ |t        |j                  j                        v sJ y # 1 sw Y   SxY w)Nr   r   z<'LogisticRegression' object has no attribute 'score_samples'z+'Pipeline' has no attribute 'score_samples'r   )r   r   r(   r!   rY   r   r   AttributeErrorr  
isinstancevalue	__cause__str)rW   rX   r   	inner_msg	outer_msg	exec_infos         rJ   4test_score_samples_on_pipeline_without_score_samplesr    s    
1#sA
!QA +-.DHHQNNI=I	~Y	791 
8 ioo//@@@IOO556666	 
8	7s   5CC"c                  |   t         j                  } t         j                  }| j                  d   }t	        t        j                  |            }t               }t        ddd      }t               }||fD ]  }t        d|fd|fg      }|j                  | |       |j                  |       }	|	j                  |fk(  sJ |j                  |       }
|
j                  ||fk(  sJ |j                  |       }|j                  ||fk(  sJ |j                  |       }|j                  ||fk(  sJ |j!                  | |        y )Nr   r   
randomizedT)r  r
  r  
preprocessr   )r   r   r   r  lenr   uniquer+   r   r!   r'   rY   r   r   r   r   r   )rW   rX   	n_samples	n_classesscalerr   r   preprocessingr   r   proba	log_probar   s                rJ   .test_pipeline_methods_preprocessing_classifierr+    s-   		AA
IBIIaL!IF
1d
CC

C #,6EFA ,,q/}},,,""1%{{y)4444**1-	9i"8888 2215 &&9i*@@@@

1a# 'rL   c                  8   t               } t        dd      }t               }t        dd      }| j                  t        j                        }|j                  |      }t        d|fd|fg      }|j                  t        j                        }t        ||       y )Nr   auto)random_staten_initr'  Kmeans)r+   r   r  r   r   r   r'   r=   )r'  kmscaler_for_pipelinekm_for_pipelinescaledseparate_predr   pipeline_preds           rJ   test_fit_predict_on_pipeliner7    s     F	Qv	.B )*!F;O !!$)),FNN6*M h 34x6QRSD$$TYY/Mm];rL   c                  d   t               } t        d      }t        d| fd|fg      }d}d}t        j                  t
        |      5 }t        |d       d d d        t        j                  j                  t
              sJ |t        |j                  j                        v sJ y # 1 sw Y   SxY w)	Nr  r
  r'  r   z)'Pipeline' has no attribute 'fit_predict'z+'PCA' object has no attribute 'fit_predict'r   r   )r+   r   r'   r   r   r  getattrr  r  r  r  )r'  r   r   r  r  r  s         rJ   0test_fit_predict_on_pipeline_without_fit_predictr;    s     F

 Ch'%67D;I=I	~Y	79m$ 
8ioo//@@@IOO556666 
8	7s   B&&B/c                     t        dt               fdt               fg      } | j                  d d dd       | j                  d   j
                  d   sJ | j                  d   j                  sJ d| j                  d   j
                  vsJ y )Nr   r   T)rW   rX   transf__should_get_thisr   should_get_thisr   )r'   rp   r   r   r   rr   r   r   s    rJ   -test_fit_predict_with_intermediate_fit_paramsr@  &  s     h 12UIK4HIJD
$$   H%001BCCCE"----4#3#3H#=#H#HHHHrL   method_name)r   r   r   c                     t        dt               fdt               fg      }|j                  d d        t	        ||       } |d d       |j
                  d   j                  sJ y )Nr   r   T)rW   r   )r'   rk   r   rY   r:  r   r   )rA  r   methods      rJ   (test_predict_methods_with_predict_paramsrD  2  sa     h)E3G3I+JKLDHHT4T;'F
T&E"0000rL   csr_containerc                 (   t         j                  j                         }||j                  d      z  }t         j                  }t        dd      }t        d      }t        d|fd|fg      }|j                  ||       |j                  |      }|j                  |j                  d   d	fk(  sJ t        |d d d d
f   |j                  |             t        |d d d
f   |j                  ||      j                                t        d|fd|fg      } | |      }|j                  ||      }t        ||j                                t!        |      }	|j"                  d   d   |	j"                  d   d   usJ |j%                  d       |j                  ||      j                  |j                  d   dfk(  sJ t        dt'               fd|fd|fg      }|j                  ||      }|j                  |j                  d   dfk(  sJ d}
t        dt'               fdt)               fg      }t+        j,                  t.        |
      5  |j                  |       d d d        t        d|fd|ff      }|j                  ||       y # 1 sw Y   -xY w)Nr   r   r   r  r.  r   r   r   selectr   )	select__k   mockr   z>All estimators should implement fit and transform.*\bNoTrans\brh   no_transformr   )r   r   copyr   r   r   r   r&   rY   rh   r  r=   r  r>   raveltoarrayr	   transformer_listrb   rk   rT   r   r   r   )rE  rW   rX   r   rH  fsX_transformedX_spX_sp_transformedfs2r   s              rJ   test_feature_unionrW  @  so    			AQAA
AA
6C1F	s|h%78	9BFF1aLLLOM1771:q/111 mAssF3S5F5Fq5IJ}QU+V-A-A!Q-G-M-M-OP 
s|h%78	9BD''a0m-=-E-E-GH )Cq!!$C,@,@,CA,FFFF MMAMAq!''AGGAJ?::: 
)E3<(F9KL	MB$$Q*M1771:q/111 MC	VX.0KL	MB	y	,
q	 
- 
s|h%78	9BFF1aL 
-	,s   
JJc                  
   t               } t               }t        d| fd|fg      }|j                  d   | k(  sJ |j                  d   |k(  sJ |j                  j                  | k(  sJ |j                  j
                  |k(  sJ y)z6Check the behaviour of `named_transformers` attribute.r   noinvtransfN)rk   re   r&   named_transformersr   rY  )r   rY  rR  s      rJ   %test_feature_union_named_transformersr[  p  s    XF-K	&)M;+GH	IB  *f444  /;>>>   ''6111  ,,;;;rL   c                      t        d      } t               }t        | |      }t        |j                   \  }}|dk(  sJ || |fk(  sJ y )Nr  r9  )r   r   )r   rk   r)   ziprQ  )r   rL  funamestransformerss        rJ   test_make_unionra  }  sU    

 C8D	C	Br223E<%%%%C;&&&rL   c                  d   t        d      } t               }t        | |d      }|j                  t        | |      j                  k(  sJ d|j                  k(  sJ t        j                  d      }t        j                  t        |      5  t        | |ddd	
       d d d        y # 1 sw Y   y xY w)Nr  r9  r   n_jobszEmake_union() got an unexpected keyword argument 'transformer_weights'r   
   r   )r   rk   transformer_weights)
r   rk   r)   rQ  rd  r   r   r   r   r   )r   rL  r^  r   s       rJ   test_make_union_kwargsrh    s    

 C8D	Ca	(B*S$"7"H"HHHH		>> ))OC 
y	,3"2JK 
-	,	,s   B&&B/c                 4     t               } fd|_        |S )z>Helper to create a mock transformer with custom feature names.c                 H    t              D cg c]  } | 
 c}S c c}w rE   )range)input_featuresi	base_name
n_featuress     rJ   <lambda>z)create_mock_transformer.<locals>.<lambda>  s.    #(#49#4a9+aS#49 9s   )rk   get_feature_names_out)rn  ro  rL  s   `` rJ   create_mock_transformerrr    s    8D"D KrL   c                     t         j                  } t         j                  }t               }t	        d      }t        ||d      }|j                  rJ t        ||d      }|j                  | |       t        g d|j                                y )Nr   Fverbose_feature_names_outT)	pca__pca0	pca__pca1	pca__pca2	pca__pca3transf__transf0transf__transf1transf__transf2)
r   r   r   r   rr  r)   ru  rY   r>   rq  )rW   rX   r   rL  unionfu_unions         rJ   0test_make_union_passes_verbose_feature_names_outr    s{     			AA
%C"8,DsDEBE....#ttDHLLA	
 	&&(rL   c                  j   t         j                  } t        dd      }t        d|fg      }|j	                  |       j                  |       }|j                  |       }|j                  |       }t        ||       t        ||       |j                  |      }|j                  |      }t        ||       y )Nr   r  )r  r
  r   )	r   r   r   r'   rY   rh   r  r=   rn   )rW   r   r   X_transX_trans2X_trans3X_backX_back2s           rJ   test_pipeline_transformr    s     			A
1
0C%'H ll1o''*G%%a(H  #Hgx0gx0''0F##G,Gfg.rL   c                      t         j                  } t         j                  }t               }t	        d|fg      }|j                  | |      }|j                  | |      j                  |       }t        ||       y )NrL  )	r   r   r   rk   r'   r  rY   rh   r=   )rW   rX   r   r   r  r  s         rJ   test_pipeline_fit_transformr    sf    		AAXF&&)*+H $$Q*Gzz!Q))!,Hgx0rL   z
start, end))r   r   )r   r   )r   r   )r   r   Nr   )r   NrM   c                 :   t        dt               fdt               fdt               fgdd      }|| | }t        |t               sJ |j                  |j                  | | k(  sJ t        |j                  j                               t        |j                  j                               | | k(  sJ |j                  d      }|j                  d      }|d	= |d	= ||k(  sJ d
}t        j                  t        |      5  || |d    d d d        y # 1 sw Y   y xY w)Ntransf1transf2r   123T)memoryverboseFr   r   z*Pipeline slicing only supports a step of 1r   rI  )r'   rk   r   r  r   listr   itemsr]   r   r   r   )startendr   
pipe_slicepipe_paramspipe_slice_paramsr   s          rJ   test_pipeline_slicer    s'    
VX	FH 5y{7KLD
 eCJj(+++tzz%4444 	Z##))+,  &&()%4	5	5 //u/-K"--5-9G'"++++
6C	z	-U3r\ 
.	-	-s   ?	DDc                  j   t               } t               }t        d| fd|fg      }|d   | k(  sJ |d   | k(  sJ |d   |k(  sJ |d   |k(  sJ t        j                  t
              5  |d    d d d        t        j                  t              5  |d    d d d        y # 1 sw Y   1xY w# 1 sw Y   y xY w)Nr   r   r   rI  r   foobar)rk   r   r'   r   r   
IndexErrorKeyError)r   r   r   s      rJ   test_pipeline_indexr    s    XF
+Ch'%67D7f>V###8s??;# 
z	"Q 
# 
x	 X 
!	 	 
#	" 
!	 s   'BB)B&)B2c                     t               } t               }t        d| fg      }|j                  d   | u sJ d|fg|_        d|j                  vsJ |j                  d   |u sJ d|fg|j                  k(  sJ |j	                  d| fg       d| fg|j                  k(  sJ |j	                  |       d|fg|j                  k(  sJ |j	                  dg       t        j                  d      }t        j                  t        |      5  |j                  dggdg       d d d        d	}t        j                  t        |      5  |j                  dggdg       d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)
NrL  mock2r   rL  )junkrR   zJLast step of Pipeline should implement fit or be the string 'passthrough'.r   r   z0This 'Pipeline' has no attribute 'fit_transform')rk   r'   r   r   rb   r   r   r   r   r   rY   r  r  )r  r  r   r   s       rJ   test_set_pipeline_stepsr    s   hGhG&'*+,H'7222 ()HN-----(G333g8>>111 012W(..000 W%W(..000 |n-
))TC 
y	,qcUQC  
- =C	~S	1uqc* 
2	1	 
-	, 
2	1s   	E#E/#E,/E8c                     t               } t        d      }t        d| fd|fg      }d|j                  v sJ d|j                  vsJ |j                  j                  | u sJ |j                  j
                  |u sJ t        d| fd|fg      }|j                  j                  | usJ |j                  j
                  |u sJ y )Nr   rx   rL  ry   r  values)rk   rv   r'   r   rL  ry   r  )r   mult2r   s      rJ   test_pipeline_named_stepsr  -  s    XFaLE&&)FE?;<H X)))))(.....$$...$$--- (F+fe_=>H&&f444$$---rL   r   c                 V   t        j                  dgg      }t        j                  dg      }t        d      }t        d      }t        d      }t        d|fd| fd|fd	|fg      }|j	                  ||       g d
}|j
                  D 	cg c]  \  }}	|	 }
}}	||
k(  sJ y c c}	}w )Nr   r   rx   r      m2badm3m5)r  r  r  r  )r   r   rv   r'   rY   r   )r   rW   rX   r  mult3mult5r   expected_namesname_actual_namess              rJ   %test_pipeline_correctly_adjusts_stepsr  >  s    
1#A
!AaLEaLEaLE
,tUmdE]KH LLA.N(07WT1DL7\))) 8s   B%c                    t        j                  dgg      }t        j                  dg      }t        d      t        d      t        d      fd} |       }d}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             |j                  |        d	}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             |j                  d
      |j                  | d ddd dd	k(  sJ |j                  |        d}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             g d}|D ]  } t        ||      |        |j                         d	}t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg              |       }|j                  |        d}t        |gg|j                  ||      j                  |             t        |gg|j	                  ||             t        ||j                  |gg             d}d}	t        j                  t        |	      5 }
t        |d       d d d        t!        
j"                  j$                  t              sJ |t'        |
j"                  j$                        v sJ d	}t)        dfd| fdfg      }t        |gg|j	                  ||             t        |g|j                  |      j                  |             t        ||j                  |gg             y # 1 sw Y   xY w)Nr   r   rx   r   r  c                  ,    t        d fdfdfg      S )Nr  r  last)r'   )r  r  r  s   rJ   makez0test_set_pipeline_step_passthrough.<locals>.makeX  s!    $uGHHrL      r  re  Tr   F)	r   r  r  r  r  m2__mult
last__multtransform_inputr  r  )r   r   r   rh   r   )r     z''str' object has no attribute 'predict'z*This 'Pipeline' has no attribute 'predict'r   r   r  r  r  )r   r   rv   r>   r  rY   r   rn   rb   r]   r   r:  rh   r   r   r  r  r  r  r  r'   )r   rW   rX   r  r   expother_methodsrC  r  r  r  r  r  r  s              @@@rJ   "test_set_pipeline_step_passthroughr  P  s   
1#A
!AaLEaLEaLEI vH
Cw 6 6q! <=uhll1o55a89q(44seW=>;'
Cw 6 6q! <=uhll1o55a89q(44seW=>D)
. 
 
 
 ;'
Cw 6 6q! <=uhll1o55a89q(44seW=>M  !&!!$   5!
Cw 6 6q! <=uhll1o55a89q(44seW=>vH[)
CwQ 2 < <Q ?@w 6 6q! <=q(44seW=>9I<I	~Y	79)$ 
8ioo//@@@IOO556666 C${(;fe_MNHw 6 6q! <=uhll1o55a89q(44seW=> 
8	7s   #O>>Pc                     t        t        d            } | j                   | j                   | j                   t        t                     } t        | d      rJ | j                   | j                   t        d      } | j                  d   dk(  sJ t        | d      rJ | j                   | j                   t        t               t                     } t        | d      rJ | j                   t        | d      rJ t        t               t                     } t        | d      rJ | j                   t        | d      rJ y )Nr  r   r   r   r   rn   )	r(   rv   r   rh   rn   rk   hasattrr   re   )r   s    rJ   test_pipeline_ducktypingr    s   T!W%HVX&Hx+++]+H>>! >>>>x+++VX{}5Hx+++x!4555[]FH5Hx+++x!45555rL   c                     t               } t               }t        | |      }t        |t              sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ t        | |t                     }t        |t              sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ |j                  d   d   dk(  sJ y )Nr   ztransf-1r   ztransf-2r   	fitparamt)rk   r(   r  r'   r   r   )t1t2r   s      rJ   test_make_pipeliner    s    	B	BR DdH%%%::a=z)))::a=z)))R-DdH%%%::a=z)))::a=z)))::a={***rL   zpipeline, check_estimator_typec                 0    t        |       j                  d u S rE   r1   estimator_typeests    rJ   rp  rp    s    44<rL   c                 0    t        |       j                  d u S rE   r  r  s    rJ   rp  rp    s    8C=#?#?4#GrL   c                 .    t        |         ||       sJ y)zCheck that the estimator type returned by the pipeline is correct.

    Non-regression test as part of:
    https://github.com/scikit-learn/scikit-learn/issues/30197
    N)r   )r   check_estimator_types     rJ   test_pipeline_estimator_typer    s    & 	N)))rL   c                  z    t        g       } t               }|j                         }| j                         |k(  sJ y)zCheck that we propagate properly the tags in a Pipeline.

    Non-regression test as part of:
    https://github.com/scikit-learn/scikit-learn/issues/30197
    r  N)r'   r   __sklearn_tags__)empty_pipelinebeexpected_tagss      rJ   %test_sklearn_tags_with_empty_pipeliner    s:     B'N	B'')M**,===rL   c                  :   t         j                  } t         j                  }t        ddd      }t	        d      }t        d|fd|fgdd	i
      }|j                  | |       |j                  |       }t        d|fd|fgdd	i
      }|j                  | |      }t        dt               fd|fd|fgdd	i
      }|j                  | |      }t        |d d d df   d	|j                  |       z         t        |d d df   |j                  | |      j                                t        |d d d df   d	|j                  |       z         t        |d d df   |j                  | |      j                                |j                  | j                  d   dfk(  sJ y )Nr   r!  r   r  r
  r.  r   r   r   rH  re  rf  rL  rI     )r   r   r   r   r   r&   rY   rh   r  rk   r=   r>   rO  r  )rW   rX   r   rH  rR  rS  X_fit_transformedX_fit_transformed_wo_methods           rJ   test_feature_union_weightsr    s   		AA
1A
FC1F	
&)*
B FF1aLLLOM	
&)*
B ((A.	
&(	eS\Hf+=>#RL
B #%"2"21a"8 mAssF3R#:K:KA:N5NO}QU+V-A-A!Q-G-M-M-OP/3B37c>O>OPQ>R9RS(B/1E1Ea1K1Q1Q1ST&,,Q???rL   c                  "   t         } t        dt        d      fdt        d      fg      }t        dt        d      fdt        d      fgd      }t        dt        d      fdt        d      fgd      }|j                  |        |j	                  |       }|j
                  d   t        |       k(  sJ |j                  |        |j	                  |       }|j
                  |j
                  k(  sJ t        |j                         |j                                |j                  |       }t        |j                         |j                                |j	                  |       }t        |j                         |j                                y )	Nwordswordanalyzercharscharr   rc  r   )
JUNK_FOOD_DOCSr&   r   rY   rh   r  r#  r>   rP  r  )rW   rR  fs_parallelfs_parallel2rS  X_transformed_parallelX_transformed_parallel2s          rJ   test_feature_union_parallelr    s~    	A	ov67ov67	

B ov67ov67	
 K  ov67ov67	
 L FF1ILLOMq!SV+++OOA(2215"8">">>>>},,.0F0N0N0PQ +88;},,.0G0O0O0QR +44Q7},,.0G0O0O0QRrL   c                     t        d      } t        dd      }t        d|fd| fg      }|j                  t               |j	                         }|D ]  }d|v rd	|v rJ  t        |      d
k(  sJ t        dt               fg      j                  dgg      }t        j                  d      }t        j                  t        |      5  |j	                          d d d        y # 1 sw Y   y xY w)Nr  r  char_wb)r   r   )r  ngram_ranger  r  chars__words__#   tr1r   zDTransformer tr1 (type Transf) does not provide get_feature_names_outr   )r   r&   rY   r  rq  r#  rk   r   r   r   r   r  )	word_vect	char_vectftfeature_namesfeatr   s         rJ    test_feature_union_feature_namesr  A  s    0IGI	+gy-AB	CBFF>,,.MD I$555 }###	vx()	*	.	.u	5B
))NC 
~S	1
  " 
2	1	1s   	C##C,c                  B   t         j                  } t         j                  }t        t	        d      t                     }|j                  | |       t        j                  t              5  t        |d       d d d        t        t	        d      t        d            }t        j                  t              5  t        |d       d d d        |j                  | |       t        |j                  t        j                  |             y # 1 sw Y   xY w# 1 sw Y   QxY w)Nr   r   classes_r   r.  )r   r   r   r(   r   r    rY   r   r   r  r:  r!   r>   r  r   r$  )rW   rX   regr   s       rJ   test_classes_propertyr  T  s    		AA
a(*:*<
=CGGAqM	~	&Z  
' a(*<!*L
MC	~	&Z  
'GGAqMs||RYYq\2 
'	& 
'	&s   *D	8D	DDc                  f   t        d      } t        d      }t        d      }d |_        d | _        d |_        t        d| fd|fg      }t        ddgg|j	                  t        j                  d	gg                   t        d
dg|j                                d|fg|_        t        dgg|j	                  t        j                  d	gg                   t        dg|j                                |j                  d|fg       t        dgg|j	                  t        j                  d	gg                   t        dg|j                                |j                  |       t        dgg|j	                  t        j                  d	gg                   t        dg|j                                y )Nr   r   r  c                     dgS Nx3rR   rl  s    rJ   rp  z.test_set_feature_union_steps.<locals>.<lambda>i      $rL   c                     dgS Nx2rR   r  s    rJ   rp  z.test_set_feature_union_steps.<locals>.<lambda>j  r  rL   c                     dgS )Nx5rR   r  s    rJ   rp  z.test_set_feature_union_steps.<locals>.<lambda>k  r  rL   r  r  r   m2__x2m3__x3r  m5__x5rL  )rQ  mock__x3r  mock__x5)	rv   rq  r&   r>   rh   r   r   rQ  rb   )r  r  r  r  s       rJ   test_set_feature_union_stepsr  d  sl   GEGEGE"?E"?E"?E	e}tUm4	5BAxbjj1#.?!@A(+R-E-E-GH !%=/Bubll2::se+<=>z2#;#;#=> MMVUO#4M5ubll2::se+<=>
|R%=%=%?@ MMuMubll2::se+<=>
|R%=%=%?@rL   c                     t        d      } t        d      }d | _        d |_        t        j                  dgg      }t	        d| fd|fg      }t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        dd	g|j                                |j                  d
       t        dgg|j                  |      j                  |             t        dgg|j                  |             t        d	g|j                                |j                  d
       t        g g|j                  |      j                  |             t        g g|j                  |             t        g |j                                |j                  |       t        dgg|j                  |      j                  |             t	        dd|fg      }t        dgg|j                  |      j                  |             t        dgg|j                  |             t        d	g|j                                y )Nr   r   c                     dgS r  rR   r  s    rJ   rp  z2test_set_feature_union_step_drop.<locals>.<lambda>  r  rL   c                     dgS r   rR   r  s    rJ   rp  z2test_set_feature_union_step_drop.<locals>.<lambda>  r  rL   r   r  r  r	  r
  r   r  r  )r  r   )
rv   rq  r   r   r&   r>   rY   rh   r  rb   )r  r  rW   r  s       rJ    test_set_feature_union_step_dropr    s   GEGE"?E"?E


QC5A	e}tUm4	5BAx!4!4Q!78Ax!1!1!!45(+R-E-E-GHMMVMubffQi11!45ub..q12z2#;#;#=>MMVMtRVVAY0034tR--a01r23356 MMUMubffQi11!45 
~e}5	6BubffQi11!45ub..q12z2#;#;#=>rL   c                  
   t        d      } t        d      }d | _        d |_        t        j                  dgg      }t	        d| fd|fg      }t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        dd	g|j                                |j                  d
       t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        dd	g|j                  dg             |j                  d
       t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        ddg|j                  dg             |j                  |       t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        dd	g|j                  dg             t	        dd|fg      }t        ddgg|j                  |      j                  |             t        ddgg|j                  |             t        dd	g|j                  dg             t        j                  }|j                  d   }t        ddd      }t	        dd|fg      }t        ||j                  |      j                  |      ddd|f          t        ||j                  |      ddd|f          t        g d|j                  g d             |j                  d
       |j                  |      j                  |      }t        |t        j                  ||g             |j                  |      }t        |t        j                  ||g             t        g d|j                  g d             |j                  |       t        ||j                  |      j                  |      dd| df          t        ||j                  |      dd| df          t        g d|j                  g d             t	        dd|fgd
di      }t        |dz  |j                  |      j                  |      ddd|f          t        |dz  |j                  |      ddd|f          t        g d|j                  g d             y)z@Check the behaviour of setting a transformer to `"passthrough"`.r   r   c                     dgS r  rR   r  s    rJ   rp  z4test_set_feature_union_passthrough.<locals>.<lambda>  r  rL   c                     dgS r   rR   r  s    rJ   rp  z4test_set_feature_union_passthrough.<locals>.<lambda>  r  rL   r   r  r  r	  r
  r   r  
m2__myfeatmyfeatr  
m3__myfeat)r  r   r!  r   r  r   r   N)passthrough__f0passthrough__f1passthrough__f2passthrough__f3rv  rw  )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$  rf  )rv   rq  r   r   r&   r>   rY   rh   r  rb   r   r   r  r   hstack)r  r  rW   r  columnsr   X_fts          rJ   "test_set_feature_union_passthroughr*    s   GEGE #@E"?E


QC5A	e}tUm4	5BAx!4!4Q!78Ax!1!1!!45(+R-E-E-GHMM]M#Ax!4!4Q!78Ax!1!1!!45h/1I1I8*1UVMM]M#Ax!4!4Q!78Ax!1!1!!45	|$b&>&>z&J
 MMUMAx!4!4Q!78Ax!1!1!!45h/1I1I8*1UV 
,tUm<	=BAx!4!4Q!78Ax!1!1!!45h/1I1I8*1UV		AggajG
1A
FC	5s|D	EBq"&&)--a0HWH=>q"**1-a'k:;	
 	  !9:
 MMmM$66!9q!DtRYY1v./ADtRYY1v./		
 	  !9: MMcM"q"&&)--a0WHI>?q"**1-a'l;<	
 	  !9:
 
	'%6*A.
B q1ubffQi11!4Q[ABq1ub..q1!XgX+>?	
 	  !9:
rL   c                      t         j                  } t        ddd      }t        d|fdg      }|j	                  |        t        g d|j                                y)	zDCheck feature_names_out for verbose_feature_names_out=True (default)r   r!  r   r  r   r   )rv  rw  passthrough__x0passthrough__x1passthrough__x2passthrough__x3Nr   r   r   r&   rY   r>   rq  rW   r   r  s      rJ   9test_feature_union_passthrough_get_feature_names_out_truer2    sS    		A
1A
FC	s|%CD	EBFF1I	
 	  "
rL   c                      t         j                  } t        ddd      }t        d|fdgd      }|j	                  |        t        g d	|j                                y
)z;Check feature_names_out for verbose_feature_names_out=Falser   r!  r   r  r   r   Frt  )pca0pca1x0x1r  r  Nr0  r1  s      rJ   :test_feature_union_passthrough_get_feature_names_out_falser8  )  s[    		A
1A
FC	
56RW
B FF1I	
 	  "
rL   c                     t        j                  d      } | j                  ddgddggddg      }t        d d	 
      }t	        dt               fd|fgd      }|j                  |       t        j                  d      }t        j                  t        |      5  |j                          ddd       y# 1 sw Y   yxY w)zFCheck get_feature_names_out and non-verbose names and colliding names.pandasr   r   r   rG   rH   r(  c                     | dg   S r_   rR   rW   s    rJ   rp  zStest_feature_union_passthrough_get_feature_names_out_false_errors.<locals>.<lambda>E  s
    !SE(rL   c                 .    t        j                  dg      S r_   )r   r   )rI   r  s     rJ   rp  zStest_feature_union_passthrough_get_feature_names_out_false_errors.<locals>.<lambda>E  s    bjj#>OrL   )feature_names_outr  r  Frt  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+   rY   r   r   r   r   rq  )pdrW   select_ar}  r   s        rJ   Atest_feature_union_passthrough_get_feature_names_out_false_errorsrD  ?  s    			X	&B
q!fq!f%Sz:A".OH 
 	!D(#34"'E 
IIaL
))	UC
 
z	-##% 
.	-	-s   B66B?c                     t        j                  d      } | j                  t        t	        d            gt	        d      D cg c]  }d| 	 c}      }t        ddgd      }|j                  |       t        j                  d	      }t        j                  t        |
      5  |j                          ddd       yc c}w # 1 sw Y   yxY w)zLCheck get_feature_names_out with non-verbose names and >= 5 colliding names.r:  re  fr;  )r  r   )r  r   Frt  zOutput feature names: ['f0', 'f1', 'f2', 'f3', 'f4', ...] are not unique. Please set verbose_feature_names_out=True to add prefixes to feature namesr   N)r   r@  rA  r  rk  r&   rY   r   r   r   r   rq  )rB  rm  rW   r}  r   s        rJ   Ptest_feature_union_passthrough_get_feature_names_out_false_errors_overlap_over_5rG  V  s    			X	&B
d59o&%)0L)Q1QC)0LMA	 56"'E
 
IIaL
))	C 
z	-##% 
.	- 1M 
.	-s   C 
&CCc                   ,    e Zd ZddZddZddZddZy)DfOutTransformerc                     || _         y rE   offset)rI   rL  s     rJ   rK   zDfOutTransformer.__init__n  s	    rL   Nc                     | S rE   rR   rV   s      rJ   rY   zDfOutTransformer.fitq  rZ   rL   c                      || j                   z
  S rE   rK  rV   s      rJ   rh   zDfOutTransformer.transformt  s    4;;rL   c                     | S rE   rR   )rI   rh   s     rJ   
set_outputzDfOutTransformer.set_outputw  s	     rL   )g      ?rE   )rN   rO   rP   rK   rY   rh   rP  rR   rL   rJ   rI  rI  m  s    rL   rI  df_lib_namer:  polarsT1)r+   rI  r   )idsc                    t        j                  |       }|j                  g dg dd      }t        d|fdt	               fg      }|j                  |        |j                  |      }t        |j                        g dk(  sJ t        |j                        ddgk(  sJ |j                  d	
       t        j                  t        d      5  |j                  |       ddd       y# 1 sw Y   yxY w)a8  Check FeatureUnion behavior when transformers output duplicate column names.

    Check that an error is raised when verbose_feature_names_out is False.
    Check that no error is raised and columns are correctly prefixed when
    verbose_feature_names_out is True.

    Non-regression test for issue #32104
    )r   r   r   rK  rF   r  r  rh   )t1__at1__bt2__at2__brG   rH   Frt  z%Output feature names:.*are not uniquer   N)r   r@  rA  r&   r+   rP  r  r  r(  rb   r   r   )rQ  rS  df_libdfr^  df_ts         rJ   )test_feature_union_duplicate_column_namesr^  }  s       -F			<@	AB	bzD.*:#;<	=BMMKM( BD!EEEE 

Sz)))MMEM2	z)Q	R
 
S	R	Rs   C**C3c                  p   d} d}d}dt        d      fdt        d      fg}dt        d      fdt        d      fg}t        d	ft        d
ffD ]  \  }}dt        d      f|t        d      fg}|| f||f|||z  ffD ]x  \  }}	t        j                  t
        |	      5   |di ||ij                  dggdg       d d d         |di |dt        d      fgi}
t        |
||       t        j                  t
        |	      5  |
j                  dggdg       d d d        t        j                  t
        |	      5  |
j                  dggdg       d d d         |di |dt        d      fgi}
 |
j                  di ||i t        j                  t
        |	      5  |
j                  dggdg       d d d        t        j                  t
        |	      5  |
j                  dggdg       d d d        {  y # 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   xY w)Nz3Estimator names must not contain __: got \['a__q'\]z+Names provided are not unique: \['a', 'a'\]z=Estimator names conflict with constructor arguments: \['%s'\]a__qr   rH   r   rG   r   rQ  r   r   rR   )
rv   r'   r&   r   r   r   rY   setattrr  rb   )error_message_1error_message_2error_message_3
bad_steps1
bad_steps2r   param
bad_steps3	bad_stepsmessager  s              rJ   test_step_name_validationrk    s   LODOVO47#c47^4JQ.3Q.1J '*\;M,NO
UDGnud1g&67
))501#
Iw z9)ui()--seaS9 : 2#tAw 012CC	*z9!s# : z9!!A3%!- : 2#tAw 012CCNN0eY/0z9!s# : z9!!A3%!- :93#
 P :9 :9 :9 :9 :9s<   G: H9HHH+:HHHH(+H5c                      t        dt        dt               fg      fg      } | j                  dt                      | j                  dt	               fgd       y )NrG   rH   gMbP?)a__b__alphaa__br  )a__stepsa__b__C)r'   r   rb   r   r!   )	estimators    rJ   test_set_params_nested_pipelinerr    sX    330@*A)B CDEFIU9C);)=#>"?KrL   c                  n   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                  | |       |j                  | |       |j                  d   j                  }t        |j                  |       |j                  |              t        |j                  |       |j                  |              t        |j!                  |       |j!                  |              t        |j#                  | |      |j#                  | |             t        |j                  d   j$                  |j                  d   j$                         t'        |d      rJ |j                  | |       t        |j                  |       |j                  |              t        |j                  |       |j                  |              t        |j!                  |       |j!                  |              t        |j#                  | |      |j#                  | |             t        |j                  d   j$                  |j                  d   j$                         ||j                  d   j                  k(  sJ t        d      }	t               }
t        d	|
fd|	fg|      }|j                  | |       t        |j                  |       |j                  |              t        |j                  |       |j                  |              t        |j!                  |       |j!                  |              t        |j#                  | |      |j#                  | |             t        |j                  d   j$                  |j                  d	   j$                         ||j                  d	   j                  k(  sJ 	 t)        j*                  |       y # t)        j*                  |       w xY w)
Nre  locationr  r   r  r   logregr  r   transf_2)r   r   r   r   joblibMemoryr!   r   r'   r	   rY   r   r   r>   r   r   r   r   r   r  shutilrmtree)rW   rX   cachedirr  r   r   r   cached_pipetsclf_2rx  cached_pipe_2s               rJ   test_pipeline_memoryr    s~   		AAyH8 "= a0(E&M2XsODE6 2XsODVT 	1A$$X.994<<?K,?,?,BC4--a0+2K2KA2NO411!4k6S6STU6VW4::a+[->->q!-DEX&--{/F/Fx/P/W/W	
 68,,, 	14<<?K,?,?,BC4--a0+2K2KA2NO411!4k6S6STU6VW4::a+[->->q!-DEX&--{/F/Fx/P/W/W	
 [,,X6AAAAA #2= (#h%67
 	!Q 	4<<?M,A,A!,DE4--a0-2M2Ma2PQ""1%}'F'Fq'I	
 	4::a+]-@-@A-FGX&--%%j188	
 ]..z:EEEEEhhs   OP P4c                  @   t               } t        j                  | d      }t        t	               t               |      }|j                  |u sJ t        t	               t                     }|j                  J t        |      dk(  sJ t        j                  |        y )Nre  rt  rw  r   )
r   ry  rz  r(   r   r,   r  r#  r{  r|  )r}  r  r   s      rJ   test_make_pipeline_memoryr    s{    yH]]Hb9F[]CE&AH??f$$$[]CE2H??"""x=A
MM(rL   c                   $    e Zd ZddZddZddZy)FeatureNameSaverNc                 "    t        | |d       | S )NT)reset)r@   rV   s      rJ   rY   zFeatureNameSaver.fit  s    T1D1rL   c                     |S rE   rR   rV   s      rJ   rh   zFeatureNameSaver.transform  ri   rL   c                     |S rE   rR   )rI   rl  s     rJ   rq  z&FeatureNameSaver.get_feature_names_out  s    rL   rE   )rN   rO   rP   rY   rh   rq  rR   rL   rJ   r  r    s    rL   r  c                     t        dt               fddt               fg      } t               }| j	                  |j
                  |j                         t        | dd j                  |j                        |j                         y)z5Check pipeline.get_feature_names_out with passthroughr_  passr   r   r  NrI  )
r'   r  r!   r   rY   r   r   r>   rq  r  )r   r   s     rJ   test_features_names_passthroughr     su    &()#&()
D ;DHHTYY$Sb	''(:(:;T=O=OrL   c                  &   t        dt               fdt               fg      } t        D cg c]  }d|v  }}| j	                  t        |       t        | dd j                         g d       t        | dd j                  d      g d       yc c}w )	z5Check pipeline.get_feature_names_out with vectorizersvectr   r  pizzaNrI  )beerburgercoke	copyrightr  thenonsense_is_ignored)r'   r   r!   r  rY   r>   rq  )r   r   rX   s      rJ   #test_feature_names_count_vectorizerr  0  s    FO$56@R@T8UVWD-.~!A~A.HH^QSb	'')? Sb	''(=>? 	/s   Bc                     t        dt               fg      } t               }| j                  |j                  |j
                         d}t        j                  t        |      5  | j                          ddd       y# 1 sw Y   yxY w)zZCheck that error is raised when a transformer does not define
    `get_feature_names_out`.notransr  z&does not provide get_feature_names_outr   N)
r'   rT   r   rY   r   r   r   r   r  rq  )r   r   r   s      rJ   8test_pipeline_feature_names_out_error_without_definitionr  ?  s`     Iwy123D;DHHTYY$
2C	~S	1""$ 
2	1	1s   %A??Bc                      t        t                     } t        j                  t        d      5  | j                  dgdggddgddg       d d d        y # 1 sw Y   y xY w)Nz8Pipeline.fit does not accept the sample_weight parameterr   r   r   r   )r(   r!   r   r   r   rY   )r   s    rJ   test_pipeline_param_errorr  K  sV    
*,
-C	T
 	!qc
QF1a&9
 
 
s   AAc              #      K   | ]L  \  \  }}}t        ||      r8|d k(  r,t        |d      r t        |j                  d   d   t              s|||f N yw)r  r   rI  r   N)r  r  r   r   ).0r  patternrC  s       rJ   	<genexpr>r  S  sc      <3#gh sF/!C!syy}Q'3s 	'63#s   AAr   r   zv\[Pipeline\].*\(step 1 of 2\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 2\) Processing clf.* total=.*\n$)noopNz\[Pipeline\].*\(step 1 of 3\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 3\) Processing noop.* total=.*\n\[Pipeline\].*\(step 3 of 3\) Processing clf.* total=.*\n$)r  r   )r   N)r   Nry   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$)rY   r  r   zest, pattern, methodc                 F   t        | |      }g dg dg}dgdgg}| j                  d        |||       |j                         j                  rJ d       | j                  d        |||       t	        j
                  ||j                         j                        sJ y )	Nr   r   r   )rK  r  r  r  r   F)r  zGot output for verbose=FalseT)r:  rb   
readouterroutr   r   )r  rC  r  capsysfuncrW   rX   s          rJ   test_verboser    s    3D	IA
qc
ANN5N!AJ  "&&F(FF&NN4N AJ88GV..044555rL   c                     ddgddgddgg} g d}t               }t               }t        ||      }t        |d      rJ |j	                  | |       |j
                  |j
                  cxk(  rdk(  sJ  J t               }t               }t        ||      }|j	                  | |       |j
                  |j
                  cxk(  rdk(  sJ  J t        |d      rJ y 	Nr   r   r   rK  r  r  r   r   r   n_features_in_)r+   r   r(   r  rY   r  )rW   rX   ssgbdtr   s        rJ   test_n_features_in_pipeliner    s     Q!Q!Q AA		B)+DT"Dt-...HHQN""3"38q88888 
	B)+DT"DFF1aL""3"38q88888t-....rL   c                  j   ddgddgddgg} g d}t               }t        |      }t        |d      rJ |j                  | |       |j                  |j                  cxk(  rdk(  sJ  J t               }t        |      }|j                  | |       |j                  |j                  cxk(  rdk(  sJ  J y r  )r+   r)   r  rY   r  )rW   rX   r  r^  s       rJ    test_n_features_in_feature_unionr    s     Q!Q!Q AA		B	BBr+,,,FF1aL 1 16Q66666 
	B	BBFF1aL 1 16Q66666rL   c                      G d dt         t              } t        j                  t        j                  }}t        d |        fd |        fg      }t        j                  t              5  |j                  ||       d d d        t        j                  t              5  |j                  ||       d d d        |j                  ||d       |j                  ||d       y # 1 sw Y   fxY w# 1 sw Y   >xY w)Nc                       e Zd ZddZddZy)7test_feature_union_fit_params.<locals>.DummyTransformerNc                      |ddik7  rt         | S )NrG   r   r   rs   s       rJ   rY   z;test_feature_union_fit_params.<locals>.DummyTransformer.fit  s    c1X%  KrL   c                     |S rE   rR   rV   s      rJ   rh   zAtest_feature_union_fit_params.<locals>.DummyTransformer.transform      HrL   rE   rN   rO   rP   rY   rh   rR   rL   rJ   DummyTransformerr    s    	
	rL   r  dummy0dummy1r   r`   )r   r   r   r   r   r&   r   r   r   rY   r  r  rW   rX   r   s       rJ   test_feature_union_fit_paramsr    s    +]  99dkkqAx!1!34xAQAS6TUVA	z	"	a 
# 
z	"	1 
# EE!Q!EOOAqAO 
#	" 
#	"s   )C!C-!C*-C6c                  D    G d dt               } t        j                  t        j                  }}t	        d |        fd |        fg      }t        j                  t              5  |j                  ||d       d d d        |j                  ||d       y # 1 sw Y   xY w)Nc                       e Zd ZddZy)Mtest_feature_union_fit_params_without_fit_transform.<locals>.DummyTransformerNc                      |ddik7  rt         | S )Nmetadatar   r  rs   s       rJ   rY   zQtest_feature_union_fit_params_without_fit_transform.<locals>.DummyTransformer.fit  s    j!_,  KrL   rE   rt   rR   rL   rJ   r  r    s    	rL   r  nofittransform0nofittransform1r   )r  r   )	r-   r   r   r   r&   r   r   r   r  r  s       rJ   3test_feature_union_fit_params_without_fit_transformr    s    =  99dkkqA 0 23 0 23	
	A 
z	"	1q) 
# OOAq1O% 
#	"s   $BBc                     t         j                  j                         t         j                  j                         }} t        j
                  j                  ddg| j                  ddg      j                  t              }t        j                  | |<   t        t               t                     }|j                  | |      j                  | |      dkD  sJ y )Nr   r   r   g?)pg?)r   r   rN  r   r   randomchoicer  astypeboolnanr(   r   r!   rY   r   )rW   rX   maskr   s       rJ   %test_pipeline_missing_values_leniencyr    s     99>>T[[--/qA99QFAGGSz:AA$GDffAdG*<*>?D88Aq>1%+++rL   c                      ddgddgddgg} g d}dt               fg}d	di}d
}t        ||      }t        j                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY w)Nr   r   r   rK  r  r  r  r   transformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.rf  r   )rk   r&   r   r   r   rY   )rW   rX   rQ  weightsexpected_msgr}  s         rJ   3test_feature_union_warns_unknown_transformer_weightr    s{     Q!Q!Q AA!68,-a G	5  )wGE	z	6		!Q 
7	6	6s   A''A0c                 x    t        | t                     }|j                         j                  j                  rJ y rE   )r(   r,   r  
input_tagspairwise)r   r   s     rJ   test_pipeline_get_tags_noner    s3     ce,D$$&11:::::rL   	Predictorc                 \   t         j                  j                  d      }|j                  dd      t        j                  dgdz  dgdz  z         }}t        dt               fd |        fg      }|j                  ||       |j                  |      }t        |      rAt        |d       |j                  ||      t        j                  t        ||            k(  sJ y t        ||j!                                |j                  ||      t        j                  t#        ||            k(  sJ y )	Nr      r   r  r      r  	predictor)r   r  RandomStaterandnr   r'   r:   rY   r   r
   r>   r   r   approxr"   r<   r   r#   )r  rngrW   rX   modely_preds         rJ   1test_search_cv_using_minimal_compatible_estimatorr  $  s     ))


"C99RRXXqcAgb&89qA
+-	.ik0JKE 
IIaO]]1FU61%{{1a FMM.F2K$LLLL){{1a FMM(1f2E$FFFFrL   c                  ,    G d dt               } t        d |        fg      }t        j                  t              5  t        |       d d d        |j                  t        j                  t        j                         t        |       y # 1 sw Y   CxY w)Nc                       e Zd Zd Zy)0test_pipeline_check_if_fitted.<locals>.Estimatorc                     d| _         | S r{   r   rV   s      rJ   rY   z4test_pipeline_check_if_fitted.<locals>.Estimator.fit;      DLKrL   Nrt   rR   rL   rJ   	Estimatorr  :  s    	rL   r  r   )
r   r'   r   r   r   rA   rY   r   r   r   )r  r   s     rJ   test_pipeline_check_if_fittedr  9  sd    M 
 %-./H	~	&! 
'LLDKK(H 
'	&s   B

Bc                     ddgddgddgg} g d}t        dt               fg      }t        j                  t              5  t        |       d	d	d	       |j                  | |       t        |       t        d
g      }t        |       t        dt               fd
g      }t        j                  t              5  t        |       d	d	d	       |j                  | |       t        |       y	# 1 sw Y   xY w# 1 sw Y   3xY w)z1Check __sklearn_is_fitted__ is defined correctly.r   r   r   rK  r  r  r  r   Nr  )r&   r:   r   r   r   rA   rY   )rW   rX   r}  s      rJ   "test_feature_union_check_if_fittedr  F  s     Q!Q!Q AA5"4"6789E	~	& 
' 
IIaOE 123EE5"4"679PQRE	~	& 
' 
IIaOE 
'	& 
'	&s   C)7C5)C25C>c                  >   t         j                  t         j                  }}  G d dt              }t	         |       t                     }|j                  | |       t         j                  }|j                  |      }t        ||D cg c]  }d| 	 c}       yc c}w )zSCheck that pipeline passes names through.

    Non-regression test for #21349.
    c                         e Zd Zd fd	Z xZS )Ytest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalarc                     t         |   |      }t        j                  |D cg c]  }d| 	 c}t              S c c}w )Nr  
my_prefix_)dtype)superrq  r   r   object)rI   rl  r_  r  	__class__s       rJ   rq  zotest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_outg  s?    G11PE::uEutD62uEVTTEs   >rE   )rN   rO   rP   rq  __classcell__)r  s   @rJ   AddPrefixStandardScalarr  f  s    	U 	UrL   r  r  N)	r   r   r   r+   r(   rY   r  rq  r>   )rW   rX   r  r   input_namesr?  r  s          rJ   8test_pipeline_get_feature_names_out_passes_names_throughr  _  s    
 99dkkqAU. U
 02N4DEDHHQN$$K22;?(;*W;4Zv+>;*WX*Ws   B
c                  *   t        j                  d       t        dd      \  } }t        t	               t                     }|j                  d       |j                  | |       |dd j                         }|d   j                  }t        ||       y)z.Test pipeline's set_output with feature names.r:  Tas_frame
return_X_yrV  NrI  )r   r@  r   r(   r+   r!   rP  rY   rq  feature_names_in_r>   )rW   rX   r   r  log_reg_feature_namess        rJ   $test_pipeline_set_output_integrationr  t  s    
!dt4DAq)+=+?@DOOhO'HHQNSb	779 H66(*?@rL   
df_libraryc                    t        j                  |       }t        dd      \  }}t        |d      \  }}t	        dt               fdt               fg      }|j                  |        |j                  |       |j                  |      }t        ||j                        sJ t        |j                  |j                                | dk(  r!t        |j                  |j                         y	y	)
z'Test feature union with set_output API.Tr  r   r  scalarr   rV  r:  N)r   r@  r   r$   r&   r+   r   rP  rY   rh   r  rA  r>   r(  rq  index)r  librW   r  X_trainX_testr}  r  s           rJ   test_feature_union_set_outputr    s     

j
)Cdt4DAq&qq9OGV8^%56GHE	z*	IIgoof%Ggs}}---w(C(C(EFX7==&,,7 rL   c                      t               } t               }t        d| fd|fddg      }|d   | u sJ |d   |u sJ |d   dk(  sJ |d   dk(  sJ y	)
z8Check FeatureUnion.__getitem__ returns expected results.r  r   r  )drop_mer   r  r   r  r   N)r+   r   r&   )r  r   r}  s      rJ   test_feature_union_getitemr    s    F
%CvCL#		
E ?f$$$<3=M)))v%%%rL   keyr   c                     t        dt               fdt               fg      }d}t        j                  t
        |      5  ||     ddd       y# 1 sw Y   yxY w)z5Raise error when __getitem__ gets a non-string input.r  r   zOnly string keys are supportedr   N)r&   r+   r   r   r   r  )r  r}  r   s      rJ    test_feature_union_getitem_errorr    sG     8^%56GHE
*C	xs	+c
 
,	+	+s   AAc                  H   t        j                  d       t        dd      \  } }t               }|j	                  |        t        d|fg      }t        |d      sJ t        | j                  |j                         t        |j                  |j                         t        dg      }|j	                  |        t        |d      sJ t        | j                  |j                         | j                         }t        dg      }|j	                  |       t        |d      rJ y)zxEnsure feature union has `.feature_names_in_` attribute if `X` has a
    `columns` attribute.

    Test for #24754.
    r:  Tr  r   r  r  N)r   r@  r   r+   rY   r&   r  r>   r(  r  to_numpy)rW   r  r'  r}  X_arrays        rJ   $test_feature_union_feature_names_in_r    s     !dt4DAq F
JJqM7F+,-E5-...qyy%"9"9:v//1H1HI 123E	IIaL5-...qyy%"9"9: jjlG123E	IIgu12222rL   c                     t        j                  d      j                  dd      } t        j                  t
        d      5  t        dt        d       fdt        d	       fg      j                  |        d
d
d
       y
# 1 sw Y   y
xY w)z?Test that FeatureUnion raises error for 1D transformer outputs.r  r   r   z@Transformer 'b' returned an array or dataframe with 1 dimensionsr   rG   c                     | S rE   rR   r=  s    rJ   rp  z.test_feature_union_1d_output.<locals>.<lambda>  s    ArL   rH   c                     | d d df   S r  rR   r=  s    rJ   rp  z.test_feature_union_1d_output.<locals>.<lambda>  s    AadGrL   N)	r   arangereshaper   r   r   r&   r*   r  r=  s    rJ   test_feature_union_1d_outputr    sv    
		!Q"A	P
 	)+67)*;<=	

 -

 
 
s   5A??Bz(array_namespace, device_name, dtype_namec           	         t        | ||      \  }}t        j                  j                  d      }d\  }}|j	                  ||f      j                  |      }|j                  ||      }	d\  }
}t        dt        |
d      fdt        |d	      fg      }|j                  |      }t        d
      5  |j                  |	      }t        |t        d      }|j                  D ]K  \  }}dD ]A  }t        ||      st        t        ||            \  }}}||u sJ |t        |	      d   k(  rAJ  M 	 ddd       t!        |      }t#        ||       |j$                  ||
|z   fk(  sJ y# 1 sw Y   9xY w)zDTest that FeatureUnion with Array API-compatible transformers works.r   )r  re  )size)device)r  r   	nystroem1rG  	nystroem2r   T)array_api_dispatchcpu)xpr  )components_normalization_r   N)atol)r;   r   r  r  uniformr  r   r&   r   r  r   r4   rQ  r  r3   r:  r2   r<   r  )array_namespacedevice_name
dtype_namer$  r  rndr%  ro  X_npX_xpn_components_1n_components_2r}  X_np_transformedX_xp_transformedX_xp_transformed_npr  transattrtrans_xpr  trans_devicer'  s                          rJ   'test_feature_union_array_api_compliancer8    s    &o{JOJB
))


"C"Iz;;Y
3;4;;JGD::d6:*D%)"NN(QOP(QOP	
E **40	4	0 ..t4%&62eL 11KD%95$'0Ht,1-Ha $r>)>'+CD+I!+LLLL : 2	 
1 *%D$&9E$$')    
1	0s   4AE+<0E+-E++E4c                     t        dt               fdt        dd      fg      } t        |       j                  du sJ t        dt               fdt        d	      fg      } t        |       j                  d
u sJ t        dt               fddg      } t        |       j                  du sJ t        dd      } t        |       j                  du sJ y)zHCheck that FeatureUnion.array_api_support tag reflects its transformers.r'  nystroemr  r   rG  Tr   r   )r  Fr  )droppedr   r   r   N)r&   r+   r   r1   array_api_supportr   r)   )r}  s    rJ   (test_feature_union_array_api_support_tagr=    s     ~'(qqAB	
E E?,,444 ~'(La01	
E E?,,555 ~'(#	
E E?,,444 v}-EE?,,444rL   T)enable_metadata_routingrC  rY   r  c                    d fd}d }t        j                  ddgddgg      }t        j                  ddg      }t        j                  ddgg      }t        j                  d	d
gg      }t        j                  ddgg      } |       \  }}	}
}}|j                  |||||        ||	ddg||        ||
ddg        ||ddg|dz   |        ||| j                  d      |dz   |       y)zLTest that with transform_input, data is correctly transformed for each step.c                 ^    t        |       j                  ||      j                  ||      S )z$Get a transformer with requests set.registryr   r  )r.   set_fit_requestset_transform_request)rB  r   r  s      rJ   get_transformerz6test_transform_input_pipeline.<locals>.get_transformer:  s/     !(3_=8_L"""R	
rL   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.
        TrC  Fother_weightsr   r  )r/   r(   )
registry_1
registry_2
registry_3
registry_4r   rF  s        rJ   get_pipelinez3test_transform_input_pipeline.<locals>.get_pipelineB  s     KKKK	:
6
J
J JdTJJeeLJdTJJoPTU,-
 ZZCCrL   c                 F    | sJ | D ]  }|D ]  }t        |f||d|   y)zACheck that the right metadata was recorded for the given methods.)rC  parentN)r0   )rB  methodsr  rq  rC  s        rJ   check_metadataz5test_transform_input_pipeline.<locals>.check_metadataW  s=    x!I!'!! 	 " "rL   r   r   r   rK  r   r  (   d      )r   rH  r  rY   rh   rC  r  N)r   r   rY   split)rC  rN  rR  rW   rX   r   rH  r  r   rJ  rK  rL  rM  rF  s                @rJ   test_transform_input_pipelinerW  5  s   

D*
 	1a&1a&!"A
!QAHHq!fX&MHHr2hZ(Mxx#s%H;G>8D*j*jHH		##   UK(PX :{34	#a'	 S#a'	rL   c                      G d dt         t              }  G d dt        t              }t        j                  ddgg      }t        j                  ddg      }t        j                  ddgg      }t        j                  ddg      }t        d |        fd	 |       j                  d
d
      fgdg      }|j                  ||||       y)z;Test that the right transformed values are passed to `fit`.c                       e Zd Zd Zd Zy)>test_transform_input_explicit_value_check.<locals>.Transformerc                     d| _         | S r{   r  rV   s      rJ   rY   zBtest_transform_input_explicit_value_check.<locals>.Transformer.fit  r  rL   c                     |dz   S r  rR   rg   s     rJ   rh   zHtest_transform_input_explicit_value_check.<locals>.Transformer.transform      q5LrL   Nr  rR   rL   rJ   TransformerrZ        		rL   r^  c                       e Zd ZddZy)<test_transform_input_explicit_value_check.<locals>.EstimatorNc                    t        |t        j                  ddgg             t        |t        j                  ddg             t        |t        j                  ddgg             t        |t        j                  ddg             | S )Nr   r   r   r   )r>   r   r   rI   rW   rX   X_valy_vals        rJ   rY   z@test_transform_input_explicit_value_check.<locals>.Estimator.fit  sg    q"((QF8"45q"((Aq6"23ubhhAx&89ubhh1v&67KrL   rM   rt   rR   rL   rJ   r  ra    s    	rL   r  r   r   r   r  rq  Trd  re  rd  rI  N)r   r   r   r   r   r'   rD  rY   )r^  r  rW   rX   rd  re  r   s          rJ   )test_transform_input_explicit_value_checkrg    s    & O]  	1a&A
!QAHHq!fXEHHaVEKM*)+55D5MN	
 !	D 	HHQeH,rL   c                     t        j                  ddgddgg      } t        j                  ddg      }d}t        j                  t        |      5  t        t               dg	      j                  | |       d
d
d
       y
# 1 sw Y   y
xY w)z<Make sure the right error is raised if slep6 is not enabled.r   r   r   rK  r   z;The `transform_input` parameter can only be set if metadatar   blahrI  N)r   r   r   r   r   r(   r   rY   )rW   rX   r   s      rJ   test_transform_input_no_slep6rj    si    
1a&1a&!"A
!QA
GC	z	-kmfX>BB1aH 
.	-	-s   'B  B	c                      G d dt         t              }  G d dt        t              }t        j                  ddgg      }t        j                  ddg      }t        j                  ddgg      }t        j                  ddg      }t        j                  dd	gg      }t        j                  ddg      }t        d
 |       fd |        j                  dd      fgdg      }|j                  ||||f||f       y)zHTest that if metadata is a tuple of arrays, both arrays are transformed.c                       e Zd ZddZy)-test_transform_tuple_input.<locals>.EstimatorNc                    t        |t              sJ t        |t              sJ t        |d   t        j                  ddgg             t        |d   t        j                  ddg             t        |d   t        j                  ddgg             t        |d   t        j                  ddg             d| _        | S )Nr   r   r   r         T)r  tupler>   r   r   r   rc  s        rJ   rY   z1test_transform_tuple_input.<locals>.Estimator.fit  s    eU+++eU+++uQxAq6();<uQx1a&)9:uQxB8*)=>uQx1a&)9:DLKrL   rM   rt   rR   rL   rJ   r  rm    s    		rL   r  c                       e Zd Zd Zd Zy)/test_transform_tuple_input.<locals>.Transformerc                     d| _         | S r{   r  rV   s      rJ   rY   z3test_transform_tuple_input.<locals>.Transformer.fit  r  rL   c                     |dz   S r  rR   rg   s     rJ   rh   z9test_transform_tuple_input.<locals>.Transformer.transform  r]  rL   Nr  rR   rL   rJ   r^  rs    r_  rL   r^  r   r   r   re  ro  r  rq  Trf  rd  rI  N)r   r   r   r   r   r'   rD  rY   )	r  r^  rW   rX   X_val0y_val0X_val1y_val1r   s	            rJ   test_transform_tuple_inputrz    s    
O] 
&  	1a&A
!QAXX1vhFXXq!fFXXBxj!FXXq!fFKM*)+55D5MN	
 !	D 	HHQ&&)&&1AHBrL   )r   r   r   r   r   r  rh   rn   c                      G d dt               }t        d |       fg      }t        j                  t              5   t        ||       dgg       d d d        y # 1 sw Y   y xY w)Nc                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy):test_pipeline_warns_not_fitted.<locals>.StatelessEstimatorzStateless estimator that doesn't check if it's fitted.

        Stateless estimators that don't require fit, should properly set the
        `requires_fit` flag and implement a `__sklearn_check_is_fitted__` returning
        `True`.
        c                     | S rE   rR   rV   s      rJ   rY   z>test_pipeline_warns_not_fitted.<locals>.StatelessEstimator.fit  s    KrL   c                     |S rE   rR   rg   s     rJ   rh   zDtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.transform  r  rL   c                 >    t        j                  t        |            S rE   r   onesr#  rg   s     rJ   r   zBtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict      773q6?"rL   c                 >    t        j                  t        |            S rE   r  rg   s     rJ   r   zHtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict_proba  r  rL   c                 >    t        j                  t        |            S rE   r   zerosr#  rg   s     rJ   r   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.predict_log_proba  s    88CF##rL   c                 >    t        j                  t        |            S rE   r  rg   s     rJ   r   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.decision_function 	  r  rL   c                      yr  rR   rV   s      rJ   r   z@test_pipeline_warns_not_fitted.<locals>.StatelessEstimator.score	  s    rL   c                 >    t        j                  t        |            S rE   r  rg   s     rJ   r  zHtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.score_samples	  r  rL   c                     |S rE   rR   rg   s     rJ   rn   zLtest_pipeline_warns_not_fitted.<locals>.StatelessEstimator.inverse_transform		  r  rL   N)rN   rO   rP   rQ   rY   rh   r   r   r   r   r   r  rn   rR   rL   rJ   StatelessEstimatorr}    s4    				#	#	$	#		#	rL   r  rq  r   )r   r'   r   r   r   r:  )rC  r  r   s      rJ   test_pipeline_warns_not_fittedr    sT    !] !F k#5#789:D	~	&fse$ 
'	&	&s   AA#c                   b    e Zd Zd ZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZy)SimpleEstimatorc                      yr{   rR   r|   s    rJ   r}   z%SimpleEstimator.__sklearn_is_fitted__	  r~   rL   Nc                 *    |J |       |J |       | S rE   rR   rI   rW   rX   r   props        rJ   rY   zSimpleEstimator.fit	  s)    (7-7(%%rL   c                     |J |J |dz   S r  rR   r  s        rJ   r  zSimpleEstimator.fit_transform 	  #    (((1urL   c                 N    |J |J t        j                  t        |            S rE   r  r  s        rJ   r   zSimpleEstimator.fit_predict%	  ,    (((wws1vrL   c                 N    |J |J t        j                  t        |            S rE   r  rI   rW   r   r  s       rJ   r   zSimpleEstimator.predict*	  r  rL   c                 N    |J |J t        j                  t        |            S rE   r  r  s       rJ   r   zSimpleEstimator.predict_proba/	  r  rL   c                 N    |J |J t        j                  t        |            S rE   r  r  s       rJ   r   z!SimpleEstimator.predict_log_proba4	  s-    (((xxArL   c                 N    |J |J t        j                  t        |            S rE   r  r  s       rJ   r   z!SimpleEstimator.decision_function9	  r  rL   c                     |J |J yr  rR   r  s        rJ   r   zSimpleEstimator.score>	  s    (((rL   c                     |J |J |dz   S r  rR   r  s       rJ   rh   zSimpleEstimator.transformC	  r  rL   c                     |J |J |dz
  S r  rR   r  s       rJ   rn   z!SimpleEstimator.inverse_transformH	  r  rL   rM   )rN   rO   rP   r}   rY   r  r   r   r   r   r   r   rh   rn   rR   rL   rJ   r  r  	  s9    




 



rL   r  rV  partial_fitc                 >   d }t        j                  dgg      t        j                  dg      }}dgdd}}}t               } ||| dd      } ||ddd      }t               j	                  dd      j                  dd      j                  dd      }t        d	|fd
|fg      }	d| vr|	j                  ||||      }		  t        |	|       |||||       t        |dd||       t        |dd||       y# t        $ r  t        |	|       ||||       Y Bw xY w)z5Test that metadata is routed correctly for pipelines.c                 j    |t         v r
t         |   }n|g}|D ]  } t        | d| d      di |  | S )zSet requests for a given method.

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

    It should just ignore and pass through the data on transform.
    r  rq  r   r   r   N)r'   r*   rY   rh   )r  r   s     rJ   test_pipeline_with_no_last_stepr  	  sc     e023k95MNOD88aSEA3))A3aS/:sQC!oMMMrL   c                     t        j                  ddgddgddgg      } g d}g dd}}t        d	t               fg      }d
t        j                   d}t        j                  t        t        j                  |            5  |j                  | |||       ddd       t        d	t               j                  dd      fg      }d
t        j                   d}t        j                  t        t        j                  |            5  |j                  | |||      j                  | ||       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zCTest that the right error is raised when metadata is not requested.r   r   r   rK  r  r  r   r   r   rG   sub_transformerzb[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for z.fitr   rC  NTz
.transform)r   r   r&   r.   rN   r   r   r   r   r   rY   rD  rh   )rW   rX   r   r  feature_unionr  s         rJ   )test_feature_union_metadata_routing_errorr  	  sX    	1a&1a&1a&)*AA'8M !#46J6L"M!NOM	!!5!>!> ?t	E 
 
/ryy7O	P!QmhO 
Q ! "$&66"& 7 	
	M	  4 = =>j	J 
 
/ryy7O	Pq 	 	

)A]X)
F 
Q	P) 
Q	P( 
Q	Ps   D9(E9EEc                  P    t        dt               fg      } | j                          y)zaTest that get_metadata_routing() works regardless of the Child's
    consumption of any metadata.r  N)r&   r.   get_metadata_routing)r  s    rJ   3test_feature_union_get_metadata_routing_without_fitr  	  s'     !#46J6L"M!NOM&&(rL   r  c           	      d   t        j                  ddgddgddgg      }g d}g dd}}t        d	 | t               
      j	                  dd      j                  dd      fd | t               
      j	                  dd      j                  dd      fg      }||d} |j                  ||fi |  |j                  ||fi |   |j                  ||fi |j                  |fi | |j                  D ]4  } | d   j                  }t        |      sJ |D ]  }t        d|ddd|  6 y)z8Test that metadata is routed correctly for FeatureUnion.r   r   r   rK  r  r  r  rG   
sub_trans1rA  TrC  
sub_trans2rY   )r  rC  rP  NrR   )r   r   r&   r/   rD  rE  rY   r  rh   rQ  rB  r#  r0   )	r  rW   rX   r   r  r  kwargsrB  	sub_transs	            rJ   #test_feature_union_metadata_routingr   
  s_    	1a&1a&1a&)*AA'8M  Y[1 tdC&&TD&I	 Y[1 tdC&&TD&I		
M"  -(CFMa%f%M1///Ma%f%//<V<$55q>**8}}!I#  	 "	 6rL   c                     t        d      \  } }d}t               }t        dt               fddt	        |      fg      j                  |      j                  | |       |j                  d      d	k(  sJ |j                  d
      d	k(  sJ |j                  d      dd	|z   z   k(  sJ |j                  d      dd	|z   z   k(  sJ y)zpCheck that callbacks are propagated correctly for a pipeline.

    passthrough step is counted as one task.
    Tr  r   scr   r  max_itersetupr   teardownon_fit_task_beginon_fit_task_endN)r   r   r'   r+   r   set_callbacksrY   count_hooks)rW   rX   r  callbacks       rJ   test_pipeline_with_callbacksr  1
  s     %DAqH.0H>#$*$h78	
 mHcc!Qi(A---
+q000  34	Q\8RRRR 12i1x<6PPPPrL   c                  d   t        d      \  } }t               }t               j                  |      }d}t               }t	        |      j                  |      }t        d|fd|fg      j                  | |       |j                  d      dk(  sJ |j                  d	      dk(  sJ |j                  d
      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d	      dk(  sJ |j                  d
      d|z   k(  sJ |j                  d      d|z   k(  sJ y)z?Check that callbacks registered on steps are correctly invoked.Tr  r   r  r  r  r  r   r  r  r  N)r   r   r+   r  r   r'   rY   r  )rW   rX   sc_callbackr  r  est_callbackr  s          rJ   %test_pipeline_with_callbacks_on_stepsr  K
  sE    %DAq#%K			'	'	4BH$&L
H
-
;
;L
ICtRj5#,'(,,Q2""7+q000"":.!333""#671<<<""#45:::##G,111##J/1444##$78ALHHH##$56!h,FFFrL   c            	         t        d      \  } }t               5 }d}t        dt               fddt	        |      fgt        j                  |      	      }t               }|j                  |       |j                  | |       |j                  d
      }|j                  d      }t        |j                  d   d      rJ t               }|j                  |      j                  | |       |j                  d
      |dz
  k(  sJ |j                  d      |dz
  k(  sJ t        |j                  d   d      rJ 	 ddd       y# 1 sw Y   yxY w)zGCheck that callbacks don't break the caching mechanism of the pipeline.Tr  r   r  r   r  r  )ru  rw  r  r  _skl_callbacksr   N)r   r   r'   r+   r   ry  rz  r   r  rY   r  r  r   )rW   rX   r}  r  r   r  n_task_begin
n_task_ends           rJ   7test_pipeline_memory_callbacks_second_fit_same_pipeliner  d
  sH    %DAq		~'(.((;<
 ==(3
 348$A++,?@))*;<
4++D13CDDD 348$((A.##$78L1<LLLL##$56*q.HHH4++D13CDDDD1 
		s   DEE)r   )rQ   	itertoolsr   r{  r   tempfiler   r   ry  numpyr   r   sklearnr   sklearn.baser   r   r   r	   r
   r   sklearn.callback.tests._utilsr   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.kernel_approximationr   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/   r0   sklearn.utilsr1   sklearn.utils._array_apir2   r3   r4   r5    sklearn.utils._metadata_requestsr6   r7   sklearn.utils._testingr8   r9   r:   r;   r<   r=   r>   sklearn.utils.fixesr?   sklearn.utils.validationr@   rA   r   r   flags	writeabler   r  rC   rT   re   rk   rp   rv   r   r   r   r   markparametrizer   r   r   r   r   r   r   r   r  r  r  r  r+  r7  r;  r@  rD  rW  r[  ra  rh  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  thread_unsafer  r  r  r  r  r*  r2  r8  rD  rG  rI  r^  rk  rr  r  r  r  r  r  r  r  productparameter_grid_test_verboser  r  r  r  r  r  r  r  r  r  r  r  r  r  r  slicer  r  r  r8  r=  rW  rg  rj  rz  r  r  sortedsetr  r  r  r  r  r  r  r  r  r  r  rR   rL   rJ   <module>r     sY
    	   0    "   # & 3 ( 
 H ; < ( 1 L L 4 4 0 N N E   #  H   / J
 {!		 #   M 	e 	"G 
[ f ] 2 .& = ,Qh !	E3<.	!5)	E3<1	2E:	1E3<@	A5I	(5#,7	8%@	G^,ucen=	>@PQ	s|e\^%<=	>F	su~|'<=	>O	'%)>?	@.Q	s|%CD	EuM
##	, >
636P 7"<<,7	I D11 .9, :,^
<'L:/&
1 V8$+B." }(=>* ?*" }(=>M? ?M?`68+ $	~');)=	>N	~')9);	<lK.*+<	
 
"GH**
>@F *S *SZ#&3 A: ?Fnb(,&.&.}   8(<=')=9=  
 >4#.LL< ~		} 	 	%:<"3)"3"3 8VX.	0DEFN 8VX.	@TUVN !68,/	,N 8VX.>?N *VTV,<=>O 3fdf5EFGO w/'461BCDT /'461BDUVWSY0	
b 	0e3#< ~ /1LM6 N6/.7(.&0,$ }(=>; ?; '79J&KLG MG(
2Y*A  (';<8 =8"&$ E!QK 01 23@  .-/$	$N 5N -E?#;<J = .JZ -- .-BI -$C .$CV 	&%&%Z6m 6t 6#g,'=9Q*Q#RS-= . T=F 6#g,'=9Q*Q#RS-Q . TQ* E	B	B - . t]&;<-N . =N -%G .%GP -) .) -(*LM& .&Z Q Q2 G G0 E ErL   