
     hW                     F   d Z ddlmZ ddlZddlZddlZddlZddlZddlZ	ddl
mZ ddlZddlmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ dd	l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. ddl/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB  e:            ZCdZD G d d          ZE G d deE          ZF G d deF          ZG G d  d!eG          ZH G d" d#eH          ZI G d$ d%e          ZJ G d& d'e          ZK G d( d)eH          ZL G d* d+e          ZMd, ZNd- ZOd. ZPd/ ZQd0 ZRd1 ZSd2 ZTd3 ZUd4 ZVd5 ZWd6 ZXd7 ZYd8 ZZd9 Z[ej\        ]                    d:g d;          d<             Z^d= Z_d> Z`d? Zad@ ZbdA ZcdB Zdej\        ]                    dCg dD          dE             ZedF ZfdG ZgdH Zhej\        ]                    dIddIg          dJ             Ziej\        ]                    dIddIg          dK             ZjdL ZkdM ZldN ZmdO ZndP ZodQ ZpdR ZqdS ZrdT ZsdU ZtdV ZudW ZvdX Zw G dY dZ          Zx G d[ d\          Zyd] Zzd^ Z{d_ Z| G d` dae          Z}db Z~dc Zdd Zde Zdf  ej         e dg eH            fdh eK            fg          dif e dg eH            fdjdh eK            fg          dkf e dg eH            fdldh eK            fg          dkf e dg eH            fdmg          dif e dndo eJ            fg          dpf e dqdo eJ            fg          dpf e!dr eJ            fds eJ            fg          dtf e!duds eJ            fdvg          dwfgg dx          D             Zej\        ]                    dye          dz             Zd{ Zd| Zd} Zd~ Zd Zej\        ]                    dIddIg          d             Zej\        ]                    deeg          d             Zd Zd Zd Zd Zd ZdS )z
Test the pipeline module.
    )mkdtempN)sparse)assert_allcloseassert_array_equalassert_array_almost_equalMinimalClassifierMinimalRegressorMinimalTransformer)NotFittedError)train_test_split)check_is_fitted)cloneis_classifierBaseEstimatorTransformerMixin)PipelineFeatureUnionmake_pipeline
make_union)SVC)LocalOutlierFactor)LogisticRegressionLasso)LinearRegression)accuracy_scorer2_score)KMeans)SelectKBest	f_classif)DummyRegressor)PCATruncatedSVD)	load_iris)StandardScaler)CountVectorizer)HistGradientBoostingClassifier)SimpleImputer)zthe pizza pizza beer copyrightzthe pizza burger beer copyrightz!the the pizza beer beer copyrightzthe burger beer beer copyrightzthe coke burger coke copyrightzthe coke burger burgerc                       e Zd ZdZddZdS )NoFitz*Small class to test parameter dispatching.Nc                 "    || _         || _        d S Nab)selfr-   r.   s      W/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/tests/test_pipeline.py__init__zNoFit.__init__:   s        NN)__name__
__module____qualname____doc__r1    r2   r0   r)   r)   7   s.        44     r2   r)   c                   "    e Zd Zd ZddZd ZdS )NoTransc                     | S r+   r8   r/   Xys      r0   fitzNoTrans.fit@       r2   Fc                      | j         | j        dS )Nr,   r,   )r/   deeps     r0   
get_paramszNoTrans.get_paramsC   s    V$&)))r2   c                      |d         | _         | S )Nr-   r-   )r/   paramss     r0   
set_paramszNoTrans.set_paramsF   s    r2   NF)r4   r5   r6   r?   rC   rG   r8   r2   r0   r:   r:   ?   sF          * * * *    r2   r:   c                       e Zd Zd ZdS )NoInvTransfc                     |S r+   r8   r/   r=   s     r0   	transformzNoInvTransf.transformL       r2   N)r4   r5   r6   rM   r8   r2   r0   rJ   rJ   K   s#            r2   rJ   c                       e Zd Zd Zd ZdS )Transfc                     |S r+   r8   rL   s     r0   rM   zTransf.transformQ   rN   r2   c                     |S r+   r8   rL   s     r0   inverse_transformzTransf.inverse_transformT   rN   r2   N)r4   r5   r6   rM   rS   r8   r2   r0   rP   rP   P   s2              r2   rP   c                       e Zd Zd ZdS )TransfFitParamsc                     || _         | S r+   )
fit_paramsr/   r=   r>   rW   s       r0   r?   zTransfFitParams.fitY   s    $r2   Nr4   r5   r6   r?   r8   r2   r0   rU   rU   X   s#            r2   rU   c                   B    e Zd Zd	dZd Zd Zd Zd ZexZxZ	Z
d
dZdS )Mult   c                     || _         d S r+   mult)r/   r_   s     r0   r1   zMult.__init___   s    			r2   c                     | S r+   r8   r<   s      r0   r?   zMult.fitb   r@   r2   c                 :    t          j        |          | j        z  S r+   npasarrayr_   rL   s     r0   rM   zMult.transforme       z!}}ty((r2   c                 :    t          j        |          | j        z  S r+   rb   rL   s     r0   rS   zMult.inverse_transformh   re   r2   c                 b    t          j        |          | j        z                      d          S )Nr\   axis)rc   rd   r_   sumrL   s     r0   predictzMult.predictk   s(    
1	)..A.666r2   Nc                 *    t          j        |          S r+   rc   rj   r<   s      r0   scorez
Mult.scorep   s    vayyr2   )r\   r+   )r4   r5   r6   r1   r?   rM   rS   rk   predict_probapredict_log_probadecision_functionrn   r8   r2   r0   r[   r[   ^   s             ) ) )) ) )7 7 7 =DCMC%(9     r2   r[   c                   6    e Zd ZdZd Zd	dZd Zd	dZd
dZdS )	FitParamTzMock classifierc                     d| _         d S )NF
successful)r/   s    r0   r1   zFitParamT.__init__w   s    r2   Fc                     || _         d S r+   ru   r/   r=   r>   should_succeeds       r0   r?   zFitParamT.fitz   s    (r2   c                     | j         S r+   ru   rL   s     r0   rk   zFitParamT.predict}   s
    r2   c                 \    |                      |||           |                     |          S )N)ry   )r?   rk   rx   s       r0   fit_predictzFitParamT.fit_predict   s*    An555||Ar2   Nc                 8    |||z  }t          j        |          S r+   rm   )r/   r=   r>   sample_weights       r0   rn   zFitParamT.score   s     $M!Avayyr2   rH   r3   )	r4   r5   r6   r7   r1   r?   rk   r|   rn   r8   r2   r0   rs   rs   t   st             ) ) ) )          r2   rs   c                       e Zd ZdZd ZdS )DummyTransfz(Transformer which store the column meansc                 l    t          j        |d          | _        t          j                    | _        | S )Nr   rh   )rc   meanmeans_time
