a
    GGb?+                     @   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g dej
dg dg dfg dg d	fg dg d	fg d
g d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g d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-d. Zd/d0 Zej
d1dejdejged2ddgd3dgfdejddged2ddgd3d4gfd5d6d6ejged2d5d6gd d7gfd gd8gd gd9gfg g ejg d:d;ejg d:d;fgd<d= Zej
d>ejg d?d@ dAd;ejg dBd@ dCd;gej
dd'g dDgdEdF Zej
dd'g dDgdGdH ZdIdJ ZdKdL Zej
dMdNdOgdPdQ ZdRdS Z dTdU Z!dS )V    N)	DataFrameIndexinterpolation)ZlinearlowerZhighernearestZmidpointza_vals,b_vals)               )r   r
   r	   r   r   )r   r   r	   r
   r
   r	   r   r   )      ?       @      @      @      @)r   r   r   r   r   r   r   r   r   r   z1/1/18Dr   )ZfreqZperiodsq)r         ?      ?      ?r   c           	      C   s   | dkr&|dkr&|g d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   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-   Alib/python3.9/site-packages/pandas/tests/groupby/test_quantile.pytest_quantile   s    $r/   c                  C   s   t dg di} | g ddg}tjddgdgg}t dddgi|d}t|| t g d	g d
d} tjddgddgg}| g dddg}t g dg dd|d}t|| d S )NAr   r   r   r	   r
   )r   r   r   r   r   r   r   r         @r    )r   r   r   r	   )r
   r         r0   Br   )r   r   r   r   )r   r   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 g d
g ddtj	j
g d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@        rB   )
g333333?gffffff@g?r   rB   rB   gffffff?g@r   r   )r7   Cr1   namesr3   )r   npZrandomZRandomStateZrandintlistr'   r%   r#   r9   r:   r(   r)   r*   r,   r+   r-   r-   r.   test_quantile_array2M   s    	rI   c                  C   s   t g dg dd} | jg dddg d}t g dg d	dtjd
dgg dgd}t|| | jg dddddg}t g dg ddtjd
dgddggd}t|| d S )Nr   r   r   r	   r
   r   r6   )r   r   r   F)sort)r   r   r   )r   r         ?r   r   r   )      @r         @r   r   r   r   r   r3   r   r   )rM   r   r   r   )rO   rN   r   r   r8   rH   r-   r-   r.   test_quantile_array_no_sort_   s    rP   c                  C   s|   t g dg dg dg dd} | ddgdd	g}tjjg d
g dd}t g dg dd|d}t|| d S )NrJ   rK   )r   r   r   )r   r   r   )r0   r7   cdrQ   rR   r   r   ))r   r   r   )r   r   r   )r   r   r   )r   r   r   )rQ   rR   NrD   )r   r   r   r   )g      
@g      @r   r   r6   r3   )r   r'   r%   r#   r9   from_tuplesr(   r)   r;   r-   r-   r.   #test_quantile_array_multiple_levelsp   s    rT   
frame_size)r   r	   )d   r=   r'   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>       zJtest_groupby_quantile_with_arraylike_q_and_int_columns.<locals>.<listcomp>r@   r
   c                    s   g | ]} D ]}|qqS r-   r-   rW   xrX   r   r-   r.   rZ      r[   )ZlevelsZcodesrE   c                    s,   g | ]$}D ]}t |gt   qqS r-   )floatr&   r\   r'   rY   r   r-   r.   rZ      s   c                    s   g | ]}| vr|qS r-   r-   )rW   r]   )r'   r-   r.   rZ      r[   r    r   )r   rF   arrayrangerG   minr&   r#   r9   r'   r%   r(   r)   )rU   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$    ("$re   c               	   C   s   t ddgddgddggddgd} tjtdd	L tjtd
d	 | d  W d    n1 sd0    Y  W d    n1 s0    Y  d S )NZfoor   r   rQ   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    "rm   c                  C   s   t g dtdd} | g d}tjtdd |d W d    n1 sR0    Y  tjtdd |d W d    n1 s0    Y  d S )	N)r   r   r   r   r   r   r4   r   r   zGot '50.0' insteadrf   2   zGot '-1.0' insteadr   )r   rc   r'   r!   ri   
ValueErrorr%   )r*   gr-   r-   r.   $test_quantile_out_of_bounds_q_raises   s    (rr   c                  C   sH   t dt jdg} t| tdd}|d}tdD ]}|  q6d S )Nr   r	   r   r   rV   )rF   rb   nanr   rc   r'   r%   )datar*   grprX   r-   r-   r.   /test_quantile_missing_group_values_no_segfaults   s
    
rv   z$key, val, expected_key, expected_valr
   rB   r2   r   r   rM   *   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   ra   r   )r   r   r'   r%   r(   r)   )r   r   Zexpected_keyZexpected_valr*   r+   ru   r,   r-   r-   r.   2test_quantile_missing_group_values_correct_results   s    

rz   values)r   r   Nr   ZInt64)TFNZbooleanrB   r   r   c                 C   s   t dgd dgd  | d}|dd |}t|trbtjjddg|fdd gd}g d}ntddgdd	}d
g}tj	|d |dd}t
|| d S )Nr]   r	   yrn   r   r   rD   r|   r   r   r   r    r   )r   r'   r%   
isinstancerG   r#   r9   r:   r   r$   r(   assert_series_equal)r{   r   r*   r,   idxZtrue_quantilesr+   r-   r-   r.   $test_groupby_quantile_nullable_array   s    


r   c                 C   sz   t dgdgdgd}tjtdd  |d| }W d    n1 sJ0    Y  |ddg | }t|| d S )	Nr   r   r]   )r   r   rQ   rh   rf   r   r   )r   r(   rk   rl   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   皙?r]   r}   rx   r]   r}   r   r   )ry   r   ry   r    r   r   r   rD   r~   )r   rF   rs   r'   r%   r   r#   r$   r_   r(   r   r9   r:   )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   rx   r]   r}   r   rN   )r   ry   r   r3   )
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   ry   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   rx   r]   r}   r   r   r   )r   r#   ZNAr'   r%   r$   rF   rs   r_   r   r    r   r(   r   )ry   r*   r,   r+   r-   r-   r.   "test_groupby_quantile_allNA_column  s    r   c                  C   sn   t tjtdddg dd} | dd}t dtd	td
gitddgddd}t	
|| d S )Nr
   s)Zunit)r   r   r   r   )valuegroupr   gGz?r   z0 days 00:00:00.990000z0 days 00:00:02.990000r   r   r   r3   )r   r#   Zto_timedeltarF   aranger'   r%   Z	Timedeltar   r(   r)   rH   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 g dg dg dgtdtj	j
g ddd gdd}t|| d S )N   r	   r   ZXYZZABABcolr   ra   r   )Zaxis皙?r   r^   )rA   g?g@gffffff?)gffffff@g@gffffff@g@)g333333#@g @g333333%@g"@))r0   r   )r0   r   )r7   r   )r7   r   rD   )r   rF   r   ZreshaperG   r#   r$   r'   r%   r9   rS   r(   r)   rH   r-   r-   r.   test_columns_groupby_quantile7  s"    r   )"ZnumpyrF   r!   Zpandasr#   r   r   Zpandas._testingZ_testingr(   ZmarkZparametrizers   rG   Z
date_ranger/   r<   rI   rP   rT   re   rm   rr   rv   rc   rb   rz   r   r   r   r   r   r   r   r-   r-   r-   r.   <module>   sx   "&
"  




