U
    _»{j¼~  ã                   @   s:  d dl mZ d dlZd dl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mZmZmZmZmZ d d	lmZ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*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z;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*„ ZTd+d,„ ZUd-d.„ ZVd/d0„ ZWd1d2„ ZXd3d4„ ZYd5d6„ ZZd7d8„ Z[d9d:„ Z\d;d<„ Z]d=d>„ Z^d?d@„ Z_dAdB„ Z`dCdD„ ZadEdF„ ZbdGdH„ ZcdIdJ„ ZddKdL„ ZedMdN„ ZfdOdP„ ZgdQdR„ ZhdSdT„ ZidUdV„ ZjdWdX„ ZkdYdZ„ Zld[d\„ Zmd]d^„ Znd_d`„ Zodadb„ Zpej> qdce#e"g¡ddde„ ƒZrej> qdce#e"g¡dfdg„ ƒZsej> qdce#e"g¡dhdi„ ƒZtej> qdjejuejvg¡dkdl„ ƒZwdmdn„ ZxdS )oé    )ÚescapeN)Úassert_allclose)ÚdatasetsÚsvm)Úload_breast_cancer)ÚNotFittedError)ÚSimpleImputer)Ú
ElasticNetÚLassoÚLinearRegressionÚLogisticRegressionÚ
PerceptronÚRidgeÚSGDClassifier)Úprecision_scoreÚrecall_score)ÚGridSearchCVÚcross_val_score)ÚOneVsOneClassifierÚOneVsRestClassifierÚOutputCodeClassifier)ÚMultinomialNB)ÚKNeighborsClassifier)ÚPipelineÚmake_pipeline)ÚSVCÚ	LinearSVC)ÚDecisionTreeClassifierÚDecisionTreeRegressor)Úcheck_arrayÚshuffle)ÚCheckingClassifier)Úassert_almost_equalÚassert_array_equal)Úcheck_classification_targetsÚtype_of_targetz/The default value for `force_alpha` will changezignore:z:FutureWarningé   c               	   C   sè   t td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 )NÚautor   ©ÚdualÚ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© r;   ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/tests/test_multiclass.pyÚtest_ovr_exceptions4   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+   )r4   r5   r%   r0   r1   r3   r$   )r:   r8   r;   r;   r<   Ú!test_check_classification_targetsH   s    r@   c                  C   sÀ   t tddd�ƒ} |  tjtj¡ tj¡}t| jƒt	ks:t
‚td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   r   r6   ÚirisÚdataÚtargetr2   ÚlenÚestimators_Ú	n_classesÚAssertionErrorr4   Úmeanr   )r7   ÚpredÚclfÚpred2r;   r;   r<   Útest_ovr_fit_predictP   s    $
rM   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   rA   é   r.   r-   r&   F)Úmax_iterÚtolr    r*   é   Úpartial_fit)r    rB   rC   rD   r   r   rT   r4   Úuniquer2   r6   r"   rE   rF   rH   rI   ÚabsÚrandomÚrandnr   r   Úhasattr)r9   r:   r7   rJ   Zovr2rL   Zovr1Úpred1r;   r;   r<   Útest_ovr_partial_fit`   s2    
$


 ÿ$
ÿ"
r[   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 )NrP   r.   r-   r&   r   rS   é   éÿÿÿÿzAMini-batch contains \[.+\] while classes must be subset of \[.+\]r+   )r9   r:   )r   r   r4   rV   rW   rX   rT   rU   r0   r1   r3   )r7   r9   r:   Úy1r8   r;   r;   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   r6   rB   rC   rD   r2   rE   rF   rG   rH   r#   r4   rU   rI   r   )r7   rJ   r;   r;   r<   Útest_ovr_ovo_regressor‘   s    

ra   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-   ©ÚalpharO   é   r\   r&   é2   Tr   ©Ú	n_samplesÚ
n_featuresrG   Zn_labelsÚlengthZallow_unlabeledr*   éP   ç      à?)ÚspZ
csr_matrixÚ
csc_matrixZ
coo_matrixZ
dok_matrixZ
lil_matrixr   r   Úmake_multilabel_classificationr   r6   r2   Úmultilabel_rH   Úissparser#   ZtoarrayÚpredict_probar   r   Údecision_functionÚastypeÚint)ÚsparseÚbase_clfr9   ÚYÚX_trainÚY_trainÚX_testrK   ÚY_predZclf_sprsZY_pred_sprsÚY_probarJ   Zdec_predr;   r;   r<   Útest_ovr_fit_predict_sparse£   s@    û