timestamp_r<   s      r0   r?   zDummyTransf.fit   s,    gaa((( )++r2   N)r4   r5   r6   r7   r?   r8   r2   r0   r   r      s)        22    r2   r   c                   0    e Zd ZdZd ZddZddZddZdS )	DummyEstimatorParamsz,Mock classifier that takes params on predictc                     | S r+   r8   r<   s      r0   r?   zDummyEstimatorParams.fit   r@   r2   Fc                     || _         | S r+   got_attributer/   r=   r   s      r0   rk   zDummyEstimatorParams.predict       *r2   c                     || _         | S r+   r   r   s      r0   ro   z"DummyEstimatorParams.predict_proba   r   r2   c                     || _         | S r+   r   r   s      r0   rp   z&DummyEstimatorParams.predict_log_proba   r   r2   NrH   )r4   r5   r6   r7   r?   rk   ro   rp   r8   r2   r0   r   r      se        66             r2   r   c                     t          dg          } t          j        t                    5  |                     dggdg           d d d            n# 1 swxY w Y   d}t          dt                      fg          } t          j        t          |          5  |                     dggdg           d d d            n# 1 swxY w Y   t                      }t          d|fg          }|                    d          t          dd d |d	|                    d
          k    sJ |	                    d           |j
        dk    sJ |j        J t          |           t                      }t          t                    }t          d|fd|fg          }|j        d         |u sJ |j        d         |u sJ d}t          dt                      fd|fg          } t          j        t          |          5  |                     dggdg           d d d            n# 1 swxY w Y   |	                    d           |j        dk    sJ t          |           t%          j        d          }t          j        t(          |          5  |	                    d           d d d            n# 1 swxY w Y   t+          |          }|j        d         |j        d         usJ |                    d          }|                    d          }|                    d
          D ]}|                    |           |                    d
          D ]}|                    |           |                    d           |                    d           |                    d           |                    d           ||k    sJ d S )N)r\   r\   r\   zRLast step of Pipeline should implement fit or be the string 'passthrough'.*NoFit.*clfmatchsvcTrB   )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__Cr8   )r   pytestraises	TypeErrorr?   r)   r:   rC   dictrG   r-   r.   reprr   r   r   named_stepsCreescape
ValueErrorr   pop)	pipelinemsgr   pipefilter1pipe2rF   params2xs	            r0    test_pipeline_invalid_parametersr      s    !!H	y	!	! ! !qcUQC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	 
 %)*++H	y	,	,	, ! !qcUQC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ))CeS\N##D???%% *Dc* *-1__%_-H-H* *    
 	OO3O5C<<<<5===JJJ %%C)$$Ggw'%677D G$////E"c)))) KC#wyy)E3<899H	y	,	,	, ! !qcUQC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 	OO3O5C<<<<JJJ )	 C 
z	-	-	- & &%%%& & & & & & & & & & & & & & & $KKE&%*;E*BBBBB __$_''FD))G__%_((  

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

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

1a# r2   c                  r   t                      } t          dd          }t                      }t          dd          }|                     t          j                  }|                    |          }t          d|fd|fg          }|                    t          j                  }t          ||           d S )Nr   auto)r   n_initr   Kmeans)r$   r   r   r   r   r|   r   r   )r   kmscaler_for_pipelinekm_for_pipelinescaledseparate_predr   pipeline_preds           r0   test_fit_predict_on_pipeliner    s     F	Qv	.	.	.B )**!F;;;O !!$),,FNN6**M h 34x6QRSSD$$TY//Mm];;;;;r2   c                      t                      } t          d          }t          d| fd|fg          }d}t          j        t
          |          5  t          |d           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   z+'PCA' object has no attribute 'fit_predict'r   r|   )r$   r!   r   r   r   r   getattr)r   r   r   r   s       r0   0test_fit_predict_on_pipeline_without_fit_predictr    s     F

 
 
 Ch'%677D
7C	~S	1	1	1 % %m$$$% % % % % % % % % % % % % % % % % %s   A//A36A3c                     t          dt                      fdt                      fg          } |                     d d dd           | j        d         j        d         sJ | j        d         j        sJ d| j        d         j        vsJ d S )Nr   r   T)r=   r>   transf__should_get_thisr   should_get_thisry   )r   rU   rs   r|   r   rW   rv   )r   s    r0   -test_fit_predict_with_intermediate_fit_paramsr	    s     h 1 12UIKK4HIJJD
$$     H%01BCCCCE"----4#3H#=#HHHHHHHr2   method_name)rk   ro   rp   c                     t          dt                      fdt                      fg          }|                    d d            t	          ||           } |d d           |j        d         j        sJ d S )Nr   r   T)r=   r   )r   rP   r   r?   r  r   r   )r
  r   methods      r0   (test_predict_methods_with_predict_paramsr    s     h)E3G3I3I+JKLLDHHT4T;''F
FT&&&&E"000000r2   c                     t           j        } | |                     d          z  } t           j        }t	          dd          }t          d          }t          d|fd|fg          }|                    | |           |                    |           }|j	        | j	        d         d	fk    sJ t          |d d d d
f         |                    |                      t          |d d d
f         |                    | |                                                     t          d|fd|fg          }t          j        |           }|                    ||          }t          ||                                           t#          |          }|j        d         d         |j        d         d         usJ |                    d           |                    | |          j	        | j	        d         dfk    sJ t          dt)                      fd|fd|fg          }|                    | |          }|j	        | j	        d         dfk    sJ d}	t          dt)                      fdt+                      fg          }t-          j        t0          |	          5  |                    |            d d d            n# 1 swxY w Y   t          d|fd|ff          }|                    | |           d S )Nr   rh   r   )r   r   r\   r   svdselectr   )	select__k   mockr   z>All estimators should implement fit and transform.*\bNoTrans\brM   no_transformr   )r   r   r   r   r"   r   r   r?   rM   r   r   r   r   ravelr   
csr_matrixtoarrayr   transformer_listrG   rP   r:   r   r   r   )
r=   r>   r  r  fsX_transformedX_spX_sp_transformedfs2r   s
             r0   test_feature_unionr    s   	AQAA
