U
    ½mœd$o  ã                   @   sÂ  d Z ddlZddl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 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 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 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 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& 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. dd l-m/Z/ dd!l-m0Z0 dd"l1m2Z2 dd#l3m4Z4 dd$l3m5Z5 dd%l3m6Z6 dd&lm7Z7 dd'l8m9Z9 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)d0�g¡ejF Gd1d2d-g¡d3d4„ ƒƒƒZHd5d6„ ZId7d8„ ZJd9d:„ ZKejF Gd,d(e0d(d-d)d.�g¡ejF Gd;di fe$d)d0�i feƒ d<d-ifg¡ejF Gd1d2d-g¡d=d>„ ƒƒƒZLejF Gd?d@dAdBg¡dCdD„ ƒZMejF Gd?d@dAdBg¡dEdF„ ƒZNdGdH„ ZOG dIdJ„ dJee	ƒZPG dKdL„ dLe
e	ƒZQejF GdMeAdNg ieRdOfeAdPeƒ fdQe!dRdS�fgdTdUœeRdVfeAdNdPeƒ fdWeQƒ fgieSdXfeAdPeƒ fdWedRdS�fgeQƒ dYœeSdXfg¡dZd[„ ƒZTejF GdMe>dNg ieRdOfe>dNdPeƒ fdWePƒ fgieSdXfe>dPeƒ fdWe ƒ fgePƒ dYœeSdXfg¡d\d]„ ƒZUejFjGd^e+dPedd0�fdQedd0�fgd_�e@dd`… eAdd`… fe,dPeƒ fdQe dd0�fgd_�e=e>fgdadbgdc�ddde„ ƒZVdfdg„ ZWejFjGdhe+dPeƒ fdQed)d0�fgeƒ e0d-d)di�dj�fed-dk�˜e,dPeƒ fdQe d)d0�fgeƒ e0d-d)di�dj�e=e>fgdadbgdc�dldm„ ƒZXdndo„ ZYejF Zdp¡ejFjGdhe+dPeƒ fdQed)d0�fgeƒ dY�fed-dk�˜e,dPeƒ fdQe d)d0�fgeƒ dY�e=e>fgdadbgdc�dqdr„ ƒƒZ[ejF Gdse+edTed)d0�e@eAfe,edteƒ e=e>fg¡dudv„ ƒZ\ejF Gdhe+dPeƒ fdQe!ƒ fgdwdx�e@eAfe,dPeƒ fdQe ƒ fgdwdx�e=e>fg¡dydz„ ƒZ]ejF Gd{ee+efee,efg¡d|d}„ ƒZ^ejFjGd~e(d)d0�e#d)d0�gdd€gdc�d�d‚„ ƒZ_dƒd„„ Z`ejF Gd…d†dtg¡ejF Gd1d2d-g¡d‡dˆ„ ƒƒZaejFjGd‰e+dPedd0�fdQedd0�fgd_�e?jbe@eAdŠd‹dŒd�dŽd�gfe+dPedd0�fd�dQedd0�fgd_�e?jbe@dd`… eAdd`… d‘d’gfe,dPeƒ fdQe dd0�fgd_�e:jbe=e>d“d”gfgd•d–dbgdc�ejF Gd1d-d2g¡d—d˜„ ƒƒZcd™dš„ ZddS )›z+Test the stacking classifier and regressor.é    N)Úassert_array_equal)ÚBaseEstimator)ÚClassifierMixin)ÚRegressorMixin)Úclone)ÚConvergenceWarning)Ú	load_iris)Úload_diabetes)Úload_breast_cancer)Úmake_regression)Úmake_classification)Úmake_multilabel_classification)ÚDummyClassifier)ÚDummyRegressor)ÚLogisticRegression)ÚLinearRegression)ÚRidge)ÚRidgeClassifier)Ú	LinearSVC)Ú	LinearSVR)ÚSVC)ÚRandomForestClassifier)ÚRandomForestRegressor)ÚKNeighborsClassifier)ÚMLPClassifier)Úscale)ÚStackingClassifier)ÚStackingRegressor)Útrain_test_split)ÚStratifiedKFold)ÚKFold)ÚCheckingClassifier)Úassert_allclose)Úassert_allclose_dense_sparse)Úignore_warnings)ÚNotFittedError)ÚMocké   é*   )Z	n_classesÚrandom_stateé   ÚcvT)Zn_splitsÚshuffler)   Úfinal_estimator©r)   ÚpassthroughFc                 C   sH  t ttƒttdd�\}}}}dtƒ fdtƒ fg}t||| |d�}| ||¡ | |¡ | 	|¡ | 
||¡dkstt‚| |¡}	|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‚|�rDt||	d d …d
d …f ƒ d S )Nr(   ©Zstratifyr)   ÚlrÚsvc©Ú
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_testr4   ÚclfÚX_transÚexpected_column_countÚexpected_column_count_drop© rP   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/ensemble/tests/test_stacking.pyÚtest_stacking_classifier_irisB   sB    
   ÿü






