a
    �ù»j²E  ã                   @   sJ  d dl Z d dlZd dl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mZmZ g d¢g d¢g d¢g d¢gZej d	d
g d¢g d¢g d¢g d¢gdfdg d¢g d¢g d¢g d¢gdfdg d¢g d¢g d¢g d¢gdfdg d¢g d¢g d¢g d¢gg d¢fdg d¢g d¢g d¢g d¢gg d¢fdg d¢g d¢g d¢g d¢gg d¢fdg d¢g d¢g d¢g d¢gg d¢fdg d¢g d¢g d¢g d¢gg d¢fg¡dd„ ƒZdd„ Zej dd
g¡dd„ ƒZdd„ Zej d	d
g d¢g d¢g d¢g d ¢gdfdg d¢g d¢g d¢g d ¢gdfdg d¢g d¢g d ¢g d ¢gdfdg d¢g d¢g d ¢g d ¢gg d!¢fdg d¢g d¢g d¢g d¢gg d"¢fdg d¢g d¢g d¢g d ¢gg d¢fg¡d#d$„ ƒZej d%¡d&d'„ ƒZej dddg¡d(d)„ ƒZej dg d*¢¡d+d,„ ƒZd-d.„ Zej d/ed0d1ƒ¡d2d3„ ƒZd4d5„ Z ej d6d
g d7¢g d8¢g d9¢fdg d7¢g d:¢g d;¢fdg d<¢g d:¢g d=¢fg¡d>d?„ ƒZ!ej d@d
g dA¢g dB¢g dC¢g dD¢gfdg dE¢g dE¢g dF¢g dG¢gfdg dH¢g dI¢g dJ¢g dJ¢gfg¡ej dKg dL¢¡dMdN„ ƒƒZ"ej dg d*¢¡dOdP„ ƒZ#dQdR„ Z$ej dSdg dT¢fdg dU¢fg¡dVdW„ ƒZ%dXdY„ Z&ej dZej'ej(ej)g¡ej d[dej(ej)g¡ej dKg dL¢¡d\d]„ ƒƒƒZ*ej d^ej'ej(ej)g¡ej dKg dL¢¡d_d`„ ƒƒZ+dadb„ Z,ej dcdddedf„ edgƒD ƒfdhdidf„ edgƒD ƒfdjdkdf„ edgƒD ƒfg¡dldm„ ƒZ-ej dg d*¢¡dndo„ ƒZ.dpdq„ Z/dS )ré    N)Úclone)ÚKBinsDiscretizerÚOneHotEncoder)Úassert_allcloseÚassert_allclose_dense_sparseÚassert_array_almost_equalÚassert_array_equal©éþÿÿÿç      ø?éüÿÿÿéÿÿÿÿ)r   ç      @éýÿÿÿç      à¿)r   g      @r
   ç      à?)é   g      @r   é   z!strategy, expected, sample_weightÚuniform)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   Úkmeans)r   r   r   r   Úquantile)r   r   r   r   )r   r   r   r   )r   r   é   r   c                 C   s0   t dd| d�}|jt|d� t|| t¡ƒ d S )Nr   Úordinal©Ún_binsÚencodeÚstrategy©Úsample_weight)r   ÚfitÚXr   Ú	transform)r   Úexpectedr   Úest© r$   úUE:\soccer\ml_env\Lib\site-packages\sklearn/preprocessing/tests/test_discretization.pyÚtest_fit_transform   s    "r&   c                   C   sR   t dd� t¡ t t dg¡d d� t¡ t dd� t¡jjt t¡ksNJ ‚d S )Nr   ©r   r   )	r   Úfit_transformr    ÚnpÚarrayr   Ún_bins_ÚdtypeÚintr$   r$   r$   r%   Útest_valid_n_bins:   s    r.   r   c                 C   s`   t jttƒd�}td| d�}d}tjt|d�� |jt|d� W d  ƒ n1 sR0    Y  dS )z=Check that we raise an error when the wrong strategy is used.)Úshaper   )r   r   zK`sample_weight` was provided but it cannot be used with strategy='uniform'.©Úmatchr   N)	r)   ZonesÚlenr    r   ÚpytestÚraisesÚ
