B
    0d                 @   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\]dHdIdJdKgdLdM Z^dNdO Z_dPdQ Z`dRdS ZadTdU ZbdVdW Zcej\]dXdYdZd[d\d]d^d_gd`da Zddbdc Zeddde Zfdfdg Zgej\]dhddhgdidj Zhej\]dhddhgdkdl Zidmdn Zjdodp Zkdqdr Zldsdt Zmej\nduej\]dvdwdxgdydz Zod{d| Zpej\nduej\]dvdwdxgd}d~ Zqej\nduej\]dvdwdxgdd Zrdd Zsdd Ztdd ZuG dd 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dddgD Zej\]dedd Zdd Zdd Zdd Zdd Zdd Zdd Zej\]dhddhg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+   M/var/www/html/venv/lib/python3.7/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 )Nr+   )r*   Xyr+   r+   r,   fit@   s    zNoTrans.fitFc             C   s   | j | jdS )N)r(   r)   )r(   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)r.   r/   r0   r5   r7   r9   r+   r+   r+   r,   r2   ?   s   
r2   c               @   s   e Zd Zdd ZdS )NoInvTransfc             C   s   |S )Nr+   )r*   r3   r+   r+   r,   	transformL   s    zNoInvTransf.transformN)r.   r/   r0   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 )Nr+   )r*   r3   r+   r+   r,   r;   Q   s    zTransf.transformc             C   s   |S )Nr+   )r*   r3   r+   r+   r,   inverse_transformT   s    zTransf.inverse_transformN)r.   r/   r0   r;   r=   r+   r+   r+   r,   r<   P   s   r<   c               @   s   e Zd Zdd ZdS )TransfFitParamsc             K   s
   || _ | S )N)
fit_params)r*   r3   r4   r?   r+   r+   r,   r5   Y   s    zTransfFitParams.fitN)r.   r/   r0   r5   r+   r+   r+   r,   r>   X   s   r>   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 )N)mult)r*   rB   r+   r+   r,   r-   _   s    zMult.__init__c             C   s   | S )Nr+   )r*   r3   r4   r+   r+   r,   r5   b   s    zMult.fitc             C   s   t || j S )N)npasarrayrB   )r*   r3   r+   r+   r,   r;   e   s    zMult.transformc             C   s   t || j S )N)rC   rD   rB   )r*   r3   r+   r+   r,   r=   h   s    zMult.inverse_transformc             C   s   t || j jddS )NrA   )axis)rC   rD   rB   sum)r*   r3   r+   r+   r,   predictk   s    zMult.predictNc             C   s
   t |S )N)rC   rF   )r*   r3   r4   r+   r+   r,   scorep   s    z
Mult.score)rA   )N)r.   r/   r0   r-   r5   r;   r=   rG   predict_probapredict_log_probadecision_functionrH   r+   r+   r+   r,   r@   ^   s   
r@   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 )N)rM   )r*   r3   r4   should_succeedr+   r+   r,   r5   z   s    zFitParamT.fitc             C   s   | j S )N)rM   )r*   r3   r+   r+   r,   rG   }   s    zFitParamT.predictc             C   s   | j |||d | |S )N)rN   )r5   rG   )r*   r3   r4   rN   r+   r+   r,   fit_predict   s    zFitParamT.fit_predictNc             C   s   |d k	r|| }t |S )N)rC   rF   )r*   r3   r4   sample_weightr+   r+   r,   rH      s    zFitParamT.score)F)F)NN)	r.   r/   r0   r1   r-   r5   rG   rO   rH   r+   r+   r+   r,   rL   t   s   

rL   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   )rE   )rC   meanmeans_time
timestamp_)r*   r3   r4   r+   r+   r,   r5      s    
zDummyTransf.fitN)r.   r/   r0   r1   r5   r+   r+   r+   r,   rQ      s   rQ   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 )Nr+   )r*   r3   r4   r+   r+   r,   r5      s    zDummyEstimatorParams.fitFc             C   s
   || _ | S )N)got_attribute)r*   r3   rW   r+   r+   r,   rG      s    zDummyEstimatorParams.predictc             C   s
   || _ | S )N)rW   )r*   r3   rW   r+   r+   r,   rI      s    z"DummyEstimatorParams.predict_probac             C   s
   || _ | S )N)rW   )r*   r3   rW   r+   r+   r,   rJ      s    z&DummyEstimatorParams.predict_log_probaN)F)F)F)r.   r/   r0   r1   r5   rG   rI   rJ   r+   r+   r+   r,   rV      s
   

