U
    ½mœd/~  ã                   @   sb  d dl Zd dlm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mZ d dlmZ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- d dl.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl6m:Z: d dl;m<Z< dZ=ej> ?de=› d�¡Z@e: A¡ ZBejC Dd ¡ZEeE FeBjGjH¡ZIeBjJeI eB_JeBjGeI eB_GdZKdd„ ZLd d!„ ZMd"d#„ ZNd$d%„ ZOd&d'„ ZPd(d)„ ZQd*d+„ ZRd,d-„ ZSd.d/„ ZTd0d1„ ZUd2d3„ ZVd4d5„ ZWd6d7„ ZXd8d9„ ZYd:d;„ ZZd<d=„ Z[d>d?„ Z\d@dA„ Z]dBdC„ Z^dDdE„ Z_dFdG„ Z`dHdI„ ZadJdK„ ZbdLdM„ ZcdNdO„ ZddPdQ„ ZedRdS„ ZfdTdU„ ZgdVdW„ ZhdXdY„ ZidZd[„ Zjd\d]„ Zkd^d_„ Zld`da„ Zmdbdc„ Znddde„ Zodfdg„ Zpej> qdheeg¡didj„ ƒZrej> qdheeg¡dkdl„ ƒZsej> qdheeg¡dmdn„ ƒZtej> qdoejuejvg¡dpdq„ ƒZwdrds„ ZxdS )té    N)Úassert_allclose)Úescape)Úassert_array_equal)Úassert_almost_equal)ÚCheckingClassifier)ÚOneVsRestClassifier)ÚOneVsOneClassifier)ÚOutputCodeClassifier)Úcheck_classification_targetsÚtype_of_target)Úcheck_arrayÚshuffle)Úprecision_score)Úrecall_score)Ú	LinearSVCÚSVC)ÚMultinomialNB)ÚLinearRegressionÚLassoÚ
ElasticNetÚRidgeÚ
PerceptronÚLogisticRegressionÚSGDClassifier)ÚDecisionTreeClassifierÚDecisionTreeRegressor)ÚKNeighborsClassifier)ÚGridSearchCVÚcross_val_score)ÚPipelineÚmake_pipeline)ÚSimpleImputer)Úsvm)ÚNotFittedError)Údatasets)Úload_breast_cancerz/The default value for `force_alpha` will changezignore:z:FutureWarningé   c               	   C   sæ   t tdd�ƒ} t t¡� |  g ¡ W 5 Q R X d}tjt|d��D t ddgddgg¡}t ddgddgg¡}t t	ƒ ƒ 
||¡ W 5 Q R X tjt|d��D t ddgddgg¡}t dd	gd
dgg¡}t t	ƒ ƒ 
||¡ W 5 Q R X d S )Nr   ©Úrandom_statez@Multioutput target data is not supported with label binarization©Úmatché   é   r&   g      ø?g333333@gÍÌÌÌÌÌ@çš™™™™™é?)r   r   ÚpytestÚraisesr#   ÚpredictÚ
ValueErrorÚnpÚarrayr   Úfit)ÚovrÚmsgÚXÚy© r9   úV/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/tests/test_multiclass.pyÚtest_ovr_exceptions7   s    r;   c               	   C   s@   t  ddddg¡} t| ƒ}tjt|d�� t| ƒ W 5 Q R X d S )Nç        gš™™™™™ñ?ç       @g      @r)   )r2   r3   r   r.   r/   r1   r
   )r8   r6   r9   r9   r:   Ú!test_check_classification_targetsK   s    r>   c                  C   s¼   t tdd�ƒ} |  tjtj¡ tj¡}t| jƒt	ks8t
