U
    ½mœdË[  ã                   @   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+ ddl,m-Z- e .¡ Z/e/j0dd…dd…f e/j1 Z2Z3e-ƒ  4e2¡Z5ej6dd�\Z7Z8ej9 :ddg idfdeƒ fgdd gd!œd"fg¡d#d$„ ƒZ;d%d&„ Z<d'd(„ Z=d)d*„ Z>d+d,„ Z?d-d.„ Z@d/d0„ ZAd1d2„ ZBd3d4„ ZCd5d6„ ZDd7d8„ ZEd9d:„ ZFd;d<„ ZGd=d>„ ZHd?d@„ ZIdAdB„ ZJdCdD„ ZKdEdF„ ZLej9 :dGe2e3edeƒ fdHedIdJ�fgƒfe7e8edeƒ fdHedIdJ�fgƒfg¡dKdL„ ƒZMej9j:dMedeƒ fdNeddO�fgdP�ededdO�fdNeddO�fgdP�gdQdRgdS�dTdU„ ƒZNej9 :dVedeƒ fdHedWdO�fgddX�ededWdO�fdHedWdO�fgddX�g¡dYdZ„ ƒZOd[d\„ ZPej9 :d]d^dd_œd`dadbdcdddegfdfdgidhdigfg¡djdk„ ƒZQdldm„ ZRdS )nz4Testing 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)ÚStandardScaleré   é   T)Z
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   s4   t f | Ž}tjt|d�� | tt¡ W 5 Q R X d S )N©Úmatch)r   ÚpytestÚraisesÚ
ValueErrorÚfitÚXÚy)ÚparamsÚerr_msgZensemble© r,   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/ensemble/tests/test_voting.pyÚ%test_voting_classifier_estimator_init&   s    
r.   c               	   C   sl   t dtƒ fdtƒ fgdd�} d}tjt|d�� | j W 5 Q R X t| dƒrNt‚|  t	t
¡ t| dƒrht‚d S )NÚlr1Úlr2Úhard©r   Úvotingú1predict_proba is not available when voting='hard'r"   Úpredict_proba)r   r   r$   r%   ÚAttributeErrorr5   ÚhasattrÚAssertionErrorr'   ÚX_scaledr)   )ÚeclfÚmsgr,   r,   r-   Útest_predictproba_hardvoting9   s    þr<   c               	   C   sü   t dtƒ fdtƒ fgdd�} tdtƒ fgƒ}d}tjt|d d�� |  t¡ W 5 Q R X tjt|d d�� |  	t¡ W 5 Q R X tjt|d d�� |  
t¡ W 5 Q R X tjt|d	 d�� | t¡ W 5 Q R X tjt|d	 d�� | 
t¡ W 5 Q R X d S )
Nr/   r0   Úsoftr2   Z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(   r5   Ú	transformÚX_r)r:   Úeregr;   r,   r,   r-   Útest_notfittedG   s"    þÿrB   c                 C   s`   t d| d�}td| d�}tƒ }td|fd|fd|fgdd	�}t|ttd
d�}| ¡ dks\t‚dS )z7Check classification by majority label on dataset iris.Ú	liblinear)ÚsolverÚrandom_stateé
   ©Ún_estimatorsrE   r   ÚrfÚgnbr1   r2   Úaccuracy©ZscoringçÍÌÌÌÌÌì?N)	r   r	   r   r   r   r(   r)   Úmeanr8   ©Úglobal_random_seedÚclf1Úclf2Úclf3r:   Zscoresr,   r,   r-   Útest_majority_label_iris]   s     ÿrT   c                  C   sŒ   t ddd�} tdd�}td| fd|fgdd�}|  tt¡ t¡d	 d
