o
    \ikk                     @   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	m
Z
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 dd	l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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/ ddl0m1Z1m2Z2m3Z3 e4 Z5e5j6ddddf e5j7Z8Z9e% :e8Z;ej<dd\Z=Z>ej?@ddg idfde gidfdde fgidfde fgddgddfgdd  ZAd!d" ZBd#d$ ZCd%d& ZDd'd( ZEd)d* ZFd+d, ZGd-d. ZHd/d0 ZId1d2 ZJd3d4 ZKd5d6 ZLd7d8 ZMd9d: ZNd;d< ZOd=d> ZPd?d@ ZQdAdB ZRej?@dCe8e9ede fdDedEdFfgfe=e>ede fdDedEdFfgfgdGdH ZSej?j@dIede fdJe/ddKfgdLededdKfdJe.ddKfgdLgdMdNgdOdPdQ ZTej?@dRede fdDedSdKfgddTededSdKfdDedSdKfgddTgdUdV ZUdWdX ZVej?@dYdZdd[g d\fd]d^id_d`gfgdadb ZWdcdd ZXej?@deee)fee*fgdfdg ZYej?@deee)fee*fgeddhdidj ZZej?@deee)fee*fgej?@dkdldmgeddhdndo Z[ej?@deee)fee*fgeddhdpdq Z\dS )rz4Testing for the VotingClassifier and VotingRegressor    N)config_contextdatasets)BaseEstimatorClassifierMixinclone)make_multilabel_classification)DummyRegressor)RandomForestClassifierRandomForestRegressorVotingClassifierVotingRegressor)NotFittedError)LinearRegressionLogisticRegression)GridSearchCVcross_val_scoretrain_test_split)OneVsRestClassifier)
GaussianNB)KNeighborsClassifier)StandardScaler)SVC)ConsumingClassifierConsumingRegressor	_Registrycheck_recorded_metadata)DecisionTreeClassifierDecisionTreeRegressor)assert_almost_equalassert_array_almost_equalassert_array_equal      T)
return_X_yzparams, err_msg
estimatorszGInvalid 'estimators' attribute, 'estimators' should be a non-empty list   lr   )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 )Nmatch )r   pytestraises
ValueErrorfitXy)paramserr_msgensembler+   r+   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/ensemble/tests/test_voting.py%test_voting_classifier_estimator_init0   s   "r6   c                  C   s   t dt fdt fgdd} d}d}tjt|d}| j W d    n1 s'w   Y  t|jjts5J |t	|jjv s?J t
| drFJ | tt t
| drSJ d S )	Nlr1lr2hardr$   voting1predict_proba is not available when voting='hard'3'VotingClassifier' has no attribute 'predict_proba'r)   predict_proba)r   r   r,   r-   AttributeErrorr>   
isinstancevalue	__cause__strhasattrr/   X_scaledr1   )eclf	inner_msg	outer_msg	exec_infor+   r+   r5   test_predictproba_hardvotingK   s   rJ   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 )
Nr7   r8   softr:   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   predictr0   r>   	transformX_r)rF   eregmsgr+   r+   r5   test_notfitted]   s,   "rR   c                 C   s^   t | d}td| d}t }td|fd|fd|fgdd}t|ttd	d
}| dks-J dS )z7Check classification by majority label on dataset iris.random_state
   n_estimatorsrT   r&   rfgnbr9   r:   accuracyscoring?N)r   r	   r   r   r   r0   r1   meanglobal_random_seedclf1clf2clf3rF   scoresr+   r+   r5   test_majority_label_iriss   s   
re   c                  C   s   t 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s4J |tttd d	ksCJ d
S )zECheck voting classifier selects smaller class label in tie situation.{   rS   r&   rX   r9   r:   4   r'   r!   N)r   r	   r   r/   r0   r1   rM   )ra   rb   rF   r+   r+   r5   test_tie_situation   s   

"rh   c                 C   sd   t | d}td| d}t }td|fd|fd|fgdg dd	}t|ttd
d}| dks0J dS )z>Check classification by average probabilities on dataset iris.rS   rU   rV   r&   rX   rY   rK   r!   r'   rU   r$   r;   r(   rZ   r[   r]   N)r   r	   r   r   r   rE   r1   r^   r_   r+   r+   r5   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'   decimalNr!   r!   r!   )r   r   r   rO   y_rr/   rM   npaverageasarrayr   )reg1reg2reg3rP   	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+   r5   test_weights_regressor   s8   