‚tdd�}| tjtj¡ tj¡}t tj|k¡t tj|k¡ks~t
‚t tƒ ƒ} |  tjtj¡ tj¡}t tj|k¡dks¸t
‚d S )Nr   r'   çÍÌÌÌÌÌä?)r   r   r4   ÚirisÚdataÚtargetr0   ÚlenÚestimators_Ú	n_classesÚAssertionErrorr2   Úmeanr   )r5   ÚpredÚclfÚpred2r9   r9   r:   Útest_ovr_fit_predictS   s    
$
rK   c                  C   sº  t tjtjdd�\} }ttƒ ƒ}| | d d… |d d… t |¡¡ | | dd … |dd … ¡ | 	| ¡}ttƒ ƒ}| 
| |¡ 	| ¡}t||ƒ t|jƒtt |¡ƒks¬t‚t ||k¡dksÂt‚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 ||k¡t ||k¡k�sœt‚ttƒ ƒ}t|dƒ�r¶t‚d S )Nr   r'   éd   r?   é   r,   r+   r&   F)Úmax_iterÚtolr   r(   é   Úpartial_fit)r   r@   rA   rB   r   r   rQ   r2   Úuniquer0   r4   r   rC   rD   rF   rG   ÚabsÚrandomÚrandnr   r   Úhasattr)r7   r8   r5   rH   Zovr2rJ   Zovr1Úpred1r9   r9   r:   Útest_ovr_partial_fitc   s2    
$


 ÿ$
ÿ"
rX   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…  }d	}tj	t
|d
�� | j|dd … |d� W 5 Q R X d S )NrM   r,   r+   r&   r   rP   é   éÿÿÿÿzAMini-batch contains \[.+\] while classes must be subset of \[.+\]r)   )r7   r8   )r   r   r2   rS   rT   rU   rQ   rR   r.   r/   r1   )r5   r7   r8   Úy1r6   r9   r9   r:   Útest_ovr_partial_fit_exceptions‡   s    
 $r\   c                  C   sÔ   t tƒ ƒ} |  tjtj¡ tj¡}t| jƒt	ks4t
‚tt |¡dddgƒ t |tjk¡dksbt
‚ttƒ ƒ} |  tjtj¡ tj¡}t| jƒt	t	d  d ks¢t
‚tt |¡dddgƒ t |tjk¡dksÐt
‚d S )Nr   r+   r,   çÍÌÌÌÌÌì?)r   r   r4   r@   rA   rB   r0   rC   rD   rE   rF   r   r2   rR   rG   r   )r5   rH   r9   r9   r:   Útest_ovr_ovo_regressor”   s    

r^   c               
   C   s2  t jt jt jt jt jfD �]} tdd�}tjddddddd	d
�\}}|d d… |d d…  }}|dd … }t	|ƒ 
||¡}| |¡}t	|ƒ 
|| |ƒ¡}	|	 |¡}
|js¬t‚t  |
¡sºt‚t|
 ¡ |ƒ |	 |¡}|dk}t||
 ¡ ƒ t ¡ }t	|ƒ 
|| |ƒ¡}	|	 |¡d	k t¡}t||	 |¡ ¡ ƒ qd S )Nr+   ©ÚalpharL   é   rY   r&   é2   Tr   ©Ú	n_samplesÚ
n_featuresrE   Zn_labelsÚlengthZallow_unlabeledr(   éP   ç      à?)ÚspZ
csr_matrixÚ
csc_matrixZ
coo_matrixZ
dok_matrixZ
lil_matrixr   r$   Úmake_multilabel_classificationr   r4   r0   Úmultilabel_rF   Úissparser   ZtoarrayÚpredict_probar"   r   Údecision_functionÚastypeÚint)ÚsparseÚbase_clfr7   ÚYÚX_trainÚY_trainÚX_testrI   ÚY_predZclf_sprsZY_pred_sprsÚY_probarH   Zdec_predr9   r9   r:   Útest_ovr_fit_predict_sparse¦   s@    û

ù





