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   /var/www/www-root/data/www/176.119.141.140/sports-predictor/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 ylabel_not_present      ?z4The classes, \[0, 1, 2, 3\], are not in class_weightr   z'classes should include all valid labels       @r   r   stringr   )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   ("r1   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"   r2         ?)r   r   r   r   g      @      @)r   r   r   )r5   r"   r2   )r   aranger   r   r   r   )r   class_weightsr   r   r   r   r   test_compute_class_weight_dictJ   s   
r9   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   )centersrandom_stater   r   r/   )r   r   vstackhstackr   fitr   coef_)Xr   X_1y_1X_0y_0X_y_logreg1logreg0logregr   r   r   $test_compute_class_weight_invariance^   s   
rK   c                  C   sV   t g d} t g d}td| |d}t|t| ksJ t|t g d d S )Nr6   r   r6   r6   r   r   rM   rM   r   r   )r!   r!   r!   )r   arrayr   r   lenr   )r   r   r   r   r   r   +test_compute_class_weight_balanced_negativez   s
   rQ   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 )NrL   rN   )r   r   r   r   r   r   r   )axisr   )r   r   sample_weightr   r   )weights)r   rO   r   repeatr   rP   r   r   r+   approxr   )r   r   swy_repclass_weights_weightedclass_weights_repeatedclass_counts_weightedclass_counts_repeatedr   r   r   <test_compute_class_weight_balanced_sample_weight_equivalence   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!   UUUUUU?)	r   rO   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   ,test_compute_class_weight_balanced_unordered   s   r_   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   r4   )r4   r!   r!         ?)r   r   )r4   r!   r`   )r   r   r   rP   r   r   ones)r   r   classes_lenr   r   r   r   !test_compute_class_weight_default   s   
rc   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?rh   rh   rh   rh   rh   g0@r   )decimal)r!   r!   r!   r!   r!   r!   r!   r   r#   )r"   r"   r"   r"   r"   r"   r   r6   )r   r   r	   r   rO   r   rS   expected_balancedr   r   r   test_compute_sample_weight   s2   
"


.
.4
rl   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 )Nrd   r      indicesre   r   r   r   )r^   r^   r^   r"   r"   r"   )r   r   r   r   r   r   )333333?rp   rp   r2   r2   r2   r   rg   )r!   r!   r!   r!   r!   r!   g        )r   r   r	   ranger   rj   r   r   r   )test_compute_sample_weight_with_subsample   s,   "
.4rr   z&y_type, class_weight, indices, err_msgsingle-outputr   rf   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 )Nrd   r   r   r   rs   r(   rn   )r   r   r+   r,   r-   r	   )r.   r/   ro   r0   y_single_outputy_multi_outputr   r   r   r   !test_compute_sample_weight_errors  s   ."rv   c                  C   s<   t d} t d}td| |d}t|t | jd  d S )N2   r   rn   r   )r   r7   r	   r   ra   r   )r   ro   weightr   r   r   'test_compute_sample_weight_more_than_326  s   

ry   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   
      r3   r<   )r   r   r   )r   r   r   )r   r   r   N)r   r?   )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   )r4         ?r   N)r   r   r	   r   )r~   r   rS   r   r   r   !test_compute_sample_weight_sparseI  s   
r   )&numpyr   r+   numpy.testingr   sklearn.datasetsr   sklearn.linear_modelr   sklearn.treer   sklearn.utils._testingr   r   sklearn.utils.class_weightr   r	   sklearn.utils.fixesr
   r   markparametrizer7   rO   r1   r9   rK   rQ   r]   r_   rc   rl   rr   rq   rv   ry   r}   r   r   r   r   r   <module>   s    
$,'