rV   c           	   C   sT  t t t  W d Q R X d} t jt| d tdt fg W d Q R X t }td|fg}|jddtf d d |d|jddkst|j	d	d
 |j
d	kst|jd kstt| t }tt}td|fd|fg}|jd |kst|jd |kstd} t jt| d tdt fd|fg W d Q R X |j	d	d |jd	ksTtt| d} t jt| d |j	d	d W d Q R X t d  t|}W d Q R X |jd |jd k	st|jdd}|jdd}x |jddD ]}|| qW x |jddD ]}|| qW |d |d |d |d ||ksPtd S )NzRLast step of Pipeline should implement fit or be the string 'passthrough'.*NoFit.*)matchclfsvcT)r6   )svc__aZsvc__brZ   Fg?)r[   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'   r2   r7   dictAssertionErrorr9   r(   r)   reprr   r   r   named_stepsC
ValueErrorwarnsr   pop)msgrY   pipefilter1pipe2r8   Zparams2xr+   r+   r,   test_pipeline_init   sR      



rn   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 )NrA      transfrY   )r4   passthrough)rp   )rC   arrayr   r<   rL   r5   rH   r9   )r3   rj   r+   r+   r,   test_pipeline_init_tuple   s    
rs   c              C   sl   t j} t j}t }ttdd}td|fd|fg}|| | ||  |	|  |
|  || | d S )Nro   )kr\   Zlogistic)irisdatatargetr   r   r   r   r5   rG   rI   rJ   rH   )r3   r4   rY   rk   rj   r+   r+   r,   test_pipeline_methods_anova  s    


rx   c           	   C   s   t dt fdt fg} | jd d dd | d s6t| jd jd ksJt| jd jd ks^tt	
d}tjt|d | jd d dd W d Q R X d S )Nrp   rY   T)r3   r4   clf__should_succeedz.fit() got an unexpected keyword argument 'bad')rX   )Zclf__bad)r   r<   rL   r5   rG   rb   rd   r(   r)   reescaper^   r_   r`   )rj   ri   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sHt|j| d ddks^t|j| d d ddksvt|j| t ddgdd	kstd S )
NrA   ro   rp   rY   )r4      )r4   rP   )rP      )rC   rr   r   r<   rL   r5   rH   rb   )r3   rj   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sHt|j| d ddks^tt	d}t
jt|d	 |j| t ddgd W d Q R X d S )
NrA   ro   rp   rY   )r4   r}   )rP   z:score() got an unexpected keyword argument 'sample_weight')rX   )rC   rr   r   r<   r@   r5   rH   rb   rz   r{   r^   r_   r`   )r3   rj   ri   r+   r+   r,   'test_pipeline_sample_weight_unsupported,  s    
r   c           	   C   sr   t dt fg} td|  d}tjt|d | jdd W d Q R X tjt|d | jdd W d Q R X d S )Nclsz%Invalid parameter fake for estimator zN. Check the list of available parameters with `estimator.get_params().keys()`.)rX   Znope)Zfake)Zfake__estimator)r   r   rz   r{   r^   r_   rf   r9   )rj   	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pcarZ   )ru   rv   rw   r   r    r   r5   rG   rI   rJ   rH   )r3   r4   rY   r   rj   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sXt||	|  t
|| |||  d S )	Nr   r   T)r   r   r   )Znoveltyr   lofr   )ru   rv   r    r   r   r5   score_samplesshaperb   fit_transformr   r;   )r3   r   r   rj   r+   r+   r,   #test_pipeline_score_samples_pca_lof[  s    

