U
    -eA                     @   s  d 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Z	ddl
Z
ddl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 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(m)Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?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. ZOd/d0 ZPd1d2 ZQd3d4 ZRd5d6 ZSd7d8 ZTd9d: ZUd;d< ZVd=d> ZWd?d@ ZXdAdB ZYdCdD ZZdEdF Z[e
j\]dGdHdIdJgdKdL Z^dMdN Z_dOdP Z`dQdR ZadSdT ZbdUdV ZcdWdX Zde
j\]dYdZd[d\d]d^d_d`gdadb Zedcdd Zfdedf Zgdgdh Zhe
j\]diddigdjdk Zie
j\]diddigdldm Zjdndo Zkdpdq Zldrds Zmdtdu Zndvdw Zodxdy Zpdzd{ Zqd|d} Zrd~d Zsdd Ztdd Zudd Zvdd Zwdd ZxG dd deZydd Zzdd Z{dd Z|dd Z}dd e~e3deH fdeK fgdfe3deH fddeK fgdfe3deH fddeK fgdfe3deH fdgdfe3ddeJ fgdfe3ddeJ fgdfe2deJ fdeJ fgdfe2ddeJ fdgdfgdddgD Ze
j\]dedd Zdd Zdd Zdd Zdd Zdd Ze
j\]diddigdd Ze
j\]de<e;gdd Zdd Zdd Zdd ZddÄ Zddń ZddǄ Ze
j\]ddeddɃgdd˄ Zdd̈́ ZdS )z
Test the pipeline module.
    N)mkdtemp)sparse)BaseEstimatorTransformerMixincloneis_classifier)KMeans)	load_iris)PCATruncatedSVD)DummyRegressor)HistGradientBoostingClassifier)NotFittedError)CountVectorizer)SelectKBest	f_classif)SimpleImputer)LassoLinearRegressionLogisticRegression)accuracy_scorer2_score)train_test_split)LocalOutlierFactor)FeatureUnionPipelinemake_pipeline
make_union)StandardScaler)SVC)MinimalClassifierMinimalRegressorMinimalTransformerassert_allcloseassert_array_almost_equalassert_array_equal)check_is_fitted)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-   \/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sklearn/tests/test_pipeline.py__init__9   s    zNoFit.__init__)NN)__name__
__module____qualname____doc__r/   r-   r-   r-   r.   r'   6   s   r'   c                   @   s&   e Zd Zdd Zd	ddZdd ZdS )
NoTransc                 C   s   | 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_paramsB   s    zNoTrans.get_paramsc                 K   s   |d | _ | S )Nr*   r*   )r,   paramsr-   r-   r.   
set_paramsE   s    
zNoTrans.set_paramsN)F)r0   r1   r2   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.   	transformK   s    zNoInvTransf.transformN)r0   r1   r2   r@   r-   r-   r-   r.   r>   J   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@   P   s    zTransf.transformc                 C   s   |S r(   r-   r?   r-   r-   r.   inverse_transformS   s    zTransf.inverse_transformN)r0   r1   r2   r@   rB   r-   r-   r-   r.   rA   O   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   X   s    zTransfFitParams.fitNr0   r1   r2   r8   r-   r-   r-   r.   rC   W   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   a   s    zMult.fitc                 C   s   t || j S r(   npasarrayrJ   r?   r-   r-   r.   r@   d   s    zMult.transformc                 C   s   t || j S r(   rK   r?   r-   r-   r.   rB   g   s    zMult.inverse_transformc                 C   s   t || j jddS )NrH   Zaxis)rL   rM   rJ   sumr?   r-   r-   r.   predictj   s    zMult.predictNc                 C   s
   t |S r(   rL   rO   r5   r-   r-   r.   scoreo   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/   v   s    zFitParamT.__init__Fc                 C   s
   || _ d S r(   rW   r,   r6   r7   should_succeedr-   r-   r.   r8   y   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   s   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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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st	t| td}tjt|d |j
dd W 5 Q R X t|}|jd |jd k	st	|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st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_unsupported1  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clszInvalid parameter 'fake' for estimator Pipeline(steps=[('cls', LinearRegression())]). Valid parameters are: ['memory', 'steps', 'verbose'].rg   Znope)Zfake)Zfake__estimatorzInvalid 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_svmX  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_lofg  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_samplesw  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st|| }
|
j||fkst|| }|j||fkst|| }|j||fkst|| | 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st
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_transform3  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_transformF  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st|j	dd}|j	dd}|d	= |d	= ||kst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_sliceS  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_indexr  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 5 Q R X d	}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   z0This 'Pipeline' has no attribute 'fit_transform')rA   r   ru   rs   r   r=   rw   rx   ro   rp   rq   r8   r   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	st|jj|kst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st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rt| j t| drtt t	 t } t| drt| j t| drt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st|jd d dkst|jd d dkst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st||  || }|j|jkst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 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   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+   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    r0  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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sjtW 5 t| X d S )Nr   locationr   Tr   r   r   ri   r   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}   Zcached_pipetsZclf_2r4  Zcached_pipe_2r-   r-   r.   test_pipeline_memory  sf    
 

 
  

r;  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   r1  r3  r   )r   r7  r8  r   r]   r   r   rs   r   r5  r6  )r9  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_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.   r=    s   