rz   c               	   C   s‚  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ƒ ƒ}d}tjt|d�� | | |¡ W 5 Q R X | 	| ¡}t
t  |¡t  |¡ƒ | | ¡}t  |d d …d	d …f ¡dksØt‚| | ¡}t
|d d …d
f t  | jd ¡ƒ t  d¡}d|dd …df< ttƒ ƒ}d}tjt|d�� | | |¡ W 5 Q R X | | ¡}t
|d d …d
f t  | jd ¡ƒ d S )N©é
   r,   r   rY   )r|   r&   r+   r,   z,Label .+ is present in all training examplesr)   éþÿÿÿrZ   z/Label not 1 is present in all training examples)r2   ÚonesÚzerosr   r   r.   ZwarnsÚUserWarningr4   r0   r   r3   ro   rR   rF   rn   Úshape)r7   r8   r5   r6   Úy_predr9   r9   r:   Útest_ovr_always_presentÖ   s0    




"
"


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¡} 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	 ¡ ƒ}tƒ tdd
�tƒ tƒ tƒ fD ]„}t	|ƒ 
| |¡}t|jƒ|ksÀt‚| t  dddgg¡¡d }t|dgƒ t	|ƒ 
| |¡}| dddgg¡d }t|dddgƒ qšd S )Nr   rY   r&   é   ÚeggsÚspamZhamr+   zham eggs spamr'   é   )r2   r3   ÚsetÚsplitr   r   r   r   r   r   r4   Úclasses_rF   r0   r   )r7   r8   rt   Úclassesrs   rI   r‚   r9   r9   r:   Útest_ovr_multiclassú   s"    2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„	} tdd�tƒ tƒ tƒ fD ]}| |ƒ q�t	ƒ t
dd�tƒ fD ]}| |dd� q²d S )Nr   rY   r&   r„   r…   r†   r+   z	eggs spamFc                    sø   t | ƒ ˆ ˆ¡}t|jƒˆks"t‚| t dddgg¡¡d }t|dgƒ t	| dƒrl| 
ˆ ¡}|jdkslt‚|rÂt dddgg¡}| |¡}dt|d ƒks t‚|jtj|dd� | |¡ksÂt‚t | ƒ ˆ ˆ¡}| d	ddgg¡d }|dksôt‚d S )
Nr   r‡   r…   ro   )rY   r,   r+   ©Zaxisr&   )r   r4   rˆ   rŠ   rF   r0   r2   r3   r   rV   ro   r�   rn   rC   Úargmax)rs   Útest_predict_probarI   r‚   Údecrw   Zprobabilities©r7   rt   r‹   r8   r9   r:   Úconduct_test  s    


"z%test_ovr_binary.<locals>.conduct_testr'   T©Úprobability)r�   )F)r2   r3   ÚTrˆ   r‰   r   r   r   r   r   r   r   )r’   rs   r9   r‘   r:   Ú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¡}tƒ 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sˆt‚qˆd S )
Nr   r‡   rY   r&   r„   r+   r'   rh   r_   )r2   r3   r   r   r   r   r   r   r   r4   r0   r   rl   rF   )r7   r8   rs   rI   r‚   r9   r9   r:   Útest_ovr_multilabel<  s    22úr—   c                  C   sJ   t t ¡ ƒ} |  tjtj¡ t| jƒdks.t	‚|  
tjtj¡dksFt	‚d S )Nr&   r]   )r   r"   r   r4   r@   rA   rB   rC   rD   rF   Úscore)r5   r9   r9   r:   Útest_ovr_fit_predict_svcO  s    r™   c               
   C   sÊ   t dd�} tdddƒD ]®\}}}tjdddd	d
|dd�\}}|d d… |d d…  }}|dd … |dd …  }}	t| ƒ ||¡}
|
 |¡}|
js”t‚t	t
|	|dd�|d	d� t	t|	|dd�|d	d� qd S )Nr+   r_   )TF)çR¸…ëQà?g…ëQ¸å?)rš   r-   rL   ra   rY   r,   rb   r   rc   rg   Úmicro)Zaverage)Údecimal)r   Úzipr$   rk   r   r4   r0   rl   rF   r   r   r   )rs   ÚauÚprecZrecallr7   rt   ru   rv   rw   ZY_testrI   rx   r9   r9   r:   Útest_ovr_multilabel_datasetV  s4    
ù
	

  ÿ  ÿr    c               
   C   sH  t dd�} dD �]2}tjddddd|d	d
