o
    ?HhQ                     @   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   c/home/air/sanwanet/gpt-api/venv/lib/python3.10/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w   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 sw   Y  t t tt	dt	d W d    n1 sw   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nparangearrayonesr   r   r   r$   test_unique_labels  s&   &&&rN   c               
   C   s   dD ]} t |  D ]}t| qqtD ]}tt t| W d    n1 s(w   Y  qdD ]"}t | D ]}tt t| W d    n1 sLw   Y  q6q0d 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"   


rU   c               	   C   s  t td td td  } | D ]8\}}tt t|| W d    n1 s(w   Y  tt t|| W d    n1 sBw   Y  qtt tddggddgg W d    n1 scw   Y  tt tddg W d    n1 s~w   Y  tt tddgdd	gg W d    n1 sw   Y  tt tdd
gdd	gg W d    d S 1 sw   Y  d S )Nr=   r>   r@   r   r)   r2   r5   1r.   2)r   rO   rF   rG   rH   r   )mix_clf_formaty_multilabely_multiclassr   r   r$   test_unique_labels_mixed_types>  s.   "r[   c                     s   t  D ]u\} }| dk}|D ]j |ot }t s:t 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
| qMt rh   |t ksxJ d	 d
| qqd S )Nr=   	__array__r)   biufr   r   c                    s   g | ]}| qS r   r   )r   r    rS   r   r$   r%   f  s    z&test_is_multilabel.<locals>.<listcomp>is_multilabel() should be )rO   itemsr   hasattrrJ   asarrayndimr   kindshaper   r   r   r   r   r   toarray)groupgroup_examples	dense_exp
sparse_expexamples_sparseexmpl_sparser   r^   r$   test_is_multilabelW  sH   

rn   z#array_namespace, device, dtype_namec              
   C   s   t | |}t D ]O\}}|dk}|D ]D}t|jjdkr&tj||d}nt|}|j||d}tdd |t|ksHJ d|d| W d    n1 sRw   Y  qq	d S )	Nr=   fr   )deviceT)array_api_dispatchr_   r`   )	r	   ARRAY_API_EXAMPLESra   rJ   rc   r   re   r   r   )array_namespacerp   
dtype_namexprh   ri   rj   rS   r   r   r$   'test_is_multilabel_array_api_compliance~  s$   

rv   c               
   C   sz   t  D ]6} | dv r/t |  D ]}d}tjt|d t| W d    n1 s(w   Y  qqt |  D ]}t| q3qd S )N)rC   rA   rB   zUnknown label type: match)rO   keysrF   rG   rH   r   )rT   rS   msgr   r   r$   !test_check_classification_targets  s   

r{   c               	   C   s   t  D ]\} }|D ]}t|| ksJ d|| t|f q
qtD ]}d}tjt|d t| W d    n1 s;w   Y  q!tD ]}d}tjt|d t| W d    n1 s]w   Y  qCd S )Nz'type_of_target(%r) should be %r, got %rz6Expected array-like \(array or non-string sequence\).*rw   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.)rO   ra   r   rP   rF   rG   rH   MULTILABEL_SEQUENCES)rh   ri   rS   	msg_regexrz   r   r   r$   test_type_of_target  s0   	

r~   c                  C   sf   t d} | jdtjtjdtjg}d}t jt|d t| W d    d S 1 s,w   Y  d S )Npandasr   z1y cannot be class 'SparseSeries' or 'SparseArray'rw   )	rF   importorskiparraysSparseArrayrJ   nanrG   rH   r   )pdrR   rz   r   r   r$   !test_type_of_target_pandas_sparse  s   

"r   c                  C   s   t d} dD ]$}| jg d|d}t|dksJ | jg d|d}t|dks+J q| jdd	gd	dggd
d}t|dksAJ | jddgddggdd}t|dksVJ | jddgddggdd}t|dkskJ dS )z<Check that type_of_target works with pandas nullable dtypes.r   )Int32Float32)r   r   r)   r.   r/   r   r>   )r   r   r   r   r@   gffffff?g@r   rB   r   r   r   r=   r)   r.   r?   N)rF   r   Seriesr   	DataFrame)r   r   y_truer   r   r$   #test_type_of_target_pandas_nullable  s   
r   r   )Int64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.
    r   )	r   r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   int64r   r   N)rF   r   r   r   r   )r   r   r   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 ]8}t|| ||  t|| ||  t|| ||  t|	| ||  t|
| ||  t|| ||  qft|g d\}}}t|g d\}	}
}g dg ddgdgg}t|jd D ]8}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/   )rf   )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   rL   r   rI   rf   r   )r   rR   r"   indicesindptry_spclasses	n_classesclass_prior
classes_spn_classes_spclass_prior_spclasses_expectedn_classes_expectedclass_prior_expectedkr   r   r$   test_class_distribution  sP   

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 )Nprecomputed)kernelg      ?r   )	test_sizerandom_state)r   r   	load_irisr"   targetrJ   dotTr   listsplitr   r   )clfclfpirisXrR   KcvtraintestX_trainy_trainK_trainy_train2X_testy_testK_test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   ) 7yAr   r   )r   r   g      )g      r   g      @)g      g?r9   r.   r0   )r   r   r   r9   )atol)r)   r   r)   r)   r   )axis)r)   r)   )r.   r)   c                    s4   g | ]}t t| gt | gd  qS rE   )r   rJ   rL   )r   iconfidencesr   predictionsr   r$   r%   N  s    z.test_ovr_decision_function.<locals>.<listcomp>r/   gư>)rJ   rL   r   r   r   argmaxrI   )
dec_valuesvotesexpected_predictiondec_values_oner   r   r$   test_ovr_decision_function1  s   ""r   
input_typer   rL   c                 C   sN   t ddg| }d}tjt|d t| W d    d S 1 s w   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.rw   )r
   rF   warnsFutureWarningr   )r   r   err_msgr   r   r$   test_labels_in_bytes_formatY  s   
"r   )J	itertoolsr   numpyrJ   rF   scipy.sparser   sklearnr   r   sklearn.model_selectionr   sklearn.svmr   sklearn.utils._array_apir   sklearn.utils._testingr	   r
   r   r   r   sklearn.utils.estimator_checksr   sklearn.utils.fixesr   r   r   r   r   sklearn.utils.metaestimatorsr   sklearn.utils.multiclassr   r   r   r   r   r   rL   multilabel_explicit_zerotupleboolintint8uint8floatfloat32r'   randomRandomStaterandintrD   	frozensetrO   rr   rP   r|   rN   rU   r[   rn   markparametrizerv   r{   r~   r   r   r   r   r   r   r   r   r   r   r$   <module>   s    	
	
	 $z$F

'
	

3(