B
    	\`x                 @   s  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
 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 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m Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl3m5Z5 d dl6m7Z7 e58 Z9ej:;d Z<e<=e9j>j?Z@e9jAe@ e9_Ae9j>e@ e9_>dZBdd ZCdd  ZDd!d" ZEe jFGd#d$d% ZHd&d' ZId(d) ZJd*d+ ZKe jFGd,e jFGd-d.d/ ZLd0d1 ZMe jFGd,e jFGd-d2d3 ZNd4d5 ZOd6d7 ZPd8d9 ZQe jFGd:e jFGd;d<d= ZRd>d? ZSd@dA ZTdBdC ZUe jFGd:e jFGd;dDdE ZVdFdG ZWdHdI ZXdJdK ZYdLdM ZZdNdO Z[dPdQ Z\dRdS Z]dTdU Z^e jFGd:e jFGd;dVdW Z_e jFGd#dXdY Z`e jFGd#dZd[ Zad\d] Zbd^d_ Zcd`da Zddbdc Zeddde Zfe jFGd:e jFGd;dfdg Zgdhdi Zhdjdk Zidldm Zje jFGd;dndo ZkdS )p    N)escape)assert_array_equal)assert_equal)assert_almost_equal)assert_false)assert_raises)assert_warns)assert_greater)assert_raise_message)assert_raises_regexp)OneVsRestClassifier)OneVsOneClassifier)OutputCodeClassifier)check_classification_targetstype_of_target)shuffle)precision_score)recall_score)	LinearSVCSVC)MultinomialNB)LinearRegressionLasso
ElasticNetRidge
PerceptronLogisticRegressionSGDClassifier)DecisionTreeClassifierDecisionTreeRegressor)GridSearchCVcross_val_score)Pipeline)svm)datasets)zip   c           	   C   s   t tdd} tt| jg  ttt t jtddgddggtddgddgg ttt t jtddgddggtddgdd	gg d S )
Nr   )random_state      r&   g      ?g333333@g@g?)	r   r   r   
ValueErrorpredictr   fitnparray)ovr r0   <lib/python3.7/site-packages/sklearn/tests/test_multiclass.pytest_ovr_exceptions/   s    r2   c              C   s,   t ddddg} t| }tt|t|  d S )Ng        g?g       @g      @)r-   r.   r   r
   r*   r   )ymsgr0   r0   r1   !test_check_classification_targets<   s    r5   c              C   s   t tdd} | tjtjtj}tt| j	t
 tdd}|tjtjtj}tttj|kttj|k t t } | tjtjtj}tttj|kd d S )Nr   )r'   g?)r   r   r,   irisdatatargetr+   r   lenestimators_	n_classesr-   meanr   r	   )r/   predclfpred2r0   r0   r1   test_ovr_fit_predictC   s    
"
r@   z,ignore:max_iter and tol parameters have beenc              C   s  t tjtjdd\} }tt }|| d d |d d t| || dd  |dd   |	| }tt }|
| |	| }t|| tt|jtt| tt||kd ttjdd} ddddddddddddddg}ttdd d	dd
}|| d d |d d t| || dd  |dd   |	| }ttdd d	dd
}|
| |	| }tt||kt||k tt }tt|d d S )Nr   )r'   d   g?   r)   r(   r&   F)max_itertolr   r'      partial_fit)r   r6   r7   r8   r   r   rF   r-   uniquer+   r,   r   r   r9   r:   r	   r<   absrandomrandnr   r   r   hasattr)Xr3   r/   r=   Zovr2r?   Zovr1pred1r0   r0   r1   test_ovr_partial_fitT   s.    
$


 $

rN   c              C   s   t t } ttjdd}ddddddddddddddg}| |d d |d d t| dg|dd  }tt	d	| j|dd  |d
 d S )NrB   r)   r(   r&   r   rE      zAMini-batch contains \[.+\] while classes must be subset of \[.+\])rL   r3   )
r   r   r-   rH   rI   rJ   rF   rG   r   r*   )r/   rL   r3   Zy1r0   r0   r1   test_ovr_partial_fit_exceptionsw   s    
 $rQ   c              C   s   t t } | tjtjtj}tt| j	t
 tt|dddg tt|tjkd tt } | tjtjtj}tt| j	t