ksLt‚| tt¡ t¡d	 dksjt‚| tt¡ t¡d	 dksˆt‚dS )zECheck voting classifier selects smaller class label in tie situation.é{   rC   )rE   rD   ©rE   r   rI   r1   r2   éI   r    r   N)r   r	   r   r'   r(   r)   r>   r8   )rQ   rR   r:   r,   r,   r-   Útest_tie_situationj   s    
rX   c                 C   sf   t | d�}td| d�}tƒ }td|fd|fd|fgddd	dgd
�}t|ttdd�}| ¡ dksbt‚dS )z>Check classification by average probabilities on dataset iris.rV   rF   rG   r   rI   rJ   r=   r   r    ©r   r3   r!   rK   rL   rM   N)	r   r	   r   r   r   r9   r)   rN   r8   rO   r,   r,   r-   Útest_weights_irist   s    
ýrZ   c                  C   sR  t dd�} t dd�}t ddd�}td| fd|fd|fgddd	gd
�}tttdd�\}}}}|  ||¡ |¡}| ||¡ |¡}	| ||¡ |¡}
| ||¡ |¡}tjt 	||	|
g¡dddd	gd�}t
||dd� td| fd|fd|fgdd
�}td| fd|fd|fgdddgd
�}| ||¡ | ||¡ | |¡}| |¡}t
||dd� dS )zACheck weighted average regression prediction on diabetes dataset.rN   )ÚstrategyZmedianÚquantileçš™™™™™É?)r[   r\   r   r    rF   )r!   g      Ð?)Z	test_sizer   )Zaxisr!   ©ÚdecimalN)r   r   r   r@   Úy_rr'   r>   ÚnpZaverageZasarrayr   )Zreg1Zreg2Zreg3rA   Z	X_r_trainZX_r_testZ	y_r_trainZy_r_testZ	reg1_predZ	reg2_predZ	reg3_predZ	ereg_predÚavgZereg_weights_noneZereg_weights_equalZereg_none_predZereg_equal_predr,   r,   r-   Útest_weights_regressor‚   sF    

 ÿ  ÿ  ÿ ÿ ÿ

