a
    hc                  
   @   sv  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 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 Z/d1d2 Z0ej&j'd3ej+g dd d!ej+g d$e,d!e+g d$gg d'd(d4d5 Z1d6d7 Z2ej&'ded8d9 Z3d:d; Z4d<d= Z5d>d? Z6d@dA Z7dBdC Z8dDdE Z9dFdG Z:dHdI Z;dJdK Z<dLdM Z=dNdO Z>dPdQ Z?dRdS Z@ej&'dTej+ge e e e e dUdV ZAdWdX ZBej&'dedYdZ ZCd[d\ ZDej&'d]e
 e	 e gd^d_ ZEej&'d`e ej&'dae+g de+g dbe+g dcgddde ZFdS )f    N)issparse)config_contextdatasets)LabelBinarizerLabelEncoderMultiLabelBinarizer_inverse_binarize_multiclass_inverse_binarize_thresholdinglabel_binarize)_convert_to_numpy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   b/var/www/html/assistant/venv/lib/python3.9/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|svJ 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gotZ	to_invertr   r   r   test_label_binarizer*   s:    







" 

r6   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-   r/   r   	transform)r3   r4   r5   r   r   r   "test_label_binarizer_unseen_labelsS   s    
&rA   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"   )rB   r   r   rB      )   rF   r#   rF   r   )rB   rB   rB   rF   )rB   rB   rF   rB   )rB   rF   rB   rB   )rF   rB   rB   rB   )r   r,   r-   r.   r/   r   r1   )r3   r2   r4   r5   r   r   r   'test_label_binarizer_set_label_encodinga   s&    

	

rH   dtype)ZInt64Z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.
    Zpandas)	r#   r   r   r#   r   r#   r#   r   r#   rI   r#   r   N)pytestZimportorskipZSeriesuniquer   fitr@   r   )rI   rK   pdZy_truer3   Zy_outr   r   r   $test_label_binarizer_pandas_nullable}   s    
rQ   c                  C   s  t g d} t | }g d}d}tjt|d || W d    n1 sT0    Y  t }d}tjt|d |g  W d    n1 s0    Y  tjt|d |g  W d    n1 s0    Y  g d}d}tdd	d
}tjt|d || W d    n1 s 0    Y  d}tddd
}tjt|d || W d    n1 sj0    Y  d}td	ddd}tjt|d || W d    n1 s0    Y  g d	dgdgg ddgg}d}tjt|d t 	| W d    n1 s0    Y  d}tjt|d6 t
t g dg dgdg ddd W d    n1 sj0    Y  d}tjt|d. t t d	dgdd	gg W d    n1 s0    Y  tjt|d2 tt d	dgdd	ggg dd W d    n1 s0    Y  d S )Nr    )rF   rG   )r   )r   rF   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.rF   r#   rC   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rD   rE   r   rG   )r   r#   rG   z?You appear to be using a legacy multi-label data representationz!output_type='binary', but y.shaper#   rF   rG   )rF   r#   rG   binaryr   youtput_typeclasses	thresholdz@Multioutput target data is not supported with label binarizationr[   )r,   r-   r   rO   rM   raises
ValueErrorr@   r1   r/   r	   r
   )Z	one_classr3   Zmulti_labelerr_msgZinput_labelsZy_seq_of_seqsr   r   r   test_label_binarizer_errors   sV    (((***,&>ra   csr_containerc                 C   s   d}t jt|d4 t| ddgddggdddgdd W d    n1 sL0    Y  d}t jt|d4 t| ddgddggdg d	dd W d    n1 s0    Y  d S )
