U
    _»{jvF  ã                   @   s<  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 ddddgdd	d
dgd dddgddddggZej ddd d d d gdddd gddddgddddggdfdd d d d gd d d d gddddgddddggdfdd d d d gddddgddddgddddggdfdd d d d gddddgddddgddddggddddgfdd d d d gddddgddddgddddggddddgfdd d d d gd d d d gddddgddddggd dddgfdd d d d gdddd gddddgddddggdd ddgfdd d d d gd d d d gddddgddddggddddgfg¡ej d¡dd„ ƒƒZdd„ Zej ddg¡dd„ ƒZdd„ Zej ddd d d d gd ddd gddddgddddggdfdd d d d gd d d d gddddgddddggdfdd d d d gd dddgddddgddddggdfdd d d d gd dddgddddgddddggddddgfdd d d d gd d d d gddddgddddggd dddgfdd d d d gd ddd gddddgddddggdd ddgfg¡ej d¡d d!„ ƒƒZej d"¡d#d$„ ƒZej d¡ej dddg¡d%d&„ ƒƒZej ddddg¡d'd(„ ƒZd)d*„ Zej d+edd,ƒ¡d-d.„ ƒZd/d0„ Z ej d1dd d d d ddgd d d d ddgd d ddd2d2gfdd d d d ddgd d ddddgd d dddd2gfdd d d dddgd d ddddgd dddd2d2gfg¡ej d¡d3d4„ ƒƒZ!ej d5dd6d7d8dgdd9d:dgdd;d6dgdd;d6dggfdd<d=d>d?gd<d=d>d?gd@dAdBdCgdDdEdFdGggfdd6d7d8dHgdd9d:dIgdd;d6dJgdd;d6dJggfg¡ej d¡ej dKdLdMdNg¡dOdP„ ƒƒƒZ"ej d¡ej ddddg¡dQdR„ ƒƒZ#dSdT„ Z$ej dUdd ddgfdd ddg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 dKdLdMdNg¡d\d]„ ƒƒƒZ*ej d^ej'ej(ej)g¡ej dKdLdMdNg¡d_d`„ ƒƒZ+dadb„ Z,ej dcdMddde„ edƒD ƒfdNdfde„ edƒD ƒfdLdgde„ edƒD ƒfg¡dhdi„ ƒZ-ej ddddg¡djdk„ ƒZ.ej dddg¡dldm„ ƒZ/dS )né    N)Úclone)ÚKBinsDiscretizerÚOneHotEncoder)Úassert_allcloseÚassert_allclose_dense_sparseÚassert_array_almost_equalÚassert_array_equaléþÿÿÿç      ø?éüÿÿÿéÿÿÿÿç      @éýÿÿÿg      à¿g      @ç      à?é   g      @é   z!strategy, expected, sample_weightÚuniformZkmeansÚquantileé   z0ignore:In version 1.5 onwards, subsample=200_000c                 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!   ún/var/www/html/bwave/python/venv/lib/python3.8/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sNt	‚d S )Nr   ©r   r   )
r   Úfit_transformr   ÚnpÚarrayr   Ún_bins_ÚdtypeÚintÚAssertionErrorr!   r!   r!   r"   Útest_valid_n_bins<   s    r,   r   c              	   C   sL   t jttƒd�}td| d�}d}tjt|d�� |jt|d� W 5 Q R X 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_weightsB   s    ÿr6   c               	   C   sú   t  dd¡} t| d�}d}tjt|d�� | t¡ W 5 Q R X dddg} t| d�}d}tjt|d�� | t¡ W 5 Q R X ddddg} t| d�}d}tjt|d�� | t¡ W 5 Q R X d	dd	dg} t| d�}d
}tjt|d�� | t¡ W 5 Q R X d S )N)r   é   ç       @r$   z:n_bins must be a scalar or array of shape \(n_features,\).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.gÍÌÌÌÌÌ @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   r2   r3   r4   r%   r   )r   r    r5   r!   r!   r"   Útest_invalid_n_bins_arrayN   s,    



ÿ
ÿr:   c                 C   s‚   t ddddgd| d�jt|d�}t|| t¡ƒ t t¡jd }|jj|fksRt	‚t
|j|jƒD ]\}}|j|d fks`t	‚q`d S )Nr   r   r   r   r   r   )r   r   r   r   r   r&   r'   r-   Ú
bin_edges_r+   Úzipr(   )r   r   r   r    Z
n_featuresÚ	bin_edgesr   r!   r!   r"   Útest_fit_transform_n_bins_arrayt   s    '
  ÿ þr>   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| ddddddgd� t|jd ddddgƒ 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   ç        g      ð?r8   N)r&   r'   r   r   r   r;   r   ©r   r    r!   r!   r"   Ú*test_kbinsdiscretizer_effect_sample_weight§   s
    "rB   c                 C   sL   t dd| d�}tjddddg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   N)r   r&   r'   Úfloat64Úcopyr   r   r   )r   r    r   Zsample_weight_copyr!   r!   r"   Ú/test_kbinsdiscretizer_no_mutating_sample_weight´   s
    
