o
    tBh                     @   s  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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-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ e8 ZAdZBG dd dZCG dd deCZDG dd deDZEG dd  d eEZFG d!d" d"eFZGG d#d$ d$eZHG d%d& d&eZIG d'd( d(eFZJG d)d* d*eZKd+d, ZLd-d. ZMd/d0 ZNd1d2 ZOd3d4 ZPd5d6 ZQd7d8 ZRd9d: ZSd;d< ZTd=d> ZUd?d@ ZVdAdB ZWdCdD ZXdEdF ZYejZ[dGg dHdIdJ Z\dKdL Z]dMdN Z^dOdP Z_dQdR Z`dSdT ZaejZ[dUg dVdWdX ZbdYdZ Zcd[d\ Zdd]d^ ZeejZ[d_dd_gd`da ZfejZ[d_dd_gdbdc Zgddde Zhdfdg Zidhdi Zjdjdk ZkejZldlejZ[dmdndogdpdq Zmdrds ZnejZldlejZ[dmdndogdtdu ZoejZldlejZ[dmdndogdvdw Zpdxdy Zqdzd{ Zrd|d} Zsd~d ZtG dd dZuG dd dZvdd Zwdd Zxdd ZyG dd deZzdd Z{dd Z|dd Z}dd Z~dd eedeF fdeI fgdfedeF fddeI fgdfedeF fddeI fgdfedeF fdgdfeddeH fgdfeddeH fgdfedeH fdeH fgdfeddeH fdgdfgg dD ZejZ[dedd Zdd Zdd Zdd Zdd Zdd Zdd ZejZ[d_dd_gdd ZejZ[deegdd Zdd Zdd Zdd ZdS )z
Test the pipeline module.
    )mkdtempN)sparse)assert_allcloseassert_array_equalassert_array_almost_equalMinimalClassifierMinimalRegressorMinimalTransformer)NotFittedError)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                   @   s   e Zd ZdZdddZdS )NoFitz*Small class to test parameter dispatching.Nc                 C   s   || _ || _d S Nab)selfr)   r*    r,   r/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/tests/test_pipeline.py__init__9   s   
zNoFit.__init__NN)__name__
__module____qualname____doc__r.   r,   r,   r,   r-   r&   6   s    r&   c                   @   s&   e Zd Zdd Zd	ddZdd ZdS )
NoTransc                 C      | S r'   r,   r+   Xyr,   r,   r-   fit?      zNoTrans.fitFc                 C   s   | j | jdS )Nr(   r(   )r+   deepr,   r,   r-   
get_paramsB   s   zNoTrans.get_paramsc                 K   s   |d | _ | S )Nr)   r)   )r+   paramsr,   r,   r-   
set_paramsE   s   
zNoTrans.set_paramsNF)r0   r1   r2   r9   r<   r?   r,   r,   r,   r-   r4   >   s    
r4   c                   @      e Zd Zdd ZdS )NoInvTransfc                 C      |S r'   r,   r+   r7   r,   r,   r-   	transformK   r:   zNoInvTransf.transformN)r0   r1   r2   rE   r,   r,   r,   r-   rB   J       rB   c                   @   s   e Zd Zdd Zdd ZdS )Transfc                 C   rC   r'   r,   rD   r,   r,   r-   rE   P   r:   zTransf.transformc                 C   rC   r'   r,   rD   r,   r,   r-   inverse_transformS   r:   zTransf.inverse_transformN)r0   r1   r2   rE   rH   r,   r,   r,   r-   rG   O   s    rG   c                   @   rA   )TransfFitParamsc                 K   s
   || _ | S r'   )
fit_paramsr+   r7   r8   rJ   r,   r,   r-   r9   X      zTransfFitParams.fitNr0   r1   r2   r9   r,   r,   r,   r-   rI   W   rF   rI   c                   @   sL   e Zd ZdddZdd Zdd Zdd	 Zd
d Ze Z Z	Z
dddZdS )Mult   c                 C   s
   || _ d S r'   mult)r+   rQ   r,   r,   r-   r.   ^      
zMult.__init__c                 C   r5   r'   r,   r6   r,   r,   r-   r9   a   r:   zMult.fitc                 C   s   t || j S r'   npasarrayrQ   rD   r,   r,   r-   rE   d      zMult.transformc                 C   s   t || j S r'   rS   rD   r,   r,   r-   rH   g   rV   zMult.inverse_transformc                 C   s   t || j jddS )NrO   axis)rT   rU   rQ   sumrD   r,   r,   r-   predictj   s   zMult.predictNc                 C   s
   t |S r'   rT   rY   r6   r,   r,   r-   scoreo   rR   z
Mult.score)rO   r'   )r0   r1   r2   r.   r9   rE   rH   rZ   predict_probapredict_log_probadecision_functionr\   r,   r,   r,   r-   rN   ]   s    
rN   c                   @   s>   e Zd ZdZdd ZdddZdd Zdd	d
ZdddZdS )	FitParamTzMock classifierc                 C   s
   d| _ d S )NF
