o
    \i)d                  
   @   s~  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	m
Z
mZmZmZmZ d dlmZmZmZ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  e! Z"d
d Z#dd Z$dd Z%dd Z&ej'(dg dej'(dddgdd Z)dd Z*ej'(dedd Z+ej'j(dej,g dd d!ej,g d"d d!ej,d#gd d!fej,g d$e-d!ej,g d%e-d!ej,d&ge-d!fe,g d$e,g d%e,d&gfgg d'd(d)d* Z.d+d, Z/ej'(dd-d.gd/d0 Z0d1d2 Z1ej'j(d3ej,g dd d!ej,g d$e-d!e,g d$gg d'd(d4d5 Z2d6d7 Z3ej'(ded8d9 Z4d:d; Z5d<d= Z6d>d? Z7d@dA Z8dBdC Z9dDdE Z:dFdG Z;dHdI Z<dJdK Z=dLdM Z>dNdO Z?dPdQ Z@dRdS ZAej'(dTej,ge e e e e dUdV ZBdWdX ZCej'(dedYdZ ZDd[d\ ZEej'(d]e
 e	 e gd^d_ ZFej'j(d`e ed(ej'(dae,g de,g dbe,g dcgddde ZGdS )f    N)issparse)config_contextdatasets)LabelBinarizerLabelEncoderMultiLabelBinarizer_inverse_binarize_multiclass_inverse_binarize_thresholdinglabel_binarize)_convert_to_numpy_get_namespace_device_dtype_idsget_namespace)yield_namespace_device_dtype_combinations)_array_api_for_testsassert_array_equal)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS)type_of_target)_to_object_arrayc                 C   s   t | dr	|  } | S )Ntoarray)hasattrr   a r   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/preprocessing/tests/test_label.pyr   %   s   
r   c                  C   s  g d} t dd}tg dgj}|| }t|jdg t|| t|||  t dd}|| }t|s;J t|jdg t||	  t||	 |  t dd}g d} tg dgj}|| }t|jd	dg t|| td
dgdd
gdd
gd
dgg}t|||  g d} tg dg dg dg dg dg}|| }t|jg d t|| t|||  d S )N)posr   r   r   Fsparse_outputr   r   r   r   r   T)negr   r   r"   r      r$   r   r"   r$   r   )spamhameggsr&   0r   r   r   r$   r   r   r$   r   r   r$   r   r   r$   r   r   r   )r(   r'   r&   r%   )
r   nparrayTfit_transformr   classes_inverse_transformr   r   )inplbexpectedgot	to_invertr   r   r   test_label_binarizer+   s:   







" 

r8   c               	   C   s   t  } tg dg dg dg}| g d}t|| tg dg dg dg dg dg dg}| g d}t|| d S )Nr$   r   r   r   r$   r   r   r   r$   )bder   r   r   )r   r<   cr=   r>   f)r   r-   r.   r0   r   	transform)r4   r5   r6   r   r   r   "test_label_binarizer_unseen_labelsT   s   
&rC   c                  C   s   t ddd} tg d}tg dgj}| |}t|| t| || t ddd} tg d}tg dg d	g d
g d	g dg}| |}t|| t| || d S )Nr   	neg_label	pos_labelr#   )rD   r   r   rD      )   rH   r$   rH   r   )rD   rD   rD   rH   )rD   rD   rH   rD   )rD   rH   rD   rD   )rH   rD   rD   rD   )r   r-   r.   r/   r0   r   r2   )r4   r3   r5   r6   r   r   r   'test_label_binarizer_set_label_encodingb   s&   


	
rJ   dtype)Int64Float64booleanunique_firstTFc                 C   sX   t d}|jg d| d}|r| }t |}|ddg}t|dgdgg dS )ziChecks that LabelBinarizer works with pandas nullable dtypes.

    Non-regression test for gh-25637.
    pandas)	r$   r   r   r$   r   r$   r$   r   r$   rK   r$   r   N)pytestimportorskipSeriesuniquer   fitrB   r   )rK   rO   pdy_truer4   y_outr   r   r   $test_label_binarizer_pandas_nullable~   s   
