o
    tBh!_                     @   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 e Z3e3j4e3j5Z6Z7e Z8e8j4e8j5Z9Z:ej;<d#d$e(d$d%d&d'gej;<d(de d&d)gej;<d*d+d%gd,d- Z=d.d/ Z>d0d1 Z?d2d3 Z@ej;<d#d$e)d$d%d&d'gej;<d4di fe!d&d)i fe d5d%ifgej;<d*d+d%gd6d7 ZAej;<d8g d9d:d; ZBej;<d8g d9d<d= ZCd>d? ZDG d@dA dAee	ZEG dBdC dCe
e	ZFej;<dDe:dEdieGdFfe:dEg ieGdFfe:dGe fdHedIdJfgdKdLeGdMfe:dEdGe fdNeF fgieHdOfe:dGe fdNedIdJfgeF dPeHdOfe:dGe fgdQdReHdSfgdTdU ZIej;<dDe7dEdieGdFfe7dEg ieGdFfe7dEdGe fdNeE fgieHdOfe7dGe fdNe fgeE dPeHdOfe7dGe fgdQdReHdSfgdVdW ZJej;j<dXe$dGedd)fdHedd)fgdYe9ddZ e:ddZ fe%dGe fdHedd)fgdYe6e7fgd[d\gd]d^d_ ZKd`da ZLej;j<dbe$dGe fdHed&d)fge e)d%d&dcddged%deR e%dGe fdHed&d)fge e)d%d&dcdde6e7fgd[d\gd]dfdg ZMdhdi ZNej;Odjej;j<dbe$dGe fdHed&d)fge dPged%deR e%dGe fdHed&d)fge dPe6e7fgd[d\gd]dkdl ZPej;<dme$edKed&d)e9e:fe%edne e6e7fgdodp ZQej;<dbe$dGe fdHe fgdqdre9e:fe%dGe fdHe fgdqdre6e7fgdsdt ZRej;<duee$efee%efgdvdw ZSej;j<dxe$dGedd)fdHedd)fgdYe8jTe9e:g dyfe$dGedd)fdzdHedd)fgdYe8jTe9ddZ e:ddZ d{d|gfe%dGe fdHedd)fgdYe3jTe6e7d}d~gfgg dd]ej;<d*d%d+gdd ZUd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)DummyClassifier)DummyRegressor)LogisticRegression)LinearRegression)	LinearSVC)	LinearSVR)SVC)RandomForestClassifier)RandomForestRegressor)scale)StackingClassifier)StackingRegressor)train_test_split)StratifiedKFold)KFold)CheckingClassifier)assert_allclose)assert_allclose_dense_sparse)ignore_warnings)NotFittedError)Mockcv   T*   )n_splitsshufflerandom_statefinal_estimatorr'   passthroughFc                 C   sF  t ttttdd\}}}}dt fdt fg}t||| |d}||| || |	| |
||dks:J ||}	|rCdnd}
|	jd	 |
ksNJ |r]t||	d d d
d f  |jdd ||| || |	| |d u r||| ||}	|rdnd}|	jd	 |ksJ |rt||	d d d
d f  d S d S )Nr$   stratifyr'   lrsvc
estimatorsr(   r"   r*   g?
         dropr-      r#   )r   r   X_irisy_irisr   r   r   fitpredictpredict_probascore	transformshaper   
set_paramsdecision_function)r"   r(   r*   X_trainX_testy_trainy_testr0   clfX_transexpected_column_countexpected_column_count_drop rJ   {/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/ensemble/tests/test_stacking.pytest_stacking_classifier_iris9   s>   







rL   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s;J dt fdt	 fg}|j
|d ||| ||}|jd
 dks_J d S )NT
return_X_yr$   r+   r-   rfr)   r#   r0   r"   r3      r.   r0   )r
   r   r   r   r   r   r:   r>   r?   r   r@   )	XyrB   rC   rD   _r0   rF   rG   rJ   rJ   rK   :test_stacking_classifier_drop_column_binary_classificationg   s    

rV   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$   r+   r-   r5   r.   r   r)   r1   n_estimatorsr'      r0   r(   r"   )r   r   r8   r9   r   r   r   r:   r   r;   r<   r>   )rB   rC   rD   rU   r0   rO   rF   clf_droprJ   rJ   rK   '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)   rW   svrr   r1   rX   rZ   r[   )r   r   
X_diabetes
y_diabetesr   r   r   r:   r   r;   r>   )rB   rC   rD   rU   r0   rO   regreg_droprJ   rJ   rK   &test_stacking_regressor_drop_estimator   s   
rc   zfinal_estimator, predict_params
return_stdc                 C   s2  t tttdd\}}}}dt fdt fg}t||| |d}	|	|| |	j|fi |}
|r2dnd}|r>t	|
|ks>J |	
|}|rGdnd}|jd |ksRJ |rat||d d d	d f  |	jd
d |	|| |	| |	
|}|r{dnd}|jd |ksJ |rt||d d d	d f  d S d S )Nr$   r)   r-   r^   r/   rQ   r3      r5   r6      )r   r   r_   r`   r   r   r   r:   r;   lenr>   r?   r   r@   )r"   r(   predict_paramsr*   rB   rC   rD   rU   r0   ra   resultexpected_result_lengthrG   rH   rI   rJ   rJ   rK    test_stacking_regressor_diabetes   s:   