successful)r+   r,   r,   r-   r.   v   rR   zFitParamT.__init__Fc                 C   s
   || _ d S r'   ra   r+   r7   r8   should_succeedr,   r,   r-   r9   y   rR   zFitParamT.fitc                 C   s   | j S r'   ra   rD   r,   r,   r-   rZ   |   s   zFitParamT.predictc                 C   s   | j |||d | |S )N)rd   )r9   rZ   rc   r,   r,   r-   fit_predict   s   
zFitParamT.fit_predictNc                 C   s   |d ur|| }t |S r'   r[   )r+   r7   r8   sample_weightr,   r,   r-   r\      s   
zFitParamT.scorer@   r/   )	r0   r1   r2   r3   r.   r9   rZ   re   r\   r,   r,   r,   r-   r`   s   s    

r`   c                   @   s   e Zd ZdZdd ZdS )DummyTransfz(Transformer which store the column meansc                 C   s   t j|dd| _t | _| S )Nr   rW   )rT   meanmeans_time
timestamp_r6   r,   r,   r-   r9      s   
zDummyTransf.fitN)r0   r1   r2   r3   r9   r,   r,   r,   r-   rg      s    rg   c                   @   s6   e Zd ZdZdd ZdddZdddZdd	d
ZdS )DummyEstimatorParamsz,Mock classifier that takes params on predictc                 C   r5   r'   r,   r6   r,   r,   r-   r9      r:   zDummyEstimatorParams.fitFc                 C   
   || _ | S r'   got_attributer+   r7   ro   r,   r,   r-   rZ      rL   zDummyEstimatorParams.predictc                 C   rm   r'   rn   rp   r,   r,   r-   r]      rL   z"DummyEstimatorParams.predict_probac                 C   rm   r'   rn   rp   r,   r,   r-   r^      rL   z&DummyEstimatorParams.predict_log_probaNr@   )r0   r1   r2   r3   r9   rZ   r]   r^   r,   r,   r,   r-   rl      s    

rl   c            	      C   s  t dg} tt | dggdg W d    n1 sw   Y  d}t dt fg} tjt|d | dggdg W d    n1 sHw   Y  t }t d|fg}|jddtdd d |d	|jd
dksnJ |j	dd |j
dks{J |jd u sJ t| t }tt}t d|fd|fg}|jd |u sJ |jd |u sJ d}t dt fd|fg} tjt|d | dggdg W d    n1 sw   Y  |j	dd |jdksJ t| td}tjt|d |j	dd W d    n	1 sw   Y  t|}|jd |jd usJ |jdd}|jdd}|jd
dD ]}|| q-|jd
dD ]}|| q<|d |d |d |d ||ks`J d S )N)rO   rO   rO   zRLast step of Pipeline should implement fit or be the string 'passthrough'.*NoFit.*clfmatchsvcTr;   )svc__asvc__brt   F皙?)rv   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__Cr,   )r   pytestraises	TypeErrorr9   r&   r4   r<   dictr?   r)   r*   reprr   r   r   named_stepsCreescape
ValueErrorr   pop)	pipelinemsgrq   pipefilter1pipe2r>   params2xr,   r,   r-    test_pipeline_invalid_parameters   sj   





r   c                  C   sh   t ddgg} tdt fdt ff}|j| d d ||  |jdd |j| d d ||  d S )NrO      transfrq   r8   passthrough)r   )rT   arrayr   rG   r`   r9   r\   r?   r7   r   r,   r,   r-   test_pipeline_init_tuple   s   
r   c                  C   sl   t j} t j}t }ttdd}td|fd|fg}|| | ||  |	|  |
|  || | d S )Nr   kry   logistic)irisdatatargetr   r   r   r   r9   rZ   r]   r^   r\   )r7   r8   rq   r   r   r,   r,   r-   test_pipeline_methods_anova  s   


