U
    -eZ                     @   s  d dl Zd dlZd dlmZ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 d dlmZ d dlmZmZ d dlmZ e Zdd	 Zd
d Zdd Zdd Zej !ddddgej !dddgdd Z"edd Z#ej j!dej$dddddgdd ej$dddgdd ej$d!gdd fej$d"d#d$d#d$ge%d ej$d#d"d$ge%d ej$d%ge%d fe$d"d#d$d#d$ge$d#d"d$ge$d%gfgdd&d'gd(d)d* Z&d+d, Z'ej !dd'd&gd-d. Z(d/d0 Z)ej j!d1ej$dddddgdd ej$d"d#d$d#d$ge%d e$d"d#d$d#d$ggdd&d'gd(d2d3 Z*d4d5 Z+d6d7 Z,d8d9 Z-d:d; Z.d<d= Z/d>d? Z0d@dA Z1dBdC Z2dDdE Z3dFdG Z4dHdI Z5dJdK Z6dLdM Z7dNdO Z8dPdQ Z9dRdS Z:dTdU Z;dVdW Z<ej !dXe e e gdYdZ Z=dS )[    N)
coo_matrix
csc_matrix
csr_matrix
dok_matrixissparse
lil_matrix)datasets)LabelBinarizerLabelEncoderMultiLabelBinarizer_inverse_binarize_multiclass_inverse_binarize_thresholdinglabel_binarize)_to_object_array)assert_array_equalignore_warnings)type_of_targetc                 C   s   t | dr|  } | S )Ntoarray)hasattrr   a r   g/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sklearn/preprocessing/tests/test_label.pyr      s    
r   c               
   C   s  ddddg} t dd}tddddggj}|| }t|jdg t|| t|||  t dd}|| }t|s~t	t|jdg t||
  t||
 |  t dd}ddddg} tddddggj}|| }t|jddg t|| tddgddgddgddgg}t|||  dd	d
d	dg} tddddgddddgddddgddddgddddgg}|| }t|jdd
d	dg t|| t|||  d S )NposFsparse_outputr   Tneg   ZspamZhameggs0)r	   nparrayTfit_transformr   classes_inverse_transformr   AssertionErrorr   )inplbexpectedgotZ	to_invertr   r   r   test_label_binarizer"   s:    







"4

r+   c               
   C   s   t  } tdddgdddgdddgg}| dddg}t|| tdddgdddgdddgdddgdddgdddgg}| ddddddg}t|| d S )	Nr   r   bder   cf)r	   r    r!   r#   r   	transform)r(   r)   r*   r   r   r   "test_label_binarizer_unseen_labelsK   s    "
2r2   c               
   C   s   t ddd} tddddg}tddddggj}| |}t|| t| || t ddd} tdddddg}tddddgddddgddddgddddgddddgg}| |}t|| t| || d S )Nr   	neg_label	pos_labelr         )r	   r    r!   r"   r#   r   r%   )r(   r'   r)   r*   r   r   r   'test_label_binarizer_set_label_encodingY   s&    






	

r9   dtypeZInt64ZFloat64booleanunique_firstTFc              
   C   sf   t d}|jdddddddddg	| d}|r6| }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pandasr   r   r:   N)pytestZimportorskipZSeriesuniquer	   fitr1   r   )r:   r<   pdZy_truer(   Zy_outr   r   r   $test_label_binarizer_pandas_nullableu   s    
 rB   c               	   C   s  t ddddg} t | }dddg}d}tjt|d || W 5 Q R X t }d}tjt|d |g  W 5 Q R X tjt|d |g  W 5 Q R X ddddg}d	}td
