U
    ¾mœdÄX  ã                   @   sÎ  d dl Zd dlZd dlmZ d dlmZ d dlZd dl	m
Z d dlmZ ej ddddgddggd	d
gd	dgd	dgdœfdddgdejgddggd	dd
gd	ddgd	ddgdœfg¡dd„ ƒZej ddddgddggdd
gddgddgdœfdddgdejgddgejdggddd
dgddddgdd	ddgdœfg¡dd„ ƒZej ddddgd
d	gdd	gdd	gdœfdddejgd
d	dgdd	dgdd	dgdœfg¡dd„ ƒZej dddddejgejddgddgd �fddddejgejdddgddejgd �fg¡d!d"„ ƒZej d#dejd$d%gddgd&d'�fdejd$d%d(gddejgd&d'�fg¡d)d*„ ƒZej d+d,¡d-d.„ ƒZej d/e d d0¡ed1ƒejjd2d3gd4d5gd6�g¡d7d8„ ƒZej ddddgddggd	d
gddgddgdœfdddgdejgddggd	dd
gdddgdddgdœfg¡d9d:„ ƒZejjej d;e d<¡e d=¡fe  d>¡e  d?¡fe !d<¡e !d=¡fg¡ej d@ddAdgfddAddBgfg¡dCdD„ ƒƒƒZ"ej dEej#ddddejgdFdFdGdHgdIœdJd dKd d giddejgdLdM�ej#ddddejgdFdFdGdHgdIœdJd dKd giddNdM�ej#dddddOgdFdFdGdHgdIœdJd dKd d giddPdM�ej#dddddOgdFdFdGdHgdIœdJd dKd d giddQdM�g¡dRdS„ ƒZ$ej dTddgddgg¡ej dUdgddgg¡ej dVddg¡dWdX„ ƒƒƒZ%dYdZ„ Z&d[d\„ Z'ej d]e(d^ƒ¡ej d_dd`dadbdcdddedfdgdhdgdidjdkej#dlejj)edmdn�do�dpdqdrg¡ej dsddg¡dtdu„ ƒƒƒZ*ej dsddg¡ej d_e+dg¡dvdw„ ƒƒZ,ej dxdydzd{g¡d|d}„ ƒZ-d~d„ Z.ej d€d�d‚g¡dƒd„„ ƒZ/d…d†„ Z0d‡dˆ„ Z1dS )‰é    N)Úpa_version_under7p0)Úna_value_for_dtype)Úget_groupby_method_argszdropna, tuples, outputsTÚAÚBg      *@ç…ëQ¸Î^@g     À^@ç      ð?©ÚcÚdÚeFçš™™™™™(@ç      m@g      (@c           	      C   s®   dddddgd|dddgdddddgddddd	gg}t j|d
ddddgd�}|jd
dg| d� ¡ }t jj|tdƒd�}| s�|jddtj	gdd�}t j||d�}t
 ||¡ d S )Nr   r   é   r   r   r   é{   é   r   ÚaÚbr
   r   r   ©Úcolumns©ÚdropnaÚab©Únames©Úlevel©Úindex©ÚpdÚ	DataFrameÚgroupbyÚsumÚ
MultiIndexÚfrom_tuplesÚlistÚ
set_levelsÚnpÚnanÚtmÚassert_frame_equal)	r   ÚtuplesÚoutputsÚnulls_fixtureÚdf_listÚdfÚgroupedÚmiÚexpected© r4   úa/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/groupby/test_groupby_dropna.pyÚ:test_groupby_dropna_multi_index_dataframe_nan_in_one_group   s    ür6   gš™™™™™*@g     @m@c           
   	   C   sÂ   dddddgd|dddgdddddg|dddd	gd|ddd	gg}t j|d
ddddgd�}|jd
dg| d� ¡ }t jj|tdƒd�}| s¤| ddtj	gddtj	gg¡}t j||d�}	t
 ||	¡ d S )Nr   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   r   )
r   r,   r-   r.   Únulls_fixture2r/   r0   r1   r2   r3   r4   r4   r5   Ú;test_groupby_dropna_multi_index_dataframe_nan_in_two_groups8   s    ûr8   zdropna, idx, outputs)r   r
   r   c                 C   s~   ddddgd dddgddddgdddd	gg}t j|d