r   c                  C   s   t dt fdt fg} | jd d dd | d sJ | jd jd u s%J | jd jd u s/J t	d}t
jt|d | jd d dd W d    d S 1 sOw   Y  d S )Nr   rq   T)r7   r8   clf__should_succeedz.fit() got an unexpected keyword argument 'bad'rr   )clf__bad)r   rG   r`   r9   rZ   r   r)   r*   r   r   r}   r~   r   )r   r   r,   r,   r-   test_pipeline_fit_params  s   
"r   c                  C   s   t ddgg} tdt fdt fg}|j| d d || dks$J |j| d ddks/J |j| d d ddks;J |j| t ddgdd	ksKJ d S )
NrO   r   r   rq   r      )r8   rf   rf      )rT   r   r   rG   r`   r9   r\   r   r,   r,   r-   %test_pipeline_sample_weight_supported&  s   $r   c                  C   s   t ddgg} tdt fdt fg}|j| d d || dks$J |j| d ddks/J td}t	j
t|d	 |j| t ddgd W d    d S 1 sSw   Y  d S )
NrO   r   r   rq   r   r   r   z:score() got an unexpected keyword argument 'sample_weight'rr   )rT   r   r   rG   rN   r9   r\   r   r   r}   r~   r   )r7   r   r   r,   r,   r-   'test_pipeline_sample_weight_unsupported1  s   
"r   c                  C   s   t dt fg} td}tjt|d | jdd W d    n1 s%w   Y  tjt|d | jdd W d    n1 sBw   Y  td}tjt|d | jdd W d    d S 1 sew   Y  d S )	NclszInvalid parameter 'fake' for estimator Pipeline(steps=[('cls', LinearRegression())]). Valid parameters are: ['memory', 'steps', 'verbose'].rr   nope)fake)fake__estimatorzInvalid parameter 'invalid_param' for estimator LinearRegression(). Valid parameters are: ['copy_X', 'fit_intercept', 'n_jobs', 'normalize', 'positive'].)cls__invalid_param)r   r   r   r   r}   r~   r   r?   )r   	error_msgr,   r,   r-   $test_pipeline_raise_set_params_error>  s    "r   c                  C   st   t j} t j}tddd}tdddd}td|fd|fg}|| | ||  ||  |	|  |
| | d S )	NTr   probabilityrandom_statefullmle
svd_solvern_componentswhitenpcart   )r   r   r   r   r   r   r9   rZ   r]   r^   r\   )r7   r8   rq   r   r   r,   r,   r-   test_pipeline_methods_pca_svmY  s   


r   c                  C   s   t j} tdddd}td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   r9   score_samplesshapefit_transformr   rE   )r7   r   r   r   r,   r,   r-   #test_pipeline_score_samples_pca_lofh  s   

 r   c                  C   st   t dgdgg} t ddg}tt }|| | tjtdd ||  W d    d S 1 s3w   Y  d S )NrO   r   z<'LogisticRegression' object has no attribute 'score_samples'rr   )	rT   r   r   r   r9   r}   r~   AttributeErrorr   )r7   r8   r   r,   r,   r-   4test_score_samples_on_pipeline_without_score_samplesx  s   
"r   c                  C   s   t j} t j}| jd }tt|}t }tdddd}t	dddd}||fD ]O}t
d|fd	|fg}|| | || }	|	j|fksFJ || }
|
j||fksTJ || }|j||fksbJ || }|j||fkspJ || | q'd S )
Nr   r   
randomizedT)r   r   r   ovr)r   r   decision_function_shape
preprocessrt   )r   r   r   r   lenrT   uniquer"   r   r   r   r9   rZ   r]   r^   r_   r\   )r7   r8   	n_samples	n_classesscalerr   rq   preprocessingr   rZ   proba	log_probar_   r,   r,   r-   'test_pipeline_methods_preprocessing_svm  s(   




r   c                  C   sd   t  } tdd}t  }tdd}| tj}||}td|fd|fg}|tj}t|| d S )Nr   r   r   Kmeans)r"   r   r   r   r   re   r   r   )r   kmscaler_for_pipelinekm_for_pipelinescaledseparate_predr   pipeline_predr,   r,   r-   test_fit_predict_on_pipeline  s   


r   c                  C   sf   t  } tdd}td| fd|fg}d}tjt|d t|d W d    d S 1 s,w   Y  d S )Nr   r   r   r   z+'PCA' object has no attribute 'fit_predict'rr   re   )r"   r   r   r}   r~   r   getattr)r   r   r   r   r,   r,   r-   0test_fit_predict_on_pipeline_without_fit_predict  s   
"r   c                  C   sf   t dt fdt fg} | jd d ddd | jd jd sJ | jd js'J d| jd jvs1J d S )Nr   rq   T)r7   r8   transf__should_get_thisr   should_get_thisrd   )r   rI   r`   re   r   rJ   rb   )r   r,   r,   r-   -test_fit_predict_with_intermediate_fit_params  s   r   method_name)rZ   r]   r^   c                 C   sN   t dt fdt fg}|d d  t|| }|d dd |jd js%J d S )Nr   rq   T)r7   ro   )r   rG   rl   r9   r   r   ro   )r   r   methodr,   r,   r-   (test_predict_methods_with_predict_params  s
   
r   c            
      C   s  t j} | | jdd8 } t j}tddd}tdd}td|fd|fg}|| | || }|j	| j	d d	fks:J t
|d d d d
f ||  t|d d d
f || |  td|fd|fg}t| }|||}t
||  t|}|jd d |jd d usJ |jdd || |j	| j	d dfksJ tdt fd|fd|fg}|| |}|j	| j	d dfksJ d}	tdt fdt fg}tjt|	d ||  W d    n1 sw   Y  td|fd|ff}|| | d S )Nr   rW   r   )r   r   rO   r   svdselectr   )	select__k   mockr   z>All estimators should implement fit and transform.*\bNoTrans\brE   no_transformrr   )r   r   rh   r   r    r   r   r9   rE   r   r   r   r   ravelr   
csr_matrixtoarrayr   transformer_listr?   rG   r4   r}   r~   r   )
r7   r8   r   r   fsX_transformedX_spX_sp_transformedfs2r   r,   r,   r-   test_feature_union  s:   

 "
  r   c                  C   sH   t dd} t }t| |}t|j \}}|dksJ || |fks"J d S )Nr   r   )r   r   )r   rG   r   zipr   )r   r   funamestransformersr,   r,   r-   test_make_union  s   