rc   c              	   C   sd  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 ddddddg¡}t| ||¡ |¡ddddddgƒ t| ||¡ |¡ddddddgƒ t| ||¡ |¡ddddddgƒ td|fd|fd|fgddddgd�}t| ||¡ |¡ddddddgƒ td|fd|fd|fgddddgd�}t| ||¡ |¡ddddddgƒ dS )z6Manually check predicted class labels for toy dataset.rV   rF   rG   çš™™™™™ñ¿ç      ø¿ç333333ó¿çffffffö¿ç333333Àçš™™™™™Àçš™™™™™ñ?ç333333ó?gÍÌÌÌÌÌ @gffffffö?gÍÌÌÌÌÌ@gffffff@r   r    r   rI   rJ   r1   rY   r=   N)	r   r	   r   ra   Úarrayr   r'   r>   r   )rP   rQ   rR   rS   r(   r)   r:   r,   r,   r-   Útest_predict_on_toy_problem¦   s,    
&ÿ$$$ý$ýrm   c               	   C   sB  t dd�} tdd�}tƒ }t ddgddgddgd	d
gg¡}t dddd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¡}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%dddg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)��6 td"| fd#|fd$|fgd*d+�}| ||¡ |¡ W 5 Q R X d,S )-z1Calculate predicted probabilities on toy dataset.rU   rV   rd   re   rf   rg   rh   ri   rj   rk   r   r    g…7sa"ã?gö�=ñ»Ù?g�½¤Rhpâ?gâ„¶Z/Û?glç^Ô¬;à?g(1BW¦ˆß?gµU(V6ÁÙ?g&ÕëÔdã?gš™™™™™é?r]   ç333333Ó?çffffffæ?gá5ùwÇóï?g9=”qX?gè_óï?g$ö/ÐAY?ç        ç      ð?r   é   r   r   rI   rJ   r=   rY   r^   r4   r"   r1   r2   N)r   r	   r   ra   rl   r   r'   r5   r   r$   r%   r6   )rQ   rR   rS   r(   r)   Zclf1_resZclf2_resZclf3_resZt00Zt11Zt21Zt31r:   Zeclf_resr,   r,   r-   Ú!test_predict_proba_on_toy_problemÅ   sN    

"üÿ	"ÿ,,,,ý ÿ ÿrs   c                  C   s`   t ddddd�\} }ttdd�ƒ}td|fgd	d
�}z| | |¡ W n tk
rZ   Y dS X dS )z7Check if error is raised for multilabel classification.r    r   FrU   )Z	n_classesZn_labelsZallow_unlabeledrE   Zlinear)ZkernelZovrr1   r2   N)r   r   r   r   r'   ÚNotImplementedError)r(   r)   Úclfr:   r,   r,   r-   Útest_multilabelö   s       ÿ
rv   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dddgd
ddggdœ}t||dd�}| tt¡ dS )zCheck GridSearch support.r   rV   r   )rE   rH   r   rI   rJ   r=   r2   rq   g      Y@r1   ç      à?)Zlr__Cr3   r!   r    )Ú	estimatorZ
param_gridZcvN)r   r	   r   r   r   r'   r9   r)   )rQ   rR   rS   r:   r*   Úgridr,   r,   r-   Útest_gridsearch  s    
 ÿýrz   c                 C   sÐ   t | d�}td| d�}tƒ }t ddgddgdd	gd
dgg¡}t ddddg¡}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.rV   rF   rG   rd   re   rf   rg   rh   ri   rj   rk   r   r    r   rI   rJ   r=   )r   r3   Zn_jobsN)r   r	   r   ra   rl   r   r'   r   r>   r   r5   )rP   rQ   rR   rS   r(   r)   Úeclf1Úeclf2r,   r,   r-   Útest_parallel_fit  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
�}| 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 5 Q R X G dd„ dttƒ}
|
ƒ }tjtdd�� |jtt|d� W 5 Q R X dS )z1Tests sample_weight parameter of VotingClassifierrV   rF   rG   T)ZprobabilityrE   r   rI   Zsvcr=   r2   ©Úsample_weight)ÚsizeZknnzJUnderlying estimator KNeighborsClassifier does not support sample weights.r"   c                   @   s   e Zd Zdd„ ZdS )z.test_sample_weight.<locals>.ClassifierErrorFitc                 S   s   t dƒ‚d S )Nz!Error unrelated to sample_weight.)Ú	TypeError)Úselfr9   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_weightN)r   r	   r   r   r'   r9   r)   ra   ÚonesÚlenr   r>   r   r5   ÚrandomZRandomStateÚuniformr   r$   r%   r�   r   r   )rP   rQ   rR   rS   r{   r|   r   Úeclf3Zclf4r;   r†   ru   r,   r,   r-   Útest_sample_weight+  sX    
 ÿ  þ ÿ þ ÿ ÿ ÿ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|kst ‚d S )Nr   )r8   )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�   Zmockr=   r2   r~   N)	r   r   r   r'   r(   r)   ra   r‡   rˆ   )r�   ru   r:   r,   r,   r-   Útest_sample_weight_kwargsX  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Àt‚|jd d  ¡ | ¡ ksÞt‚d S )NrV   rF   )rH   rE   Ú	max_depthr   rI   r=   r   r    )r3   r!   Únb)r’   r   )r   r	   r   r   r'   r9   r)   Ú
set_paramsr   r>   r   r5   r   Ú
get_paramsr8   )rP   rQ   rR   rS   r{   r|   r,   r,   r-   Ú!test_voting_classifier_set_paramsh  s8    
  ÿ  ÿ þ  ÿ ÿ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� tt¡}td| fd|fd|fgdd	d	dgd�}|jdd� tt¡ t| 	t¡| 	t¡ƒ t
|jƒd dks°t‚t|jƒdksÂt‚tdd„ |jD ƒƒsÚt‚| ¡ d dksît‚|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 5 Q R X 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 )NrU   rV   rF   rG   r   rI   r’   r1   r   r   rw   rY   Údrop)rI   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>r=   )r3   z4All estimators are dropped. At least one is requiredr"   )r   rI   r’   F)r   r3   r!   Úflatten_transformro   rn   rq   rp   )r   r	   r   r   r'   r(   r)   r“   r   r>   Údictr   r8   rˆ   Zestimators_Úallr”   r   r5   r$   r%   r&   ra   rl   r?   )rQ   rR   rS   r{   r|   r;   ZX1Úy1r,   r,   r-   Útest_set_estimator_drop€  st    
ý üýÿ"ü ûü$þ$"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 )NrV   rF   rG   r   rI   r   r    r=   )r   r!   r3   )r   r    )
r   r	   r   ra   rl   r'   r9   r)   r   r5   )rP   rQ   rR   r{   r|   r,   r,   r-   Útest_estimator_weights_formatÁ  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 ddddg¡}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.rV   rF   rG   rd   re   rf   rg   rh   ri   rj   rk   r   r    r   rI   rJ   r=   r2   T©r   r3   r›   F)rr   é   )r   rr   r    r   N)r   r	   r   ra   rl   r   r'   r   r?   Úshaper   ZswapaxesZreshape)	rP   rQ   rR   rS   r(   r)   r{   r|   r‹   r,   r,   r-   Útest_transformÒ  sH    
" ÿ þý üý ü ÿr¤   zX, y, voterrI   é   )rH   c                 C   sn   t |ƒ}tƒ  | ¡}|j||t |j¡d� |jdd� |j||t |j¡d� | |¡}|j|jksjt	‚d S )Nr~   r–   )r   )
r   r   Úfit_transformr'   ra   r‡   r£   r“   r>   r8   )r(   r)   Zvoterr9   Zy_predr,   r,   r-   Ú test_none_estimator_with_weightsñ  s    
r§   r™   ÚtreerV   ©r   r   r   )Zidsc                 C   sL   ddgddgddgg}dddg}t | dƒr.t‚|  ||¡ | jdksHt‚d S )	Nr   r    r   rr   r¥   r¢   r   Ún_features_in_)r7   r8   r'   rª   )r™   r(   r)   r,   r,   r-   Útest_n_features_in  s
    
r«   rx   rU   )r   Úverbosec                 C   s`   t  ddgddgddgddgg¡}t  d	d	d
d
g¡}d}|  ||¡ t || ¡ d ¡s\t‚d S )Nrd   re   rf   rg   rh   ri   rj   rk   r   r    za\[Voting\].*\(1 of 2\) Processing lr, total=.*\n\[Voting\].*\(2 of 2\) Processing rf, total=.*\n$r   )ra   rl   r'   Úrer#   Z
readouterrr8   )rx   Zcapsysr(   r)   Úpatternr,   r,   r-   Útest_voting_verbose4  s    "ÿr¯   c                  C   sj   ddgddgddgg} dddg}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   rr   r¥   r¢   r   r   r¨   rV   )Úignorer–   r©   Zvotingregressor_lrZvotingregressor_treeN)r   r   r   r'   Úget_feature_names_outr   )r(   r)   r3   Ú	names_outÚexpected_namesr,   r,   r-   Ú%test_get_features_names_out_regressorU  s    
ýÿr´   zkwargs, expected_namesr=   )r3   r›   Zvotingclassifier_lr0Zvotingclassifier_lr1Zvotingclassifier_lr2Zvotingclassifier_tree0Zvotingclassifier_tree1Zvotingclassifier_tree2r3   r1   Zvotingclassifier_lrZvotingclassifier_treec                 C   s”   ddgddgddgddgg}ddddg}t f d	d
tdd�fdtdd�fgi| —Ž}| ||¡ | |¡}| ¡ }|jd t|ƒks†t‚t	||ƒ dS )zBCheck get_feature_names_out for classifier for different settings.r   r    r   rr   r¥   r¢   rk   r   r   r   rV   r¨   N)
r   r   r   r'   r?   r±   r£   rˆ   r8   r   )Úkwargsr³   r(   r)   r3   ZX_transr²   r,   r,   r-   Ú&test_get_features_names_out_classifieri  s    þÿû
r¶   c               	   C   s|   ddgddgddgg} dddg}t dtdd	�fd
tdd	�fgddd�}| | |¡ d}tjt|d�� | ¡  W 5 Q R X dS )zJCheck that error is raised when voting="soft" and flatten_transform=False.r   r    r   rr   r¥   r¢   r   r   rV   r¨   r=   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)   r3   r;   r,   r,   r-   Ú,test_get_features_names_out_classifier_errorŽ  s    
þúÿr·   )SrŽ   r$   r­   Únumpyra   Zsklearn.utils._testingr   r   r   Zsklearn.exceptionsr   Zsklearn.linear_modelr   r   Zsklearn.naive_bayesr   Zsklearn.ensembler	   r
   r   r   Zsklearn.treer   r   Zsklearn.model_selectionr   Zsklearnr   r   r   Zsklearn.datasetsr   Zsklearn.svmr   Zsklearn.multiclassr   Zsklearn.neighborsr   Zsklearn.baser   r   r   Zsklearn.dummyr   Zsklearn.preprocessingr   Z	load_irisZirisÚdataÚtargetr(   r)   r¦   r9   Zload_diabetesr@   r`   ÚmarkZparametrizer.   r<   rB   rT   rX   rZ   rc   rm   rs   rv   rz   r}   rŒ   r�   r•   rŸ   r    r¤   r§   r«   r¯   r´   r¶   r·   r,   r,   r,   r-   Ú<module>   sþ   þþûþ

$1-Aþÿýþÿýõþ
þÿþÿùð

þûþûøþ
úþôþ
