U
    3d/                     @   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 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ ZdS )%    N)assert_allclose)sparse)
make_blobs)LogisticRegression)DecisionTreeClassifier)compute_class_weight)compute_sample_weight)assert_array_almost_equal)assert_almost_equalc                  C   s   t ddddddg} t | }td|| d}t | dd  }tt ||| jd  |d |d   k rx|d k s~n td S )N         balancedclassesyr      )	npasarrayuniquer   bincountr
   dotshapeAssertionError)r   r   cwclass_counts r   I/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/utils/tests/test_class_weight.pytest_compute_class_weight   s    
r   c               	   C   s   t d} t ddddddg}tt td| |d W 5 Q R X tjtdd td	d
i| |d W 5 Q R X t d} tt td| |d W 5 Q R X tt td
dd| |d W 5 Q R X t ddg} t dddg}ddd}d}tjt|d t|| |d W 5 Q R X d S )Nr   r   r   r   r   r   z4The classes, \[0, 1, 2, 3\], are not in class_weight)matchZlabel_not_present      ?       @r   r   catZdogr   )Zdogsr#   z/The classes, \['dog'\], are not in class_weight)r   aranger   pytestraises
ValueErrorr   )r   r   class_weightsmsgr   r   r   %test_compute_class_weight_not_present   s(    
 

r*   c                  C   s   t d} dddd}t ddddg}t|| |d	}tt dddg| dddd
d}t|| |d	}tdddg| ddddd}t|| |d	}tdddg| d S )Nr   r    r!         @r   r   r   r   r   r   r         ?)r   r   r   r   g      @g      @)r   r   r   )r   r$   r   r   r	   r   )r   r(   r   r   r   r   r   test_compute_class_weight_dict9   s    
r/   c                  C   s   t ddd\} }t| g| |dk gd  }t|g||dk gd  }t| g| |dk gd  }t|g||dk gd  }t| gd }t|gd }tdd||}tdd||}	tdd||}
t|j|	j t|
j|	j d S )Nr   r   )ZcentersZrandom_stater   r   Zclass_weight)r   r   ZvstackZhstackr   fitr	   Zcoef_)Xr   ZX_1Zy_1ZX_0Zy_0ZX_y_Zlogreg1Zlogreg0Zlogregr   r   r   $test_compute_class_weight_invarianceM   s    
r4   c                  C   s   t dddg} t ddddddg}td| |d}t|t| ksHtt|t dddg t ddddddg}td| |d}t|t| kstt |d }tt 	|||j
d  t|dd	dg d S )
Nr.   r   r   r   r    r   UUUUUU?r!   )r   arrayr   r   lenr   r	   r   r
   r   r   r   r   r   r   r   r   r   +test_compute_class_weight_balanced_negativei   s    r:   c                  C   sn   t dddg} t ddddddg}td| |d}t ||  }tt |||jd  t|dddg d S )	Nr   r   r   r   r   r!   r    r6   )	r   r7   r   r   r   r
   r   r   r	   r9   r   r   r   ,test_compute_class_weight_balanced_unordered}   s    r;   c                  C   s   t ddddddg} t | }t|}td || d}t||ksFtt|t d tddi|| d}t||ksxtt|dddg tddd|| d}t||kstt|dddg d S )	Nr   r   r   r   r-   r    g      ?)r   r   )r   r   r   r8   r   r   r	   ones)r   r   Zclasses_lenr   r   r   r   !test_compute_class_weight_default   s    
r=   c               
   C   s  t ddddddg} td| }t|ddddddg tddd| }t|ddddddg t dgdgdgdgdgdgg} td| }t|ddddddg t dddddddg} td| }t ddddddd	g}t||d
d td | }t|dddddddg t ddgddgddgddgddgddgg} td| }t|ddddddg t ddgddgddgddgddgddgg} tddddddg| }t|ddddddg t ddgddgddgddgddgddgddgg} td| }t||d dd d S )Nr   r   r   r    r   r   r!   r   g,C?g0@r   )decimalr   r"   r.   )r   r   r   r	   r7   r   sample_weightZexpected_balancedr   r   r   test_compute_sample_weight   s2    
"


.
.4
rB   c               
   C   s  t ddddddg} td| tdd}t|ddddddg t dgdgdgdgdgdgg} td| tdd}t|ddddddg t ddddddg} td| tdd}t|dddd	d	d	g t ddddddg} td| d
dddddgd}t ddddddg}t|| t dd
gdd
gdd
gddgddgddgg} td| d
dddddgd}t||d  t dddddddg} td| tdd}t|dddddddg t dd
gdd
gdd
gddgddgddgddgg} td| tdd}t|dddddddg d S )Nr   r   r      indicesr    r   r6   r!   r   r   g333333?r+   g        )r   r   r   ranger	   r@   r   r   r   )test_compute_sample_weight_with_subsample   s,    "
.4rG   c               	   C   sT  t ddddddg} t ddgddgddgddgddgddgg}tt td|  W 5 Q R X tt td| tdd W 5 Q R X tt td| W 5 Q R X tt td|tdd W 5 Q R X tt tddd| tdd W 5 Q R X tt tddd| W 5 Q R X tt tdddg| W 5 Q R X d S )Nr   r   r   nir   rD   r>   )r   r   r%   r&   r'   r   rF   )r   r3   r   r   r   !test_compute_sample_weight_errors   s     ."rI   c                  C   s<   t d} t d}td| |d}t|t | jd  d S )N2   r   rD   r   )r   r$   r   r	   r<   r   )r   rE   Zweightr   r   r   'test_compute_sample_weight_more_than_32  s    

rK   c                  C   s@   t ddddd} | dddgdddgdddggdddg dS )	zcCheck that class_weight can contain more labels than in y.

    Non-regression test for #22413
    r   
      r,   r0   r   r   N)r   r1   )treer   r   r   1test_class_weight_does_not_contains_more_classses  s    rO   c                  C   s6   t tdddgj} td| }t|dddg dS )z0Check that we can compute weight for sparse `y`.r   r   r   r-   g      ?N)r   Z
csc_matrixr   r   Tr   r   )r   rA   r   r   r   !test_compute_sample_weight_sparse   s    
rQ   ) Znumpyr   r%   Znumpy.testingr   Zscipyr   Zsklearn.datasetsr   Zsklearn.linear_modelr   Zsklearn.treer   Zsklearn.utils.class_weightr   r   Zsklearn.utils._testingr	   r
   r   r*   r/   r4   r:   r;   r=   rB   rG   rI   rK   rO   rQ   r   r   r   r   <module>   s.   ,'