r   c              	   C   s0  t | 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.rS   rU   rV   皙      333333ffffff333333皙皙?333333?g @gffffff?g@gffffff@)r!   r!   r!   r'   r'   r'   r&   rX   rY   r9   rt   rj   rK   N)	r   r	   r   rv   arrayr    r/   rM   r   )r`   ra   rb   rc   r0   r1   rF   r+   r+   r5   test_predict_on_toy_problem   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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) d*}d+}t	j
t|d, }td#| fd$|fd%|fgd-d.}|||| W d/   n	1 s&w   Y  t|jjts5J |t|jjv s@J d/S )0z1Calculate predicted probabilities on toy dataset.rf   rS   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&   rX   rY   rK   )r'   r!   r!   rj   rr   r<   r=   r)   r9   r:   N)r   r	   r   rv   r   r   r/   r>   r   r,   r-   r?   r@   rA   rB   rC   )ra   rb   rc   r0   r1   clf1_resclf2_resclf3_rest00t11t21t31rF   eclf_resrG   rH   rI   r+   r+   r5   !test_predict_proba_on_toy_problem   sP   

""	,,,,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!   Frf   )	n_classesn_labelsallow_unlabeledrT   linear)kernelovrr9   r:   N)r   r   r   r   r/   NotImplementedError)r0   r1   clfrF   r+   r+   r5   test_multilabel  s   
r   c                  C   sx   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t dS )zCheck GridSearch support.r!   rS   r"   )rT   rW   r&   rX   rY   rK   r:   r   g      Y@r9   )      ?r   r   )r   r   r   )lr__Cr;   r(   r'   )	estimator
param_gridcvN)r   r	   r   r   r   r/   rE   r1   )ra   rb   rc   rF   r2   gridr+   r+   r5   test_gridsearch  s   
r   c                 C   s   t | 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.rS   rU   rV   r   r   r   r   r   r   r   r   r   r&   rX   rY   rK   r!   )r$   r;   n_jobsr'   N)r   r	   r   rv   r   r   r/   r    rM   r   r>   )r`   ra   rb   rc   r0   r1   eclf1eclf2r+   r+   r5   test_parallel_fit1  s"   
"r   c                 C   s  t | d}td| d}t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| jt	tfd}td|fgd	d
}|jtt|d |tt| t
|t|t t|t|t t }td|fd|fd|fgd	d
}d}	tjt|	d |jtt|d 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 VotingClassifierrS   rU   rV   T)probabilityrT   r&   rX   svcrK   r:   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.)	TypeError)selfrE   r1   r   r+   r+   r5   r/   i  s   z2test_sample_weight.<locals>.ClassifierErrorFit.fitN)__name__
__module____qualname__r/   r+   r+   r+   r5   ClassifierErrorFith  s    r   z Error unrelated to sample_weight)r   r	   r   r   r/   rE   r1   rv   oneslenr    rM   r   r>   randomRandomStateuniformr   r,   r-   r   r   r   )r`   ra   rb   rc   r   r   r   eclf3clf4rQ   r   r   r+   r+   r5   test_sample_weightD  sL   
"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   r0   r1   argsr   r+   r+   r5   r/   w  s   z5test_sample_weight_kwargs.<locals>.MockClassifier.fitN)r   r   r   __doc__r/   r+   r+   r+   r5   MockClassifiert  s    r   mockrK   r:   r   N)	r   r   r   r/   r0   r1   rv   r   r   )r   r   rF   r+   r+   r5   test_sample_weight_kwargsq  s    r   c                 C   s   t | 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 )NrS   rU   )rW   rT   	max_depthr&   rX   rK   r!   r'   )r;   r(   nb)r   r   )r   r	   r   r   r/   rE   r1   
set_paramsr    rM   r   r>   r$   
get_params)r`   ra   rb   rc   r   r   r+   r+   r5   !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 )Nrf   rS   rU   rV   r&   rX   r   r9   )r!   r   r   rj   )r!   r!   r   drop)rX   r'   c                 s   s    | ]
}t |ttfV  qd S )N)r@   r   r   ).0estr+   r+   r5   	<genexpr>  s    
z*test_set_estimator_drop.<locals>.<genexpr>rK   )r;   z4All estimators are dropped. At least one is requiredr)   )r&   rX   r   r!   r   r   F)r$   r;   r(   flatten_transformr   r   r   r   )r   r	   r   r   r/   r0   r1   r   r    rM   dictr$   r   estimators_allr   r   r>   r,   r-   r.   rv   r   rN   )ra   rb   rc   r   r   rQ   X1y1r+   r+   r5   test_set_estimator_drop  sr   
$$""r   c                 C   s   t | 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 )NrS   rU   rV   r&   rX   r!   r'   rK   )r$   r(   r;   )r!   r'   )
r   r	   r   rv   r   r/   rE   r1   r   r>   )r`   ra   rb   r   r   r+   r+   r5   test_estimator_weights_format  s   
r   c           	      C   s6  t | 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.rS   rU   rV   r   r   r   r   r   r   r   r   r   r&   rX   rY   rK   r:   Tr$   r;   r   F)r      )r"   r   r'   r   r!   N)r   r	   r   rv   r   r   r/   r    rN   shaper   swapaxesreshape)	r`   ra   rb   rc   r0   r1   r   r   r   r+   r+   r5   test_transform  s>   
"r   zX, y, voterrX      )rW   c                 C   sn   t |}t | }|j||t|jd |jdd |j||t|jd ||}|j|jks5J d S )Nr   r   )r&   )	r   r   fit_transformr/   rv   r   r   r   rM   )r0   r1   voterrE   y_predr+   r+   r5    test_none_estimator_with_weights
  s   
