U
    3d=                     @   s  d dl Zd dlmZ d dlm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 d dlmZ d dlm Z  d dl!m"Z" e	e#d dgdd ggZ$d e$ddd f< e
e	eeefe%e&ej'ej(e)ej*ffddZ+e
ej,-dj.dddd dgdd ggd dgge$fe+d dgdd gge+d d gd d gge+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fdd dddd!dd!d!d!g
e#dd dgej#dd dgej'd"ej#dd dgej(d"ej#dd dge)d"ej#dd dgej*d"e#dgd gdggee#dd dgd ddgd#d$d%ge#d#d$d%gej#d#d$d%ge/d"ej#d#d$d%ge/d"gdd ddgdd!dd!ggd#d$gd%d&gge#dd ddgdd!dd!ggej#dd ddgdd!dd!ggej'd"ej#dd ddgdd!dd!ggej(d"ej#dd ddgdd!dd!gge)d"ej#dd ddgdd!dd!ggej*d"fe+dd ddgdd!dd!gge
e	fe&ej'ej(e)ej*f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e/d"e#dd dggee#dd dggfd dgddgg d ge#d dddd d d dddg
ej#d dddd d d dddg
e%d"ej#d dddd d d dddg
ej'd"ej#d dddd d d dddg
ej(d"ej#d dddd d d dddg
e)d"ej#d dddd d d dddg
ej*d"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e/d"gd+gd d,ge#d gd,ggej#d gd,ggej*d"ge#d d,gd,d ggej#d d,gd,d ggej*d"e#d d,ggfe+d d,gd,d gge
e	fe)ej*fd'e+d d,gge
e	fe)ej*fd'g gej#g ge/d"d-gej#e#g e#ddd gge/d"e#g e#ddd ggddd hddhge0ddd ge0d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/d0ggggd1Z1ddd hd#d$d.d(gd(gd.d)e0ddd gdgZ2dgdgd dggd-dd.gej#g ddggd2d"eej#g ddggd2d"gZ3d3d4 Z4d5d6 Z5d7d8 Z6d9d: Z7d;d< Z8d=d> Z9d?d@ Z:dAdB Z;dCdD Z<dEdF Z=dS )G    N)product)issparse)
csc_matrix)
csr_matrix)
coo_matrix)
dok_matrix)
lil_matrix)assert_array_equal)assert_array_almost_equal)assert_allclose)_NotAnArray)unique_labels)is_multilabel)type_of_target)class_distribution)check_classification_targets)_ovr_decision_function)_safe_split)ShuffleSplit)SVC)datasets   c                    s    fdd|D S )Nc                    s"   g | ]} D ]}||d qqS )dtype ).0Zmatrix_typer   dtypesmatrixr   G/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/utils/tests/test_multiclass.py
<listcomp>'   s    z$_generate_sparse.<locals>.<listcomp>r   )r   matrix_typesr   r   r   r   _generate_sparse"   s    r"   *      )
   r%   )size      r   abcd)r!   r      abcdefgh㈵>      ?r   )r   r         )multilabel-indicator
multiclassmulticlass-multioutputbinary
continuouscontinuous-multioutputunknownobjectc                	   C   s  t t t  W 5 Q R X tttdtd tttdtd ttdddgtdddg tttdddgdddgdddggtd tttdddgdddggtd ttdddgtdtd ttdd	d
td t t tdddgt	d W 5 Q R X t t tt	dt	d W 5 Q R X ttt	dt	dtd d S )Nr%   r*   r   r$   r   r)   r/   )r   r   r$   r   )r$   r   )r/   r/   )r/   r*   )r*   r/   )
pytestraises
ValueErrorr   r	   rangenpZarangearrayZonesr   r   r   r   test_unique_labels   s"     $ *   rD   c                  C   s   dD ]} t |  D ]}t| qqtD ]"}tt t| W 5 Q R X q$dD ]0}t | D ]"}tt t| W 5 Q R X qXqLd S )N)r8   r6   r5   )r;   r9   r:   r7   )EXAMPLESr   NON_ARRAY_LIKE_EXAMPLESr>   r?   r@   )formatyexampley_typer   r   r   test_unique_labels_non_specific   s    rK   c               
   C   s  t td td td  } | D ]H\}}tt t|| W 5 Q R X tt t|| W 5 Q R X qtt tddggddgg W 5 Q R X tt tddg W 5 Q R X tt tddgdd	gg W 5 Q R X tt tdd
