U
    ¾mœd! ã                   @   s`  d dl m Z  d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ ejfdd„Zejejd ejejejejejejejejejejd ejejejd ejejd ejdœZd	d
„ Zdd„ Zdd„ Zdd„ Zej dddg¡dd„ ƒZdd„ Zdd„ Zdd„ Z dd„ Z!ej ddd d!d ged"d#d$gdd%�fdd&gd'd(d d d d!d d d g	ed"d#d$gdd%�e	d)d*d+gƒgfdd,gd d d d d!d d d d g	ed"d#d$gdd%�ed"d#d$gdd%�gfg¡ej d-ddg¡d.d/„ ƒƒZ"d0d1„ Z#d2d3„ Z$d4d5„ Z%ej dddg¡ej d6ddg¡ej d7ddg¡d8d9„ ƒƒƒZ&d:d;„ Z'd<d=„ Z(d>d?„ Z)d@dA„ Z*dBdC„ Z+ej dDdEgee,d)ƒƒd d$gd"d#gdFœfee,d)ƒƒ -dGdH„ ¡d#gd d"gdFœfee,d'ƒƒd d$gd"d#gdFœfg¡dIdJ„ ƒZ.dKdL„ Z/dMdN„ Z0dOdP„ Z1ej dQdRdSdRgfdTdUdVgfdWdUdRgfdXdSdVgfg¡dYdZ„ ƒZ2d[d\„ Z3d]d^„ Z4d_d`„ Z5ej dddg¡dadb„ ƒZ6ej dddg¡dcdd„ ƒZ7dedf„ Z8dgdh„ Z9didj„ Z:ej dkdee
j;ed"d"d#gdldm�d"d#d#ggdd&gdn�d"d#d$gdodp�fdeed"d"d#gdldm�d"d#d#gd"d#d$gdqœƒfg¡drds„ ƒZ<ej dtdej=ej>g¡dudv„ ƒZ?ej@dwdx„ ƒZAej dydzd{g¡d|d}„ ƒZBej dydzd{g¡ej d6ddg¡d~d„ ƒƒZCej d€de
 ;e	d�gd) d‚gd)  dldƒd„�e	d…d…d†d†d…d…d‡d‡gdldˆd„�e	dWdXgd) ƒg¡d#d#d)d)d"d"d$d$gfde
jDed�d‚gdd‰�ed…d†d‡gdd‰�e	dWdXgƒgdƒdˆdgdn�d#d#d)d)ej=ej=d"d"ej=ej=d$d$gfde
jDed�d‚gdd‰�ed…d†d‡gdd‰�e	dWdXgƒgdƒdˆdgdn�d#d#d)d)ej=ej=d"d"ej=ej=d$d$gfg¡dŠd‹„ ƒZEdŒd�„ ZFej dŽd"d d gd d d gg¡d�d�„ ƒZGd‘d’„ ZHd“d”„ ZId•d–„ ZJd—d˜„ ZKd™dš„ ZLej d6ddg¡d›dœ„ ƒZMd�dž„ ZNej dŸejOd"d"d#gfejPd"d#d#gfg¡d d¡„ ƒZQd¢d£„ ZRej d¤dRdTg¡d¥d¦„ ƒZSd§d¨„ ZTd©dª„ ZUd«d¬„ ZVd­d®„ ZWd¯d°„ ZXej d¤dRdTg¡eYeZd±œd²d³„ƒZ[ej d¤dRdTg¡eYeZd±œd´dµ„ƒZ\d¶d·„ Z]ej d¤dRdTg¡d¸d¹„ ƒZ^dºd»„ Z_d¼d½„ Z`d¾d¿„ Zaej dÀdÁdÂdÃg¡ej dddg¡dÄdÅ„ ƒƒZbej dÀdÂdÃg¡ej dddg¡dÆdÇ„ ƒƒZcej dÀdÁdÂdÃg¡ej dÈdÉdÊg¡ej dddg¡dËdÌ„ ƒƒƒZdej dÀdÁdÂdÃg¡ej dÈd{dzdÍg¡ej dddg¡dÎdÏ„ ƒƒƒZeej dÀdÁdÂdÃg¡dÐdÑ„ ƒZfej d-ddg¡ej dÒdÓgdÓd,gg¡dÔdÕ„ ƒƒZgdS )Öé    )ÚdatetimeN)ÚCategoricalÚCategoricalIndexÚ	DataFrameÚIndexÚ
MultiIndexÚSeriesÚqcut)ÚSeriesGroupBy)Úget_groupby_method_argsc                 C   s.   dd„ }t jt||ƒ|d�}| j||d� ¡ S )zpReindex to a cartesian production for the groupers,
    preserving the nature (Categorical) of each grouper
    c                 S   s4   t | ttfƒr0| j}tjt t|ƒ¡|| jd�} | S )N©Ú
categoriesÚordered)	Ú
isinstancer   r   r   Ú
from_codesÚnpÚarangeÚlenr   )Úar   © r   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/groupby/test_categorical.pyÚf   s      ÿz)cartesian_product_for_groupers.<locals>.f©Únames©Ú
fill_value)r   Úfrom_productÚmapÚreindexÚ
sort_index)ÚresultÚargsr   r   r   Úindexr   r   r   Úcartesian_product_for_groupers   s    r#   )ÚallÚanyÚcountÚcorrwithÚfirstÚidxmaxÚidxminÚlastÚmaxÚmeanZmedianÚminÚnthÚnuniqueÚprodZquantileZsemÚsizeZskewÚstdÚsumÚvarc                 C   sB   t | jdƒ}dd„ }| j|dd�j |¡}|jjd dks>t‚d S )Né   c                 S   s   |   ¡ |  ¡ |  ¡ |  ¡ dœS )N©r.   r,   r&   r-   r7   )Úgroupr   r   r   Ú	get_statsI   s
    üz2test_apply_use_categorical_name.<locals>.get_statsF©Úobservedr   ÚC)r	   r<   ÚgroupbyÚDÚapplyr"   r   ÚAssertionError)ÚdfÚcatsr9   r    r   r   r   Útest_apply_use_categorical_nameF   s    rC   c               
   C   sr  t dddddddddg	ddddgdd�} tddddddd	d
dg	| dœƒ}ttdƒddd�}tdddd
tjgi|d�}|jddd� ¡ }t 	||¡ t ddddgdddgdd�}t ddddgdddgdd�}t||ddd	d
gdœƒ}|jddd�}tdddgddd�}	tdt
d	ddg|	d�iƒ}|jdd�}t 	||¡ tddgddgddggddgd�}
t |
jƒ|
d< |
jdgdd�}| dd „ ¡}t 	||
dg ¡ |
 d¡}|
