U
    ½mœdWÙ  ã                   @   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 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„ ZcdXdY„ Zdej\ ]dZd[d\d]d^d_d`dag¡dbdc„ ƒZeddde„ Zfdfdg„ Zgdhdi„ Zhej\ ]djddjg¡dkdl„ ƒZiej\ ]djddjg¡dmdn„ ƒZjdodp„ Zkdqdr„ Zldsdt„ Zmdudv„ Zndwdx„ Zodydz„ Zpd{d|„ Zqd}d~„ Zrdd€„ Zsd�d‚„ Ztdƒd„„ Zud…d†„ Zvd‡dˆ„ ZwG d‰dŠ„ dŠƒZxG d‹dŒ„ dŒƒZyd�dŽ„ Zzd�d�„ Z{d‘d’„ Z|G d“d”„ d”eƒZ}d•d–„ Z~d—d˜„ Zd™dš„ Z€d›dœ„ Z�d�dž„ e ‚e dŸeHƒ fd eKƒ fgƒd¡fe dŸeHƒ fd¢d eKƒ fgƒd£fe dŸeHƒ fd¤d eKƒ fgƒd£fe dŸeHƒ fd¥gƒd¡fe d¦d§eJƒ fgƒd¨fe d©d§eJƒ fgƒd¨fe!dªeJƒ fd«eJƒ fgƒd¬fe!d­d«eJƒ fd®gƒd¯fgd°d±d²g¡D ƒZƒej\ ]d³eƒ¡d´dµ„ ƒZ„d¶d·„ Z…d¸d¹„ Z†dºd»„ Z‡d¼d½„ Zˆd¾d¿„ Z‰ej\ ]djddjg¡dÀdÁ„ ƒZŠej\ ]dÂeeg¡dÃdÄ„ ƒZ‹dÅdÆ„ ZŒdÇdÈ„ Z�dÉdÊ„ ZŽdËdÌ„ Z�dÍdÎ„ Z�dS )Ïz
Test the pipeline module.
é    )ÚmkdtempN)Úsparse)Úassert_allcloseÚassert_array_equalÚassert_array_almost_equalÚMinimalClassifierÚMinimalRegressorÚMinimalTransformer)ÚNotFittedError)Útrain_test_split)Úcheck_is_fitted)ÚcloneÚis_classifierÚBaseEstimatorÚTransformerMixin)ÚPipelineÚFeatureUnionÚmake_pipelineÚ
make_union)ÚSVC)ÚLocalOutlierFactor)ÚLogisticRegressionÚLasso)ÚLinearRegression)Úaccuracy_scoreÚr2_score)ÚKMeans)ÚSelectKBestÚ	f_classif)ÚDummyRegressor)ÚPCAÚTruncatedSVD)Ú	load_iris)ÚStandardScaler)ÚCountVectorizer)ÚHistGradientBoostingClassifier)ÚSimpleImputer)zthe pizza pizza beer copyrightzthe pizza burger beer copyrightz!the the pizza beer beer copyrightzthe burger beer beer copyrightzthe coke burger coke copyrightzthe coke burger burgerc                   @   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-   úT/home/sam/Atlas/atlas_env/lib/python3.8/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 k	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   sx  t dgƒ} t t¡� |  dggdg¡ W 5 Q R X d}t dtƒ fgƒ} tjt|d�� |  dggdg¡ W 5 Q R X tƒ }t d|fgƒ}|jdd�tf d d |d	œ|jd
d�—Žks´t	‚|j
dd� |jdksÎt	‚|jd ksÜt	‚t|ƒ tƒ }ttƒ}t d|fd|fgƒ}|jd |k�st	‚|jd |k�s.t	‚d}t dtƒ fd|fgƒ} tjt|d�� |  dggdg¡ W 5 Q R X |j
dd� |jdk�s�t	‚t|ƒ t d¡}tjt|d�� |j
dd� W 5 Q R X t|ƒ}|jd |jd k	�sêt	‚|jdd�}|jdd�}|jd
d�D ]}| |¡ �q|jd
d�D ]}| |¡ �q,| d¡ | d¡ | d¡ | d¡ ||k�stt	‚d S )N)rH   rH   rH   zRLast step of Pipeline should implement fit or be the string 'passthrough'.*NoFit.*Úclf©ÚmatchÚ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(). Valid parameters are: ['k', 'score_func'].)Zanova__C)r   ÚpytestÚraisesÚ	TypeErrorr8   r'   r4   r:   ÚdictÚAssertionErrorr=   r*   r+   Úreprr   r   r   Únamed_stepsÚCÚreÚescapeÚ
ValueErrorr   Úpop)	ÚpipelineÚmsgrf   ÚpipeÚfilter1Úpipe2r<   Zparams2Úxr-   r-   r.   Ú test_pipeline_invalid_parameters¨   sf    
ÿ  ÿ
ÿÿ



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   é   Útransfrf   ©r7   Úpassthrough)rƒ   )rL   Úarrayr   rA   rV   r8   rR   r=   ©r6   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‚   ©Úkrm   Zlogistic)ÚirisÚdataÚtargetr   r   r   r   r8   rP   rS   rT   rR   )r6   r7   rf   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 ¡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 5 Q R X d S )Nrƒ   rf   T)r6   r7   Úclf__should_succeedz.fit() got an unexpected keyword argument 'bad'rg   )Zclf__bad)r   rA   rV   r8   rP   rs   ru   r*   r+   rw   rx   ro   rp   rq   )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sHt‚|j| d d�dks^t‚|j| d d d�dksvt‚|j| t  ddg¡d�d	ks–t‚d S )
NrH   r‚   rƒ   rf   r„   é   )r7   r\   ©r\   é   )rL   r†   r   rA   rV   r8   rR   rs   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sHt‚|j| d d�dks^t‚t 	d¡}t
jt|d	�� |j| t  ddg¡d� W 5 Q R X d S )
NrH   r‚   rƒ   rf   r„   r‘   r’   z:score() got an unexpected keyword argument 'sample_weight'rg   )rL   r†   r   rA   rG   r8   rR   rs   rw   rx   ro   rp   rq   )r6   r}   r|   r-   r-   r.   Ú'test_pipeline_sample_weight_unsupported2  s    
r•   c               	   C   sš   t dtƒ fgƒ} t d¡}tjt|d�� | jdd� W 5 Q R X tjt|d�� | jdd� W 5 Q R X t d¡}tjt|d�� | jdd� W 5 Q R X d S )	NÚclsz‹Invalid parameter 'fake' for estimator Pipeline(steps=[('cls', LinearRegression())]). Valid parameters are: ['memory', 'steps', 'verbose'].rg   Znope)Zfake)Zfake__estimatorzŒInvalid parameter 'invalid_param' for estimator LinearRegression(). Valid parameters are: ['copy_X', 'fit_intercept', 'n_jobs', 'positive'].)Zcls__invalid_param)r   r   rw   rx   ro   rp   ry   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Úpcari   )r‹   rŒ   r�   r   r    r   r8   rP   rS   rT   rR   )r6   r7   rf   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sXt‚| | 	| ¡¡ t
| | ¡| | | ¡¡ƒ d S )	Nrœ   r�   Trž   )Znoveltyr¢   Úlofr   )r‹   rŒ   r    r   r   r8   Úscore_samplesÚshapers   Úfit_transformr   r@   )r6   r¢   r¤   r}   r-   r-   r.   Ú#test_pipeline_score_samples_pca_lofh  s    

r¨   c               	   C   s^   t  dgdgg¡} t  ddg¡}ttƒ ƒ}| | |¡ tjtdd�� | | ¡ W 5 Q R X d S )NrH   r‚   z<'LogisticRegression' object has no attribute 'score_samples'rg   )	rL   r†   r   r   r8   ro   rp   ÚAttributeErrorr¥   )r6   r7   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 ]ž}t
d|fd	|fgƒ}| | |¡ | | ¡}	|	j|fksŒt‚| | ¡}
|
j||fks¨t‚| | ¡}|j||fksÄt‚| | ¡}|j||fksàt‚| | |¡ qNd S )
Nr   r‚   Ú
randomizedT)r    rŸ   r¡   Zovr)rš   r›   Zdecision_function_shapeÚ
preprocessri   )r‹   rŒ   r�   r¦   ÚlenrL   Úuniquer#   r    r   r   r8   rP   rs   rS   rT   rU   rR   )r6   r7   Z	n_samplesZ	n_classesÚscalerr¢   rf   Zpreprocessingr}   rP   ZprobaZ	log_probarU   r-   r-   r.   Ú'test_pipeline_methods_preprocessing_svm†  s&    




r°   c                  C   sh   t ƒ } tddd�}t ƒ }tddd�}|  tj¡}| |¡}td|fd|fgƒ}| tj¡}t||ƒ d S )Nr   Úauto)r›   Zn_initr¯   ZKmeans)r#   r   r§   r‹   rŒ   r[   r   r   )r¯   ÚkmZscaler_for_pipelineZkm_for_pipelineZscaledZseparate_predr}   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 5 Q R X d S )Nrœ   ©rŸ   r¯   r¢   z+'PCA' object has no attribute 'fit_predict'rg   r[   )r#   r    r   ro   rp   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>t‚| jd jsNt‚d| jd jksbt‚d S )Nrƒ   rf   T)r6   r7   Ztransf__should_get_thisr�   Zshould_get_thisrZ   )r   rC   rV   r[   ru   rD   rs   rX   )r}   r-   r-   r.   Ú-test_fit_predict_with_intermediate_fit_paramsÆ  s       ÿr·   Úmethod_namerP   rS   rT   c                 C   sN   t dtƒ fdtƒ fgƒ}| d d ¡ t|| ƒ}|d dd� |jd jsJt‚d S )Nrƒ   rf   T)r6   rd   )r   rA   rb   r8   rµ   ru   rd   rs   )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stt
‚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 k	�st
‚|jdd� | | |¡j	| j	d dfk�sFt
‚tdtƒ fd|fd|fgƒ}| | |¡}|j	| j	d dfk�sˆt
‚d}	tdtƒ fdtƒ fgƒ}tjt|	d�� | | ¡ W 5 Q R X 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\br@   Zno_transformrg   )r‹   rŒ   r^   r�   r!   r   r   r8   r@   r¦   rs   r   r§   r   Úravelr   Z
csr_matrixÚtoarrayr   Útransformer_listr=   rA   r4   ro   rp   rq   )
r6   r7   r»   r¼   ÚfsÚX_transformedZX_spZX_sp_transformedZfs2r|   r-   r-   r.   Útest_feature_unionà  s8    

 "
""rÅ   c                  C   sh   t ƒ } tƒ }td| fd|fgƒ}|jd | ks2t‚|jd |ksDt‚|jj| ksTt‚|jj|ksdt‚dS )z6Check the behaviour of `named_transformers` attribute.rƒ   ÚnoinvtransfN)rA   r>   r   Znamed_transformersrs   rƒ   rÆ   )rƒ   rÆ   rÃ   r-   r-   r.   Ú%test_feature_union_named_transformers  s    rÇ   c                  C   sH   t dd�} tƒ }t| |ƒ}t|jŽ \}}|dks4t‚|| |fksDt‚d S )Nrœ   r´   )r¢   rƒ   )r    rA   r   ÚziprÂ   rs   )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 5 Q R X d S )Nrœ   r´   r‘   ©Ún_jobszEmake_union() got an unexpected keyword argument 'transformer_weights'rg   é
   rH   )r¢   rA   ©Ztransformer_weights)r    rA   r   rÂ   rs   rÍ   rw   rx   ro   rp   rq   )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   r8   r@   r§   r   rB   )r6   r¢   r{   ÚX_transÚX_trans2ZX_trans3ZX_backZX_back2r-   r-   r.   Útest_pipeline_transform4  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_transformG  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@t‚|j|j| |… ksXt‚t|j ¡ ƒt|j ¡ ƒ| |… ks€t‚|j	dd�}|j	dd�}|d	= |d	= ||ks°t‚d
}t
jt|d�� || |d…  W 5 Q R X d S )NÚtransf1Útransf2rf   Z123T)ÚmemoryÚverboseFrj   Ústepsz*Pipeline slicing only supports a step of 1rg   r½   )r   rA   rV   Ú
isinstancers   rÙ   Úlistru   Úitemsr:   ro   rp   ry   )ÚstartÚendr}   Z
pipe_sliceZpipe_paramsZpipe_slice_paramsr|   r-   r-   r.   Útest_pipeline_sliceT  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 5 Q R X t t¡� |d  W 5 Q R X d S )Nrƒ   rf   r   r½   r‘   Zfoobar)rA   rV   r   rs   ro   rp   Ú
IndexErrorÚKeyError)rƒ   rf   r}   r-   r-   r.   Útest_pipeline_indexs  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s’t‚|j|d� d|fg|jks²t‚|jdgd� t d¡}tj	t
|d�� | dggdg¡ W 5 Q R X tj	t
|d�� | dggdg¡ W 5 Q R X d S )	Nr¿   Úmock2©rÙ   ©r¿   )Zjunkr-   zJLast step of Pipeline should implement fit or be the string 'passthrough'.rg   rH   )rA   r   ru   rs   rÙ   r=   rw   rx   ro   rp   rq   r8   r§   )rÕ   rÖ   r{   r|   r-   r-   r.   Útest_set_pipeline_steps…  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	s„t‚|jj|ks”t‚d S )Nr‚   rI   r¿   rJ   rã   Úvalues)rA   rG   r   ru   rs   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ƒ}| ||¡ dddd	g}d
d„ |jD ƒ}||ksŒt‚d S )NrH   r‚   rI   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>)rL   r†   rG   r   r8   rÙ   rs   )	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t‚|j| d� d}t|gg| ||¡ƒ t|g| |¡ |¡ƒ t|| |gg¡ƒ dddddg}|D ]}t||ƒ|ƒ �qt|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 5 Q R X 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'rg   rP   rë   rí   rö   )rL   r†   rG   r   r§   r8   rP   rB   r=   r:   rÙ   rs   rµ   r@   ro   rp   r©   r   )	r…   r6   r7   rø   r{   ÚexpZother_methodsr¹   r|   r-   r÷   r.   Ú"test_set_pipeline_step_passthroughÈ  st    



øû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ƒr’t‚| j t| dƒr¦t‚t t	ƒ tƒ ƒ} t| dƒrÂt‚| j t| dƒrÖt‚d S )Nrê   rP   r…   r   ©r…   r…   rB   )
r   rG   rP   r@   rB   rA   Úhasattrrs   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s‚t‚|jd d dks˜t‚|jd d dks®t‚d S )Nr   ztransf-1rH   ztransf-2r‚   Z	fitparamt)rA   r   rÚ   r   rs   rÙ   rV   )Út1Út2r}   r-   r-   r.   Útest_make_pipeline1  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 )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¦   rs   )r6   r7   r¢   r¼   rÃ   rÄ   ZX_fit_transformedZX_fit_transformed_wo_methodr-   r-   r.   Útest_feature_union_weights@  s2    
 ÿ
 ÿþ$"$"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s–t‚| | ¡ | | ¡}|j|jksºt‚t| 	¡ | 	¡ ƒ | 
| ¡}t| 	¡ | 	¡ ƒ | | ¡}t| 	¡ | 	¡ ƒ d S )	NÚwordsÚword©ÚanalyzerÚcharsÚcharr‚   rÌ   r   )ÚJUNK_FOOD_DOCSr   r$   r8   r@   r¦   r­   rs   r   rÁ   r§   )r6   rÃ   Zfs_parallelZfs_parallel2rÄ   ZX_transformed_parallelZX_transformed_parallel2r-   r-   r.   Útest_feature_union_parallela  s:    þÿþûþû





r  c               	   C   s´   t dd�} t ddd�}td|fd| fgƒ}| t¡ | ¡ }|D ]}d|ks@d	|ks@t‚q@t|ƒd
ksjt‚tdtƒ fgƒ dgg¡}t 	d¡}t
jt|d�� | ¡  W 5 Q R X d S )Nr	  r
  Zchar_wb)r‘   r‘   )r  Zngram_ranger  r  Zchars__Zwords__é#   Ztr1rH   zDTransformer tr1 (type Transf) does not provide get_feature_names_outrg   )r$   r   r8   r  Úget_feature_names_outrs   r­   rA   rw   rx   ro   rp   r©   )Z	word_vectZ	char_vectÚftÚfeature_namesZ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 5 Q R X ttdd�tdd�ƒ}t t	¡� t
|dƒ W 5 Q R X | | |¡ 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   Úregrf   r-   r-   r.   Útest_classes_property¡  s    r  c                  C   s4  t dƒ} t dƒ}t dƒ}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| ¡ ƒ d|fg|_tdgg| t d
gg¡¡ƒ tdg| ¡ ƒ |jd|fgd� tdgg| t d
gg¡¡ƒ tdg| ¡ ƒ |j|d� tdgg| t d
gg¡¡ƒ tdg| ¡ ƒ d S )Nr‚   r‘   rê   c                 S   s   dgS ©NZx3r-   ©Úinput_featuresr-   r-   r.   Ú<lambda>¶  ó    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  rë   rí   rH   Úm2__x2Úm3__x3rî   Zm5__x5r¿   )rÂ   Zmock__x3rå   Zmock__x5)	rG   r  r   r   r@   rL   rM   rÂ   r=   )rè   ró   rô   r  r-   r-   r.   Útest_set_feature_union_steps±  s$    


 r!  c                  C   s�  t dƒ} t dƒ}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| ¡ ƒ |j	dd� tdgg| |¡ |¡ƒ tdgg| |¡ƒ td
g| ¡ ƒ |j	dd� tg g| |¡ |¡ƒ tg g| |¡ƒ tg | ¡ ƒ |j	|d� tdgg| |¡ |¡ƒ tdd|fgƒ}tdgg| |¡ |¡ƒ tdgg| |¡ƒ td
g| ¡ ƒ d S )Nr‚   r‘   c                 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  rH   rë   rí   r  r   Údroprû   rú   )rë   r"  )
rG   r  rL   rM   r   r   r8   r@   r§   r=   )rè   ró   r6   r  r-   r-   r.   Ú test_set_feature_union_step_dropÎ  s.    

r#  c               	   C   sô  t dƒ} t dƒ}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| ¡ ƒ |j	dd� tddgg| |¡ |¡ƒ tddgg| |¡ƒ tdd
g| dg¡ƒ |j	dd� tddgg| |¡ |¡ƒ tddgg| |¡ƒ tddg| dg¡ƒ |j	|d� tddgg| |¡ |¡ƒ tddgg| |¡ƒ tdd
g| dg¡ƒ tdd|fgƒ}tddgg| |¡ |¡ƒ tddgg| |¡ƒ tdd
g| dg¡ƒ t
j}|jd }tdddd�}tdd|fgƒ}t|| |¡ |¡dd…d|…f ƒ t|| |¡dd…d|…f ƒ tddddddg| ddd d!g¡ƒ |j	dd"� | |¡ |¡}t|t ||g¡ƒ | |¡}t|t ||g¡ƒ tddddd#d$d%d&g| ddd d!g¡ƒ |j	|d'� t|| |¡ |¡dd…| d…f ƒ t|| |¡dd…| d…f ƒ td(d)d#d$d%d&g| ddd d!g¡ƒ tdd|fgddid*�}t|d | |¡ |¡dd…d|…f ƒ t|d | |¡dd…d|…f ƒ tddddddg| ddd d!g¡ƒ dS )+z@Check the behaviour of setting a transformer to `"passthrough"`.r‚   r‘   c                 S   s   dgS r  r-   r  r-   r-   r.   r  ø  r  z4test_set_feature_union_passthrough.<locals>.<lambda>c                 S   s   dgS r  r-   r  r-   r-   r.   r  ù  r  rH   rë   rí   r  r   r…   rû   Z
m2__myfeatZmyfeatrú   Z
m3__myfeat)rë   r…   r«   r   r  rÿ   r¢   NZpassthrough__f0Zpassthrough__f1Zpassthrough__f2Zpassthrough__f3Ú	pca__pca0Ú	pca__pca1Zf0Úf1Úf2Zf3)r¢   Zpca__f0Zpca__f1Zpca__f2Zpca__f3)r…   Zpassthrough__pca0Zpassthrough__pca1rÏ   )rG   r  rL   rM   r   r   r8   r@   r§   r=   r‹   rŒ   r¦   r    Zhstack)rè   ró   r6   r  Úcolumnsr¢   ZX_ftr-   r-   r.   Ú"test_set_feature_union_passthroughñ  s´    

 
ÿ
& ú÷
ø
õ("ú÷
þ*$ú÷r)  c                  C   sL   t j} tdddd�}td|fdgƒ}| | ¡ tddd	d
ddg| ¡ ƒ dS )z`Check that get_feature_names_out works with passthrough without
    passing input_features.
    r‚   r«   r   r  r¢   rÿ   r$  r%  Zpassthrough__x0Zpassthrough__x1Zpassthrough__x2Zpassthrough__x3N)r‹   rŒ   r    r   r8   r   r  )r6   r¢   r  r-   r-   r.   Ú4test_feature_union_passthrough_get_feature_names_outb  s    