r   r   treerS   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_)rD   r/   r   )r   r0   r1   r+   r+   r5   test_n_features_in1  s
   r   r   rf   )r$   verbosec                 C   s`   t ddgddgddgddgg}t g d	}d
}t| || 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   )rv   r   r   r/   rer*   
readouterr)r   capsysr0   r1   patternr+   r+   r5   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   rS   )ignorer   r   votingregressor_lrvotingregressor_treeN)r   r   r   r/   get_feature_names_outr    )r0   r1   r;   	names_outexpected_namesr+   r+   r5   %test_get_features_names_out_regressork  s   r   zkwargs, expected_namesrK   )r;   r   )votingclassifier_lr0votingclassifier_lr1votingclassifier_lr2votingclassifier_tree0votingclassifier_tree1votingclassifier_tree2r;   r9   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   rS   r   Nr+   )	r   r   r   r/   rN   r   r   r   r    )kwargsr   r0   r1   r;   X_transr   r+   r+   r5   &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   rS   r   rK   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   )r0   r1   r;   rQ   r+   r+   r5   ,test_get_features_names_out_classifier_error  s   
"r
  zEstimator, Childc                 C   sx   t ddgddgddgg}g d}tjtdd | d	| gj||g d
dd W d   dS 1 s5w   Y  dS )zTest that the right error message is raised when metadata is passed while
    not supported when `enable_metadata_routing=False`.r   r!   r'   r   r   r!   r'   r"   z1is only supported if enable_metadata_routing=Truer)   r   rt   ar   metadataN)rv   r   r,   r-   r.   r/   )	EstimatorChildr0   r1   r+   r+   r5   *test_routing_passed_metadata_not_supported  s   ""r  )enable_metadata_routingc                 C   s   | d| fg}|   d S )Nsub_est)get_metadata_routing)r  r  r   r+   r+   r5   %test_get_metadata_routing_without_fit  s   r  propr   r  c                 C   s   t ddgddgddgg}g d}g dd}}| d	|t d
jdi |difd|t d
jdi |difg}|j||fi ||dkrH|n|i |jD ]*}|dkr[||i}	n||i}	|d j}
t|
sjJ |
D ]}td|ddd|	 qlqPdS )z3Test that metadata is routed correctly for Voting*.r   r!   r'   r   r   r  rt   r  sub_est1)registryTsub_est2r   r/   )objmethodparentNr+   )	rv   r   r   set_fit_requestr/   r$   r  r   r   )r  r  r  r0   r1   r   r  r   r   r  r  r  r+   r+   r5   +test_metadata_routing_for_voting_estimators  s.   $


r  c                 C   s   t ddgddgddgg}g d}g dd}}| d	| fg}d
|j d}tjtt|d |j||||d W d   dS 1 sGw   Y  dS )zCTest that the right error is raised when metadata is not requested.r   r!   r'   r   r   r  rt   r  r  zb[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for z.fitr)   r  N)	rv   r   r   r,   r-   r.   r   escaper/   )r  r  r0   r1   r   r  r   error_messager+   r+   r5   1test_metadata_routing_error_for_voting_estimators  s   "r!  )]r   r   numpyrv   r,   sklearnr   r   sklearn.baser   r   r   sklearn.datasetsr   sklearn.dummyr   sklearn.ensembler	   r
   r   r   sklearn.exceptionsr   sklearn.linear_modelr   r   sklearn.model_selectionr   r   r   sklearn.multiclassr   sklearn.naive_bayesr   sklearn.neighborsr   sklearn.preprocessingr   sklearn.svmr   %sklearn.tests.metadata_routing_commonr   r   r   r   sklearn.treer   r   sklearn.utils._testingr   r   r    	load_irisirisdatatargetr0   r1   r   rE   load_diabetesrO   ru   markparametrizer6   rJ   rR   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!  r+   r+   r+   r5   <module>   s&   


$4-A

	


!