t
d  d  tt|dddg tt|tjkd d S )Nr   r(   r)   g?)r   r   r,   r6   r7   r8   r+   r   r9   r:   r;   r   r-   rG   r	   r<   r   )r/   r=   r0   r0   r1   test_ovr_ovo_regressor   s    

rR   c           
   C   s<  x4t jt jt jt jt jgD ]} tdd}tjddddddd	d
\}}|d d |d d  }}|dd  }t	|
||}||}t	|
|| |}	|	|}
|jstt |
stt|
 | |	|}|dk}t||
  tjdd}t	|
|| |}	|	|d	kt}t||	|  qW d S )Nr(   )alpharA      rO   r&   2   Tr   )	n_samples
n_featuresr;   n_labelslengthallow_unlabeledr'   P   g      ?scale)gamma)sp
csr_matrixZ
csc_matrixZ
coo_matrixZ
dok_matrixZ
lil_matrixr   r$   make_multilabel_classificationr   r,   r+   multilabel_AssertionErrorissparser   Ztoarraypredict_probar#   r   decision_functionastypeint)sparsebase_clfrL   YX_trainY_trainX_testr>   Y_predZclf_sprsZY_pred_sprsY_probar=   Zdec_predr0   r0   r1   test_ovr_fit_predict_sparse   s4    




rp   z&ignore: Default solver will be changedz ignore: Default multi_class willc              C   sL  t d} d| d dd d f< t d}d|dd df< d|d d df< d|d d df< tt }tt|j| | || }t	t 
|t 
| || }tt |d d dd f d || }t	|d d df t | jd  t d}d|dd df< tt }tt|j| | || }t	|d d df t | jd  d S )	N)
   r)   r   rO   )rq   r&   r(   r)   rP   )r-   Zoneszerosr   r   r   UserWarningr,   r+   r   r.   re   r   rG   rd   shape)rL   r3   r/   y_predr0   r0   r1   test_ovr_always_present   s(    




 
"


rw   c           	   C   s,  t dddgdddgdddgdddgdddgg} dddddg}t dddgdddgdddgdddgdddgg}td	 }xt tdd
t t t fD ]}t	|
| |}tt|j| |t dddggd }tt|td t	|
| |}|dddggd }t|dddg qW d S )Nr   rO   r&      eggsspamZhamr(   zham eggs spam)r'      )r-   r.   setsplitr   r   r   r   r   r   r,   r   classes_r+   r   )rL   r3   rj   classesri   r>   rv   r0   r0   r1   test_ovr_multiclass   s$    2r   c           	      s   t dddgdddgdddgdddgdddgg dddddgt dddddggjtd d fd
d	} x(tddt t t fD ]}| | qW x*t	 t
dddt fD ]}| |dd qW d S )Nr   rO   r&   rx   ry   rz   r(   z	eggs spamFc                s   t |  }tt|j |tdddggd }tt|td t| drn|	 }t|j
d |rtdddgg}||}tdt|d  t|jtj|dd || t |  }|d	ddggd }t|d d S )
Nr   r{   ry   re   )rO   r)   r(   )axisr&   )r   r,   r   r|   r~   r+   r-   r.   rK   re   ru   rd   r9   argmax)ri   test_predict_probar>   rv   Zdecrm   Zprobabilities)rL   rj   r   r3   r0   r1   conduct_test  s     


z%test_ovr_binary.<locals>.conduct_test)r'   r\   T)r]   probability)r   )F)r-   r.   Tr|   r}   r   r   r   r   r   r   r   )r   ri   r0   )rL   rj   r   r3   r1   test_ovr_binary   s    2r   c           	   C   s   t dddgdddgdddgdddgdddgg} t dddgdddgdddgdddgdddgg}xlt tddt t t tdd	fD ]D}t|	| |}|
dddggd }t|dddg |jstqW d S )
Nr   r{   rO   r&   rx   r(   )r'   g      ?)rS   )r-   r.   r   r   r   r   r   r   r   r,   r+   r   ra   rb   )rL   r3   ri   r>   rv   r0   r0   r1   test_ovr_multilabel"  s    2r   c              C   sJ   t tjdd} | tjtj tt| j	d t
| tjtjd d S )Nr\   )r]   r&   g?)r   r#   r   r,   r6   r7   r8   r   r9   r:   r	   Zscore)r/   r0   r0   r1   test_ovr_fit_predict_svc4  s    r   c           
   C   s   t dd} xtdddD ]\}}}tjdddd	d
