U
    ¾mœ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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;   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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       )Z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;   rm   r<   Ú6test_groupby_quantile_with_arraylike_q_and_int_columns�   s,    ( $ÿ  ÿÿ  ÿrr   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    "rx   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' insteadrs   é2   zGot '-1.0' insteadr   )r   ro   r4   r)   ru   Ú
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   ro   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    rn   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
   Úyry   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!rs   )r   r4   r.   r5   r6   r)   ru   rv   )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
   ry   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
   ry   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ž   g®Gáz®ï?r�   z0 days 00:00:00.990000z0 days 00:00:02.990000r!   rA   )r   r+   Zto_timedeltarG   rp   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!   rn   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   rp   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@gfffff†b@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'   ro   r4   r.   rJ   r`   Ú	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   Úirw   r;   r<   Ú
<dictcomp>Ò  s      z7test_groupby_quantile_dt64tz_period.<locals>.<dictcomp>)r+   r¬   r-   Zto_frameZtz_localizeZ	to_periodZNaTr±   rG   Ztilerp   r4   r.   ro   r   ÚTr$   r3   Úint_r5   r6   )ZdtiZserZbyÚgbr:   Úexpr9   r;   rw   r<   Ú#test_groupby_quantile_dt64tz_periodÂ  s    



r¸   )&ÚnumpyrG   r)   Zpandasr+   r   r   Zpandas._testingZ_testingr5   r*   Zparametrizer~   r¬   Zas_unitr=   rL   rY   r]   ra   rr   rx   r}   r�   ro   rH   rƒ   rŠ   rŒ   r’   r”   r™   rš   r›   r    r¤   r¯   r¸   r;   r;   r;   r<   Ú<module>   s”    ÿ"&þþìþ "  ûþ

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