gdd	gg W 5 Q R X d S )Nr5   r6   r8   r   r$   r+   r.   1r)   2)r   rE   r>   r?   r@   r   )Zmix_clf_formatZy_multilabelZy_multiclassr   r   r   test_unique_labels_mixed_types   s"      rN   c                     s  t  D ]\} }| dkrd}nd}|D ]ԉ | dkr@t r@d}nd}t st drt jdkrt jjdkrt j	d d	kr· fd
dt
ttttfD }|D ] }|t|kstd||f qt rވ   |t ks&td |f q&qd S )N)r5   TFr5   Z	__array__r$   Zbiufr   r   c                    s   g | ]}| qS r   r   )r   Zsparse_matrixrI   r   r   r      s   z&test_is_multilabel.<locals>.<listcomp>zis_multilabel(%r) should be %s)rE   itemsr   hasattrrB   Zasarrayndimr   kindshaper   r   r   r   r   r   AssertionErrorZtoarray)groupgroup_examplesZ	dense_expZ
sparse_expZexamples_sparseZexmpl_sparser   rO   r   test_is_multilabel   sL    



rX   c                  C   sf   t  D ]X} | dkrJt |  D ]*}d}tjt|d t| W 5 Q R X qqt |  D ]}t| qRqd S )N)r;   r9   r:   zUnknown label type: match)rE   keysr>   r?   r@   r   )rJ   rI   msgr   r   r   !test_check_classification_targets-  s    r]   c               
   C   s   t  D ]4\} }|D ]&}t|| kstd|| t|f qqtD ]*}d}tjt|d t| W 5 Q R X qBtD ]*}d}tjt|d t| W 5 Q R X qrd S )Nz'type_of_target(%r) should be %r, got %rz6Expected array-like \(array or non-string sequence\).*rY   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.)	rE   rP   r   rU   rF   r>   r?   r@   MULTILABEL_SEQUENCES)rV   rW   rI   Z	msg_regexr\   r   r   r   test_type_of_target:  s&    
r_   c               	   C   sP   t d} | jdtjtjdtjg}d}t jt|d t| W 5 Q R X d S )NZpandasr   z1y cannot be class 'SparseSeries' or 'SparseArray'rY   )	r>   ZimportorskipZarraysZSparseArrayrB   nanr?   r@   r   )pdrH   r\   r   r   r   !test_type_of_target_pandas_sparseT  s
    
rb   c                  C   s  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ddddgg} t dddddddddddddddddg}t dddddddddddddddddg}t ddddd	g}tj|||fd
d}t| \}}}t|\}}	}
dddgdddgdgdgg}ddddg}dddgdddgdgdgg}t| jd D ]r}t|| ||  t|| ||  t|| ||  t|| ||  t|	| ||  t|
| ||  q4t| ddddddg\}}}t| ddddddg\}}	}
dddgdddgdgdgg}t| jd D ]r}t|| ||  t|| ||  t|| ||  t|| ||  t|	| ||  t|
| ||  q
d S )Nr   r   r$   r)   r*   r/   r3         )r3   r*   )rT   r2   gUUUUUU?gUUUUUU?      ?       @gqq?gqq?)rB   rC   spr   r   rA   rT   r
   )rH   data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]  sR    





,, 
 
rm   c                  C   s   t  } t dd}t }|j|j }}t||j}tddd}t	|
|d \}}t| |||\}	}
t||||\}}t|t|	|	j t|
| t| ||||\}}t|||||\}}t|t||	j t|| d S )NZprecomputed)kernelg      ?r   )Z	test_sizeZrandom_state)r   r   Z	load_irisrh   targetrB   dotTr   listsplitr   r
   )ZclfZclfpZirisXrH   KZcvZ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    

rw   c                     s  t dddg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d	d
dgg dt } t dddgdddgdddgdddgg}t|| dd t ddddg}tt j| dd| | d | d kst fddtdD }t| |dd d S )Nr   r   g 7yAre   rf   g      g      g      @g      g?r2   r)   r$   )Zatol)Zaxis)r$   r$   )r)   r$   c                    s4   g | ],}t t| gt | gd  qS r=   )r   rB   rC   )r   iZconfidencesrk   Zpredictionsr   r   r      s     z.test_ovr_decision_function.<locals>.<listcomp>r*   gư>)rB   rC   r   r   r	   ZargmaxrU   rA   )Z
dec_valuesZvotesZexpected_predictionZdec_values_oner   ry   r   test_ovr_decision_function  s    *"*rz   )>ZnumpyrB   Zscipy.sparsesparserg   	itertoolsr   r>   r   r   r   r   r   r   Zsklearn.utils._testingr	   r
   r   Zsklearn.utils.estimator_checksr   Zsklearn.utils.multiclassr   r   r   r   r   r   Zsklearn.utils.metaestimatorsr   Zsklearn.model_selectionr   Zsklearn.svmr   Zsklearnr   rC   Zsparse_multilable_explicit_zeroboolintZint8Zuint8floatZfloat32r"   randomZRandomStaterandintr<   	frozensetrE   rF   r^   rD   rK   rN   rX   r]   r_   rb   rm   rw   rz   r   r   r   r   <module>   s,  
"" " "" ""$s
-	3