U
    f/e*                   	   @   s  d dl Z d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZ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 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dddgdd Z)ej'(dddd ge*e+d!gd"d# Z,ej'(d$ddd geddd gdd%fe*e+d!ed dd&gdd%fgd'd( Z-ej'(d)d*d+idfi d,fd*d-id,fd*did.fgd/d0 Z.ej'(d1d2d3d4gej'(d5dd&gej'(ddd6gd7d8 Z/ej'j(d9eed:e
d;geed<e
d=ggd>d? d@dAdB Z0ej'(dCd!e1d ddDgdEdF Z2ej'(dGedHd!dIedJd=dKgged:d!dIedLdMdNgggdOdP Z3ej'(dCdQdRgej'(dSeej4fej5ej6fe*ej7fgdTdU Z8ej'(dVd&dWdXgdYdZ Z9dS )[    N)CategoricalDatetimeIndexIntervalIntervalIndexNaTSeriesTimedeltaIndex	Timestampcut
date_rangeisnaqcuttimedelta_range)CategoricalDtype)quantile)DayNanoc                  C   s   t jd} t| ddd\}}t| ddddd	g}|jjj}t j||d d
 ddsXt	|jj
j}t j||dd  dds~t	t| |dd}t|| d S )N     TZretbinsr         ?      ?      ?      ?g{Gz?)Zatol   )Zinclude_lowest)nprandomrandnr   r   
categoriesleftvaluesZallcloseAssertionErrorrightr
   tmassert_categorical_equal)arrlabelsbinsZex_binsresult	ex_levels r+   B/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/reshape/test_qcut.py	test_qcut    s    

r-   c                  C   s4   t jd} t| ddd}tt |dks0td S )Nr   
   Fr'   )r   r   r   r   lenuniquer"   )r&   factorr+   r+   r,   test_qcut_bounds2   s    r3   c                  C   s:   t jd} t| dddddg}t| d}t|| d S )Nd   r   r   r   r   r   r   )r   r   r   r   r$   r%   )r&   r2   expectedr+   r+   r,   test_qcut_specify_quantiles9   s    
r6   c                   C   s<   t jtdd$ tddddddddddg
d W 5 Q R X d S )Nzedges.*uniquematchr      )pytestraises
ValueErrorr   r+   r+   r+   r,   test_qcut_all_bins_sameA   s    r=   c                  C   sN   t d} t| d}ttddtddtddtddg}t|j| d S )Nr.   r   MbPg      @g      @g      @	   )r   aranger   r   r   r$   assert_index_equalr   )r!   iir*   r+   r+   r,   test_qcut_include_lowestF   s    

rC   c                  C   s@   t jd} t j| d d< t| d}t|d d  s<td S )Nr4      r   )r   r   r   nanr   r   allr"   )r&   r)   r+   r+   r,   test_qcut_nasU   s    
rG   c                  C   s>   t ddgd} tddtddg}t|dd}t| | d S )Nr      r>   r   TZordered)r   r   r   r$   r%   )r)   	intervalsr5   r+   r+   r,   test_qcut_index]   s    rK   c                 C   s   | t jddd}t|}t|d}g }g }t|D ]8}|j}|j}||ksVt	|
t| |
t| q:tt|d d |dd  t|d d |dd  D ]4\\}	}
\}}|	|
k st	||k st	||
kst	qd S )NZreshapedatazcut_data.csvrD   r   r   )ospathjoinr   Zloadtxtr   r1   r    r#   r"   appendfloatzip)datapathZcut_filer&   r)   ZstartsZendsZlevsespZsnepenr+   r+   r,   test_qcut_binning_issuese   s$    

 rY   c                  C   s   t ddddddddd	g	} t| dd