AA
6
6
6C1F	s|h%78	9	9BFF1aLLLLLOOM171:q/1111 mAAAssF3S5F5Fq5I5IJJJ}QQQU+V-A-A!Q-G-G-M-M-O-OPPP 
s|h%78	9	9BQD''a00m-=-E-E-G-GHHH ))Cq!!$C,@,CA,FFFFF MMAMAq!!'AGAJ?:::: 
)E3<(F9KL	M	MB$$Q**M171:q/1111 MC	VXX.0KL	M	MB	y	,	,	,  
q			               
s|h%78	9	9BFF1aLLLLLs   J88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 dS )z6Check the behaviour of `named_transformers` attribute.r   noinvtransfN)rP   rJ   r   named_transformersr   r!  )r   r!  r  s      r0   %test_feature_union_named_transformersr#    s    XXF--K	&)M;+GH	I	IB *f4444 /;>>>>  '61111 ,;;;;;;r2   c                      t          d          } t                      }t          | |          }t          |j         \  }}|dk    sJ || |fk    sJ d S )Nr   r  )r   r   )r!   rP   r   zipr  )r   r  funamestransformerss        r0   test_make_unionr)    si    

 
 
 C88D	C		Br23E<%%%%%C;&&&&&&r2   c                  z   t          d          } t                      }t          | |d          }|j        t          | |          j        k    sJ d|j        k    sJ t          j        d          }t          j        t          |          5  t          | |ddd	
           d d d            d S # 1 swxY w Y   d S )Nr   r  r   n_jobszEmake_union() got an unexpected keyword argument 'transformer_weights'r   
   r\   )r   rP   transformer_weights)
r!   rP   r   r  r,  r   r   r   r   r   )r   r  r&  r   s       r0   test_make_union_kwargsr0  %  s!   

 
 
 C88D	Ca	(	(	(B*S$"7"7"HHHHH	>>>> )O C 
y	,	,	, L L3"2J2JKKKKL L L L L L L L L L L L L L L L L Ls   B00B47B4c                     t           j        } t          dd          }t          d|fg          }|                    |                               |           }|                    |           }|                    |           }t          ||           t          ||           |                    |          }|                    |          }t          ||           d S )Nr   r   )r   r   r   )	r   r   r!   r   r?   rM   r   r   rS   )r=   r   r   X_transX_trans2X_trans3X_backX_back2s           r0   test_pipeline_transformr7  4  s     		A
1
0
0
0C%''H ll1oo''**G%%a((H  ##Hgx000gx000''00F##G,,Gfg.....r2   c                     t           j        } t           j        }t                      }t	          d|fg          }|                    | |          }|                    | |                              |           }t          ||           d S )Nr  )	r   r   r   rP   r   r   r?   rM   r   )r=   r>   r   r   r2  r3  s         r0   test_pipeline_fit_transformr9  G  s|    	AAXXF&&)*++H $$Q**Gzz!Q))!,,Hgx00000r2   z
start, end))r   r\   )r   r   )r\   r   )r\   r   )Nr\   )r\   Nr3   c                    t          dt                      fdt                      fdt                      fgdd          }|| |         }t          |t                     sJ |j        |j        | |         k    sJ t          |j                                                  t          |j                                                  | |         k    sJ |                    d          }|                    d          }|d	= |d	= ||k    sJ d
}t          j
        t          |          5  || |d          d d d            d S # 1 swxY w Y   d S )Ntransf1transf2r   123T)memoryverboseFr   stepsz*Pipeline slicing only supports a step of 1r   r  )r   rP   rs   
isinstancer@  listr   itemsrC   r   r   r   )startendr   
pipe_slicepipe_paramspipe_slice_paramsr   s          r0   test_pipeline_slicerI  T  s    
VXX	FHH 5y{{7KL  D
 eCiJj(+++++tz%)44444 	Z#))++,, &&(())%)4	5 	5 	5 	5 //u/--K"--5-99G'"+++++
6C	z	-	-	-  U3r\                 s   *EE
Ec                     t                      } t                      }t          d| fd|fg          }|d         | k    sJ |d         | k    sJ |d         |k    sJ |d         |k    sJ t          j        t
                    5  |d          d d d            n# 1 swxY w Y   t          j        t                    5  |d          d d d            d S # 1 swxY w Y   d S )Nr   r   r   r  r   foobar)rP   rs   r   r   r   
IndexErrorKeyError)r   r   r   s      r0   test_pipeline_indexrN  s  sn   XXF
++Ch'%677D7f>V####8s????;# 
z	"	"  Q               
x	 	   X                 s$   	BBB<	CCCc                     t                      } t                      }t          d| fg          }|j        d         | u sJ d|fg|_        d|j        vsJ |j        d         |u sJ d|fg|j        k    sJ |                    d| fg           d| fg|j        k    sJ |                    |           d|fg|j        k    sJ |                    dg           t          j        d          }t          j        t          |          5  |
                    dggdg           d d d            n# 1 swxY w Y   t          j        t          |          5  |                    dggdg           d d d            d S # 1 swxY w Y   d S )	Nr  mock2r@  r  )junkr8   zJLast step of Pipeline should implement fit or be the string 'passthrough'.r   r\   )rP   r   r   r@  rG   r   r   r   r   r   r?   r   )r;  r<  r   r   s       r0   test_set_pipeline_stepsrT    sW   hhGhhG&'*+,,H'72222 ()HN-----(G3333g8>1111 01222W(.0000 W%%%W(.0000 |n---
)T C 
y	,	,	, ! !qcUQC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 
y	,	,	, + +uqc***+ + + + + + + + + + + + + + + + + +s$   D11D58D5E>>FFc                  B   t                      } t          d          }t          d| fd|fg          }d|j        v sJ d|j        vsJ |j        j        | u sJ |j        j        |u sJ t          d| fd|fg          }|j        j        | usJ |j        j        |u sJ d S )Nr   r^   r  r_   rP  values)rP   r[   r   r   r  r_   rV  )r   mult2r   s      r0   test_pipeline_named_stepsrX    s    XXFaLLLE&&)FE?;<<H X)))))(.....$....$---- (F+fe_=>>H&f4444$------r2   r   c                 X   t          j        dgg          }t          j        dg          }t          d          }t          d          }t          d          }t          d|fd| fd|fd	|fg          }|                    ||           g d
}d |j        D             }||k    sJ d S )Nr\   r   r^   r      m2badm3m5)r[  r\  r]  r^  c                     g | ]\  }}|S r8   r8   ).0name_s      r0   
<listcomp>z9test_pipeline_correctly_adjusts_steps.<locals>.<listcomp>  s    777WT1D777r2   )rc   r   r[   r   r?   r@  )	r   r=   r>   rW  mult3mult5r   expected_namesactual_namess	            r0   %test_pipeline_correctly_adjusts_stepsrh    s    
1#A
!AaLLLEaLLLEaLLLE
,tUmdE]K H LLA...N77777L\))))))r2   c           
      .	  	
 t          j        dgg          }t          j        dg          }t          d          	t          d          