r   c                  C   s   t dd} t }t| |dd}|jt| |jksJ d|jks!J td}tjt	|d t| |ddd	d
 W d    d S 1 sCw   Y  d S )Nr   r   r   n_jobszEmake_union() got an unexpected keyword argument 'transformer_weights'rr   
   rO   )r   rG   transformer_weights)
r   rG   r   r   r   r   r   r}   r~   r   )r   r   r   r   r,   r,   r-   test_make_union_kwargs  s   
"r   c                  C   sz   t j} tddd}td|fg}|| | }|| }|| }t|| t|| ||}||}t|| d S )Nr   r   )r   r   r   )	r   r   r   r   r9   rE   r   r   rH   )r7   r   r   X_transX_trans2X_trans3X_backX_back2r,   r,   r-   test_pipeline_transform'  s   





r   c                  C   sL   t j} t j}t }td|fg}|| |}|| || }t|| d S )Nr   )	r   r   r   rG   r   r   r9   rE   r   )r7   r8   r   r   r   r   r,   r,   r-   test_pipeline_fit_transform:  s   r  z
start, end))r   rO   )r   r   )rO   r   )rO   r   )NrO   )rO   Nr/   c                 C   s   t dt fdt fdt fgddd}|| | }t|t s J |j|j| | ks,J t|j t|j | | ks@J |jdd}|jdd}|d	= |d	= ||ksXJ d
}t	j
t|d || |d  W d    d S 1 stw   Y  d S )Ntransf1transf2rq   123T)memoryverboseFru   stepsz*Pipeline slicing only supports a step of 1rr   r   )r   rG   r`   
isinstancer  listr   itemsr<   r}   r~   r   )startendr   
pipe_slicepipe_paramspipe_slice_paramsr   r,   r,   r-   test_pipeline_sliceG  s(   "r  c                  C   s   t  } t }td| fd|fg}|d | ksJ |d | ks J |d |ks(J |d |ks0J tt |d  W d    n1 sDw   Y  tt |d  W d    d S 1 s^w   Y  d S )Nr   rq   r   r   r   foobar)rG   r`   r   r}   r~   
IndexErrorKeyError)r   rq   r   r,   r,   r-   test_pipeline_indexf  s   

"r  c                  C   sP  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s6J |jd| fgd d| fg|jksIJ |j|d d|fg|jksYJ |jdgd td}tjt	|d |
dggdg W d    n1 sw   Y  tjt	|d |dggdg W d    d S 1 sw   Y  d S )	Nr   mock2r  r   )junkr,   zJLast step of Pipeline should implement fit or be the string 'passthrough'.rr   rO   )rG   r   r   r  r?   r   r   r}   r~   r   r9   r   )r  r  r   r   r,   r,   r-   test_set_pipeline_stepsx  s,   "r  c                  C   s   t  } td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 s0J td| fd|fg}|jj| usBJ |jj|u sJJ d S )Nr   rP   r   rQ   r  values)rG   rN   r   r   r   rQ   r  )r   mult2r   r,   r,   r-   test_pipeline_named_steps  s   
r  r   c           	      C   s   t dgg}t dg}tdd}tdd}tdd}td|fd| fd|fd	|fg}||| g d
}dd |jD }||ksDJ d S )NrO   r   rP   r      m2badm3m5)r  r  r   r!  c                 S   s   g | ]\}}|qS r,   r,   ).0name_r,   r,   r-   
<listcomp>      z9test_pipeline_correctly_adjusts_steps.<locals>.<listcomp>)rT   r   rN   r   r9   r  )	r   r7   r8   r  mult3mult5r   expected_namesactual_namesr,   r,   r-   %test_pipeline_correctly_adjusts_steps  s   


r+  c           	   
      s  t dgg}t dg}tdd tddtdd fdd}| }d}t|gg||| t|g||| t|||gg |j| d	 d
}t|gg||| t|g||| t|||gg |j	dd|j
 | d ddddksJ |j| d d}t|gg||| t|g||| t|||gg g d}|D ]	}t||| q|j d d
}t|gg||| t|g||| t|||gg | }|j| d d}t|gg|||| t|gg||| t|||gg d}tjt|d t|d W d    n	1 s1w   Y  d
}td fd| fdfg}t|gg||| t|g||| t|||gg d S )NrO   r   rP   r   r  c                      s   t d fdfdfgS )Nr  r   last)r   r,   r  r'  r(  r,   r-   make  s   z0test_set_pipeline_step_passthrough.<locals>.make   r   r   Tru   F)r  r  r   r,  r  m2__mult
last__multr  r  )r]   r^   r_   rE   r\   )r,     z''str' object has no attribute 'predict'rr   rZ   r  r   r,  )rT   r   rN   r   r   r9   rZ   rH   r?   r<   r  r   rE   r}   r~   r   r   )	r   r7   r8   r.  r   expother_methodsr   r   r,   r-  r-   "test_set_pipeline_step_passthrough  sl   