dddgd�}|jd
| d� ¡ }t j|t j|dd
d�d�}t ||¡ d S )Nr   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   Úobject©ÚdtypeÚnamer   )r    r!   r"   r#   ÚIndexr*   r+   )r   Úidxr-   r/   r0   r1   r3   r4   r4   r5   Ú*test_groupby_dropna_normal_index_dataframed   s    



ür?   zdropna, idx, expectedr   r   é   r   c                 C   s8   t jddddg|d�}|jd| d� ¡ }t ||¡ d S )Nr   é   r@   r   r   )r   r   )r    ÚSeriesr"   r#   r*   Úassert_series_equal)r   r>   r3   ÚserÚresultr4   r4   r5   Ú test_groupby_dropna_series_levelƒ   s    rF   zdropna, expectedg     @j@ç     àu@ú	Max Speed©r   r<   ç      4@c                 C   sL   t jddddgddddgdd�}|jd	d
d	tjg| d� ¡ }t ||¡ d S )Ng     `x@rG   g      >@rJ   ZFalconZParrotrH   rI   r   r   r   )r    rB   r"   r(   r)   Zmeanr*   rC   )r   r3   rD   rE   r4   r4   r5   Útest_groupby_dropna_series_by•   s    

ýrK   r   )FTc                 C   sB   t  dddd gdddd gdœ¡}|jd| d�}|jj| ks>t‚d S )Nr   r   rA   r@   ©r   r   r   r   )r    r!   r"   Zgrouperr   ÚAssertionError)r   r0   Úgbr4   r4   r5   Útest_grouper_dropna_propagationª   s     rO   r   é   Úabcd)r   rA   )ÚRr   ÚnumÚcolr   c                 C   sÌ   dddd| rt jndgi}tjdddd gdddd gdœ|d�}|jd| d	�}| t¡}tj||d�}t ||¡ |dg  t¡}tj||d�}t ||¡ |d  t¡}tj	|d |dd
�}t 
||¡ d S )Nr   rA   r   r   r@   rL   r   r   r   rI   )r(   r)   r    r!   r"   Ú	transformÚlenr*   r+   rB   rC   )r   r   Zexpected_datar0   rN   rE   r3   r4   r4   r5   Ú+test_groupby_dataframe_slice_then_transform²   s    
$
rW   c           	      C   s¼   dddddgdd dddgdddddgddddd	gg}t j|d
ddddgd�}ttddœ}|jd
dg| d� |¡}t jj|tdƒd�}| sž|j	ddt
jgdd�}t j||d�}t ||¡ d S )Nr   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   Úminr	   r   r   r   r   r   )r    r!   r#   Úmaxr"   Úaggr$   r%   r&   r'   r(   r)   r*   r+   )	r   r,   r-   r/   r0   Zagg_dictr1   r2   r3   r4   r4   r5   Ú-test_groupby_dropna_multi_index_dataframe_aggÎ   s    ür[   zdatetime1, datetime2z
2020-01-01z
2020-02-01z-2 daysz-1 dayszdropna, valuesr   é   c           
   	   C   s†   t  ddddddg||||||gdœ¡}| r6||g}n||tjg}|jd| d	� d
ti¡}t jd
|it j|dd�d�}	t 	||	¡ d S )Nr   rA   r@   rP   é   r\   )ÚvaluesÚdtr_   r   r^   ©r<   r   )
r    r!   r(   r)   r"   rZ   r#   r=   r*   r+   )
r   r^   Z	datetime1Z	datetime2Zunique_nulls_fixtureZunique_nulls_fixture2r0   Zindexesr1   r3   r4   r4   r5   Ú&test_groupby_dropna_datetime_like_dataø   s"    úþÿ
ra   z#dropna, data, selected_data, levelsé
   é   é   )Úgroupsr^   r^   r   Zdropna_false_has_nan)ÚidZdropna_true_has_nanr
   Zdropna_false_no_nanZdropna_true_no_nanc           
      C   s„   t  |¡}|jd| d�}| dd„ ¡}tt|d |d ƒƒ}t jj|dd gd�}| sf|rf|j|dd�}t j||d�}	t	 
||	¡ d S )	Nre   r   c                 S   s   t  dtt| ƒƒi¡S )Nr^   )r    r!   ÚrangerV   )Úgrpr4   r4   r5   Ú<lambda>G  ó    z@test_groupby_apply_with_dropna_for_multi_index.<locals>.<lambda>r^   r   r   r   )r    r!   r"   ÚapplyÚtupleÚzipr$   r%   r'   r*   r+   )
r   ÚdataZselected_dataZlevelsr0   rN   rE   Z	mi_tuplesr2   r3   r4   r4   r5   Ú.test_groupby_apply_with_dropna_for_multi_index  s    &
ro   Úinput_indexÚkeysÚseriesc                 C   sœ   t  dtjgddgddgdœ¡}| |¡}|r8|d }n | ddgkrX|dgkrX|dg }| d k	rj| | ¡}|j|dd	�}|r„|d }| ¡ }t ||¡ d S )
Nr   rA   r@   )r   r   r
   r
   r   r   Fr   )	r    r!   r(   r)   Ú	set_indexr"   r#   r*   Úassert_equal)rp   rq   rr   Úobjr3   rN   rE   r4   r4   r5   Ú)test_groupby_dropna_with_multiindex_inputT  s$    ýÿ



rv   c               	   C   sæ   dt jddt jgdddddgdœ} t | ¡}|jd	d
d�}|j}t j}dt jddg|d�dt jdg|d�t jt jddg|d�i}t| 	¡ | 	¡ ƒD ]\}}t
 ||¡ q’t  t| ¡ ƒd ¡sÂt‚t| ¡ ƒdd… ddgksât‚d S )NÚg1Úg2r   r   rA   r@   rP   )Úgroupr   ry   Fr   ©r;   )r(   r)   r    r!   r"   ÚindicesZintpÚarrayrm   r^   r*   Zassert_numpy_array_equalÚisnanr&   rq   rM   )rn   r0   r1   rE   r;   r3   Zresult_valuesZexpected_valuesr4   r4   r5   Útest_groupby_nan_includedr  s     "
   ýr~   c                  C   sV   t jtjddggdddgd�} |  ddg¡} | jddgdd� ¡ }| }t ||¡ d S )	Nr   r   r   r   r
   r   Fr   )	r    r!   r(   r)   rs   r"   Úfirstr*   r+   )r0   rE   r3   r4   r4   r5   Ú&test_groupby_drop_nan_with_multi_index„  s
    r€   Úsequence_indexéQ   r;   ZUInt8ZInt8ZUInt16ZInt16ZUInt32ZInt32ZUInt64ZInt64ZFloat32ZFloat64ÚcategoryÚstringústring[pyarrow]zpyarrow is not installed©Úreason)Zmarksúdatetime64[ns]ú	period[d]zSparse[float]Útest_seriesc                    sÔ  d  ‡ fdd„tdƒD ƒ¡}|dkr4ddtjdœ‰n&|d	krLd
dtjdœ‰nddtjdœ‰t tj‡fdd„|D ƒ|d�ddddgdœ¡}|jddd|d�}|r¨|d }| 	¡ }i }t
|ƒD ]\}	}
| |
d¡|	 ||
< q¼|dk�rtj‡fdd„|D ƒ|d jjdd�}n^t|tƒ�rL| d¡�rLtjtj‡fdd„|D ƒ|d�dd�}ntj‡fdd„|D ƒ|dd�}tj| ¡ |dd d�}|�sŽ| ¡ }|�sÄ| ¡ }|d k	�rÄ| d¡�rÄ|d  |¡|d< t ||¡ d S )NÚ c                    s(   g | ] }d dddœˆ d|  d  ‘qS )ÚxÚyÚz)r   r   rA   r@   r4   )Ú.0Úk)r�   r4   r5   Ú
<listcomp>²  s     z(test_no_sort_keep_na.<locals>.<listcomp>rP   )r„   r…   rŒ   r�   )rŒ   r�   rŽ   )rˆ   r‰   z
2016-01-01z
2017-01-01r   rA   c                    s   g | ]}ˆ | ‘qS r4   r4   ©r�   Úlabel©Úuniquesr4   r5   r‘   ¿  s     rz   r   r@   )Úkeyr   r–   F)r   ÚsortÚas_indexr   rƒ   c                    s   g | ]}ˆ | ‘qS r4   r4   ©r�   r   r”   r4   r5   r‘   Ï  s     r`   ZSparsec                    s   g | ]}ˆ | ‘qS r4   r4   r’   r”   r4   r5   r‘   Õ  s     c                    s   g | ]}ˆ | ‘qS r4   r4   r’   r”   r4   r5   r‘   Ø  s     r:   )r   r<   r;   )Újoinrg   r    ZNAr(   r)   r!   rB   r"   r#   Ú	enumerateÚgetZCategoricalIndexÚcatÚ
categoriesÚ
isinstanceÚstrÚ
startswithr=   r|   r^   Zto_frameÚreset_indexÚastyper*   rt   )r�   r;   rŠ   r˜   Úsequencer0   rN   rE   Zsummedr>   r“   r   r3   r4   )r�   r•   r5   Útest_no_sort_keep_naŽ  sP    #ÿ
þÿ

