a
    ;Za                     @   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 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/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ZDG dd dZEG dd deEZFG dd deFZGG d d! d!eGZHG d"d# d#eHZIG d$d% d%eZJG d&d' d'eZKG d(d) d)eHZLG d*d+ d+eZMd,d- ZNd.d/ ZOd0d1 ZPd2d3 ZQd4d5 ZRd6d7 ZSd8d9 ZTd:d; ZUd<d= ZVd>d? ZWd@dA ZXdBdC ZYdDdE ZZdFdG Z[ej\]dHg dIdJdK Z^dLdM Z_dNdO Z`dPdQ ZadRdS ZbdTdU Zcej\]dVg dWdXdY ZddZd[ Zed\d] Zfd^d_ Zgej\]d`dd`gdadb Zhej\]d`dd`gdcdd Zidedf Zjdgdh Zkdidj Zldkdl Zmej\ndmej\]dndodpgdqdr Zodsdt Zpej\ndmej\]dndodpgdudv Zqej\ndmej\]dndodpgdwdx Zrdydz Zsd{d| Ztd}d~ ZuG dd dZvG dd dZwdd Zxdd Zydd ZzG dd deZ{dd Z|dd Z}dd Z~dd Zdd ee deH fdeK fgdfe deH fddeK fgdfe deH fddeK fgdfe deH fdgdfe ddeJ fgdfe ddeJ fgdfe!deJ fdeJ fgdfe!ddeJ fdgdfgg dD Zej\]dedd Zdd Zdd Zdd Zdd Zdd Zdd Zej\]d`dd`gdd Zej\]deegdd Zdd Zdd ZdS )z
Test the pipeline module.
    )mkdtempN)sparse)parse_version)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-   :lib/python3.9/site-packages/sklearn/tests/test_pipeline.py__init__:   s    zNoFit.__init__)NN)__name__
__module____qualname____doc__r/   r-   r-   r-   r.   r'   7   s   r'   c                   @   s&   e Zd Zdd Zd	ddZdd ZdS )
NoTransc                 C   s   | S r(   r-   r,   Xyr-   r-   r.   fit@   s    zNoTrans.fitFc                 C   s   | j | jdS )Nr)   r)   )r,   deepr-   r-   r.   
get_paramsC   s    zNoTrans.get_paramsc                 K   s   |d | _ | S )Nr*   r*   )r,   paramsr-   r-   r.   
set_paramsF   s    
zNoTrans.set_paramsN)F)r0   r1   r2   r8   r:   r=   r-   r-   r-   r.   r4   ?   s   
r4   c                   @   s   e Zd Zdd ZdS )NoInvTransfc                 C   s   |S r(   r-   r,   r6   r-   r-   r.   	transformL   s    zNoInvTransf.transformN)r0   r1   r2   r@   r-   r-   r-   r.   r>   K   s   r>   c                   @   s   e Zd Zdd Zdd ZdS )Transfc                 C   s   |S r(   r-   r?   r-   r-   r.   r@   Q   s    zTransf.transformc                 C   s   |S r(   r-   r?   r-   r-   r.   inverse_transformT   s    zTransf.inverse_transformN)r0   r1   r2   r@   rB   r-   r-   r-   r.   rA   P   s   rA   c                   @   s   e Zd Zdd ZdS )TransfFitParamsc                 K   s
   || _ | S r(   )