dd}tjt|d || W 5 Q R X d}td
d
d}tjt|d || W 5 Q R X d}tdd
dd}tjt|d || W 5 Q R X d}tjt|d* t	t
dd
gd
dggddd
gdd W 5 Q R X g dd
gdgdddgd
gg}d}tjt|d t | W 5 Q R X d}tjt|d, t	t
dd
gd
dggddd
dgdd W 5 Q R X d}tjt|d2 t	t dd
dgd
ddggddd
dgdd W 5 Q R X d}tjt|d$ t t ddgd
dgg W 5 Q R X tjt|d* tt ddgd
dggdd
dgd W 5 Q R X d S )Nr   r7   r8   )r   )r   r7   z@You appear to be using a legacy multi-label data representation.matchz.This LabelBinarizer instance is not fitted yetr   z3neg_label=2 must be strictly less than pos_label=1.r7   r4   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r5   r6   r   zfoo format is not supportedZfoo)youtput_typeclasses	thresholdr8   z?You appear to be using a legacy multi-label data representationzAThe number of class is not equal to the number of dimension of y.z!output_type='binary', but y.shapebinaryz@Multioutput target data is not supported with label binarizationrI   )r    r!   r	   r@   r>   raises
ValueErrorr1   r%   r   r   r#   r   )Z	one_classr(   Zmulti_labelerr_msgZinput_labelsZy_seq_of_seqsr   r   r   test_label_binarizer_errors   sv    
(rP   zvalues, classes, unknownr7   r   r8   Zint64r=      r,   r   r/   r-   objectstr)Zidsc              	   C   s   t  }||  t|j| t|| dddddg t|dddddg|  t  }|| }t|dddddg tjt	dd || W 5 Q R X d S )Nr   r   r7   zunseen labelsrD   )
r
   r@   r   r$   r1   r%   r#   r>   rM   rN   )valuesrI   unknownleretr   r   r   test_label_encoder   s    

rX   c               
   C   s   t  } | ddddddg t| jdddddg t| dddddddgdddddddg t| dddddddgdddddddg tt | ddg W 5 Q R X d S )	Nr   rQ      r   r7   r8      )	r
   r@   r   r$   r1   r%   r>   rM   rN   )rV   r   r   r    test_label_encoder_negative_ints   s    , r\   c              	   C   sJ   t  }|tjddg| d d}tjt|d |d W 5 Q R X d S )NappleZoranger=   zshould be a 1d arrayrD   )r
   r@   r    r!   r>   rM   rN   r1   )r:   rV   msgr   r   r    test_label_encoder_str_bad_shape	  s
    r_   c               	   C   s   t  } tt | g  W 5 Q R X tt | g  W 5 Q R X t  } | dddddg d}tjt|d | dg W 5 Q R X tjt|d | ddd	g W 5 Q R X d
}tjt|d | d W 5 Q R X d S )Nr   r7   r8   rZ   z!contains previously unseen labelsrD   r3   z should be a 1d array.+shape \(\) )r
   r>   rM   rN   r1   r%   r@   )rV   r^   r   r   r   test_label_encoder_errors  s    rc   rT   c                 C   sH   t  }||  |g }ttg | |g }ttg | d S )N)r
   r@   r1   r   r    r!   r%   )rT   rV   ZtransformedZinverse_transformedr   r   r   test_label_encoder_empty_array)  s    



rd   c                  C   s  dd dd dd g} t dddgdddgdddgg}| d  }dD ]}| D ]}t|d}|| }t||kszt|r|jj|jjkst|	 }t
|| t
dd	d
g|j |||kstt|d}|| | }t||kst|r|jj|jjkst|	 }t
|| t
dd	d
g|j |||ksPtqPqFtt2 |tt dddgd	ddgdddgg W 5 Q R X d S )Nc                   S   s
   dddgS NrC   r   r   r7   r   r   r   r   r   <lambda>@      z9test_sparse_output_multilabel_binarizer.<locals>.<lambda>c                   S   s   ddhdhddhfS Nr7   r8   r   r   r   r   r   r   rh   A  ri   c                   S   s   t t dt dddhgS NrC   rf   r   r7   iterr   r   r   r   rh   B  ri   r   r   TFr   r7   r8   )r    r!   r   r#   r   r&   indicesr:   Zindptrr   r   r$   r%   r@   r1   r>   rM   rN   r   )inputsindicator_matinverser   r'   mlbr*   r   r   r   'test_sparse_output_multilabel_binarizer=  s8    "