t          d          	
fd} |            }d}t          |gg|                    ||                     t          |g|                    |                              |                     t          ||                    |gg                     |                    |            d	}t          |gg|                    ||                     t          |g|                    |                              |                     t          ||                    |gg                     |	                    d
          |j
        	| d ddddk    sJ |                    |            d}t          |gg|                    ||                     t          |g|                    |                              |                     t          ||                    |gg                     g d}|D ]} t          ||          |           |                    	           d	}t          |gg|                    ||                     t          |g|                    |                              |                     t          ||                    |gg                      |            }|                    |            d}t          |gg|                    ||                              |                     t          |gg|                    ||                     t          ||                    |gg                     d}t          j        t          |          5  t          |d           d d d            n# 1 swxY w Y   d	}t!          d	fd| fdfg          }t          |gg|                    ||                     t          |g|                    |                              |                     t          ||                    |gg                     d S )Nr\   r   r^   r   rZ  c                  4    t          d fdfdfg          S )Nr[  r]  last)r   )rW  rd  re  s   r0   makez0test_set_pipeline_step_passthrough.<locals>.make  s$    $uGHHHr2      r]  r-  Tr   F)r@  r[  r]  rk  r>  m2__mult
last__multr?  r[  )ro   rp   rq   rM   rn   )rk     z''str' object has no attribute 'predict'r   rk   r[  r]  rk  )rc   r   r[   r   r   r?   rk   rS   rG   rC   r@  r  rM   r   r   r   r   )r   r=   r>   rl  r   expother_methodsr  r   rW  rd  re  s            @@@r0   "test_set_pipeline_step_passthroughru    s   
1#A
!AaLLLEaLLLEaLLLEI I I I I I I tvvH
Cw 6 6q! < <===uhll1oo55a88999q(44seW==>>>;'''
Cw 6 6q! < <===uhll1oo55a88999q(44seW==>>>D))	. 	. 	 	 	 	 ;'''
Cw 6 6q! < <===uhll1oo55a88999q(44seW==>>>  M   % %!&!!!$$$$5!!!
Cw 6 6q! < <===uhll1oo55a88999q(44seW==>>>tvvH[)))
CwQ 2 2 < <Q ? ?@@@w 6 6q! < <===q(44seW==>>>
3C	~S	1	1	1 % %)$$$% % % % % % % % % % % % % % % C${(;fe_MNNHw 6 6q! < <===uhll1oo55a88999q(44seW==>>>>>s   O..O25O2c                     t          t          d                    } | j         | j         | j         t          t                                } t          | d          rJ | j         | j         t          d          } | j        d         dk    sJ t          | d          rJ | j         | j         t          t                      t                                } t          | d          rJ | j         t          | d          rJ t          t                      t                                } t          | d          rJ | j         t          | d          rJ d S )NrZ  rk   r   r   r   r   rS   )	r   r[   rk   rM   rS   rP   hasattrr@  rJ   )r   s    r0   test_pipeline_ducktypingry    sW   T!WW%%HVXX&&Hx+++++]++H>! >>>>>x+++++VXX{}}55Hx+++++x!455555[]]FHH55Hx+++++x!45555555r2   c                     t                      } t                      }t          | |          }t          |t                    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ t          | |t                                }t          |t                    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ d S )Nr   ztransf-1r\   ztransf-2r   	fitparamt)rP   r   rA  r   r@  rs   )t1t2r   s      r0   test_make_pipeliner~  1  s    	B	BR  DdH%%%%%:a=z)))):a=z))))R--DdH%%%%%:a=z)))):a=z)))):a={******r2   c                     t           j        } t           j        }t          ddd          }t	          d          }t          d|fd|fgdd	i
          }|                    | |           |                    |           }t          d|fd|fgdd	i
          }|                    | |          }t          dt                      fd|fd|fgdd	i
          }|                    | |          }t          |d d d df         d	|                    |           z             t          |d d df         |                    | |                                                     t          |d d d df         d	|                    |           z             t          |d d df         |                    | |                                                     |j        | j        d         dfk    sJ d S )Nr   r   r   r   r   r   r\   r   r   r  r-  r.  r  r     )r   r   r   r!   r   r   r?   rM   r   rP   r   r   r  r   )r=   r>   r   r  r  r  X_fit_transformedX_fit_transformed_wo_methods           r0   test_feature_union_weightsr  @  s   	AA
1A
F
F
FC1F	
&)*
 
 
B FF1aLLLLLOOM	
&)*
 
 
B ((A..	
&((	eS\Hf+=>#RL
 
 
B #%"2"21a"8"8 mAAAssF3R#:K:KA:N:N5NOOO}QQQU+V-A-A!Q-G-G-M-M-O-OPPP/3B37c>O>OPQ>R>R9RSSS(B/1E1Ea1K1K1Q1Q1S1STTT&,Q??????r2   c                     t           } t          dt          d          fdt          d          fg          }t          dt          d          fdt          d          fgd          }t          dt          d          fdt          d          fgd          }|                    |            |                    |           }|j        d         t          |           k    sJ |                    |            |                    |           }|j        |j        k    sJ t          |                                |                                           |	                    |           }t          |                                |                                           |                    |           }t          |                                |                                           d S )	Nwordswordanalyzercharscharr   r+  r   )
JUNK_FOOD_DOCSr   r%   r?   rM   r   r   r   r  r   )r=   r  fs_parallelfs_parallel2r  X_transformed_parallelX_transformed_parallel2s          r0   test_feature_union_parallelr  a  s   A	ov6667ov6667	

 
B ov6667ov6667	
   K  ov6667ov6667	
   L FF1IIILLOOMq!SVV++++OOA(22155"8">>>>>},,..0F0N0N0P0PQQQ +88;;},,..0G0O0O0Q0QRRR +44Q77},,..0G0O0O0Q0QRRRRRr2   c                  4   t          d          } t          dd          }t          d|fd| fg          }|                    t                     |                                }|D ]}d|v sd	|v sJ t          |          d
