a
    �ù»j…  ã                   @   sr  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<m=Z=m>Z>m?Z? d dl@mAZAmBZB e C¡ ZDejE Fd ¡ZGeG HeDjIjJ¡ZKeDjLeK eD_LeDjIeK eD_IdZMdd„ ZNdd„ ZOdd„ ZPdd„ ZQdd „ ZRd!d"„ ZSejT Ud#e=e< e; e> e? ¡d$d%„ ƒZVd&d'„ ZWd(d)„ ZXd*d+„ ZYd,d-„ ZZd.d/„ Z[d0d1„ Z\d2d3„ Z]d4d5„ Z^d6d7„ Z_d8d9„ Z`d:d;„ Zad<d=„ Zbd>d?„ Zcd@dA„ ZddBdC„ ZedDdE„ ZfdFdG„ ZgdHdI„ ZhdJdK„ ZidLdM„ ZjdNdO„ ZkdPdQ„ ZldRdS„ ZmdTdU„ ZndVdW„ ZodXdY„ ZpdZd[„ ZqejT Ud\e<¡d]d^„ ƒZrd_d`„ Zsdadb„ ZtejT Udce#e"g¡ddde„ ƒZuejT Udce#e"g¡dfdg„ ƒZvejT Udce#e"g¡dhdi„ ƒZwejT Udjejxejyg¡dkdl„ ƒZzdmdn„ Z{dodp„ Z|dS )qé    )Ú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)ÚCOO_CONTAINERSÚCSC_CONTAINERSÚCSR_CONTAINERSÚDOK_CONTAINERSÚLIL_CONTAINERS)Úcheck_classification_targetsÚtype_of_targeté   c                  C   s$  t tdd�ƒ} t t¡� |  g ¡ W d   ƒ n1 s80    Y  d}tjt|d��N t ddgddgg¡}t ddgddgg¡}t t	ƒ ƒ 
||¡ W d   ƒ n1 s¨0    Y  tjt|d��N t ddgddgg¡}t dd	gd
dgg¡}t t	ƒ ƒ 
||¡ W d   ƒ n1 �s0    Y  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© r>   úCE:\soccer\ml_env\Lib\site-packages\sklearn/tests/test_multiclass.pyÚtest_ovr_exceptions8   s    (0r@   c                  C   sP   t  g d¢¡} t| ƒ}tjt|d�� t| ƒ W d   ƒ n1 sB0    Y  d S )N)ç        gš™™™™™ñ?ç       @g      @r.   )r7   r8   r*   r3   r4   r6   r)   )r=   r;   r>   r>   r?   Ú!test_check_classification_targetsL   s    rC   c                  C   s¼   t tdd�ƒ} |  tjtj¡ tj¡}t| jƒt	ks8J ‚tdd�}| tjtj¡ tj¡}t
 tj|k¡t
 tj|k¡ks~J ‚t tƒ ƒ} |  tjtj¡ tj¡}t
 tj|k¡dks¸J ‚d S )Nr   r,   çÍÌÌÌÌÌä?)r   r   r9   ÚirisÚdataÚtargetr5   ÚlenÚestimators_Ú	n_classesr7   Úmeanr   )r:   ÚpredÚclfÚpred2r>   r>   r?   Útest_ovr_fit_predictT   s    
$
rO   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¬J ‚t ||k¡dksÂJ ‚t tj dd¡¡} g d¢}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„J ‚ttƒ ƒ}t|dƒ�ržJ ‚d S )Nr   r,   éd   rD   é   r1   ©r0   r0   r0   r0   r1   r+   r+   r   r   r1   r+   r0   r1   r+   r0   F)Úmax_iterÚtolr    r-   é   Úpartial_fit)r    rE   rF   rG   r   r   rV   r7   Úuniquer5   r9   r"   rH   rI   rK   ÚabsÚrandomÚrandnr   r   Úhasattr)r<   r=   r:   rL   Zovr2rN   Zovr1Úpred1r>   r>   r?   Útest_ovr_partial_fitd   s2    
$


