U
    >vf<                     @   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jddddejddddddd fejdddddejd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
dGdBdCgdHdI ZdJdK ZdLdM Zej
dNdOdPdQgdRdS Zej
dddgdTdU Z ej
dVdWdXgdYdZ Z!d[d\ Z"d]d^ Z#d_d` Z$dadb Z%dS )c    N)	DataFrameIndexinterpolationZlinearlowerhighernearestZmidpointza_vals,b_vals                     ?       @      @      @      @z1/1/18D)freqperiodssq      ?      ?      ?c                 C   s  | dkr@|dkr@t |tr@|ddddgkr@|jtjjdd tt	|t	|g}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}	|jjdkr|	jjd jdkr|	|j}	|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Mr   )
isinstancelistnodeZ
add_markerpytestmarkZxfailpdconcatSeriesquantiler   lenr   dtypekindZdtypesvaluesastypegroupbytmassert_frame_equal)r   Za_valsZb_valsr   requestZall_valsZ
a_expectedZ
b_expecteddfexpectedresult r;   F/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/groupby/test_quantile.pytest_quantile   s4    &  r=   c                  C   s  t ddddddgi} tjdddddgtjd}| |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}tjddddgtjd}| |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   r0   r         @r$   r         r>   Br   g      @g      @g      @g      @g      @g      @r   nparrayint64r4   r.   r+   
MultiIndexfrom_productr5   r6   )r8   r   r:   r$   r9   r;   r;   r<   test_quantile_arrayI   s     rL   c                  C   s   t jdjdddt jd} t| 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
   )sizer0   ABCr#   r>   g333333?ffffff?g?g @g@g333333@皙?g333333@gffffff@g@        g333333?gffffff@g?r   gffffff?g@)rE   Cr   r	   r
   r   namesrA   )rG   randomZRandomStaterandintrI   r   r'   r4   r.   r+   rJ   rK   r5   r6   )Zarrr8   r:   r9   r;   r;   r<   test_quantile_array2^   s     	rY   c                  C   s   t dddgdddgd} tjdddgtjd}| j|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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   rD   r?   F)sortr   r   r   r         ?      @r   g      @rA   rF   )r8   r   r:   r9   r;   r;   r<   test_quantile_array_no_sorto   s     r]   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   )r>   rE   cdr^   r_   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   rU   r   g      
@g      @r   rD   rA   )r   r4   r.   r+   rJ   from_tuplesr5   r6   )r8   r:   r$   r9   r;   r;   r<   #test_quantile_array_multiple_levels   s    $
 ra   
frame_size)r	   r
   )d   rM   r4   g333333?c                    s  | \}t tfddt|D td}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>rP   r   c                    s   g | ]} D ]}|qqS r;   r;   rd   xre   r   r;   r<   rg      s       )levelscodesrV   c                    s,   g | ]$}D ]}t |gt   qqS r;   )floatr/   rh   r4   rf   r   r;   r<   rg      s      c                    s   g | ]}| kr|qS r;   r;   )rd   ri   )r4   r;   r<   rg      s      r$   r#   )r   rG   rH   rangearangeminr/   r'   r+   rJ   r4   r.   r5   r6   )rb   r4   r   Znrowr8   Z
idx_levelsZ	idx_codesZexpected_indexZexpected_valuesZexpected_columnsr9   r:   r;   rn   r<   6test_groupby_quantile_with_arraylike_q_and_int_columns   s,    ( $    rs   c               	   C   sN   t ddgddgddggddgd} tjtdd	 | d  W 5 Q R X d S )
NZfoor   r   r^   r   r    rP   z+cannot be performed against 'object' dtypesmatch)r   r)   raises	TypeErrorr4   r.   r8   r;   r;   r<   test_quantile_raises   s    "ry   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   rB   r   r   zGot '50.0' insteadrt   2   zGot '-1.0' insteadr   )r   rp   r4   r)   rv   
ValueErrorr.   )r8   gr;   r;   r<   $test_quantile_out_of_bounds_q_raises   s    r~   c                  C   sH   t dt jdg} t| tdd}|d}tdD ]}|  q6d S )Nr   r
   r   r   rc   )rG   rH   nanr   rp   r4   r.   )datar8   grpre   r;   r;   r<   /test_quantile_missing_group_values_no_segfaults   s
    
r   z$key, val, expected_key, expected_valrS   r@   r   r   r[   *   g      E@Zfloat64r?   c                 C   s^   t | |d}t |t|dddgd}|d}|d}t|| | }t|| d S )Nr   r   r!   r    ro   r   )r   r   r4   r.   r5   r6   )r   r    Zexpected_keyZexpected_valr8   r9   r   r:   r;   r;   r<   2test_quantile_missing_group_values_correct_results   s     
 

r   r2   Z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d}t
|| d S )Nri   r
   yrz   r   r   rU   rS   r   r   r!   r	   Float64r$   r"   r0   )r   r4   r.   r&   r'   r+   rJ   rK   r   r-   r5   assert_series_equal)r2   r   r8   r:   idxZtrue_quantilesr9   r;   r;   r<   $test_groupby_quantile_nullable_array   s    

