a
    �ù»jÿS  ã                   @   sb
  d dl mZ d dlZd dl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 d d	lmZ d d
lmZmZmZmZmZ d dlmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& e 'd dgdd gg¡Z(d e(dd…d f< e)ee e e e ƒe*e+ej,ej-e.ej/ffdd„Z0g e0ej1 2d¡j3ddd�ee+fd�¢d dgdd gg‘d dgg‘e0e(ee+fd�¢e0d dgdd ggƒ¢e0d d gd d ggƒ¢e0d dggƒ¢ddgddgg‘e 'ddgddgg¡‘e 'ddgddgg¡‘ee 'ddgddgg¡ƒ‘g d¢e 'g d¢¡ej'g d¢ej,d�ej'g d¢ej-d�ej'g d¢e.d�ej'g d¢ej/d�e 'dgd gdgg¡ee 'g d¢¡ƒg d¢g d¢e 'g d¢¡ej'g d¢e4d�ej'g d¢e4d�gg d¢g d¢gdd gd!d"gge 'g d¢g d¢g¡ej'g d¢g d¢gej,d�ej'g d¢g d¢gej-d�ej'g d¢g d¢ge.d�ej'g d¢g d¢gej/d�ge0g d¢g d¢gee e+ej,ej-e.ej/fd�¢e 'dd gd!d"gg¡‘e 'dd gd!d"gg¡‘ej'dd gd!d"gge4d�‘e 'g d¢g¡‘ee 'g d¢g¡ƒ‘d dgddgg d ge 'g d#¢¡ej'g d#¢e*d�ej'g d#¢ej,d�ej'g d#¢ej-d�ej'g d#¢e.d�ej'g d#¢ej/d�e 'd gdgg¡ee 'd gdgg¡ƒddgdd$gdgdd gd%d&ge 'd%d&g¡dd gej'd%d&ge4d�gd'gd d(ge 'd gd(gg¡ej'd gd(ggej/d�ge 'd d(gd(d gg¡ej'd d(gd(d ggej/d�e 'd d(gg¡ge0d d(gd(d ggee e.ej/fd�¢e0d d(ggee e.ej/fd�¢g gej'g ge4d�d)gej'e 'g ¡e 'g d*¢¡ge4d�e 'g ¡e 'g d*¢¡gh d+£ddhge5g d*¢ƒe5ddgƒgdd d,œd dige 'd ¡e 'g g g¡e 'd dgddggd-d$gd.d/ggg¡gd0œZ6ej1 2d¡j3ddd�d dgdd ggd dgge(d d gd d ggddgddgge 'ddgddgg¡e 'ddgddgg¡ee 'ddgddgg¡ƒg	g d¢e 'g d¢¡ej'g d¢ej,d�ej'g d¢ej-d�ej'g d¢e.d�ej'g d¢ej/d�e 'dgd gdgg¡ee 'g d¢¡ƒg d¢g	g d¢g d¢ge 'g d¢g d¢g¡ej'g d¢g d¢gej,d�ej'g d¢g d¢gej-d�ej'g d¢g d¢ge.d�ej'g d¢g d¢gej/d�e 'g d¢g¡ee 'g d¢g¡ƒgd dgddgg d ge 'g d#¢¡ej'g d#¢e*d�ej'g d#¢ej,d�ej'g d#¢ej-d�ej'g d#¢e.d�ej'g d#¢ej/d�e 'd gdgg¡ee 'd gdgg¡ƒddgdd$ggd'gd d(ge 'd gd(gg¡ej'd gd(ggej/d�ge 'd d(gd(d gg¡ej'd d(gd(d ggej/d�e 'd d(gg¡gg gd)ge 'd ¡e 'd dgddggd-d$gd.d/ggg¡gd0œZ7h d+£dd d,œd$gd$gd,œd%e5g d*¢ƒdgZ8dgdgd dggg d1¢ej'g ddggd2d�eej'g ddggd2d�ƒgZ9d3d4„ Z:d5d6„ Z;d7d8„ Z<d9d:„ Z=ej> ?d;eƒ ¡d<d=„ ƒZ@d>d?„ ZAd@dA„ ZBdBdC„ ZCdDdE„ ZDej> ?dFg dG¢¡dHdI„ ƒZEej> ?dJe¡dKdL„ ƒZFdMdN„ ZGdOdP„ ZHej> ?dQdRdSg¡dTdU„ ƒZIdS )Vé    )ÚproductN)Úissparse)Úconfig_contextÚdatasets)ÚShuffleSplit)ÚSVC)Ú)yield_namespace_device_dtype_combinations)Ú_array_api_for_testsÚ_convert_containerÚassert_allcloseÚassert_array_almost_equalÚassert_array_equal)Ú_NotAnArray)ÚCOO_CONTAINERSÚCSC_CONTAINERSÚCSR_CONTAINERSÚDOK_CONTAINERSÚLIL_CONTAINERS)Ú_safe_split)Ú_ovr_decision_functionÚcheck_classification_targetsÚclass_distributionÚis_multilabelÚtype_of_targetÚunique_labelsé   c                    s   ‡ ‡fdd„|D ƒS )Nc                    s"   g | ]}ˆD ]}|ˆ |d �‘qqS )©Údtype© )Ú.0Úsparse_containerr   ©ÚdataÚdtypesr   úIE:\soccer\ml_env\Lib\site-packages\sklearn/utils/tests/test_multiclass.pyÚ
<listcomp>3   s   þz$_generate_sparse.<locals>.<listcomp>r   )r"   Úsparse_containersr#   r   r!   r$   Ú_generate_sparse(   s    þr'   é*   é   )é
   r*   )Úsize)r&   r#   éÿÿÿÿéýÿÿÿé   )
