o
    i҂                     @   s   d Z ddl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 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/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z; ddl<m=Z= ddl>m?Z?m@Z@mAZA ddlBmCZCmDZDmEZE e ZFeFjGeFjHZIZJe ZKeKjGeKjHZLZMeddd\ZNZOeddd\ZPZQejRSdde+ddddgejRSddeddgejRSdd dgd!d" ZTd#d$ ZUd%d& ZVd'd( ZWejRSdde*ddddgejRSd)di feddi fe d*difgejRSdd dgd+d, ZXejRSd-eCeD eE d.d/ ZYejRSd-eCeD eE d0d1 ZZd2d3 Z[G d4d5 d5eeZ\G d6d7 d7eeZ]ejRSd8eMd9g ie^d:feMd;e& fd<e4d=d>fgd?d@e^dAfeMd9d;e& fdBe] fgie_dCfeMd;e& fdBe5d=d>fge] dDe_dCfgdEdF Z`ejRSd8eJd9g ie^d:feJd9d;e% fdBe\ fgie_dCfeJd;e% fdBe6 fge\ dDe_dCfgdGdH ZaejRjSdIed;e&ddfd<e5ddfgdJeLddK eMddK fe d;e% fd<e6ddfgdJeIeJfgdLdMgdNdOdP ZbdQdR ZcejRjSdSed;e& fd<e5ddfge& e*dddTdUgeddVR e d;e% fd<e6ddfge% e*dddTdUeIeJfgdLdMgdNdWdX ZddYdZ ZeejRfd[ejRjSdSed;e& fd<e5ddfge& dDgeddVR e d;e% fd<e6ddfge% dDeIeJfgdLdMgdNd\d] ZgejRSd^eed?e&ddeLeMfe ed_e% eIeJfgd`da ZhejRSdSed;e& fd<e4 fgdbdceLeMfe d;e% fd<e6 fgdbdceIeJfgddde ZiejRSdfeee&fee e%fgdgdh ZjejRjSdie0ddeddgdjdkgdNdldm Zkdndo ZlejRSdpdqd_gejRSdd dgdrds ZmejRjSdted;e&ddfd<e5ddfgdJeKjneLeMg dufed;e&ddfdvd<e5ddfgdJeKjneLddK eMddK dwdxgfe d;e% fd<e6ddfgdJeFjneIeJdydzgfgg d{dNejRSddd gd|d} Zod~d Zpdd ZqejRSdee8fe e9fgdd ZrejRSdee8fe e9fgedddd ZsejRSdee8fe e9fgejRSddeteLjud fdgedddd ZvejRSdee8fe e9fgedddd ZwdS )z+Test the stacking classifier and regressor.    N)Mock)assert_array_equal)sparse)config_context)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)ConsumingClassifierConsumingRegressor	_Registrycheck_recorded_metadata)CheckingClassifier)assert_allcloseassert_allclose_dense_sparseignore_warnings)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERS   *   )Z	n_classesrandom_state   cvT)Zn_splitsshuffler2   final_estimatorr2   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 )Nr1   Zstratifyr2   lrsvc
estimatorsr6   r4   r8   皙?
         dropr:      r0   )r   r!   X_irisy_irisr   r#   r   fitpredictpredict_probascore	transformshaper*   
set_paramsdecision_function)r4   r6   r8   X_trainX_testy_trainy_testr=   clfX_transexpected_column_countexpected_column_count_drop rX   s/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/sklearn/ensemble/tests/test_stacking.pytest_stacking_classifier_irisC   s>   







rZ   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Z
return_X_yr1   r9   r:   rfr7   r0   r=   r4   rA   r3   r;   r=   )r
   r   r!   r   r   r   rH   rL   rM   r#   rN   )	XyrP   rQ   rR   _r=   rT   rU   rX   rX   rY   :test_stacking_classifier_drop_column_binary_classificationq   s    