ÿ$
ÿ"
r]   c                  C   s¨   t tƒ ƒ} t tj dd¡¡}g d¢}|  |d d… |d d… t |¡¡ dg|dd…  }d}tj	t
|d��& | j|dd … |d	� W d   ƒ n1 sš0    Y  d S )
NrQ   r1   rR   rU   é   éÿÿÿÿzAMini-batch contains \[.+\] while classes must be subset of \[.+\]r.   )r<   r=   )r   r   r7   rX   rY   rZ   rV   rW   r3   r4   r6   )r:   r<   r=   Úy1r;   r>   r>   r?   Útest_ovr_partial_fit_exceptionsˆ   s    
$ra   c                  C   sÐ   t tƒ ƒ} |  tjtj¡ tj¡}t| jƒt	ks4J ‚t
t |¡g d¢ƒ t |tjk¡dks`J ‚ttƒ ƒ} |  tjtj¡ tj¡}t| jƒt	t	d  d ks J ‚t
t |¡g d¢ƒ t |tjk¡dksÌJ ‚d S )N)r   r0   r1   çÍÌÌÌÌÌì?r0   r1   )r   r   r9   rE   rF   rG   r5   rH   rI   rJ   r#   r7   rW   rK   r   )r:   rL   r>   r>   r?   Útest_ovr_ovo_regressor•   s    

rc   Úsparse_containerc              	   C   s  t dd�}tjddddddd	d
�\}}|d d… |d d…  }}|dd … }t|ƒ ||¡}| |¡}t|ƒ || |ƒ¡}	|	 |¡}
|jsŽJ ‚t |
¡sœJ ‚t	|
 
¡ |ƒ |	 |¡}|dk}t	||
 
¡ ƒ t ¡ }t|ƒ || |ƒ¡}	|	 |¡d	k t¡}t	||	 |¡ 
¡ ƒ d S )Nr0   ©ÚalpharP   é   r^   r+   é2   Tr   ©Ú	n_samplesÚ
n_featuresrJ   Zn_labelsÚlengthZallow_unlabeledr-   éP   ç      à?)r   r   Úmake_multilabel_classificationr   r9   r5   Úmultilabel_ÚspÚissparser#   ZtoarrayÚpredict_probar   r   Údecision_functionÚastypeÚint)rd   Úbase_clfr<   ÚYÚX_trainÚY_trainÚX_testrM   ÚY_predZclf_sprsZY_pred_sprsÚY_probarL   Zdec_predr>   r>   r?   Útest_ovr_fit_predict_sparse§   s4    
ù





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 d   ƒ n1 s–0    Y  | 	| ¡}t
t  |¡t  |¡ƒ | | ¡}t  |d d …d	d …f ¡dksìJ ‚| | ¡}t
|d d …d
f t  | jd ¡ƒ t  d¡}d|dd …df< ttƒ ƒ}d}tjt|d�� | | |¡ W d   ƒ n1 �sr0    Y  | | ¡}t
|d d …d
f t  | jd ¡ƒ d S )N©é
   r1   r   r^   )r€   r+   r0   r1   z,Label .+ is present in all training examplesr.   éþÿÿÿr_   z/Label not 1 is present in all training examples)r7   ÚonesÚzerosr   r   r3   ZwarnsÚUserWarningr9   r5   r#   r8   rt   rW   rs   Úshape)r<   r=   r:   r;   Úy_predr>   r>   r?   Útest_ovr_always_presentÔ   s0    


*

"
"

,
r‡   c                  C   s  t  g d¢g d¢g d¢g d¢g d¢g¡} g d¢}t  g d¢g d¢g d	¢g d¢g d	¢g¡}td
 ¡ ƒ}tƒ tdd�tƒ tƒ tƒ fD ]~}t	|ƒ 
| |¡}t|jƒ|ks¦J ‚| t  g d¢g¡¡d }t|dgƒ t	|ƒ 
| |¡}| g d¢g¡d }t|g d¢ƒ q€d S )N©r   r   r^   ©r   r^   r   ©r+   r   r   ©r   r   é   ©rŒ   r   r   )ÚeggsÚspamÚhamrŽ   r�   )r   r   r0   ©r   r0   r   ©r0   r   r   zham eggs spamr   r,   ©r   r   é   rŽ   )r7   r8   ÚsetÚsplitr   r   r   r   r	   r   r9   Úclasses_r5   r#   )r<   r=   rx   Úclassesrw   rM   r†   r>   r>   r?   Útest_ovr_multiclassø   s"    ((ûr™   c                     s²   t  g d¢g d¢g d¢g d¢g d¢g¡‰ g d¢‰t  g d¢g¡j‰td ¡ ƒ‰d‡ ‡‡‡fd
d„	} tdd�tƒ tƒ tƒ fD ]}| |ƒ qzt	ƒ t
dd�tƒ fD ]}| |dd� qœd S )Nrˆ   r‰   rŠ   r‹   r�   )rŽ   r�   r�   rŽ   r�   )r   r0   r0   r   r0   z	eggs spamFc                    sò   t | ƒ ˆ ˆ¡}t|jƒˆks"J ‚| t g d¢g¡¡d }t|dgƒ t| dƒrj| 	ˆ ¡}|j
dksjJ ‚|r¾t g d¢g¡}| |¡}dt|d ƒksœJ ‚|jtj|dd� | |¡ks¾J ‚t | ƒ ˆ ˆ¡}| g d	¢g¡d }|dksîJ ‚d S )
Nr“   r   rŽ   rt   )r^   r1   r0   ©ZaxisrŠ   )r   r9   r•   r—   r5   r7   r8   r#   r[   rt   r…   rs   rH   Úargmax)rw   Útest_predict_probarM   r†   Údecr{   Zprobabilities©r<   rx   r˜   r=   r>   r?   Úconduct_test  s    


"z%test_ovr_binary.<locals>.conduct_testr   r,   T©Úprobability)rœ   )F)r7   r8   ÚTr•   r–   r   r   r   r	   r   r   r   )rŸ   rw   r>   rž   r?   Útest_ovr_binary  s    (ü
r£   c                  C   sº   t  g d¢g d¢g d¢g d¢g d¢g¡} t  g d¢g d¢g d¢g d	¢g d
¢g¡}tƒ tdd�tƒ tƒ tƒ tdd�fD ]@}t|ƒ 	| |¡}| 
g d¢g¡d }t|g d¢ƒ |jstJ ‚qtd S )N)r   r”   r^   r‰   )r+   r+   r+   )r”   r   rŒ   r�   )r   r0   r0   r‘   )r0   r0   r0   )r0   r   r0   r’   r   r,   rn   re   )r   r”   r”   )r7   r8   r   r   r   r   r	   r
   r   r9   r5   r#   rp   )r<   r=   rw   rM   r†   r>   r>   r?   Útest_ovr_multilabel:  s    ((úr¤   c                  C   sJ   t t ¡ ƒ} |  tjtj¡ t| jƒdks.J ‚|  	tjtj¡dksFJ ‚d S )Nr+   rb   )
r   r   r   r9   rE   rF   rG   rH   rI   Úscore)r:   r>   r>   r?   Útest_ovr_fit_predict_svcM  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”J ‚tt	|	|dd�|d	d� tt
|	|dd�|d	d� qd S )Nr0   re   )TF)çR¸…ëQà?g…ëQ¸å?)r§   r2   rP   rg   r^   r1   rh   r   ri   rm   Úmicro)Zaverage)Údecimal)r   Úzipr   ro   r   r9   r5   rp   r"   r   r   )rw   ÚauÚprecZrecallr<   rx   ry   rz   r{   ZY_testrM   r|   r>   r>   r?   Útest_ovr_multilabel_datasetT  s,    
ù
	

ÿÿ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ˆJ ‚ttjdd�ƒ}t|dƒr¦J ‚| ||¡ t|dƒrÀJ ‚t|dƒsÎJ ‚t	tjdd�ddgid�}	t|	ƒ}
t|
dƒ�r J ‚|
 ||¡ t|
dƒ�sJ ‚| 
|¡}| |¡}|dk}t||ƒ qd S )Nr0   re   )FTrP   rg   r^   r+   rh   r   ri   rm   rs   Fr    rt   r¡   T)Z
param_gridrn   )r   r   ro   r   r9   r   ÚSVRr[   r   r   r5   rs   r#   )rw   r«   r<   rx   ry   rz   r{   rM   Údecision_onlyÚgsZproba_after_fitr|   r}   rL   r>   r>   r?   Ú!test_ovr_multilabel_predict_proban  s@    

ù
	ÿ

r±   c                  C   s¶   t dd�} tjtj }}|d d… |d d…  }}|dd … }t| ƒ ||¡}tt ¡ ƒ ||¡}t|dƒrpJ ‚| 	|¡}| 
|¡}	t|	jdd�dƒ |	jdd�}
|
|  ¡ r²J ‚d S )Nr0   re   rm   rs   rš   ç      ð?)r   rE   rF   rG   r   r9   r   r®   r[   r5   rs   r"   Úsumr›   Úany)rw   r<   rx   ry   rz   r{   rM   r¯   r|   r}   rL   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 )
NrP   rg   r^   r+   rh   Tr   ri   rm   )r   ro   r   r   r   r9   r#   rt   ru   rv   r5   ©r<   rx   ry   rz   r{   rM   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 )NrP   rg   r   )rj   rk   r-   rm   )
r   Zmake_classificationr   r   r   r9   r#   rt   Zravelr5   r¶   r>   r>   r?   Ú'test_ovr_single_label_decision_functionÂ  s
    r¸   c                  C   sR   t tdd�ƒ} g d¢}t| d|iƒ}| tjtj¡ |jjd j	}||v sNJ ‚d S ©Nr   r,   )çš™™™™™¹?rn   r2   Zestimator__C)
r   r   r   r9   rE   rF   rG   Úbest_estimator_rI   ÚC)r:   Ú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   r9   rE   rF   rG   r#   r5   )rM   Zovr_piper:   r>   r>   r?   Útest_ovr_pipelineÓ  s    
rÂ   c                  C   sF   t tdd�ƒ} t t¡� |  g ¡ W d   ƒ n1 s80    Y  d S ©Nr   r,   )r   r   r3   r4   r   r5   ©Úovor>   r>   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 r>   )Úlist)Ú.0Úar>   r>   r?   Ú
<listcomp>ê  ó    z(test_ovo_fit_on_list.<locals>.<listcomp>)	r   r   r9   rE   rF   rG   r5   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�ƒ} |  tjtj¡ tj¡ t| jƒt	t	d  d ksDJ ‚t t
ƒ ƒ} |  tjtj¡ tj¡ t| jƒt	t	d  d ks„J ‚d S )Nr   r,   r0   r1   )r   r   r9   rE   rF   rG   r5   rH   rI   rJ   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¨J ‚t ||k¡dks¾J ‚t||ƒ ttƒ ƒ}| |d d… |d d… t |¡¡ | |dd … |dd … ¡ | 	|¡}ttƒ ƒ}| 
||¡ 	|¡}t||ƒ t|jƒtt |¡ƒk�s`J ‚t ||k¡dk�sxJ ‚ttƒ ƒ}tj dd¡}g d¢}| |d d… |d d… g d	¢¡ | |dd … |dd … ¡ | 	|¡}ttƒ ƒ}| 
||¡ 	|¡}t||ƒ ttƒ ƒ}g d
¢}	td t |	¡t |¡¡ƒ}
tjt|
d��, | |d d… |	t |¡¡ W d   ƒ n1 �sv0    Y  ttƒ ƒ}t|dƒ�ršJ ‚d S )NrP   r0   r1   rD   é<   rQ   )r0   r0   r1   r+   r+   r   r   r”   r”   r”   r”   r”   r1   r1   rU   )r   r0   r1   r+   r”   )r   r0   r1   r+   r”   r^   r1   z6Mini-batch contains {0} while it must be subset of {1}r.   rV   )r   Ú	load_irisrF   rG   r   r   rV   r7   rW   r5   r9   rH   rI   rJ   rK   r"   rY   Zrandr   Úformatr3   r4   r6   r   r[   )Útempr<   r=   Zovo1r\   Zovo2rN   rÅ   rL   Zerror_yZ
message_rer:   r>   r>   r?   Útest_ovo_partial_fit_predictý  sR    
$