k    sJ t          dt                      fg                              dgg          }t          j        d          }t          j
        t          |          5  |                                 d d d            d S # 1 swxY w Y   d S )Nr  r  char_wb)r   r   )r  ngram_ranger  r  chars__words__#   tr1r\   zDTransformer tr1 (type Transf) does not provide get_feature_names_outr   )r%   r   r?   r  get_feature_names_outr   rP   r   r   r   r   r   )	word_vect	char_vectftfeature_namesfeatr   s         r0    test_feature_union_feature_namesr    ss   000IGGGI	+gy-AB	C	CBFF>,,..M 6 6D  I$5$5$55}####	vxx()	*	*	.	.u	5	5B
)N C 
~S	1	1	1 # #
  """# # # # # # # # # # # # # # # # # #s   +DDDc                     t           j        } t           j        }t          t	          d          t                                }|                    | |           t          j        t                    5  t          |d           d d d            n# 1 swxY w Y   t          t	          d          t          d                    }t          j        t                    5  t          |d           d d d            n# 1 swxY w Y   |                    | |           t          |j        t          j        |                     d S )Nr\   r   classes_r   r   )r   r   r   r   r   r   r?   r   r   r   r  r   r   r  rc   r   )r=   r>   regr   s       r0   test_classes_propertyr    s   	AA
a(((*:*<*<
=
=CGGAqMMM	~	&	& ! !Z   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! a(((*<!*L*L*L
M
MC	~	&	& ! !Z   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !GGAqMMMs|RYq\\22222s$   2BBBC<<D D c                     t          d          } t          d          }t          d          }d |_        d | _        d |_        t          d| fd|fg          }t          ddgg|                    t          j        d	gg                               t          d
dg|                                           d|fg|_        t          dgg|                    t          j        d	gg                               t          dg|                                           |                    d|fg           t          dgg|                    t          j        d	gg                               t          dg|                                           |                    |           t          dgg|                    t          j        d	gg                               t          dg|                                           d S )Nr   r   rZ  c                     dgS Nx3r8   input_featuress    r0   <lambda>z.test_set_feature_union_steps.<locals>.<lambda>      $ r2   c                     dgS Nx2r8   r  s    r0   r  z.test_set_feature_union_steps.<locals>.<lambda>  r  r2   c                     dgS )Nx5r8   r  s    r0   r  z.test_set_feature_union_steps.<locals>.<lambda>  r  r2   r[  r]  r\   m2__x2m3__x3r^  m5__x5r  )r  mock__x3rR  mock__x5)	r[   r  r   r   rM   rc   rd   r  rG   )rW  rd  re  r  s       r0   test_set_feature_union_stepsr    s   GGEGGEGGE"?"?E"?"?E"?"?E	e}tUm4	5	5BAxbj1#.?.?!@!@AAA(+R-E-E-G-GHHH !%=/Bubll2:se+<+<==>>>z2#;#;#=#=>>> MMVUO#4M555ubll2:se+<+<==>>>
|R%=%=%?%?@@@ MMuMubll2:se+<+<==>>>
|R%=%=%?%?@@@@@r2   c                     t          d          } t          d          }d | _        d |_        t          j        dgg          }t	          d| fd|fg          }t          ddgg|                    |                              |                     t          ddgg|                    |                     t          dd	g|                                           |	                    d
           t          dgg|                    |                              |                     t          dgg|                    |                     t          d	g|                                           |	                    d
           t          g g|                    |                              |                     t          g g|                    |                     t          g |                                           |	                    |           t          dgg|                    |                              |                     t	          dd|fg          }t          dgg|                    |                              |                     t          dgg|                    |                     t          d	g|                                           d S )Nr   r   c                     dgS r  r8   r  s    r0   r  z2test_set_feature_union_step_drop.<locals>.<lambda>  r  r2   c                     dgS r  r8   r  s    r0   r  z2test_set_feature_union_step_drop.<locals>.<lambda>  r  r2   r\   r[  r]  r  r  droprq  rn  )r[  r  )
r[   r  rc   rd   r   r   r?   rM   r   rG   )rW  rd  r=   r  s       r0    test_set_feature_union_step_dropr    s   GGEGGE"?"?E"?"?E

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

QC5A	e}tUm4	5	5BAx!4!4Q!7!7888Ax!1!1!!4!4555(+R-E-E-G-GHHHMM]M###Ax!4!4Q!7!7888Ax!1!1!!4!4555h/1I1I8*1U1UVVVMM]M###Ax!4!4Q!7!7888Ax!1!1!!4!4555	|$b&>&>z&J&J  
 MMUMAx!4!4Q!7!7888Ax!1!1!!4!4555h/1I1I8*1U1UVVV 
,tUm<	=	=BAx!4!4Q!7!7888Ax!1!1!!4!4555h/1I1I8*1U1UVVV	AgajG
1A
F
F
FC	5s|D	E	EBq"&&))--a00HWH=>>>q"**1--aaa'k:;;;	
 	
 	
 	  !9!9!9::
 
 
 MMmM$$$66!99q!!DtRY1v..///ADtRY1v..///		
 		
 		
 	  !9!9!9::   MMcM"""q"&&))--a00WHII>???q"**1--aaa'l;<<<	
 	
 	
 	  !9!9!9::
 
 
 
	'%6*A.
 
 
