o
    tBh\                     @   s  d Z ddlZddlZddlZddlmZ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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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'm(Z(m)Z) ddl*m+Z+ e, Z-e-j.ddddf e-j/Z0Z1ej2dd\Z3Z4dd Z5ej67de0e1edde fgife3e4edde fgifgej67d d!d"ie8d#fd!d$ie9d%fgd&d' Z:ej67d(dg id)fde fgd*d+d,fde fgdd-gd.d/fgd0d1 Z;d2d3 Z<d4d5 Z=d6d7 Z>d8d9 Z?d:d; Z@d<d= ZAd>d? ZBd@dA ZCdBdC ZDdDdE ZEdFdG ZFdHdI ZGdJdK ZHdLdM ZIdNdO ZJdPdQ ZKdRdS ZLej67dTe0e1ede fdUedVdWfgfe3e4ede fdUedVdWfgfgdXdY ZMej6j7dZede fd[edd\fgd]ededd\fd[edd\fgd]gd^d_gd`dadb ZNej67dcede fdUeddd\fgddeededdd\fdUeddd\fgddegdfdg ZOdhdi ZPej67djdkddlg dmfdndoidpdqgfgdrds ZQdtdu ZRdS )vz4Testing for the VotingClassifier and VotingRegressor    N)assert_almost_equalassert_array_equal)assert_array_almost_equal)NotFittedError)LinearRegression)LogisticRegression)
GaussianNB)RandomForestClassifier)RandomForestRegressor)VotingClassifierVotingRegressor)DecisionTreeClassifier)DecisionTreeRegressor)GridSearchCV)datasets)cross_val_scoretrain_test_split)make_multilabel_classification)SVC)OneVsRestClassifier)KNeighborsClassifier)BaseEstimatorClassifierMixinclone)DummyRegressor      T)
return_X_yc                  C   sX   t dt fgdd} d}tjt|d | tt W d    d S 1 s%w   Y  d S )Nlrfoo)
estimatorsflatten_transformz(flatten_transform must be an instance ofmatch)r   r   pytestraises	TypeErrorfitXy)ensembleerr_msg r,   y/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/ensemble/tests/test_voting.py'test_invalid_type_for_flatten_transform$   s   "r.   zX, y, voter, learnerr    r   zparams, err_type, err_msgverbosezverbose == -1, must be >= 0r   zverbose must be an instance ofc                 C   sX   | | |di |}tj||d || | W d    d S 1 s%w   Y  d S Nr"   r,   )updater$   r%   r'   )r(   r)   voterlearnerparamserr_typer+   r*   r,   r,   r-   'test_voting_estimators_param_validation.   s
   
"r7   zparams, err_msgz@Invalid 'estimators' attribute, 'estimators' should be a list oferrorr    votingz7Voting must be 'soft' or 'hard'; got \(voting='error'\)   )r    weightsz0Number of `estimators` and weights must be equalc                 C   sN   t di | }tjt|d |tt W d    d S 1 s w   Y  d S r1   )r   r$   r%   
ValueErrorr'   r(   r)   )r5   r+   r*   r,   r,   r-   %test_voting_classifier_estimator_initF   s   "r>   c                  C   s   t dt fdt fgdd} d}tjt|d | j W d    n1 s%w   Y  t| dr1J | tt	 t| dr>J d S )Nlr1lr2hardr9   1predict_proba is not available when voting='hard'r"   predict_proba)
r   r   r$   r%   AttributeErrorrC   hasattrr'   r(   r)   )eclfmsgr,   r,   r-   test_predictproba_hardvoting]   s   rH   c                  C   sb  t dt fdt fgdd} tdt fg}d}tjt|d d | t W d    n1 s1w   Y  tjt|d d | 	t W d    n1 sOw   Y  tjt|d d | 
t W d    n1 smw   Y  tjt|d	 d |t W d    n1 sw   Y  tjt|d	 d |
t W d    d S 1 sw   Y  d S )
Nr?   r@   softr9   drzfThis %s instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.r   r"   r   )r   r   r   r   r$   r%   r   predictr(   rC   	transformX_r)rF   eregrG   r,   r,   r-   test_notfittedk   s,   "rO   c                  C   sb   t ddd} tddd}t }td| fd|fd|fgd	d
}t|ttdd}t| ddd dS )z7Check classification by majority label on dataset iris.	liblinear{   )solverrandom_state
   n_estimatorsrS   r   rfgnbrA   r9   accuracyscoringgffffff?r;   decimalN	r   r	   r   r   r   r(   r)   r   meanclf1clf2clf3rF   scoresr,   r,   r-   test_majority_label_iris   s   re   c                  C   s   t ddd} tdd}td| fd|fgdd}| tttd	 d
ks&J |tttd	 dks5J |tttd	 dksDJ dS )zECheck voting classifier selects smaller class label in tie situation.rQ   rP   )rS   rR   rS   r   rW   rA   r9   I   r;   r   N)r   r	   r   r'   r(   r)   rK   )ra   rb   rF   r,   r,   r-   test_tie_situation   s   
"rh   c                  C   sd   t dd} tdd}t }td| fd|fd|fgdg dd}t|ttd	d
}t| ddd dS )z>Check classification by average probabilities on dataset iris.rQ   rf   r   rW   rX   rI   r   r;   rT   r    r:   r<   rY   rZ   g(\?r;   r\   Nr^   r`   r,   r,   r-   test_weights_iris   s   