rZ   c                  C   s  t g d} t | }g d}d}tjt|d || W d    n1 s*w   Y  t }d}tjt|d |g  W d    n1 sKw   Y  tjt|d |g  W d    n1 sgw   Y  g d}d}tdd	d
}tjt|d || W d    n1 sw   Y  d}tddd
}tjt|d || W d    n1 sw   Y  d}td	ddd}tjt|d || W d    n1 sw   Y  g d	dgdgg ddgg}d}tjt|d t 	| W d    n	1 sw   Y  d}tjt|d t
t g dg dgdg ddd W d    n	1 s2w   Y  d}tjt|d t t d	dgdd	gg W d    n	1 s[w   Y  tjt|d tt d	dgdd	ggg dd W d    d S 1 sw   Y  d S )Nr!   )rH   rI   )r   )r   rH   z@You appear to be using a legacy multi-label data representation.matchz.This LabelBinarizer instance is not fitted yet)r   r$   r   r$   z3neg_label=2 must be strictly less than pos_label=1.rH   r$   rE   z3neg_label=2 must be strictly less than pos_label=2.zqSparse binarization is only supported with non zero pos_label and zero neg_label, got pos_label=2 and neg_label=1TrF   rG   r    rI   )r   r$   rI   z?You appear to be using a legacy multi-label data representationz!output_type='binary', but y.shaper$   rH   rI   )rH   r$   rI   binaryr   youtput_typeclasses	thresholdz@Multioutput target data is not supported with label binarizationrd   )r-   r.   r   rV   rR   raises
ValueErrorrB   r2   r0   r	   r
   )	one_classr4   multi_labelerr_msginput_labelsy_seq_of_seqsr   r   r   test_label_binarizer_errors   sj   	 $$rn   csr_containerc                 C   s   d}t jt|d t| ddgddggdddgdd W d    n1 s&w   Y  d}t jt|d t| ddgddggdg d	dd W d    d S 1 sRw   Y  d S )
Nzfoo format is not supportedr\   r$   rH   foor   ra   zAThe number of class is not equal to the number of dimension of y.r_   )rR   rg   rh   r	   )ro   rk   r   r   r   "test_label_binarizer_sparse_errors   s$   	"rq   zvalues, classes, unknown)rH   r$   rI   r$   rI   int64rQ   r_      )r<   r   r@   r   r@   r   r<   r@   r=   )rr   objectstr)idsc                 C   s   t  }||  t|j| t|| g d t|g d|  t  }|| }t|g d tjt	dd || W d    d S 1 sIw   Y  d S )N)r$   r   rH   r   rH   zunseen labelsr\   )
r   rV   r   r1   rB   r2   r0   rR   rg   rh   )valuesrd   unknownleretr   r   r   test_label_encoder   s   

