U
    ½mœd®X  ã                   @   s  d dl Zd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl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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d0�d1d2„ ƒZ&d3d4„ Z'ej  !dd/d.g¡d5d6„ ƒZ(d7d8„ Z)ej j!d9e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d0�d:d;„ ƒZ*d<d=„ Z+d>d?„ Z,d@dA„ Z-dBdC„ Z.dDdE„ Z/dFdG„ Z0dHdI„ Z1dJdK„ Z2dLdM„ Z3dNdO„ Z4dPdQ„ Z5dRdS„ Z6dTdU„ Z7dVdW„ Z8dXdY„ Z9dZd[„ Z:d\d]„ Z;d^d_„ Z<dS )`é    N)Úissparse)Ú
coo_matrix)Ú
csc_matrix)Ú
csr_matrix)Ú
dok_matrix)Ú
lil_matrix)Útype_of_target)Úassert_array_equal)Úignore_warnings)Ú_to_object_array©ÚLabelBinarizer)ÚMultiLabelBinarizer)ÚLabelEncoder)Úlabel_binarize)Ú_inverse_binarize_thresholding)Ú_inverse_binarize_multiclass)Údatasetsc                 C   s   t | dƒr|  ¡ } | S )NÚtoarray)Úhasattrr   ©Úa© r   ú_/home/sam/Atlas/atlas_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_labelsN   s    "
2ÿr3   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 )Néþÿÿÿr   ©Ú	neg_labelÚ	pos_labelr   é   é   )r   r!   r"   r#   r$   r	   r&   )r)   r(   r*   r+   r   r   r   Ú'test_label_binarizer_set_label_encoding\   s&    






ûÿ	

r:   ÚdtypeZInt64ZFloat64Úbooleanc              
   C   sf   t  d¡}ddlm} |jdddddddddg	| d�}|ƒ  |¡}| 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   ©r;   N)ÚpytestZimportorskipZsklearn.preprocessingr   ZSeriesÚfitr2   r	   )r;   Úpdr   Zy_truer)   Zy_outr   r   r   Ú$test_label_binarizer_pandas_nullablex   s    
 rA   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   ©r8   r9   )r   )r   r8   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.r8   r5   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©r6   r7   r   zfoo format is not supportedZfoo)ÚyÚoutput_typeÚclassesÚ	thresholdr9   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©rH   )r!   r"   r   r?   r>   ÚraisesÚ
ValueErrorr2   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    
ÿüüü(rO   zvalues, classes, unknownr8   r   r9   Zint64r=   é   r-   r   r0   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   r8   zunseen labelsrC   )
r   r?   r	   r%   r2   r&   r$   r>   rL   rM   )ÚvaluesrH   ÚunknownÚleÚretr   r   r   Útest_label_encoder×   s    

rW   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   rP   é   éÿÿÿÿr   r8   r9   é   )	r   r?   r	   r%   r2   r&   r>   rL   rM   )rU   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 arrayrC   )r   r?   r!   r"   r>   rL   rM   r2   )r;   rU   Ú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   r8   r9   rY   z!contains previously unseen labelsrC   r4   éýÿÿÿéüÿÿÿz should be a 1d array.+shape \(\)Ú )r   r>   rL   rM   r2   r&   r?   )rU   r]   r   r   r   Útest_label_encoder_errors  s    rb   rS   c                 C   sH   t ƒ }| | ¡ | g ¡}tt g ¡|ƒ | g ¡}tt g ¡|ƒ d S )N)r   r?   r2   r	   r!   r"   r&   )rS   rU   ZtransformedZinverse_transformedr   r   r   Útest_label_encoder_empty_array(  s    



rc   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s’t‚| 	¡ }t
||ƒ t
dd	d
g|jƒ | |¡|ksÈt‚t|d�}| |ƒ ¡ |ƒ ¡}t|ƒ|ksöt‚|�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 ©NrB   ©r   ©r   r8   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 ©Nr8   r9   r   r   r   r   r   r   rg   @  rh   c                   S   s   t t dƒt dƒddhgƒS ©NrB   re   r   r8   ©Úiterr   r   r   r   rg   A  rh   r   r   ©TFr   r8   r9   )r!   r"   r   r$   r   r'   Úindicesr;   Zindptrr   r	   r%   r&   r?   r2   r>   rL   rM   r   )ÚinputsÚindicator_matÚinverser   r(   Úmlbr+   r   r   r   Ú'test_sparse_output_multilabel_binarizer<  s8    ý"





