U
    ^»{jko  ã                   @   s.  d Z ddlmZ ddlZddl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mZmZ ddlmZmZ ddlmZmZmZmZ dd	lmZm Z  dd
l!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9 eƒ Z:e:j;e:j< Z=Z>eƒ Z?e?j;e?j< Z@ZAeddd�\ZBZCeddd�\ZDZEejF Gdde(dddd�g¡ejF Gddedd�g¡ejF Gdddg¡dd„ ƒƒƒZHdd „ ZId!d"„ ZJd#d$„ ZKejF Gdde'dddd�g¡ejF Gd%di fedd�i feƒ d&difg¡ejF Gdddg¡d'd(„ ƒƒƒZLejF Gd)d*d+d,g¡d-d.„ ƒZMejF Gd)d*d+d,g¡d/d0„ ƒZNd1d2„ ZOG d3d4„ d4eeƒZPG d5d6„ d6eeƒZQejF Gd7eAd8g ieRd9feAd:e#ƒ fd;e1d<d=�fgd>d?œeRd@feAd8d:e#ƒ fdAeQƒ fgieSdBfeAd:e#ƒ fdAe2dCd<dD�fgeQƒ dEœeSdBfg¡dFdG„ ƒZTejF Gd7e>d8g ieRd9fe>d8d:e"ƒ fdAePƒ fgieSdBfe>d:e"ƒ fdAe3dCdH�fgePƒ dEœeSdBfg¡dIdJ„ ƒZUejFjGdKed:e#dd�fd;e2dCddL�fgdM�e@ddN… eAddN… fed:e"ƒ fd;e3dCddL�fgdM�e=e>fgdOdPgdQ�dRdS„ ƒZVdTdU„ ZWejFjGdVed:e#ƒ fd;e2dCddL�fge#ƒ e'dddW�dX�feddY�˜ed:e"ƒ fd;e3dCddL�fge"ƒ e'dddW�dX�e=e>fgdOdPgdQ�dZd[„ ƒZXd\d]„ ZYejF Zd^¡ejFjGdVed:e#ƒ fd;e2dCddL�fge#ƒ dE�feddY�˜ed:e"ƒ fd;e3dCddL�fge"ƒ dE�e=e>fgdOdPgdQ�d_d`„ ƒƒZ[ejF Gdaeed>e#dd�e@eAfeedbe"ƒ e=e>fg¡dcdd„ ƒZ\ejF GdVed:e#ƒ fd;e1ƒ fgdedf�e@eAfed:e"ƒ fd;e3dCdH�fgdedf�e=e>fg¡dgdh„ ƒZ]ejF Gdieee#feee"fg¡djdk„ ƒZ^ejFjGdle-dd�edd�gdmdngdQ�dodp„ ƒZ_dqdr„ Z`ejF GdsdCdbg¡ejF Gdddg¡dtdu„ ƒƒZaejFjGdved:e#dd�fd;e2dCddL�fgdM�e?jbe@eAdwdxdydzd{d|gfed:e#dd�fd}d;e2dCddL�fgdM�e?jbe@ddN… eAddN… d~dgfed:e"ƒ fd;e3dCddL�fgdM�e:jbe=e>d€d�gfgd‚dƒdPgdQ�ejF Gdddg¡d„d…„ ƒƒZcd†d‡„ ZddS )ˆz+Test the stacking classifier and regressor.é    )ÚMockN)Úassert_array_equal)ÚBaseEstimatorÚClassifierMixinÚRegressorMixinÚclone)Úload_breast_cancerÚload_diabetesÚ	load_irisÚmake_classificationÚmake_multilabel_classificationÚmake_regression)ÚDummyClassifierÚDummyRegressor)ÚRandomForestClassifierÚRandomForestRegressorÚStackingClassifierÚStackingRegressor)ÚConvergenceWarningÚNotFittedError)ÚLinearRegressionÚLogisticRegressionÚRidgeÚRidgeClassifier)ÚKFoldÚStratifiedKFoldÚtrain_test_split)ÚKNeighborsClassifier)ÚMLPClassifier)Úscale)ÚSVCÚ	LinearSVCÚ	LinearSVR)ÚCheckingClassifier)Úassert_allcloseÚassert_allclose_dense_sparseÚignore_warningsé   é*   )Z	n_classesÚrandom_stateé   ÚcvT)Zn_splitsÚshuffler)   Úfinal_estimator©r)   ÚpassthroughFc                 C   sL  t ttƒttdd�\}}}}dtƒ fdtdd�fg}t||| |d�}| ||¡ | |¡ | 	|¡ | 
||¡dksxt‚| |¡}	|rŠd	nd
}
|	jd |
ks t‚|r¾t||	d d …dd …f ƒ |jdd� | ||¡ | |¡ | 	|¡ |d krü| |¡ | |¡}	|�rdnd}|	jd |k�s(t‚|�rHt||	d d …dd …f ƒ d S )Nr(   ©Zstratifyr)   ÚlrÚsvcÚauto©Údual©Ú
estimatorsr-   r+   r/   çš™™™™™é?é
   é   é   éüÿÿÿÚdrop©r1   é   r'   )r   r   ÚX_irisÚy_irisr   r!   r   ÚfitÚpredictÚpredict_probaÚscoreÚAssertionErrorÚ	transformÚshaper$   Ú