r7  c                  C   s   t td} | j | j | j t t } t| drJ | j | j t d} | jd dks.J t| dr5J | j | j t t t } t| drIJ | j t| drSJ t t t } t| draJ | j t| drkJ d S )Nr  rZ   r   r   r   r   rH   )	r   rN   rZ   rE   rH   rG   hasattrr  rB   )r   r,   r,   r-   test_pipeline_ducktyping  s*   
r:  c                  C   s   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s6J |jd d dksAJ |jd d dksLJ |jd d dksWJ d S )Nr   ztransf-1rO   ztransf-2r   	fitparamt)rG   r   r  r   r  r`   )t1t2r   r,   r,   r-   test_make_pipeline$  s   
r>  c                  C   sV  t j} t j}tdddd}tdd}td|fd|fgdd	id
}|| | || }td|fd|fgdd	id
}|| |}tdt	 fd|fd|fgdd	id
}|| |}t
|d d d df d	||   t|d d df || |  t
|d d d df d	||   t|d d df || |  |j| jd dfksJ d S )Nr   r   r   r   r   r   rO   r   r   r   r   r   r   r      )r   r   r   r   r   r   r9   rE   r   rG   r   r   r   r   )r7   r8   r   r   r   r   X_fit_transformedX_fit_transformed_wo_methodr,   r,   r-   test_feature_union_weights3  s.   

$"$"rC  c                  C   s  t } tdtddfdtddfg}tdtddfdtddfgdd}tdtddfdtddfgdd}||  || }|jd t| ksKJ ||  || }|j|jks]J t| |  |	| }t| |  || }t| |  d S )	Nwordswordanalyzercharscharr   r   r   )
JUNK_FOOD_DOCSr   r#   r9   rE   r   r   r   r   r   )r7   r   fs_parallelfs_parallel2r   X_transformed_parallelX_transformed_parallel2r,   r,   r-   test_feature_union_parallelT  s:   





rO  zignore::FutureWarning:sklearn	get_namesget_feature_namesget_feature_names_outc                 C   s   t dd}t ddd}td|fd|fg}|t t||  }|D ]}d|v s.d	|v s.J q"t|d
ks7J tdt fgdgg}td|  }t	j
t|d t||   W d    d S 1 sew   Y  d S )NrE  rF  char_wb)r   r   )rG  ngram_rangerH  rD  chars__words__#   tr1rO   z/Transformer tr1 (type Transf) does not provide rr   )r#   r   r9   rJ  r   r   rG   r   r   r}   r~   r   )rP  	word_vect	char_vectftfeature_namesfeatr   r,   r,   r-    test_feature_union_feature_names  s   

"r^  c                  C   s   t j} t j}ttddt }|| | tt	 t
|d W d    n1 s*w   Y  ttddtdd}tt	 t
|d W d    n1 sOw   Y  || | t|jt| d S )NrO   r   classes_r   r   )r   r   r   r   r   r   r9   r}   r~   r   r   r   r   r_  rT   r   )r7   r8   regrq   r,   r,   r-   test_classes_property  s   ra  c                 C   sl  t d}t d}t d}| dkr dd |_dd |_dd |_nd	d |_d
d |_dd |_td|fd|fg}tddgg|tdgg tddgt||   d|fg|_	tdgg|tdgg tdgt||   |j
d|fgd tdgg|tdgg tdgt||   |j
|d tdgg|tdgg tdgt||   d S )Nr   r   r  rQ  c                   S      dgS Nx3r,   r,   r,   r,   r-   <lambda>      z.test_set_feature_union_steps.<locals>.<lambda>c                   S   rb  Nx2r,   r,   r,   r,   r-   re    rf  c                   S   rb  Nx5r,   r,   r,   r,   r-   re    rf  c                 S   rb  rc  r,   input_featuresr,   r,   r-   re    rf  c                 S   rb  rg  r,   rk  r,   r,   r-   re    rf  c                 S   rb  ri  r,   rk  r,   r,   r-   re    rf  r  r   rO   m2__x2m3__x3r!  m5__x5r   )r   mock__x3r  mock__x5)rN   rQ  rR  r   r   rE   rT   rU   r   r   r?   )rP  r  r'  r(  r[  r,   r,   r-   test_set_feature_union_steps  s,   




 rr  c                 C   s  t d}t d}| dkrdd |_dd |_n
dd |_dd |_td	gg}td
|fd|fg}tddgg||| tddgg|	| tddgt
||   |jdd tdgg||| tdgg|	| tdgt
||   |jdd tg g||| tg g|	| tg t
||   |j|d tdgg||| tdd|fg}tdgg||| tdgg|	| tdgt
||   d S )Nr   r   rQ  c                   S   rb  rg  r,   r,   r,   r,   r-   re    rf  z2test_set_feature_union_step_drop.<locals>.<lambda>c                   S   rb  rc  r,   r,   r,   r,   r-   re    rf  c                 S   rb  rg  r,   rk  r,   r,   r-   re    rf  c                 S   rb  rc  r,   rk  r,   r,   r-   re    rf  rO   r  r   rm  rn  dropr3  r0  )r  rs  )rN   rQ  rR  rT   rU   r   r   r9   rE   r   r   r?   )rP  r  r'  r7   r[  r,   r,   r-    test_set_feature_union_step_drop  s4   


rt  c                  C   s  t d} t d}tdgg}td| fd|fg}tddgg||| tddgg|| |jdd tddgg||| tddgg|| |jdd tddgg||| tddgg|| |j|d tddgg||| tddgg|| td	d|fg}tddgg||| tddgg|| t	j
}|jd }tdd
dd}tdd|fg}t||||ddd|f  t|||ddd|f  |jdd |||}t|t||g ||}t|t||g |j|d t||||dd| df  t|||dd| df  tdd|fgddid}t|d |||ddd|f  t|d ||ddd|f  dS )z@Check the behaviour of setting a transformer to `"passthrough"`.r   r   rO   r  r   r   r3  r0  )r  r   r   r   r?  r8  r   N)r   )r   r   )rN   rT   rU   r   r   r9   rE   r   r?   r   r   r   r   hstack)r  r'  r7   r[  columnsr   X_ftr,   r,   r-   "test_set_feature_union_passthrough  sL   
& 
("
*(rx  c               
   C   s>  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||| ffD ]\}}	tjt|	d |di ||idggdg W d    n1 siw   Y  |di |dt dfgi}
t|
|| tjt|	d |
dggdg W d    n1 sw   Y  tjt|	d |
dggdg W d    n1 sw   Y  |di |dt dfgi}
|
j	di ||i tjt|	d |
dggdg W d    n1 sw   Y  tjt|	d |
dggdg W d    n	1 sw   Y  qCq&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   rr   rO   r,   )
rN   r   r   r}   r~   r   r9   setattrr   r?   )error_message_1error_message_2error_message_3
bad_steps1
bad_steps2r   param
bad_steps3	bad_stepsmessageestr,   r,   r-   test_step_name_validation*  sB   
"r  c                  C   sD   t dt dt fgfg} | jdt d | jdt fgdd d S )Nr)   r*   gMbP?)a__b__alphaa__br  )a__stepsa__b__C)r   r   r?   r   r   )	estimatorr,   r,   r-   test_set_params_nested_pipelineP  s   r  c                  C   sv   t j} t j}d}tdt fdt fg|d}td}tj	t
|d || | W d    d S 1 s4w   Y  d S )NrO   r   rt   r  zf'memory' should be None, a string or have the same interface as joblib.Memory. Got memory='1' instead.rr   )r   r   r   r   rg   r   r   r   r}   r~   r   r9   )r7   r8   r  cached_piper   r,   r,   r-   test_pipeline_wrong_memoryV  s   "r  c                   @   rA   )DummyMemoryc                 C   rC   r'   r,   )r+   funcr,   r,   r-   cacheh  r:   zDummyMemory.cacheN)r0   r1   r2   r  r,   r,   r,   r-   r  g  rF   r  c                   @   s   e Zd ZdS )WrongDummyMemoryN)r0   r1   r2   r,   r,   r,   r-   r  l  s    r  c                  C   s   t ddgg} tdt fdt fgt d}|j| d d t }tdt fdt fg|d}t	d| d}t
jt|d	 ||  W d    d S 1 sPw   Y  d S )
NrO   r   r   rq   r  r   z['memory' should be None, a string or have the same interface as joblib.Memory. Got memory='z
' instead.rr   )rT   r   r   rG   rN   r  r9   r  r   r   r}   r~   r   )r7   r   dummyr   r,   r,   r-   "test_pipeline_with_cache_attributep  s   "r  c               	   C   s  t j} t j}t }z0tj|dd}tddd}t }tdt	|fd|fg}td|fd|fg|d}|
| | |
| | |jd j}t|| ||  t|| ||  t|| ||  t|| ||| | t|jd j|jd j t|d	rJ |
| | t|| ||  t|| ||  t|| ||  t|| ||| | t|jd j|jd j ||jd jksJ tddd}	t }
td
|
fd|	fg|d}|
| | t|| ||  t|| ||  t|| ||  t|| ||| | t|jd j|jd
 j ||jd
 jks3J W t| d S t| w )Nr   locationr  Tr   r   r   rt   r  ri   transf_2)r   r   r   r   joblibMemoryr   rg   r   r   r9   r   rk   r   rZ   r]   r^   r\   ri   r9  shutilrmtree)r7   r8   cachedirr  rq   r   r   r  tsclf_2r  cached_pipe_2r,   r,   r-   test_pipeline_memory~  s^   

r  c                  C   sn   t  } tj| dd}tt t |d}|j|u sJ tt t }|jd u s(J t|dks0J t	|  d S )Nr   r  r  r   )
r   r  r  r   rg   r   r  r   r  r  )r  r  r   r,   r,   r-   test_make_pipeline_memory  s   r  c                   @   s*   e Zd ZdddZdddZdddZdS )	FeatureNameSaverNc                 C   s   | j |dd | S )NT)reset)_check_feature_namesr6   r,   r,   r-   r9     s   zFeatureNameSaver.fitc                 C   rC   r'   r,   r6   r,   r,   r-   rE     r:   zFeatureNameSaver.transformc                 C   rC   r'   r,   )r+   rl  r,   r,   r-   rR    r:   z&FeatureNameSaver.get_feature_names_outr'   )r0   r1   r2   r9   rE   rR  r,   r,   r,   r-   r    s    

r  c                  C   sR   t dt fddt fgd} t }| |j|j t| dd |j	|j	 dS )z5Check pipeline.get_feature_names_out with passthroughr   passr   rq   r  Nr   )
r   r  r   r!   r9   r   r   r   rR  r\  )r   r   r,   r,   r-   test_features_names_passthrough  s   r  c                  C   sn   t dt fdt fgd} d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vectrq   r  c                 S   s   g | ]}d |v qS )pizzar,   )r"  r   r,   r,   r-   r%    r&  z7test_feature_names_count_vectorizer.<locals>.<listcomp>Nr   )beerburgercoke	copyrightr  thenonsense_is_ignored)r   r#   r   rJ  r9   r   rR  )r   r8   r,   r,   r-   #test_feature_names_count_vectorizer  s   r  c                  C   sh   t dt fgd} t }| |j|j d}tjt|d | 	  W d   dS 1 s-w   Y  dS )zZCheck that error is raised when a transformer does not define
    `get_feature_names_out`.notransr  z&does not provide get_feature_names_outrr   N)
r   r4   r!   r9   r   r   r}   r~   r   rR  )r   r   r   r,   r,   r-   8test_pipeline_feature_names_out_error_without_definition  s   
"r  c                  C   s^   t t } tjtdd | jdgdggddgddgd W d    d S 1 s(w   Y  d S )Nz8Pipeline.fit does not accept the sample_weight parameterrr   r   rO   r   )r   r   r}   r~   r   r9   )rq   r,   r,   r-   test_pipeline_param_error   s   
""r  c                 c   sR    | ]$\\}}}t ||r&|d kr t |dr t|jd d ts|||fV  qdS )r   r  r   rO   N)r9  r  r  r`   )r"  r  patternr   r,   r,   r-   	<genexpr>  s    
487r  r   rq   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   )rq   N)r   NrQ   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  rs  )r'  rs  z@\[FeatureUnion\].*\(step 1 of 1\) Processing mult2.* total=.*\n$)r9   r   re   zest, pattern, methodc                 C   s~   t | |}g dg dg}dgdgg}| jdd ||| | jr'J d| jdd ||| t|| js=J d S )	N)rO   r   r   )r   r  r4  r@  r   F)r  zGot output for verbose=FalseT)r   r?   
readouterroutr   rs   )r  r   r  capsysr  r7   r8   r,   r,   r-   test_verboseG  s   


