o
    i2                     @   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d-d. Z ejd/d0dd1d2e!dd3fd4dd1d2dd5fd4dd1d2gdd6fgd7d8 Z"d9d: Z#d;d< 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   s|   t g d} t | }td|| d}t | dd  }tt ||| jd  |d |d   k r9|d k s<J  J d S )N   r   r      r      balancedclassesyr   r      )npasarrayuniquer   bincountr   dotshape)r   r   cwclass_counts r   _/home/kim/smarthome/.venv/lib/python3.10/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   sn   | dkrt g dnt g d}t| tjt|d t|||d W d    d S 1 s0w   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   sV   t g d} t g d}td| |d}t|t| ksJ t|t g d d S )Nr4   r   r4   r4   r   r   r<   r<   r   r   )r    r    r    )r   arrayr   r   lenr   )r   r   r   r   r   r   +test_compute_class_weight_balanced_negativez   s
   r@   c                  C   s   t g d} t g d}t g d}t j||dd}td| ||d}td| |d}t|t| ks6J t|t| ks@J t j|d	 |d
}t |d	 }t ||t	t ||ksaJ t
|| d S )Nr;   r=   )r   r   r   r   r   r   r   )Zaxisr   )r   r   sample_weightr   r   )weights)r   r>   r   repeatr   r?   r   r   r)   Zapproxr   )r   r   swZy_repZclass_weights_weightedZclass_weights_repeatedZclass_counts_weightedZclass_counts_repeatedr   r   r   <test_compute_class_weight_balanced_sample_weight_equivalence   s    

rE   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    UUUUUU?)	r   r>   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   ,test_compute_class_weight_balanced_unordered   s   rG   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s8J t|g d tddd|| d}t||ksQJ t|g d	 d S )
Nr   r   r   r   r2   )r2   r    r          ?)r   r   )r2   r    rH   )r   r   r   r?   r   r   ones)r   r   Zclasses_lenr   r   r   r   !test_compute_class_weight_default   s   
rJ   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?rO   rO   rO   rO   rO   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   rA   Zexpected_balancedr   r   r   test_compute_sample_weight   s2   
"


.
.4
rR   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 )NrK   r      indicesrL   r   r   r   )rF   rF   rF   r!   r!   r!   )r   r   r   r   r   r   )333333?rV   rV   r0   r0   r0   r   rN   )r    r    r    r    r    r    g        )r   r   r	   ranger   rQ   r   r   r   )test_compute_sample_weight_with_subsample   s,   "
.4rX   z&y_type, class_weight, indices, err_msgsingle-outputr   rM   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r$|n|}tjt|d t|||d W d    d S 1 s@w   Y  d S )NrK   r   r   r   rY   r&   rT   )r   r   r)   r*   r+   r	   )r,   r-   rU   r.   Zy_single_outputZy_multi_outputr   r   r   r   !test_compute_sample_weight_errors  s   ."rZ   c                  C   s<   t d} t d}td| |d}t|t | jd  d S )N2   r   rT   r   )r   r5   r	   r   rI   r   )r   rU   weightr   r   r   'test_compute_sample_weight_more_than_326  s   

r]   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   &ra   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         ?rc   N)r   r   r	   r   )rb   r   rA   r   r   r   !test_compute_sample_weight_sparseI  s   
rd   )&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@   rE   rG   rJ   rR   rX   rW   rZ   r]   ra   rd   r   r   r   r   <module>   s    
$,'