jddg }t 	||¡ d!d"„ }| |¡}|
jddg  ¡ }tddgdd#�|_|d  d$¡|d< t 	||¡ tddd%d&giƒ}tj|jdd'd(d)d*gd+�}|jj|dd� t¡}t ||d ¡ t |jj|dd� d,d „ ¡|d ¡ t 	|j|dd� t¡|dg ¡ |j|dd�}| d-d „ ¡}t 	||dg ¡ t d ¡�: | d.d „ ¡}| t¡}| tjj¡}| d/d „ ¡}W 5 Q R X tj	||dg dd0� tj	||dg dd0� t 	||dg ¡ t 	||dg ¡ t |jj|dd� tj¡|d ¡ t 	|j|dd� tj¡|¡ tddd%d&d1giƒ}tj|jd2dd'd(d)d*gd+�}|jj|dd� t¡}t ||d ¡ t |jj|dd� d3d „ ¡|d ¡ t 	|j|dd� t¡|dg ¡ t 	|j|dd� d4d „ ¡|dg ¡ tdddddgiƒ}tj|jdddd	d
gt tdƒƒd5�}|j|dd� t¡}t|j j!|j j"d6�}t
ddddg|d�}d|j_#t ||¡ d7d8d9d:g}tj$j%dd
d;d<�}t j&||dd6�} ttj$ 'd;d
¡ƒ}|j| dd� ¡ }|jt (| ¡dd� ¡ }t|| j!dd�}	| )|	¡}t 	||¡ |j| dd�}| *¡ }| j+ ,¡ }t (| ¡ -|¡}| -|¡}t |dd7d8d9d:gd=�}|j|ddd>� *¡ }t 	||¡ t j&t .d
¡ /d?¡|dd6�}t|ƒ}t 0| 1¡ j 2d¡|¡ td@dAdBdCdDdEdFdGgd
 ƒ}t 0| 1¡ j 2d¡|¡ d S )HNr   ÚbÚcÚdTr   é   é   é   r6   é   ©r   rD   Úabcd©Únamer   ©r"   Fr:   ÚzÚy©ÚAÚBÚvaluesrS   rU   é   r   ©Znumeric_onlyzJohn P. Doez	Jane DoveZ	person_idÚperson_name©Úcolumnsc                 S   s   | S ©Nr   ©Úxr   r   r   Ú<lambda>u   ó    ztest_basic.<locals>.<lambda>c                 S   s   |   d¡jd S )NrX   r   )Údrop_duplicatesÚilocr\   r   r   r   r   |   s    ztest_basic.<locals>.f©rN   Úobjecté   é   é
   é   é   é(   )Úbinsc                 S   s
   t  | ¡S r[   ©r   r4   ©Zxsr   r   r   r^   Ž   r_   c                 S   s   t j| dd�S ©Nr   ©Zaxis©r   r,   rl   r   r   r   r^   “   r_   c                 S   s   t j| dd�S rm   ro   rl   r   r   r   r^   —   r_   c                 S   s   t j | ¡S r[   )r   ÚmaximumÚreducerl   r   r   r   r^   š   r_   )Zcheck_dtypeéûÿÿÿiöÿÿÿc                 S   s
   t  | ¡S r[   rk   rl   r   r   r   r^   ¬   r_   c                 S   s
   t  | ¡S r[   rk   rl   r   r   r   r^   °   r_   )Úlabels©r   ÚfooÚbarÚbazÚquxéd   ©r2   )r   r   ©Úsortr;   é   r&   r-   r3   r.   ú25%ú50%ú75%r,   )3r   r   r   Úlistr   Únanr=   r-   ÚtmÚassert_frame_equalr   r4   rX   Ú	transformr`   ra   r?   Úcopyr   r"   ÚastypeÚpdÚcutr   Úassert_series_equalZassert_produces_warningr,   rp   rq   Úfilterr$   r   rU   r   r   rN   ÚrandomÚrandintr   ÚrandnÚasarrayr   ÚdescribeÚcodesÚargsortÚtaker   ÚrepeatÚassert_index_equalÚstackÚget_level_values)rB   ÚdataÚ	exp_indexÚexpectedr    Úcat1Úcat2rA   ÚgbZexp_idxr]   Úgr   rE   ZgbcÚresult2Zresult3Zresult4Zresult5Úlevelsr‘   ÚgroupedÚdesc_resultÚidxÚ
ord_labelsÚord_dataZexp_catsÚexpcÚexpr   r   r   Ú
test_basicU   sÐ    
ý þ

 ÿ"
$ ÿ" ÿ$


  
ÿr¨   c                 C   s¸   t t ddd¡ttddgƒtdƒgdgd dgd  tdƒgd	d
gd�d�}|jd	g| d�}t t ddd¡ttddgƒtdƒgdgd tdƒgd	d
gd�d�}| d¡}t 	||¡ d S )NrH   é   r   rD   rf   r   rJ   rG   ZIndex1ZIndex2)r    r‘   r   ©r˜   r"   ©Úlevelr;   é   )
r   r   r   r   r   Úranger=   Ú	get_grouprƒ   r„   )r;   rA   rž   rš   r    r   r   r   Útest_level_get_groupâ   s&    ýþýþ
r°   c                  C   sÚ   t dgd dgd  dddgd t d¡d	œƒ} t| jdddgd
d�| _|  d¡d  ¡ }|jdd
d�}ddddddg}t|dddgd
d�}ddddddgt|ƒg}t	j
|ddgd�}tdgd |dd�}t ||¡ d S )NrS   é   rT   ÚhighZmedÚlowr6   g      (@)r8   ÚdoseZoutcomesTr   r8   r´   r   )r¬   Zsort_remainingr   rH   r&   ©r"   rN   )r   r   r   r   r´   r=   Zvalue_countsr   r   r   Úfrom_arraysr   rƒ   rŠ   ©rA   r    r"   rš   r   r   r   Ú(test_sorting_with_different_categoricalsý   s    ýÿr¸   r   TFc           	      C   s  t tdƒ| d�}t tdƒddg| d�}t t|ƒ¡}t|||dœƒ}|jdd	gd
d�}tj||gdd	gd�}tdddg|dgd�}| 	dd„ ¡}t
 ||¡ | ¡ }t
 ||¡ | tj¡}t
 ||¡ tj||gdd	gd�}td|d�}| 	dd„ ¡}t
 ||¡ d S )NÚabcrt   Zaaar   rD   r   )ÚmissingÚdenserU   rº   r»   Tr:   r   r   rG   ç       @rU   )r"   rZ   c                 S   s   t j| dd�S rm   )r   r-   r\   r   r   r   r^   #  r_   ztest_apply.<locals>.<lambda>rO   c                 S   s   dS ©NrG   r   r\   r   r   r   r^   /  r_   )r   r�   r   r   r   r   r=   r   r¶   r?   rƒ   r„   r-   Úaggr   rŠ   )	r   r»   rº   rU   rA   r¡   r£   rš   r    r   r   r   Ú
test_apply  s"    r¿   c              	   C   sž  t ddddgdddgdd�}t ddddgdddgdd�}t||d	d
ddgdœƒ}ddgd
 |d< |jdddg| d�}tj||ddgd
 gdddgd�}tdtd	d
ddg|d�iƒ ¡ }| ¡ }| sàt|||ddggt	dƒdd�}t
 ||¡ |jddg| d�}tj||gddgd�}td	d
ddgddddgdœ|d�}| ¡ }| �s\t|||gt	dƒdd�}t
 ||¡ t ddddgdddgdd�d	d	d
d
gddddgd œ}t|ƒ}|jd!| d�}	|	 ¡ }tt	d"ƒd!t	d#ƒdd$�}td%d%gd&dgd'œ|d�}| �stt	d#ƒd!t	d#ƒdd$�}
| |
¡}t
 ||¡ |jd!d(g| d�}| d)¡}td*d+d&d,gt ddddgdddgdd�d	d
d	d
gd-œƒ d!d(g¡}| �s t||jjd	d
ggd!d(gƒ}t
 ||¡ d.D ]<}|\}}| |¡}||j|k|j|k@  }t
 ||¡ �q°dd/dd/dd	d	gddddd0d1d2gddd3ddddgd4œ}t|ƒ}t |d t ddd¡¡}||d5< |jd5d6gd7| d8�}| d)¡}|jd5d6gd| d8�}| d)¡ ¡ }t
 ||¡ d S )9Nr   rD   rP   Tr   rE   rF   rQ   rG   rH   rI   r6   rR   ru   rv   r<   rS   rT   r:   r   rU   rO   ÚABCr   r   )rU   r<   ÚABrf   rg   rh   ri   )ÚcatÚintsÚvalrÂ   Úabr¹   )rN   r   r   g      ø?ç      4@)rÃ   rÄ   rÃ   r-   ç      $@g      >@g      D@)rÄ   rÂ   rÃ   ))r   rG   )rD   rH   )rD   rG   )r   rH   r}   é2   é<   éF   Úe©ru   rv   rw   r®   rw   F©Úas_indexr;   )r   r   r=   r   r¶   r   r   r4   r#   r�   rƒ   r„   r-   r   r   r¾   Ú	set_indexrÂ   rU   r¯   rÃ   rˆ   r‰   r   ÚlinspaceÚreset_index)r;   r›   rœ   rA   r�   r™   rš   r    rF   Zgroups_single_keyr"   Úgroups_double_keyÚkeyrE   ÚirÂ   ÚgroupsZgroups2r   r   r   Útest_observed3  sÆ     ÿ    ÿ ÿ   ÿ
  ÿ

û   ÿ   ÿ



  ÿ
ûÿø	  ÿ
ý
rÖ   c                 C   sØ   ddddgddddgdddd	gd
œ}t |ƒ}t |d ddddg¡}d|_|j|dg| d�}tj|ddddggddgd�}t ddddgddddgdœ|d�}| s¾t||jddddggddgƒ}| 	d¡}t
 ||¡ d S )NrI   r6   rJ   rG   rH   rf   ry   éÈ   é"   )ÚC1ÚC2ÚC3rÙ   r±   rÂ   rÚ   r:   r   g      @g      @g      @rÇ   g      Y@g      i@g      A@)rÙ   rÛ   rO   r-   )r   rˆ   r‰   rN   r=   r   r¶   r#   rU   r¾   rƒ   r„   )r;   rF   rA   rU   rÒ   r£   rš   r    r   r   r   Útest_observed_codes_remap¡  s$    $ ÿ  ÿ
rÜ   c                  C   sÌ   t tjjdddd�tjjdddd�tjjdddd�ddœƒ} | j t¡ d¡| d< | jdd	d
gdd�}| ¡ }|j	j
d  ¡ | j ¡ ksŒt‚|j	j
d  ¡ | j ¡ ksªt‚|j	j
d  ¡ | j ¡ ksÈt‚d S )Nr   éÿ   i0u  rz   é'  )rÂ   Úint_idÚother_idru   ÚcategoryrÂ   rß   rà   Tr:   rG   rH   )r   r   rŒ   r�   rÂ   r‡   Ústrr=   r&   r"   r    r0   r@   rß   rà   )rA   r¡   r    r   r   r   Útest_observed_perfµ  s    üÿrã   c                 C   s    t dddgdddgd�}t|dddgdœƒ}|jd	| d
�}|j}| rftddgdd�tdgdd�dœ}n*tddgdd�tg dd�tdgdd�dœ}t ||¡ d S )Nr   rE   rD   ©r   rG   rH   rI   ©rÂ   ÚvalsrÂ   r:   r   Úint64©Údtype)r   rE   ©r   rD   rE   )r   r   r=   rÕ   r   rƒ   Úassert_dict_equal)r;   rÂ   rA   rž   r    rš   r   r   r   Útest_observed_groupsÊ  s    "
ýrì   z,keys, expected_values, expected_index_levelsr   rd   é	   rG   rH   rI   rb   rD   rV   r}   r6   rJ   r±   Úa2Útest_seriesc           
   	   C   sö   t tdddgdddgd�tdddgdddgd�dddgdd	d
gdœƒ ddg¡}d| krd|jdd�}|j| dd�}|r~|d }| ¡ }t| ƒdkr˜|}n2dddddddddg	ddddg g}t||| d�}t d|i|d�}	|ræ|	d }	t 	||	¡ d S )NrG   rH   rI   rä   r6   rJ   r±   rV   r}   rí   )r   rî   rD   rE   r   rî   rD   rY   Fr:   rE   r   )r‘   r   rO   )
r   r   rÏ   Údropr=   r4   r   r   rƒ   Úassert_equal)
ÚkeysÚexpected_valuesZexpected_index_levelsrï   rA   r�   r    r"   r‘   rš   r   r   r   Útest_unobserved_in_indexß  s6    üÿù$ýrô   c                 C   s�   t tdtjdgdddgd�dddgdœƒ}|jd	| d
�}|j}| rXdtddgdd�i}n(tddgdd�tg dd�tg dd�dœ}t ||¡ d S )Nr   rD   rF   rä   rG   rH   rI   rå   rÂ   r:   r   rç   rè   )r   rD   rF   )	r   r   r   r‚   r=   rÕ   r   rƒ   rë   )r;   rA   rž   r    rš   r   r   r   Útest_observed_groups_with_nan  s    þÿ

ýrõ   c                  C   sp   t dtjtjgdddgd�} tdddgƒ}t| |dœƒ}|jd	d
d�d  d¡}|d jdg }t 	||¡ d S )Nr   rD   rE   rä   rG   rH   rI   )rÂ   ÚserrÂ   Fr:   rö   r   )
r   r   r‚   r   r   r=   r/   ra   rƒ   rŠ   )rÂ   rö   rA   r    rš   r   r   r   Útest_observed_nth*  s    r÷   c                 C   s´   t tjdtjdgdddgd�}tddddgƒ}t||d	œƒ}|jd
| d� ¡  ¡ }| rxtt dgdddgd�dgd	œƒ}n,tt dddgdddgd�dtjtjgd	œƒ}t 	||¡ d S )Nr   rD   rE   rä   rG   rH   rI   r6   )Ús1Ús2rø   r:   )
r   r   r‚   r   r   r=   r(   rÑ   rƒ   r„   )r;   rø   rù   rA   r    rš   r   r   r   Ú#test_dataframe_categorical_with_nan5  s    ÿþÿrú   r;   r|   c           	      C   sÀ   t ddddddgddddg| d�}tddddddgƒ}t||dœƒ}|jd||d�d	  d
¡}t|jjdd�}t|jƒ}|sˆd|| ¡ < t||kƒs¼d| › d|› d|› d|› �}ds¼t	|ƒ‚d S )NrF   r   rD   rº   r   )ÚlabelrÄ   rû   )r;   r|   rÄ   r(   rc   rè   zDLabels and aggregation results not consistently sorted
for (ordered=z, observed=z, sort=z
)
Result:
F)
r   r   r   r=   Ú	aggregater"   ÚarrayÚisnar$   r@   )	r   r;   r|   rû   rÄ   rA   r    ZaggrÚmsgr   r   r   Ú0test_dataframe_categorical_ordered_observed_sortI  s     	
ý
ÿr   c               	   C   sˆ  t jddd�} tjjdddd�}tj|| dd�}ttj dd¡ƒ}|j	|d	d
� 
¡ }|j	t |¡d	d
� 
¡ }| | ¡}t|j|jdd�|_t ||¡ |j	|d	d
�}| ¡ }|j ¡ }| |¡}	| |¡}
|
j	|	d	d
� ¡ }t ||¡ t |j|j¡ t |j d¡|j d¡¡ tjt d¡ d¡| dd�}t|ƒ}t | ¡ j d¡|¡ tddddddddgd ƒ}t | ¡ j d¡|¡ d S )Nz
2014-01-01r6   )Úperiodsr   ry   rz   Trt   Fr:   r   r}   r&   r-   r3   r.   r~   r   r€   r,   rG   )rˆ   Ú
date_ranger   rŒ   r�   r   r   r   rŽ   r=   r-   r�   r   r   r"   rƒ   r„   r�   r‘   r’   r“   r•   r—   r   r”   r–   r   )r    r‘   rB   r˜   r    rš   r¡   r¢   r£   r¤   r¥   r¦   r§   r   r   r   Útest_datetimel  s<    
  ÿ



 
ÿr  c                  C   s(  t j d¡} ddddg}| jdddd	�}tj||d
d�}tt  t  d¡d¡ 	dd¡t
dƒd�}||d< | d¡jddd� ¡ }|t
dƒ j|jdd� ¡ }ttjddddg|d
d�dd�|_t ||¡ |jddd� ¡ }|t
dƒ j|jdd� ¡ }ttjddddg|d
d�dd�|_t ||¡ d S )Ni90  ru   rv   rw   rx   r   r6   rg   rz   Trt   éÿÿÿÿrL   rY   rB   Fr«   r:   rG   rH   rI   rb   )r   rŒ   ZRandomStater�   r   r   r   r”   r   Zreshaper�   rÏ   r=   r4   r‘   r   r"   rƒ   r„   )Úsr    r‘   rB   rA   r    rš   r   r   r   Útest_categorical_index“  s(    & ÿ ÿr  c                  C   sz   t ddddgddddgdd�} ttj dd¡| d	�}| d
dddgd ¡ ¡ }t | 	¡ j
| ¡ t | 	¡ j
j| j¡ d S )Nrx   ru   rw   rv   Tr   rg   r6   rY   rG   rH   rI   rJ   )r   r   r   rŒ   rŽ   r=   r�   rƒ   r•   r–   rZ   Úassert_categorical_equalrU   )rB   rA   r    r   r   r   Ú!test_describe_categorical_columns¬  s    

ýr  c                  C   sÊ   t tdƒddgd tdƒd dœƒ} | d  d	¡| d< | jd
dgdd�d  ¡  ¡ }| ¡ }tddgddd�}t	 
|j|¡ t	 |jj|j¡ |d |d  }tddgtddgd
d�d�}t	 ||¡ d S )Nrf   rS   rT   rJ   ZXYXXYrH   )r   ÚmediumÚartistr	  rá   r
  Fr:   r   ©r   rN   r±   r6   ÚXÚYrb   rO   )r   r®   r�   r‡   r=   r&   Úunstackr�   r   rƒ   r•   rZ   r  rU   r   r   rŠ   )rA   Zgcatr    Zexp_columnsrš   r   r   r   Útest_unstack_categoricalº  s    ÿr  c                  C   s^   t tjtjddddddddg
ƒ} t |  ¡ jd¡}tjt	dd�� |  
|¡ ¡  W 5 Q R X d S )NrG   rH   rI   r6   z$Grouper and axis must be same length©Úmatch)r   r   r‚   rˆ   r‰   ÚdropnarU   ÚpytestÚraisesÚ
ValueErrorr=   r-   )Úseriesrj   r   r   r   Útest_bins_unequal_lenÍ  s     r  r  r˜   ©rS   rT   c                 C   s   | d S r½   r   )r£   r   r   r   r^   Þ  r_   r^   c                 C   sD   |   ttdƒdd�¡}| t¡}t|t| ¡ ƒd�}t ||¡ d S )NZABBArá   rè   rO   )r=   r   r�   rü   r   rò   rƒ   rŠ   )r  r˜   r=   r    rš   r   r   r   Útest_categorical_series×  s    
r  c                     sž  t tdddgdddgƒdddgdddgd	œƒ‰ ˆ jd
dgddd� ¡ } t tddgˆ jjjd�ddgddgd	œd
ddgd�}t | |¡ ‡ fdd„}ˆ jd
|gddd� ¡ } t tddgˆ jjjd�ddgddgd	œd
ddgd�}t | |¡ tdddgd
d�}ˆ jd
|gddd� ¡ } t | |¡ d
dg}t tddgˆ jjjd�ddgddgd	œd
ddgd�}dD ]8}t	t
dƒ|d�ˆ _ˆ j|ddd� ¡ } t | |¡ �q`d S )NrG   rH   rI   rf   é   ée   éf   ég   )rÂ   rS   rT   rÂ   rS   FTrÍ   rä   éÍ   rT   rY   c                    s   ˆ j | df S )NrS   )Úloc)Úr©rA   r   r   r^     r_   ztest_as_index.<locals>.<lambda>r©   r   rD   rb   )Nr  rT   r¹   )r   r   r=   r4   rÂ   r   rƒ   r„   r   r   r�   r"   )r    rš   r   r  Zgroup_columnsrN   r   r!  r   Útest_as_indexí  sP    ýÿýúýúýú	r"  c                  C   s  t dƒ} tdtt dƒ| dd�iƒ}t| | ddd�}tt dƒ| ddd�}t |jdddd	� ¡ j|¡ t |jdddd	� ¡ j|¡ tdtt dƒ| dd�iƒ}t| | ddd�}tt dƒt dƒddd�}t |jdddd	� ¡ j|¡ t |jdddd	� ¡ j|¡ d S )
Nr¹   rS   ÚbaTr   r  ÚbacFr{   )	r�   r   r   r   rƒ   r•   r=   r(   r"   )r   rA   r   Znosort_indexr   r   r   Útest_preserve_categories%  s.     ÿ ÿ ÿ ÿr%  c               	   C   sø   t dddddgdddddgttdƒtd	ƒd
d�ttdƒtd	ƒdd�dœƒ} t ddtjgddtjgttd	ƒtd	ƒd
d�ttd	ƒtd	ƒdd�dœƒ}dD ]^}| j|d
d
d�jdd�}| j|dd
d�jdd� ¡ }|j|j	d�}t
 ||¡ t
 ||¡ q”d S )NrG   rH   rf   é   r©   é   rØ   Zabaabr$  Fr   T)rS   rT   rÙ   rÚ   r¼   g      ð?g      9@rÆ   )rÙ   rÚ   ©ÚbyrÎ   r;   rW   rY   )r   r   r�   r   r‚   r=   r-   rÑ   r   rZ   rƒ   r„   )rA   Zexp_fullÚcolZresult1rŸ   rš   r   r   r   Útest_preserve_categorical_dtypeC  s2    üÿ	