rb   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 )Nr1   r9   r:   rC   r;   r   r7   r?   Zn_estimatorsr2      r=   r6   r4   )r   r!   rF   rG   r#   r   r   rH   r*   rI   rJ   rL   )rP   rQ   rR   ra   r=   r\   rT   Zclf_droprX   rX   rY   'test_stacking_classifier_drop_estimator   s    rg   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 )
Nr1   r7   rc   svrr   r?   rd   re   rf   )r   r!   
X_diabetes
y_diabetesr$   r   r   rH   r*   rI   rL   )rP   rQ   rR   ra   r=   r\   regZreg_droprX   rX   rY   &test_stacking_regressor_drop_estimator   s   
rl   zfinal_estimator, predict_paramsZ
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 )Nr1   r7   r:   rh   r<   r3   rA      rC   rD      )r   r!   ri   rj   r   r$   r   rH   rI   lenrL   rM   r*   rN   )r4   r6   Zpredict_paramsr8   rP   rQ   rR   ra   r=   rk   resultZexpected_result_lengthrU   rV   rW   rX   rX   rY    test_stacking_regressor_diabetes   s:   



rr   sparse_containerc           	      C      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|sFJ |j|jksNJ d S )Nr1   r7   r:   rh   r?   rd   re   Tr<   rn   )r   r!   ri   rj   r   r$   r   r   rH   rL   r+   r   issparseformat	rs   rP   rQ   rR   ra   r=   r\   rT   rU   rX   rX   rY   *test_stacking_regressor_sparse_passthrough      
rx   c           	      C   rt   )Nr1   r7   r:   r;   r?   rd   re   Tr<   rB   )r   r!   rF   rG   r   r#   r   r   rH   rL   r+   r   ru   rv   rw   rX   rX   rY   +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:   r\   r^   rA   r3   )	r!   rF   rG   r   r   r   rH   rL   rM   )ZX_Zy_r=   rT   ZX_metarX   rX   rY   )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   rk   rH   selfr_   r`   rX   rX   rY   rH     s   zNoWeightRegressor.fitc                 C   s   t |jd S )Nr   )nponesrM   )r   r_   rX   rX   rY   rI      s   zNoWeightRegressor.predictN)__name__
__module____qualname__rH   rI   rX   rX   rX   rY   r}     s    r}   c                   @   s   e Zd Zdd ZdS )NoWeightClassifierc                 C   s   t dd| _| j||S )NZ
stratified)Zstrategy)r   rT   rH   r   rX   rX   rY   rH   %  s   zNoWeightClassifier.fitN)r   r   r   rH   rX   rX   rX   rY   r   $  s    r   zy, params, type_err, msg_errr=   zInvalid 'estimators' attribute,r:   svmiP  Zmax_iterrJ   )r=   stack_methodz+does not implement the method predict_probaZcorzdoes not support sample weightr=   r6   c                 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matchr4   r0   r   sample_weightrX   )	pytestraisesr   rH   r!   rF   r   r   rM   )r`   paramstype_errmsg_errrT   rX   rX   rY   test_stacking_classifier_error*  s   *""r   c                 C   r   r   )	r   r   r   rH   r!   ri   r   r   rM   )r`   r   r   r   rk   rX   rX   rY   test_stacking_regressor_errorY  s   ""r   zestimator, X, yr^   r{   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   r5   r2   r4   rC   rD   rA   )	r	   rN   r   r   randomZRandomStater*   rH   rL   )	estimatorr_   r`   Zestimator_fullZestimator_droprX   rX   rY   test_stacking_randomnessw  s    r   c                  C   s2   t dtddfdtddfgd} | tt d S )Nr:   i'  r   r   r^   )r   r   r#   rH   rF   rG   )rT   rX   rX   rY   )test_stacking_classifier_stratify_default  s   r   zstacker, X, yr   rf   r[   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 )	Nr3   g?g?r1   r7   )categoryr   r   )rp   r   arrayr   r,   r   rH   rI   r   rM   r*   abssum)stackerr_   r`   Zn_half_samplesZtotal_sample_weightrP   rQ   rR   ra   Zsample_weight_trainZy_pred_no_weightZy_pred_unit_weightZy_pred_biasedrX   rX   rY    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)Zexpected_sample_weightr   r   r   )r   r)   rH   rF   rG   r   r   rM   )r   rX   rX   rY   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 )Nr0   r   re   z	Not equalr   )r	   rN   rH   zipestimators_r*   Zcoef_r   r   AssertionErrorfinal_estimator_)r   r_   r`   Zstacker_cv_3Zstacker_cv_5Zest_cv_3Zest_cv_5rX   rX   rY   test_stacking_cv_influence  s   !"r   z7Stacker, Estimator, stack_method, final_estimator, X, yrI   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sWJ tdd |jD scJ |jD ]}t||}|| qfdS )z2Check the behaviour of stacking when `cv='prefit'`r1   g      ?)r2   Z	test_sizeZd0Zd1rH   )name)Zside_effectprefit)r=   r4   r6   c                 S   s   g | ]\}}|qS rX   rX   ).0ra   r   rX   rX   rY   
<listcomp>X  s    z(test_stacking_prefit.<locals>.<listcomp>c                 s   s    | ]	}|j jd kV  qdS )r   N)rH   Z
call_count)r   r   rX   rX   rY   	<genexpr>Z  s    z'test_stacking_prefit.<locals>.<genexpr>N)	r   rH   r   getattrr   setattrr   allZassert_called_with)ZStacker	Estimatorr   r6   r_   r`   ZX_train1ZX_train2Zy_train1Zy_train2r=   ra   r   Z
stack_funcZpredict_method_mockedr   Zstack_func_mockrX   rX   rY   test_stacking_prefit*  s,   



