U
    b?+                     @   sH  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ej
dLdMdNgdOdP ZdQdR Z dSdT Z!dS )U    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-ck39h295/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         ?      @r   g      @r2   r7   rI   r-   r-   r.   test_quantile_array_no_sort_   s      rN   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drO   rP   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    $
 rR   
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-   rU   xrV   r   r-   r.   rX      s       )levelscodesrD   c                    s,   g | ]$}D ]}t |gt   qqS r-   )floatr&   rY   r'   rW   r   r-   r.   rX      s      c                    s   g | ]}| kr|qS r-   r-   )rU   rZ   )r'   r-   r.   rX      s      r    r   )r   rE   arrayrangerH   minr&   r#   r8   r'   r%   r(   r)   )rS   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,    ("$    rd   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   rO   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    " rl   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' insteadre   2   zGot '-1.0' insteadr   )r   rb   r'   r!   rh   
ValueErrorr%   )r*   gr-   r-   r.   $test_quantile_out_of_bounds_q_raises   s    rq   c                  C   sH   t dt jdg} t| tdd}|d}tdD ]}|  q6d S )Nr   r	   r   r   rT   )rE   ra   nanr   rb   r'   r%   )datar*   grprV   r-   r-   r.   /test_quantile_missing_group_values_no_segfaults   s
    
ru   z$key, val, expected_key, expected_valrA   r1   r   r   rL   *   g      E@Zfloat64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+   rt   r,   r-   r-   r.   2test_quantile_missing_group_values_correct_results   s     
 

ry   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 )NrZ   r	   yrm   r   r   rC   rA   r   r   r   r   r    r   )r   r'   r%   
isinstancerH   r#   r8   r9   r   r$   r(   assert_series_equal)rz   r   r*   r,   idxZtrue_quantilesr+   r-   r-   r.   $test_groupby_quantile_nullable_array   s    

r   c              	   C   sf   t dgdgdgd}tjtdd |d| }W 5 Q R X |ddg | }t|| d S )	Nr   r   rZ   )r   r   rO   rg   re   r   r   )r   r(   rj   rk   r'   r%   r)   )r   r*   r,   r+   r-   r-   r.   )test_groupby_quantile_skips_invalid_dtype   s
    r   c                 C   s   t ddgdtjgd| d}|dd d}tdg| dd	}tjdgt|dd
}t	
|| |dd ddg}tjdgd tjj|ddgfdd gddd}t	
|| d S )Nr   皙?rZ   r|   rw   rZ   r|   r   r   )rx   r   rx   r    r   r   r   rC   r}   )r   rE   rr   r'   r%   r   r#   r$   r^   r(   r   r8   r9   )Zany_float_dtyper*   r,   Z	exp_indexr+   r-   r-   r.   test_groupby_quantile_NA_float   s    r   c                 C   s   t ddgddgd| d}|dd d}tjd	gttdgd| d
dd}t|| |dd}t dd	itdgd| d
d}t	|| d S )Nr   r   r   r   rw   rZ   r|   r   rM   )r   rx   r   r2   )
r   r'   r%   r#   r$   r^   r   r(   r   r)   )Zany_int_ea_dtyper*   r,   r+   r-   r-   r.   test_groupby_quantile_NA_int  s       r   rx   ZFloat64ZFloat32c                 C   sj   t ddgtjgd d| d}|dd d}tjtjgtt	dg| ddd	}d|j
_t|| d S )
Nr   r   r   rw   rZ   r|   r   r   r   )r   r#   ZNAr'   r%   r$   rE   rr   r^   r   r    r   r(   r   )rx   r*   r,   r+   r-   r-   r.   "test_groupby_quantile_allNA_column  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皙?r   r[   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   rQ   r(   r)   rI   r-   r-   r.   test_columns_groupby_quantile7  s$    



 r   )"ZnumpyrE   r!   Zpandasr#   r   r   Zpandas._testingZ_testingr(   markZparametrizerr   rH   Z
date_ranger/   r;   rJ   rN   rR   rd   rl   rq   ru   rb   ra   ry   r   r   r   r   r   r   r   r-   r-   r-   r.   <module>   sz    "&
"  