fit_paramsr,   r6   r7   rD   r-   r-   r.   r8   Y   s    zTransfFitParams.fitNr0   r1   r2   r8   r-   r-   r-   r.   rC   X   s   rC   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,   rJ   r-   r-   r.   r/   _   s    zMult.__init__c                 C   s   | S r(   r-   r5   r-   r-   r.   r8   b   s    zMult.fitc                 C   s   t || j S r(   npasarrayrJ   r?   r-   r-   r.   r@   e   s    zMult.transformc                 C   s   t || j S r(   rK   r?   r-   r-   r.   rB   h   s    zMult.inverse_transformc                 C   s   t || j jddS )NrH   Zaxis)rL   rM   rJ   sumr?   r-   r-   r.   predictk   s    zMult.predictNc                 C   s
   t |S r(   rL   rO   r5   r-   r-   r.   scorep   s    z
Mult.score)rH   )N)r0   r1   r2   r/   r8   r@   rB   rP   predict_probapredict_log_probadecision_functionrR   r-   r-   r-   r.   rG   ^   s   
rG   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/   w   s    zFitParamT.__init__Fc                 C   s
   || _ d S r(   rW   r,   r6   r7   should_succeedr-   r-   r.   r8   z   s    zFitParamT.fitc                 C   s   | j S r(   rW   r?   r-   r-   r.   rP   }   s    zFitParamT.predictc                 C   s   | j |||d | |S )N)rZ   )r8   rP   rY   r-   r-   r.   fit_predict   s    zFitParamT.fit_predictNc                 C   s   |d ur|| }t |S r(   rQ   )r,   r6   r7   sample_weightr-   r-   r.   rR      s    zFitParamT.score)F)F)NN)	r0   r1   r2   r3   r/   r8   rP   r[   rR   r-   r-   r-   r.   rV   t   s   

rV   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   rN   )rL   meanmeans_time
timestamp_r5   r-   r-   r.   r8      s    
zDummyTransf.fitN)r0   r1   r2   r3   r8   r-   r-   r-   r.   r]      s   r]   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   s   | S r(   r-   r5   r-   r-   r.   r8      s    zDummyEstimatorParams.fitFc                 C   s
   || _ | S r(   got_attributer,   r6   rd   r-   r-   r.   rP      s    zDummyEstimatorParams.predictc                 C   s
   || _ | S r(   rc   re   r-   r-   r.   rS      s    z"DummyEstimatorParams.predict_probac                 C   s
   || _ | S r(   rc   re   r-   r-   r.   rT      s    z&DummyEstimatorParams.predict_log_probaN)F)F)F)r0   r1   r2   r3   r8   rP   rS   rT   r-   r-   r-   r.   rb      s
   

rb   c                  C   s  t t t  W d    n1 s&0    Y  d} t jt| d  tdt fg W d    n1 sh0    Y  t }td|fg}|jddtf d d |d|jddksJ |jd	d
 |j	d	ksJ |j
d u sJ t| t }tt}td|fd|fg}|jd |u sJ |jd |u s.J d} t jt| d& tdt fd|fg W d    n1 sn0    Y  |jd	d |jd	ksJ t| d} t jt| d |jd	d W d    n1 s0    Y  t d  t|}W d    n1 s0    Y  |jd |jd us*J |jdd}|jdd}|jddD ]}|| qN|jddD ]}|| ql|d |d |d |d ||ksJ d S )NzRLast step of Pipeline should implement fit or be the string 'passthrough'.*NoFit.*matchclfsvcTr9   )svc__aZsvc__bri   F皙?)rk   anovaz<All intermediate steps should be transformers.*\bNoTrans\b.*t)Zsvc__Cz-Invalid parameter C for estimator SelectKBest)Zanova__C)pytestraises	TypeErrorr   r'   r4   r:   dictr=   r*   r+   reprr   r   r   named_stepsC
ValueErrorwarnsr   pop)msgrh   pipefilter1pipe2r<   Zparams2xr-   r-   r.   test_pipeline_init   sZ    $.
6,(



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 )NrH      transfrh   r7   passthrough)r   )rL   arrayr   rA   rV   r8   rR   r=   r6   rz   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   krm   Zlogistic)irisdatatargetr   r   r   r   r8   rP   rS   rT   rR   )r6   r7   rh   r{   rz   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 s6J | jd jd u sJJ | jd jd u s^J t	d}t
jt|d  | jd d dd W d    n1 s0    Y  d S )Nr   rh   T)r6   r7   clf__should_succeedz.fit() got an unexpected keyword argument 'bad'rf   )Zclf__bad)r   rA   rV   r8   rP   rt   r*   r+   reescapero   rp   rq   )rz   ry   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sHJ |j| d ddks^J |j| d d ddksvJ |j| t ddgdd	ksJ d S )
NrH   r   r   rh   r      )r7   r\   r\      )rL   r   r   rA   rV   r8   rR   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sHJ |j| d ddks^J td}t	j
t|d	( |j| t ddgd W d    n1 s0    Y  d S )
NrH   r   r   rh   r   r   r   z:score() got an unexpected keyword argument 'sample_weight'rf   )rL   r   r   rA   rG   r8   rR   r   r   ro   rp   rq   )r6   rz   ry   r-   r-   r.   'test_pipeline_sample_weight_unsupported,  s    
r   c                  C   s   t dt fg} td|  d}tjt|d | jdd W d    n1 sR0    Y  tjt|d | jdd W d    n1 s0    Y  d S )Nclsz%Invalid parameter fake for estimator zN. Check the list of available parameters with `estimator.get_params().keys()`.rf   Znope)Zfake)Zfake__estimator)r   r   r   r   ro   rp   rv   r=   )rz   Z	error_msgr-   r-   r.   $test_pipeline_raise_set_params_error9  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pcari   )r   r   r   r   r    r   r8   rP   rS   rT   rR   )r6   r7   rh   r   rz   r-   r-   r.   test_pipeline_methods_pca_svmL  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sXJ |||  t	|| ||
|  d S )	Nr   r   Tr   )Znoveltyr   lofr   )r   r   r    r   r   r8   score_samplesshapefit_transformr   r@   )r6   r   r   rz   r-   r-   r.   #test_pipeline_score_samples_pca_lof[  s    