rl   fmt)csccsrcooc           	      C      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|sJJ |j|jksRJ d S )Nr$   r)   r-   r^   r1   rX   rZ   Tr/   rf   )r   sparse
coo_matrixr   r_   asformatr`   r   r   r   r   r:   r>   r   issparseformat	rm   rB   rC   rD   rU   r0   rO   rF   rG   rJ   rJ   rK   *test_stacking_regressor_sparse_passthrough      
rx   c           	      C   rq   )Nr$   r)   r-   r.   r1   rX   rZ   Tr/   r4   )r   rr   rs   r   r8   rt   r9   r   r   r   r   r:   r>   r   ru   rv   rw   rJ   rJ   rK   +test_stacking_classifier_sparse_passthrough   ry   rz   c                  C   sh   t td d td d } }dt fdt fg}t|d}|| | || }|jd dks2J d S )Nd   r-   rO   rR   r3   rQ   )	r   r8   r9   r   r   r   r:   r>   r?   )X_y_r0   rF   X_metarJ   rJ   rK   )test_stacking_classifier_drop_binary_prob   s   

r   c                   @   s   e Zd Zdd Zdd ZdS )NoWeightRegressorc                 C   s   t  | _| j||S N)r   ra   r:   selfrS   rT   rJ   rJ   rK   r:   
  s   zNoWeightRegressor.fitc                 C   s   t |jd S )Nr   )nponesr?   )r   rS   rJ   rJ   rK   r;     s   zNoWeightRegressor.predictN)__name__
__module____qualname__r:   r;   rJ   rJ   rJ   rK   r   	  s    r   c                   @   s   e Zd Zdd ZdS )NoWeightClassifierc                 C   s   t dd| _| j||S )N
stratified)strategy)r   rF   r:   r   rJ   rJ   rK   r:     s   zNoWeightClassifier.fitN)r   r   r   r:   rJ   rJ   rJ   rK   r     s    r   zy, params, type_err, msg_errr0   zInvalid 'estimators' attribute,r-   svmg     j@max_iterr<   )r0   stack_methodz+does not implement the method predict_probacorzdoes not support sample weightr0   r(   foo)r0   r*   z"passthrough must be an instance ofc                 C   j   t j||d$ tdi |ddi}|jtt| ttjd d W d    d S 1 s.w   Y  d S Nmatchr"   r#   r   sample_weightrJ   )	pytestraisesr   r:   r   r8   r   r   r?   )rT   paramstype_errmsg_errrF   rJ   rJ   rK   test_stacking_classifier_error  s   1""r   c                 C   r   r   )	r   r   r   r:   r   r_   r   r   r?   )rT   r   r   r   ra   rJ   rJ   rK   test_stacking_regressor_errorN  s   """r   zestimator, X, yrR   r{   r   r   )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"   r5   r6   r3   )	r   r@   r   r   randomRandomStater   r:   r>   )	estimatorrS   rT   estimator_fullestimator_droprJ   rJ   rK   test_stacking_randomnessu  s    r   c                  C   s2   t dtddfdtddfgd} | tt d S )Nr-   g     @r   r   rR   )r   r   r   r:   r8   r9   )rF   rJ   rJ   rK   )test_stacking_classifier_stratify_default  s   r   zstacker, X, yr   r[   rM   c                 C   sB  t |d }tdg| dgt ||   }t|||dd\}}}}}	}ttd | || W d    n1 s;w   Y  | |}
ttd | j||t|j	d W d    n1 saw   Y  | |}t
|
| ttd | j|||	d W d    n1 sw   Y  | |}t|
|  dksJ d S )	NrQ   g?g?r$   r)   )categoryr   r   )rh   r   arrayr   r   r   r:   r;   r   r?   r   abssum)stackerrS   rT   n_half_samplestotal_sample_weightrB   rC   rD   rU   sample_weight_trainy_pred_no_weighty_pred_unit_weighty_pred_biasedrJ   rJ   rK    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 )Nr-   T)expected_sample_weightr   r   r   )r   r   r:   r8   r9   r   r   r?   )r   rJ   rJ   rK   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 q'tjt	dd t|j
j|j
j W d    d S 1 sOw   Y  d S )Nr#   r   rZ   z	Not equalr   )r   r@   r:   zipestimators_r   coef_r   r   AssertionErrorfinal_estimator_)r   rS   rT   stacker_cv_3stacker_cv_5est_cv_3est_cv_5rJ   rJ   rK   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sPJ tdd |jD s\J |jD ]}t||}|| q_dS )z2Check the behaviour of stacking when `cv='prefit'`r$   g      ?)r'   	test_sized0d1)side_effectprefit)r0   r"   r(   c                 S   s   g | ]\}}|qS rJ   rJ   ).0rU   r   rJ   rJ   rK   
<listcomp>R  s    z(test_stacking_prefit.<locals>.<listcomp>c                 s   s    | ]	}|j jd kV  qdS )r   N)r:   
call_count)r   r   rJ   rJ   rK   	<genexpr>T  s    z'test_stacking_prefit.<locals>.<genexpr>N)r   r:   r!   getattrsetattrr   allassert_called_with)Stacker	Estimatorr   r(   rS   rT   X_train1X_train2y_train1y_train2r0   rU   r   
stack_funcr   stack_func_mockrJ   rJ   rK   test_stacking_prefit(  s(   


r   r   rP   c                 C   s<   t t | || W d    d S 1 sw   Y  d S r   )r   r   r    r:   )r   rS   rT   rJ   rJ   rK   test_stacking_prefit_error\  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 d    n1 s4w   Y  ||| d
}tjt|d	 |j W d    d S 1 sWw   Y  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   )superr:   n_features_in_r   	__class__rJ   rK   r:     s   z<test_stacking_without_n_features_in.<locals>.MyEstimator.fit)r   r   r   __doc__r:   __classcell__rJ   rJ   r   rK   MyEstimator  s    r   r   r{   )r'   	n_samplesr-   rR   z' object has no attribute n_features_in_r   z6'MyEstimator' object has no attribute 'n_features_in_')r   r   r   AttributeErrorr   r:   )make_datasetStackingr   r   rS   rT   r   msgrJ   rJ   rK   #test_stacking_without_n_features_in{  s   "r   z,stacker, feature_names, X, y, expected_names)stackingclassifier_lr0stackingclassifier_lr1stackingclassifier_lr2stackingclassifier_svm0stackingclassifier_svm1stackingclassifier_svm2)otherr5   stackingclassifier_lrstackingclassifier_svmstackingregressor_lrstackingregressor_svm)StackingClassifier_multiclassStackingClassifier_binaryr   c                 C   sF   | j |d | t|| |rt||f}| |}t|| dS )z/Check get_feature_names_out works for stacking.)r*   N)r@   r:   r   r   concatenateget_feature_names_outr   )r   feature_namesrS   rT   expected_namesr*   	names_outrJ   rJ   rK   test_get_feature_names_out  s   B
r   )Vr   r   numpyr   numpy.testingr   scipy.sparserr   sklearn.baser   r   r   r   sklearn.exceptionsr   sklearn.datasetsr   r	   r
   r   r   sklearn.dummyr   r   sklearn.linear_modelr   r   sklearn.svmr   r   r   sklearn.ensembler   r   sklearn.preprocessingr   r   r   sklearn.model_selectionr   r   r   sklearn.utils._mockingr   sklearn.utils._testingr   r   r   r    unittest.mockr!   diabetesdatatargetr_   r`   irisr8   r9   markparametrizerL   rV   r]   rc   rl   rx   rz   r   r   r   
ValueError	TypeErrorr   r   r   r   r   r   filterwarningsr   r   r   r   r   r   rJ   rJ   rJ   rK   <module>   sV   '$

	
0

!



	


		
	



4<