o
    \i+V                     @   sz
  d dl Z 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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/e0ej1ffddZ2g e2ej34dj5dddee-fdd dgdd ggd dgge2e*ee-fde2d dgdd gge2d d gd d gge2d 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e0dej)g dej1de)dgd gdggee)g dg dg de)g dej)g de6dej)g de6d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e0dej)g dg dgej1dge2g dg dgee e-ej.ej/e0ej1f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e6d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#e0dej)g d#ej1d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e6dgd'gd d(ge)d gd(ggej)d gd(ggej1dge)d d(gd(d ggej)d d(gd(d ggej1de)d d(ggge2d d(gd(d ggee e0ej1fde2d d(ggee e0ej1fdg gej)g ge6dd)gej)e)g e)g d*ge6de)g e)g d*gh d+ddhge7g d*e7d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Z8ej34dj5d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e0dej)g dej1d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e0dej)g dg dgej1d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#e0dej)g d#ej1d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j1dge)d d(gd(d ggej)d d(gd(d ggej1d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Z9h d+dd d,d$gd$gd,d%e7g d*dgZ:d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Z;d3d4 Z<d5d6 Z=d7d8 Z>d9d: Z?d;d< Z@ejAjBd=e ed>d?d@ ZCdAdB ZDdCdD ZEdEdF ZFdGdH ZGejABdIg dJdKdL ZHejABdMedNdO ZIdPdQ ZJdRdS ZKejABdTdUdVgdWdX ZLdS )Y    N)product)issparse)config_contextdatasets)ShuffleSplit)SVC)_get_namespace_device_dtype_ids)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/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/utils/tests/test_multiclass.py
<listcomp>7   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*   r0   r0   r0   r   r   r*   r   r   r   r*   )abc)r   r   r*   r*   )r   r0   r*   r0   r3   r4   r5   d)
r   r   r   r   r   r   r   r   r   r      abcdefgh㈵>      ?r   )r   r*   r/   >   r   r*   r/   r   r   r0         )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+   )r0   r   r*   )r   r*   r0   )r   r   r   )r   r   r   )r   r   r   r/   r7   r2   r   )r*   r   )r7   r7   )r7   r0   )r0   r7   )
pytestraises
ValueErrorr   r   rangenparangearrayonesr   r   r   r%   test_unique_labels  s&   &&&rO   c                  C   s   t t ddgf} d}tjt|d t|  W d   n1 s#w   Y  t d} t  t	d t|  W d   n1 sEw   Y  t d} t  t	d	t t|  W d   dS 1 siw   Y  dS )
zCheck that we raise a warning when the number of unique classes is greater than
    50% of the number of samples.

    We need to check that we don't raise if we have less than 20 samples.
       r   zJThe number of unique classes is greater than 50% of the number of samples.matchNr+   error   ignore)
rK   hstackrL   rG   warnsUserWarningr   warningscatch_warningssimplefilter)ymsgr   r   r%   +test_type_of_target_too_many_unique_classes*  s   







"r^   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)rA   r?   r>   )rD   rB   rC   r@   )EXAMPLESr   NON_ARRAY_LIKE_EXAMPLESrG   rH   rI   )formatr\   exampley_typer   r   r%   test_unique_labels_non_specificI  s"   


rd   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?   rA   r   r*   r3   r6   1r/   2)r   r_   rG   rH   rI   r   )mix_clf_formaty_multilabely_multiclassr   r   r%   test_unique_labels_mixed_typesa  s.   "rj   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!   rb   r   r%   r&     s    z&test_is_multilabel.<locals>.<listcomp>is_multilabel() should be )r_   itemsr   hasattrrK   asarrayndimr   kindshaper   r   r   r   r   r   toarray)groupgroup_examples	dense_exp
sparse_expexamples_sparseexmpl_sparser   rm   r%   test_is_multilabelz  s@   

r}   z#array_namespace, device, dtype_name)idsc              
   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_dispatchrn   ro   )	r
   ARRAY_API_EXAMPLESrp   rK   rr   r   rt   r   r   )array_namespacer   
dtype_namexprw   rx   ry   rb   r   r   r%   'test_is_multilabel_array_api_compliance  s    

r   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)rD   rB   rC   zUnknown label type: rQ   )r_   keysrG   rH   rI   r   )rc   rb   r]   r   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\).*rQ   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.)r_   rp   r   r`   rG   rH   rI   MULTILABEL_SEQUENCES)rw   rx   rb   	msg_regexr]   r   r   r%   test_type_of_target  s2   


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'rQ   )	rG   importorskiparraysSparseArrayrK   nanrH   rI   r   )pdr\   r]   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/   r0   r   r?   )r   r   r   r   rA   gffffff?g@r   rC   r   r   r   r>   r*   r/   r@   N)rG   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)rG   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   )r0   r*   r   r   )r*   r   r   r   )r   r*   r   r0   r*   r   r   r*   r/   r*   r/   r   r   r   r   r   r   )r   r   r*   r/   r0   r7   r   r   r*   r/   r7   r   r   r*   r/   r0   r7   )r   r<      r      )r<   r0   )ru   )r   r*   r0   )r   r*   r/   r   r   )r/   r/   r   r   )r:   UUUUUU?gUUUUUU?)r   r   r         ?)r          @r   r   r   r   )qq?r   qq?)r   r   r   )rK   rM   r   rJ   ru   r   )r   r\   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	t
||\}}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#   targetrK   dotTr   nextitersplitr   r   )clfclfpirisXr\   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?r:   r/   r1   )r   r   r   r:   )atol)r*   r   r*   r*   r   )axis)r*   r*   )r/   r*   c                    s4   g | ]}t t| gt | gd  qS rF   )r   rK   rM   )r    iconfidencesr   predictionsr   r%   r&   s  s    z.test_ovr_decision_function.<locals>.<listcomp>r0   gư>)rK   rM   r   r   r   argmaxrJ   )
dec_valuesvotesexpected_predictiondec_values_oner   r   r%   test_ovr_decision_functionV  s   ""r   
input_typelistrM   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   bz8Support for labels represented as bytes is not supportedrQ   )r   rG   rH   	TypeErrorr   )r   r   err_msgr   r   r%   !test_labels_in_bytes_format_error}  s
   
"r   )MrY   	itertoolsr   numpyrK   rG   scipy.sparser   sklearnr   r   sklearn.model_selectionr   sklearn.svmr   sklearn.utils._array_apir   r	   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   rM   multilabel_explicit_zerotupleboolintint8uint8floatfloat32r(   randomRandomStaterandintrE   	frozensetr_   r   r`   r   rO   r^   rd   rj   r}   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r%   <module>   s    	
	
	 $z$F

'
	

3'