r   r   r)   r)   r   é   r)   r/   r/   r/   ©r   r   r)   r   ©r   r   r)   )ÚaÚbÚc)r   r   r)   r)   )r   r/   r)   r/   r2   r3   r4   Úd)
r   r   r   r   r   r   r   r   r   r   é   ÚabcÚdefgñhãˆµøä>ç      à?r   )r   r)   r.   >   r   r)   r.   ©r   r   r/   é   é   )úmultilabel-indicatorÚ
multiclassúmulticlass-multioutputÚbinaryÚ
continuousúcontinuous-multioutputÚunknown)r   r)   r:   Úobjectc                   C   s®  t  t¡� tƒ  W d   ƒ n1 s&0    Y  tttdƒƒt d¡ƒ ttt d¡ƒt d¡ƒ ttg d¢ƒt g d¢¡ƒ ttt g d¢g d¢g d¢g¡ƒt d¡ƒ ttt g d¢g d¢g¡ƒt d¡ƒ ttg d¢tdƒƒt d¡ƒ ttd	d
dƒt d¡ƒ t  t¡�$ tg d¢t 	d¡ƒ W d   ƒ n1 �s<0    Y  t  t¡�& tt 	d¡t 	d¡ƒ W d   ƒ n1 �s~0    Y  ttt 	d¡t 	d¡ƒt d¡ƒ d S )Nr*   )r/   r   r)   )r   r)   r/   )r   r   r   )r   r   r   )r   r   r   r.   r6   r1   ©r   )r)   r   )r6   r6   )r6   r/   )r/   r6   )
ÚpytestÚraisesÚ
ValueErrorr   r   ÚrangeÚnpZarangeÚarrayZonesr   r   r   r$   Útest_unique_labels  s     $&ÿ&46rL   c               
   C   sª   dD ]} t |  D ]}t|ƒ qqtD ]6}t t¡� t|ƒ W d   ƒ q$1 sP0    Y  q$dD ]D}t | D ]6}t t¡� t|ƒ W d   ƒ ql1 s˜0    Y  qlq`d S )N)r@   r>   r=   )rC   rA   rB   r?   )ÚEXAMPLESr   ÚNON_ARRAY_LIKE_EXAMPLESrF   rG   rH   )ÚformatÚyÚexampleÚy_typer   r   r$   Útest_unique_labels_non_specific&  s    (rS   c               	   C   sŠ  t td td td  ƒ} | D ]p\}}t t¡� t||ƒ W d   ƒ n1 sP0    Y  t t¡� t||ƒ W d   ƒ q1 s„0    Y  qt t¡�& tddggddggƒ W d   ƒ n1 sÆ0    Y  t t¡� tddgƒ W d   ƒ n1 sü0    Y  t t¡�$ tddgdd	ggƒ W d   ƒ n1 �s<0    Y  t t¡�$ tdd
gdd	ggƒ W d   ƒ n1 �s|0    Y  d S )Nr=   r>   r@   r   r)   r2   r5   Ú1r.   Ú2)r   rM   rF   rG   rH   r   )Zmix_clf_formatZy_multilabelZy_multiclassr   r   r$   Útest_unique_labels_mixed_types>  s     ÿ(*4*4rV   c                     sø   t  ¡ D ]ê\} }| dk}|D ]Ô‰ |o*tˆ ƒ}tˆ ƒsttˆ dƒrÀt ˆ ¡jdkrÀt ˆ ¡jjdv rÀt ˆ ¡j	d dkrÀ‡ fdd„t
t t t t D ƒ}|D ]$}|t|ƒksšJ d	|›d
|› �ƒ‚qštˆ ƒrÐˆ  ¡ ‰ |tˆ ƒksJ d	ˆ ›d
|› �ƒ‚qqd S )Nr=   Z	__array__r)   Zbiufr   r   c                    s   g | ]}|ˆ ƒ‘qS r   r   )r   r    ©rQ   r   r$   r%   f  s   ÿz&test_is_multilabel.<locals>.<listcomp>úis_multilabel(ú) should be )rM   Úitemsr   ÚhasattrrJ   ÚasarrayÚndimr   ÚkindÚshaper   r   r   r   r   r   Ztoarray)ÚgroupÚgroup_examplesÚ	dense_expZ
sparse_expZexamples_sparseZexmpl_sparser   rW   r$   Útest_is_multilabelW  sJ    ÿþýü
ÿþýüý
ÿþÿþrc   z#array_namespace, device, dtype_namec              
   C   s¶   t | |ƒ}t ¡ D ]ž\}}|dk}|D ]ˆ}t |¡jjdkrLtj||d�}n
t |¡}|j||d�}tdd��0 |t|ƒks�J d|›d|› �ƒ‚W d   ƒ q&1 s¤0    Y  q&qd S )	Nr=   Úfr   )ÚdeviceT)Zarray_api_dispatchrX   rY   )	r	   ÚARRAY_API_EXAMPLESrZ   rJ   r\   r   r^   r   r   )Zarray_namespacere   Z
dtype_nameZxpr`   ra   rb   rQ   r   r   r$   Ú'test_is_multilabel_array_api_compliance~  s    