r   c                  C   sr   t dgdgg} t ddg}tt }|| | tjtdd ||  W d    n1 sd0    Y  d S )NrH   r   z<'LogisticRegression' object has no attribute 'score_samples'rf   )	rL   r   r   r   r8   ro   rp   AttributeErrorr   )r6   r7   rz   r-   r-   r.   4test_score_samples_on_pipeline_without_score_samplesk  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 ]}t
d|fd	|fg}|| | || }	|	j|fksJ || }
|
j||fksJ || }|j||fksJ || }|j||fksJ || | qNd S )
Nr   r   
randomizedT)r   r   r   Zovr)r   r   Zdecision_function_shapeZ
preprocessri   )r   r   r   r   lenrL   uniquer#   r    r   r   r8   rP   rS   rT   rU   rR   )r6   r7   Z	n_samplesZ	n_classesscalerr   rh   Zpreprocessingrz   rP   ZprobaZ	log_probarU   r-   r-   r.   'test_pipeline_methods_preprocessing_svmy  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   ZKmeans)r#   r   r   r   r   r[   r   r   )r   ZkmZscaler_for_pipelineZkm_for_pipelineZscaledZseparate_predrz   Zpipeline_predr-   r-   r.   test_fit_predict_on_pipeline  s    


r   c                  C   sd   t  } tdd}td| fd|fg}d}tjt|d t|d W d    n1 sV0    Y  d S )Nr   r   r   r   z+'PCA' object has no attribute 'fit_predict'rf   r[   )r#   r    r   ro   rp   r   getattr)r   r   rz   ry   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sNJ d| jd jvsbJ d S )Nr   rh   T)r6   r7   Ztransf__should_get_thisr   Zshould_get_thisrZ   )r   rC   rV   r[   rt   rD   rX   )rz   r-   r-   r.   -test_fit_predict_with_intermediate_fit_params  s    r   method_name)rP   rS   rT   c                 C   sN   t dt fdt fg}|d d  t|| }|d dd |jd jsJJ d S )Nr   rh   T)r6   rd   )r   rA   rb   r8   r   rt   rd   )r   rz   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stJ t
|d d d d
f ||  t|d d d
f || |  td|fd|fg}t| }|||}t
||  td  t|}W d    n1 s0    Y  |jd d |jd d usDJ |jdd || |j	| j	d dfksrJ tdt fd|fd|fg}|| |}|j	| j	d dfksJ d}	tjt|	d( tdt fdt fg W d    n1 s0    Y  td|fd|ff}|| | d S )Nr   rN   r   )r   r   rH   r   svdselectr   )Z	select__k   mockr   z>All estimators should implement fit and transform.*\bNoTrans\brf   r@   Zno_transform)r   r   r^   r   r!   r   r   r8   r@   r   r   r   r   ravelr   Z
csr_matrixtoarrayro   rw   r   transformer_listr=   rA   rp   rq   r4   )
r6   r7   r   r   fsX_transformedZX_spZX_sp_transformedZfs2ry   r-   r-   r.   test_feature_union  s8    

 "