üÿÿÿÿr+  zfunc, valuesr(   Úsecondr+   ÚfourthÚthirdr.   r,   c                 C   s    t ddddgdd�}tddddg|d	œƒ}| d
¡}t|| ƒƒ }tddgt||jd�d	œƒ d
¡}t ||¡ | d
¡d }t|| ƒƒ }|d }t 	||¡ d S )Nr(   r,  r.  r-  Trt   r  éþÿÿÿ)Úpayloadr*  r0  rè   r*  )
r   r   r=   Úgetattrr   ré   rÏ   rƒ   r„   rŠ   )ÚfuncrU   rE   rA   rž   r    rš   Zsgbr   r   r   Útest_preserve_on_ordered_opsd  s    
ÿþr3  c                  C   s’  t tj d¡ƒ} t dddddddddg	¡}tj|dddgdd�}| j|dd� ¡ }| j|dd� ¡ }t	|j
|j|jd	�|_
t ||¡ t ddddddd
d
d
g	¡}tj|dddd
gdd�}| j|dd� ¡ }| j|dd� ¡  |j¡}t	|j
|j|jd	�|_
t ||¡ tdddddddddg	ddddgdd	�}tddddddd
ddg	|dœƒ} | jddd� ¡ }|d j}t dddtjg¡}t ||¡ d S )Nrí   r   rG   rH   Trt   Fr:   r   rI   r   rD   rE   rF   r6   rJ   rK   )r   r   rŒ   rŽ   rý   r   r   r=   r-   r   r"   r   r   rƒ   rŠ   r   r   rU   r‚   Úassert_numpy_array_equal)r˜   r‘   rB   r    r§   r   r   r   Útest_categorical_no_compress€  s>      ÿ  ÿ
ý 
r5  c                  C   sd   t d gd tdddgƒdœƒ} |  d¡ ¡ d }ttg ddgd�tg ddd	�dd
�}t ||¡ d S )NrI   ÚtrainÚtestr  rS   rT   rä   rc   ©ré   rN   rµ   )r   r   r=   r(   r   rƒ   rŠ   ©rA   r    rš   r   r   r   Ú test_groupby_empty_with_category¥  s    ýr:  c                  C   sº   t dtj ddd¡iƒ} dd„ tdddƒD ƒ}t||ƒ}| jdgdd	�} tj| j	tdd
dƒd|d�| d< | j
dgdd�d  ¡ }|t|jdd„ d� }t|j|jjd�|_t ||¡ d S )NÚvaluer   rÞ   ry   c                 S   s   g | ]}|› d |d › �‘qS )z - ió  r   )Ú.0rÔ   r   r   r   Ú
<listcomp>»  s     ztest_sort.<locals>.<listcomp>iô  T)r)  Z	ascendingi)  F)Úrightrs   Zvalue_groupr:   c                 S   s   t |  ¡ d ƒS )Nr   )ÚfloatÚsplitr\   r   r   r   r^   Ä  r_   ztest_sort.<locals>.<lambda>)rÓ   rb   )r   r   rŒ   r�   r®   r   Zsort_valuesrˆ   r‰   r;  r=   r&   Úsortedr"   r   rN   rƒ   rŠ   )rA   rs   Z
cat_labelsÚresr§   r   r   r   Ú	test_sort³  s    
 
  ÿ