ú÷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 �]x\}}dt dƒf|t dƒfg}|| f||f||| ffD �]:\}}	tjt|	d��" |f ||iŽ dggdg¡ W 5 Q R X |f |dt dƒfgiŽ}
t|
||ƒ tjt|	d�� |
 dggdg¡ W 5 Q R X tjt|	d�� |
 dggdg¡ W 5 Q R X |f |dt dƒfgiŽ}
|
j	f ||iŽ tjt|	d�� |
 dggdg¡ W 5 Q R X tjt|	d�� |
 dggdg¡ W 5 Q R X qˆqLd 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Â   rg   rH   )
rG   r   r   ro   rp   ry   r8   Úsetattrr§   r=   )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_validationx  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+   gü©ñÒMbP?)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    r0  c               	   C   s`   t j} t j}d}tdtƒ fdtƒ fg|d�}t d¡}tj	t
|d�� | | |¡ W 5 Q R X 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.rg   )r‹   rŒ   r�   r   r]   r   rw   rx   ro   rp   ry   r8   )r6   r7   r×   Úcached_piper|   r-   r-   r.   Útest_pipeline_wrong_memory¤  s    ÿr3  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   r6  r-   r-   r-   r.   r4  µ  s   r4  c                   @   s   e Zd ZdS )ÚWrongDummyMemoryN)r0   r1   r2   r-   r-   r-   r.   r7  º  s   r7  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 5 Q R X d S )
NrH   r‚   rƒ   rf   r1  r„   z['memory' should be None, a string or have the same interface as joblib.Memory. Got memory='z
' instead.rg   )rL   r†   r   rA   rG   r4  r8   r7  rw   rx   ro   rp   ry   )r6   r}   Údummyr|   r-   r-   r.   Ú"test_pipeline_with_cache_attribute¾  s    
ÿr9  c               	   C   s~  t j} t j}tƒ }�zXt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	ƒ�rt‚| | |¡ t| | ¡| | ¡ƒ t| | ¡| | ¡ƒ t| | ¡| | ¡ƒ t| | |¡| | |¡ƒ t|jd j|jd jƒ ||jd jk�s¨t‚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�sjt‚W 5 t |¡ X d S )NrÎ   ©ÚlocationrØ   Tr   r™   rƒ   ri   r1  r_   Útransf_2)r‹   rŒ   r�   r   ÚshutilÚrmtreeÚjoblibÚMemoryr   r]   r   r   r8   ru   ra   r   rP   rS   rT   rR   r_   r   rs   )r6   r7   Úcachedirr×   rf   rƒ   r}   r2  ÚtsZclf_2r<  Zcached_pipe_2r-   r-   r.   Útest_pipeline_memoryÌ  sf    
 
ÿ
 
ÿ ÿ ÿ

þrC  c                  C   sn   t ƒ } tj| dd�}ttƒ tƒ |d�}|j|ks4t‚ttƒ tƒ ƒ}|jd ksPt‚t|ƒdks`t‚t	 
| ¡ d S )NrÎ   r:  r1  r‚   )r   r?  r@  r   r]   r   r×   rs   r­   r=  r>  )rA  r×   r{   r-   r-   r.   Útest_make_pipeline_memory  s    rD  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.   rE    s   

rE  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…   rf   rä   Nr½   )
r   rE  r   r"   r8   rŒ   r�   r   r  r  )r}   r‹   r-   r-   r.   Útest_features_names_passthrough#  s    ýÿ ÿrI  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vectrf   rä   c                 S   s   g | ]}d |k‘qS )Úpizzar-   )rï   r€   r-   r-   r.   rò   6  s     z7test_feature_names_count_vectorizer.<locals>.<listcomp>Nr½   ÚbeerZburgerZcokeÚ	copyrightrJ  ZtheZnonsense_is_ignored)r   r$   r   r  r8   r   r  )r}   r7   r-   r-   r.   Ú#test_feature_names_count_vectorizer3  s    þþrM  c               	   C   sR   t dtƒ fgd�} tƒ }|  |j|j¡ d}tjt|d�� |  	¡  W 5 Q R X 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_outrg   N)
r   r4   r"   r8   rŒ   r�   ro   rp   r©   r  )r}   r‹   r|   r-   r-   r.   Ú8test_pipeline_feature_names_out_error_without_definitionB  s    rN  c               	   C   sH   t tƒ ƒ} tjtdd��& | jdgdggddgddgd� W 5 Q R X d S )Nz8Pipeline.fit does not accept the sample_weight parameterrg   r   rH   r’   )r   r   ro   rp   ry   r8   )rf   r-   r-   r.   Útest_pipeline_param_errorN  s    
 ÿrO  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>V  s   
