o
    d<                     @   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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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d0d1 Zej
d2dejdejged3ddgd4dgfdejddged3ddgd4d5gfd6d7d7ejged3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g d@dA dBd<ejg dCdA dDd<gej
dd(g dEgdFdG Zej
dd(g dEgej
dHdIdJgdKdL ZdMdN ZdOdP Zej
dQg dRdSdT Zej
ddUdVgdWdX Z ej
dYdZd[gd\d] Z!d^d_ Z"d`da Z#dbdc Z$ddde Z%dS )f    N)	DataFrameIndexinterpolation)linearlowerhighernearest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   )freqperiodssq)r         ?      ?      ?r
   c                 C   s  | dkr|dkrt |tr|g d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rw|	jjd jdkrw|	|j}	|dj
|| d}
t|
|	 d S )Nr   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>   V/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/groupby/test_quantile.pytest_quantile   s0   
&r@   c                  C   s   t dg di} tjg dtj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}tjg dtj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
   r3   r   r   r
         @r'   )r   r
   r   r   )r   r         rA   Br   )r   r   r
   r
   )r   r   g      @g      @)g      @g      @g      @g      @r   nparrayint64r7   r1   r.   
MultiIndexfrom_productr8   r9   )r;   r"   r=   r'   r<   r>   r>   r?   test_quantile_arrayI   s   rP   c                  C   s   t jdjdddt jd} t| 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   )sizer3   ABCr&   rA   g333333?ffffff?)
g?g @g@g333333@皙?g333333@gffffff@g@        rW   )
g333333?gffffff@g?r   rW   rW   gffffff?g@r   r   )rI   CrB   namesrE   )rK   randomZRandomStaterandintrM   r   r*   r7   r1   r.   rN   rO   r8   r9   )Zarrr;   r=   r<   r>   r>   r?   test_quantile_array2^   s   	r]   c                  C   s   t g dg dd} tjg dtjd}| j|ddg d}t g d	g d
dtjddgg dgd}t	
|| | j|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   rH   )r
   r   r
   rC   F)sort)r   r   r   )r   r         ?r   r   r   )      @r         @r   r   r   r
   r   rE   r   r   )ra   r   r   r   )rc   rb   r   r   rJ   )r;   r"   r=   r<   r>   r>   r?   test_quantile_array_no_sorto   s   rd   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 )Nr^   r_   )r   r   r   )r   r   r    )rA   rI   cdre   rf   r   r   ))r   r   r   )r   r   r   )r   r    r   )r   r    r   )re   rf   NrY   )r   r   r   r   )g      
@g      @r   r   rH   rE   )r   r7   r1   r.   rN   from_tuplesr8   r9   )r;   r=   r'   r<   r>   r>   r?   #test_quantile_array_multiple_levels   s   rh   
frame_size)r   r   )d   rQ   r7   r
   r   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>       zJtest_groupby_quantile_with_arraylike_q_and_int_columns.<locals>.<listcomp>rT   r   c                    s   g | ]	} D ]}|qqS r>   r>   rk   xrl   r   r>   r?   rn      ro   )ZlevelscodesrZ   c                    s,   g | ]}D ]}t |gt   qqS r>   )floatr2   rp   r7   rm   r   r>   r?   rn      s
    c                    s   g | ]}| vr|qS r>   r>   )rk   rq   )r7   r>   r?   rn      s    r'   r&   )r   rK   rL   rangearangeminr2   r*   r.   rN   r7   r1   r8   r9   )ri   r7   r   Znrowr;   Z
idx_levelsZ	idx_codesZexpected_indexZexpected_valuesZexpected_columnsr<   r=   r>   ru   r?   6test_groupby_quantile_with_arraylike_q_and_int_columns   s$   ( $rz   c                  C   sd   t ddgddgddggddgd} tjtdd	 | d  W d    d S 1 s+w   Y  d S )
NZfoor   r    re   r"   r#   rT   z+cannot be performed against 'object' dtypesmatch)r   r,   raises	TypeErrorr7   r1   r;   r>   r>   r?   test_quantile_raises   s   ""r   c                  C   s   t g dtdd} | g d}tjtdd |d W d    n1 s)w   Y  tjtdd |d W d    d S 1 sFw   Y  d S )	N)r   r   r   r
   r
   r
   rF   r   r    zGot '50.0' insteadr{   2   zGot '-1.0' insteadr   )r   rw   r7   r,   r}   
ValueErrorr1   )r;   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 ]}|  qd S )Nr   r   r!   r"   rj   )rK   rL   nanr   rw   r7   r1   )datar;   grprl   r>   r>   r?   /test_quantile_missing_group_values_no_segfaults   s   