r   r   r]   c                 C   s<   t t | || W d    d S 1 sw   Y  d S r~   )r   r   r   rH   )r   r_   r`   rX   rX   rY   test_stacking_prefit_errorb  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~   )superrH   n_features_in_r   	__class__rX   rY   rH     s   z<test_stacking_without_n_features_in.<locals>.MyEstimator.fit)r   r   r   __doc__rH   __classcell__rX   rX   r   rY   MyEstimator  s    r   r   r{   )r2   Z	n_samplesr:   r^   z' object has no attribute n_features_in_r   z6'MyEstimator' object has no attribute 'n_features_in_')r   r   r   AttributeErrorr   rH   )Zmake_datasetZStackingr   r   r_   r`   r   msgrX   rX   rY   #test_stacking_without_n_features_in  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s0J tt	
|jdd	d
r>J ||}	|	j|jksKJ dS )zCheck 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.
    r1   r9   r0   estrJ   r=   r6   r   r   rA   )Zaxisg      ?N)r   X_multilabely_multilabelr   r   rH   rL   rM   anyr   iscloser   rI   )
r   rP   rQ   rR   rS   	n_outputsr=   r   rU   y_predrX   rX   rY   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s1J |	|}|j|jks>J dS )	zCheck the behaviour for the multilabel classification case and the
    `decision_function` stacking method. Only `RidgeClassifier` supports this
    case.
    r1   r9   r0   r   rO   r   r   N)
