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   r/var/www/html/eduruby.in/lip-sync/lip-sync-env/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arrayZonesr   r   r   r%   test_unique_labels  s&   &&&rN   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   ZhstackrL   rG   Z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   )formatrY   exampley_typer   r   r%   test_unique_labels_non_specificI  s"   


ra   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   )Zmix_clf_formatZy_multilabelZy_multiclassr   r   r%   test_unique_labels_mixed_typesa  s.   "rd   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>   Z	__array__r*   Zbiufr   r   c                    s   g | ]}| qS r   r   )r    r!   r_   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   Ztoarray)groupgroup_examples	dense_expZ
sparse_expZexamples_sparseZexmpl_sparser   re   r%   test_is_multilabelz  s@   

rq   z#array_namespace, device, dtype_name)Z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)Zarray_api_dispatchrf   rg   )	r
   ARRAY_API_EXAMPLESrh   rK   rj   r   rl   r   r   )Zarray_namespacers   Z
dtype_nameZxprn   ro   rp   r_   r   r   r%   'test_is_multilabel_array_api_compliance  s    

ru   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: rP   )r\   keysrG   rH   rI   r   )r`   r_   rZ   r   r   r%   !test_check_classification_targets  s   

rw   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\).*rP   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\   rh   r   r]   rG   rH   rI   MULTILABEL_SEQUENCES)rn   ro   r_   Z	msg_regexrZ   r   r   r%   test_type_of_target  s2   


ry   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'rP   )	rG   importorskipZarraysZSparseArrayrK   nanrH   rI   r   )pdrY   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.rz   )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   Z	DataFrame)r}   r   y_truer   r   r%   #test_type_of_target_pandas_nullable  s   
r   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.
    rz   )	r   r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   Zint64r   r   N)rG   r{   r   r   r   )r   r}   r   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 ]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   )rm   )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   rm   r   )r   rY   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  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 )NZprecomputed)Zkernelg      ?r   )Z	test_sizeZrandom_state)r   r   Z	load_irisr#   targetrK   dotTr   nextitersplitr   r   )ZclfZclfpZirisXrY   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   ) 7yAr   r   )r   r   g      )g      r   g      @)g      g?r:   r/   r1   )r   r   r   r:   )Zatol)r*   r   r*   r*   r   )Zaxis)r*   r*   )r/   r*   c                    s4   g | ]}t t| gt | gd  qS rF   )r   rK   rM   )r    iZconfidencesr   Zpredictionsr   r%   r&   s  s    z.test_ovr_decision_function.<locals>.<listcomp>r0   gư>)rK   rM   r   r   r   ZargmaxrJ   )Z
dec_valuesZvotesZexpected_predictionZ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 supportedrP   )r   rG   rH   	TypeErrorr   )r   r   err_msgr   r   r%   !test_labels_in_bytes_format_error}  s
   
"r   )MrV   	itertoolsr   numpyrK   rG   Zscipy.sparser   Zsklearnr   r   Zsklearn.model_selectionr   Zsklearn.svmr   Zsklearn.utils._array_apir   r	   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   rM   Zmultilabel_explicit_zerotupleboolintZint8Zuint8floatZfloat32r(   randomZRandomStaterandintrE   	frozensetr\   rt   r]   rx   rN   r[   ra   rd   rq   markZparametrizeru   rw   ry   r~   r   r   r   r   r   r   r   r   r   r%   <module>   s    	
	
	 $z$F

'
	

3'