U
    ½mœd46  ã                   @   sæ  d dl Z d dlZd dlm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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fdd d d d gd d d d gddddgddddggfdd d d d gddddgddddgddddggfg¡dd„ ƒZ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fdd d d d gd d d d gddddgddddggfdd d d d gd dddgddddgddddggf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'd(„ Ze j d)dd d d d ddgd d d d ddgd d ddd*d*gfdd d d d ddgd d ddddgd d ddd+d*gfdd d d dddgd d ddddgd ddd+d*d*gfg¡d,d-„ ƒZe j d.dd/d0d1dgdd2d3dgdd4d/dgdd4d/dggfdd5d6d7d8gd5d6d7d8gd9d:d;d<gd=d>d?d@ggfdd/d0d1dAgdd2d3dBgdd4d/dCgdd4d/dCggfg¡e j dDdEdFdGg¡dHdI„ ƒƒZe j ddddg¡dJdK„ ƒZdLdM„ Ze j dNdd dd+gfdd dd+gfg¡dOdP„ ƒZ dQdR„ Z!e j dSej"ej#ej$g¡e j dTdej#ej$g¡e j dDdEdFdGg¡dUdV„ ƒƒƒZ%e j dWej"ej#ej$g¡e j dDdEdFdGg¡dXdY„ ƒƒZ&e j 'dZ¡e j d[dd\g¡d]d^„ ƒƒZ(d_d`„ Z)dadb„ Z*dcdd„ Z+e j dedFdfdg„ ed+ƒD ƒfdGdhdg„ ed+ƒD ƒfdEdidg„ ed+ƒD ƒfg¡djdk„ ƒZ,dS )lé    N)Úclone)ÚKBinsDiscretizer)ÚOneHotEncoder)Úassert_array_almost_equalÚassert_array_equalÚassert_allclose_dense_sparseéþÿÿÿç      ø?éüÿÿÿéÿÿÿÿç      @éýÿÿÿg      à¿g      @ç      à?é   g      @é   zstrategy, expectedÚuniformZkmeansÚquantilec                 C   s,   t dd| d�}| t¡ t|| t¡ƒ d S )Né   Úordinal©Ún_binsÚencodeÚstrategy)r   ÚfitÚXr   Ú	transform)r   ÚexpectedÚest© r   úh/home/sam/Atlas/atlas_env/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)   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,\).©Úmatchr   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   ÚpytestÚraisesÚ
ValueErrorr"   r   )r   r   Úerr_msgr   r   r   Útest_invalid_n_bins_array&   s,    



ÿ
ÿr3   c                 C   s~   t ddddgd| d� t¡}t|| t¡ƒ t t¡jd }|jj|fksNt	‚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$   ÚshapeÚ
bin_edges_r(   Úzipr%   )r   r   r   Z
n_featuresÚ	bin_edgesr   r   r   r   Útest_fit_transform_n_bins_arrayL   s    	
  ÿþr8   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 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   r/   ÚwarnsÚUserWarningr   r%   r(   r   r   Zzerosr4   )r   r   r   Úwarning_messageÚXtr   r   r   Útest_same_min_maxa   s    
"
r@   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 )Nr*   r   r!   r   r   )	r#   Úaranger   r/   r0   r1   r   Úreshaper   )r   r   r   r   r   Útest_transform_1d_behavioro   s    


rC   Ú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 )Nr+   ç      @g      @g       @g      $@r   r   r   é
   r   r   ©r   r   )r#   r$   rB   r   r"   r   )rD   ZX_initZXt_expectedr   r?   r   r   r   Útest_numeric_stability{   s
    rI   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   rH   úonehot-densec                 S   s   g | ]}t  |¡‘qS r   ©r#   rA   ©Ú.0rD   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   rK   rL   r   r   r   rN   —   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    

 ÿþü
 ÿýúrS   z8strategy, expected_2bins, expected_3bins, expected_5binsr*   r   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   rE   rG   r   r   r   ©r   r   r   é   )r#   r$   rB   r   r"   r   Zravel)r   Zexpected_2binsZexpected_3binsZexpected_5binsr   r   r?   r   r   r   Útest_nonuniform_strategiesŸ   s    


rV   zstrategy, expected_invg      ø¿r+   g      Àg      @g      ÀrF   g      ö¿g      @g      Àg      â¿g      À¿g      @g      Àg      â?g      è?g      @g      ô¿g      ú?g      è¿g        g      ô?r   r   rP   rJ   c                 C   s0   t d| |d�}| t¡}| |¡}t||ƒ d S )Nr   rT   )r   r"   r   Úinverse_transformr   )r   r   Zexpected_invÚkbdr?   ÚXinvr   r   r   Útest_inverse_transform¼   s    "

rZ   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   r*   r   rT   r   rU   )Zaxis)	r#   r$   r   r   r   r   Úmaxr%   Úmin)r   r   rX   ZX2ZX2tr   r   r   Ú test_transform_outside_fit_rangeä   s    

r]   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   rH   r   r	   r   )r#   r$   Úcopyr   r"   r   rW   )r   ZX_beforer   r?   Z	Xt_beforerY   r   r   r   Útest_overwriteð   s    



r_   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   r   ú'Consider decreasing the number of bins.r,   )r   r/   r<   r=   r   r   r5   )r   Zexpected_bin_edgesr   rX   r>   r   r   r   Útest_redundant_binsþ   s    ra   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   r*   rG   r   r   r   r`   r,   )r#   r$   rB   r   r/   r<   r=   r   r   r5   r   )r   r7   r?   rX   r>   r   r   r   Ú!test_percentile_numeric_stability
  s    rb   Ú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 ©N)r&   r   )r   r   r&   )