ÿþrg   c               
   C   sz   t  ¡ D ]l} | dv r^t |  D ]>}d}tjt|d�� t|ƒ W d   ƒ q1 sP0    Y  qqt |  D ]}t|ƒ qfqd S )N)rC   rA   rB   zUnknown label type: ©Úmatch)rM   ÚkeysrF   rG   rH   r   )rR   rQ   Úmsgr   r   r$   Ú!test_check_classification_targets”  s    *rl   c               	   C   sÊ   t  ¡ D ]4\} }|D ]&}t|ƒ| ksJ d|| t|ƒf ƒ‚qqtD ]>}d}tjt|d�� t|ƒ W d   ƒ qB1 sv0    Y  qBtD ]>}d}tjt|d�� t|ƒ W d   ƒ q†1 sº0    Y  q†d S )Nz'type_of_target(%r) should be %r, got %rz6Expected array-like \(array or non-string sequence\).*rh   zœYou appear to be using a legacy multi-label data representation. Sequence of sequences are no longer supported; use a binary array or sparse matrix instead.)rM   rZ   r   rN   rF   rG   rH   ÚMULTILABEL_SEQUENCES)r`   ra   rQ   Z	msg_regexrk   r   r   r$   Útest_type_of_target   s&    
ÿýþ(ÿrn   c                  C   sd   t  d¡} | j dtjtjdtjg¡}d}t jt|d�� t|ƒ W d   ƒ n1 sV0    Y  d S )NÚpandasr   z1y cannot be class 'SparseSeries' or 'SparseArray'rh   )	rF   ÚimportorskipZarraysZSparseArrayrJ   ÚnanrG   rH   r   )ÚpdrP   rk   r   r   r$   Ú!test_type_of_target_pandas_sparseº  s
    
