a
    h0                     @   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mZ d dlmZmZ d dlmZ d	d
 Zejdddeddfdddieddfddeddfddddeddfddddeddgdfgdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zejd-d.dd/d0e dd1fd2dd/d0dd3fd2dd/d0gdd4fgd5d6 Z!d7d8 Z"d9d: Z#ejd;ed<d= Z$dS )>    N)assert_allclose)
make_blobs)LogisticRegression)DecisionTreeClassifier)assert_almost_equalassert_array_almost_equal)compute_class_weightcompute_sample_weight)CSC_CONTAINERSc                  C   sz   t g d} t | }td|| d}t | dd  }tt ||| jd  |d |d   k rp|d k svn J d S )N   r   r      r      balancedclassesyr   r      )npasarrayuniquer   bincountr   dotshape)r   r   cwclass_counts r   a/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/utils/tests/test_class_weight.pytest_compute_class_weight   s    
r   z&y_type, class_weight, classes, err_msgnumericr   r   z.classes should have valid labels that are in yZlabel_not_present      ?z4The classes, \[0, 1, 2, 3\], are not in class_weightr   z'classes should include all valid labels       @r   r   stringr   )Zdogscatdogr$   z/The classes, \['dog'\], are not in class_weightc                 C   sl   | dkrt g dnt g d}t| tjt|d t|||d W d    n1 s^0    Y  d S )Nr   )r   r   r   r   r   r   )r%   r$   r%   matchr   )r   r   printpytestraises
ValueErrorr   )y_typeclass_weightr   err_msgr   r   r   r   %test_compute_class_weight_not_present   s    (r/   c                  C   s   t d} dddd}t g d}t|| |d}tt g d| dddd	d
}t|| |d}tg d| ddddd}t|| |d}tg d| d S )Nr   r    r!         @r   r   r   )r   r   r   r   r   )r    r!   r0         ?)r   r   r   r   g      @      @)r   r   r   )r3   r!   r0   )r   aranger   r   r   r   )r   Zclass_weightsr   r   r   r   r   test_compute_class_weight_dictJ   s    
r6   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   r-   )r   r   ZvstackZhstackr   fitr   Zcoef_)Xr   ZX_1Zy_1ZX_0Zy_0ZX_Zy_Zlogreg1Zlogreg0Zlogregr   r   r   $test_compute_class_weight_invariance^   s    
r:   c                  C   s   t g d} t g d}td| |d}t|t| ks>J t|t g d t g d}td| |d}t|t| ksJ t |d }tt |||j	d  t|g d	 d S )
N)r4   r   )r4   r4   r   r   r;   r;   r   r   )r    r    r    )r4   r   r   r;   r;   r;   r   r   )UUUUUU?r!   r    )
r   arrayr   r   lenr   r   r   r   r   r   r   r   r   r   r   r   +test_compute_class_weight_balanced_negativez   s    r@   c                  C   sb   t g d} t g d}td| |d}t ||  }tt |||jd  t|g d d S )N)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?   r   r   r   ,test_compute_class_weight_balanced_unordered   s    rA   c                  C   s   t g d} t | }t|}td || d}t||ks>J t|t d tddi|| d}t||kspJ t|g d tddd|| d}t||ksJ t|g d	 d S )
Nr   r   r   r   r2   )r2   r    r          ?)r   r   )r2   r    rB   )r   r   r   r>   r   r   ones)r   r   Zclasses_lenr   r   r   r   !test_compute_class_weight_default   s    
rD   c               
   C   s  t g d} td| }t|g d tddd| }t|g d t dgdgdgdgdgdgg} td| }t|g d t g d} td| }t g d	}t||d
d td | }t|g d t ddgddgddgddgddgddgg} td| }t|g d 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|g d 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 )N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   r   r   r   r   r   ),C?rI   rI   rI   rI   rI   g0@r   )decimal)r    r    r    r    r    r    r    r   r"   )r!   r!   r!   r!   r!   r!   r   r4   )r   r   r	   r   r=   r   sample_weightZexpected_balancedr   r   r   test_compute_sample_weight   s2    
"


.
.4
rM   c               
   C   s  t g d} td| tdd}t|g d t dgdgdgdgdgdgg} td| tdd}t|g d t g d} td| tdd}t|g d	 t g d} td| g d
d}t g d}t|| t ddgddgddgddgddgddgg} td| g d
d}t||d  t g d} td| tdd}t|g d 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|g d d S )NrE   r      indicesrF   r   r   r   )r<   r<   r<   r!   r!   r!   )r   r   r   r   r   r   )333333?rQ   rQ   r0   r0   r0   r   rH   )r    r    r    r    r    r    g        )r   r   r	   ranger   rK   r   r   r   )test_compute_sample_weight_with_subsample   s,    "
.4rS   z&y_type, class_weight, indices, err_msgsingle-outputr   rG   z:The only valid class_weight for subsampling is 'balanced'.zmulti-outputzGFor multi-output, class_weight should be a list of dicts, or the stringz)Got 1 element\(s\) while having 2 outputsc              	   C   s   t g d}t ddgddgddgddgddgddgg}| dkrH|n|}tjt|d t|||d W d    n1 s~0    Y  d S )NrE   r   r   r   rT   r&   rO   )r   r   r)   r*   r+   r	   )r,   r-   rP   r.   Zy_single_outputZy_multi_outputr   r   r   r   !test_compute_sample_weight_errors  s
    .rU   c                  C   s<   t d} t d}td| |d}t|t | jd  d S )N2   r   rO   r   )r   r5   r	   r   rC   r   )r   rP   weightr   r   r   'test_compute_sample_weight_more_than_32$  s    

rX   c                  C   s8   t ddddd} | g dg dg dgg d d	S )
zcCheck that class_weight can contain more labels than in y.

    Non-regression test for #22413
    r   
      r1   r7   )r   r   r   )r   r   r   )r   r   r   N)r   r8   )treer   r   r   0test_class_weight_does_not_contains_more_classes,  s    r\   csc_containerc                 C   s6   | t dgdgdgg}td|}t|g d dS )z0Check that we can compute weight for sparse `y`.r   r   r   )r2         ?r^   N)r   r   r	   r   )r]   r   rL   r   r   r   !test_compute_sample_weight_sparse7  s    
r_   )%numpyr   r)   Znumpy.testingr   Zsklearn.datasetsr   Zsklearn.linear_modelr   Zsklearn.treer   Zsklearn.utils._testingr   r   Zsklearn.utils.class_weightr   r	   Zsklearn.utils.fixesr
   r   markZparametrizer5   r=   r/   r6   r:   r@   rA   rD   rM   rS   rR   rU   rX   r\   r_   r   r   r   r   <module>   s   $
,'

