U
    sVc1                     @   sr  d dl Zd dlZd dlm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d0d1 Zd2d3 Zejd4dejdejgedddgd5dgfdejddgedddgd5d6gfd7d8d8ejgedd7d8gd d9gfd gd:g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 dAd=ejdBdCdgd dDd=gejddd5ddggdEdF Zejddd5ddggejdGejdBdCgdHdI ZdJdK Z dLdM Z!ejdNdOdPgdQdR Z"dSdT Z#dUdV Z$dWdX Z%dS )Y    N)lib)	DataFrameIndexinterpolationZlinearlowerZhighernearestZmidpointza_vals,b_vals                     ?       @      @      @      @z1/1/18D)freqperiodsq      ?      ?      ?c           
      C   s   | dkr6|dkr6|ddddgkr6|j tjjd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)reason)r   abkeyvalr   r   name)columnsindex)nodeZ
add_markerpytestmarkZxfailpdSeriesquantiler   lenr   groupbytmassert_frame_equal)
r   Za_valsZb_valsr   requestZ
a_expectedZ
b_expecteddfexpectedresult r2   F/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/groupby/test_quantile.pytest_quantile   s$     $  r4   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         r5   Br   g      @g      @g      @g      @g      @g      @r   r+   r)   r'   
MultiIndexfrom_productr,   r-   r/   r1   r#   r0   r2   r2   r3   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"   r5   g333333?gffffff?g?g @g@g333333@皙?g333333@gffffff@g@        g333333?gffffff@g?r   gffffff?g@)r;   Cr   r	   r
   r   namesr7   )r   nprandomZRandomStaterandintlistr+   r)   r'   r=   r>   r,   r-   r/   r1   r0   r2   r2   r3   test_quantile_array2R   s      	rO   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   r:   F)sortr   r   r   r         ?      @r   g      @r7   r<   rN   r2   r2   r3   test_quantile_array_no_sortd   s      rS   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   )r5   r;   cdrT   rU   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   rH   r   g      
@g      @r   r:   r7   )r   r+   r)   r'   r=   from_tuplesr,   r-   r?   r2   r2   r3   #test_quantile_array_multiple_levelsu   s    $
 rW   
frame_size)r	   r
   )d   rA   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   r2   ).0_)ncolr2   r3   
<listcomp>   s     zJtest_groupby_quantile_with_arraylike_q_and_int_columns.<locals>.<listcomp>rD   r   c                    s   g | ]} D ]}|qqS r2   r2   rZ   xr[   r   r2   r3   r]      s       )levelscodesrI   c                    s,   g | ]$}D ]}t |gt   qqS r2   )floatr*   r^   r+   r\   r   r2   r3   r]      s      c                    s   g | ]}| kr|qS r2   r2   )rZ   r_   )r+   r2   r3   r]      s      r#   r"   )r   rJ   arrayrangerM   minr*   r'   r=   r+   r)   r,   r-   )rX   r+   r   Znrowr/   Z
idx_levelsZ	idx_codesZexpected_indexZexpected_valuesZexpected_columnsr0   r1   r2   rd   r3   6test_groupby_quantile_with_arraylike_q_and_int_columns   s,    ("$    ri   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   rT   r   r   rD   z+cannot be performed against 'object' dtypesmatchzDropping invalid columns)	r   r%   raises	TypeErrorr,   assert_produces_warningFutureWarningr+   r)   )r/   r2   r2   r3   test_quantile_raises   s    " rp   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   r8   r   r   zGot '50.0' insteadrj   2   zGot '-1.0' insteadr   )r   rg   r+   r%   rl   
ValueErrorr)   )r/   gr2   r2   r3   $test_quantile_out_of_bounds_q_raises   s    ru   c                  C   sH   t dt jdg} t| tdd}|d}tdD ]}|  q6d S )Nr   r
   r   r   rY   )rJ   rf   nanr   rg   r+   r)   )datar/   grpr[   r2   r2   r3   /test_quantile_missing_group_values_no_segfaults   s
    
ry   z$key, val, expected_key, expected_valrF   r6   r   r   rQ   *   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   re   r   )r   r   r+   r)   r,   r-   )r   r   Zexpected_keyZexpected_valr/   r0   rx   r1   r2   r2   r3   2test_quantile_missing_group_values_correct_results   s     
 