B q1ubffQii11!44QQQ[ABBBq1ub..q11!!!XgX+>???	
 	
 	
 	  !9!9!9::
 
 
 
 
r2   c                      t           j        } t          ddd          }t          d|fdg          }|                    |            t          g d|                                           dS )	z`Check that get_feature_names_out works with passthrough without
    passing input_features.
    r   r   r   r  r   rw  )r  r  passthrough__x0passthrough__x1passthrough__x2passthrough__x3N)r   r   r!   r   r?   r   r  )r=   r   r  s      r0   4test_feature_union_passthrough_get_feature_names_outr  b  s     		A
1A
F
F
FC	s|%CD	E	EBFF1III	
 	
 	
 	  ""
 
 
 
 
r2   c                     d} d}d}dt          d          fdt          d          fg}dt          d          fdt          d          fg}t          d	ft          d
ffD ]\  }}dt          d          f|t          d          fg}|| f||f|||z  ffD ]\  }}	t          j        t
          |	          5   |di ||i                    dggdg           d d d            n# 1 swxY w Y    |di |dt          d          fgi}
t          |
||           t          j        t
          |	          5  |
                    dggdg           d d d            n# 1 swxY w Y   t          j        t
          |	          5  |
                    dggdg           d d d            n# 1 swxY w Y    |di |dt          d          fgi}
 |
j	        di ||i t          j        t
          |	          5  |
                    dggdg           d d d            n# 1 swxY w Y   t          j        t
          |	          5  |
                    dggdg           d d d            n# 1 swxY w Y   d S )Nz3Estimator names must not contain __: got \['a__q'\]z+Names provided are not unique: \['a', 'a'\]z=Estimator names conflict with constructor arguments: \['%s'\]a__qr   r.   r   r-   r@  r  r   r\   r8   )
r[   r   r   r   r   r   r?   setattrr   rG   )error_message_1error_message_2error_message_3
bad_steps1
bad_steps2r   param
bad_steps3	bad_stepsmessageests              r0   test_step_name_validationr  x  s	   LODOVO477#c477^4JQ.3Q.1J '*\;M,NO . .
UDGGnud1gg&67
))501#
 	. 	.Iw z999 : :))ui())--seaS999: : : : : : : : : : : : : : : #22#tAww 0122CC	***z999 $ $!s###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ z999 . .!!A3%!---. . . . . . . . . . . . . . . #22#tAww 0122CCN00eY/000z999 $ $!s###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ z999 . .!!A3%!---. . . . . . . . . . . . . . .3	.. .sZ   4"C""C&)C&3EE E?F%%F),F)4HH!H I&&I*-I*c                      t          dt          dt                      fg          fg          } |                     dt                                 |                     dt	                      fgd           d S )Nr-   r.   gMbP?)a__b__alphaa__brZ  )a__stepsa__b__C)r   r    rG   r   r   )	estimators    r0   test_set_params_nested_pipeliner    sx    330@0@*A)B C CDEFFIU999C);)=)=#>"?KKKKKr2   c                  T   t           j        } t           j        }d}t          dt	                      fdt                      fg|          }t          j        d          }t          j	        t          |          5  |                    | |           d d d            d S # 1 swxY w Y   d S )Nr\   r   r   r>  zf'memory' should be None, a string or have the same interface as joblib.Memory. Got memory='1' instead.r   )r   r   r   r   r   r   r   r   r   r   r   r?   )r=   r>   r>  cached_piper   s        r0   test_pipeline_wrong_memoryr    s     		AAFX{}}5suu~FvVVVK
)	4 C 
z	-	-	-  1                 s   9BB!$B!c                       e Zd Zd ZdS )DummyMemoryc                     |S r+   r8   )r/   funcs     r0   cachezDummyMemory.cache  r@   r2   N)r4   r5   r6   r  r8   r2   r0   r  r    s#            r2   r  c                       e Zd ZdS )WrongDummyMemoryN)r4   r5   r6   r8   r2   r0   r  r    s        Dr2   r  c                     t          j        ddgg          } t          dt                      fdt	                      fgt                                }|                    | d            t                      }t          dt                      fdt	                      fg|          }t          j	        d| d          }t          j        t          |	          5  |                    |            d d d            d S # 1 swxY w Y   d S )
Nr\   r   r   r   r  r   z['memory' should be None, a string or have the same interface as joblib.Memory. Got memory='z
' instead.r   )rc   r   r   rP   r[   r  r?   r  r   r   r   r   r   )r=   r   dummyr   s       r0   "test_pipeline_with_cache_attributer    s>   
1a&Ah)E466?;KMMRRRDHHQ$HEh)E466?;EJJJD
)	;).	; 	; 	; C 
z	-	-	-                   s   C==DDc                  	   t           j        } t           j        }t                      }	 t	          j        |d          }t          dd          }t                      }t          dt          |          fd|fg          }t          d|fd|fg|          }|
                    | |           |
                    | |           |j        d         j        }t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    | |          |                    | |                     t          |j        d         j        |j        d         j                   t'          |d	          rJ |
                    | |           t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    | |          |                    | |                     t          |j        d         j        |j        d         j                   ||j        d         j        k    sJ t          dd          }	t                      }
t          d
|
fd|	fg|          }|
                    | |           t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    |           |                    |                      t          |                    | |          |                    | |                     t          |j        d         j        |j        d
         j                   ||j        d
         j        k    sJ 	 t)          j        |           d S # t)          j        |           w xY w)Nr-  locationr?  Tr   r   r   r   r  r   transf_2)r   r   r   r   joblibMemoryr   r   r   r   r?   r   r   r   rk   ro   rp   rn   r   rx  shutilrmtree)r=   r>   cachedirr>  r   r   r   r  tsclf_2r  cached_pipe_2s               r0   test_pipeline_memoryr    sY   	AAyyH8 "===d333(E&MM2UCLABB6 2UCLA&QQQ 	1A$X.94<<??K,?,?,B,BCCC4--a00+2K2KA2N2NOOO411!44k6S6STU6V6VWWW4::a++[->->q!-D-DEEEX&-{/Fx/P/W	
 	
 	
 68,,,,, 	14<<??K,?,?,B,BCCC4--a00+2K2KA2N2NOOO411!44k6S6STU6V6VWWW4::a++[->->q!-D-DEEEX&-{/Fx/P/W	
 	
 	
 [,X6AAAAA 1555== (#eU^4V
 
 
 	!Q 	4<<??M,A,A!,D,DEEE4--a00-2M2Ma2P2PQQQ""1%%}'F'Fq'I'I	
 	
 	
 	4::a++]-@-@A-F-FGGGX&-%j18	
 	
 	
 ].z:EEEEEEhhs   Q.R- -Sc                  l   t                      } t          j        | d          }t          t	                      t                      |          }|j        |u sJ t          t	                      t                                }|j        J t          |          dk    sJ t          j	        |            d S )Nr-  r  r  r   )
r   r  r  r   r   r   r>  r   r  r  )r  r>  r   s      r0   test_make_pipeline_memoryr    s    yyH]Hb999F[]]CEE&AAAH?f$$$$[]]CEE22H?"""x==A
M(r2   c                   &    e Zd ZddZddZddZdS )FeatureNameSaverNc                 4    |                      |d           | S )NT)reset)_check_feature_namesr<   s      r0   r?   zFeatureNameSaver.fit  s     !!!4!000r2   c                     |S r+   r8   r<   s      r0   rM   zFeatureNameSaver.transform  rN   r2   c                     |S r+   r8   )r/   r  s     r0   r  z&FeatureNameSaver.get_feature_names_out  s    r2   r+   )r4   r5   r6   r?   rM   r  r8   r2   r0   r  r    sP                   r2   r  c                  *   t          dt                      fddt                      fg          } t                      }|                     |j        |j                   t          | dd                             |j	                  |j	                   dS )z5Check pipeline.get_feature_names_out with passthroughr'  passr   r   rQ  Nr  )
r   r  r   r#   r?   r   r   r   r  r  )r   r   s     r0   test_features_names_passthroughr  #  s    &(()#&(()
  D ;;DHHTY$$$SbS	''(:;;T=O    r2   c                  l   t          dt                      fdt                      fg          } d t          D             }|                     t          |           t          | dd                                         g d           t          | dd                             d          g d           dS )	z5Check pipeline.get_feature_names_out with vectorizersvectr   rQ  c                     g | ]}d |v S )pizzar8   )r`  r   s     r0   rc  z7test_feature_names_count_vectorizer.<locals>.<listcomp>6  s    ...!A...r2   Nr  )beerburgercoke	copyrightr  thenonsense_is_ignored)r   r%   r   r  r?   r   r  )r   r>   s     r0   #test_feature_names_count_vectorizerr$  3  s    FO$5$56@R@T@T8UVWWWD..~...AHH^QSbS	''))???   SbS	''(=>>???    r2   c                  4   t          dt                      fg          } t                      }|                     |j        |j                   d}t          j        t          |          5  | 	                                 ddd           dS # 1 swxY w Y   dS )zZCheck that error is raised when a transformer does not define
    `get_feature_names_out`.notransrQ  z&does not provide get_feature_names_outr   N)
r   r:   r#   r?   r   r   r   r   r   r  )r   r   r   s      r0   8test_pipeline_feature_names_out_error_without_definitionr'  B  s     Iwyy12333D;;DHHTY$$$
2C	~S	1	1	1 % %""$$$% % % % % % % % % % % % % % % % % %s   +BBBc                      t          t                                } t          j        t          d          5  |                     dgdggddgddg           d d d            d S # 1 swxY w Y   d S )Nz8Pipeline.fit does not accept the sample_weight parameterr   r   r\   r   )r   r   r   r   r   r?   )r   s    r0   test_pipeline_param_errorr)  N  s    
*,,
-
-C	T
 
 
 : : 	!qc
