U
    f/eF%                     @   s  d dl Zd dlZd dlZd dlmZmZ d dlmZ	 ej
ddddddgej
d	d
ddddgddddd
gfd
dddgdddd
gfd
ddddgdddd
gfdddddgdddddgfdejdejdgdejdejdgfejdejdejgejdejdejgfeejddddeejddddddd fejgd ejgd fgej
dd dddd
gdd Zdd Zd d! Zd"d# Zd$d% Zej
d&d'd(gej
d)d gd d
ggej
ddd*ggd+d, Zd-d. Zd/d0 Zd1d2 Zej
d3dejdejgedddgd4dgfdejddgedddgd4d5gfd6d7d7ejgedd6d7gd d8gfd gd9gd gd:gfg g ejg d;d<ejg d;d<fgd=d> Zej
d?ejd
d dgd d@d<ejdAdBdgd dCd<gej
ddd4ddggdDdE Zej
ddd4ddggdFdG ZdHdI ZdJdK ZdS )L    N)	DataFrameIndexinterpolationZlinearlowerZhighernearestZmidpointza_vals,b_vals                     ?       @      @      @      @z1/1/18D)freqZperiodsq      ?      ?      ?c           	      C   s   | dkr*|dkr*|ddddgkr*t d t|j|| d}t|j|| d}td	gt| d
gt|  || d}t||gdgtd	d
gddd}|dj|| d}t	
|| d S )Nr   r   r
   r	   r   r   zBUnclear numpy expectation for nearest result with equidistant data)r   abkeyvalr   r   name)columnsindex)pytestskippdSeriesquantiler   lenr   groupbytmassert_frame_equal)	r   Za_valsZb_valsr   Z
a_expectedZ
b_expecteddfexpectedresult r-   F/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/groupby/test_quantile.pytest_quantile   s      $  r/   c                  C   s   t ddddddgi} | dddddgdg}tjddgdgg}t dddgi|d	}t|| t ddddgdd
ddgd} tjddgddgg}| ddddgddg}t ddddgddddgd|d	}t|| d S )NAr   r   r   r	   r
   r         @r    r         r0   Br   g      @g      @g      @g      @g      @g      @r   r'   r%   r#   
MultiIndexfrom_productr(   r)   r*   r,   r    r+   r-   r-   r.   test_quantile_array:   s     r;   c                  C   s   t tjdjddddtdd} | ddd	g}t d
dddddddddg
ddddddddddg
dtj	j
dddddgdd	ggdd gdd}t|| d S ) Nr   r   )
   r	   )sizeABCr   r0   g333333?gffffff?g?g @g@g333333@皙?g333333@gffffff@g@        g333333?gffffff@g?r   gffffff?g@)r6   Cr   r   r	   r
   namesr2   )r   nprandomZRandomStaterandintlistr'   r%   r#   r8   r9   r(   r)   r*   r,   r+   r-   r-   r.   test_quantile_array2M   s      	rJ   c                  C   s   t dddgdddgd} | jdddgdd	d
ddg}t ddddddgddddddgdtjddgd
ddggd}t|| | jdddgdd	dd
g}t ddddgddddgdtjddgdd
ggd}t|| d S )Nr   r   r   r	   r
   r   r5   F)sortr   r   r   r         ?g      @r   g      @r2   r7   rI   r-   r-   r.   test_quantile_array_no_sort_   s      rM   c                  C   s   t dddgdddgdddgdddgd	} | d
dgddg}tjjddddgd
dd gd}t ddddgddddgd|d}t|| d S )Nr   r   r   r	   r
   r   r   r   )r0   r6   cdrN   rO   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   rC   r   g      
@g      @r   r5   r2   )r   r'   r%   r#   r8   from_tuplesr(   r)   r:   r-   r-   r.   #test_quantile_array_multiple_levelsp   s    $
 rQ   
frame_size)r   r	   )d   r<   r'   g333333?c                    s  | \}t tfddt|D td}ttt|dgt  g }fddtt|dD gt  tttt|d g }tj|| d g d} fddtt|dD } fddtD }	t |||	d	}
|	 
}t||
 d S )
Nc                    s   g | ]} |d  g qS )r
   r-   ).0_)ncolr-   r.   