|dd\}}|d d |d d  }}|dd  |dd   }}	t| ||}
|
|}|
jstt	t
|	|dd|d	d t	t|	|dd|d	d qW d S )Nr(   )rS   )TF)gRQ?gQ?)gRQ?g?rA   rT   rO   r)   rU   r   )rV   rW   r;   rX   rY   rZ   r'   r[   micro)Zaverage)Zdecimal)r   r%   r$   r`   r   r,   r+   ra   rb   r   r   r   )ri   auZprecZrecallrL   rj   rk   rl   rm   ZY_testr>   rn   r0   r0   r1   test_ovr_multilabel_dataset;  s(    


r   z ignore: The default of the `iid`z"ignore: You should specify a valuec           
   C   sT  t dd} xBdD ]8}tjddddd|d	d
\}}|d d |d d  }}|dd  }t| ||}ttjdd||}tt|d ttj	ddd}tt|d ||| tt|d t|dst
ttj	dddddgid}	t|	}
tt|
d |
|| t|
ds&t
||}||}|dk}t|| qW d S )Nr(   )rS   )FTrA   rT   rO   r&   rU   r   )rV   rW   r;   rX   rY   rZ   r'   r[   r\   )r]   rd   F)r]   r   re   r   T)Z
param_gridg      ?)r   r$   r`   r   r,   r#   SVRr   rK   r   rb   r    r+   rd   r   )ri   r   rL   rj   rk   rl   rm   r>   decision_onlyZgsZproba_after_fitrn   ro   r=   r0   r0   r1   !test_ovr_multilabel_predict_probaS  s>    



r   c              C   s   t dd} tjtj }}|d d |d d  }}|dd  }t| ||}ttjdd||}tt	|d |
|}||}	t|	jddd td	d
 |	D }
t|
|   d S )Nr(   )rS   r[   r\   )r]   rd   )r   g      ?c             S   s   g | ]}|  qS r0   )r   ).0lr0   r0   r1   
<listcomp>  s    z7test_ovr_single_label_predict_proba.<locals>.<listcomp>)r   r6   r7   r8   r   r,   r#   r   r   rK   r+   rd   r   sumr-   r.   any)ri   rL   rj   rk   rl   rm   r>   r   rn   ro   r=   r0   r0   r1   #test_ovr_single_label_predict_proba  s    


r   c           	   C   s~   t jdddddddd\} }| d d	 |d d	  }}| d	d  }ttjd
d||}t||dkt	|
| d S )NrA   rT   rO   r&   rU   Tr   )rV   rW   r;   rX   rY   rZ   r'   r[   r\   )r]   )r$   r`   r   r#   r   r,   r   re   rf   rg   r+   )rL   rj   rk   rl   rm   r>   r0   r0   r1   %test_ovr_multilabel_decision_function  s    r   c              C   st   t jdddd\} }| d d |d d  }}| dd  }ttjdd||}t|| dk|	| d S )NrA   rT   r   )rV   rW   r'   r[   r\   )r]   )
r$   Zmake_classificationr   r#   r   r,   r   re   Zravelr+   )rL   rj   rk   rl   rm   r>   r0   r0   r1   'test_ovr_single_label_decision_function  s    r   c              C   sT   t tdd} dddg}t| d|i}|tjtj |jjd j	}||ksPt
d S )Nr   )r'   g?g      ?g?estimator__C)r   r   r    r,   r6   r7   r8   best_estimator_r:   Crb   )r/   Cscvbest_Cr0   r0   r1   test_ovr_gridsearch  s    
r   c              C   s`   t dt fg} t| }|tjtj tt }|tjtj t|tj|tj d S )NZtree)	r"   r   r   r,   r6   r7   r8   r   r+   )r>   Zovr_piper/   r0   r0   r1   test_ovr_pipeline  s    
r   c              C   s   xt dddtddgD ]} t| }xttjttjgD ]^}||tj |j	j
}t|d t t|d tjj
d  tt|jd j	t|j	 q8W qW d S )Nlinearr   )kernelr'   )r'   r(   )r   r   r   r6   r7   r^   r_   r,   r8   coef_ru   r   r;   rc   r:   )Zbase_classifierr/   rL   ru   r0   r0   r1   test_ovr_coef_  s    r   c                  sT   t tdd tt fddd  t t   tjtj tt	 fddd  d S )Nr   )r'   c                s    j S )N)r   )x)r/   r0   r1   <lambda>  s    z*test_ovr_coef_exceptions.<locals>.<lambda>c                s    j S )N)r   )r   )r/   r0   r1   r     s    )
r   r   r   r*   r   r,   r6   r7   r8   AttributeErrorr0   r0   )r/   r1   test_ovr_coef_exceptions  s
    
r   c              C   s    t tdd} tt| jg  d S )Nr   )r'   )r   r   r   r*   r+   )ovor0   r0   r1   test_ovo_exceptions  s    r   c              C   s\   t tdd} | tjtjtj}dd tjD }| |ttj|}t|| d S )Nr   )r'   c             S   s   g | ]}t |qS r0   )list)r   ar0   r0   r1   r     s    z(test_ovo_fit_on_list.<locals>.<listcomp>)	r   r   r,   r6   r7   r8   r+   r   r   )r   Zprediction_from_arrayZiris_data_listZprediction_from_listr0   r0   r1   test_ovo_fit_on_list  s    r   c              C   s   t tdd} | tjtjtj tt| j	t
t
d  d  t t } | tjtjtj tt| j	t
t
d  d  d S )Nr   )r'   r(   r)   )r   r   r,   r6   r7   r8   r+   r   r9   r:   r;   r   )r   r0   r0   r1   test_ovo_fit_predict  s    
r   c              C   s  t  } | j| j }}tt }||d d |d d t| ||dd  |dd   |	|}tt }|
|| |	|}tt|jttd  d  tt||kd t|| tt }||d d |d d t| ||dd  |dd   |	|}tt }|
||	|}t|| tt|jtt| tt||kd tt }tjdd}dddddddd	d	d	d	d	ddg}||d d
 |d d
 ddddd	g ||d
d  |d
d   |	|}tt }|
||	|}t|| tt }ddddd	ddg}	tdt|	t|}
tt|
|j|d d
 |	t| tt }tt|d d S )NrA   r(   r)   g?<   rB   r&   r   r{   rE   rO   z6Mini-batch contains {0} while it must be subset of {1}rF   )r$   	load_irisr7   r8   r   r   rF   r-   rG   r+   r,   r   r9   r:   r;   r	   r<   r   rI   Zrandr   formatr   r*   r   r   rK   )ZtemprL   r3   Zovo1rM   Zovo2r?   r   r=   Zerror_yZ
message_rer/   r0   r0   r1   test_ovo_partial_fit_predict  sN    
$




$



 (




r   c        	      C   s  t jjd } ttdd}|t jt jdk |t j}t|j| f |t jt j |t j}t|j| t	f t
|jdd|t j t| t	f}d}xrtt	D ]f}x`t|d t	D ]N}|j| t j}||dk|f  d7  < ||dk|f  d7  < |d7 }qW qW t
|t| x\tt	D ]P}t|d d |f tdddgs\tttt|d d |f d q.W d S )	Nr   )r'   r(   )r   g        g      ?g       @   )r6   r7   ru   r   r   r,   r8   re   r   r;   r   r   r+   r-   rs   ranger:   roundr|   issubsetrb   r	   r9   rG   )	rV   Zovo_clfZ	decisionsvoteskijr=   Z	class_idxr0   r0   r1   test_ovo_decision_function4  s*    *r   c              C   sT   t tdd} dddg}t| d|i}|tjtj |jjd j	}||ksPt
d S )Nr   )r'   g?g      ?g?r   )r   r   r    r,   r6   r7   r8   r   r:   r   rb   )r   r   r   r   r0   r0   r1   test_ovo_gridsearchc  s    
r   c              C   s   t ddgddgddgddgg} t ddddg}ttddd d}|| || }|| }t |}|| }t|dd d f d tt j	|dd  dd	|dd   t
|d |d 	  d S )
Nr(   r)   rr   rP   r   Fr{   )r   rC   rD   )r   )r-   r.   r   r   r,   r+   re   r   r   r   r   )rL   r3   	multi_clfovo_predictionZovo_decisionr   Znormalized_confidencesr0   r0   r1   test_ovo_tieso  s    "