QF1a&999: : : : : : : : : : : : : : : : : :s   !A%%A),A)c              #      K   | ][\  \  }}}t          ||          rC|d k    r6t          |d          r&t          |j        d         d         t                    T|||fV  \dS )r   r@  r  r\   N)rx  rA  r@  rs   )r`  r  patternr  s       r0   	<genexpr>r,  V  s       < <gh sFm<p 	/!!C!! 	"sy}Q'33 	"o 	'6n 	"!!!q< <r2   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   Nr_   zw\[Pipeline\].*\(step 1 of 2\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 2\) Processing mult.* total=.*\n$)r   r   mult1rW  z\[FeatureUnion\].*\(step 1 of 2\) Processing mult1.* total=.*\n\[FeatureUnion\].*\(step 2 of 2\) Processing mult2.* total=.*\n$)r.  r  )rd  r  z@\[FeatureUnion\].*\(step 1 of 1\) Processing mult2.* total=.*\n$)r?   r   r|   zest, pattern, methodc                 l   t          | |          }g dg dg}dgdgg}|                     d            |||           |                                j        r
J d            |                     d            |||           t	          j        ||                                j                  sJ d S )	N)r\   r   r   )r  rZ  rr  r  r   F)r?  zGot output for verbose=FalseT)r  rG   
readouterroutr   r   )r  r  r+  capsysr  r=   r>   s          r0   test_verboser3    s    3D	IIIA
qc
ANN5N!!!DAJJJ  ""&FF(FFF&NN4N   DAJJJ8GV..0045555555r2   c                     ddgddgddgg} g d}t                      }t                      }t          ||          }t          |d          rJ |                    | |           |j        |j        cxk    rdk    sn J t                      }t                      }t          ||          }|                    | |           |j        |j        cxk    rdk    sn J t          |d          rJ d S 	Nr\   r   r   r  rZ  rr  r   r\   r   n_features_in_)r$   r&   r   rx  r?   r7  )r=   r>   ssgbdtr   s        r0   test_n_features_in_pipeliner:    s    Q!Q!Q A		A			B)++DT""Dt-.....HHQNNN""38888q888888 
		B)++DT""DFF1aLLL""38888q888888t-.......r2   c                     ddgddgddgg} g d}t                      }t          |          }t          |d          rJ |                    | |           |j        |j        cxk    rdk    sn J t                      }t          |          }|                    | |           |j        |j        cxk    rdk    sn J d S r5  )r$   r   rx  r?   r7  )r=   r>   r8  r&  s       r0    test_n_features_in_feature_unionr<    s     Q!Q!Q A		A			B	BBr+,,,,,FF1aLLL 16666Q666666 
		B	BBFF1aLLL 16666Q66666666r2   c                  .    G d dt           t                    } t          j        t          j        }}t          d |             fd |             fg          }t          j        t                    5  |	                    ||           d d d            n# 1 swxY w Y   t          j        t                    5  |
                    ||           d d d            n# 1 swxY w Y   |	                    ||d           |
                    ||d           d S )Nc                       e Zd ZddZddZdS ),test_feature_union_fit_params.<locals>.DummyNc                 $    |ddik    rt           | S )Nr-   r   )r   rX   s       r0   r?   z0test_feature_union_fit_params.<locals>.Dummy.fit  s    c1X%%  Kr2   c                     |S r+   r8   r<   s      r0   rM   z6test_feature_union_fit_params.<locals>.Dummy.transform  s    Hr2   r+   )r4   r5   r6   r?   rM   r8   r2   r0   Dummyr?    s<        	 	 	 	
	 	 	 	 	 	r2   rB  dummy0dummy1r   rE   )r   r   r   r   r   r   r   r   r   r?   r   )rB  r=   r>   r   s       r0   test_feature_union_fit_paramsrE    s        -    9dkqAx)Heegg+>?@@A	z	"	"  	a               
z	"	"  	1               EE!Q!EOOAqAOs$   0BBB7CC!Cc                     t           j        t           j        }} t          j                            ddg| j        ddg                              t                    }t          j	        | |<   t          t                      t                                }|                    | |                              | |          dk    sJ d S )Nr\   r   r   g?)pg?)r   r   r   rc   randomchoicer   astypeboolnanr   r'   r   r?   rn   )r=   r>   maskr   s       r0   %test_pipeline_missing_values_leniencyrN    s     9dkqA9QFAGSz::AA$GGDfAdG*<*>*>??D88Aq>>1%%++++++r2   c                     ddgddgddgg} g d}dt                      fg}d	di}d
}t          ||          }t          j        t          |          5  |                    | |           d d d            d S # 1 swxY w Y   d S )Nr\   r   r   r  rZ  rr  r6  r   transformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.r.  r   )rP   r   r   r   r   r?   )r=   r>   r  weightsexpected_msgunions         r0   3test_feature_union_warns_unknown_transformer_weightrT    s     Q!Q!Q A		A!688,-a G	5  )wGGGE	z	6	6	6  		!Q                 s   A77A;>A;c                 v    t          | t                                }|                                d         rJ d S )Npairwise)r   r   	_get_tags)r   r   s     r0   test_pipeline_get_tags_nonerX    s8     cee,,D~~
++++++r2   	Predictorc                    t           j                            d          }|                    dd          t          j        dgdz  dgdz  z             }}t          dt                      fd |             fg          }|                    ||           |                    |          }t          |          rNt          |d           |                    ||          t          j        t          ||                    k    sJ d S t          ||                                           |                    ||          t          j        t#          ||                    k    sJ d S )	Nr      r   rZ  r\      rP  	predictor)rc   rH  RandomStaterandnr   r   r
   r?   rk   r   r   rn   r   approxr   r   r   r   )rY  rngr=   r>   modely_preds         r0   1test_search_cv_using_minimal_compatible_estimatorrd    sH    )


"
"C99RRXqcAgb&899qA
+--	.iikk0JK E 
IIaOOO]]1FU G61%%%{{1a  FM.F2K2K$L$LLLLLLL))){{1a  FM(1f2E2E$F$FFFFFFFr2   c                  R    G d dt                     } t          d |             fg          }t          j        t                    5  t          |           d d d            n# 1 swxY w Y   |                    t          j        t          j	                   t          |           d S )Nc                       e Zd Zd ZdS )0test_pipeline_check_if_fitted.<locals>.Estimatorc                     d| _         | S )NT)fitted_r<   s      r0   r?   z4test_pipeline_check_if_fitted.<locals>.Estimator.fit&  s    DLKr2   NrY   r8   r2   r0   	Estimatorrg  %  s#        	 	 	 	 	r2   rj  r   )
r   r   r   r   r   r   r?   r   r   r   )rj  r   s     r0   test_pipeline_check_if_fittedrk  $  s        M   
 %-.//H	~	&	& " "!!!" " " " " " " " " " " " " " "LLDK(((Hs   A##A'*A'c                  p   ddgddgddgg} g d}t          dt                      fg          }t          j        t                    5  t          |           d	d	d	           n# 1 swxY w Y   |                    | |           t          |           t          d