�\}}|d d… |d d…  }}|dd … }t| ƒ ||¡}tt ¡ ƒ ||¡}t|dƒrˆt‚ttj	dd�ƒ}t|dƒr¦t‚| ||¡ t|dƒrÀt‚t|dƒsÎt‚t
tj	dd�ddgid�}	t|	ƒ}
t|
dƒ�r t‚|
 ||¡ t|
dƒ�st‚| |¡}| |¡}|dk}t||ƒ qd S )Nr+   r_   )FTrL   ra   rY   r&   rb   r   rc   rg   rn   Fr“   ro   r”   T)Z
param_gridrh   )r   r$   rk   r   r4   r"   ÚSVRrV   rF   r   r   r0   rn   r   )rs   rž   r7   rt   ru   rv   rw   rI   Údecision_onlyÚgsZproba_after_fitrx   ry   rH   r9   r9   r:   Ú!test_ovr_multilabel_predict_probap  sB    

ù
	
 ÿ

r¤   c                  C   s¶   t dd�} tjtj }}|d d… |d d…  }}|dd … }t| ƒ ||¡}tt ¡ ƒ ||¡}t|dƒrpt	‚| 
|¡}| |¡}	t|	jdd�dƒ |	jdd�}
|
|  ¡ r²t	‚d S )Nr+   r_   rg   rn   r�   ç      ð?)r   r@   rA   rB   r   r4   r"   r¡   rV   rF   r0   rn   r   ÚsumrŽ   Úany)rs   r7   rt   ru   rv   rw   rI   r¢   rx   ry   rH   r9   r9   r:   Ú#test_ovr_single_label_predict_proba�  s    


r¨   c               	   C   sz   t jdddddddd�\} }| d d	… |d d	…  }}| d	d … }tt ¡ ƒ ||¡}t| |¡dk t	¡| 
|¡ƒ d S )
NrL   ra   rY   r&   rb   Tr   rc   rg   )r$   rk   r   r"   r   r4   r   ro   rp   rq   r0   ©r7   rt   ru   rv   rw   rI   r9   r9   r:   Ú%test_ovr_multilabel_decision_function²  s     ù
	 ÿrª   c                  C   sp   t jdddd�\} }| d d… |d d…  }}| dd … }tt ¡ ƒ ||¡}t| |¡ ¡ dk| 	|¡ƒ d S )NrL   ra   r   )rd   re   r(   rg   )