r  c                  C   s   ddgddgddgg} g d}t  }t }t||}t|dr!J || | |j|j  kr4dks7J  J t  }t }t||}|| | |j|j  krUdksXJ  J t|dr_J d S 	NrO   r   r   r   r  r4  r   rO   r   n_features_in_)r"   r$   r   r9  r9   r  )r7   r8   ssgbdtr   r,   r,   r-   test_n_features_in_pipelineW  s   
 
 r  c                  C   s   ddgddgddgg} g d}t  }t|}t|drJ || | |j|j  kr0dks3J  J t  }t|}|| | |j|j  krMdksPJ  J d S r  )r"   r   r9  r9   r  )r7   r8   r  r   r,   r,   r-    test_n_features_in_feature_unionn  s    $r  c                  C   s   G dd dt t} tjtj}}td|  fd|  fg}tt |	|| W d    n1 s2w   Y  tt |
|| W d    n1 sMw   Y  |j	||dd |j
||dd d S )Nc                   @   s    e Zd ZdddZdddZdS )z,test_feature_union_fit_params.<locals>.DummyNc                 [   s   |ddikrt | S )Nr)   r   )r   rK   r,   r,   r-   r9     s   z0test_feature_union_fit_params.<locals>.Dummy.fitc                 S   rC   r'   r,   r6   r,   r,   r-   rE     r:   z6test_feature_union_fit_params.<locals>.Dummy.transformr'   )r0   r1   r2   r9   rE   r,   r,   r,   r-   Dummy  s    
r  dummy0dummy1r   r=   )r   r   r   r   r   r   r}   r~   r   r9   r   )r  r7   r8   rz   r,   r,   r-   test_feature_union_fit_params  s   	r  c                  C   sh   t jt j} }tjjddg| jddgdt}tj	| |< t
t t }|| || |dks2J d S )NrO   r   rx   g?)pg?)r   r   r   rT   randomchoicer   astypeboolnanr   r%   r   r9   r\   )r7   r8   maskr   r,   r,   r-   %test_pipeline_missing_values_leniency  s
   "
 r  c                  C   s   ddgddgddgg} g d}dt  fg}d	di}d
}t||d}tjt|d || | W d    d S 1 s:w   Y  d S )NrO   r   r   r   r  r4  r  r   transformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.r   rr   )rG   r   r}   r~   r   r9   )r7   r8   r   weightsexpected_msgunionr,   r,   r-   3test_feature_union_warns_unknown_transformer_weight  s   "r  c                  C   s`   d} t d}dd |_td|fg}tjt| d |  W d   dS 1 s)w   Y  dS )z*Check that get_feature_names is deprecatedz&get_feature_names is deprecated in 1.0r   c                   S   rb  rg  r,   r,   r,   r,   r-   re    rf  zAtest_feature_union_get_feature_names_deprecated.<locals>.<lambda>r  rr   N)rN   rQ  r   r}   warnsFutureWarning)r   r  r[  r,   r,   r-   /test_feature_union_get_feature_names_deprecated  s   