rk   c                  C   sL  t dd} t dd}t ddd}td| fd|fd|fgg dd}tttd	d
\}}}}| |||}||||}	||||}
||||}tjt	||	|
gdg dd}t
||dd td| fd|fd|fgdd}td| fd|fd|fgg dd}||| ||| ||}||}t
||dd dS )zACheck weighted average regression prediction on diabetes dataset.r_   )strategymedianquantile皙?)rl   rn   ri   )r<   g      ?)	test_sizer   )axisr<   r;   r\   Nr   r   r   )r   r   r   rM   y_rr'   rK   npaverageasarrayr   )reg1reg2reg3rN   	X_r_trainX_r_test	y_r_trainy_r_test	reg1_pred	reg2_pred	reg3_pred	ereg_predavgereg_weights_noneereg_weights_equalereg_none_predereg_equal_predr,   r,   r-   test_weights_regressor   s8   



r   c               	   C   s.  t dd} tdd}t }tddgddgddgd	d
gddgddgg}tg d}t| |||g d t||||g d t||||g d td| fd|fd|fgdg dd}t||||g d td| fd|fd|fgdg dd}t||||g d dS )z6Manually check predicted class labels for toy dataset.rQ   rf   皙      333333ffffff333333皙皙?333333?g @gffffff?g@gffffff@)r   r   r   r;   r;   r;   r   rW   rX   rA   rr   rj   rI   N)	r   r	   r   rt   arrayr   r'   rK   r   )ra   rb   rc   r(   r)   rF   r,   r,   r-   test_predict_on_toy_problem   s,   

& r   c                  C   sT  t dd} tdd}t }tddgddgddgd	d
gg}tg d}tddgddgddgddgg}tddgddgddgddgg}tddgddgddgddgg}d|d d  |d d  |d d  d  }d|d! d!  |d! d!  |d! d!  d  }	d|d d!  |d d!  |d d!  d  }
d|d" d!  |d" d!  |d" d!  d  }td#| fd$|fd%|fgd&g d'd(}||||}t||d d d!d) t|	|d! d! d!d) t|
|d d! d!d) t||d" d! d!d) t	j
td*d+! td#| fd$|fd%|fgd,d-}|||| W d.   d.S 1 s#w   Y  d.S )/z1Calculate predicted probabilities on toy dataset.rQ   rf   r   r   r   r   r   r   r   r   r   r   r;   r;   g7sa"?g=?gRhp?gℶZ/?gl^Ԭ;?g(1BW?gU(V6?g&d?g?ro   333333?ffffff?g5w?g9=qX?g_?g$/AY?              ?r;   r      r   r   r   rW   rX   rI   )r;   r   r   rj   r\   rB   r"   rA   r9   N)r   r	   r   rt   r   r   r'   rC   r   r$   r%   rD   )ra   rb   rc   r(   r)   clf1_resclf2_resclf3_rest00t11t21t31rF   eclf_resr,   r,   r-   !test_predict_proba_on_toy_problem   sL   

""	,,,,$r   c                  C   s\   t ddddd\} }ttdd}td|fgd	d
}z	|| | W dS  ty-   Y dS w )z7Check if error is raised for multilabel classification.r;   r   FrQ   )	n_classesn_labelsallow_unlabeledrS   linear)kernelovrrA   r9   N)r   r   r   r   r'   NotImplementedError)r(   r)   clfrF   r,   r,   r-   test_multilabel  s   
r   c                  C   s|   t dd} tddd}t }td| fd|fd|fgdd	}d
dgddgg dg dgd}t||dd}|tjtj dS )zCheck GridSearch support.r   rf   r   )rS   rV   r   rW   rX   rI   r9   r   g      Y@rA   )      ?r   r   )r   r   r   )lr__Cr:   r<   r;   )	estimator
param_gridcvN)	r   r	   r   r   r   r'   irisdatatarget)ra   rb   rc   rF   r5   gridr,   r,   r-   test_gridsearch(  s   
r   c                  C   s   t dd} tdd}t }tddgddgddgd	d
gg}tg d}td| fd|fd|fgddd||}td| fd|fd|fgddd||}t|||| t	|
||
| dS )z:Check parallel backend of VotingClassifier on toy dataset.rQ   rf   r   r   r   r   r   r   r   r   r   r   rW   rX   rI   r   )r    r:   n_jobsr;   N)r   r	   r   rt   r   r   r'   r   rK   r   rC   )ra   rb   rc   r(   r)   eclf1eclf2r,   r,   r-   test_parallel_fit;  s"   