ý ÿr¥   c                 C   s˜   t  dddgi¡}t j||g|d�}|r0|d n|}|j|d| d�}| ¡ }	t  t|jƒg¡}
t jddgi|
d�}|rˆt 	|	|d ¡ nt 
|	|¡ d S )	Nr   r   rA   rz   F)r   r—   r@   r   )r    r!   rB   r"   r#   r=   r   r;   r*   rC   r+   )r—   r;   r.   r7   rŠ   r0   re   ru   rN   rE   r   r3   r4   r4   r5   Útest_null_is_null_for_dtypeä  s    r¦   Ú
index_kindrg   ÚsingleÚmultic                 C   s¾  |dkr.|s.|dkr.d}| j  tjj|d�¡ t tjjddd gdd�d ¡}t	 
t	j|ddd	gd
�tdƒdœ¡}| ¡ }	t	j|ddd	dgd
� d¡|	d< |dkr¨dg}
n`|dkrÌdg}
| d¡}|	 d¡}	n<ddg}
|d |d< | ddg¡}|	d |	d< |	 ddg¡}	t||ƒ}t||	ƒ}|dk�rT|dk�rT|d j|
d�f}|d j|
d�f}|	j|
||dd�}t||ƒ|Ž  ¡ }|d  dd ¡|d< |dk�rª|d  dd ¡|d< |�rÖ|dk�rÊ| ddg¡}n
| d¡}n6|dk�r|dk�r|jdd�}|dk�r|jdd�}|dk�r^|dk�r^|d j ¡ }|dk�rHdd„ |D ƒ}ndd„ |D ƒ}||d< |dk�rŒ|jddid�}|�rŒ|d  d ¡}|j|
d|||d�}t||ƒ|Ž }t ||¡ d S )N)ÚidxminÚidxmaxr©   z@GH#10694 - idxmin/max broken for categorical with observed=Falser†   r   rA   é   ©Úsizer@   ©rž   rc   ©rŒ   r�   rP   rŒ   rg   r¨   Zx2Zcorrwithr   r   T)Úobservedr—   r˜   r®   )r«   rª   r�   c                 S   s   g | ]}|d krt jn|‘qS )rP   ©r(   r)   r™   r4   r4   r5   r‘   5  s     z-test_categorical_reducers.<locals>.<listcomp>c                 S   s$   g | ]}|d krt jt jfn|‘qS ))rP   rP   r²   r™   r4   r4   r5   r‘   7  s     F©r   r±   r—   r˜   )ÚnodeÚ
add_markerÚpytestÚmarkÚxfailr(   ÚappendÚrandomÚchoicer    r!   ÚCategoricalrg   ÚcopyÚfillnars   r   Zdropr"   Úgetattrr¢   Úreplacer^   ÚtolistÚrenamer*   rt   )ÚrequestZreduction_funcr±   r—   r˜   r§   Úmsgr^   r0   Z	df_filledrq   ÚargsZargs_filledZ	gb_filledr3   Ú	gb_keepnarE   r4   r4   r5   Útest_categorical_reducers÷  s|    ÿþýÿ 







    ÿrÇ   c                 C   s
  |dkr$d}| j  tjj|dd�¡ t tjjddd gdd�d ¡}t	 
t	j|ddd	gd
�tdƒdœ¡}t||ƒ}||d  ¡  d }	|dkržttt|	ƒƒƒ}
nx|dk�r|rÜ|rÆ|d jdd�d }qø|d jdd�d }n|jd |	jd … d  ¡ }t|	ƒ|g }
nt|	|ƒ|Ž }
t	 
d|
i¡}|jdd|||d�}|jdd||d�}t||ƒ|Ž }t||ƒ|Ž }t||d  ¡  j ¡ |j ¡ ƒD ]0\}}|jdk�r¨||j|< n||j|df< �qˆ|dk�ræ||d  ¡ | |¡@   d7  < |dk�rú| d¡}t ||¡ d S )Nr¾   zBGH#49651 fillna may incorrectly reorders results when dropna=FalseF)r‡   Ústrictr   rA   r¬   r­   r@   r¯   rc   r°   rŒ   r�   ZcumcountZngroupr   r   r³   T)r   r±   r—   )ZrankÚdiffZ
pct_changeÚshiftZint64) r´   rµ   r¶   r·   r¸   r(   r¹   rº   r»   r    r!   r¼   rg   r   Zisnullr&   rV   ZnuniqueÚilocr   r¿   r"   rm   rÁ   r^   ZravelÚndimZnotnullÚger£   r*   rt   )rÃ   Ztransformation_funcr±   r—   r˜   rÄ   r^   r0   rÅ   Znull_group_valuesZnull_group_dataZna_groupZnull_group_resultrÆ   Z	gb_dropnarE   r3   rË   Úvaluer4   r4   r5   Útest_categorical_transformersH  sT    ÿ

    ÿ ÿ
"

rÏ   ÚmethodÚheadÚtailc           
      C   sè   t j ddd gd¡}t tj|dddgd�tt|ƒƒdœ¡}|jdd|||d	�}t	|| ƒƒ }| d
krr|d d d… }|dk|dk 
¡ dk@ |dk|dk 
¡ dk@ B |d k|d k 
¡ dk@ B }| d
krÐ|d d d… }|| }	t ||	¡ d S )Nr   rA   rd   r@   r¯   r°   rŒ   Fr³   rÒ   éÿÿÿÿr]   )r(   rº   r»   r    r!   r¼   rg   rV   r"   r¿   Zcumsumr*   r+   )
rÐ   r±   r—   r˜   r^   r0   rN   rE   Úmaskr3   r4   r4   r5   Útest_categorical_head_tail}  s$     ÿÿýÿrÕ   c                  C   sp   t j ddd gd¡} t tj| dddgd�tt| ƒƒdœ¡}|jddd	�}| 	d
d„ ¡}| 
¡ }t ||¡ d S )Nr   rA   rd   r@   r¯   r°   rŒ   Fr   c                 S   s   |   ¡ S ©N©r#   ©rŒ   r4   r4   r5   ri   ž  rj   z&test_categorical_agg.<locals>.<lambda>)r(   rº   r»   r    r!   r¼   rg   rV   r"   rZ   r#   r*   r+   ©r^   r0   rN   rE   r3   r4   r4   r5   Útest_categorical_agg—  s     ÿrÚ   c                  C   sr   t j ddd gd¡} t tj| dddgd�tt| ƒƒdœ¡}|jddd	�}| 	d
d„ ¡}| 	d¡}t
 ||¡ d S )Nr   rA   rd   r@   r¯   r°   rŒ   Fr   c                 S   s   |   ¡ S rÖ   r×   rØ   r4   r4   r5   ri   ª  rj   z,test_categorical_transform.<locals>.<lambda>r#   )r(   rº   r»   r    r!   r¼   rg   rV   r"   rU   r*   r+   rÙ   r4   r4   r5   Útest_categorical_transform£  s     ÿ
rÛ   )2Únumpyr(   r¶   Zpandas.compat.pyarrowr   Zpandas.core.dtypes.missingr   Zpandasr    Zpandas._testingZ_testingr*   Zpandas.tests.groupbyr   r·   Zparametrizer)   r6   r8   r?   rB   rF   rK   rO   Z
RangeIndexr&   r$   Zfrom_productrW   r[   Zarm_slowÚ	TimestampZ	TimedeltaZPeriodra   Úparamro   rv   r~   r€   rg   Zskipifr¥   r9   r¦   rÇ   rÏ   rÕ   rÚ   rÛ   r4   r4   r4   r5   Ú<module>   st  ýýýúþ
ý


ýýúþ
 
ýýþþ
$ýþþ
þþþ



ýþ
ýýýúþ
ýþ"
ûûúúéþ#

 ÿþéþ8
P5