"r  c                 C   s    t | t }| d rJ d S )Npairwise)r   r   	_get_tags)r   r   r,   r,   r-   test_pipeline_get_tags_none  s   r  	Predictorc                 C   s   t jd}|ddt dgd dgd  }}tdt fd|  fg}||| ||}t	|rLt
|d |||tt||ksJJ d S t||  |||tt||kscJ d S )	Nr      r   r  rO      r  	predictor)rT   r  RandomStaterandnr   r   r	   r9   rZ   r   r   r\   r}   approxr   r   rh   r   )r  rngr7   r8   modely_predr,   r,   r-   1test_search_cv_using_minimal_compatible_estimator  s   (

$$r  c                  C   sn   G dd dt } td|  fg}tt t| W d    n1 s$w   Y  |tjtj	 t| d S )Nc                   @   rA   )z0test_pipeline_check_if_fitted.<locals>.Estimatorc                 S   s
   d| _ | S )NT)fitted_r6   r,   r,   r-   r9     rL   z4test_pipeline_check_if_fitted.<locals>.Estimator.fitNrM   r,   r,   r,   r-   	Estimator  rF   r  rq   )
r   r   r}   r~   r
   r   r9   r   r   r   )r  r   r,   r,   r-   test_pipeline_check_if_fitted  s   