r#   r$   r   r   r   r&   Úfloat16Úfloat64r   r(   )rc   rd   r   ÚX_inputrX   Zexpected_dtyper?   r   r   r   Útest_consistent_dtype  s    

ri   Úinput_dtypec                 C   sd   t jt| d�}td|t jd�}| |¡ | |¡}td|t jd�}| |¡ | |¡}t||ƒ d S re   )	r#   r$   r   r   Úfloat32r   r   rg   r   )rj   r   rh   Zkbd_32ZXt_32Zkbd_64ZXt_64r   r   r   Útest_32_equal_64+  s    



rl   z,ignore:In version 1.3 onwards, subsample=2e5Ú	subsampleÚwarnc                 C   s–   t  ddddg¡ dd¡}tdddd	�}| |¡ t|ƒ}|j| d
� | |¡ t|jd |jd ƒD ]\}}t j	 
||¡ qf|jj|jjks’t‚d S )Nr   r	   r
   r   r   rG   r   r   r   ©rm   r   )r#   r$   rB   r   r   r   Ú
set_paramsr6   r5   ÚtestingZassert_allcloser4   r(   )rm   r   Úkbd_defaultÚkbd_with_subsamplingZbin_kbd_defaultZbin_kbd_with_subsamplingr   r   r   Ú'test_kbinsdiscretizer_subsample_default@  s    

 ÿrt   c               	   C   sV   t  ddddg¡ dd¡} tdddd	d
�}d}tjt|d�� | | ¡ W 5 Q R X d S )Nr   r	   r
   r   r   rG   r   r   r   )r   r   r   rm   z4`subsample` must be used with `strategy="quantile"`.r,   )r#   r$   rB   r   r/   r0   r1   r   )r   rX   r2   r   r   r   Ú0test_kbinsdiscretizer_subsample_invalid_strategyS  s
    ru   c               	   C   sP   t j dd¡ dd¡} tdddd�}d}tjt|d	�� | | ¡ W 5 Q R X d S )
NiA r   r   éd   r   r   r   ú>In version 1.3 onwards, subsample=2e5 will be used by default.r,   )	r#   ÚrandomÚrandrB   r   r/   r<   ÚFutureWarningr   )r   rX   Úmsgr   r   r   Ú$test_kbinsdiscretizer_subsample_warn]  s
    r|   c               	   C   s¤   t j dd¡ dd¡} tdddd�}t|ƒ}|jtdƒd	� d
}tj	t
|d�� | | ¡ W 5 Q R X | | ¡ t  |jd |jd k¡rŒt‚|jj|jjks t‚d S )Ni`[ r   r   rG   r   r   r   g     jAro   rw   r,   r   )r#   rx   ry   rB   r   r   rp   r'   r/   r<   rz   r   Úallr5   r(   r4   )r   rr   rs   r{   r   r   r   Ú&test_kbinsdiscretizer_subsample_valuesg  s    
r~   zencode, expected_namesc                 C   s.   g | ]&}t d ƒD ]}d|› dt|ƒ› �‘qqS ©r*   ÚfeatÚ_©ÚrangeÚfloat©rM   Úcol_idZbin_idr   r   r   rN   |  s   
 þrN   c                 C   s.   g | ]&}t d ƒD ]}d|› dt|ƒ› �‘qqS r   r‚   r…   r   r   r   rN   „  s   
 þc                 C   s   g | ]}d |› �‘qS ©r€   r   )rM   r†   r   r   r   rN   Š  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   r*   rH   c                 S   s   g | ]}d |› �‘qS r‡   r   rL   r   r   r   rN   –  s     z>test_kbinsdiscrtizer_get_feature_names_out.<locals>.<listcomp>N)r   r   r   rƒ   Zget_feature_names_outr4   r(   r   )r   Zexpected_namesr   rX   r?   Zinput_featuresZoutput_namesr   r   r   Ú*test_kbinsdiscrtizer_get_feature_names_outw  s    $

rˆ   )-r/   Únumpyr#   Zscipy.sparseÚsparserQ   r:   Zsklearnr   Zsklearn.preprocessingr   r   Zsklearn.utils._testingr   r   r   r   ÚmarkZparametrizer    r)   r3   r8   r@   rC   rƒ   rI   rS   rV   rZ   r]   r_   ra   rb   rf   rk   rg   ri   rl   Úfilterwarningsrt   ru   r|   r~   rˆ   r   r   r   r   Ú<module>   sÒ   ,...ýþ
&...ýþ



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