ValueErrorr   )r   r   r#   Úerr_msgr$   r$   r%   Ú1test_kbinsdiscretizer_wrong_strategy_with_weights@   s    ÿr7   c                  C   sB  t  dd¡} t| d�}d}tjt|d�� | t¡ W d   ƒ n1 sH0    Y  g d¢} t| d�}d}tjt|d�� | t¡ W d   ƒ n1 s–0    Y  g d¢} t| d�}d}tjt|d�� | t¡ W d   ƒ n1 sä0    Y  g d	¢} t| d�}d
}tjt|d�� | t¡ W d   ƒ n1 �s40    Y  d S )N)r   é   ç       @r'   z:n_bins must be a scalar or array of shape \(n_features,\).r0   )r   r   r   ©r   r   r   r   z{KBinsDiscretizer received an invalid number of bins at indices 0, 3. Number of bins must be at least 2, and must be an int.)çÍÌÌÌÌÌ @r   r;   r   z{KBinsDiscretizer received an invalid number of bins at indices 0, 2. Number of bins must be at least 2, and must be an int.)r)   Úfullr   r3   r4   r5   r(   r    )r   r#   r6   r$   r$   r%   Útest_invalid_n_bins_arrayL   s,    
(
(
ÿ(
ÿr=   )r   r   r   r   r:   )r   r   r   r   )r   r   r   r   )r   r   r   r   c                 C   s~   t g d¢d| d�jt|d�}t|| t¡ƒ t t¡jd }|jj|fksNJ ‚t	|j|j
ƒD ]\}}|j|d fks\J ‚q\d S )N©r   r   r   r   r   r   r   r   )r   r   r    r   r!   r)   r*   r/   Ú
bin_edges_Úzipr+   )r   r"   r   r#   Z
n_featuresÚ	bin_edgesr   r$   r$   r%   Útest_fit_transform_n_bins_arrayr   s    %
ÿþrB   z&ignore: Bins whose width are too smallc                  C   s‚   t  dgdgdgdgdgdgg¡} tddd	d
�}|j| g d¢d� t|jd g d¢ƒ t| | ¡dgdgdgdgdgdggƒ dS )z;Check the impact of `sample_weight` one computed quantiles.r
   r   r   r   iô  iè  é
   r   r   r   )r   r   r   r   r   r   r   r   )r
   r   r   r   ç        g      ð?r9   N)r)   r*   r   r   r   r?   r!   ©r    r#   r$   r$   r%   Ú*test_kbinsdiscretizer_effect_sample_weight£   s
    "rF   c                 C   sH   t dd| d�}tjg d¢tjd�}t |¡}|jt|d� t||ƒ dS )z7Make sure that `sample_weight` is not changed in place.r   r   r   )r   r   r   r   ©r,   r   N)r   r)   r*   Úfloat64Úcopyr   r    r   )r   r#   r   Zsample_weight_copyr$   r$   r%   Ú/test_kbinsdiscretizer_no_mutating_sample_weight¯   s
    
rJ   )r   r   r   c                 C   s¸   t  d¡ t ddgddgddgddgg¡}t| ddd�}d	}tjt|d
�� | |¡ W d   ƒ n1 sl0    Y  |j	d dksˆJ ‚| 
|¡}t|d d …df t |jd ¡ƒ d S )NÚalwaysr   r
   r   r   r   r   )r   r   r   z2Feature 0 is constant and will be replaced with 0.r0   )ÚwarningsÚsimplefilterr)   r*   r   r3   ÚwarnsÚUserWarningr   r+   r!   r   Zzerosr/   )r   r    r#   Úwarning_messageÚXtr$   r$   r%   Útest_same_min_max¹   s    
"(
rR   c                  C   sœ   t  d¡} tdd�}t t¡� | | ¡ W d   ƒ n1 s>0    Y  tdd�}| |  dd¡¡ t t¡� | | ¡ W d   ƒ n1 sŽ0    Y  d S )Nr8   r   r'   r   r   )	r)   Úaranger   r3   r4   r5   r   Úreshaper!   rE   r$   r$   r%   Útest_transform_1d_behaviorÇ   s    

(
rU   Úir   é	   c                 C   sX   t  g d¢¡ dd¡}t  g d¢¡ dd¡}|d|   }tddd� |¡}t||ƒ d S )	N)r9   ç      @g      @g       @g      $@r   r   )r   r   r   r   r   rC   r   r   ©r   r   )r)   r*   rT   r   r(   r   )rV   ZX_initZXt_expectedr    rQ   r$   r$   r%   Útest_numeric_stabilityÓ   s
    rZ   c                  C   sÌ   t g d¢dd� t¡} |  t¡}t g d¢dd� t¡} |  t¡}t |¡rNJ ‚ttdd„ dD ƒdd� |¡|ƒ t g d¢d	d� t¡} |  t¡}t |¡sžJ ‚ttd