r   z$key, val, expected_key, expected_valr   rW   rD   r   r    ra   *   g      E@Zfloat64rC   c                 C   s^   t | |d}t |t|dddgd}|d}|d}t|| | }t|| d S )Nr!   r"   r$   r#   rv   r   )r   r   r7   r1   r8   r9   )r"   r#   Zexpected_keyZexpected_valr;   r<   r   r=   r>   r>   r?   2test_quantile_missing_group_values_correct_results   s   

r   r5   )r
   r   Nr   ZInt64)TFNbooleanrW   r   r   c                 C   s   t dgd dgd  | d}|dd |}t|tr1t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d}t
|| d S )Nrq   r   yr   r   r    rY   r   r$   r   r   Float64r'   r%   r3   )r   r7   r1   r)   r*   r.   rN   rO   r   r0   r8   assert_series_equal)r5   r   r;   r=   idxZtrue_quantilesr<   r>   r>   r?   $test_groupby_quantile_nullable_array   s   


r   numeric_onlyTFc                 C   s   t dgdgdgd}|r*|dj| |d}|ddg | }t|| d S tjtdd	 |dj| |d W d    d S 1 sGw   Y  d S )
Nr
   r   rq   )r   r    re   r   )r   r    z7'quantile' cannot be performed against 'object' dtypes!r{   )r   r7   r1   r8   r9   r,   r}   r~   )r   r   r;   r=   r<   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
v r'| }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
   皙?rq   r   rC   rq   r   r   r   )r3   r%   )Float32r   r3   r'   r%   r   r   rY   r   )r   rK   r   r7   r1   r   r.   r0   r8   r   rN   rO   )Zany_float_dtyper;   r=   Z	exp_indexexpected_dtyper<   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   rC   rq   r   r   rb   r   )r%   r3   r   r3   r'   )	r   r7   r1   r.   r0   r   r8   r   r9   )Zany_int_ea_dtyper;   r=   r<   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 g d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g d|dg dgdd gdd}t	|| d S )Nr
   r
   r
   r   r
   r   r   r   rC   r   r   rU   r   r   r    r
   r
   r   r   )r   rU   r   rU   rY   r   
r   r.   NAr7   r1   rN   Zfrom_arraysr0   r8   r9   )r   Zval1Zval2any_numeric_ea_dtyper;   r=   r<   r>   r>   r?   )test_groupby_quantile_all_na_group_masked7  s   r   r	   r   c                 C   s   t g ddddtjgd|d}|djdd	g| d
}|dkr#|}nd}t dddtjtjgi|tjjtjg d|dg dgdd gdd}t	|| d S )Nr   r
   r   r   r   rC   r   r   r   r   r   r   r    r   rD   r   )r   r   r   r   rY   r   r   )r   r   r;   r=   r   r<   r>   r>   r?   0test_groupby_quantile_all_na_group_masked_interpM  s$   r   r3   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   rC   rq   r   r   r   r   )r   r.   r   r7   r1   r0   rK   r   r   r'   r%   r8   r   )r3   r;   r=   r<   r>   r>   r?   "test_groupby_quantile_allNA_columnj  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   r   )unitr   )valuegroupr   gGz?r   z0 days 00:00:00.990000z0 days 00:00:02.990000r
   r   r$   rE   )r   r.   Zto_timedeltarK   rx   r7   r1   Z	Timedeltar   r8   r9   r;   r=   r<   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 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$   rv   r
   )Zaxis皙?r   rr   )rV   g?g@gffffff?)gffffff@g@gffffff@g@)g333333#@g @g333333%@g"@))rA   r   )rA   r   )rI   r   )rI   r   rY   )r   rK   rx   Zreshaper*   r.   r0   r7   r1   rN   rg   r8   r9   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1Trj   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   NrY   rE   )r   r.   
date_rangefloorr*   rw   r7   r1   rN   rg   	Timestampr8   r9   r   r>   r>   r?   test_timestamp_groupby_quantile  s4   
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   )ilocr1   )rk   ir   r>   r?   
<dictcomp>  s   $ z7test_groupby_quantile_dt64tz_period.<locals>.<dictcomp>)r.   r   r0   Zto_frameZtz_localizeZ	to_periodZNaTr   rK   Ztilerx   r7   r1   rw   r   Tr'   r6   int_r8   r9   )ZdtiZserZbygbr=   expr<   r>   r   r?   #test_groupby_quantile_dt64tz_period  s   



r   )&numpyrK   r,   Zpandasr.   r   r   Zpandas._testingZ_testingr8   r-   Zparametrizer   r   Zas_unitr@   rP   r]   rd   rh   rz   r   r   r   rw   rL   r   r   r   r   r   r   r   r   r   r   r   r   r>   r>   r>   r?   <module>   s    "& "  

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