Nzfoo format is not supportedrS   r#   rF   Zfoor   rX   zAThe number of class is not equal to the number of dimension of y.rV   )rM   r^   r_   r	   )rb   r`   r   r   r   "test_label_binarizer_sparse_errors   s     $rc   zvalues, classes, unknown)rF   r#   rG   r#   rG   int64rL   rV      )r:   r   r>   r   r>   r   r:   r>   r;   )rd   objectstr)Zidsc                 C   s   t  }||  t|j| t|| g d t|g d|  t  }|| }t|g d tjt	dd || W d    n1 s0    Y  d S )N)r#   r   rF   r   rF   zunseen labelsrS   )
r   rO   r   r0   r@   r1   r/   rM   r^   r_   )valuesr[   unknownleretr   r   r   test_label_encoder   s    

rm   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    n1 s0    Y  d S )Nr#   r#   re      r   )rp   r   r#   re   ro   )r   r#   re   re   ro   rp   rp   )r#   rF   rG   rG   re   r   r   r      )	r   rO   r   r0   r@   r1   rM   r^   r_   )rk   r   r   r    test_label_encoder_negative_ints  s    rr   rh   rg   c                 C   s^   t  }|tjddg| d d}tjt|d |d W d    n1 sP0    Y  d S )NappleZorangerL   zshould be a 1d arrayrS   )r   rO   r,   r-   rM   r^   r_   r@   )rI   rk   msgr   r   r    test_label_encoder_str_bad_shape  s
    ru   c                  C   s>  t  } tt | g  W d    n1 s00    Y  tt | g  W d    n1 sd0    Y  t  } | g d d}tjt|d | dg W d    n1 s0    Y  tjt|d | g d W d    n1 s0    Y  d}tjt|d | d W d    n1 s00    Y  d S )N)r#   rF   rG   rp   r#   z!contains previously unseen labelsrS   rB   )rB   z should be a 1d array.+shape \(\) )r   rM   r^   r_   r@   r1   rO   )rk   rt   r   r   r   test_label_encoder_errors  s    ((*,ry   ri   c                 C   sH   t  }||  |g }ttg | |g }ttg | d S )N)r   rO   r@   r   r,   r-   r1   )ri   rk   ZtransformedZinverse_transformedr   r   r   test_label_encoder_empty_array3  s    



rz   c                  C   sF  dd dd dd g} t g dg dg dg}| d  }d	D  ]}| D ]}t|d
}|| }t||kstJ |r|jj|jjksJ | }t	|| t	g d|j
 |||ksJ t|d
}|| | }t||ksJ |r|jj|jjks
J | }t	|| t	g d|j
 |||ksJJ qJq@d S )Nc                   S   s   g dS NrR   r#   )r#   rF   r   r   r   r   r   <lambda>J      z9test_sparse_output_multilabel_binarizer.<locals>.<lambda>c                   S   s   ddhdhddhfS NrF   rG   r#   r   r   r   r   r   r~   K  r   c                   S   s   t t dt dddhgS NrR   r}   r#   rF   iterr   r   r   r   r~   L  r   r   r#   r#   r7   r#   r#   r   r   TFr   rV   )r,   r-   r   r/   r   indicesrI   Zindptrr   r   r0   r1   rO   r@   )inputsindicator_matinverser   r2   mlbr5   r   r   r   'test_sparse_output_multilabel_binarizerG  s4    





r   c              
   C   s   t t dt dddhg}tdd}|| tt6 || tg dg dg d	g W d    n1 st0    Y  d S )
NrR   r}   r#   rF   Fr   r   )rF   r   r   r   )	r   r   rO   rM   r^   r_   r1   r,   r-   )rb   r2   r   r   r   r   .test_sparse_output_multilabel_binarizer_errorsl  s    

r   c                  C   s   dd dd dd g} t g dg dg dg}| d  }| D ]}t }|| }t|| tg d	|j |||ksJ t }|| | }t|| tg d	|j |||ks@J q@d S )
Nc                   S   s   g dS r{   r   r   r   r   r   r~   z  r   z+test_multilabel_binarizer.<locals>.<lambda>c                   S   s   ddhdhddhfS r   r   r   r   r   r   r~   {  r   c                   S   s   t t dt dddhgS r   r   r   r   r   r   r~   |  r   r   r7   r   r   rV   )	r,   r-   r   r/   r   r0   r1   rO   r@   )r   r   r   r2   r   r5   r   r   r   test_multilabel_binarizerw  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#   rF   r   )r   r,   r-   r   r/   )r   rY   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 sj0    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 s0    Y  t|| d S )Nr#   rF   r   zunknown class.* will be ignoredrS   re   r7   r8   rV   r]   )	r   r,   r-   rM   ZwarnsUserWarningrO   r@   r   )r   rY   r   Z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    n1 s80    Y  d S )Nr|   r   r7   r#   r   r#   r#   rG   rF   r]   )re   r#   rG   rF   r   ztThe classes argument contains duplicate classes. Remove these duplicates before passing them to MultiLabelBinarizer.)r#   rG   rF   rG   rS   )r,   r-   r   r   r/   r0   rO   r@   Zhstackr   rM   r^   r_   )r2   r   r   r`   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   r7   r   r   r   r]   rV   )r,   r-   r   r   r/   r[   )r2   r   Z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   rF   r8   r7   r9   )r,   r-   r   r   r/   r1   rO   r@   r2   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 ]\}}t }tj|td
}t||| t|j| tj||td
}t|| t }t|	|
|| t|j| tj||td
}t|| qVt }tt& |i i ddifg W d    n1 s20    Y  d S )N)r}   rF   rG   ))23)1)r   r   )r   r   r   ))r:   r>   r   )r   r:   rf   ))r   r   )r}   )r}   r   r   r7   r   rL   r   r:   )r   r,   r-   r   rg   r   r/   r0   r1   rO   r@   rM   r^   	TypeError)Ztuple_classesr   r   r2   r[   r   Z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   r/   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 sL0    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 s0    Y  tt& |tg dg W d    n1 s0    Y  d S )Nr   r#   rG   r   r#   r#   r#   )r   r/   rM   r^   r_   r1   r,   r-   )r2   r   r   r   r   ,test_multilabel_binarizer_inverse_validation
  s    