rC  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dgdddggdddgd�}t|d |d�|d< |jd| dd� ¡ }| r ddgddgd	d
gddgg}ddddg}n(ddgddgd	d
gddgg}ddddg}t |ddgt|d|d�d�}t ||¡ d S )Nz	(7.5, 10]rf   r}   rg   z(2.5, 5]rJ   rh   z(5, 7.5]r±   ri   r6   rÈ   z(0, 2.5]rG   rÉ   rV   rÊ   r®   ru   rv   rY   rt   Fr{   rM   ©rZ   r"   )r   r   r=   r(   r   rƒ   r„   )r|   r   rA   r    Údata_valuesÚindex_valuesrš   r   r   r   Ú
test_sort2É  s0    ù	öýrG  c                 C   sf  t tdddƒtdddƒtdddƒtdddƒtdddƒtdddƒtdddƒgddddd	ddgdd
dddddgdœdddgd�}t|d |d�|d< | rÞddgddgddgddgg}tdddƒtdddƒtdddƒtdddƒg}nHddgddgddgddgg}tdddƒtdddƒtdddƒtdddƒg}t |ddgt|d|d�d�}|jd| dd� ¡ }t ||¡ d S )NiÛ  rV   rG   rH   rJ   rf   r}   r±   r6   rg   rh   ri   rÈ   rÉ   rÊ   )Údtru   rv   rH  ru   rv   rY   rt   rM   rD  Fr{   )r   r   r   r   r=   r(   rƒ   r„   )r|   r   rA   rE  rF  rš   r    r   r   r   Útest_sort_datetimelikeì  sF    