rR   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
ƒ fg}|j|d� | ||¡ | |¡}|jd
 dks¾t	‚d S )NT©Z
return_X_yr(   r0   r1   Úrfr.   r'   ©r4   r+   r8   r*   r2   ©r4   )r
   r   r   r   r   r   r?   rD   rE   rC   r   rF   )	ÚXÚyrH   rI   rJ   Ú_r4   rL   rM   rP   rP   rQ   Ú:test_stacking_classifier_drop_column_binary_classificationp   s&       ÿþ

rZ   c                  C   sÀ   t ttƒttdd�\} }}}ddtdd�fg}tddd�}tdtdd�fg|d	d
�}t||d	d
�}| | |¡ | | |¡ t| 	|¡| 	|¡ƒ t| 
|¡| 
|¡ƒ t| |¡| |¡ƒ d S )Nr(   r0   ©r1   r:   r2   r   r.   r6   ©Zn_estimatorsr)   é   ©r4   r-   r+   )r   r   r=   r>   r   r   r   r?   r"   r@   rA   rD   )rH   rI   rJ   rY   r4   rT   rL   Zclf_droprP   rP   rQ   Ú'test_stacking_classifier_drop_estimator‹   s&       ÿ  ÿr_   c                  C   s¨   t ttƒtdd�\} }}}ddtdd�fg}tddd�}tdtdd�fg|dd	�}t||dd	�}| | |¡ | | |¡ t| 	|¡| 	|¡ƒ t| 
|¡| 
|¡ƒ d S )
Nr(   r.   r[   Úsvrr   r6   r\   r]   r^   )r   r   Ú
X_diabetesÚ
y_diabetesr   r   r   r?   r"   r@   rD   )rH   rI   rJ   rY   r4   rT   ÚregZreg_droprP   rP   rQ   Ú&test_stacking_regressor_drop_estimatorŸ   s"      ÿ  ÿrd   zfinal_estimator, predict_paramsZ
return_stdc                 C   s.  t ttƒtdd�\}}}}dtƒ fdtƒ fg}t||| |d�}	|	 ||¡ |	j|f|Ž}
|r`dnd}|rxt	|
ƒ|ksxt
‚|	 |¡}|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   r`   r3   r*   r8   é   éöÿÿÿr:   r;   é   )r   r   ra   rb   r   r   r   r?   r@   ÚlenrC   rD   rE   r"   rF   )r+   r-   Zpredict_paramsr/   rH   rI   rJ   rY   r4   rc   ÚresultZexpected_result_lengthrM   rN   rO   rP   rP   rQ   Ú test_stacking_regressor_diabetes²   s<      ÿü