(""8r   c                  C   sH   t dd} t }t| |}t|j \}}|dks4J || |fksDJ d S )Nr   r   )r   r   )r    rA   r   zipr   )r   r   funamesZtransformersr-   r-   r.   test_make_union  s    

r   c                  C   s   t dd} t }t| |dd}|jt| |jks4J d|jksBJ td}tjt	|d$ t| |ddd	d
 W d    n1 s0    Y  d S )Nr   r   r   n_jobszEmake_union() got an unexpected keyword argument 'transformer_weights'rf   
   rH   )r   rA   Ztransformer_weights)
r    rA   r   r   r   r   r   ro   rp   rq   )r   r   r   ry   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   r8   r@   r   r   rB   )r6   r   pipelineX_transX_trans2ZX_trans3ZX_backZ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   rA   r   r   r8   r@   r   )r6   r7   r   r   r   r   r-   r-   r.   test_pipeline_fit_transform-  s    r   z
start, end))r   rH   )r   r   )rH   r   )rH   r   )NrH   )rH   N)NNc                 C   s   t dt fdt fdt fgddd}|| | }t|t s@J |j|j| | ksXJ t|j t|j | | ksJ |jdd}|jdd}|d	= |d	= ||ksJ d
}t	j
t|d || |d  W d    n1 s0    Y  d S )Ntransf1transf2rh   Z123T)memoryverboseFrj   stepsz*Pipeline slicing only supports a step of 1rf   r   )r   rA   rV   
isinstancer   listrt   itemsr:   ro   rp   rv   )startendrz   Z
pipe_sliceZpipe_paramsZpipe_slice_paramsry   r-   r-   r.   test_pipeline_slice:  s(    r   c                  C   s   t  } t }td| fd|fg}|d | ks0J |d | ks@J |d |ksPJ |d |ks`J tt |d  W d    n1 s0    Y  tt |d  W d    n1 s0    Y  d S )Nr   rh   r   r   r   Zfoobar)rA   rV   r   ro   rp   
IndexErrorKeyError)r   rh   rz   r-   r-   r.   test_pipeline_indexY  s    &r   c                  C   sR  t  } t  }td| fg}|jd | u s,J d|fg|_d|jvsFJ |jd |u sXJ d|fg|jkslJ |jd| fgd d| fg|jksJ |j|d d|fg|jksJ |jdgd td}tjt	|d" |
dggdg W d    n1 s0    Y  tjt	|d" |dggdg W d    n1 sD0    Y  d S )	Nr   mock2r   r   )Zjunkr-   zJLast step of Pipeline should implement fit or be the string 'passthrough'.rf   rH   )rA   r   rt   r   r=   r   r   ro   rp   rq   r8   r   )r   r   r   ry   r-   r-   r.   test_set_pipeline_stepsk  s(    2r   c                  C   s   t  } tdd}td| fd|fg}d|jv s2J d|jvs@J |jj| u sPJ |jj|u s`J td| fd|fg}|jj| usJ |jj|u sJ d S )Nr   rI   r   rJ   r   values)rA   rG   r   rt   r   rJ   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sJ d S )NrH   r   rI   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>)rL   r   rG   r   r8   r   )	r   r6   r7   r   mult3mult5r   Zexpected_namesZ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sJ |j| d d}t|gg||| t|g||| t|||gg g d}|D ]}t||| qn|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 sf0    Y  d
}td fd| fdfg}t|gg||| t|g||| t|||gg d S )NrH   r   rI   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   Trj   F)r   r   r   r   r   Zm2__multZ
last__multr   r   )rS   rT   rU   r@   rR   )r      z''str' object has no attribute 'predict'rf   rP   r   r   r   )rL   r   rG   r   r   r8   rP   rB   r=   r:   r   r   r@   ro   rp   r   r   )	r   r6   r7   r   r   ZexpZother_methodsr   ry   r-   r   r.   "test_set_pipeline_step_passthrough  sj    