g          }t          |           t          dt                      fd
g          }t          j        t                    5  t          |           d	d	d	           n# 1 swxY w Y   |                    | |           t          |           d	S )z1Check __sklearn_is_fitted__ is defined correctly.r\   r   r   r  rZ  rr  r6  r   Nr  )r   r
   r   r   r   r   r?   )r=   r>   rS  s      r0   "test_feature_union_check_if_fittedrm  1  s    Q!Q!Q A		A5"4"6"67899E	~	&	&                 
IIaOOOE 1233EE5"4"6"679PQRRE	~	&	&                 
IIaOOOEs$   A##A'*A'*DD
D
c                  F   t           j        t           j        }}  G d dt                    }t	           |            t                                }|                    | |           t           j        }|                    |          }t          |d |D                        dS )zRCheck that pipeline passes names through.

    Non-regresion test for #21349.
    c                         e Zd Zd fd	Z xZS )Ytest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalarNc                     t                                          |          }t          j        d |D             t                    S )Nr  c                     g | ]}d | S 
my_prefix_r8   r`  ra  s     r0   rc  ztest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_out.<locals>.<listcomp>T  s!    EEEt2D22EEEr2   )dtype)superr  rc   rd   object)r/   r  r'  	__class__s      r0   r  zotest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_outR  sA    GG111PPE:EEuEEEVTTTTr2   r+   )r4   r5   r6   r  __classcell__)ry  s   @r0   AddPrefixStandardScalarrp  Q  sG        	U 	U 	U 	U 	U 	U 	U 	U 	U 	Ur2   r{  c                     g | ]}d | S rs  r8   ru  s     r0   rc  zLtest_pipeline_get_feature_names_out_passes_names_through.<locals>.<listcomp>\  s!    *W*W*W4+>+>+>*W*W*Wr2   N)	r   r   r   r$   r   r?   r  r  r   )r=   r>   r{  r   input_namesfeature_names_outs         r0   8test_pipeline_get_feature_names_out_passes_names_throughr  J  s    
 9dkqAU U U U U. U U U
 0022N4D4DEEDHHQNNN$K22;??(*W*W;*W*W*WXXXXXr2   c                  p   t          j        d           t          dd          \  } }t          t	                      t                                }|                    d           |                    | |           |dd                                         }|d         j	        }t          ||           dS )z.Test pipeline's set_output with feature names.pandasTas_frame
return_X_yrM   Nr  )r   importorskipr#   r   r$   r   
set_outputr?   r  feature_names_in_r   )r=   r>   r   r  log_reg_feature_namess        r0   $test_pipeline_set_output_integrationr  _  s    
!!!dt444DAq))+=+?+?@@DOOhO'''HHQNNNSbS	7799 H6(*?@@@@@r2   c                     t          j        d          } t          dd          \  }}t          |d          \  }}t	          dt                      fdt                      fg          }|                    d           |                    |           |	                    |          }t          || j                  sJ t          |j        |                                           t          |j        |j                   d	S )
z'Test feature union with set_output API.r  Tr  r   r  scalarr   r  N)r   r  r#   r   r   r$   r!   r  r?   rM   rA  	DataFramer   r  r  index)pdr=   rb  X_trainX_testrS  r2  s          r0   test_feature_union_set_outputr  o  s    		X	&	&Bdt444DAq&qq999OGV8^%5%56GHHE	x(((	IIgoof%%Ggr|,,,,,w(C(C(E(EFFFw}fl33333r2   )r7   tempfiler   r  r   r   	itertoolsr   numpyrc   scipyr   r  sklearn.utils._testingr   r   r   r   r	   r
   sklearn.exceptionsr   sklearn.model_selectionr   sklearn.utils.validationr   sklearn.baser   r   r   r   sklearn.pipeliner   r   r   r   sklearn.svmr   sklearn.neighborsr   sklearn.linear_modelr   r   r   sklearn.metricsr   r   sklearn.clusterr   sklearn.feature_selectionr   r   sklearn.dummyr    sklearn.decompositionr!   r"   sklearn.datasetsr#   sklearn.preprocessingr$   sklearn.feature_extraction.textr%   sklearn.ensembler&   sklearn.imputer'   r   r  r)   r:   rJ   rP   rU   r[   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  markparametrizer  r  r#  r)  r0  r7  r9  rI  rN  rT  rX  rh  ru  ry  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r'  r)  productparameter_grid_test_verboser3  r:  r<  rE  rN  rT  rX  rd  rk  rm  r  r  r  r8   r2   r0   <module>r     s
            				                                . - - - - - 4 4 4 4 4 4 4 4 4 4 4 4 N N N N N N N N N N N N N N N N N N N N N N N N       0 0 0 0 0 0 : : : : : : : : 1 1 1 1 1 1 4 4 4 4 4 4 4 4 " " " " " " < < < < < < < < ( ( ( ( ( ( 3 3 3 3 3 3 3 3 & & & & & & 0 0 0 0 0 0 ; ; ; ; ; ; ; ; ; ; ; ; ( ( ( ( ( (y{{       	 	 	 	 	e 	 	 	    '   
    [       f       =   ,       ,    &       =   &Q Q Qh	 	 	  , , , > > >
6 
6 
63 3 34  P P P     << < <,	% 	% 	%	I 	I 	I DDD 1 1 1, , ,^
< 
< 
<' ' 'L L L/ / /&
1 
1 
1 VVV   8  $+ + +@. . ." }(=>>* * ?>*" }(=>>I? I? ?>I?X6 6 68+ + +@ @ @B*S *S *SZ# # #&3 3 3 A A A: ?  ?  ?Fn n nb  ,#. #. #.LL L L  "       
	 	 	 	 	 	 	 	  <  <  < ~	 	 		 	 	 	 	} 	 	 	     	% 	% 	%: : :< <"3)"3 8VVXX.		0DEFFN 8VVXX.		@TUVVN !6688,/		, N 8VVXX.>??N *VTTVV,<=>>O 3fddff5EFGGO w/'44661BCDDT /'44661BDUVWWSY0	
b 	0//e3# 3#< < < ~ /1LMM6 6 NM6/ / /.7 7 7(  ., , ,  $ }(=>>, , ?>, '79J&KLLG G MLG(
 
 
  2Y Y Y*A A A 4 4 4 4 4r2   