<listcomp>   s     zJtest_groupby_quantile_with_arraylike_q_and_int_columns.<locals>.<listcomp>r?   r
   c                    s   g | ]} D ]}|qqS r-   r-   rT   xrU   r   r-   r.   rW      s       )levelscodesrD   c                    s,   g | ]$}D ]}t |gt   qqS r-   )floatr&   rX   r'   rV   r   r-   r.   rW      s      c                    s   g | ]}| kr|qS r-   r-   )rT   rY   )r'   r-   r.   rW      s      r    r   )r   rE   arrayrangerH   minr&   r#   r8   r'   r%   r(   r)   )rR   r'   r   Znrowr*   Z
idx_levelsZ	idx_codesZexpected_indexZexpected_valuesZexpected_columnsr+   r,   r-   r^   r.   6test_groupby_quantile_with_arraylike_q_and_int_columns   s,    ("$    rc   c               
   C   sh   t ddgddgddggddgd} tjtdd	. tjtd
d	 | d  W 5 Q R X W 5 Q R X d S )NZfoor   r   rN   r   r   r?   z+cannot be performed against 'object' dtypesmatchDropping invalid columns)	r   r!   raises	TypeErrorr(   assert_produces_warningFutureWarningr'   r%   )r*   r-   r-   r.   test_quantile_raises   s    " rk   c               	   C   s   t ddddddgtdd} | ddddddg}tjtdd |d W 5 Q R X tjtdd |d	 W 5 Q R X d S )
Nr   r   r3   r   r   zGot '50.0' insteadrd   2   zGot '-1.0' insteadr   )r   ra   r'   r!   rg   
ValueErrorr%   )r*   gr-   r-   r.   $test_quantile_out_of_bounds_q_raises   s    rp   c                  C   sH   t dt jdg} t| tdd}|d}tdD ]}|  q6d S )Nr   r	   r   r   rS   )rE   r`   nanr   ra   r'   r%   )datar*   grprU   r-   r-   r.   /test_quantile_missing_group_values_no_segfaults   s
    
rt   z$key, val, expected_key, expected_valrA   r1   r   r   rL   *   g      E@Zfloat64)Zdtypec                 C   s^   t | |d}t |t|dddgd}|d}|d}t|| | }t|| d S )Nr   r   r   r   r_   r   )r   r   r'   r%   r(   r)   )r   r   Zexpected_keyZexpected_valr*   r+   rs   r,   r-   r-   r.   2test_quantile_missing_group_values_correct_results   s     
 

rv   valuesZInt64TFbooleanc                 C   s   t dgd dgd  | d}|dd |}t|trdtjjddg|fdd gd}dd	d
g}ntddgdd}d	g}tj	|d |dd}t
|| d S )NrY   r	   yrl   r   r   rC   rA   r   r   r   r   )r    r   )r   r'   r%   
isinstancerH   r#   r8   r9   r   r$   r(   Zassert_series_equal)rw   r   r*   r,   idxZtrue_quantilesr+   r-   r-   r.   $test_groupby_quantile_nullable_array   s    

r|   c              	   C   sx   t dgdgdgd}t| tr$d nt}tj|dd |d| }W 5 Q R X |ddg | }t|| d S )	Nr   r   rY   )r   r   rN   rf   rd   r   r   )	r   rz   rH   rj   r(   ri   r'   r%   r)   )r   r*   warnr,   r+   r-   r-   r.   )test_groupby_quantile_skips_invalid_dtype   s    r~   c                  C   sr   t tjtdddddddgd} | dd}t d	td
tdgitddgddd}t	
|| d S )Nr
   s)unitr   r   )valuegroupr   gGz?r   z0 days 00:00:00.990000z0 days 00:00:02.990000r   r2   )r   r#   Zto_timedeltarE   aranger'   r%   Z	Timedeltar   r(   r)   rI   r-   r-   r.   test_groupby_timedelta_quantile   s     	r   c                  C   s   t tdddtdtjtdddd} | jdd	d
jddgd}t ddddgddddgddddggtdtj	j
ddddgdd gdd}t|| d S )N   r	   r   ZXYZZABABcolr   r_   r   )Zaxis皙?皙?rZ   r@   g?g@gffffff?gffffff@g@gffffff@g@g333333#@g @g333333%@g"@)r0   r   )r0   r   )r6   r   )r6   r   rC   )r   rE   r   ZreshaperH   r#   r$   r'   r%   r8   rP   r(   r)   rI   r-   r-   r.   test_columns_groupby_quantile  s$    



 r   )ZnumpyrE   r!   Zpandasr#   r   r   Zpandas._testingZ_testingr(   markZparametrizerq   rH   Z
date_ranger/   r;   rJ   rM   rQ   rc   rk   rp   rt   ra   r`   rv   r|   r~   r   r   r-   r-   r-   r.   <module>   sr    "&
"  