*r   c                  C   s   t td} | j | j | j t t } t| dr6J | j | j t d} | jd dks\J t| drjJ | j | j t t t } t| drJ | j t| drJ t t t } t| drJ | j t| drJ d S )Nr   rP   r   r   )r   r   rB   )	r   rG   rP   r@   rB   rA   hasattrr   r>   )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sPJ t| |t }t|tslJ |jd d dksJ |jd d dksJ |jd d dksJ d S )Nr   ztransf-1rH   ztransf-2r   Z	fitparamt)rA   r   r   r   r   rV   )t1t2rz   r-   r-   r.   test_make_pipeline  s    
r   c                  C   sX  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sTJ d S )Nr   r   r   )r   r   r   rH   r   r   r   r   r   r   r      )r   r   r   r    r   r   r8   r@   r   rA   r   r   r   r   )r6   r7   r   r   r   r   ZX_fit_transformedZX_fit_transformed_wo_methodr-   r-   r.   test_feature_union_weights&  s.    

$"$"r   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sJ ||  || }|j|jksJ t| |  |	| }t| |  || }t| |  d S )	Nwordswordanalyzercharscharr   r   r   )
JUNK_FOOD_DOCSr   r$   r8   r@   r   r   r   r   r   )r6   r   Zfs_parallelZfs_parallel2r   ZX_transformed_parallelZX_transformed_parallel2r-   r-   r.   test_feature_union_parallelG  s:    





r  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 sDd	|v sDJ qDt|d
ksnJ tdt fgdgg}td|  }t	j
t|d t||   W d    n1 s0    Y  d S )Nr  r  Zchar_wb)r   r   )r  Zngram_ranger  r  Zchars__Zwords__#   Ztr1rH   z/Transformer tr1 (type Transf) does not provide rf   )r$   r   r8   r  r   r   rA   r   r   ro   rp   r   )r	  Z	word_vectZ	char_vectftfeature_namesZfeatry   r-   r-   r.    test_feature_union_feature_namesu  s    

r  c                  C   s   t j} t j}ttddt }|| | tt	 t
|d W d    n1 sT0    Y  ttddtdd}tt	 t
|d W d    n1 s0    Y  || | t|jt| d S )NrH   r   classes_r   r   )r   r   r   r   r   r   r8   ro   rp   r   r   r   r   r  rL   r   )r6   r7   Zregrh   r-   r-   r.   test_classes_property  s    ((r  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   r
  c                   S   s   dgS NZx3r-   r-   r-   r-   r.   <lambda>  r   z.test_set_feature_union_steps.<locals>.<lambda>c                   S   s   dgS NZx2r-   r-   r-   r-   r.   r    r   c                   S   s   dgS NZx5r-   r-   r-   r-   r.   r    r   c                 S   s   dgS r  r-   input_featuresr-   r-   r.   r    r   c                 S   s   dgS r  r-   r  r-   r-   r.   r    r   c                 S   s   dgS r  r-   r  r-   r-   r.   r    r   r   r   rH   m2__x2m3__x3r   Zm5__x5r   )r   Zmock__x3r   Zmock__x5)rG   r
  r  r   r   r@   rL   rM   r   r   r=   )r	  r   r   r   r  r-   r-   r.   test_set_feature_union_steps  s,    




 r  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