$



"



ÿÿ<
rÒ   c            	      C   s€  t jjd } ttdd�ƒ}| t jt jdk¡ | t j¡}|j| fksJJ ‚| t jt j¡ | t j¡}|j| tfksxJ ‚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 ]R}t|d d …|f ƒ tg d¢ƒ¡�sTJ ‚tt |d d …|f ¡ƒdk�s(J ‚�q(d S )Nr   r,   r0   rš   )rA   r²   rB   é’   )rE   rF   r…   r   r   r9   rG   rt   rJ   r#   r›   r5   r7   rƒ   ÚrangerI   Úroundr•   ÚissubsetrH   rW   )	rj   Zovo_clfZ	decisionsÚvotesÚkÚiÚjrL   Z	class_idxr>   r>   r?   Útest_ovo_decision_function2  s*    (rÛ   c                  C   sR   t tdd�ƒ} g d¢}t| d|iƒ}| tjtj¡ |jjd j	}||v sNJ ‚d S r¹   )
r   r   r   r9   rE   rF   rG   r»   rI   r¼   )rÅ   r½   r¾   r¿   r>   r>   r?   Útest_ovo_gridsearcha  s    rÜ   c                  C   sÆ   t  ddgddgddgddgg¡} t  g d¢¡}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ÂJ ‚d S )Nr0   r1   r�   r_   ©r1   r   r0   r1   Fr”   ©r    rS   rT   r   rš   )
r7   r8   r   r   r9   r5   rt   rÕ   r#   r›   )r<   r=   Ú	multi_clfÚovo_predictionZovo_decisionr×   Znormalized_confidencesr>   r>   r?   Útest_ovo_tiesj  s    "