ù	õò



ü



üýrI  c                  C   s   t tdddgdddgd�dddgdœƒ} tdddgdd	�}| jdd
d�j ¡ }tdddg|dd	�}t ||¡ | jdd
d�jjdd�}tdddg|dd	�}t ||¡ | jdd
d�jjdd�}tddt	j
g|dd	�}t ||¡ | jdd
d�jjdd�}tdt	j
t	j
g|dd	�}t ||¡ d S )Nr   rD   rE   rä   rG   rH   r  rS   rb   Fr:   rI   r   rT   ©Z	min_count)r   r   r   r=   rT   r4   r   rƒ   rŠ   r   r‚   ©rA   Zexpected_idxr    rš   r   r   r   Útest_empty_sum  s     "ÿrL  c                  C   sä   t tdddgdddgd�dddgdœƒ} tdddgdd	�}| jdd
d�j ¡ }tdddg|dd	�}t ||¡ | jdd
d�jjdd�}tdddg|dd	�}t ||¡ | jdd
d�jjdd�}tddt	j
g|dd	�}t ||¡ d S )Nr   rD   rE   rä   rG   rH   r  rS   rb   Fr:   rT   r   rJ  )r   r   r   r=   rT   r1   r   rƒ   rŠ   r   r‚   rK  r   r   r   Útest_empty_prod;  s    "ÿrM  c                  C   s¬   t ttdƒƒtttjdddd�ƒd ƒt d¡dœƒ} |  dd	g¡ ¡ }t	j
td
ddgƒttjdddd�ƒgdd	gd�}t ddddddddtjdg	i|d�}t ||¡ d S )NZ	abcbabcbaz2018-06-01 00Z1TrI   )Úfreqr  rí   )Úkey1Úkey2rU   rO  rP  r   rD   rE   r   rU   r   r6   r}   rJ   r±   rH   rO   )r   r   r�   rˆ   r  r   r   r=   r-   r   r   r‚   rƒ   r„   )rA   r    r£   rš   r   r   r   Ú,test_groupby_multiindex_categorical_datetimeS  s"    
ÿûÿ	þû$rQ  zas_index, expectedrá   rè   r   r]   )r"   r˜   rN   ©r   rD   r]   c                 C   sV   t tdddgdd�dddgdddgdœƒ}|jddg| d	d
�d  ¡ }t ||¡ d S )NrG   rH   rá   rè   rI   rR  r   rD   TrÍ   r]   )r   r   r=   r4   rƒ   rñ   )rÎ   rš   rA   r    r   r   r   Ú,test_groupby_agg_observed_true_single_columnl  s
    $ÿrS  r   c                 C   sZ   t ddddgddddgdd�}t d dddgddddgdd�}|jd| d�}t ||¡ d S )	Nr   rD   rE   rF   Fr   rG   r   )r   Úshiftrƒ   rñ   )r   Úctrš   rB  r   r   r   Ú
test_shift�  s    
 
 ÿ
 
 ÿrV  c                 C   s\   |   ¡ dd… }|d  d¡|d< |d  d¡|d< tddddgƒ|d	< |jd
gdd�}|S )a¥  
    DataFrame with multiple categorical columns and a column of integers.
    Shortened so as not to contain all possible combinations of categories.
    Useful for testing `observed` kwarg functionality on GroupBy objects.

    Parameters
    ----------
    df: DataFrame
        Non-categorical, longer DataFrame from another fixture, used to derive
        this one

    Returns
    -------
    df_cat: DataFrame
    Nr6   rS   rá   rT   rG   rH   rI   r<   r>   rn   )r†   r‡   r   rð   )rA   Údf_catr   r   r   rW  œ  s    rW  Ú	operationr¾   r?   c                 C   s”   t ddddg| d jdd�}t ddddg| d jdd�}t ||g¡}td	d
ddg|dd� ¡ }| jddgdd�d }t||ƒtƒ}t	 
||¡ d S )Nrv   ru   rS   r8  ÚoneÚthreeÚtworT   rH   r6   rG   rI   r<   ©r˜   r"   rN   Tr:   )r   ré   r   r¶   r   r   r=   r1  r4   rƒ   rŠ   )rW  rX  Zlev_aZlev_br"   rš   r¡   r    r   r   r   Ú test_seriesgroupby_observed_trueµ  s    r]  c                 C   s    t jtddgdd�tdddgdd�gdd	gd
� ¡ \}}tddtjdtjdg|dd�}|dkrl|jddd�}| jdd	g|d�d }t	||ƒt
ƒ}t ||¡ d S )Nrv   ru   Frt   rY  rZ  r[  rS   rT   r   rH   r6   rG   rI   r<   r\  r¾   r   Zinfer)Zdowncastr:   )r   r   r   Z	sortlevelr   r   r‚   Zfillnar=   r1  r4   rƒ   rŠ   )rW  r;   rX  r"   Ú_rš   r¡   r    r   r   r   Ú)test_seriesgroupby_observed_false_or_noneÃ  s    þûr_  zobserved, index, datarv   ru   rS   r8  rY  rZ  r[  rT   rt   c                 C   s>   t ||dd�}| jddg|d�d  dd„ ¡}t ||¡ d S )Nr<   r\  rS   rT   r:   c                 S   s   |   ¡ |  ¡ dœS )N©r.   r,   r`  r\   r   r   r   r^     r_   z8test_seriesgroupby_observed_apply_dict.<locals>.<lambda>)r   r=   r?   rƒ   rŠ   )rW  r;   r"   r˜   rš   r    r   r   r   Ú&test_seriesgroupby_observed_apply_dictØ  s
    .ÿra  c                 C   s<   |   ddg¡d  ¡ }|   ddg¡ ¡ d }t ||¡ d S )NrS   rT   r<   )r=   r-   rƒ   rŠ   )rW  rš   r    r   r   r   Ú4test_groupby_categorical_series_dataframe_consistent  s    rb  Úcodec                 C   sr   t ddddgddddgd	d