ddg}ttddtddtdd	g}t |dddddddddg	tdd}t	|| d S )Nr   r   rH   r9   r               gZd;O?gZd;O?r>   gZd;O@gZd;O@TrI   )
r   r   r   arrayr   ZtakeastypeCDTr$   assert_series_equal)serresZ
exp_levelsexpr+   r+   r,   test_qcut_return_intervals~   s    ,re   r'   Zfoor   Tc              	   C   s8   t d}d}tjt|d t|d| d W 5 Q R X d S )NrZ   zJBin labels must either be False, None or passed in as a list-like argumentr7   r   r/   ranger:   r;   r<   r   r'   r!   msgr+   r+   r,   test_qcut_incorrect_labels   s    rj   abcr9   c              	   C   s8   t d}d}tjt|d t|d| d W 5 Q R X d S )Nr.   z9Bin labels must be one fewer than the number of bin edgesr7   r   r/   rf   rh   r+   r+   r,   test_qcut_wrong_length_labels   s    rn   zlabels, expectedrI   rH   c                 C   s&   t d}t|d| d}t|| d S )Nr9   r/   )rg   r   r$   r%   )r'   r5   r!   r)   r+   r+   r,   test_qcut_list_like_labels   s    	ro   z
kwargs,msg
duplicatesdropzBin edges must be uniqueraisez(invalid value for 'duplicates' parameterc              	   C   s|   dddddddg}|d k	rDt jt|d t|df|  W 5 Q R X n4t|df| }ttddtddg}t|j| d S )Nr   r   rH   r9   r7   r>   )	r:   r;   r<   r   r   r   r$   rA   r   )kwargsri   r!   r)   r5   r+   r+   r,   test_qcut_duplicates_bin   s    rt   zdata,start,end)      "@gsh|!@ru   )        r>   rv   )      "gn "rw   lengthFc           	      C   sv   t | g| }t|d|d}|d krRtt||g| dd}t |tdd}nt dg| tjd}t	|| d S )	Nr   r/   r#   )closedTrI   r   dtype)
r   r   r   r   r_   r`   r   Zintpr$   ra   )	rL   startendrx   r'   rb   r)   rJ   r5   r+   r+   r,   test_single_quantile   s    r~   rb   Z20180101Z20180103z0 daysz2 daysc                 C   s
   t | jS )N)strr{   )xr+   r+   r,   <lambda>       r   )idsc                 C   sf   t | d t  | d t  ftj| d t  | d fg}tt|dd}t| d}t	
|| d S )Nr   rH   TrI   )r   from_tuplesr   r   r   rE   r   r   r   r$   ra   )rb   rJ   r5   r)   r+   r+   r,   test_qcut_nat   s    
4
r   r(   r   c              
   C   s   d}t tdd|d}t|| }t tttd|dtd|dttd|dtd|dttd|dtd	|dgtd
d}t	|| d S )Nz
US/EasternZ20130101r9   )periodstzz2012-12-31 23:59:59.999999999)r   z2013-01-01 16:00:00z2013-01-02 08:00:00z2013-01-03 00:00:00TrI   )
r   r   r   r   r   r	   r_   r`   r$   ra   )r(   r   rb   r)   r5   r+   r+   r,   test_datetime_tz_qcut   s.    






r   zarg,expected_binsZ1day)r   z1 daysz3 daysz
2018-01-01z
2018-01-02z
2018-01-03c                 C   s*   t | }t|ddd\}}t|| d S )NrH   Tr   )r   r   r$   rA   )argZexpected_binsrb   r)   Zresult_binsr+   r+   r,   test_date_like_qcut_bins  s    r   r[   r\   zbox, comparec                 C   sV   |dddddgd }|dddddgd }t || dd}t || dd}||| d S )Nr   r   r.   FTrq   )rp   )r   )r(   ZboxcompareZdata_expectedZdata_resultr5   r)   r+   r+   r,   test_qcut_bool_coercion_to_int  s
    r   qrZ   r.   c                 C   sN   t jtd|d}t j|d d d< t|| }t|t| }t	|| d S )Nr4   rz   rH   )
pdr^   r   r@   ZNAr   r_   rQ   r$   r%   )r   Zany_nullable_numeric_dtyper&   r)   r5   r+   r+   r,   test_qcut_nullable_integer'  s
    
r   ):rM   Znumpyr   r:   Zpandasr   r   r   r   r   r   r   r   r	   r
   r   r   r   r   Zpandas._testingZ_testingr$   Zpandas.api.typesr   r`   Zpandas.core.algorithmsr   Zpandas.tseries.offsetsr   r   r-   r3   r6   r=   rC   rG   rK   rY   re   markZparametrizerj   listrg   rn   ro   rt   r~   r   Zlinspacer   r   ra   r^   r%   Zassert_equalr   r   r+   r+   r+   r,   <module>   s   <





	
 





	