r=  c                  C   sR   t dt fddt fgd} t }| |j|j t| dd |j	|j	 dS )z5Check pipeline.get_feature_names_out with passthroughr   passr   rf   r   Nr   )
r   r=  r   r	   r8   r   r   r%   r  r  )r}   r   r-   r-   r.   test_features_names_passthrough  s     rA  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     s     z7test_feature_names_count_vectorizer.<locals>.<listcomp>Nr   beerZburgerZcoke	copyrightrB  ZtheZnonsense_is_ignored)r   r   r   r  r8   r%   r  )r}   r7   r-   r-   r.   #test_feature_names_count_vectorizer  s    rE  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_definition  s    rF  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_error&  s    
 rG  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

rI  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$)rJ  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$)rK  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   rH  Zcapsysfuncr6   r7   r-   r-   r.   test_verbosem  s    


rN  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 	NrH   r   r   r   r   r   r   n_features_in_)r   r   r   r   rs   r8   rP  )r6   r7   ssZgbdtr}   r-   r-   r.   test_n_features_in_pipeline}  s    


rR  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 rO  )r   r   r   rs   r8   rP  )r6   r7   rQ  r   r-   r-   r.    test_n_features_in_feature_union  s    
rS  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   
rT  Zdummy0Zdummy1r   r;   )r   r   r   r   r   r   ro   rp   ry   r8   r   )rT  r6   r7   rn   r-   r-   r.   test_feature_union_fit_params  s    	rU  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
    "
r\  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    
r`  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    rb  	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      r   r   rH      r]  Z	predictor)rL   rW  ZRandomStateZrandnr   r   r"   r8   rP   r   r%   rR   ro   Zapproxr   rs   r#   r^   r   )rc  rngr6   r7   modelZy_predr-   r-   r.   1test_search_cv_using_minimal_compatible_estimator  s    (

"rh  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   ri  rf   )
r   r   ro   rp   r   r&   r8   r   r   r   )ri  r{   r-   r-   r.   test_pipeline_check_if_fitted  s    rj  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   r?  N)r   r"   ro   rp   r   r&   r8   )r6   r7   r_  r-   r-   r.   "test_feature_union_check_if_fitted	  s    

rk  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   ,  s     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-   rp  r.   AddPrefixStandardScalar)  s   rs  c                 S   s   g | ]}d | qS rl  r-   rm  r-   r-   r.   r   4  s     zLtest_pipeline_get_feature_names_out_passes_names_through.<locals>.<listcomp>N)	r   r   r   r   r   r8   r  r  r%   )r6   r7   rs  r}   Zinput_namesZfeature_names_outr-   r-   r.   8test_pipeline_get_feature_names_out_passes_names_through"  s    
rt  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}   rz  Zlog_reg_feature_namesr-   r-   r.   $test_pipeline_set_output_integration7  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.ru  Trv  r   r  scalarr   rw  N)ro   rx  r	   r   r   r   r
   ry  r8   r@   r   Z	DataFramers   r%   r(  r  index)pdr6   r   ZX_trainZX_testr_  r   r-   r-   r.   test_feature_union_set_outputG  s    


r  c                  C   sh   t  } t }td| fd|fddg}|d | ks4t|d |ksDt|d dksTt|d dksdtd	S )
z8Check FeatureUnion.__getitem__ returns expected results.r|  r   r?  )drop_mer"  r@  r   r  r"  N)r   r
   r   rs   )r|  r   r_  r-   r-   r.   test_feature_union_getitemW  s    r  keyr   c              	   C   sB   t dt fdt fg}d}tjt|d ||   W 5 Q R X dS )z5Raise error when __getitem__ gets a non-string input.r|  r   zOnly string keys are supportedrg   N)r   r   r
   ro   rp   r   )r  r_  r|   r-   r-   r.    test_feature_union_getitem_errori  s    r  c                  C   s   t d tddd\} }t }||  td|fg}t|dsFtt| j	|j
 t|j
|j
 tdg}||  t|dstt| j	|j
 |  }tdg}|| t|drtdS )zxEnsure feature union has `.feature_names_in_` attribute if `X` has a
    `columns` attribute.

    Test for #24754.
    ru  Trv  scalerz  r?  N)ro   rx  r	   r   r8   r   r   rs   r%   r(  rz  Zto_numpy)r6   r   r   r_  ZX_arrayr-   r-   r.   $test_feature_union_feature_names_in_t  s     





r  )r3   	itertoolsrw   r5  r`   tempfiler   r7  numpyrL   ro   Zscipyr   Zsklearn.baser   r   r   r   Zsklearn.clusterr   Zsklearn.datasetsr	   Zsklearn.decompositionr
   r   Zsklearn.dummyr   Zsklearn.ensembler   Zsklearn.exceptionsr   Zsklearn.feature_extraction.textr   Zsklearn.feature_selectionr   r   Zsklearn.imputer   Zsklearn.linear_modelr   r   r   Zsklearn.metricsr   r   Zsklearn.model_selectionr   Zsklearn.neighborsr   Zsklearn.pipeliner   r   r   r   Zsklearn.preprocessingr   Zsklearn.svmr   Zsklearn.utils._testingr    r!   r"   r#   r$   r%   Zsklearn.utils.validationr&   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  r;  r<  r=  rA  rE  rF  rG  productZparameter_grid_test_verboserN  rR  rS  rU  r\  r`  rb  rh  rj  rk  rt  r{  r  r  slicer  r  r-   r-   r-   r.   <module>   s,   
T 
/	 
!

L!-#q&?1?