rF   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 5 Q R X |j	d dkstt
‚| |¡}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.r/   )ÚwarningsÚsimplefilterr&   r'   r   r2   ÚwarnsÚUserWarningr   r(   r+   r   r   Zzerosr-   )r   r   r    Úwarning_messageÚXtr!   r!   r"   Útest_same_min_max¿   s    
"
rN   c               	   C   st   t  d¡} tdd�}t t¡� | | ¡ W 5 Q R X tdd�}| |  dd¡¡ t t¡� | | ¡ W 5 Q R X d S )Nr7   r   r$   r   r   )	r&   Úaranger   r2   r3   r4   r   Úreshaper   rA   r!   r!   r"   Útest_transform_1d_behaviorÍ   s    


rQ   Úié	   c                 C   sd   t  dddddg¡ dd¡}t  dddddg¡ dd¡}|d	|   }td
dd� |¡}t||ƒ d S )Nr8   ç      @g      @g       @g      $@r   r   r   r?   r   r   ©r   r   )r&   r'   rP   r   r%   r   )rR   ZX_initZXt_expectedr   rM   r!   r!   r"   Útest_numeric_stabilityÙ   s
    rV   c                  C   sØ   t ddddgdd� t¡} |  t¡}t ddddgdd� t¡} |  t¡}t |¡rVt‚ttdd„ dD ƒd	d