ù





r}   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   r\   )r   r&   r-   r.   z,Label .+ is present in all training examplesr+   éþÿÿÿr]   z/Label not 1 is present in all training examples)r4   ÚonesÚzerosr   r   r0   ZwarnsÚUserWarningr6   r2   r#   r5   rr   rU   rH   rq   Úshape)r9   r:   r7   r8   Úy_predr;   r;   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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   r\   r&   é   ÚeggsÚspamZhamr-   zham eggs spamr'   r(   é   )r4   r5   ÚsetÚsplitr   r   r   r   r	   r   r6   Úclasses_rH   r2   r#   )r9   r:   rw   Úclassesrv   rK   r…   r;   r;   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d�tƒ tƒ tƒ fD ]}| |ƒ q’t	ƒ t
dd�tƒ fD ]}| |dd� q´d S )Nr   r\   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ˆ   rr   )r\   r.   r-   ©Zaxisr&   )r   r6   r‹   r�   rH   r2   r4   r5   r#   rY   rr   r„   rq   rE   Úargmax)rv   Útest_predict_probarK   r…   Údecrz   Zprobabilities©r9   rw   rŽ   r:   r;   r<   Úconduct_test  s    


"z%test_ovr_binary.<locals>.conduct_testr'   r(   T©Úprobability)r’   )F)r4   r5   ÚTr‹   rŒ   r   r   r   r	   r   r   r   )r•   rv   r;   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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Š   r\   r&   r‡   r-   r'   r(   rk   rb   )r4   r5   r   r   r   r   r	   r
   r   r6   r2   r#   ro   rH   )r9   r:   rv   rK   r…   r;   r;   r<   Útest_ovr_multilabel9  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   r6   rB   rC   rD   rE   rF   rH   Úscore)r7   r;   r;   r<   Útest_ovr_fit_predict_svcL  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-   rb   )TF)çR¸…ëQà?g…ëQ¸å?)r�   r/   rO   rd   r\   r.   re   r   rf   rj   Úmicro)Zaverage)Údecimal)r   Úzipr   rn   r   r6   r2   ro   rH   r"   r   r   )rv   ÚauÚprecZrecallr9   rw   rx   ry   rz   ZY_testrK   r{   r;   r;   r<   Útest_ovr_multilabel_datasetS  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-   rb   )FTrO   rd   r\   r&   re   r   rf   rj   rq   Fr–   rr   r—   T)Z
param_gridrk   )r   r   rn   r   r6   r   ÚSVRrY   rH   r   r   r2   rq   r#   )rv   r¡   r9   rw   rx   ry   rz   rK   Údecision_onlyÚgsZproba_after_fitr{   r|   rJ   r;   r;   r<   Ú!test_ovr_multilabel_predict_probam  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-   rb   rj   rq   r�   ç      ð?)r   rB   rC   rD   r   r6   r   r¤   rY   rH   r2   rq   r"   Úsumr‘   Úany)rv   r9   rw   rx   ry   rz   rK   r¥   r{   r|   rJ   r;   r;   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 )
NrO   rd   r\   r&   re   Tr   rf   rj   )r   rn   r   r   r   r6   r#   rr   rs   rt   r2   ©r9   rw   rx   ry   rz   rK   r;   r;   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 )NrO   rd   r   )rg   rh   r*   rj   )
r   Zmake_classificationr   r   r   r6   r#   rr   Zravelr2   r¬   r;   r;   r<   Ú'test_ovr_single_label_decision_functionÁ  s
    r®   c                  C   sV   t tddd�ƒ} dddg}t| d|iƒ}| tjtj¡ |jjd j	}||ksRt