$r   c              C   s   t ddgddgddgddgg} t ddddg}xRtdD ]F}|| d }ttddd d	}|| || }t|d |d  q>W d S )
Nr(   r)   rr   rP   r   r&   Fr{   )r   rC   rD   )r-   r.   r   r   r   r,   r+   r   )rL   Zy_refr   r3   r   r   r0   r0   r1   test_ovo_ties2  s    "
r   c              C   sF   t d} t ddddg}tt }|| | t|||  d S )Nr{   r   bcd)r-   eyer.   r   r   r,   r   r+   )rL   r3   r   r0   r0   r1   test_ovo_string_y  s
    

r   c              C   s:   t d} t dgd }tt }ttd|j| | d S )Nr{   r   zwhen only one class)r-   r   r.   r   r   r
   r*   r,   )rL   r3   r   r0   r0   r1   test_ovo_one_class  s    

r   c              C   s8   t j} t jd d df }tt }ttd|j| | d S )Nr   zUnknown label type)r6   r7   r   r   r
   r*   r,   )rL   r3   r   r0   r0   r1   test_ovo_float_y  s    
r   c              C   s    t tdd} tt| jg  d S )Nr   )r'   )r   r   r   r*   r+   )ecocr0   r0   r1   test_ecoc_exceptions  s    r   c              C   s   t tddddd} | tjtjtj tt| j	t
d  t t ddd} | tjtjtj tt| j	t
d  d S )Nr   )r'   r)   )	code_sizer'   )r   r   r,   r6   r7   r8   r+   r   r9   r:   r;   r   )r   r0   r0   r1   test_ecoc_fit_predict  s    