4

ÇrQ  rƒ   rf   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$)rR  r…   )rf   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$)rS  r"  )ró   r"  z@\[FeatureUnion\].*\(step 1 of 1\) Processing mult2.* total=.*\n$r8   r§   r[   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 )NrH   r‚   r‘   r¾   rê   rü   r  r“   F)rØ   zGot output for verbose=FalseT)rµ   r=   Z
readouterrÚoutrs   rw   rh   )r.  r¹   rP  Zcapsysr5  r6   r7   r-   r-   r.   Útest_verbose•  s    


rU  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r¨dks®n t‚t|dƒr¼t‚d S ©	NrH   r‚   r‘   r¾   rê   rü   r   Ún_features_in_)r#   r%   r   r   rs   r8   rW  )r6   r7   ÚssZgbdtr}   r-   r-   r.   Útest_n_features_in_pipeline¥  s    


rY  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r˜dksžn t‚d S rV  )r#   r   r   rs   r8   rW  )r6   r7   rX  rÉ   r-   r-   r.   Ú test_n_features_in_feature_union¼  s    
rZ  c               	   C   s    G dd„ dt tƒ} tjtj }}td| ƒ fd| ƒ fgƒ}t t¡� | 	||¡ W 5 Q R X t t¡� | 
||¡ W 5 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   )ry   rE   r-   r-   r.   r8   Ó  s    z0test_feature_union_fit_params.<locals>.Dummy.fitc                 S   s   |S r(   r-   r5   r-   r-   r.   r@   Ø  s    z6test_feature_union_fit_params.<locals>.Dummy.transform)N)N)r0   r1   r2   r8   r@   r-   r-   r-   r.   ÚDummyÒ  s   
r[  Zdummy0Zdummy1r   r;   )r   r   r‹   rŒ   r�   r   ro   rp   ry   r8   r§   )r[  r6   r7   rn   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sdt‚d S )NrH   r   rl   gÍÌÌÌÌÌì?)Úpgš™™™™™Ù?)r‹   rŒ   r�   rL   ÚrandomÚchoicer¦   ZastypeÚboolÚnanr   r&   r   r8   rR   rs   )r6   r7   Úmaskr}   r-   r-   r.   Ú%test_pipeline_missing_values_leniencyç  s
    "