$rá   c                  C   s†   t  ddgddgddgddgg¡} t  g d¢¡}tdƒD ]H}|| d }ttddd d	�ƒ}| | |¡ | ¡}|d
 |d ks8J ‚q8d S )Nr0   r1   r�   r_   rÝ   r+   Fr”   rÞ   r   )r7   r8   rÔ   r   r   r9   r5   )r<   Zy_refrÙ   r=   rß   rà   r>   r>   r?   Útest_ovo_ties2‚  s    "râ   c                  C   sB   t  d¡} t  g d¢¡}ttƒ ƒ}| | |¡ t|| | ¡ƒ d S )Nr”   )rÉ   ÚbÚcÚd)r7   Úeyer8   r   r   r9   r#   r5   )r<   r=   rÅ   r>   r>   r?   Útest_ovo_string_y�  s
    

rç   c                  C   sf   t  d¡} t  dgd ¡}ttƒ ƒ}d}tjt|d�� | | |¡ W d   ƒ n1 sX0    Y  d S )Nr”   rÉ   zwhen only one classr.   )	r7   ræ   r8   r   r   r3   r4   r6   r9   ©r<   r=   rÅ   r;   r>   r>   r?   Útest_ovo_one_class™  s    

ré   c                  C   sd   t j} t jd d …df }ttƒ ƒ}d}tjt|d�� | | |¡ W d   ƒ n1 sV0    Y  d S ©Nr   zUnknown label typer.   )rE   rF   r   r   r3   r4   r6   r9   rè   r>   r>   r?   Útest_ovo_float_y¤  s    
rë   c                  C   sF   t tdd�ƒ} t t¡� |  g ¡ W d   ƒ n1 s80    Y  d S rÃ   )r   r   r3   r4   r   r5   ©Úecocr>   r>   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sBJ ‚t t
ƒ ddd�} |  tjtj¡ tj¡ t| jƒt	d ks€J ‚d S )Nr   r,   r1   )Z	code_sizer-   )r   r   r9   rE   rF   rG   r5   rH   rI   rJ   r   rì   r>   r>   r?   Útest_ecoc_fit_predictµ  s    rï   c                  C   sV   t tdd�dd�} g d¢}t| d|iƒ}| tjtj¡ |jjd j	}||v sRJ ‚d S r¹   )
r   r   r   r9   rE   rF   rG   r»   rI   r¼   )rí   r½   r¾   r¿   r>   r>   r?   Útest_ecoc_gridsearchÁ  s    rð   c                  C   sd   t j} t jd d …df }ttƒ ƒ}d}tjt|d�� | | |¡ W d   ƒ n1 sV0    Y  d S rê   )rE   rF   r   r   r3   r4   r6   r9   rè   r>   r>   r?   Útest_ecoc_float_yÊ  s    
rñ   Úcsc_containerc                 C   sè   t jt j }}| |ƒ}ttdddœd�}t|dd�}tjtdd�� | 	||¡ W d   ƒ n1 sd0    Y  | 	||¡ tjtdd�� | 
|¡ W d   ƒ n1 s¨0    Y  ttdd�ƒ}| 	||¡ 
|¡ t|jƒd	ksäJ ‚d S )
NTF)Z	ensure_2dZaccept_sparse)Zcheck_XZcheck_X_paramsr   r,   zSparse data was passedr.   r”   )rE   rF   rG   r!   r   r   r3   r4   Ú	TypeErrorr9   r5   r   rH   rI   )rò   r<   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sPJ ‚qPd S )NÚprecomputed©Zkernelr   r0   )r   r   rE   rF   rG   r   r7   Údotr¢   r9   rH   rI   Zpairwise_indices_r…   )Úclf_precomputedr<   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J ‚| dd… } |dd… }| jdksDJ ‚tjdd� | |¡}|jdksfJ ‚t|ƒ | |¡}|jdks„J ‚|j	D ]}|jdksŠJ ‚qŠt
|ƒ | |¡}|jdks¼J ‚|jdksÊJ ‚t|j	ƒdksÜJ ‚|j	D ]}|jdksâJ ‚qâ| | j }|jd	k�sJ ‚tjd
d� ||¡}|jdk�s4J ‚t|ƒ ||¡}|jdk�sTJ ‚|jdk�sdJ ‚t|j	ƒdk�sxJ ‚|j	D ]}|jdk�s~J ‚�q~t
|ƒ ||¡}	|	jdk�s¶J ‚|jdk�sÆJ ‚t|j	ƒdk�sÚJ ‚|	j	d jdk�sðJ ‚|	j	d jdk�sJ ‚|	j	d jdk�sJ ‚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   r0   r1   rP   )rE   rF   rG   r…   r   r   r9   Zn_features_in_r   rI   r   Z
n_classes_rH   r¢   )
r<   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  ¡ }| |ƒ}| ¡ jjr,J ‚| |ƒ}| ¡ jjsDJ ‚d S )Nrõ   rö   )r   r   Z__sklearn_tags__Z
input_tagsÚpairwise)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   rE   rF   rG   r7   r÷   r¢   r   r#   )
r  rø   r   r<   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é*   r0   r   rº   rb   )Úpr,   )r7   rY   ÚRandomStaterE   rF   rG   ÚcopyÚchoicer…   ru   ÚboolÚnanr   r   r   r9   r¥   )r  Úrngr<   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€   r0   )Zdtyper   r1   r0   N)
r7   r‚   Zint32r   r   r9   rs   rƒ   r…   r   )r  r<   r=   r:   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   r9   r#   r5   )r<   r=   rM   rÅ   r>   r>   r?   Ú)test_ovo_consistent_binary_classificationŽ  s    r  c                  C   sˆ   t  ¡ } ttdd�d�}d}d}tjt|d�� }| | j| j	¡ W d  ƒ n1 sT0    Y  t
|jjtƒspJ ‚|t|jjƒv s„J ‚dS )a  Check that we raise the proper AttributeError when the final estimator
    does not implement the `partial_fit` method, which is decorated with
    `available_if`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/28108
    r  r,   )Z	estimatorz9This 'OneVsRestClassifier' has no attribute 'partial_fit'z:'LogisticRegression' object has no attribute 'partial_fit'r.   N)r   rÏ   r   r   r3   r4   ÚAttributeErrorrV   rF   rG   Ú
isinstanceÚvalueÚ	__cause__Ústr)rE   rM   Z	outer_msgZ	inner_msgZ	exec_infor>   r>   r?   Ú)test_multiclass_estimator_attribute_errorž  s    .r  )}Úrer   Únumpyr7   r3   Zscipy.sparseÚsparserq   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.fixesr$   r%   r&   r'   r(   Zsklearn.utils.multiclassr)   r*   rÏ   rE   rY   r
  r  ZpermutationrG   ÚsizeÚpermrF   rJ   r@   rC   rO   r]   ra   rc   ÚmarkZparametrizer~   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  r  r  r‚   rƒ   r  r  r  r>   r>   r>   r?   Ú<module>   s¬   $	$þ
)$(-	5/	
	
Eÿ
ÿ
ÿ