‚d S ©Nr'   r   r(   çš™™™™™¹?rk   r/   Úestimator__C)r   r   r   r6   rB   rC   rD   Úbest_estimator_rF   ÚCrH   )r7   ÚCsÚcvÚbest_Cr;   r;   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   r6   rB   rC   rD   r#   r2   )rK   Zovr_piper7   r;   r;   r<   Útest_ovr_pipelineÒ  s    
r¹   c               	   C   s4   t tddd�ƒ} t t¡� |  g ¡ W 5 Q R X d S ©Nr'   r   r(   )r   r   r0   r1   r   r2   ©Úovor;   r;   r<   Útest_ovo_exceptionsÞ  s    r½   c                  C   s^   t tddd�ƒ} |  tjtj¡ tj¡}dd„ tjD ƒ}|  |ttjƒ¡ |¡}t||ƒ d S )Nr'   r   r(   c                 S   s   g | ]}t |ƒ‘qS r;   )Úlist)Ú.0Úar;   r;   r<   Ú
<listcomp>é  s     z(test_ovo_fit_on_list.<locals>.<listcomp>)	r   r   r6   rB   rC   rD   r2   r¾   r#   )r¼   Zprediction_from_arrayZiris_data_listZprediction_from_listr;   r;   r<   Útest_ovo_fit_on_listä  s    ÿrÂ   c                  C   sŠ   t tddd�ƒ} |  tjtj¡ tj¡ t| jƒt	t	d  d ksFt
‚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   r   r6   rB   rC   rD   r2   rE   rF   rG   rH   r   r»   r;   r;   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 )NrO   r-   r.   rA   é<   rP   r&   r   rŠ   rS   r\   z6Mini-batch contains {0} while it must be subset of {1}r+   rT   )r   Ú	load_irisrC   rD   r   r   rT   r4   rU   r2   r6   rE   rF   rG   rH   rI   r"   rW   Zrandr   Úformatr0   r1   r3   r   rY   )Útempr9   r:   Zovo1rZ   Zovo2rL   r¼   rJ   Zerror_yZ
message_rer7   r;   r;   r<   Útest_ovo_partial_fit_predictü  sT    
$