rc  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 5 Q R X d S )NrH   r‚   r‘   r¾   rê   rü   r   rƒ   ÚtransformerzZAttempting to weight transformer "transformer", but it is not present in transformer_list.rÏ   rg   )rA   r   ro   rp   ry   r8   )r6   r7   rÂ   ÚweightsZexpected_msgÚunionr-   r-   r.   Ú3test_feature_union_warns_unknown_transformer_weightñ  s    
ÿrg  c                 C   s    t | tƒ ƒ}| ¡ d rt‚d S )NÚpairwise)r   r   Z	_get_tagsrs   )r…   r}   r-   r-   r.   Útest_pipeline_get_tags_none  s    ri  Ú	Predictorc                 C   sÈ   t j d¡}| dd¡t  dgd dgd  ¡ }}tdtƒ fd| ƒ fgƒ}| ||¡ | |¡}t	|ƒr–t
|dƒ | ||¡t t||ƒ¡ksÄt‚n.t|| ¡ ƒ | ||¡t t||ƒ¡ksÄt‚d S )	Nr   é   r‚   rê   rH   é   rd  Z	predictor)rL   r^  ZRandomStateZrandnr†   r   r	   r8   rP   r   r   rR   ro   Zapproxr   rs   r   r^   r   )rj  Úrngr6   r7   ÚmodelZy_predr-   r-   r.   Ú1test_search_cv_using_minimal_compatible_estimator  s    (ÿ

"ro  c               	   C   sZ   G dd„ dt ƒ} td| ƒ fgƒ}t t¡� t|ƒ W 5 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_r5   r-   r-   r.   r8   &  s    z4test_pipeline_check_if_fitted.<locals>.Estimator.fitNrF   r-   r-   r-   r.   Ú	Estimator%  s   rp  rf   )
r   r   ro   rp   r
   r   r8   r‹   rŒ   r�   )rp  r{   r-   r-   r.   Útest_pipeline_check_if_fitted$  s    rq  c               	   C   s¼   ddgddgddgg} dddg}t dtƒ fgƒ}t t¡� t|ƒ W 5 Q R X | | |¡ t|ƒ t d	gƒ}t|ƒ t dtƒ fd	gƒ}t t¡� t|ƒ W 5 Q R X | | |¡ t|ƒ d