r  c                  C   s   ddgddgddgg} g d}t dt fg}tt t| W d	   n1 s+w   Y  || | t| t d
g}t| t dt fd
g}tt t| W d	   n1 s`w   Y  || | t| d	S )z1Check __sklearn_is_fitted__ is defined correctly.rO   r   r   r   r  r4  r  rq   Nr  )r   r	   r}   r~   r
   r   r9   )r7   r8   r  r,   r,   r-   "test_feature_union_check_if_fitted  s    


r  c                  C   s`   t jt j} }G dd dt}t| t }|| | t j}||}t|dd |D  dS )zRCheck that pipeline passes names through.

    Non-regresion test for #21349.
    c                       s   e Zd Zd fdd	Z  ZS )zYtest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalarNc                    s&   t  j|d}tjdd |D tdS )Nrk  c                 S      g | ]}d | qS 
my_prefix_r,   r"  r#  r,   r,   r-   r%        ztest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_out.<locals>.<listcomp>)dtype)superrR  rT   rU   object)r+   rl  r   	__class__r,   r-   rR    s   zotest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_outr'   )r0   r1   r2   rR  __classcell__r,   r,   r  r-   AddPrefixStandardScalar  s    r  c                 S   r  r  r,   r  r,   r,   r-   r%    r  zLtest_pipeline_get_feature_names_out_passes_names_through.<locals>.<listcomp>N)	r   r   r   r"   r   r9   r\  rR  r   )r7   r8   r  r   input_namesfeature_names_outr,   r,   r-   8test_pipeline_get_feature_names_out_passes_names_through  s   
r  )r3   tempfiler   r  rj   r   	itertoolsr}   numpyrT   scipyr   r  sklearn.utils._testingr   r   r   r   r   r	   sklearn.exceptionsr
   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   rJ  r&   r4   rB   rG   rI   rN   r`   rg   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizer   r   r   r   r   r  r  r  r  r  r+  r7  r:  r>  rC  rO  filterwarningsr^  ra  rr  rt  rx  r  r  r  r  r  r  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,   r-   <module>   s0    
T
/	
 

L!
.

#'6&?1?