"r|   c                  C   s   t  } | g d t| jg d t| g dg d t| g dg d tt | ddg W d    d S 1 sBw   Y  d S )Nr$   r$   rs      r   )r   r   r$   rs   r~   )r   r$   rs   rs   r~   r   r   )r$   rH   rI   rI   rs   r   r   r      )	r   rV   r   r1   rB   r2   rR   rg   rh   )rz   r   r   r    test_label_encoder_negative_ints  s   "r   rv   ru   c                 C   s`   t  }|tjddg| d d}tjt|d |d W d    d S 1 s)w   Y  d S )NappleorangerQ   zshould be a 1d arrayr\   )r   rV   r-   r.   rR   rg   rh   rB   )rK   rz   msgr   r   r    test_label_encoder_str_bad_shape  s   "r   c                  C   s>  t  } tt | g  W d    n1 sw   Y  tt | g  W d    n1 s2w   Y  t  } | g d d}tjt|d | dg W d    n1 s[w   Y  tjt|d | g d W d    n1 syw   Y  d}tjt|d | d W d    d S 1 sw   Y  d S )N)r$   rH   rI   r   r$   z!contains previously unseen labelsr\   rD   )rD   z should be a 1d array.+shape \(\) )r   rR   rg   rh   rB   r2   rV   )rz   r   r   r   r   test_label_encoder_errors  s(   "r   rx   c                 C   sH   t  }||  |g }ttg | |g }ttg | d S )N)r   rV   rB   r   r-   r.   r2   )rx   rz   transformedinverse_transformedr   r   r   test_label_encoder_empty_array4  s   



r   c                  C   s@  dd dd dd g} t g dg dg dg}| d  }d	D ]}}| D ]x}t|d
}|| }t||ks9J |rI|jj|jjksEJ | }t	|| t	g d|j
 |||ks_J t|d
}|| | }t||ksvJ |r|jj|jjksJ | }t	|| t	g d|j
 |||ksJ q$q d S )Nc                   S      g dS Nr[   r$   )r$   rH   r   r   r   r   r   <lambda>K      z9test_sparse_output_multilabel_binarizer.<locals>.<lambda>c                   S      ddhdhddhfS NrH   rI   r$   r   r   r   r   r   r   L      c                   S      t t dt dddhgS Nr[   r   r$   rH   iterr   r   r   r   r   M      r   r$   r$   r9   r$   r$   r   r   TFr   r_   )r-   r.   r   r0   r   indicesrK   indptrr   r   r1   r2   rV   rB   )inputsindicator_matinverser    r3   mlbr6   r   r   r   'test_sparse_output_multilabel_binarizerH  s8   




r   c              
   C   s   t t dt dddhg}tdd}|| tt || tg dg dg d	g W d    d S 1 s;w   Y  d S )
Nr[   r   r$   rH   Fr   r   )rH   r   r   r   )	r   r   rV   rR   rg   rh   r2   r-   r.   )ro   r3   r   r   r   r   .test_sparse_output_multilabel_binarizer_errorsm  s   

"r   c                  C   s   dd dd dd g} t g dg dg dg}| d  }| D ]D}t }|| }t|| tg d	|j |||ksAJ t }|| | }t|| tg d	|j |||ksdJ q d S )
Nc                   S   r   r   r   r   r   r   r   r   {  r   z+test_multilabel_binarizer.<locals>.<lambda>c                   S   r   r   r   r   r   r   r   r   |  r   c                   S   r   r   r   r   r   r   r   r   }  r   r   r9   r   r   r_   )	r-   r.   r   r0   r   r1   r2   rV   rB   )r   r   r   r3   r   r6   r   r   r   test_multilabel_binarizerx  s$   


r   c                  C   sF   t  } ddgdgg g}tddgddgddgg}t| || d S )Nr$   rH   r   )r   r-   r.   r   r0   )r   rb   Yr   r   r   &test_multilabel_binarizer_empty_sample  s   r   c                  C   s   t  } ddgg}tddgddgg}d}tjt|d | |ddgddgg}W d    n1 s5w   Y  tg dg dg}t g d	d
} tjt|d | |ddgddgg}W d    n1 slw   Y  t|| d S )Nr$   rH   r   zunknown class.* will be ignoredr\   rs   r9   r:   r_   rf   )	r   r-   r.   rR   warnsUserWarningrV   rB   r   )r   rb   r   warning_messagematrixr   r   r   'test_multilabel_binarizer_unknown_class  s   
r   c                  C   sF  g d} t g dg dg dg}tg dd}t|| | t|jg d tg dd}t|| | | t|jg d tg dd}t|| t dgdgdgg|f t|jg d t	| } tg dd}t|| | | d	}tg d
d}t
jt|d ||  W d    d S 1 sw   Y  d S )Nr   r   r9   r$   r   r$   r$   rI   rH   rf   )rs   r$   rI   rH   r   ztThe classes argument contains duplicate classes. Remove these duplicates before passing them to MultiLabelBinarizer.)r$   rI   rH   rI   r\   )r-   r.   r   r   r0   r1   rV   rB   hstackr   rR   rg   rh   )r3   r   r   rk   r   r   r   'test_multilabel_binarizer_given_classes  s,    "r   c                  C   s|   g d} t g dg dg dg}t g dg dg dg}tg dd}t|| | g d|_t|| | d S )	Nr   r   r9   r   r   r   rf   r_   )r-   r.   r   r   r0   rd   )r3   r   indicator_mat2r   r   r   r   (test_multilabel_binarizer_multiple_calls  s   
r   c                  C   s   dgdgdgg} t g dg dg dg}t }t|| | t|||  t }t|| | | t|||  d S )Nr$   r   rH   r:   r9   r;   )r-   r.   r   r   r0   r2   rV   rB   r3   r   r   r   r   r   .test_multilabel_binarizer_same_length_sequence  s   r   c                  C   s@  t g d} g dg dfg dg dfg d| fg}tg dg dg d	g}|D ]N\}}t }tj|td
}t||| t|j| tj||td
}t|| t }t|	|
|| t|j| tj||td
}t|| q+t }tt |i i ddifg W d    d S 1 sw   Y  d S )N)r   rH   rI   ))23)1)r   r   )r   r   r   ))r<   r@   r   )r   r<   rt   ))r   r   )r   )r   r   r   r9   r   rQ   r   r<   )r   r-   r.   r   ru   r   r0   r1   r2   rV   rB   rR   rg   	TypeError)tuple_classesr   r   r3   rd   r   indicator_mat_invr   r   r   ,test_multilabel_binarizer_non_integer_labels  s,   

"r   c                  C   s0   dg} t ddgg}t }t|| | d S )Nr$   r$   r$   r   r$   )r-   r.   r   r   r0   r   r   r   r   $test_multilabel_binarizer_non_unique  s   r   c                  C   s  dg} t  }||  tt |tddgg W d    n1 s&w   Y  |tddgg |tddgg |tddgg tt |tdgg W d    n1 sfw   Y  tt |tg dg W d    d S 1 sw   Y  d S )Nr   r$   rI   r   r$   r$   r$   )r   r0   rR   rg   rh   r2   r-   r.   )r3   r   r   r   r   ,test_multilabel_binarizer_inverse_validation  s   
"r   c                  C   s   t ddgg dd} tg dg dg}t| | t ddgg dd} tg dg dg}t| | t g d	g d
d} tg dg dg dg dg}t| | d S )Nr$   r   )r$   rH   rs   r   rf   r,   r)   )r$   r   rs   rH   r+   )r   r$   rH   rI   )rI   rH   r   r$   r*   )r
   r-   r.   r   )outr5   r   r   r   $test_label_binarize_with_class_order  s   

"r   c              	   C   s>  dD ]}|dks|dkr-|r-t t t| ||||d W d    n1 s'w   Y  qt| ||||d}tt|| t||ksEJ t| }|dkrTt||d}nt	||||| d d}tt|t|  t
|||d}	|	| }tt|| t||ksJ |	|}
tt|
t|  t|
t| ksJ qd S )	Nr   r   rd   rF   rG   r    
multiclassrf   g       @)rc   rd   re   r^   )rR   rg   rh   r
   r   r   r   r   r   r	   r   r0   r2   )rb   rd   rG   rF   r5   r    	binarizedy_typeinversedr4   inverse_outputr   r   r   check_binarized_results-  sR   


r   c                  C   s   g d} ddg}d}d}t ddgddgddggd d df d}t| |||| g d} ddg}d}d}t ddgddgddggd d df d}t| |||| d S )Nr:   r   r$   rH   r   )r   r$   rI   )r-   r.   reshaper   rb   rd   rG   rF   r5   r   r   r   test_label_binarize_binary`  s   ..r   c                  C   sx   g d} g d}d}d}dt d }t| |||| tt t| |d|dd W d    d S 1 s5w   Y  d S )Nr   r$   rH   rH   r   rI   r   Tr   )r-   eyer   rR   rg   rh   r
   r   r   r   r   test_label_binarize_multiclasss  s   