ddgdœƒ}tj| tdƒd�}|j|dd� ¡ }|jj|dd� ¡ j}t ||¡ d S )NrG   rH   rI   r6   r  r/  éýÿÿÿéüÿÿÿrJ   r±   rV   r}   rê   r¹   rä   rn   r   )	r   r   r   r�   r=   r-   ÚTrƒ   r„   )rc  rA   rÂ   r    rš   r   r   r   Útest_groupby_categorical_axis_1  s
    (rg  c                 C   s\   t tddg|d�ddgdœddgd	�}| ¡ }|jd| d
�jt jdd� ¡ }t ||¡ d S )NZBobZGregrt   rG   rH   )ÚNameÚItemrh  ri  rY   r:   T)Zskipna)	r   r   r†   r=   r¾   r4   rÑ   rƒ   r„   )r;   r   rA   rš   r    r   r   r   Ú$test_groupby_cat_preserves_structure  s    þ ÿÿrj  c               	   C   sL   t ddddgtdƒdœƒ} tjtdd�� |  d¡ dd	„ ¡ W 5 Q R X d S )
Nr   rD   r6   ©r5   rÄ   z'vau'r  r5   c                 S   s&   t | jd d g| jd d gdœƒS )Nr  r5   Zvaurk  )r   ra   )Úrowsr   r   r   r^   4  s    ÿz/test_get_nonexistent_category.<locals>.<lambda>)r   r®   r  r  ÚKeyErrorr=   r?   r!  r   r   r   Útest_get_nonexistent_category/  s
    
ÿrn  c           
      C   sÀ   | dkrt  d¡ | dkr4t jjdd�}|j |¡ tttdƒtdƒd�ttd	ƒd
 tdƒd�dgd dœƒ}t	| |ƒ}|r€dnd}|j
ddg|d�d }t|| ƒ}||Ž }	t|	ƒ|ks¼t‚d S )NÚngroupúngroup is not truly a reductionr'   ú6TODO: implemented SeriesGroupBy.corrwith. See GH 32293©ÚreasonÚAABBZABCDrä   rÁ   rH   çš™™™™™¹?r6   ©Úcat_1Úcat_2r;  r&  rw  rx  r:   r;  )r  ÚskipÚmarkÚxfailÚnodeÚ
add_markerr   r   r�   r   r=   r1  r   r@   )
Úreduction_funcr;   Úrequestrz  rA   r!   Zexpected_lengthÚseries_groupbyr¾   r    r   r   r   Ú0test_series_groupby_on_2_categoricals_unobserved:  s&    
ÿýÿ

r�  c                 C   s,  | dkrt  d¡ | dkr4t jjdd�}|j |¡ tttdƒtdƒd�ttd	ƒd
 tdƒd�dgd dœƒ}t	dƒt	dƒt	dƒt	dƒt	dƒg}t
| |ƒ}|jddgdd�d }t|| ƒ}||Ž }t|  }	|D ].}
|j|
 }t |	¡rðt |¡sÎ||	ksÎt‚qÎ|	dk�r(| dk�r(t |jtj¡�s(t‚d S )Nro  rp  r'   rq  rr  rt  rÀ   rä   rÁ   rH   ru  r6   rv  ZACÚBCÚCAZCBÚCCrw  rx  Fr:   r;  r   r4   )r  ry  rz  r{  r|  r}  r   r   r�   Útupler   r=   r1  Ú-_results_for_groupbys_with_missing_categoriesr  rˆ   rþ   r@   r   Z
issubdtyperé   Úinteger)r~  r  rz  rA   Z
unobservedr!   r€  r¾   r    Zzero_or_nanr£   rÄ   r   r   r   Ú?test_series_groupby_on_2_categoricals_unobserved_zeroes_or_nansW  s0    
ÿýÿ"


"rˆ  c                 C   sœ   | dkrt  d¡ tttdƒtdƒd�ttdƒtdƒd�ddddgd	œƒ}d
dddg}|jddgdd�}t| |ƒ}t|| ƒ|Ž }|D ]}||jks„t	‚q„d S )Nro  ú2ngroup does not return the Categories on the indexrt  rÀ   rä   Ú1111Ú12ru  rv  ©rS   Ú2©rT   r�  ©r<   Ú1©r<   r�  rw  rx  Tr:   )
r  ry  r   r   r�   r=   r   r1  r"   r@   )r~  rA   Úunobserved_catsÚdf_grpr!   rB  rÂ   r   r   r   Ú>test_dataframe_groupby_on_2_categoricals_when_observed_is_true‚  s    

ýÿ
r”  c                 C   sÌ   | dkrt  d¡ tttdƒtdƒd�ttdƒtdƒd�ddddgd	œƒ}d
dddg}|jddg|d�}t| |ƒ}t|| ƒ|Ž }t|  }|t	j
kr®|j|  ¡  ¡  ¡ sÈt‚n|j| |k ¡  ¡ sÈt‚d S )Nro  r‰  rt  rÀ   rä   rŠ  r‹  ru  rv  rŒ  rŽ  r�  r‘  rw  rx  r:   )r  ry  r   r   r�   r=   r   r1  r†  r   r‚   r  Zisnullr$   r@   )r~  r;   rA   r’  r“  r!   rB  rš   r   r   r   Ú?test_dataframe_groupby_on_2_categoricals_when_observed_is_falseœ  s     	

ýÿ

r•  c                  C   sŽ   ddddgddddgdd	dd	gd
œ} t | ƒ}t |d t ddd¡¡}||d< |jddgddd�}|d  d¡}| d¡d }t ||¡ d S )Nrf   r}   r6   rG   rg   rh   ri   rF   rE   rÌ   ru   r   rJ   r®   rw   T)rÎ   r|   r-   )	r   rˆ   r‰   r   rÐ   r=   r¾   rƒ   rŠ   )rF   rA   rÂ   rÕ   r    rš   r   r   r   Ú3test_series_groupby_categorical_aggregation_getitem¾  s    $r–  zfunc, expected_valuesc              	   C   sv   t dddddgdddddgtdddddgƒdœƒ d¡}| d¡ | ¡}t d	|itdddgdd
�d�}t ||¡ d S )Nr   rG   rH   rI   r6   )ÚidrÕ   r;  r—  rÕ   r;  rb   rO   )r   r   rÏ   r=   r¾   r   rƒ   r„   )r2  ró   rA   r    rš   r   r   r   Ú$test_groupby_agg_categorical_columnsÊ  s    ýÿú ÿr˜  c                  C   s†   t dtdddgdddgd�iƒ} t dddgit ddg¡d�}|  dddg¡ tj¡}t 	||¡ |  dddg¡ ¡ }t 	||¡ d S )	NrS   r   rD   rE   rä   rH   rG   rO   )
r   r   r   rý   r=   r¾   r   r0   rƒ   r„   ©rA   rš   r    r   r   r   Útest_groupby_agg_non_numericß  s     rš  r2  c                 C   sl   t dgtdgdd�j ¡ dœƒ}| d¡d }t|| ƒƒ }tdgtdgdd�d|d jd	�}t 	||¡ d S )
NiÍ  rD   rá   rè   r  rS   rT   rb   ©r"   rN   ré   )
r   r   rÂ   Z
as_orderedr=   r1  r   ré   rƒ   rŠ   )r2  rA   Z
df_groupedr    rš   r   r   r   Ú<test_groupby_first_returned_categorical_instead_of_dataframeê  s        ÿrœ  c                  C   s~   t  ddg¡} d| j_tddddgtddddgt| ƒd�dœƒ}td	d
dgit| dd�d�}|jddd� 	¡ }t
 ||¡ d S )NrG   rH   FrI   rJ   rV   rä   rK   r   r¼   g      @rD   rb   rª   ©r|   )r   rý   ÚflagsZ	writeabler   r   r   r   r=   r-   rƒ   r„   )rB   rA   rš   r    r   r   r   Útest_read_only_category_no_sortù  s    $ÿrŸ  c               
   C   sÖ   t ddddddddgddddddddgdœƒ} | d  d¡jjd	dddgd