rt   c                  C   s   dd dd dd g} t dddgdddgdddgg}| d  }| D ]}t }|| }t|| tdddg|j |||kstt }|| 	| }t|| tdddg|j |||ksFtqFd S )	Nc                   S   s
   dddgS re   r   r   r   r   r   rh   h  ri   z+test_multilabel_binarizer.<locals>.<lambda>c                   S   s   ddhdhddhfS rj   r   r   r   r   r   rh   i  ri   c                   S   s   t t dt dddhgS rk   rl   r   r   r   r   rh   j  ri   r   r   r7   r8   )
r    r!   r   r#   r   r$   r%   r&   r@   r1   )rp   rq   rr   r'   rs   r*   r   r   r   test_multilabel_binarizere  s"    "


ru   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   r7   r   )r   r    r!   r   r#   )rs   rG   Yr   r   r   &test_multilabel_binarizer_empty_sample~  s    rw   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 5 Q R X tdddgdddgg}t dddgd} tjt|d" | |ddgddgg}W 5 Q R X t|| d S )	Nr   r7   r   zunknown class.* will be ignoredrD   rQ   r8   rL   )	r   r    r!   r>   ZwarnsUserWarningr@   r1   r   )rs   rG   rv   Zwarning_messagematrixr   r   r   'test_multilabel_binarizer_unknown_class  s    
&&rz   c               	   C   sN  dddg} t dddgdddgdddgg}tdddgd}t|| | t|jdddg tdddgd}t|| | | t|jdddg td	dddgd}t|| t dgdgdgg|f t|jd	dddg t	| } tdddgd}t|| | | d
}tddddgd}t
jt|d ||  W 5 Q R X d S )NrC   rf   rg   r   r   r8   r7   rL   rQ   ztThe classes argument contains duplicate classes. Remove these duplicates before passing them to MultiLabelBinarizer.rD   )r    r!   r   r   r#   r$   r@   r1   Zhstackrm   r>   rM   rN   )r'   rq   rs   rO   r   r   r   'test_multilabel_binarizer_given_classes  s,    
" r{   c                  C   s   dddg} t dddgdddgdddgg}t dddgdddgdddgg}tdddgd}t|| | dddg|_t|| | d S )	NrC   rf   rg   r   r   r8   r7   rL   )r    r!   r   r   r#   rI   )r'   rq   Zindicator_mat2rs   r   r   r   (test_multilabel_binarizer_multiple_calls  s    
""r|   c                  C   s   dgdgdgg} t dddgdddgdddgg}t }t|| | t|||  t }t|| | | t|||  d S )Nr   r   r7   )r    r!   r   r   r#   r%   r@   r1   r'   rq   rs   r   r   r   .test_multilabel_binarizer_same_length_sequence  s    "r~   c               	   C   s<  t dddg} dddgddd	gfd
ddgdddgfdddg| fg}tdddgdddgdddgg}|D ]\}}t }tj|td}t||| t|j| tj||td}t|| t }t|	|
|| t|j| tj||td}t|| qht }tt |i i ddifg W 5 Q R X d S )Nrf   r7   r8   )23)1)r   r   r   r   r   )r,   r/   r   )r   r,   r   r,   r/   )r   r   )rf   )rf   r   r   r   r=   )r   r    r!   r   rR   r   r#   r$   r%   r@   r1   r>   rM   	TypeError)Ztuple_classesrp   rq   r'   rI   rs   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 5 Q R X |tddgg |tddgg |tddgg tt |tdgg W 5 Q R X tt |tdddgg W 5 Q R X d S )Nr   r   r8   r   )r   r#   r>   rM   rN   r%   r    r!   )r'   rs   r   r   r   ,test_multilabel_binarizer_inverse_validation  s    
 r   c               	   C   s   t ddgddddgd} tddddgddddgg}t| | t ddgddddgd} tddddgddddgg}t| | t ddddgddddgd} tddddgddddgddddgddddgg}t| | d S )Nr   r[   r7   rQ   rL   r   r8   )r   r    r!   r   )outr)   r   r   r   $test_label_binarize_with_class_order  s    