rs   c                  C   sÚ   t  d¡} dD ]H}| jg d¢|d�}t|ƒdks4J ‚| jg d¢|d�}t|ƒdksJ ‚q| jdd	gd	dggd
d�}t|ƒdks‚J ‚| jddgddggdd�}t|ƒdks¬J ‚| jddgddggdd�}t|ƒdksÖJ ‚dS )z<Check that type_of_target works with pandas nullable dtypes.ro   )ÚInt32ÚFloat32)r   r   r)   r.   r/   r   r>   )r   r   r   r   r@   gffffffö?gÍÌÌÌÌÌ@ru   rB   r   r   rt   r=   r)   r.   r?   N)rF   rp   ÚSeriesr   Z	DataFrame)rr   r   Úy_truer   r   r$   Ú#test_type_of_target_pandas_nullableÃ  s    
rx   r   )ZInt64ZFloat64Úbooleanc                 C   sJ   t  d¡}|jg d¢| d�}|jg d¢dd�}t||ƒ}t|ddgƒ dS )	zgChecks that unique_labels work with pandas nullable dtypes.

    Non-regression test for gh-25634.
    ro   )	r   r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   Zint64r   r   N)rF   rp   rv   r   r   )r   rr   rw   Zy_predictedÚlabelsr   r   r$   Ú"test_unique_labels_pandas_nullableØ  s
    

r{   Úcsc_containerc              	   C   s  t  g d¢g d¢g d¢g d¢g d¢g d¢g¡}t  g d¢¡}t  g d¢¡}t  g d¢¡}| |||fd	d
�}t|ƒ\}}}t|ƒ\}	}
}g d¢g d¢dgdgg}g d¢}g d¢g d¢dgdgg}t|jd ƒD ]p}t|| || ƒ t|| || ƒ t|| || ƒ t|	| || ƒ t|
| || ƒ t|| || ƒ qÌt|g d¢ƒ\}}}t|g d¢ƒ\}	}
}g d¢g d¢dgdgg}t|jd ƒD ]r}t|| || ƒ t|| || ƒ t|| || ƒ t|	| || ƒ t|
| || ƒ t|| || ƒ �qŒd S )N)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/   r6   r   r   r)   r.   r6   r   r   r)   r.   r/   r6   )r   r;   é   r}   é   )r;   r/   )r_   )r   r)   r/   )r   r)   r.   r   r   )r.   r.   r   r   )r9   çUUUUUUÕ?gUUUUUUÅ?)r   r   r   ç      ð?)r€   ç       @r€   r�   r€   r�   )çÇqÇqÜ?r   çÇqÇqÌ?)rƒ   r‚   r   )rJ   rK   r   rI   r_   r   )r|   rP   r"   ÚindicesZindptrZy_spÚclassesÚ	n_classesZclass_priorZ
classes_spZn_classes_spZclass_prior_spZclasses_expectedZn_classes_expectedZclass_prior_expectedÚkr   r   r$   Útest_class_distributionç  sN    úÿÿ
ÿ
rˆ   c                  C   sâ   t ƒ } t dd�}t ¡ }|j|j }}t ||j¡}tddd�}t	| 
|¡ƒd \}}t| |||ƒ\}	}
t||||ƒ\}}t|t |	|	j¡ƒ t|
|ƒ t| ||||ƒ\}}t|||||ƒ\}}t|t ||	j¡ƒ t||ƒ d S )NZprecomputed)Zkernelg      Ð?r   )Z	test_sizeZrandom_state)r   r   Z	load_irisr"   ÚtargetrJ   ÚdotÚTr   ÚlistÚsplitr   r   )ZclfZclfpZirisÚXrP   ÚKZcvÚtrainÚtestZX_trainZy_trainZK_trainZy_train2ZX_testZy_testZK_testZy_test2r   r   r$   Ú'test_safe_split_with_precomputed_kernel  s    