S )z1Check __sklearn_is_fitted__ is defined correctly.rH   r‚   r‘   r¾   rê   rü   r   rf   rG  N)r   r	   ro   rp   r
   r   r8   )r6   r7   rf  r-   r-   r.   Ú"test_feature_union_check_if_fitted1  s    

rr  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ò   T  s     zƒtest_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  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-   rw  r.   ÚAddPrefixStandardScalarQ  s   rz  c                 S   s   g | ]}d |› �‘qS rs  r-   rt  r-   r-   r.   rò   \  s     zLtest_pipeline_get_feature_names_out_passes_names_through.<locals>.<listcomp>N)	r‹   rŒ   r�   r#   r   r8   r  r  r   )r6   r7   rz  r}   Zinput_namesZfeature_names_outr-   r-   r.   Ú8test_pipeline_get_feature_names_out_passes_names_throughJ  s    
r{  c                  C   sh   t  d¡ tddd�\} }ttƒ tƒ ƒ}|jdd� | | |¡ |dd…  ¡ }|d j	}t
||ƒ dS )z.Test pipeline's set_output with feature names.ÚpandasT©Zas_frameZ
return_X_y©r@   Nr½   )ro   Úimportorskipr"   r   r#   r   Ú
set_outputr8   r  Úfeature_names_in_r   )r6   r7   r}   r�  Zlog_reg_feature_namesr-   r-   r.   Ú$test_pipeline_set_output_integration_  s    