||   td J}|jdd tdgg||| tdgg|	| W d    n1 s0    Y  tdgt
||   |r0J td F}|jdd tg g||| tg g|	| W d    n1 s0    Y  tg t
||   |rJ td 6}|j|d tdgg||| W d    n1 s0    Y  |r
J td N}tdd|fg}tdgg||| tdgg|	| W d    n1 sj0    Y  tdgt
||   |rJ d S )Nr   r   r
  c                   S   s   dgS r  r-   r-   r-   r-   r.   r    r   z2test_set_feature_union_step_drop.<locals>.<lambda>c                   S   s   dgS r  r-   r-   r-   r-   r.   r    r   c                 S   s   dgS r  r-   r  r-   r-   r.   r    r   c                 S   s   dgS r  r-   r  r-   r-   r.   r    r   rH   r   r   r  r  dropr   r   )r   r  )rG   r
  r  rL   rM   r   r   r8   r@   r   r   ro   rw   r=   )r	  r   r   r6   r  recordr-   r-   r.    test_set_feature_union_step_drop  sD    


4
2
:
4r  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" |f i ||i W d    n1 s0    Y  |f i |dt dfgi}
t|
|| tjt|	d" |
dggdg W d    n1 s20    Y  tjt|	d" |
dggdg W d    n1 st0    Y  |f i |dt dfgi}
|
j	f i ||i tjt|	d" |
dggdg W d    n1 s0    Y  tjt|	d" |
dggdg W d    q1 s(0    Y  qqLd 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'\]Za__qr   r+   r   r*   r   r   rf   rH   )
rG   r   r   ro   rp   rv   setattrr8   r   r=   )Zerror_message_1Zerror_message_2Zerror_message_3Z
bad_steps1Z
bad_steps2r   ZparamZ
bad_steps3Z	bad_stepsmessageestr-   r-   r.   test_step_name_validation  s2    
0222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?)Za__b__alphaZa__br   )Za__stepsZa__b__C)r   r   r=   r   r   )Z	estimatorr-   r-   r.   test_set_params_nested_pipeline  s    r"  c                  C   st   t j} t j}d}tdt fdt fg|d}td}tj	t
|d || | W d    n1 sf0    Y  d S )NrH   r   ri   r   zf'memory' should be None, a string or have the same interface as joblib.Memory. Got memory='1' instead.rf   )r   r   r   r   r]   r   r   r   ro   rp   rv   r8   )r6   r7   r   cached_pipery   r-   r-   r.   test_pipeline_wrong_memory  s    r%  c                   @   s   e Zd Zdd ZdS )DummyMemoryc                 C   s   |S r(   r-   )r,   funcr-   r-   r.   cache-  s    zDummyMemory.cacheN)r0   r1   r2   r(  r-   r-   r-   r.   r&  ,  s   r&  c                   @   s   e Zd ZdS )WrongDummyMemoryN)r0   r1   r2   r-   r-   r-   r.   r)  1  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    n1 s0    Y  d S )
NrH   r   r   rh   r#  r   z['memory' should be None, a string or have the same interface as joblib.Memory. Got memory='z
' instead.rf   )rL   r   r   rA   rG   r&  r8   r)  r   r   ro   rp   rv   )r6   rz   Zdummyry   r-   r-   r.   "test_pipeline_with_cache_attribute5  s    r*  c               	   C   s  t j} t j}t }zttjtdk r8tj|dd}nt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r2J || | 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sJ W t| nt| 0 d S )N0.12r   cachedirr   locationr   Tr   r   r   ri   r#  r_   transf_2)r   r   r   r   r   joblib__version__Memoryr   r]   r   r   r8   rt   ra   r   rP   rS   rT   rR   r_   r   shutilrmtree)r6   r7   r-  r   rh   r   rz   r$  ZtsZclf_2r0  Zcached_pipe_2r-   r-   r.   test_pipeline_memoryC  sb    

r6  c                  C   s   t  } ttjtdk r(tj| dd}ntj| dd}tt t |d}|j|u sVJ tt t }|jd u srJ t	|dksJ t
|  d S )Nr+  r   r,  r.  r#  r   )r   r   r1  r2  r3  r   r]   r   r   r   r4  r5  )r-  r   r   r-   r-   r.   test_make_pipeline_memory  s    r7  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)Z_check_feature_namesr5   r-   r-   r.   r8     s    zFeatureNameSaver.fitc                 C   s   |S r(   r-   r5   r-   r-   r.   r@     s    zFeatureNameSaver.transformc                 C   s   |S r(   r-   )r,   r  r-   r-   r.   r    s    z&FeatureNameSaver.get_feature_names_out)N)N)N)r0   r1   r2   r8   r@   r  r-   r-   r-   r.   r8    s   