r’   c                     sæ   t  g d¢g d¢g d¢g d¢g¡‰t  g d¢g d¢g d¢g d¢g¡‰ d‰tˆˆ ˆƒ} t  g d¢g d	¢g d¢g d¢g¡}t|| d
d� t  g d¢¡}tt j| dd�|ƒ | d | d ksºJ ‚‡ ‡‡fdd„tdƒD ƒ}t| |dd� d S )N)r   r   r   )r   r   r   )ç €à7yÃAÃr   r“   )r€   r�   g      À)g      Àr�   g      @)g      à¿gš™™™™™É?r9   r.   r0   )r   r   r   r9   )Zatol)r)   r   r)   r)   r   )Zaxis)r)   r)   )r.   r)   c                    s4   g | ],}t t ˆ| g¡t ˆ | g¡ˆƒd  ‘qS rE   )r   rJ   rK   )r   Úi©Zconfidencesr†   Zpredictionsr   r$   r%   N  s   ýÿþz.test_ovr_decision_function.<locals>.<listcomp>r/   g�íµ ÷Æ°>)rJ   rK   r   r   r   ZargmaxrI   )Z
dec_valuesZvotesZexpected_predictionZdec_values_oner   r•   r$   Útest_ovr_decision_function1  s    "ÿ"ür–   Ú
input_typerŒ   rK   c                 C   sL   t ddg| ƒ}d}tjt|d�� t|ƒ W d   ƒ n1 s>0    Y  d S )Nó   aó   bz‡Support for labels represented as bytes is deprecated in v1.5 and will error in v1.7. Convert the labels to a string or integer format.rh   )r
   rF   ZwarnsÚFutureWarningr   )r—   r‰   Úerr_msgr   r   r$   Útest_labels_in_bytes_formatY  s
    ÿrœ   )JÚ	itertoolsr   ÚnumpyrJ   rF   Zscipy.sparser   Zsklearnr   r   Zsklearn.model_selectionr   Zsklearn.svmr   Zsklearn.utils._array_apir   Zsklearn.utils._testingr	   r
   r   r   r   Zsklearn.utils.estimator_checksr   Zsklearn.utils.fixesr   r   r   r   r   Zsklearn.utils.metaestimatorsr   Zsklearn.utils.multiclassr   r   r   r   r   r   rK   Zmultilabel_explicit_zeroÚtupleÚboolÚintZint8Zuint8ÚfloatZfloat32r'   ÚrandomZRandomStateÚrandintrD   Ú	frozensetrM   rf   rN   rm   rL   rS   rV   rc   ÚmarkZparametrizerg   rl   rn   rs   rx   r{   rˆ   r’   r–   rœ   r   r   r   r$   Ú<module>   sâ   	ÿþýüÿ÷
ýýø	÷
ÿöóòñïîíìóùýøóòñðïìüýýü	ý÷ $ðœz÷÷øòüý$üÄF
ú
ü'þ
	

3(