rs   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sŠt‚tƒ }| |ƒ ¡ 	|ƒ ¡}t||ƒ tdddg|jƒ | |¡|ksFt‚qFd S )	Nc                   S   s
   dddgS rd   r   r   r   r   r   rg   g  rh   z+test_multilabel_binarizer.<locals>.<lambda>c                   S   s   ddhdhddhfS ri   r   r   r   r   r   rg   h  rh   c                   S   s   t t dƒt dƒddhgƒS rj   rk   r   r   r   r   rg   i  rh   r   r   r8   r9   )
r!   r"   r   r$   r	   r%   r&   r'   r?   r2   )ro   rp   rq   r(   rr   r+   r   r   r   Útest_multilabel_binarizerd  s"    ý"


rt   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   r8   r   )r   r!   r"   r	   r$   )rr   rF   ÚYr   r   r   Ú&test_multilabel_binarizer_empty_sample}  s    rv   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   r8   r   zunknown class.* will be ignoredrC   rP   r9   rK   )	r   r!   r"   r>   ZwarnsÚUserWarningr?   r2   r	   )rr   rF   ru   Zwarning_messageÚmatrixr   r   r   Ú'test_multilabel_binarizer_unknown_class„  s    
&&ry   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 )NrB   re   rf   r   r   r9   r8   rK   rP   ztThe classes argument contains duplicate classes. Remove these duplicates before passing them to MultiLabelBinarizer.rC   )r!   r"   r   r	   r$   r%   r?   r2   Zhstackrl   r>   rL   rM   )r(   rp   rr   rN   r   r   r   Ú'test_multilabel_binarizer_given_classes“  s,    
" ÿÿrz   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 )	NrB   re   rf   r   r   r9   r8   rK   )r!   r"   r   r	   r$   rH   )r(   rp   Zindicator_mat2rr   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   r8   )r!   r"   r   r	   r$   r&   r?   r2   ©r(   rp   rr   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 )Nre   ©r8   ©r9   )Ú2Ú3)Ú1)r‚   r€   r‚   r€   r�   )r-   r0   r   )r   r-   r   r-   r0   )r~   r   )re   )re   r~   r   r   r=   )r   r!   r"   r   rQ   r	   r$   r%   r&   r?   r2   r>   rL   Ú	TypeError)Ztuple_classesro   rp   r(   rH   rr   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   r9   r   )r   r$   r>   rL   rM   r&   r!   r"   )r(   rr   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   rZ   r8   rP   rK   r   r9   )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r–t	||d�}nt
||||| d d�}tt|ƒt| ƒƒ t|||d�}	|	 | ¡}tt|ƒ|ƒ t|ƒ|ksöt‚|	 |¡}
tt|
ƒt| ƒƒ t|
ƒt| ƒkst‚qd S )	Nrm   r   ©rH   r6   r7   r   Z
multiclassrK   g       @)rG   rH   rI   rE   )r>   rL   rM   r   r	   r   r   r'   r   r   r   r   r$   r&   )rF   rH   r7   r6   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   r8   rY   )rY   r   r9   )r!   r"   Zreshaper‹   ©rF   rH   r7   r6   r*   r   r   r   Útest_label_binarize_binaryL  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   r8   r9   rY   TrŠ   )r!   Úeyer‹   r>   rL   rM   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   r8   c                    s   g | ]}|ˆ ƒ‘qS r   r   )Ú.0Zsparse_matrix©Zy_indr   r   Ú
<listcomp>t  s   ÿz2test_label_binarize_multilabel.<locals>.<listcomp>rY   TrŠ   )r!   r"   r   r   r   r   r   r‹   r>   rL   rM   r   )rH   r7   r6   r*   Zy_sparserF   r   r‘   r   Útest_label_binarize_multilabeln  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   r8   r   )rH   r7   r6   zcontinuous target data is not rC   g333333ó?gš™™™™™@rK   zmismatch with the labelsr9   )r>   rL   rM   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   rY   r9   )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-   r8   N)r   r?   r!   Únanr2   r	   )rU   Zy_transr   r   r   Útest_nan_label_encoder˜  s    r—   )=Únumpyr!   r>   Zscipy.sparser   r   r   r   r   r   Zsklearn.utils.multiclassr   Zsklearn.utils._testingr	   r
   Zsklearn.utilsr   Zsklearn.preprocessing._labelr   r   r   r   r   r   Zsklearnr   Z	load_irisZirisr   r,   r3   r:   ÚmarkZparametrizerA   rO   r"   rQ   rW   r[   r^   rb   rc   rs   rt   rv   ry   rz   r{   r}   r„   r†   r‡   r‰   r‹   r�   r�   r“   r”   r•   r—   r   r   r   r   Ú<module>   s˜   )

Nýý
ýõí

ýù	
(#3	