d�| d< t dddœdddœdddœdddœdœƒ}|jddd�}td	dddgd	dddgd
ddd�|_|  ddg¡ ¡  	¡ }t
 ||¡ d S )NÚsmallÚlarger	  r<   rS   )ru   rv   ru   rá   ÚtinyTrt   r   )rS   r<   rG   rI   rH   )r¢  r   r	  r¡  rv   r"   rn   )r   r   rN   ré   )r   r‡   rÂ   Zset_categoriesZrename_axisr   rZ   r=   r2   r  rƒ   r„   r™  r   r   r   Ú#test_sorted_missing_category_values  sJ    ø
õÿÿ
 þÿüÿ

ûr£  c                  C   s˜   t dddddgiƒ} | d  d¡| d< |  d¡j ¡ }tdddgtdddgdd�d| d jd�}t 	||¡ |  d¡ 
dd	i¡}| ¡ }t ||¡ d S )
NZcol_numrG   rH   rI   rá   Úcol_catrb   r›  r(   )r   r‡   r=   r¤  r(   r   r   ré   rƒ   rŠ   r¾   Úto_framer„   r9  r   r   r   Ú1test_agg_cython_category_not_implemented_fallback2  s    ür¦  c               	   C   s®   t ddddgddddgddtjdgddddgddddgd	œƒ} |  d
di¡} |  ddg¡ dd„ ¡}tjddgddggdd�}t ddgddgddgdœ|d�}t 	||¡ d S )NrG   rH   ru  gš™™™™™É?g333333Ó?ru   rv   Zfee)rS   rT   Únumerical_colÚ
object_colÚcategorical_colr©  rá   rS   rT   c                 S   s   |   ¡  ¡ S r[   )rþ   r4   r!  r   r   r   r^   V  r_   z7test_aggregate_categorical_with_isnan.<locals>.<lambda>r  r   r   )r§  r¨  r©  rª   )
r   r   r‚   r‡   r=   r¾   r   r¶   rƒ   r„   r·   r   r   r   Ú%test_aggregate_categorical_with_isnanH  s&    



ûÿ
ýúrª  c               	   C   sÔ   t ddddddgddddddgdœƒ} tjdddgdd	�}| d
  |¡| d
< |  d¡d
  t¡| d< |  ¡ }t ddddddgddddddgddddddgdœƒ}|d
  |¡|d
< |d  |¡|d< t 	||¡ d S )NrG   rH   rI   ZWaitingZOnTheWayZ	Delivered)Ú
package_idÚstatusTr   r¬  r«  Úlast_status)r«  r¬  r­  )
r   rˆ   ÚCategoricalDtyper‡   r=   r…   r,   r†   rƒ   r„   )rA   Zdelivery_status_typer    rš   r   r   r   Útest_categorical_transformc  sN    úþÿ ÿú	úöÿr¯  )r2  r;   c                 C   sÒ   t ddddgƒ}ddddg}t|||dœƒ}t ddgƒ}tj||gddgd�}tdtjtjdg|dd�tdtjtjdg|dd�d	œ}||  }|r | ¡  tj	¡}|j
ddg|d
�d }	t|	| ƒƒ }
t |
|¡ d S ©Nr   rG   rê   r   rD   r   rE   rb   )r(   r+   r:   )r   r   r   r   r   r   ÚNaNr  r‡   rç   r=   r1  rƒ   rŠ   )r2  r;   rÂ   rÄ   rA   rœ   r£   Úexpected_dictrš   Zsrs_grpr    r   r   r   ÚFtest_series_groupby_first_on_categorical_col_grouped_on_2_categoricals˜  s    þr³  c                 C   sÒ   t ddddgƒ}ddddg}t|||dœƒ}t ddgƒ}tj||gddgd�}tdtjtjdg|dd�tdtjtjdg|dd�d	œ}||   ¡ }|r¤| ¡  	tj
¡}|jddg|d
�}	t|	| ƒƒ }
t |
|¡ d S r°  )r   r   r   r   r   r   r±  r¥  r  r‡   rç   r=   r1  rƒ   r„   )r2  r;   rÂ   rÄ   rA   rœ   r£   r²  rš   r“  r    r   r   r   ÚBtest_df_groupby_first_on_categorical_col_grouped_on_2_categoricals±  s    þr´  c                  C   s¤   t tdddgdddgd�tdƒdœƒ} | jddd	�}|j}tjd
dgdd�tjdgdd�tjg dd�dœ}| ¡ | ¡ ks~t‚| ¡ D ]}t	 
|| || ¡ q†d S )NrD   r   rE   rä   rI   )rÓ   r*  rÓ   Fr�  r   rG   Zintprè   rH   )rD   r   rE   )r   r   r®   r=   Úindicesr   rý   rò   r@   rƒ   r4  )rA   r¡   r    rš   rÓ   r   r   r   Ú2test_groupby_categorical_indices_unused_categoriesÊ  s    þÿýr¶  c                 C   sp   t ddddgiƒ}|d  d¡|d< t| d¡d | ƒƒ }ttdddgƒdtdddgdd�d�}t ||¡ d S )	Nr   rG   rH   rI   rá   rD   rb   )rN   r"   )	r   r‡   r1  r=   r   r   r   rƒ   rŠ   )r2  rA   r    rš   r   r   r   Ú1test_groupby_last_first_preserve_categoricaldtypeÞ  s      ÿr·  c               	   C   sŒ   t ddgddgddgdœƒ} | jdddœd�} | jd	d
gdd� ¡ d }tddgt tddgd	d�tddgd
d�g¡dd�}t 	||¡ d S )NrG   rH   rf   r  rê   rá   rK   rè   r   rD   Tr:   rE   rb   rµ   )
r   r‡   r=   r0   r   r   r¶   r   rƒ   rŠ   r9  r   r   r   Ú)test_groupby_categorical_observed_nuniqueê  s    ÿûr¸  c                  C   sŽ   t jddgdd�} tddgddgddggddgd	� d| i¡}| d¡d  ¡ }tddgtddgdd
�dt jddgdd�d�}t 	||¡ d S )Nr   ÚbigTr   rG   rH   ÚgrpÚdescriptionrY   rb   r›  )
rˆ   r®  r   r‡   r=   r,   r   r   rƒ   rŠ   )ré   rA   r    rš   r   r   r   Ú,test_groupby_categorical_aggregate_functionsù  s     ÿþür¼  c                 C   s°   t ddgdddgd�}tt ddgdddgd�ddgdœƒ}|jd| |d�}| ¡ }| rltd	ddgi|d
�}n,tdddgdddgƒ}td	dddgi|d
�}d|j_t ||¡ d S )NrG   rH   rI   rä   r6   )r]   rQ   r]   )r;   r  rQ   rO   r   )	r   r   r=   r4   r   r"   rN   rƒ   r„   )r;   r  rÂ   rA   r�   r    rš   r"   r   r   r   Útest_groupby_categorical_dropna  s    $r½  Ú
index_kindr®   ÚsingleÚmultic                 C   s|  |dkr0|s0|dkr0d}| j  tjj|d�¡ n@|dkrX|sXd}| j  tjj|d�¡ n|dkrp|sptjdd� ttd	d
d	dgd
ddd	g|d�tdƒdœƒ}|dkr¬dg}	n@|dkrÆdg}	| 	|	¡}n&|dkrìddg}	|d |d< | 	|	¡}t
||ƒ}
|j|	|||d�}t||ƒ|
Ž }|�r,|j d¡j}n|d jj}td
ddd	gƒ}t ||¡ |dk�rx|j d¡j}t ||¡ d S )N)r)   r*   rÀ  z1GH#10694 - idxmax/min fail with unused categoriesrr  r'   zDGH#49950 - corrwith with as_index=False may not have grouping columnr®   ú/Result doesn't have categories, nothing to testrH   rG   rI   r6   r   rK   r   r¿  rî   ©rÎ   r|   r;   )r|  r}  r  rz  r{  ry  r   r   r®   rÏ   r   r=   r1  r"   r—   r   rÂ   r   rƒ   r•   )r  rÎ   r|   r;   r~  r¾  r   rÿ   rA   rò   r!   r�   Ú	op_resultr    rš   r   r   r   Útest_category_order_reducer  sL    ÿþýþÿ