r   c           	   C   s^   t dgdgg} t ddg}tt }|| | tjtdd ||  W d Q R X d S )NrA   ro   z<'LogisticRegression' object has no attribute 'score_samples')rX   )	rC   rr   r   r   r5   r^   r_   AttributeErrorr   )r3   r4   rj   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}x||gD ]}t
d|fd	|fg}|| | || }	|	j|fkst|| }
|
j||fkst|| }|j||fkst|| }|j||fkst|| | qPW d S )
Nr   ro   
randomizedT)r   r   r   Zovr)r   r   Zdecision_function_shape
preprocessrZ   )ru   rv   rw   r   lenrC   uniquer#   r    r   r   r5   rG   rb   rI   rJ   rK   rH   )r3   r4   Z	n_samplesZ	n_classesscalerr   rY   Zpreprocessingrj   rG   ZprobaZ	log_probarK   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   ru   rv   rO   r   r   )r   kmZscaler_for_pipelineZkm_for_pipelineZscaledZseparate_predrj   Zpipeline_predr+   r+   r,   test_fit_predict_on_pipeline  s    


r   c           	   C   sP   t  } tdd}td| fd|fg}d}tjt|d t|d W d Q R X d S )Nr   )r   r   r   z+'PCA' object has no attribute 'fit_predict')rX   rO   )r#   r    r   r^   r_   r   getattr)r   r   rj   ri   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>t| jd jsNtd| jd jksbtd S )Nrp   rY   T)r3   r4   Ztransf__should_get_thisry   Zshould_get_thisrN   )r   r>   rL   rO   rd   r?   rb   rM   )rj   r+   r+   r,   -test_fit_predict_with_intermediate_fit_params  s    r   method_namerG   rI   rJ   c             C   sN   t dt fdt fg}|d d  t|| }|d dd |jd jsJtd S )Nrp   rY   T)r3   rW   )r   r<   rV   r5   r   rd   rW   rb   )r   rj   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stt
t|d d d d
f ||  t|d d d
f || |  td|fd|fg}t| }|||}t||  td  t|}W d Q R X |jd d |jd d k	s.t
|jdd || |j	| j	d dfks\t
tdt fd|fd|fg}|| |}|j	| j	d dfkst
d}	tjt|	d tdt fdt fg W d Q R X td|fd|ff}|| | d S )Nr   )rE   ro   )r   r   rA   )rt   svdselectr}   )Z	select__k   mockr~   z>All estimators should implement fit and transform.*\bNoTrans\b)rX   r;   Zno_transform)ru   rv   rR   rw   r!   r   r   r5   r;   r   rb   r   r   r   ravelr   Z
csr_matrixtoarrayr^   rg   r   transformer_listr9   r<   r_   r`   r2   )
r3   r4   r   r   fsX_transformedZX_spZX_sp_transformedZfs2ri   r+   r+   r,   test_feature_union  s8    

 "
"""r   c              C   sH   t dd} t }t| |}t|j \}}|dks4t|| |fksDtd S )Nr   )r   )r   rp   )r    r<   r   zipr   rb   )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s4td|jksBttd}tj	t
|d t| |ddd	d
 W d Q R X d S )Nr   )r   r}   )n_jobszEmake_union() got an unexpected keyword argument 'transformer_weights')rX   
   rA   )r   r<   )transformer_weights)r    r<   r   r   rb   r   rz   r{   r^   r_   r`   )r   r   r   ri   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 )Nro   r   )r   r   r   )	ru   rv   r    r   r5   r;   r   r   r=   )r3   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   )	ru   rv   rw   r<   r   r   r5   r;   r   )r3   r4   rp   r   r   r   r+   r+   r,   test_pipeline_fit_transform-  s    r   z