"r   c                  C   s  t dd} tdd}tddd}td| fd|fd|fgdd	jtttt	tfd
}td| fd|fd|fgdd	tt}t
|t|t t|t|t tjdjt	tfd}td| fgdd	}|tt| | tt| t
|t| t t|t| t t }td| fd|fd|fgdd	}d}tjt|d |tt| W d   n1 sw   Y  G dd dtt}	|	 }
tjtdd |
jtt|d
 W d   dS 1 sw   Y  dS )z1Tests sample_weight parameter of VotingClassifierrQ   rf   T)probabilityrS   r   rW   svcrI   r9   sample_weight)sizeknnzJUnderlying estimator KNeighborsClassifier does not support sample weights.r"   Nc                   @   s   e Zd Zdd ZdS )z.test_sample_weight.<locals>.ClassifierErrorFitc                 S   s   t d)Nz!Error unrelated to sample_weight.)r&   )selfr(   r)   r   r,   r,   r-   r'   p  s   z2test_sample_weight.<locals>.ClassifierErrorFit.fitN)__name__
__module____qualname__r'   r,   r,   r,   r-   ClassifierErrorFito  s    r   z Error unrelated to sample_weight)r   r	   r   r   r'   r(   r)   rt   oneslenr   rK   r   rC   randomRandomStateuniformr   r$   r%   r&   r   r   )ra   rb   rc   r   r   r   eclf3clf4rG   r   r   r,   r,   r-   test_sample_weightN  sD   