$



 (



 ÿÿ&
rÈ   c            	      C   s„  t jjd } ttddd�ƒ}| t jt jdk¡ | t j¡}|j| fksLt‚| t jt j¡ | t j¡}|j| t	fkszt‚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ƒ¡�sXt‚tt |d d …|f ¡ƒd	k�s*t‚�q*d S )
Nr   r'   r(   r-   r�   r>   r¨   r?   é’   )rB   rC   r„   r   r   r6   rD   rr   rH   rG   r#   r‘   r2   r4   r‚   ÚrangerF   Úroundr‹   ÚissubsetrE   rU   )	rg   Zovo_clfZ	decisionsÚvotesÚkÚiÚjrJ   Z	class_idxr;   r;   r<   Útest_ovo_decision_function1  s*    *rÑ   c                  C   sV   t tddd�ƒ} dddg}t| d|iƒ}| tjtj¡ |jjd j	}||ksRt
‚d S r¯   )r   r   r   r6   rB   rC   rD   r²   rF   r³   rH   )r¼   r´   rµ   r¶   r;   r;   r<   Útest_ovo_gridsearch`  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€   r]   r   FrŠ   ©r    rQ   rR   r�   )r4   r5   r   r   r6   r2   rr   rË   r#   r‘   rH   )r9   r:   Ú	multi_clfÚovo_predictionZovo_decisionrÍ   Znormalized_confidencesr;   r;   r<   Útest_ovo_tiesi  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€   r]   r   r&   FrŠ   rÓ   )r4   r5   rÊ   r   r   r6   r2   rH   )r9   Zy_refrÏ   r:   rÔ   rÕ   r;   r;   r<   Útest_ovo_ties2�  s    "r×   c                  C   sJ   t  d¡} t  ddddg¡}ttdd�ƒ}| | |¡ t|| | ¡ƒ d S )NrŠ   rÀ   ÚbÚcÚdr'   ©r)   )r4   Úeyer5   r   r   r6   r#   r2   )r9   r:   r¼   r;   r;   r<   Útest_ovo_string_yŽ  s
    
rÝ   c               	   C   sV   t  d¡} t  dgd ¡}ttdd�ƒ}d}tjt|d�� | | |¡ W 5 Q R X d S )NrŠ   rÀ   r'   rÛ   zwhen only one classr+   )	r4   rÜ   r5   r   r   r0   r1   r3   r6   ©r9   r:   r¼   r8   r;   r;   r<   Útest_ovo_one_class˜  s    
rß   c               	   C   sT   t j} t jd d …df }ttdd�ƒ}d}tjt|d�� | | |¡ W 5 Q R X d S ©Nr   r'   rÛ   zUnknown label typer+   )rB   rC   r   r   r0   r1   r3   r6   rÞ   r;   r;   r<   Útest_ovo_float_y£  s    rá   c               	   C   s4   t tddd�ƒ} t t¡� |  g ¡ W 5 Q R X d S rº   )r   r   r0   r1   r   r2   ©Úecocr;   r;   r<   Útest_ecoc_exceptions®  s    rä   c                  C   s†   t tddd�ddd�} |  tjtj¡ tj¡ t| jƒt	d ksDt
‚t tƒ ddd�} |  tjtj¡ tj¡ t| jƒt	d ks‚t
‚d S )Nr'   r   r(   r.   )Z	code_sizer*   )r   r   r6   rB   rC   rD   r2   rE   rF   rG   rH   r   râ   r;   r;   r<   Útest_ecoc_fit_predict´  s    
  ÿrå   c                  C   sZ   t tddd�dd�} dddg}t| d|iƒ}| tjtj¡ |jjd j	}||ksVt
‚d S )	Nr'   r   r(   rN   r°   rk   r/   r±   )r   r   r   r6   rB   rC   rD   r²   rF   r³   rH   )rã   r´   rµ   r¶   r;   r;   r<   Útest_ecoc_gridsearchÂ  s    
ræ   c               	   C   sT   t j} t jd d …df }ttdd�ƒ}d}tjt|d�� | | |¡ W 5 Q R X d S rà   )rB   rC   r   r   r0   r1   r3   r6   rÞ   r;   r;   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d
�ƒ}| ||¡ |¡ t|jƒdksÀt‚d S )NTF)Z	ensure_2dZaccept_sparse)Zcheck_XZcheck_X_paramsr   rN   zA sparse matrix was passedr+   r'   r(   rŠ   )rB   rC   rD   rl   rm   r!   r   r   r0   r1   Ú	TypeErrorr6   r2   r   rE   rF   rH   )r9   r:   ZX_spZbase_estimatorrã   r;   r;   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   rB   rC   rD   r   r4   Údotr˜   r6   rE   rF   Zpairwise_indices_r„   rH   )Úclf_precomputedr9   r:   Ú	ovr_falseÚlinear_kernelZn_estimatorsZprecomputed_indicesÚidxr;   r;   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.
    r]   r   N)é•   rŠ   Úlinearrë   rŠ   r&   )rò   rò   rê   rò   éc   r-   r.   rO   )rB   rC   rD   rH   r„   r   r   r6   Zn_features_in_r   rF   r   Z
n_classes_rE   r˜   )
r9   r:   Úclf_notprecomputedZovr_notprecomputedZestZovo_notprecomputedÚKrí   Zovr_precomputedZovo_precomputedr;   r;   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_tagsrH   )rø   rí   rõ   rî   Zovr_truer;   r;   r<   Útest_pairwise_tagF  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   rB   rC   rD   r4   rì   r˜   r   r#   )
rø   rí   rõ   r9   r:   Zmulticlass_clf_notprecomputedZmulticlass_clf_precomputedrï   Zscore_not_precomputedZscore_precomputedr;   r;   r<   Útest_pairwise_cross_val_scoreT  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`   )ÚprN   )r4   rW   ÚRandomStaterB   rC   rD   ÚcopyÚchoicer„   rs   ÚboolÚnanr   r   r   r6   r›   )rø   Úrngr9   r:   ÚmaskÚlrr;   r;   r<   Útest_support_missing_valuesj  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)
r4   r�   Zint32r   r   r6   rq   r‚   r„   r   )r  r9   r:   r7   r…   Úexpectedr;   r;   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   r6   r#   r2   )r9   r:   rK   r¼   r;   r;   r<   Ú)test_ovo_consistent_binary_classificationŽ  s    r  )yÚrer   Únumpyr4   r0   Zscipy.sparseru   rl   Znumpy.testingr   Zsklearnr   r   Zsklearn.datasetsr   Zsklearn.exceptionsr   Zsklearn.imputer   Zsklearn.linear_modelr	   r
   r   r   r   r   r   Zsklearn.metricsr   r   Zsklearn.model_selectionr   r   Zsklearn.multiclassr   r   r   Zsklearn.naive_bayesr   Zsklearn.neighborsr   Zsklearn.pipeliner   r   Zsklearn.svmr   r   Zsklearn.treer   r   Zsklearn.utilsr   r    Zsklearn.utils._mockingr!   Zsklearn.utils._testingr"   r#   Zsklearn.utils.multiclassr$   r%   r8   ÚmarkÚfilterwarningsZ
pytestmarkrÅ   rB   rW   rÿ   r  ZpermutationrD   ÚsizeÚpermrC   rG   r=   r@   rM   r[   r_   ra   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÷   Zparametrizerú   rü   r  r�   r‚   r
  r  r;   r;   r;   r<   Ú<module>   s¨   $	$0$(-	5/	
	E ÿ
 ÿ
 ÿ