start, end)r   rA   )r   ro   )rA   ro   )rA   r}   )NrA   )rA   N)NNc          	   C   s   t dt fdt fdt fgddd}|| | }t|t s@t|j|j| | ksXtt|j t|j | | kst|j	dd}|j	dd}|d	= |d	= ||kstd
}t
jt|d || |d  W d Q R X d S )Ntransf1transf2rY   Z123T)memoryverboseF)r6   stepsz*Pipeline slicing only supports a step of 1)rX   r   )r   r<   rL   
isinstancerb   r   listrd   itemsr7   r^   r_   rf   )startendrj   Z
pipe_sliceZpipe_paramsZpipe_slice_paramsri   r+   r+   r,   test_pipeline_slice:  s"    r   c           	   C   s   t  } t }td| fd|fg}|d | ks0t|d | ks@t|d |ksPt|d |ks`ttt |d  W d Q R X tt |d  W d Q R X d S )Nrp   rY   r   r   r}   Zfoobar)r<   rL   r   rb   r^   r_   
IndexErrorKeyError)rp   rY   rj   r+   r+   r,   test_pipeline_indexY  s    r   c           	   C   s&  t  } t  }td| fg}|jd | ks,td|fg|_d|jksFt|jd |ksXtd|fg|jkslt|jd| fgd d| fg|jkst|j|d d|fg|jkst|jdgd td}tj	t
|d |dggdg W d Q R X tj	t
|d |dggdg W d Q R X d S )	Nr   mock2)r   )r   )Zjunkr+   zJLast step of Pipeline should implement fit or be the string 'passthrough'.)rX   rA   )r<   r   rd   rb   r   r9   rz   r{   r^   r_   r`   r5   r   )r   r   r   ri   r+   r+   r,   test_set_pipeline_stepsk  s&    r   c              C   s   t  } tdd}td| fd|fg}d|jks2td|jks@t|jj| ksPt|jj|ks`ttd| fd|fg}|jj| k	st|jj|kstd S )Nro   )rB   r   rB   r   values)r<   r@   r   rd   rb   r   rB   r   )rp   mult2r   r+   r+   r,   test_pipeline_named_steps  s    
r   rq   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}||| dddd	g}d
d |jD }||kstd S )NrA   ro   )rB   r}      m2badm3m5c             S   s   g | ]\}}|qS r+   r+   ).0name_r+   r+   r,   
<listcomp>  s    z9test_pipeline_correctly_adjusts_steps.<locals>.<listcomp>)rC   rr   r@   r   r5   r   rb   )	rq   r3   r4   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t|j| d d}t|gg||| t|g||| t|||gg dddddg}x|D ]}t||| qvW |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 Q R X d
}td fd| fdfg}t|gg||| t|g||| t|||gg d S )NrA   ro   )rB   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   T)r6   F)r   r   r   r   r   Zm2__multZ
last__multr   )r   rI   rJ   rK   r;   rH   )r      z''str' object has no attribute 'predict')rX   rG   r   r   r   )rC   rr   r@   r   r   r5   rG   r=   r9   r7   r   rb   r   r;   r^   r_   r   r   )	rq   r3   r4   r   r   expZother_methodsr   ri   r+   )r   r   r   r,   "test_set_pipeline_step_passthrough  sp    




r   c              C   s   t td} | j | j | j t t } t| dr6t| j | j t d} | jd dks\tt| drjt| j | j t t t	 } t| drt| j t| drtt t	 t } t| drt| j t| drtd S )Nr   rG   rq   r   )rq   rq   r=   )
r   r@   rG   r;   r=   r<   hasattrrb   r   r:   )r   r+   r+   r,   test_pipeline_ducktyping  s*    
r   c              C   s   t  } t  }t| |}t|ts$t|jd d dks:t|jd d dksPtt| |t }t|tslt|jd d dkst|jd d dkst|jd d dkstd S )Nr   ztransf-1rA   ztransf-2ro   Z	fitparamt)r<   r   r   r   rb   r   rL   )t1t2rj   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sTtd S )Nro   r   r   )r   r   r   rA   )rt   r   r   r   )r   r   r      )ru   rv   rw   r    r   r   r5   r;   r   r<   r   r   r   r   rb   )r3   r4   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st||  || }|j|jkstt|	 |	  |
| }t|	 |	  || }t|	 |	  d S )	Nwordsword)analyzercharscharro   )r   r   )JUNK_FOOD_DOCSr   r$   r5   r;   r   r   rb   r   r   r   )r3   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||  }x |D ]}d|ksFd	|ksFtqFW t|d
ksrttdt fgdgg}t	d|  }t
jt|d t||   W d Q R X d S )Nr   )r   Zchar_wb)r}   r}   )r   Zngram_ranger   r   Zchars__Zwords__#   Ztr1rA   z/Transformer tr1 (type Transf) does not provide )rX   )r$   r   r5   r   r   rb   r   r<   rz   r{   r^   r_   r   )r   Z	word_vectZ	char_vectftfeature_namesZfeatri   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 Q R X ttddtdd}tt	 t
|d W d Q R X || | t|jt| d S )NrA   )rt   classes_r   )r   )ru   rv   rw   r   r   r   r5   r^   r_   r   r   r   r   r   rC   r   )r3   r4   regrY   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 )Nro   r}   r   r   c               S   s   dgS )Nx3r+   r+   r+   r+   r,   <lambda>      z.test_set_feature_union_steps.<locals>.<lambda>c               S   s   dgS )Nx2r+   r+   r+   r+   r,   r     r   c               S   s   dgS )Nx5r+   r+   r+   r+   r,   r     r   c             S   s   dgS )Nr   r+   )input_featuresr+   r+   r,   r     r   c             S   s   dgS )Nr   r+   )r   r+   r+   r,   r     r   c             S   s   dgS )Nr   r+   )r   r+   r+   r,   r     r   r   r   rA   m2__x2m3__x3r   Zm5__x5r   )r   Zmock__x3)r   Zmock__x5)r@   r   r   r   r   r;   rC   rD   r   r   r9   )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dd tdgg||| tdgg|	| W d Q R X tdgt
||   |rttd <}|jdd tg g||| tg g|	| W d Q R X tg t
||   |rttd ,}|j|d tdgg||| W d Q R X |rttd D}tdd|fg}tdgg||| tdgg|	| W d Q R X tdgt
||   |r:td S )Nro   r}   r   c               S   s   dgS )Nr   r+   r+   r+   r+   r,   r     r   z2test_set_feature_union_step_drop.<locals>.<lambda>c               S   s   dgS )Nr   r+   r+   r+   r+   r,   r     r   c             S   s   dgS )Nr   r+   )r   r+   r+   r,   r     r   c             S   s   dgS )Nr   r+   )r   r+   r+   r,   r     r   rA   r   r   r   r   drop)r   )r   )r   r   )r@   r   r   rC   rD   r   r   r5   r;   r   r   r^   rg   r9   rb   )r   r   r   r3   r   recordr+   r+   r,    test_set_feature_union_step_drop  sD    




