U
    -eko                     @   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jFGdde(ddddgejFGddeddgejFGdddgdd ZHdd  ZId!d" ZJd#d$ ZKejFGdde'ddddgejFGd%di feddi fe d&difgejFGdddgd'd( ZLejFGd)d*d+d,gd-d. ZMejFGd)d*d+d,gd/d0 ZNd1d2 ZOG d3d4 d4eeZPG d5d6 d6eeZQejFGd7eAd8g 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jFGd7e>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jFZd^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jFGdaeed>e#dde@eAfeedbe" e=e>fgdcdd Z\ejFGdVe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jFGdie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jFGdsdCdbgejFGd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>ddgfgdddPgdQejFGdddgdd Zcdd 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||}	|rd	nd
}
|	jd |
kst|rt||	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   e/var/www/html/Darija-Ai-Train/env/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st	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
|	|}|rd
nd}|jd	 |kst
|rt||d d dd f  |	jdd |	|| |	| |	|}|rd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|st|j|jkst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|st|j|jkst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 )Nd   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sttdd |jD st|jD ]}t||}|	| qd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st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.
    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 )	zCheck 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st| d	krd
d
dg}ndgt| }|
j|kst|t| }|r||jd 7 }|
|}|j|jd |fkst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.
    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<