r}   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 )Nr_   r
   yrq   r   r   rH   rF   r   r   r    r	   r#   r!   )r   r+   r)   
isinstancerM   r'   r=   r>   r   r(   r,   assert_series_equal)r~   r   r/   r1   idxZtrue_quantilesr0   r2   r2   r3   $test_groupby_quantile_nullable_array   s    

r   numeric_onlyc              	   C   s   t dgdgdgd}|tjks$|r|tjkr2tnd }d}tj||d |dj| |d}W 5 Q R X |dd	g | }t|| n.t	j
td
d |dj| |d W 5 Q R X d S )Nr   r   r_   )r   r   rT   z>The default value of numeric_only in DataFrameGroupBy.quantilerj   r   )r   r   z7'quantile' cannot be performed against 'object' dtypes!)r   r   
no_defaultro   r,   rn   r+   r)   r-   r%   rl   rm   )r   r   r/   warnmsgr1   r0   r2   r2   r3   )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   皙?r_   r   r{   r_   r   r   r   )r|   r!   r|   r#   r!   r   r	   rH   r   )r   rJ   rv   r+   r)   r   r'   r(   rc   r,   r   r=   r>   )Zany_float_dtyper/   r1   Z	exp_indexr0   r2   r2   r3   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   r{   r_   r   r   rR   )r!   r|   r   r7   )
r   r+   r)   r'   r(   rc   r   r,   r   r-   )Zany_int_ea_dtyper/   r1   r0   r2   r2   r3   test_groupby_quantile_NA_int  s       r   r|   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   r{   r_   r   r   r   r   )r   r'   ZNAr+   r)   r(   rJ   rv   rc   r   r#   r!   r,   r   )r|   r/   r1   r0   r2   r2   r3   "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    r7   )r   r'   Zto_timedeltarJ   aranger+   r)   Z	Timedeltar   r,   r-   rN   r2   r2   r3   test_groupby_timedelta_quantile3  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    re   r   )Zaxis皙?r   r`   rE   g?g@gffffff?gffffff@g@gffffff@g@g333333#@g @g333333%@g"@)r5   r   )r5   r   )r;   r   )r;   r   rH   )r   rJ   r   ZreshaperM   r'   r(   r+   r)   r=   rV   r,   r-   rN   r2   r2   r3   test_columns_groupby_quantileE  s$    



 r   c               	   C   s   t tjddddddttddttdd	d
} | dddg}t ddddddddddddgtjj	t
ddft
ddft
ddft
ddfgddd}t|| d S )Nz2020-04-19 00:00:00Z1TrY   UTC)startr   r   tzZ1Hr   e      )	timestampcategoryr   r   r   r   g)@g333333\@)r   r   gH@gfffffb@g333333Q@ge@gW@gfffffh@z2020-04-19 00:00:00+00:00z2020-04-19 01:00:00+00:00)r   NrH   r7   )r   r'   
date_rangefloorrM   rg   r+   r)   r=   rV   Z	Timestampr,   r-   rN   r2   r2   r3   test_timestamp_groupby_quantile\  s<       
r   )&ZnumpyrJ   r%   Zpandas._libsr   Zpandasr'   r   r   Zpandas._testingZ_testingr,   r&   Zparametrizerv   rM   r   r4   r@   rO   rS   rW   ri   rp   ru   ry   rg   rf   r}   r   r   r   r   r   r   r   r   r   r2   r2   r2   r3   <module>   s    "&
"  