r8  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   rh   r   Nr   )
r   r8  r   r"   r8   r   r   r   r  r  )rz   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 vectorizersZvectrh   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   )ZbeerZburgerZcoke	copyrightr<  ZtheZnonsense_is_ignored)r   r$   r   r  r8   r   r  )rz   r7   r-   r-   r.   #test_feature_names_count_vectorizer  s    r>  c                  C   sf   t dt fgd} t }| |j|j d}tjt|d | 	  W d   n1 sX0    Y  dS )zZCheck that error is raised when a transformer does not define
    `get_feature_names_out`.Znotransr   z&does not provide get_feature_names_outrf   N)
r   r4   r"   r8   r   r   ro   rp   r   r  )rz   r   ry   r-   r-   r.   8test_pipeline_feature_names_out_error_without_definition  s    r?  c                  C   s\   t t } tjtdd0 | jdgdggddgddgd W d    n1 sN0    Y  d S )Nz8Pipeline.fit does not accept the sample_weight parameterrf   r   rH   r   )r   r   ro   rp   rv   r8   )rh   r-   r-   r.   test_pipeline_param_error  s
    
r@  c                 c   sP   | ]H\\}}}t ||r|d kr>t |dr>t|jd d ts|||fV  qdS )r   r   r   rH   N)r   r   r   rV   )r   r   patternr   r-   r-   r.   	<genexpr>  s   
4

rB  r   rh   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$)rC  r   )rh   N)r   NrJ   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$)rD  r  )r   r  z@\[FeatureUnion\].*\(step 1 of 1\) Processing mult2.* total=.*\n$)r8   r   r[   zest, pattern, methodc                 C   s~   t | |}g dg dg}dgdgg}| jdd ||| | jrNJ d| jdd ||| t|| jszJ d S )	N)rH   r   r   )r   r   r   r   r   F)r   zGot output for verbose=FalseT)r   r=   Z
readouterroutr   rg   )r   r   rA  Zcapsysr'  r6   r7   r-   r-   r.   test_verbose  s    


rF  c                  C   s   ddgddgddgg} g d}t  }t }t||}t|drBJ || | |j|j  krfdksln J t  }t }t||}|| | |j|j  krdksn J t|drJ d S 	NrH   r   r   r   r   r   r   rH   r   n_features_in_)r#   r%   r   r   r8   rI  )r6   r7   ssZgbdtrz   r-   r-   r.   test_n_features_in_pipeline$  s    

rK  c                  C   s   ddgddgddgg} g d}t  }t|}t|dr:J || | |j|j  kr^dksdn J t  }t|}|| | |j|j  krdksn J d S rG  )r#   r   r   r8   rI  )r6   r7   rJ  r   r-   r-   r.    test_n_features_in_feature_union;  s    rL  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 sd0    Y  tt |
|| W d    n1 s0    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   )rv   rE   r-   r-   r.   r8   R  s    z0test_feature_union_fit_params.<locals>.Dummy.fitc                 S   s   |S r(   r-   r5   r-   r-   r.   r@   W  s    z6test_feature_union_fit_params.<locals>.Dummy.transform)N)N)r0   r1   r2   r8   r@   r-   r-   r-   r.   DummyQ  s   
rM  Zdummy0Zdummy1r   r;   )r   r   r   r   r   r   ro   rp   rv   r8   r   )rM  r6   r7   rn   r-   r-   r.   test_feature_union_fit_paramsO  s    	**rN  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sdJ d S )NrH   r   rl   g?)pg?)r   r   r   rL   randomZchoicer   Zastypeboolnanr   r&   r   r8   rR   )r6   r7   maskrz   r-   r-   r.   %test_pipeline_missing_values_leniencyf  s
    "