"r   c                  C   sJ   G dd dt t} |  }td|fgdd}|jtttttfd dS )z:Check that VotingClassifier passes sample_weight as kwargsc                   @   s   e Zd ZdZdd ZdS )z1test_sample_weight_kwargs.<locals>.MockClassifierzAMock Classifier to check that sample_weight is received as kwargsc                 _   s   d|v sJ d S )Nr   r,   )r   r(   r)   argsr   r,   r,   r-   r'   ~  s   z5test_sample_weight_kwargs.<locals>.MockClassifier.fitN)r   r   r   __doc__r'   r,   r,   r,   r-   MockClassifier{  s    r   mockrI   r9   r   N)	r   r   r   r'   r(   r)   rt   r   r   )r   r   rF   r,   r,   r-   test_sample_weight_kwargsx  s    r   c                  C   s   t ddd} tdd d}t }td| fd|fgddd	gd
tt}td| fd|fgddd	gd
}|j|dtt t|	t|	t t
|t|t |jd d  |  ks`J |jd d  | ksoJ d S )NrQ   r   )rS   C)rS   	max_depthr   rW   rI   r   r;   )r:   r<   nb)r   r   )r   r	   r   r   r'   r(   r)   
set_paramsr   rK   r   rC   r    
get_params)ra   rb   rc   r   r   r,   r,   r-   !test_voting_classifier_set_params  s    "r   c                  C   s  t dd} tddd}t }td| fd|fd|fgdg d	d
tt}td| fd|fd|fgdg dd
}|jddtt t|	t|	t t
|jd dksVJ t|jdks_J tdd |jD skJ | d dksuJ |jddtt |jddtt t|	t|	t t|t|t d}tjt|d |jddddtt W d    n1 sw   Y  tdgdgg}tddg}td|fd|fgdddgdd||}td|fd|fgdddgdd}|jdd|| t||tddgddggddgddggg t||tddgddggg |jdd |jdd t||tddgddgg t||tdgdgg d S )NrQ   rf   rT   rU   r   rW   r   rA   )r   r   r   rj   )r   r   r   drop)rW   r;   c                 s   s    | ]
}t |ttfV  qd S )N)
isinstancer   r   ).0estr,   r,   r-   	<genexpr>  s    
z*test_set_estimator_drop.<locals>.<genexpr>rI   )r:   z4All estimators are dropped. At least one is requiredr"   )r   rW   r   r   r   r   F)r    r:   r<   r!   r   r   r   r   )r   r	   r   r   r'   r(   r)   r   r   rK   dictr    r   estimators_allr   r   rC   r$   r%   r=   rt   r   rL   )ra   rb   rc   r   r   rG   X1y1r,   r,   r-   test_set_estimator_drop  sr   
$$""r   c                  C   s   t dd} tdd}td| fd|fgddgdd}td| fd|fgtd	dd}|tt |tt t|	t|	t d S )
NrQ   rf   r   rW   r   r;   rI   )r    r<   r:   )r   r;   )
r   r	   r   rt   r   r'   r(   r)   r   rC   )ra   rb   r   r   r,   r,   r-   test_estimator_weights_format  s   

r   c                  C   s4  t dd} tdd}t }tddgddgddgd	d
gg}tg d}td| fd|fd|fgdd||}td| fd|fd|fgddd||}td| fd|fd|fgddd||}t||j	d t||j	d t||j	d t
|||| t
||ddd|| dS )z:Check transform method of VotingClassifier on toy dataset.rQ   rf   r   r   r   r   r   r   r   r   r   r   rW   rX   rI   r9   Tr    r:   r!   F)r      )r   r   r;   r   r   N)r   r	   r   rt   r   r   r'   r   rL   shaper   swapaxesreshape)ra   rb   rc   r(   r)   r   r   r   r,   r,   r-   test_transform  s>   

"r   zX, y, voterrW      )rV   c                 C   sb   t |}|j| |t|jd |jdd |j| |t|jd || }|j|jks/J d S )Nr   r   )r   )r   r'   rt   r   r   r   rK   )r(   r)   r3   y_predr,   r,   r-    test_none_estimator_with_weights  s   
r   r   treerf   r    r   r   )idsc                 C   sJ   ddgddgddgg}g d}t | drJ | || | jdks#J d S )	Nr   r;   r   r   r   r   r   r   r;   n_features_in_)rE   r'   r   )r   r(   r)   r,   r,   r-   test_n_features_in0  s
   r   r   rQ   )r    r/   c                 C   s\   t ddgddgddgddgg}t g d	}d
}| || t|| d s,J d S )Nr   r   r   r   r   r   r   r   r   za\[Voting\].*\(1 of 2\) Processing lr, total=.*\n\[Voting\].*\(2 of 2\) Processing rf, total=.*\n$r   )rt   r   r'   rer#   
readouterr)r   capsysr(   r)   patternr,   r,   r-   test_voting_verboseL  s   "r   c                  C   sh   ddgddgddgg} g d}t dt fd	td
dfdgd}|| | | }ddg}t|| dS )z1Check get_feature_names_out output for regressor.r   r;   r   r   r   r   r   r   r   r   rf   )ignorer   r   votingregressor_lrvotingregressor_treeN)r   r   r   r'   get_feature_names_outr   )r(   r)   r:   	names_outexpected_namesr,   r,   r-   %test_get_features_names_out_regressorm  s   r   zkwargs, expected_namesrI   )r:   r!   )votingclassifier_lr0votingclassifier_lr1votingclassifier_lr2votingclassifier_tree0votingclassifier_tree1votingclassifier_tree2r:   rA   votingclassifier_lrvotingclassifier_treec                 C   s   ddgddgddgddgg}g d}t dd	d
tddfdtddfgi| }||| ||}| }|jd t|ksAJ t|| dS )zBCheck get_feature_names_out for classifier for different settings.r   r;   r   r   r   r   r   )r   r   r;   r   r    r   r   rf   r   Nr,   )	r   r   r   r'   rL   r   r   r   r   )kwargsr   r(   r)   r:   X_transr   r,   r,   r-   &test_get_features_names_out_classifier  s   
r  c                  C   s   ddgddgddgg} g d}t dtd	d
fdtd	d
fgddd}|| | d}tjt|d |  W d   dS 1 sAw   Y  dS )zJCheck that error is raised when voting="soft" and flatten_transform=False.r   r;   r   r   r   r   r   r   r   rf   r   rI   Fr   zYget_feature_names_out is not supported when `voting='soft'` and `flatten_transform=False`r"   N)r   r   r   r'   r$   r%   r=   r   )r(   r)   r:   rG   r,   r,   r-   ,test_get_features_names_out_classifier_error  s   
"r  )Sr   r$   r   numpyrt   sklearn.utils._testingr   r   r   sklearn.exceptionsr   sklearn.linear_modelr   r   sklearn.naive_bayesr   sklearn.ensembler	   r
   r   r   sklearn.treer   r   sklearn.model_selectionr   sklearnr   r   r   sklearn.datasetsr   sklearn.svmr   sklearn.multiclassr   sklearn.neighborsr   sklearn.baser   r   r   sklearn.dummyr   	load_irisr   r   r   r(   r)   load_diabetesrM   rs   r.   markparametrizer=   r&   r7   r>   rH   rO   re   rh   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r,   r,   r,   r-   <module>   s   



$1*A