"r   arr_typec                 C   s   t g dg dg dg}g d}d}d}|| }| |}t||||| tt t||d|dd	 W d    d S 1 s@w   Y  d S )
Nr:   r   r?   r   rH   r   r   Tr   )r-   r.   r   rR   rg   rh   r
   )r   y_indrd   rG   rF   r5   rb   r   r   r   test_label_binarize_multilabel  s   

"r   c                   C   s   t t tddgddgddd W d    n1 sw   Y  t jtdd tddgddgd	 W d    n1 s=w   Y  t jtd
d tddggg dd	 W d    d S 1 s`w   Y  d S )Nr   rH   r$   )rd   rG   rF   zcontinuous target data is not r\   g333333?g@rf   zmismatch with the labelsrI   r_   )rR   rg   rh   r
   r   r   r   r   !test_invalid_input_label_binarize  s   "r   c                 C   s>   t | g dg dg dgtd}t|tg d d S )Nr:   )r   r   r   r?   rI   r   )r   r-   aranger   r.   )ro   r6   r   r   r    test_inverse_binarize_multiclass  s    r   c                  C   s8   t  } | dddtjg | tjg}t|dg dS )z]Check that label encoder encodes nans in transform.

    Non-regression test for #22628.
    r   r<   rH   N)r   rV   r-   nanrB   r   )rz   y_transr   r   r   test_nan_label_encoder  s   r   encoderc                 C   s:   t | drJ | jg dd}| g d}t|| dS )zxCheck that label encoders do not define set_output and work with y as a kwarg.

    Non-regression test for #26854.
    
set_outputrt   )rb   N)r   r0   r   )r   y_encoded_with_kwargy_encoded_positionalr   r   r   *test_label_encoders_do_not_have_set_output  s   r   zarray_namespace, device, dtyperb   r}   )rI   r~   	   r~   r   rI   c                 C   sz  t ||}|j| |d}tdd t }t }||}||}||}	|| }|| }
t|d j|jks=J t|	d j|jksIJ t|j	d j|jksVJ t
t|||
 t
t|	||  t
t|j	||j	 t }t }||}|| }
t|d j|jksJ t|j	d j|jksJ t
t|||
 t
t|j	||j	 W d    d S 1 sw   Y  d S )N)deviceT)array_api_dispatchr   )r   asarrayr   r   rV   rB   r2   r   __name__r1   r   r   r0   )rb   array_namespacer   rK   xpxp_yxp_labelnp_labelxp_transformedxp_inv_transformednp_transformedr   r   r   'test_label_encoder_array_api_compliance  s2   







"r   )Hnumpyr-   rR   scipy.sparser   sklearnr   r   sklearn.preprocessing._labelr   r   r   r   r	   r
   sklearn.utils._array_apir   r   r   r   sklearn.utils._testingr   r   sklearn.utils.fixesr   r   r   r   r   sklearn.utils.multiclassr   sklearn.utils.validationr   	load_irisirisr   r8   rC   rJ   markparametrizerZ   rn   rq   r.   ru   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   <module>   s     ):




	%

#3
		