r$   Zmake_classificationr   r"   r   r4   r   ro   Zravelr0   r©   r9   r9   r:   Ú'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'   çš™™™™™¹?rh   r-   Zestimator__C)r   r   r   r4   r@   rA   rB   Úbest_estimator_rD   ÚCrF   )r5   ÚCsÚcvÚbest_Cr9   r9   r:   Ú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 )NÚtree)	r   r   r   r4   r@   rA   rB   r   r0   )rI   Zovr_piper5   r9   r9   r:   Útest_ovr_pipelineÕ  s    
rµ   c               	   C   s2   t tdd�ƒ} t t¡� |  g ¡ W 5 Q R X d S ©Nr   r'   )r   r   r.   r/   r#   r0   ©Úovor9   r9   r:   Ú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 r9   )Úlist)Ú.0Úar9   r9   r:   Ú
<listcomp>ì  s     z(test_ovo_fit_on_list.<locals>.<listcomp>)	r   r   r4   r@   rA   rB   r0   rº   r   )r¸   Zprediction_from_arrayZiris_data_listZprediction_from_listr9   r9   r:   Útest_ovo_fit_on_listç  s    ÿr¾   c                  C   sˆ   t tdd�ƒ} |  tjtj¡ tj¡ t| jƒt	t	d  d ksDt
‚t tƒ ƒ} |  tjtj¡ tj¡ t| jƒt	t	d  d ks„t
‚d S )Nr   r'   r+   r,   )r   r   r4   r@   rA   rB   r0   rC   rD   rE   rF   r   r·   r9   r9   r:   Ú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|jƒttd  d ks¨t‚t ||k¡dks¾t‚t||ƒ ttƒ ƒ}| |d d… |d d… t |¡¡ | |dd … |dd … ¡ | 	|¡}ttƒ ƒ}| 
||¡ 	|¡}t||ƒ t|jƒtt |¡ƒk�s`t‚t ||k¡dk�sxt‚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jt|
d��" | |d d
… |	t |¡¡ W 5 Q R X ttƒ ƒ}t|dƒ�r¬t‚d S )NrL   r+   r,   r?   é<   rM   r&   r   r‡   rP   rY   z6Mini-batch contains {0} while it must be subset of {1}r)   rQ   )r$   Ú	load_irisrA   rB   r   r   rQ   r2   rR   r0   r4   rC   rD   rE   rF   rG   r   rT   Zrandr   Úformatr.   r/   r1   r   rV   )Útempr7   r8   Zovo1rW   Zovo2rJ   r¸   rH   Zerror_yZ
message_rer5   r9   r9   r:   Útest_ovo_partial_fit_predictÿ  sT    
$




$



 (



 ÿÿ&
rÄ   c            	      C   s‚  t jjd } ttdd�ƒ}| t jt jdk¡ | t j¡}|j| fksJt‚| t jt j¡ | t j¡}|j| t	fksxt‚t
|jdd�| t j¡ƒ t | t	f¡}d}tt	ƒD ]b}t|d t	ƒD ]N}|j|  t j¡}||dk|f  d7  < ||dk|f  d7  < |d7 }q¾q¬t
|t |¡ƒ tt	ƒD ]T}t|d d …|f ƒ tdddgƒ¡�sVt‚tt |d d …|f ¡ƒdk�s(t‚�q(d S )	Nr   r'   r+   r�   r<   r¥   r=   é’   )r@   rA   r�   r   r   r4   rB   ro   rF   rE   r   rŽ   r0   r2   r   ÚrangerD   Úroundrˆ   ÚissubsetrC   rR   )	rd   Zovo_clfZ	decisionsÚvotesÚkÚiÚjrH   Z	class_idxr9   r9   r:   Ú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 r¬   )r   r   r   r4   r@   rA   rB   r®   rD   r¯   rF   )r¸   r°   r±   r²   r9   r9   r:   Ú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 … ƒ |d |d  	¡ ksÆt
‚d S )
Nr+   r,   r}   rZ   r   Fr‡   ©r   rN   rO   r�   )r2   r3   r   r   r4   r0   ro   rÇ   r   rŽ   rF   )r7   r8   Ú	multi_clfÚovo_predictionZovo_decisionrÉ   Znormalized_confidencesr9   r9   r:   Útest_ovo_tiesl  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dƒD ]H}|| d }ttddd d	�ƒ}| | |¡ | ¡}|d |d ks<t‚q<d S )
Nr+   r,   r}   rZ   r   r&   Fr‡   rÏ   )r2   r3   rÆ   r   r   r4   r0   rF   )r7   Zy_refrË   r8   rÐ   rÑ   r9   r9   r:   Ú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)r2   Úeyer3   r   r   r4   r   r0   )r7   r8   r¸   r9   r9   r:   Útest_ovo_string_y‘  s
    

rØ   c               	   C   sR   t  d¡} t  dgd ¡}ttƒ ƒ}d}tjt|d�� | | |¡ W 5 Q R X d S )Nr‡   r¼   zwhen only one classr)   )	r2   r×   r3   r   r   r.   r/   r1   r4   ©r7   r8   r¸   r6   r9   r9   r:   Útest_ovo_one_class›  s    

rÚ   c               	   C   sP   t j} t jd d …df }ttƒ ƒ}d}tjt|d�� | | |¡ W 5 Q R X d S ©Nr   zUnknown label typer)   )r@   rA   r   r   r.   r/   r1   r4   rÙ   r9   r9   r:   Útest_ovo_float_y¦  s    
rÜ   c               	   C   s2   t tdd�ƒ} t t¡� |  g ¡ W 5 Q R X d S r¶   )r	   r   r.   r/   r#   r0   ©Úecocr9   r9   r:   Útest_ecoc_exceptions±  s    rß   c                  C   s„   t tdd�ddd�} |  tjtj¡ tj¡ t| jƒt	d ksBt
‚t tƒ ddd�} |  tjtj¡ tj¡ t| jƒt	d ks€t
‚d S )Nr   r'   r,   )Z	code_sizer(   )r	   r   r4   r@   rA   rB   r0   rC   rD   rE   rF   r   rÝ   r9   r9   r:   Ú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 r¬   )r	   r   r   r4   r@   rA   rB   r®   rD   r¯   rF   )rÞ   r°   r±   r²   r9   r9   r:   Útest_ecoc_gridsearchÃ  s    
rá   c               	   C   sP   t j} t jd d …df }ttƒ ƒ}d}tjt|d�� | | |¡ W 5 Q R X d S rÛ   )r@   rA   r	   r   r.   r/   r1   r4   rÙ   r9   r9   r:   Útest_ecoc_float_yÌ  s    
râ   c               	   C   sÂ   t jt j } }t | ¡}ttdddœd�}t|dd�}tj	t
dd�� | ||¡ W 5 Q R X | | |¡ tj	t
dd�� | |¡ W 5 Q R X ttdd�ƒ}| ||¡ |¡ t|jƒd	ks¾t‚d S )
NTF)Z	ensure_2dZaccept_sparse)Zcheck_XZcheck_X_paramsr   r'   zA sparse matrix was passedr)   r‡   )r@   rA   rB   ri   rj   r   r   r	   r.   r/   Ú	TypeErrorr4   r0   r   rC   rD   rF   )r7   r8   ZX_spZbase_estimatorrÞ   r9   r9   r:   Ú(test_ecoc_delegate_sparse_base_estimator×  s    
þrä   c                  C   s~   t jdd�} tjtj }}t| ƒ}t ||j¡}| 	||¡ t
|jƒ}|j}|D ](}|jd | |d  |jd ksPt‚qPd S )NÚprecomputed©Zkernelr   r+   )r"   r   r@   rA   rB   r   r2   Údotr•   r4   rC   rD   Zpairwise_indices_r�   rF   )Úclf_precomputedr7   r8   Ú	ovr_falseÚlinear_kernelZn_estimatorsZprecomputed_indicesÚidxr9   r9   r:   Útest_pairwise_indicesñ  s    
ÿrì   c            
      C   s   t jt j } }|d dkst‚| dd… } |dd… }| jdksDt‚tjdd� | |¡}|jdksft‚t	|ƒ | |¡}|jdks„t‚|j
D ]}|jdksŠt‚qŠt|ƒ | |¡}|jdks¼t‚|jdksÊt‚t|j
ƒdksÜt‚|j
D ]}|jdksât‚qâ| | j }|jd	k�st‚tjd
d� ||¡}|jdk�s4t‚t	|ƒ ||¡}|jdk�sTt‚|jdk�sdt‚t|j
ƒdk�sxt‚|j
D ]}|jdk�s~t‚�q~t|ƒ ||¡}	|	jdk�s¶t‚|jdk�sÆt‚t|j
ƒdk�sÚt‚|	j
d jdk�sðt‚|	j
d jdk�st‚|	j
d jdk�st‚dS )aÜ  Check the n_features_in_ attributes of the meta and base estimators

    When the training data is a regular design matrix, everything is intuitive.
    However, when the training data is a precomputed kernel matrix, the
    multiclass strategy can resample the kernel matrix of the underlying base
    estimator both row-wise and column-wise and this has a non-trivial impact
    on the expected value for the n_features_in_ of both the meta and the base
    estimators.
    rZ   r   N)é•   r‡   Úlinearræ   r‡   r&   )rí   rí   rå   rí   éc   r+   r,   rL   )r@   rA   rB   rF   r�   r"   r   r4   Zn_features_in_r   rD   r   Z
n_classes_rC   r•   )
r7   r8   Úclf_notprecomputedZovr_notprecomputedZestZovo_notprecomputedÚKrè   Zovr_precomputedZovo_precomputedr9   r9   r:   Útest_pairwise_n_features_in  sD    




rò   ÚMultiClassClassifierc                 C   sH   t jdd�}t  ¡ }| |ƒ}| ¡ d r,t‚| |ƒ}| ¡ d sDt‚d S )Nrå   ræ   Úpairwise)r"   r   Z	_get_tagsrF   )ró   rè   rð   ré   Zovr_truer9   r9   r:   Útest_pairwise_tagG  s    rõ   c           
      C   sr   t jdd�}t jdd�}tjtj }}| |ƒ}| |ƒ}t ||j¡}t|||dd�}t|||dd�}	t	|	|ƒ d S )Nrå   ræ   rî   Úraise)Zerror_score)
r"   r   r@   rA   rB   r2   rç   r•   r   r   )
ró   rè   rð   r7   r8   Zmulticlass_clf_notprecomputedZmulticlass_clf_precomputedrê   Zscore_not_precomputedZscore_precomputedr9   r9   r:   Útest_pairwise_cross_val_scoreU  s&       ÿ   ÿr÷   c                 C   s|   t j d¡}tjtj }}t  |¡}|jddg|jddgd� 	t
¡}t j||< ttƒ t|d�ƒ}| |ƒ ||¡ ||¡ d S )Né*   r+   r   r­   r]   )Úpr'   )r2   rT   ÚRandomStater@   rA   rB   ÚcopyÚchoicer�   rp   ÚboolÚnanr    r!   r   r4   r˜   )ró   Úrngr7   r8   ÚmaskÚlrr9   r9   r:   Útest_support_missing_valuesk  s    	
 
r  Úmake_yc                 C   sj   t  d¡}| dt jd�}ttƒ ƒ}| ||¡ | |¡}t  |jd df¡}d|dd…df< t	||ƒ dS )zUCheck that constant y target does not raise.

    Non-regression test for #21869
    r{   )r|   r+   )Zdtyper   r,   r+   N)
r2   r~   Zint32r   r   r4   rn   r   r�   r   )r  r7   r8   r5   r‚   Úexpectedr9   r9   r:   Útest_constant_int_target~  s    


r  c                  C   sT   t dd�\} }tddd�}t|ƒ}| | |¡ | | |¡ t| | ¡| | ¡ƒ dS )z^Check that ovo is consistent with binary classifier.

    Non-regression test for #13617.
    T)Z
return_X_yé   Zdistance)Zn_neighborsÚweightsN)r%   r   r   r4   r   r0   )r7   r8   rI   r¸   r9   r9   r:   Ú)test_ovo_consistent_binary_classification�  s    r  )yÚnumpyr2   Zscipy.sparserr   ri   r.   Znumpy.testingr   Úrer   Zsklearn.utils._testingr   r   Zsklearn.utils._mockingr   Zsklearn.multiclassr   r   r	   Zsklearn.utils.multiclassr
   r   Zsklearn.utilsr   r   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.neighborsr   Zsklearn.model_selectionr   r   Zsklearn.pipeliner   r    Zsklearn.imputer!   Zsklearnr"   Zsklearn.exceptionsr#   r$   Zsklearn.datasetsr%   r6   ÚmarkÚfilterwarningsZ
pytestmarkrÁ   r@   rT   rú   rÿ   ZpermutationrB   ÚsizeÚpermrA   rE   r;   r>   rK   rX   r\   r^   rz   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ò   Zparametrizerõ   r÷   r  r~   r   r  r  r9   r9   r9   r:   Ú<module>   s²   $	$0$(-	5/	
	E ÿ
 ÿ
 ÿ