$
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}xtd	ftd
fgD ]p\}}dt df|t dfg}xL|| f||f||| fgD ],\}}	tjt|	d |f ||i W d Q R X |f |dt dfgi}
t|
|| tjt|	d |
dggdg W d Q R X tjt|	d |
dggdg W d Q R X |f |dt dfgi}
|
j	f ||i tjt|	d |
dggdg W d Q R X tjt|	d |
dggdg W d Q R X qW qPW 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'\]Za__qro   r)   r}   r(   r   r   )rX   rA   )
r@   r   r   r^   r_   rf   setattrr5   r   r9   )Zerror_message_1Zerror_message_2Zerror_message_3Z
bad_steps1Z
bad_steps2r   paramZ
bad_steps3Z	bad_stepsmessageestr+   r+   r,   test_step_name_validation  s2    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   r9   r   r   )Z	estimatorr+   r+   r,   test_set_params_nested_pipeline  s    r  c           	   C   s`   t j} t j}d}tdt fdt fg|d}td}tj	t
|d || | W d Q R X d S )NrA   rp   rZ   )r   zf'memory' should be None, a string or have the same interface as joblib.Memory. Got memory='1' instead.)rX   )ru   rv   rw   r   rQ   r   rz   r{   r^   r_   rf   r5   )r3   r4   r   cached_piperi   r+   r+   r,   test_pipeline_wrong_memory  s    r
  c               @   s   e Zd Zdd ZdS )DummyMemoryc             C   s   |S )Nr+   )r*   funcr+   r+   r,   cache-  s    zDummyMemory.cacheN)r.   r/   r0   r  r+   r+   r+   r,   r  ,  s   r  c               @   s   e Zd ZdS )WrongDummyMemoryN)r.   r/   r0   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 Q R X d S )
NrA   ro   rp   rY   )r   )r4   z['memory' should be None, a string or have the same interface as joblib.Memory. Got memory='z
' instead.)rX   )rC   rr   r   r<   r@   r  r5   r  rz   r{   r^   r_   rf   )r3   rj   dummyri   r+   r+   r,   "test_pipeline_with_cache_attribute5  s    r  c           	   C   s  t j} t j}t }zzt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r2t|| | t|| ||  t|| ||  t|| ||  t|| ||| | t|jd j|jd j ||jd jkst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stW d t| X d S )Nz0.12r   )cachedirr   )locationr   Tr   )r   r   rp   rZ   )r   rS   transf_2)ru   rv   rw   r   r   joblib__version__Memoryr   rQ   r   r   r5   rd   rU   r   rG   rI   rJ   rH   rS   r   rb   shutilrmtree)r3   r4   r  r   rY   rp   rj   r	  tsZclf_2r  Zcached_pipe_2r+   r+   r,   test_pipeline_memoryC  sX    
r  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|ksVt	tt t }|jd ksrt	t
|dkst	t|  d S )Nz0.12r   )r  r   )r  r   )r   ro   )r   r   r  r  r  r   rQ   r   r   rb   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)Z_check_feature_names)r*   r3   r4   r+   r+   r,   r5     s    zFeatureNameSaver.fitc             C   s   |S )Nr+   )r*   r3   r4   r+   r+   r,   r;     s    zFeatureNameSaver.transformc             C   s   |S )Nr+   )r*   r   r+   r+   r,   r     s    z&FeatureNameSaver.get_feature_names_out)N)N)N)r.   r/   r0   r5   r;   r   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   )passrq   rY   )r   Nr   )
r   r  r   r"   r5   rv   rw   r   r   r   )rj   ru   r+   r+   r,   test_features_names_passthrough  s    r  c              C   s~   t dt fdt fgd} dd tD }| t| t| dd  dd	d
dddg t| dd ddd	d
dddg dS )z5Check pipeline.get_feature_names_out with vectorizersZvectrY   )r   c             S   s   g | ]}d |kqS )pizzar+   )r   rm   r+   r+   r,   r     s    z7test_feature_names_count_vectorizer.<locals>.<listcomp>Nr   beerZburgerZcoke	copyrightr   ZtheZnonsense_is_ignored)r   r$   r   r   r5   r   r   )rj   r4   r+   r+   r,   #test_feature_names_count_vectorizer  s    r#  c           	   C   sR   t dt fgd} t }| |j|j d}tjt|d | 	  W dQ R X dS )zZCheck that error is raised when a transformer does not define
    `get_feature_names_out`.Znotrans)r   z&does not provide get_feature_names_out)rX   N)
r   r2   r"   r5   rv   rw   r^   r_   r   r   )rj   ru   ri   r+   r+   r,   8test_pipeline_feature_names_out_error_without_definition  s    r$  c           	   C   sH   t t } tjtdd& | jdgdggddgddgd W d Q R X d S )Nz8Pipeline.fit does not accept the sample_weight parameter)rX   r   rA   )rP   )r   r   r^   r_   rf   r5   )rY   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   rA   N)r   r   r   rL   )r   r  patternr   r+   r+   r,   	<genexpr>  s
   
4

r'  rp   rY   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(  rq   )rY   N)rp   NrB   zw\[Pipeline\].*\(step 1 of 2\) Processing transf.* total=.*\n\[Pipeline\].*\(step 2 of 2\) Processing mult.* total=.*\n$)rp   rq   mult1r   z\[FeatureUnion\].*\(step 1 of 2\) Processing mult1.* total=.*\n\[FeatureUnion\].*\(step 2 of 2\) Processing mult2.* total=.*\n$)r)  r   )r   r   z@\[FeatureUnion\].*\(step 1 of 1\) Processing mult2.* total=.*\n$r5   r   rO   zest, pattern, methodc             C   s   t | |}dddgdddgg}dgdgg}| jd	d
 ||| | jrRtd| jdd
 ||| t|| js~td S )NrA   ro   r}   r   r   r   r   r~   F)r   zGot output for verbose=FalseT)r   r9   Z
readouterroutrb   rz   rX   )r  r   r&  Zcapsysr  r3   r4   r+   r+   r,   test_verbose  s    


r+  c              C   s   ddgddgddgg} dddg}t  }t }t||}t|drDt|| | |j|j  krhdksnn tt  }t }t||}|| | |j|j  krdksn tt|drtd S )	NrA   ro   r}   r   r   r   r   n_features_in_)r#   r%   r   r   rb   r5   r,  )r3   r4   ssZgbdtrj   r+   r+   r,   test_n_features_in_pipeline$  s    


r.  c              C   s   ddgddgddgg} dddg}t  }t|}t|dr<t|| | |j|j  kr`dksfn tt  }t|}|| | |j|j  krdksn td S )	NrA   ro   r}   r   r   r   r   r,  )r#   r   r   rb   r5   r,  )r3   r4   r-  r   r+   r+   r,    test_n_features_in_feature_union;  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 Q R X tt |
|| W d Q R X |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   )rf   )r*   r3   r4   r?   r+   r+   r,   r5   R  s    z0test_feature_union_fit_params.<locals>.Dummy.fitc             S   s   |S )Nr+   )r*   r3   r4   r+   r+   r,   r;   W  s    z6test_feature_union_fit_params.<locals>.Dummy.transform)N)N)r.   r/   r0   r5   r;   r+   r+   r+   r,   DummyQ  s   
r0  Zdummy0Zdummy1r   )r(   )r   r   ru   rv   rw   r   r^   r_   rf   r5   r   )r0  r3   r4   r]   r+   r+   r,   test_feature_union_fit_paramsO  s    	r1  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sdtd S )NrA   r   g?g?)pg?)ru   rv   rw   rC   randomchoicer   Zastypeboolnanr   r&   r   r5   rH   rb   )r3   r4   maskrj   r+   r+   r,   %test_pipeline_missing_values_leniencyf  s
    "
