a
    hQ                     @   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j12d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j12d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   _/var/www/html/assistant/venv/lib/python3.9/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defgh㈵>      ?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 s0    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 s0    Y  qtt& tddggddgg W d    n1 s0    Y  tt tddg W d    n1 s0    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rt jdkrt jjdv rt j	d dkr fddt
t t t t D }|D ]$}|t|ksJ d	|d
| qt 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sJ d|d| W d    q&1 s0    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    q1 s0    Y  qd S )Nz'type_of_target(%r) should be %r, got %rz6Expected array-like \(array or non-string sequence\).*rh   zYou 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sJ | jddgddggdd}t|dksJ | jddgddggdd}t|dksJ 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|| ||  qt|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|| ||  qd 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sJ  fddtdD }t| |dd d S )N)r   r   r   )r   r   r   ) 7yAr   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   bzSupport 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(