42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#   rq   )r#   rF   re   rq   r]   r+   r(   )r#   rq   re   rF   r*   )r   r#   rF   rG   )rG   rF   r   r#   r)   )r
   r,   r-   r   )outr4   r   r   r   $test_label_binarize_with_class_order  s    

"r   c              	   C   sB  dD ]6}|dks|dkr\|r\t t" t| ||||d W d    q1 sP0    Y  qt| ||||d}tt|| t||ksJ t| }|dkrt||d}nt	||||| d d}tt|t|  t
|||d}	|	| }tt|| t||ksJ |	|}
tt|
t|  t|
t| ksJ qd S )	Nr   r   r[   rD   rE   r   Z
multiclassr]   g       @)rZ   r[   r\   rU   )rM   r^   r_   r
   r   r   r   r   r   r	   r   r/   r1   )rY   r[   rE   rD   r4   r   Z	binarizedZy_typeZinversedr3   Zinverse_outputr   r   r   check_binarized_results,  sN    
$


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 )Nr8   r   r#   rF   rp   )rp   r#   rG   )r,   r-   Zreshaper   rY   r[   rE   rD   r4   r   r   r   test_label_binarize_binary_  s    ..r   c                  C   sv   g d} g d}d}d}dt d }t| |||| tt" t| |d|dd W d    n1 sh0    Y  d S )Nr   r#   rF   rF   r   rG   rp   Tr   )r,   eyer   rM   r^   r_   r
   r   r   r   r   test_label_binarize_multiclassr  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    n1 s~0    Y  d S )
Nr8   r   r=   r   rF   r   rp   Tr   )r,   r-   r   rM   r^   r_   r
   )r   Zy_indr[   rE   rD   r4   rY   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 s80    Y  t jtdd$ tddgddgd	 W d    n1 sz0    Y  t jtd
d& tddggg dd	 W d    n1 s0    Y  d S )Nr   rF   r#   )r[   rE   rD   zcontinuous target data is not rS   g333333?g@r]   zmismatch with the labelsrG   rV   )rM   r^   r_   r
   r   r   r   r   !test_invalid_input_label_binarize  s    62r   c                 C   s>   t | g dg dg dgtd}t|tg d d S )Nr8   )rp   r   rp   r=   rG   r   )r   r,   Zaranger   r-   )rb   r5   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:   rF   N)r   rO   r,   nanr@   r   )rk   Z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.
    Z
set_outputrf   )rY   N)r   r/   r   )r   Zy_encoded_with_kwargZy_encoded_positionalr   r   r   *test_label_encoders_do_not_have_set_output  s    r   zarray_namespace, device, dtyperY   rn   )rG   ro   	   ro   r   rG   c                 C   s  t ||}|j| |d}tddF t }t }||}||}||}	|| }|| }
t|d j|jks|J t|	d j|jksJ t|j	d j|jksJ t
t|||
 t
t|	||  t
t|j	||j	 t }t }||}|| }
t|d j|jksJ t|j	d j|jks8J t
t|||
 t
t|j	||j	 W d    n1 sr0    Y  d S )N)deviceT)Zarray_api_dispatchr   )r   Zasarrayr   r   rO   r@   r1   r   __name__r0   r   r   r/   )rY   Zarray_namespacer   rI   ZxpZxp_yZxp_labelZnp_labelZxp_transformedZxp_inv_transformedZnp_transformedr   r   r   'test_label_encoder_array_api_compliance  s0    







r   )Gnumpyr,   rM   Zscipy.sparser   Zsklearnr   r   Zsklearn.preprocessing._labelr   r   r   r   r	   r
   Zsklearn.utils._array_apir   r   r   Zsklearn.utils._testingr   r   Zsklearn.utils.fixesr   r   r   r   r   Zsklearn.utils.multiclassr   Zsklearn.utils.validationr   Z	load_irisZirisr   r6   rA   rH   markZparametrizerQ   ra   rc   r-   rg   rm   rr   ru   ry   rz   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	
	