2r   c              
   C   s,  dD ] }|dks|dkrH|rHt t t| ||||d W 5 Q R X qt| ||||d}tt|| t||ksxtt| }|dkrt	||d}nt
||||| d d}tt|t|  t|||d}	|	| }tt|| t||kst|	|}
tt|
t|  t|
t| kstqd S )	Nrn   r   rI   r5   r6   r   Z
multiclassrL   g       @)rH   rI   rJ   rF   )r>   rM   rN   r   r   r   r   r&   r   r   r   r	   r#   r%   )rG   rI   r6   r5   r)   r   Z	binarizedZy_typeZinversedr(   Zinverse_outputr   r   r   check_binarized_results  sR    

  

r   c                  C   s   dddg} ddg}d}d}t ddgddgddggd d df d}t| |||| dddg} 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   r7   rZ   )rZ   r   r8   )r    r!   Zreshaper   rG   rI   r6   r5   r)   r   r   r   test_label_binarize_binaryM  s    
.
.r   c               	   C   sf   dddg} dddg}d}d}dt d }t| |||| tt t| |d|dd W 5 Q R X d S )Nr   r   r7   r8   rZ   Tr   )r    eyer   r>   rM   rN   r   r   r   r   r   test_label_binarize_multiclass`  s    

    r   c               	      s   t dddgdddgdddgg dddg} d}d}|  } fddtttttfD } g| D ]}t|| ||| qbt	t
 t|| d|dd W 5 Q R X d S )	Nr   r   r7   c                    s   g | ]}| qS r   r   ).0Zsparse_matrixZy_indr   r   
<listcomp>u  s   z2test_label_binarize_multilabel.<locals>.<listcomp>rZ   Tr   )r    r!   r   r   r   r   r   r   r>   rM   rN   r   )rI   r6   r5   r)   Zy_sparserG   r   r   r   test_label_binarize_multilabelo  s.    "

    r   c                	   C   s   t t tddgddgddd W 5 Q R X t jtdd tddgddgd	 W 5 Q R X t jtd
d tddggdddgd	 W 5 Q R X d S )Nr   r7   r   )rI   r6   r5   zcontinuous target data is not rD   g333333?g@rL   zmismatch with the labelsr8   )r>   rM   rN   r   r   r   r   r   !test_invalid_input_label_binarize  s    "r   c                  C   sF   t tdddgdddgdddggtd} t| tdddg d S )Nr   r   rZ   r8   )r   r   r    Zaranger   r!   )r*   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,   r7   N)r
   r@   r    nanr1   r   )rV   Zy_transr   r   r   test_nan_label_encoder  s    r   encoderc                 C   s>   t | drt| jdddgd}| dddg}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_outputr   r,   r/   )rG   N)r   r&   r#   r   )r   Zy_encoded_with_kwargZy_encoded_positionalr   r   r   *test_label_encoders_do_not_have_set_output  s    r   )>numpyr    r>   Zscipy.sparser   r   r   r   r   r   Zsklearnr   Zsklearn.preprocessing._labelr	   r
   r   r   r   r   Zsklearn.utilsr   Zsklearn.utils._testingr   r   Zsklearn.utils.multiclassr   Z	load_irisZirisr   r+   r2   r9   markZparametrizerB   rP   r!   rR   rX   r\   r_   rc   rd   rt   ru   rw   rz   r{   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    	 )
N


	
(#3	 