set_paramsÚdecision_function)r+   r-   r/   ÚX_trainÚX_testÚy_trainÚy_testr7   ÚclfÚX_transÚexpected_column_countÚexpected_column_count_drop© rS   úc/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/ensemble/tests/test_stacking.pyÚtest_stacking_classifier_iris:   sB    
   ÿü






rU   c            	      C   sÆ   t dd�\} }tt| ƒ||dd�\}}}}dtƒ fdtdd�fg}t|dd	�}| ||¡ | |¡}|jd
 dksvt	‚dtƒ fdt
dd�fg}|j|d� | ||¡ | |¡}|jd
 dksÂt	‚d S )NT©Z
return_X_yr(   r0   r1   Úrfr.   r'   ©r7   r+   r;   r*   r2   r3   r4   ©r7   )r   r   r   r   r   r   rB   rG   rH   rF   r!   rI   )	ÚXÚyrK   rL   rM   Ú_r7   rO   rP   rS   rS   rT   Ú:test_stacking_classifier_drop_column_binary_classificationh   s&       ÿþ

r]   c                  C   sÄ   t ttƒttdd�\} }}}ddtddd�fg}tddd	�}tdtddd�fg|d
d�}t||d
d�}| | |¡ | | |¡ t| 	|¡| 	|¡ƒ t| 
|¡| 
|¡ƒ t| |¡| |¡ƒ d S )Nr(   r0   ©r1   r=   r2   r3   r   ©r5   r)   r9   ©Zn_estimatorsr)   é   ©r7   r-   r+   )r   r   r@   rA   r!   r   r   rB   r$   rC   rD   rG   )rK   rL   rM   r\   r7   rW   rO   Zclf_droprS   rS   rT   Ú'test_stacking_classifier_drop_estimatorƒ   s&       ÿýrc   c                  C   s¬   t ttƒtdd�\} }}}ddtddd�fg}tddd	�}tdtddd�fg|d
d�}t||d
d�}| | |¡ | | |¡ t| 	|¡| 	|¡ƒ t| 
|¡| 
|¡ƒ d S )Nr(   r.   r^   Úsvrr3   r   r_   r9   r`   ra   rb   )r   r   Ú
X_diabetesÚ
y_diabetesr"   r   r   rB   r$   rC   rG   )rK   rL   rM   r\   r7   rW   ÚregZreg_droprS   rS   rT   Ú&test_stacking_regressor_drop_estimator™   s"      ÿýrh   zfinal_estimator, predict_paramsZ
return_stdc                 C   s2  t ttƒtdd�\}}}}dtƒ fdtdd�fg}t||| |d�}	|	 ||¡ |	j|f|Ž}
|rddnd	}|r|t	|
ƒ|ks|t
‚|	 |¡}|rŽd
nd}|jd	 |ks¤t
‚|rÂt||d d …dd …f ƒ |	jdd� |	 ||¡ |	 |¡ |	 |¡}|rödnd	}|jd	 |k�st
‚|�r.t||d d …dd …f ƒ d S )Nr(   r.   r1   rd   r3   r4   r6   r*   r;   é   éöÿÿÿr=   r>   é   )r   r   re   rf   r   r"   r   rB   rC   ÚlenrF   rG   rH   r$   rI   )r+   r-   Zpredict_paramsr/   rK   rL   rM   r\   r7   rg   ÚresultZexpected_result_lengthrP   rQ   rR   rS   rS   rT   Ú test_stacking_regressor_diabetes®   s<      ÿü


rn   ÚfmtZcscZcsrZcooc           	      C   s¬   t t ttƒ¡ | ¡tdd�\}}}}dtƒ fdtdd�fg}t	ddd�}t
||d	d
d�}| ||¡ | |¡}t||d d …dd …f ƒ t |¡s˜t‚|j|jks¨t‚d S )Nr(   r.   r1   rd   r3   r4   r9   r`   ra   Tr6   rj   )r   ÚsparseÚ
coo_matrixr   re   Úasformatrf   r   r"   r   r   rB   rG   r%   ÚissparserF   Úformat©	ro   rK   rL   rM   r\   r7   rW   rO   rP   rS   rS   rT   Ú*test_stacking_regressor_sparse_passthroughÜ   s$      ÿ   ÿ
rv   c           	      C   s¬   t t ttƒ¡ | ¡tdd�\}}}}dtƒ fdtdd�fg}t	ddd�}t
||d	d
d�}| ||¡ | |¡}t||d d …dd …f ƒ t |¡s˜t‚|j|jks¨t‚d S )Nr(   r.   r1   r2   r3   r4   r9   r`   ra   Tr6   r<   )r   rp   rq   r   r@   rr   rA   r   r!   r   r   rB   rG   r%   rs   rF   rt   ru   rS   rS   rT   Ú+test_stacking_classifier_sparse_passthroughî   s$      ÿ   ÿ
rw   c                  C   sh   t td d… ƒtd d…  } }dtƒ fdtƒ fg}t|d�}| | |¡ | | ¡}|jd dksdt	‚d S )Néd   r1   rW   rY   r;   r*   )
r   r@   rA   r   r   r   rB   rG   rH   rF   )ZX_Zy_r7   rO   ZX_metarS   rS   rT   Ú)test_stacking_classifier_drop_binary_prob   s    

ry   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚNoWeightRegressorc                 C   s   t ƒ | _| j ||¡S ©N)r   rg   rB   ©ÚselfrZ   r[   rS   rS   rT   rB     s    zNoWeightRegressor.fitc                 C   s   t  |jd ¡S )Nr   )ÚnpÚonesrH   )r}   rZ   rS   rS   rT   rC     s    zNoWeightRegressor.predictN)Ú__name__Ú
__module__Ú__qualname__rB   rC   rS   rS   rS   rT   rz     s   rz   c                   @   s   e Zd Zdd„ ZdS )ÚNoWeightClassifierc                 C   s   t dd�| _| j ||¡S )NZ
stratified)Zstrategy)r   rO   rB   r|   rS   rS   rT   rB     s    zNoWeightClassifier.fitN)r€   r�   r‚   rB   rS   rS   rS   rT   rƒ     s   rƒ   zy, params, type_err, msg_errr7   zInvalid 'estimators' attribute,r1   ÚsvmiPÃ  ©Úmax_iterrD   )r7   Ústack_methodz+does not implement the method predict_probaZcorzdoes not support sample weightr3   ©r5   r†   ©r7   r-   c              	   C   sP   t j||d��8 tf |ddi—Ž}|jttƒ| t tjd ¡d� W 5 Q R X d S ©N©Úmatchr+   r'   r   ©Zsample_weight)	ÚpytestÚraisesr   rB   r   r@   r~   r   rH   )r[   ÚparamsÚtype_errÚmsg_errrO   rS   rS   rT   Útest_stacking_classifier_error  s    *r“   r4   c              	   C   sP   t j||d��8 tf |ddi—Ž}|jttƒ| t tjd ¡d� W 5 Q R X d S rŠ   )	rŽ   r�   r   rB   r   re   r~   r   rH   )r[   r�   r‘   r’   rg   rS   rS   rT   Útest_stacking_regressor_errorL  s    r”   zestimator, X, yr_   rY   rx   r   r   )Zidsc                 C   sŽ   t | ƒ}|jtdtj d¡d�d� t | ƒ}|jdd� |jtdtj d¡d�d� t| ||¡ |¡d d …dd …f | ||¡ |¡ƒ d S )NTr   ©r,   r)   ©r+   r=   r>   r;   )	r   rI   r   r~   ÚrandomZRandomStater$   rB   rG   )Ú	estimatorrZ   r[   Zestimator_fullZestimator_droprS   rS   rT   Útest_stacking_randomnessj  s    ÿÿ þr™   c                  C   s4   t dtdd�fdtddd�fgd�} |  tt¡ d S )Nr1   i'  r…   r„   r3   rˆ   rY   )r   r   r!   rB   r@   rA   )rO   rS   rS   rT   Ú)test_stacking_classifier_stratify_default˜  s    þÿrš   zstacker, X, yr•   rb   rV   c              	   C   s  t |ƒd }t dg| dgt |ƒ|   ¡}t|||dd�\}}}}}	}ttd�� |  ||¡ W 5 Q R X |  |¡}
ttd�� | j||t |j	¡d� W 5 Q R X |  |¡}t
|
|ƒ ttd�� | j|||	d� W 5 Q R X |  |¡}t |
| ¡ ¡ dk�st‚d S )	Nr*   gš™™™™™¹?gÍÌÌÌÌÌì?r(   r.   )Úcategoryr�   r   )rl   r~   Úarrayr   r&   r   rB   rC   r   rH   r$   ÚabsÚsumrF   )ÚstackerrZ   r[   Zn_half_samplesZtotal_sample_weightrK   rL   rM   r\   Zsample_weight_trainZy_pred_no_weightZy_pred_unit_weightZy_pred_biasedrS   rS   rT   Ú test_stacking_with_sample_weight¥  s*    !ÿ   ÿ
"


r    c                  C   s>   t dtdd�fgtdd�d�} | jttt tjd ¡d� d S )Nr1   T)Zexpected_sample_weightr‰   r   r�   )r   r#   rB   r@   rA   r~   r   rH   )rŸ   rS   rS   rT   Ú0test_stacking_classifier_sample_weight_fit_paramß  s
    þr¡   z-ignore::sklearn.exceptions.ConvergenceWarningc              	   C   s–   t | ƒ}t | ƒ}|jdd� |jdd� | ||¡ | ||¡ t|j|jƒD ]\}}t|j|jƒ qNtjt	dd�� t|j
j|j
jƒ W 5 Q R X d S )Nr'   r–   ra   z	Not equalr‹   )r   rI   rB   ÚzipÚestimators_r$   Zcoef_rŽ   r�   rF   Zfinal_estimator_)rŸ   rZ   r[   Zstacker_cv_3Zstacker_cv_5Zest_cv_3Zest_cv_5rS   rS   rT   Útest_stacking_cv_influenceè  s    ! ÿr¤   z7Stacker, Estimator, stack_method, final_estimator, X, yrC   c                 C   sê   t ||ddd�\}}}}	d|ƒ  ||¡fd|ƒ  ||¡fg}
|
D ]:\}}tdd�|_t||ƒ}t|d�}||_t|||ƒ q@| |
d	|d
�}| ||	¡ |jdd„ |
D ƒks®t‚tdd„ |jD ƒƒsÆt‚|jD ]}t||ƒ}| 	|¡ qÌdS )z2Check the behaviour of stacking when `cv='prefit'`r(   g      à?)r)   Z	test_sizeZd0Zd1rB   )Úname)Zside_effectÚprefit)r7   r+   r-   c                 S   s   g | ]\}}|‘qS rS   rS   )Ú.0r\   r˜   rS   rS   rT   Ú
<listcomp>K  s     z(test_stacking_prefit.<locals>.<listcomp>c                 s   s   | ]}|j jd kV  qdS )r   N)rB   Z
call_count)r§   r˜   rS   rS   rT   Ú	<genexpr>M  s     z'test_stacking_prefit.<locals>.<genexpr>N)
r   rB   r   Úgetattrr€   Úsetattrr£   rF   ÚallZassert_called_with)ZStackerÚ	Estimatorr‡   r-   rZ   r[   ZX_train1ZX_train2Zy_train1Zy_train2r7   r\   r˜   Z
stack_funcZpredict_method_mockedrŸ   Zstack_func_mockrS   rS   rT   Útest_stacking_prefit  s4       ÿþ

  ÿ

r®   r¦   rX   c              	   C   s&   t  t¡� |  ||¡ W 5 Q R X d S r{   )rŽ   r�   r   rB   )rŸ   rZ   r[   rS   rS   rT   Útest_stacking_prefit_errorU  s    r¯   z!make_dataset, Stacking, Estimatorc              	   C   s’   G dd„ d|ƒ}| ddd�\}}|d|ƒ fgd�}|j › d�}tjt|d	�� |j W 5 Q R X | ||¡ d
}tjt|d	�� |j W 5 Q R X d S )Nc                       s    e Zd ZdZ‡ fdd„Z‡  ZS )z8test_stacking_without_n_features_in.<locals>.MyEstimatorz Estimator without n_features_in_c                    s   t ƒ  ||¡ | `d S r{   )ÚsuperrB   Ún_features_in_r|   ©Ú	__class__rS   rT   rB   ‚  s    z<test_stacking_without_n_features_in.<locals>.MyEstimator.fit)r€   r�   r‚   Ú__doc__rB   Ú__classcell__rS   rS   r²   rT   ÚMyEstimator  s   r¶   r   rx   )r)   Z	n_samplesr1   rY   z' object has no attribute n_features_in_r‹   z6'MyEstimator' object has no attribute 'n_features_in_')r€   rŽ   r�   ÚAttributeErrorr±   rB   )Zmake_datasetZStackingr­   r¶   rZ   r[   rŸ   ÚmsgrS   rS   rT   Ú#test_stacking_without_n_features_int  s    r¹   r˜   r   r   c           
      C   sš   t tttdd�\}}}}d}d| fg}t|tƒ dd� ||¡}| |¡}|j|jd |fks`t‚t	t
 |jdd	�d
¡ƒr|t‚| |¡}	|	j|jks–t‚dS )zÚCheck the behaviour for the multilabel classification case and the
    `predict_proba` stacking method.

    Estimators are not consistent with the output arrays and we need to ensure that
    we handle all cases.
    r(   r0   r'   ÚestrD   ©r7   r-   r‡   r   r;   )Zaxisg      ð?N)r   ÚX_multilabelÚy_multilabelr   r   rB   rG   rH   rF   Úanyr~   Úiscloserž   rC   )
r˜   rK   rL   rM   rN   Ú	n_outputsr7   rŸ   rP   Úy_predrS   rS   rT   Ú1test_stacking_classifier_multilabel_predict_proba•  s*       ÿ
ý ü

rÂ   c            	      C   s€   t tttdd�\} }}}d}dtƒ fg}t|tƒ dd� | |¡}| |¡}|j|jd |fksbt	‚| 
|¡}|j|jks|t	‚dS )	zŸCheck the behaviour for the multilabel classification case and the
    `decision_function` stacking method. Only `RidgeClassifier` supports this
    case.
    r(   r0   r'   rº   rJ   r»   r   N)r   r¼   r½   r   r   r   rB   rG   rH   rF   rC   )	rK   rL   rM   rN   rÀ   r7   rŸ   rP   rÁ   rS   rS   rT   Ú5test_stacking_classifier_multilabel_decision_function¼  s(       ÿý ü

rÃ   r‡   c                 C   s  t tttdd�\}}}}| ¡ }d}dtdd�fdtdd�fdtƒ fg}tƒ }	t||	|| d� 	||¡}
t
||ƒ |
 |¡}|j|jksŠt‚| d	kržd
d
dg}ndgt|ƒ }|
j|ksºt‚|t|ƒ }|rØ||jd 7 }|
 |¡}|j|jd |fksút‚t
|
jt ddg¡g| ƒ dS )zŽCheck the behaviour for the multilabel classification case for stack methods
    supported for all estimators or automatically picked up.
    r(   r0   r'   Zmlpr.   rW   Úridge)r7   r-   r/   r‡   r3   rD   rJ   rC   r;   r   N)r   r¼   r½   Úcopyr   r   r   r   r   rB   r   rC   rH   rF   rl   Zstack_method_rG   Zclasses_r~   rœ   )r‡   r/   rK   rL   rM   rN   Zy_train_before_fitrÀ   r7   r-   rO   rÁ   Zexpected_stack_methodsZn_features_X_transrP   rS   rS   rT   Ú0test_stacking_classifier_multilabel_auto_predictÔ  sF       ÿýü û


rÆ   z,stacker, feature_names, X, y, expected_namesZstackingclassifier_lr0Zstackingclassifier_lr1Zstackingclassifier_lr2Zstackingclassifier_svm0Zstackingclassifier_svm1Zstackingclassifier_svm2)Úotherr=   Zstackingclassifier_lrZstackingclassifier_svmZstackingregressor_lrZstackingregressor_svmZStackingClassifier_multiclassZStackingClassifier_binaryc                 C   sF   | j |d� |  t|ƒ|¡ |r.t ||f¡}|  |¡}t||ƒ dS )z/Check get_feature_names_out works for stacking.)r/   N)rI   rB   r   r~   ZconcatenateZget_feature_names_outr   )rŸ   Úfeature_namesrZ   r[   Zexpected_namesr/   Z	names_outrS   rS   rT   Útest_get_feature_names_out  s    B
rÉ   c                  C   sf   t ttƒttdd�\} }}}tdtƒ fgd�}| | |¡ | |¡ | |¡ | 	||¡dksbt
‚dS )zNCheck that a regressor can be used as the first layer in `StackingClassifier`.r(   r0   rÄ   rY   r8   N)r   r   r@   rA   r   r   rB   rC   rD   rE   rF   )rK   rL   rM   rN   rO   rS   rS   rT   Ú'test_stacking_classifier_base_regressorO  s       ÿ

rÊ   )er´   Zunittest.mockr   Únumpyr~   rŽ   Zscipy.sparserp   Znumpy.testingr   Zsklearn.baser   r   r   r   Zsklearn.datasetsr   r	   r
   r   r   r   Zsklearn.dummyr   r   Zsklearn.ensembler   r   r   r   Zsklearn.exceptionsr   r   Zsklearn.linear_modelr   r   r   r   Zsklearn.model_selectionr   r   r   Zsklearn.neighborsr   Zsklearn.neural_networkr   Zsklearn.preprocessingr   Zsklearn.svmr    r!   r"   Zsklearn.utils._mockingr#   Zsklearn.utils._testingr$   r%   r&   ZdiabetesÚdataÚtargetre   rf   Zirisr@   rA   r¼   r½   ZX_binaryZy_binaryÚmarkZparametrizerU   r]   rc   rh   rn   rv   rw   ry   rz   rƒ   Ú
ValueErrorÚ	TypeErrorr“   r”   r™   rš   r    r¡   Úfilterwarningsr¤   r®   r¯   r¹   rÂ   rÃ   rÆ   rÈ   rÉ   rÊ   rS   rS   rS   rT   Ú<module>   sP    ÿ
 ÿ ÿ'ýþ$

	þûöþÿ÷þûöçþ)
üþûöøþ
þÿ

øþÿøõè
þ
úÿ	÷þ
úöôå
	
þûÿøþû÷õçú	ú÷þ
#þú	þû÷÷þ
þþ
û÷
-þÿúöýÿ

þõþÿþöÜ5ýÊ<