r   r   r   r   r   r   rH   rL   rM   rI   )	rP   rQ   rR   rS   r   r=   r   rU   r   rX   rX   rY   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sEJ | d	krNg d
}ndgt| }|
j|ks\J |t| }|rk||jd 7 }|
|}|j|jd |fks|J t
|
jtddgg|  dS )zCheck the behaviour for the multilabel classification case for stack methods
    supported for all estimators or automatically picked up.
    r1   r9   r0   Zmlpr7   r\   ridge)r=   r6   r8   r   r   )rJ   rJ   rO   rI   rA   r   N)r   r   r   copyr    r   r   r   r   rH   r   rI   rM   rp   Zstack_method_rL   Zclasses_r   r   )r   r8   rP   rQ   rR   rS   Zy_train_before_fitr   r=   r6   rT   r   Zexpected_stack_methodsZn_features_X_transrU   rX   rX   rY   0test_stacking_classifier_multilabel_auto_predict  s>   



 r   z,stacker, feature_names, X, y, expected_names)Zstackingclassifier_lr0Zstackingclassifier_lr1Zstackingclassifier_lr2Zstackingclassifier_svm0Zstackingclassifier_svm1Zstackingclassifier_svm2)otherrC   Zstackingclassifier_lrZstackingclassifier_svmZstackingregressor_lrZstackingregressor_svm)ZStackingClassifier_multiclassZStackingClassifier_binaryr   c                 C   sF   | j |d | t|| |rt||f}| |}t|| dS )z/Check get_feature_names_out works for stacking.)r8   N)rN   rH   r!   r   ZconcatenateZget_feature_names_outr   )r   feature_namesr_   r`   Zexpected_namesr8   Z	names_outrX   rX   rY   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s1J dS )zNCheck that a regressor can be used as the first layer in `StackingClassifier`.r1   r9   r   r^   r>   N)
r   r!   rF   rG   r   r   rH   rI   rJ   rK   )rP   rQ   rR   rS   rT   rX   rX   rY   'test_stacking_classifier_base_regressor\  s   

r   c                  C   s   t dd\} }dt fdtdddfg}tddd}t||dd}d	}d
}tjt|d}|| ||  W d   n1 s@w   Y  t	|j
jtsNJ |t|j
jv sXJ dS )a
  Check that we raise the proper AttributeError when the final estimator
    does not implement the `decision_function` method, which is decorated with
    `available_if`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/28108
    r1   r7   r:   r\   r3   rd   r0   rf   z>This 'StackingClassifier' has no attribute 'decision_function'zD'RandomForestClassifier' object has no attribute 'decision_function'r   N)r   r   r   r   r   r   r   rH   rO   
isinstancevalue	__cause__str)r_   r`   r=   r6   rT   Z	outer_msgZ	inner_msgZ	exec_inforX   rX   rY   -test_stacking_final_estimator_attribute_errorh  s   r   zEstimator, Childc                 C   sT   t jtdd | d| gjttg ddd W d   dS 1 s#w   Y  dS )zTest that the right error message is raised when metadata is passed while
    not supported when `enable_metadata_routing=False`.z1is only supported if enable_metadata_routing=Truer   rT   )rA   rA   rA   rA   rA   ar   metadataN)r   r   
ValueErrorrH   rF   rG   )r   ChildrX   rX   rY   *test_routing_passed_metadata_not_supported  s   "r   )Zenable_metadata_routingc                 C   s   | d| fg}|   d S )Nsub_est)Zget_metadata_routing)r   r   r   rX   rX   rY   %test_get_metadata_routing_without_fit  s   
r   zprop, prop_valuer   )r   r   c              	   C   s&  | d|t  djdi |difd|t  djdi |difg|t  djdi |did}|jttfi ||i |jttfi ||i |jtfi ||i |jD ] }|d j	}t
|scJ |D ]}td|dd|d||i qeqV|jj	}t
|sJ td|d	 d
d
|d||i dS )z5Test that metadata is routed correctly for Stacking*.Zsub_est1)registryTZsub_est2)r6   rA   rH   )objmethodparentZsplit_paramsrI   NrX   )r'   Zset_fit_requestZset_predict_requestrH   rF   rG   Zfit_transformrI   r=   r   rp   r(   r   )r   r   propZ
prop_valuer   r   r   r   rX   rX   rY   -test_metadata_routing_for_stacking_estimators  sH   


	
r   c                 C   s   t tjd d}}| d| fg}d|j d}tjtt	|d |j
tt||d W d   dS 1 s9w   Y  dS )	zCTest that the right error is raised when metadata is not requested.r   r   r   zb[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for z.fitr   r   N)r   r   rF   rM   r   r   r   r   reescaperH   rG   )r   r   r   r   r   error_messagerX   rX   rY   3test_metadata_routing_error_for_stacking_estimators  s   
"r   )xr   r   Zunittest.mockr   numpyr   r   Znumpy.testingr   Zscipyr   Zsklearnr   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.tests.metadata_routing_commonr%   r&   r'   r(   Zsklearn.utils._mockingr)   Zsklearn.utils._testingr*   r+   r,   Zsklearn.utils.fixesr-   r.   r/   Zdiabetesdatatargetri   rj   ZirisrF   rG   r   r   ZX_binaryZy_binarymarkZparametrizerZ   rb   rg   rl   rr   rx   rz   r|   r}   r   r   	TypeErrorr   r   r   r   r   r   filterwarningsr   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   r   r   rX   rX   rX   rY   <module>   s    
'$

	
)




	


		
#	


-

4<!
.