r‚  c                  C   s”   t  d¡} tddd�\}}t|dd�\}}tdtƒ fdtƒ fgƒ}|jdd� | |¡ | 	|¡}t
|| jƒsrt‚t|j| ¡ ƒ t|j|jƒ d	S )
z'Test feature union with set_output API.r|  Tr}  r   r  Zscalarr¢   r~  N)ro   r  r"   r   r   r#   r    r€  r8   r@   rÚ   Z	DataFramers   r   r(  r  Úindex)Úpdr6   rñ   ZX_trainZX_testrf  rÑ   r-   r-   r.   Útest_feature_union_set_outputo  s    


r…  )‘r3   Útempfiler   r=  r`   rw   Ú	itertoolsro   ÚnumpyrL   Zscipyr   r?  Zsklearn.utils._testingr   r   r   r   r   r	   Zsklearn.exceptionsr
   Zsklearn.model_selectionr   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·   ÚmarkZparametrizerº   rÅ   rÇ   rË   rÐ   rÓ   rÔ   rß   râ   ræ   ré   rõ   rþ   r  r  r  r  r  r  r!  r#  r)  r*  r/  r0  r3  r4  r7  r9  rC  rD  rE  rI  rM  rN  rO  ÚproductZparameter_grid_test_verboserU  rY  rZ  r\  rc  rg  ri  ro  rq  rr  r{  r‚  r…  r-   r-   r-   r.   Ú<module>   s.   
T ÿ
/	 ÿ
 

L!-#q&?þþýÿøþþþþþÔ1Îþ?