d„ dD ƒdd� |¡ 	¡ | 	¡ ƒ d S )Nr>   r   rY   úonehot-densec                 S   s   g | ]}t  |¡‘qS r$   ©r)   rS   ©Ú.0rV   r$   r$   r%   Ú
<listcomp>æ   ó    z'test_encode_options.<locals>.<listcomp>F)Ú
categoriesZsparse_outputÚonehotc                 S   s   g | ]}t  |¡‘qS r$   r\   r]   r$   r$   r%   r_   ï   r`   T)
r   r   r    r!   ÚspÚissparser   r   r(   Ztoarray)r#   ZXt_1ZXt_2ZXt_3r$   r$   r%   Útest_encode_optionsÞ   s0    

ÿþü
ÿýúre   z8strategy, expected_2bins, expected_3bins, expected_5bins)r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r8   r8   )r   r   r   r   r   r   )r   r   r   r   r   r8   )r   r   r   r   r   r   )r   r   r   r   r8   r8   c                 C   sŒ   t  g d¢¡ dd¡}td| dd�}| |¡}t|| ¡ ƒ td| dd�}| |¡}t|| ¡ ƒ td| dd�}| |¡}t|| ¡ ƒ d S )	N)r   r   r   r   rW   rC   r   r   r   r   ©r   r   r   r   é   )r)   r*   rT   r   r(   r   Zravel)r   Zexpected_2binsZexpected_3binsZexpected_5binsr    r#   rQ   r$   r$   r%   Útest_nonuniform_strategies÷   s    


rh   zstrategy, expected_inv)ç      ø¿r9   ç      Àr   )r   ç      @ç      Àr   )r   rX   ri   r   )r   rX   ri   r   )g      ö¿g      @g      Àg      â¿)g      À¿g      @g      Àg      â?)g      è?g      @g      ô¿g      ú?)ri   r9   rj   g      è¿)r   rk   rl   rD   )r   rX   ri   g      ô?r   )r   rb   r[   c                 C   s0   t d| |d�}| t¡}| |¡}t||ƒ d S )Nr   rf   )r   r(   r    Úinverse_transformr   )r   r   Zexpected_invÚkbdrQ   ÚXinvr$   r$   r%   Útest_inverse_transform  s    "

rp   c                 C   s†   t  g d¢¡d d …d f }td| dd�}| |¡ t  ddg¡d d …d f }| |¡}t|jdd�d	 |jƒ t|jdd�dgƒ d S )
N©r   r   r   r   r8   r   rf   r
   rg   r   )Zaxisr   )	r)   r*   r   r   r!   r   Úmaxr+   Úmin)r   r    rn   ZX2ZX2tr$   r$   r%   Ú test_transform_outside_fit_range<  s    

rt   c                  C   s‚   t  g d¢¡d d …d f } |  ¡ }tddd�}| | ¡}t| |ƒ | ¡ }| |¡}t||ƒ t|t  dgdgdgdgg¡ƒ d S )Nrq   r   r   rY   r   r   r   )r)   r*   rI   r   r(   r   rm   )r    ZX_beforer#   rQ   Z	Xt_beforero   r$   r$   r%   Útest_overwriteH  s    



ru   zstrategy, expected_bin_edges)r   r   r   )r   r   r   c                 C   sz   dgdgdgdgdgdgg}t d| d d�}d}tjt|d�� | |¡ W d   ƒ n1 s\0    Y  t|jd |ƒ d S )Nr   r   )r   r   Ú	subsampleú'Consider decreasing the number of bins.r0   )r   r3   rN   rO   r   r   r?   )r   Zexpected_bin_edgesr    rn   rP   r$   r$   r%   Útest_redundant_binsV  s    (rx   c                  C   s¨   t  g d¢¡ dd¡} t  g d¢¡}t  g d¢¡ dd¡}tdddd	�}d
}tjt|d�� | | ¡ W d   ƒ n1 sz0    Y  t|j	d |ƒ t| 
| ¡|ƒ d S )N)çš™™™™™©?ry   çffffffî?r   r   )ry   gq=
×£pÍ?g=
×£p=Ú?gáz®Gáâ?g¤p=
×£è?rz   )r   r   r8   rC   r   r   r   rw   r0   r   )r)   r*   rT   r   r3   rN   rO   r   r   r?   r!   )r    rA   rQ   rn   rP   r$   r$   r%   Ú!test_percentile_numeric_stabilityb  s    (r{   Úin_dtypeÚ	out_dtypec                 C   sr   t jt| d�}td||d�}| |¡ |d ur4|}n"|d u rP|jt jkrPt j}n|j}| |¡}|j|ksnJ ‚d S ©NrG   r   )r   r   r,   )	r)   r*   r    r   r   r,   Úfloat16rH   r!   )r|   r}   r   ÚX_inputrn   Zexpected_dtyperQ   r$   r$   r%   Útest_consistent_dtypeo  s    

r�   Úinput_dtypec                 C   sd   t jt| d�}td|t jd�}| |¡ | |¡}td|t jd�}| |¡ | |¡}t||ƒ d S r~   )	r)   r*   r    r   Úfloat32r   r!   rH   r   )r‚   r   r€   Zkbd_32ZXt_32Zkbd_64ZXt_64r$   r$   r%   Útest_32_equal_64ƒ  s    



r„   c                  C   s’   t  g d¢¡ dd¡} tdddd�}| | ¡ t|ƒ}|jd d� | | ¡ t|jd	 |jd	 ƒD ]\}}t j	 
||¡ qb|jj|jjksŽJ ‚d S )
Nr	   r   r   rC   r   r   r   ©rv   r   )r)   r*   rT   r   r   r   Ú
set_paramsr@   r?   Ztestingr   r/   )r    Zkbd_defaultZkbd_without_subsamplingZbin_kbd_defaultZbin_kbd_with_subsamplingr$   r$   r%   Ú'test_kbinsdiscretizer_subsample_default—  s    

ÿr‡   zencode, expected_namesrb   c                 C   s.   g | ]&}t d ƒD ]}d|› dt|ƒ› �‘qqS ©r8   ÚfeatÚ_©ÚrangeÚfloat©r^   Úcol_idZbin_idr$   r$   r%   r_   ­  s   þr_   r   r[   c                 C   s.   g | ]&}t d ƒD ]}d|› dt|ƒ› �‘qqS rˆ   r‹   rŽ   r$   r$   r%   r_   µ  s   þr   c                 C   s   g | ]}d |› �‘qS ©r‰   r$   )r^   r�   r$   r$   r%   r_   »  r`   c                 C   sz   g d¢g d¢g d¢g d¢g}t d| d� |¡}| |¡}dd„ td	ƒD ƒ}| |¡}|jd
 |jd kslJ ‚t||ƒ dS )z[Check get_feature_names_out for different settings.
    Non-regression test for #22731
    )r
   r   r   )r   r   r   )r   r   r
   )r   r8   r   r8   rY   c                 S   s   g | ]}d |› �‘qS r�   r$   r]   r$   r$   r%   r_   Ç  r`   z>test_kbinsdiscrtizer_get_feature_names_out.<locals>.<listcomp>r   r   r   N)r   r   r!   rŒ   Zget_feature_names_outr/   r   )r   Zexpected_namesr    rn   rQ   Zinput_featuresZoutput_namesr$   r$   r%   Ú*test_kbinsdiscrtizer_get_feature_names_out¨  s    

r‘   c                 C   sj   t j |¡ d¡d }t| d|d�}| |¡ t|ƒ}|jd d� | |¡ t|j	d |j	d dd� d S )	N)i † r   r   iPÃ  )r   rv   Zrandom_stater…   r   g{®Gáz„?)Zrtol)
r)   ÚrandomZRandomStateZrandom_sampler   r   r   r†   r   r?   )r   Zglobal_random_seedr    Zkbd_subsamplingZkbd_no_subsamplingr$   r$   r%   Útest_kbinsdiscretizer_subsampleÎ  s    ÿ

ÿr“   c                  C   s  t  d¡d d …d f } tƒ }| | ¡} tjtdd�� | ¡  W d   ƒ n1 sR0    Y  tjtdd�� |j| | d� W d   ƒ n1 sŽ0    Y  tj	dd��$ t 
d¡ | | ¡ W d   ƒ n1 sÎ0    Y  tjtd	d�� |j| d
� W d   ƒ n1 �s
0    Y  d S )NrC   z$Missing required positional argumentr0   z$Cannot use both X and Xt. Use X only)r    rQ   T)ÚrecordÚerrorzXt was renamed X in version 1.5)rQ   )r)   rS   r   r(   r3   r4   Ú	TypeErrorrm   rL   Úcatch_warningsrM   rN   ÚFutureWarning)r    rn   r$   r$   r%   Ú)test_KBD_inverse_transform_Xt_deprecationä  s    
&,
(r™   )0rL   Únumpyr)   r3   Zscipy.sparseÚsparserc   Zsklearnr   Zsklearn.preprocessingr   r   Zsklearn.utils._testingr   r   r   r   r    ÚmarkZparametrizer&   r.   r7   r=   rB   ÚfilterwarningsrF   rJ   rR   rU   rŒ   rZ   re   rh   rp   rt   ru   rx   r{   r   rƒ   rH   r�   r„   r‡   r‘   r“   r™   r$   r$   r$   r%   Ú<module>   s     ýýýýýèþ!

&   ýýýåþ$



	


ýþ
üþ
üþ
üþíþ 
ÿ
	þþ	þþïþ