r8  c           	   C   sn   ddgddgddgg} dddg}dt  fg}d	di}d
}t||d}tjt|d || | W d Q R X d S )NrA   ro   r}   r   r   r   r   rp   transformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.)r   )rX   )r<   r   r^   r_   rf   r5   )r3   r4   r   weightsZexpected_msgunionr+   r+   r,   3test_feature_union_warns_unknown_transformer_weightp  s    
r<  c           	   C   sJ   d} t d}dd |_td|fg}tjt| d |  W dQ R X dS )z*Check that get_feature_names is deprecatedz&get_feature_names is deprecated in 1.0ro   c               S   s   dgS )Nr   r+   r+   r+   r+   r,   r     r   zAtest_feature_union_get_feature_names_deprecated.<locals>.<lambda>r   )rX   N)r@   r   r   r^   rg   FutureWarning)ri   r   r   r+   r+   r,   /test_feature_union_get_feature_names_deprecated  s    
r>  c             C   s    t | t }| d rtd S )Npairwise)r   r   Z	_get_tagsrb   )rq   rj   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	|rt
|d |||tt||kstn.t||  |||tt||kstd S )	Nr      ro   r   rA      r9  Z	predictor)rC   r3  ZRandomStateZrandnrr   r   r
   r5   rG   r   r   rH   r^   Zapproxr   rb   r   rR   r   )rA  rngr3   r4   modelZy_predr+   r+   r,   1test_search_cv_using_minimal_compatible_estimator  s    (

"rF  c           	   C   sZ   G dd dt } td|  fg}tt t| W d Q R X |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_)r*   r3   r4   r+   r+   r,   r5     s    z4test_pipeline_check_if_fitted.<locals>.Estimator.fitN)r.   r/   r0   r5   r+   r+   r+   r,   	Estimator  s   rG  rY   )
r   r   r^   r_   r   r   r5   ru   rv   rw   )rG  r   r+   r+   r,   test_pipeline_check_if_fitted  s    rH  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 )N)r   c             S   s   g | ]}d | qS )
my_prefix_r+   )r   r   r+   r+   r,   r     s    ztest_pipeline_get_feature_names_out_passes_names_through.<locals>.AddPrefixStandardScalar.get_feature_names_out.<locals>.<listcomp>)Zdtype)superr   rC   rD   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)r.   r/   r0   r   __classcell__r+   r+   )rL  r,   AddPrefixStandardScalar  s   rN  c             S   s   g | ]}d | qS )rI  r+   )r   r   r+   r+   r,   r     s    zLtest_pipeline_get_feature_names_out_passes_names_through.<locals>.<listcomp>N)	ru   rv   rw   r#   r   r5   r   r   r   )r3   r4   rN  rj   Zinput_namesZfeature_names_outr+   r+   r,   8test_pipeline_get_feature_names_out_passes_names_through  s    
rO  )r1   tempfiler   r  rT   rz   	itertoolsr^   numpyrC   Zscipyr   r  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&   ru   r   r'   r2   r:   r<   r>   r@   rL   rQ   rV   rn   rs   rx   r|   r   r   r   r   r   r   r   r   r   r   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  r  r  r  r  r#  r$  r%  productZparameter_grid_test_verboser+  r.  r/  r1  r8  r<  r>  r@  rF  rH  rO  r+   r+   r+   r,   <module>   s    	N/	 M!.

$
0&C	