rj   ÚfmtZcscZcsrZcooc           	      C   s¨   t t ttƒ¡ | ¡tdd�\}}}}dtƒ fdtƒ 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   r`   r6   r\   r]   Tr3   rf   )r   ÚsparseÚ
coo_matrixr   ra   Úasformatrb   r   r   r   r   r?   rD   r#   ÚissparserC   Úformat©	rk   rH   rI   rJ   rY   r4   rT   rL   rM   rP   rP   rQ   Ú*test_stacking_regressor_sparse_passthroughà   s$      ÿ   ÿ
rr   c           	      C   s¨   t t ttƒ¡ | ¡tdd�\}}}}dtƒ fdtƒ 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   r6   r\   r]   Tr3   r9   )r   rl   rm   r   r=   rn   r>   r   r   r   r   r?   rD   r#   ro   rC   rp   rq   rP   rP   rQ   Ú+test_stacking_classifier_sparse_passthroughò   s$      ÿ   ÿ
rs   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   rT   rV   r8   r*   )
r   r=   r>   r   r   r   r?   rD   rE   rC   )ZX_Zy_r4   rL   ZX_metarP   rP   rQ   Ú)test_stacking_classifier_drop_binary_prob  s    

ru   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚNoWeightRegressorc                 C   s   t ƒ | _| j ||¡S ©N)r   rc   r?   ©ÚselfrW   rX   rP   rP   rQ   r?     s    zNoWeightRegressor.fitc                 C   s   t  |jd ¡S )Nr   )ÚnpÚonesrE   )ry   rW   rP   rP   rQ   r@     s    zNoWeightRegressor.predictN)Ú__name__Ú
__module__Ú__qualname__r?   r@   rP   rP   rP   rQ   rv     s   rv   c                   @   s   e Zd Zdd„ ZdS )ÚNoWeightClassifierc                 C   s   t dd�| _| j ||¡S )NZ
stratified)Zstrategy)r   rL   r?   rx   rP   rP   rQ   r?     s    zNoWeightClassifier.fitN)r|   r}   r~   r?   rP   rP   rP   rQ   r     s   r   zy, params, type_err, msg_errr4   zInvalid 'estimators' attribute,r1   ÚsvmiPÃ  ©Zmax_iterrA   )r4   Ústack_methodz+does not implement the method predict_probaZcorzdoes not support sample weight©r4   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   r?   r   r=   rz   r{   rE   )rX   ÚparamsÚtype_errÚmsg_errrL   rP   rP   rQ   Útest_stacking_classifier_error!  s    *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 r„   )	rˆ   r‰   r   r?   r   ra   rz   r{   rE   )rX   rŠ   r‹   rŒ   rc   rP   rP   rQ   Útest_stacking_regressor_errorP  s    rŽ   zestimator, X, yrV   rt   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;   r8   )	r   rF   r    rz   ÚrandomZRandomStater"   r?   rD   )Ú	estimatorrW   rX   Zestimator_fullZestimator_droprP   rP   rQ   Útest_stacking_randomnessk  s    ÿÿ þr“   c                  C   s2   t dtdd�fdtdd�fgd�} |  tt¡ d S )Nr1   i'  r�   r€   rV   )r   r   r   r?   r=   r>   )rL   rP   rP   rQ   Ú)test_stacking_classifier_stratify_default™  s    þÿr”   zstacker, X, yr�   r^   rS   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   )rh   rz   Úarrayr   r$   r   r?   r@   r{   rE   r"   ÚabsÚsumrC   )ÚstackerrW   rX   Zn_half_samplesZtotal_sample_weightrH   rI   rJ   rY   Zsample_weight_trainZy_pred_no_weightZy_pred_unit_weightZy_pred_biasedrP   rP   rQ   Ú 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!   r?   r=   r>   rz   r{   rE   )r™   rP   rP   rQ   Ú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�   r]   z	Not equalr…   )r   rF   r?   ÚzipÚestimators_r"   Zcoef_rˆ   r‰   rC   Zfinal_estimator_)r™   rW   rX   Zstacker_cv_3Zstacker_cv_5Zest_cv_3Zest_cv_5rP   rP   rQ   Útest_stacking_cv_influenceé  s    ! ÿrž   z7Stacker, Estimator, stack_method, final_estimator, X, yr@   c                 C   sÜ   t ||ddd�\}}}}	d|ƒ  ||¡fd|ƒ  ||¡fg}
|
D ],\}}tƒ |_t||ƒ}t||t|d�ƒ 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d1)Zside_effectÚprefit)r4   r+   r-   c                 S   s   g | ]\}}|‘qS rP   rP   )Ú.0rY   r’   rP   rP   rQ   Ú
<listcomp>H  s     z(test_stacking_prefit.<locals>.<listcomp>c                 s   s   | ]}|j jd kV  qdS )r   N)r?   Z
call_count)r    r’   rP   rP   rQ   Ú	<genexpr>J  s     z'test_stacking_prefit.<locals>.<genexpr>N)	r   r?   r&   ÚgetattrÚsetattrr�   rC   ÚallZassert_called_with)ZStackerÚ	Estimatorr‚   r-   rW   rX   ZX_train1ZX_train2Zy_train1Zy_train2r4   rY   r’   Z
stack_funcr™   Zstack_func_mockrP   rP   rQ   Útest_stacking_prefit  s0       ÿþ
  ÿ

r§   rŸ   rU   c              	   C   s&   t  t¡� |  ||¡ W 5 Q R X d S rw   )rˆ   r‰   r%   r?   )r™   rW   rX   rP   rP   rQ   Útest_stacking_prefit_errorR  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 rw   )Úsuperr?   Ún_features_in_rx   ©Ú	__class__rP   rQ   r?     s    z<test_stacking_without_n_features_in.<locals>.MyEstimator.fit)r|   r}   r~   Ú__doc__r?   Ú__classcell__rP   rP   r«   rQ   ÚMyEstimator|  s   r¯   r   rt   )r)   Z	n_samplesr1   rV   z' object has no attribute n_features_in_r…   z6'MyEstimator' object has no attribute 'n_features_in_')r|   rˆ   r‰   ÚAttributeErrorrª   r?   )Zmake_datasetZStackingr¦   r¯   rW   rX   r™   ÚmsgrP   rP   rQ   Ú#test_stacking_without_n_features_inq  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'   ÚestrA   ©r4   r-   r‚   r   r8   )Zaxisg      ð?N)r   ÚX_multilabelÚy_multilabelr   r   r?   rD   rE   rC   Úanyrz   Úiscloser˜   r@   )
r’   rH   rI   rJ   rK   Ú	n_outputsr4   r™   rM   Úy_predrP   rP   rQ   Ú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³   rG   r´   r   N)r   rµ   r¶   r   r   r   r?   rD   rE   rC   r@   )	rH   rI   rJ   rK   r¹   r4   r™   rM   rº   rP   rP   rQ   Ú5test_stacking_classifier_multilabel_decision_function¹  s(       ÿý ü

r¼   r‚   Úautoc                 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.   rT   Úridge)r4   r-   r/   r‚   r½   rA   rG   r@   r8   r   N)r   rµ   r¶   Úcopyr   r   r   r   r   r?   r   r@   rE   rC   rh   Zstack_method_rD   Zclasses_rz   r–   )r‚   r/   rH   rI   rJ   rK   Zy_train_before_fitr¹   r4   r-   rL   rº   Zexpected_stack_methodsZn_features_X_transrM   rP   rP   rQ   Ú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)rF   r?   r   rz   ZconcatenateZget_feature_names_outr   )r™   Úfeature_namesrW   rX   Zexpected_namesr/   Z	names_outrP   rP   rQ   Ú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¾   rV   r5   N)r   r   r=   r>   r   r   r?   r@   rA   rB   rC   )rH   rI   rJ   rK   rL   rP   rP   rQ   Ú'test_stacking_classifier_base_regressorL  s       ÿ

rÄ   )er­   rˆ   Únumpyrz   Znumpy.testingr   Zscipy.sparserl   Zsklearn.baser   r   r   r   Zsklearn.exceptionsr   Zsklearn.datasetsr   r	   r
   r   r   r   Zsklearn.dummyr   r   Zsklearn.linear_modelr   r   r   r   Zsklearn.svmr   r   r   Zsklearn.ensembler   r   Zsklearn.neighborsr   Zsklearn.neural_networkr   Zsklearn.preprocessingr   r   r   Zsklearn.model_selectionr   r   r    Zsklearn.utils._mockingr!   Zsklearn.utils._testingr"   r#   r$   r%   Zunittest.mockr&   ZdiabetesÚdataÚtargetra   rb   Zirisr=   r>   rµ   r¶   ZX_binaryZy_binaryÚmarkZparametrizerR   rZ   r_   rd   rj   rr   rs   ru   rv   r   Ú
ValueErrorÚ	TypeErrorr�   rŽ   r“   r”   rš   r›   Úfilterwarningsrž   r§   r¨   r²   r»   r¼   rÀ   rÂ   rÃ   rÄ   rP   rP   rP   rQ   Ú<module>   sx   ÿ
 ÿ ÿ'ýþ$

	þûöþÿ÷þûöçþ)
üþùøþ
þÿ

øþÿøõè
þ
úÿ	÷þ
úöôå
	
þûÿøþû÷õçú	ú÷þ
þú	þû÷÷þ
þþ
û÷
-þÿúöýÿ

þõþÿþöÜ5ýÊ<