r   numeric_onlyc              	   C   s   t dgdgdgd}|rR|dj| |d}|ddg | }t|| n.tjtdd	 |dj| |d W 5 Q R X d S )
Nr   r   ri   )r   r   r^   r   )r   r   z7'quantile' cannot be performed against 'object' dtypes!rt   )r   r4   r.   r5   r6   r)   rv   rw   )r   r   r8   r:   r9   r;   r;   r<   -test_groupby_quantile_raises_on_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	}| d
krN| }nd }tjdg||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   皙?ri   r   r?   ri   r   r   r   )r0   r"   )Float32r   r0   r$   r"   r   r	   rU   r   )r   rG   r   r4   r.   r   r+   r-   r5   r   rJ   rK   )Zany_float_dtyper8   r:   Z	exp_indexexpected_dtyper9   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d
tdgd| ddd}t|| |dd}t dd	id
tdgd| dd}t|| d S )Nr   r	   r   r   r?   ri   r   r   r\   r   )r"   r0   r   r0   r$   )	r   r4   r.   r+   r-   r   r5   r   r6   )Zany_int_ea_dtyper8   r:   r9   r;   r;   r<   test_groupby_quantile_NA_int$  s       r   zinterpolation, val1, val2)r   r	   r	   )r   r	   r
   )r   r	   r	   c              	   C   s   t ddddgdddtjgd|d}|djddg| d	}t d
||tjtjgi|tjjtjddddg|dddddggdd gdd}t	|| d S )Nr   r	   r
   rz   r?   r   r   rQ   r   r   r   rU   r   
r   r+   NAr4   r.   rJ   Zfrom_arraysr-   r5   r6   )r   Zval1Zval2any_numeric_ea_dtyper8   r:   r9   r;   r;   r<   )test_groupby_quantile_all_na_group_masked7  s      r   c              	   C   s   t ddddgdddtjgd|d}|djddg| d	}|d
krJ|}nd}t dddtjtjgi|tjjtjddddg|dddddggdd gdd}t	|| d S )Nr   r	   r
   rz   r?   r   r   r   r   r   r   r   r   r@   rU   r   r   )r   r   r8   r:   r   r9   r;   r;   r<   0test_groupby_quantile_all_na_group_masked_interpM  s&     
r   r0   r   r   c                 C   sj   t ddgtjgd d| d}|dd d}tjtjg| tdg| ddd	}d|j	_
t|| d S )
Nr   r	   r   r?   ri   r   r   r   r   )r   r+   r   r4   r.   r-   rG   r   r   r$   r"   r5   r   )r0   r8   r:   r9   r;   r;   r<   "test_groupby_quantile_allNA_columnj  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   r   )unitr   r	   )valuegroupr   gGz?r   z0 days 00:00:00.990000z0 days 00:00:02.990000r!   rA   )r   r+   Zto_timedeltarG   rq   r4   r.   Z	Timedeltar   r5   r6   r8   r:   r9   r;   r;   r<   test_groupby_timedelta_quantilev  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!   ro   r   )Zaxis皙?r   rj   rR   g?g@gffffff?gffffff@g@gffffff@g@g333333#@g @g333333%@g"@)r>   r   )r>   r   )rE   r   )rE   r   rU   )r   rG   rq   Zreshaper'   r+   r-   r4   r.   rJ   r`   r5   r6   r   r;   r;   r<   test_columns_groupby_quantile  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1Trc   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   NrU   rA   )r   r+   
date_rangefloorr'   rp   r4   r.   rJ   r`   Z	Timestampr5   r6   r   r;   r;   r<   test_timestamp_groupby_quantile  s<       
r   c                     s   t jddd} t | }|  | d d< | d d< | | d   d	< t j jd
< t	t
dd} |}|d} fddtdD }t|j}|jtj|_t|| d S )Nz
2016-01-01i  )r   z
US/Pacificr   r   r	   r   r
   r   r      r   c                    s$   i | ]}| j |d d dqS )Nr   r   )ilocr.   )rd   irx   r;   r<   
<dictcomp>  s      z7test_groupby_quantile_dt64tz_period.<locals>.<dictcomp>)r+   r   r-   Zto_frameZtz_localizeZ	to_periodZNaTr   rG   Ztilerq   r4   r.   rp   r   Tr$   r3   int_r5   r6   )ZdtiZserZbygbr:   expr9   r;   rx   r<   #test_groupby_quantile_dt64tz_period  s    



r   )&ZnumpyrG   r)   Zpandasr+   r   r   Zpandas._testingZ_testingr5   r*   Zparametrizer   r   Zas_unitr=   rL   rY   r]   ra   rs   ry   r~   r   rp   rH   r   r   r   r   r   r   r   r   r   r   r   r   r;   r;   r;   r<   <module>   s    "& "  

 


#