� 	|¡|ƒ t ddddgdd� t¡} |  t¡}t |¡sªt‚ttdd„ dD ƒdd
� 	|¡ 
¡ | 
¡ ƒ d S )Nr   r   r   rU   úonehot-densec                 S   s   g | ]}t  |¡‘qS r!   ©r&   rO   ©Ú.0rR   r!   r!   r"   Ú
<listcomp>ì   s     z'test_encode_options.<locals>.<listcomp>)r   r   r   r   F)Ú
categoriesZsparse_outputÚonehotc                 S   s   g | ]}t  |¡‘qS r!   rX   rY   r!   r!   r"   r[   õ   s     T)r   r   r   r   ÚspÚissparser+   r   r   r%   Ztoarray)r    ZXt_1ZXt_2ZXt_3r!   r!   r"   Útest_encode_optionsä   s4    

 ÿþü
 ÿýúr`   z8strategy, expected_2bins, expected_3bins, expected_5binsr7   c                 C   s”   t  ddddddg¡ dd¡}td| d	d
�}| |¡}t|| ¡ ƒ td| d	d
�}| |¡}t|| ¡ ƒ td| d	d
�}| |¡}t|| ¡ ƒ d S )Nr   r   r   r   rS   r?   r   r   r   ©r   r   r   é   )r&   r'   rP   r   r%   r   Zravel)r   Zexpected_2binsZexpected_3binsZexpected_5binsr   r    rM   r!   r!   r"   Útest_nonuniform_strategiesý   s    


rc   zstrategy, expected_invg      ø¿r8   g      Àg      @g      ÀrT   g      ö¿g      @g      Àg      â¿g      À¿g      @g      Àg      â?g      è?g      @g      ô¿g      ú?g      è¿r@   g      ô?r   r   r]   rW   c                 C   s0   t d| |d�}| t¡}| |¡}t||ƒ d S )Nr   ra   )r   r%   r   Úinverse_transformr   )r   r   Zexpected_invÚkbdrM   ÚXinvr!   r!   r"   Útest_inverse_transform  s    $

rg   c                 C   sŠ   t  ddddg¡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 )Nr   r   r   r   r7   r   ra   r	   rb   )Zaxis)	r&   r'   r   r   r   r   Úmaxr(   Úmin)r   r   re   ZX2ZX2tr!   r!   r"   Ú test_transform_outside_fit_rangeG  s    

rj   c                  C   s†   t  ddddg¡d d …d f } |  ¡ }tddd�}| | ¡}t| |ƒ | ¡ }| |¡}t||ƒ t|t  dgdgd	gd	gg¡ƒ d S )
Nr   r   r   r   r   rU   r   r
   r   )r&   r'   rE   r   r%   r   rd   )r   ZX_beforer    rM   Z	Xt_beforerf   r!   r!   r"   Útest_overwriteT  s    



rk   zstrategy, expected_bin_edgesc              	   C   sd   dgdgdgdgdgdgg}t d| d�}d}tjt|d�� | |¡ W 5 Q R X t|jd |ƒ d S )Nr   r   r.   ú'Consider decreasing the number of bins.r/   )r   r2   rJ   rK   r   r   r;   )r   Zexpected_bin_edgesr   re   rL   r!   r!   r"   Útest_redundant_binsb  s    rm   c               	   C   s    t  dddg¡ dd¡} t  ddddddg¡}t  d	d	d
g¡ dd¡}tdddd�}d}tjt|d�� | | ¡ W 5 Q R X t|j	d	 |ƒ t| 
| ¡|ƒ d S )Ngš™™™™™©?gffffffî?r   r   gq=
×£pÍ?g=
×£p=Ú?gáz®Gáâ?g¤p=
×£è?r   r7   r?   r   r   r   rl   r/   )r&   r'   rP   r   r2   rJ   rK   r   r   r;   r   )r   r=   rM   re   rL   r!   r!   r"   Ú!test_percentile_numeric_stabilityn  s    rn   Úin_dtypeÚ	out_dtypec                 C   sr   t jt| d�}td||d�}| |¡ |d k	r4|}n"|d krP|jt jkrPt j}n|j}| |¡}|j|ksnt	‚d S ©NrC   r   )r   r   r)   )
r&   r'   r   r   r   r)   Úfloat16rD   r   r+   )ro   rp   r   ÚX_inputre   Zexpected_dtyperM   r!   r!   r"   Útest_consistent_dtype{  s    

rt   Úinput_dtypec                 C   sd   t jt| d�}td|t jd�}| |¡ | |¡}td|t jd�}| |¡ | |¡}t||ƒ d S rq   )	r&   r'   r   r   Úfloat32r   r   rD   r   )ru   r   rs   Zkbd_32ZXt_32Zkbd_64ZXt_64r!   r!   r"   Útest_32_equal_64�  s    



rw   c                  C   s–   t  ddddg¡ dd¡} tdddd	�}| | ¡ t|ƒ}|jd d
� | | ¡ t|jd |jd ƒD ]\}}t j	 
||¡ qf|jj|jjks’t‚d S )Nr	   r
   r   r   r   r?   r   r   r   ©Ú	subsampler   )r&   r'   rP   r   r   r   Ú
set_paramsr<   r;   Ztestingr   r-   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_namesc                 C   s.   g | ]&}t d ƒD ]}d|› dt|ƒ› �‘qqS ©r7   ÚfeatÚ_©ÚrangeÚfloat©rZ   Úcol_idZbin_idr!   r!   r"   r[   ¹  s   
 þr[   c                 C   s.   g | ]&}t d ƒD ]}d|› dt|ƒ› �‘qqS r|   r   r‚   r!   r!   r"   r[   Á  s   
 þc                 C   s   g | ]}d |› �‘qS ©r}   r!   )rZ   rƒ   r!   r!   r"   r[   Ç  s     c                 C   s‚   dddgdddgdddgdd	dgg}t d	| d
� |¡}| |¡}dd„ tdƒD ƒ}| |¡}|jd |jd kstt‚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   r7   rU   c                 S   s   g | ]}d |› �‘qS r„   r!   rY   r!   r!   r"   r[   Ó  s     z>test_kbinsdiscrtizer_get_feature_names_out.<locals>.<listcomp>N)r   r   r   r€   Zget_feature_names_outr-   r+   r   )r   Zexpected_namesr   re   rM   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   ry   Úrandom_staterx   r   g{®Gáz„?)Zrtol)
r&   ÚrandomÚRandomStateÚrandom_sampler   r   r   rz   r   r;   )r   Zglobal_random_seedr   Zkbd_subsamplingZkbd_no_subsamplingr!   r!   r"   Útest_kbinsdiscretizer_subsampleÚ  s      ÿ

  ÿrŠ   c              	   C   sF   t j d¡ d¡}t| dd�}tjtdd�� | |¡ W 5 Q R X d S )Nr   )éd   r   )r   r†   z)subsample=200_000 will be used by defaultr/   )	r&   r‡   rˆ   r‰   r   r2   rJ   ÚFutureWarningr   )r   r   re   r!   r!   r"   Útest_kbd_subsample_warningð  s    r�   )0rH   Únumpyr&   r2   Zscipy.sparseÚsparser^   Zsklearnr   Zsklearn.preprocessingr   r   Zsklearn.utils._testingr   r   r   r   r   ÚmarkZparametrizeÚfilterwarningsr#   r,   r6   r:   r>   rB   rF   rN   rQ   r€   rV   r`   rc   rg   rj   rk   rm   rn   rr   rv   rD   rt   rw   r{   r…   rŠ   r�   r!   r!   r!   r"   Ú<module>   s&  ,000*
ý*
ý*
ý*
ý*
ýèþ"

&000*
ý*
ý*
ýåþ%



	


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