r   c              C   sX   t tdddd} dddg}t| d|i}|tjtj |jjd j	}||ksTt
d S )Nr   )r'   g?g      ?g?r   )r   r   r    r,   r6   r7   r8   r   r:   r   rb   )r   r   r   r   r0   r0   r1   test_ecoc_gridsearch  s    

r   c              C   sX   t j} t jd d df }tt }ttd|j| | tt dd}ttd|j| | d S )Nr   zUnknown label typerP   )r   z*code_size should be greater than 0, got -1)r6   r7   r   r   r
   r*   r,   )rL   r3   r   r0   r0   r1   test_ecoc_float_y  s    
r   c              C   s   t jdd} tjtj }}t| }t||j}|	|| t
|j}|j}x.|D ]&}t|jd | |d  |jd  qRW d S )Nprecomputed)r   r   r(   )r#   r   r6   r7   r8   r   r-   dotr   r,   r9   r:   Zpairwise_indices_r   ru   )clf_precomputedrL   r3   	ovr_falselinear_kernelZn_estimatorsZprecomputed_indicesidxr0   r0   r1   test_pairwise_indices  s    

r   c              C   sN   t jdd} t  }x4ttgD ](}||}t|j || }|jstqW d S )Nr   )r   )r#   r   r   r   r   Z	_pairwiserb   )r   clf_notprecomputedMultiClassClassifierr   ovr_truer0   r0   r1   test_pairwise_attribute  s    
r   c        
      C   s|   t jdd} t jdd}tjtj }}xPttgD ]D}||}|| }t||j	}t
|||}t
|||}	t||	 q0W d S )Nr   )r   r   )r#   r   r6   r7   r8   r   r   r-   r   r   r!   r   )
r   r   rL   r3   r   r   r   r   Zscore_precomputedZscore_linearr0   r0   r1   test_pairwise_cross_val_score  s    r   )lZpytestZnumpyr-   Zscipy.sparserh   r^   rer   Zsklearn.utils.testingr   r   r   r   r   r   r	   r
   r   Zsklearn.multiclassr   r   r   Zsklearn.utils.multiclassr   r   Zsklearn.utilsr   Zsklearn.metricsr   r   Zsklearn.svmr   r   Zsklearn.naive_bayesr   Zsklearn.linear_modelr   r   r   r   r   r   r   Zsklearn.treer   r   Zsklearn.model_selectionr    r!   Zsklearn.pipeliner"   Zsklearnr#   r$   Zsklearn.externals.six.movesr%   r   r6   rI   ZRandomStaterngZpermutationr8   sizeZpermr7   r;   r2   r5   r@   ZmarkfilterwarningsrN   rQ   rR   rp   rw   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   r   r   r   r   r   r   r0   r0   r0   r1   <module>   s   $#)
 
'
-

3/

		