rÄ  c                 C   sæ   t tddddgddddg|d�tdƒdœƒ}|dkrFdg}| |¡}n&|d	krldd
g}|d |d
< | |¡}t||ƒ}|j|| ||d�}	t|	|ƒ|Ž }
|
j d¡j	}t
ddddgƒ}t ||¡ |d	krâ|
j d
¡j	}t ||¡ d S )NrH   rG   rI   r6   r   rK   r¿  r   rÀ  rî   rÂ  )r   r   r®   rÏ   r   r=   r1  r"   r—   r   r   rƒ   r•   )rÎ   r|   r;   Ztransformation_funcr¾  r   rA   rò   r!   r�   rÃ  r    rš   r   r   r   Útest_category_order_transformerL  s*    þÿ

rÅ  ÚmethodÚheadÚtailc                 C   s   t tddddgddddg|d�tdƒdœƒ}|dkr<dg}n@|d	krVdg}| |¡}n&|d
kr|ddg}|d |d< | |¡}|j|| ||d�}t||ƒƒ }	|dkr°|	d jj}
n|	j 	d¡j}
t
ddddgƒ}t |
|¡ |d
krü|	j 	d¡j}
t |
|¡ d S )NrH   rG   rI   r6   r   rK   r®   r   r¿  rÀ  rî   rÂ  )r   r   r®   rÏ   r=   r1  rÂ   r   r"   r—   r   rƒ   r•   ©rÎ   r|   r;   rÆ  r¾  r   rA   rò   r�   rÃ  r    rš   r   r   r   Útest_category_order_head_tailk  s0    þÿ
rÊ  r…   c                 C   s:  |dkr|dks| s&|dkr&t  d¡ ttddddgddddg|d�tdƒd	œƒ}|dkrbd
g}n@|dkr|d
g}| |¡}n&|dkr¢d
dg}|d
 |d< | |¡}|j|| ||d�}t||ƒdd„ ƒ}	|dksÒ| sè|dkrè|	d
 jj	}
n|	j
 d
¡j	}
tddddgƒ}t |
|¡ |dk�r6|	j
 d¡j	}
t |
|¡ d S )Nr…   r®   z(No categories in result, nothing to testrH   rG   rI   r6   r   rK   r   r¿  rÀ  rî   rÂ  c                 S   s   | j dd�S )NTrW   )r4   r\   r   r   r   r^   ¨  r_   z+test_category_order_apply.<locals>.<lambda>)r  ry  r   r   r®   rÏ   r=   r1  rÂ   r   r"   r—   r   rƒ   r•   rÉ  r   r   r   Útest_category_order_apply�  s<    ÿÿ
þÿ

rË  c                 C   sd  |dkr| st jdd� t ddd¡}tddddg||d	�}t|td
ƒdœƒ}|dkr^dg}n@|dkrxdg}| |¡}n&|dkržddg}|d |d< | |¡}|j|| |dd�}| 	¡ }	|rÆdddgndddg}
t
|
|j|dd�}| �rtd|
iƒ}|dk�rt t||dœƒ¡|_n||_n6|dk�rBtt|ƒt|ƒ|
dœƒ}ntt|ƒ|
dœƒ}t |	|¡ d S )Nr®   rÁ  rr  i'  r  rH   rG   rI   r   r6   rK   r   r¿  rÀ  rî   TrÂ  )r   r   rN   rD   )r   rî   )r   rî   rD   )r  ry  r   r   r   r   r®   rÏ   r=   r4   r   r   r   Z
from_framer"   r   rƒ   r„   )rÎ   r|   r¾  r   r   ZgrouperrA   rò   r�   r    r˜   r"   rš   r   r   r   Útest_many_categoriesµ  s@    
   ÿ

rÌ  rò   Úa1c                 C   sˆ  |r&|dkr&t tdƒrt‚t d¡ n^|dkrJd}| j tjj|d�¡ n:|dkr„|s„t	|ƒdkr„|s„|s„d}| j tjj|d�¡ t
dddgd	d
d
gdddgdœƒ}| dddœ¡}d|krÊ|jdd�}|j|||d�}|ræ|d }t||ƒ}	|j|gf|	žŽ }
t||ƒ|	Ž }|�r0|�s&|dk�r0| |¡}|�sf|�sF| |¡}tdg|ggdgdggd�|_n|�sx||g |_t |
|¡ d S )Nr'   z*corrwith not implemented for SeriesGroupByz1GH#32293: attempts to call SeriesGroupBy.corrwithrr  r0   rG   zGH#52848 - raises a ValueErrorr   rH   rI   r6   rJ   r±   )rÍ  rî   rD   rá   )rÍ  rî   rî   rY   r(  rD   r2   )r    r‘   )Úhasattrr
   r@   r  ry  r|  r}  rz  r{  r   r   r‡   rð   r=   r   r¾   r1  r¥  rÏ   r   rZ   rƒ   rñ   )r  rÎ   r;   r~  rï   rò   rÿ   rA   r�   r!   r    rš   r   r   r   Útest_agg_listÝ  sP    ÿþ
ýüû"



 
ÿ
rÏ  )hr   Únumpyr   r  Zpandasrˆ   r   r   r   r   r   r   r	   Zpandas._testingZ_testingrƒ   Zpandas.core.groupby.genericr
   Zpandas.tests.groupbyr   r±  r#   r†  rC   r¨   r°   r¸   rz  Zparametrizer¿   rÖ   rÜ   rã   rì   rô   rõ   r÷   rú   r   r  r  r  r  r  r®   Úrenamer  r"  r%  r+  r3  r5  r:  rC  rG  rI  rL  rM  rQ  r¶   rS  r‚   ZNaTrV  ZfixturerW  r]  r_  r   ra  rb  rg  rj  rn  r�  rˆ  r”  r•  r–  r0   r&   r˜  rš  rœ  rŸ  r£  r¦  rª  r¯  râ   Úboolr³  r´  r¶  r·  r¸  r¼  r½  rÄ  rÅ  rÊ  rË  rÌ  rÏ  r   r   r   r   Ú<module>   sÈ  $	ä  
nýþýùþ" '
$ùþ

8!



üþ	
%
"
2 ÿûþýÿþõþ



ýùÿó
ýú"ö
ýú"öäþ,
	
	+
!þ

-5 ÿ ÿ
.!#
'