rT  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    n1 sr0    Y  d S )NrH   r   r   r   r   r   rH  r   transformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.r   rf   )rA   r   ro   rp   rv   r8   )r6   r7   r   ZweightsZexpected_msgunionr-   r-   r.   3test_feature_union_warns_unknown_transformer_weightp  s    rW  c                  C   s^   d} t d}dd |_td|fg}tjt| d |  W d   n1 sP0    Y  dS )z*Check that get_feature_names is deprecatedz&get_feature_names is deprecated in 1.0r   c                   S   s   dgS r  r-   r-   r-   r-   r.   r    r   zAtest_feature_union_get_feature_names_deprecated.<locals>.<lambda>r   rf   N)rG   r
  r   ro   rw   FutureWarning)ry   r   r  r-   r-   r.   /test_feature_union_get_feature_names_deprecated  s    
rY  c                 C   s    t | t }| d rJ d S )NZpairwise)r   r   Z	_get_tags)r   rz   r-   r-   r.   test_pipeline_get_tags_none  s    rZ  	Predictorc                 C   s   t jd}|ddt dgd dgd   }}tdt fd|  fg}||| ||}t	|rt
|d |||tt||ksJ n.t||  |||tt||ksJ d S )	Nr      r   r   rH      rU  Z	predictor)rL   rP  ZRandomStateZrandnr   r   r
   r8   rP   r   r   rR   ro   Zapproxr   r   r^   r   )r[  rngr6   r7   ZmodelZ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 sH0    Y  |tjtj	 t| d S )Nc                   @   s   e Zd Zdd ZdS )z0test_pipeline_check_if_fitted.<locals>.Estimatorc                 S   s
   d| _ | S )NT)Zfitted_r5   r-   r-   r.   r8     s    z4test_pipeline_check_if_fitted.<locals>.Estimator.fitNrF   r-   r-   r-   r.   	Estimator  s   r`  rh   )
r   r   ro   rp   r   r   r8   r   r   r   )r`  r   r-   r-   r.   test_pipeline_check_if_fitted  s    &ra  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 )Nr  c                 S   s   g | ]}d | qS Z
my_prefix_r-   r   r   r-   r-   r.   r     r   ztest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_out.<locals>.<listcomp>)Zdtype)superr  rL   rM   object)r,   r  r   	__class__r-   r.   r    s    zotest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_out)N)r0   r1   r2   r  __classcell__r-   r-   rf  r.   AddPrefixStandardScalar  s   ri  c                 S   s   g | ]}d | qS rb  r-   rc  r-   r-   r.   r     r   zLtest_pipeline_get_feature_names_out_passes_names_through.<locals>.<listcomp>N)	r   r   r   r#   r   r8   r  r  r   )r6   r7   ri  rz   Zinput_namesZfeature_names_outr-   r-   r.   8test_pipeline_get_feature_names_out_passes_names_through  s    
rj  )r3   Ztempfiler   r4  r`   r   	itertoolsro   ZnumpyrL   Zscipyr   r1  Zsklearn.utils.fixesr   Zsklearn.utils._testingr   r   r   r   r	   r
   Zsklearn.exceptionsr   Zsklearn.utils.validationr   Zsklearn.baser   r   r   r   Zsklearn.pipeliner   r   r   r   Zsklearn.svmr   Zsklearn.neighborsr   Zsklearn.linear_modelr   r   r   Zsklearn.metricsr   r   Zsklearn.clusterr   Zsklearn.feature_selectionr   r   Zsklearn.dummyr   Zsklearn.decompositionr    r!   Zsklearn.datasetsr"   Zsklearn.preprocessingr#   Zsklearn.feature_extraction.textr$   Zsklearn.ensembler%   Zsklearn.imputer&   r   r  r'   r4   r>   rA   rC   rG   rV   r]   rb   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   ZmarkZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  filterwarningsr  r  r  r  r!  r"  r%  r&  r)  r*  r6  r7  r8  r;  r>  r?  r@  productZparameter_grid_test_verboserF  rK  rL  rN  rT  rW  rY  rZ  r_  ra  rj  r-   r-   r-   r.   <module>   s,   
N
/	
 

L!.

#
/&C1?



