o
    Ti                    @   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i dejd	ejd
d dejdejdejdejdejdejdejdejdejdejdd dejdejd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/d0g d1eg d2d0d3fd0d4gg d5eg d2d0d3e	g d6gfd0d7gg d8eg d2d0d3eg d2d0d3gfgejd9d#d$gd:d; Z"d<d= Z#d>d? Z$d@dA Z%ejd"d#d$gejdBd#d$gejdCd#d$gdDdE Z&dFdG Z'dHdI Z(dJdK Z)dLdM Z*dNdO Z+ejdPdQgee,dRd dSgdTdUgdVfee,dR-dWdX dUgd dTgdVfee,dYd dSgdTdUgdVfgdZd[ Z.d\d] Z/d^d_ Z0d`da Z1ejdbddcdgfddddegfddddgfddcdegfgdfdg Z2dhdi Z3djdk Z4dldm Z5ejd"d#d$gdndo Z6ejd"d#d$gdpdq Z7drds Z8dtdu Z9dvdw Z:ejdxd#ee
j;eg dydzd{g d|gd0d4gd}g d2d~dfd$eeg dydzd{g d|g d2dfgdd Z<ejddejej=gdd Z>ej?dd Z@ejdddgdd ZAejdddgejdBd$dgdd ZBejdd#e
;e	dgdR dgdR  dzdde	g ddzdde	ddgdR gg dfd$e
jCeddgd$deg dd$de	ddggg dd}dUdUdRdRejejdTdTejejdSdSgfde
jCeddgd$deg dd$de	ddggg dd}dUdUdRdRejejdTdTejejdSdSgfgdd ZDdd ZEejdg dg dgdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKejdBd$dgdd ZLdd ZMejdejNg dyfejOg d|fgdd ZPdd ZQejdddgdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWejdddgdeXdBeYfddĄZZejdddgdeXdBeYfddƄZ[ddȄ Z\ejdddgddʄ Z]dd̄ Z^dd΄ Z_ddЄ Z`ejdg dҢejd"d#d$gddԄ Zaejdddgejd"d#d$gdd؄ Zbejdg dҢejdddgejd"d#d$gdd݄ Zcejdg dҢejdg dޢejd"d#d$gdd Zdejdg dҢdd Zeejdd0d4d0d4ggejdd0d4d0d4ggdd Zfejd9d#d$gejddgdd7ggdd 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r| j}tjtt||| jd} | S )N
categoriesordered)	
isinstancer   r   r   
from_codesnparangelenr   )ar    r   e/var/www/html/evchargy.com/venv/lib/python3.10/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J 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   )dfcatsr9   r    r   r   r   test_apply_use_categorical_nameF   s   rB   c                  C   s  t g dg ddd} tg d| d}ttdddd	}td
dddtjgi|d}|jddd }t	|| t g dg ddd}t g dg ddd}t||g dd}|jddd}tg dddd	}	tdt
g d|	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
g d'i}tj|jg d(d)}d*}tjt|d+ |jj|ddt}W d    n	1 sw   Y  t||d
  t|jj|ddd,d! |d
  d-}tjt|d+ |j|ddt}W d    n	1 s^w   Y  |d
g }t	|| |j|dd}|d.d! }t	||d
g  |d/d! }d0}tjt|d+ |t}W d    n	1 sw   Y  |tjj}|d1d! }tj	||d
g dd2 tj	||d
g dd2 t	||d
g  t	||d
g  t|jj|ddtj|d
  t	|j|ddtj| td
g d3i}tj|jg d4d)}d*}tjt|d+ |jj|ddt}W d    n	1 s4w   Y  t||d
  t|jj|ddd5d! |d
  d-}tjt|d+ |j|ddt}W d    n	1 ssw   Y  |d
g }t	|| t	|j|ddd6d! |d
g  td
g d7i}tj|jg d8t tdd9}|j|ddt }t|j!j"|j!j#d:}t
g d7|d}d
|j_$t|| g d;}tj%&dj'd"dd<d=}t j(||dd:} ttj%&d)d>}|j| dd }|jt*| dd }t|| j"dd}	|+|	}t	|| |j| dd}|, }| j-. }t*| /|}|/|}t |dg d;d?}|j|ddd@, }t	|| t j(t0d1dA|dd:}t|}t2|j3ddBj4d"| tg dCd }t2|j3ddBj4d| d S )DN	r   r   r   brD   rD   crE   rE   r   rD   rE   dTr   	   rI   rI      rJ   rJ      r6      r   rD   abcdrD   namer   r   rI   rJ   r6   r"   Fr:   r   r   rD   rD   r   rD   zrE   rG   rE   rG   rE   rG   yrI   rJ   rK   r6   ABvaluesrZ   r\   )rK      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>r   c                 S   s   |  djd S )Nr_   r   )drop_duplicatesilocrc   r   r   r   r   |   s   ztest_basic.<locals>.frP   object)rL         )r   
         (   )binsusing SeriesGroupBy.summatchc                 S   
   t | S rb   r   r4   Zxsr   r   r   re         
 zusing DataFrameGroupBy.sumc                 S      t j| ddS Nr   axisr   r,   rw   r   r   r   re          c                 S   ry   rz   r}   rw   r   r   r   re      r~   zusing DataFrameGroupBy.maxc                 S   s   t j| S rb   )r   maximumreducerw   r   r   r   re          )Zcheck_dtype)rL   rk   rl   )ir   rm   rn   ro   rp   c                 S   ru   rb   rv   rw   r   r   r   re      rx   c                 S   ru   rb   rv   rw   r   r   r   re      rx   )rI   r   r   r   r   rI   rJ   rK   r6   )labelsr   foobarbazquxd   r2   r   r6   )r   r   sortr;      Zfuture_stackr&   r-   r3   r.   z25%z50%z75%r,   )5r   r   r   listr   nanr=   r-   tmassert_frame_equalr   r4   r_   	transformrg   rh   r?   copyr   r"   astypepdcutr   assert_produces_warningFutureWarningassert_series_equalr,   r   r   filterr$   r   r\   r   r   rP   randomdefault_rngintegersr   standard_normalasarrayr   describecodesargsorttaker   repeatassert_index_equalstackget_level_values)rA   data	exp_indexexpectedr    cat1cat2r@   gbZexp_idxrd   gr   rE   msgZ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 )NrJ      r   rD   rm   r   rL   rI   ZIndex1ZIndex2)r   r   r   r   r"   levelr;      )
r   r   r   r   r   ranger=   	get_groupr   r   )r;   r@   r   r   r    r   r   r   test_level_get_group   s&   
r   c                  C   s   t dgd dgd  g dd tdd} t| jg dd	d
| _| dd  }|jdd	d}g d}t|g dd	d
}g dt|g}t	j
|ddgd}tdgd |dd}t|| d S )NrZ      r[   )highmedlowr6   g      (@)r8   doseZoutcomes)r   r   r   Tr   r8   r   r   )r   Zsort_remaining)r   r   r   r   r   r   )rZ   rZ   rZ   r[   r[   r[   r   rJ   r&   r"   rP   )r   r   r   r   r   r=   Zvalue_countsr   r   r   from_arraysr   r   r   r@   r    r"   r   r   r   r   (test_sorting_with_different_categoricals  s   
r   r   TFc           
      C   s8  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g d|dgd}|	dd }t
|| | }t
|| d}	t
jt|	d |tj}W d    n1 sqw   Y  t
|| tj||gdd	gd}td|d}|	dd }t
|| d S )Nabcr   Zaaar   rD   r   )missingdenser\   r   r   Tr:   r   )r   rI          @r\   )r"   ra   c                 S   ry   rz   )r   r-   rc   r   r   r   re   :  r~   ztest_apply.<locals>.<lambda>zusing DataFrameGroupBy.meanrs   rI   rQ   c                 S   s   dS NrI   r   rc   r   r   r   re   I  rf   )r   r   r   r   r   r   r=   r   r   r?   r   r   r-   r   r   aggr   r   )
r   r   r   r\   r@   r   r   r   r    r   r   r   r   
test_apply*  s(   r   c                 C   s@  t g dg ddd}t g dg ddd}t||g dd}d	d
gd |d< |jg d| d}tj||d	d
gd gg dd}tdtg d|di }| }| sdt|||d	d
ggt	ddd}t
|| |jddg| d}tj||gddgd}tg dg dd|d}| }| st|||gt	ddd}t
|| t g dg dddg dg dd}t|}|jd| d}	|	 }tt	d dt	d!dd"}td#d#gd$d%gd&|d}| stt	d!dt	d!dd"}
||
}t
|| |jdd'g| d}|d(}tg d)t g dg dddg d*d+dd'g}| s0t||jjd,dggdd'g}t
|| d-D ]}|\}}||}||j|k|j|k@  }t
|| q8g d.g d/g d0d1}t|}t|d	 tdd2d3}||d4< |jd4d5gd6| d7}|d(}|jd4d5gd| d7}|d( }t
|| d S )8NrR   rS   Tr   rU   rV   rX   rY   r   r   rJ   r<   )rZ   r[   r<   r:   r   r\   rQ   ABCr   r   rZ   r[   )r   r   r   r   )r\   r<   AB)r   rD   r   rD   r   rD   rE   rI   rI   rJ   rJ   rm   rn   ro   rp   )catintsvalr   abr   )rP   r   r   g      ?      4@ro   )r   r   r   r-   )      $@g      >@r   g      D@rI   rJ   rI   rJ   )r   r   r   rI   ))r   rI   )rD   rJ   )rD   rI   )r   rJ   )rm   r   r6   r   r6   rI   rI   rm   rn   ro   rp   2   <   F   )rG   rE   er   r   rG   rE   r   r   r   rm   rK   r   r   Fas_indexr;   )r   r   r=   r   r   r   r   r4   r#   r   r   r   r-   r   r   r   	set_indexr   r\   r   r   r   r   r   linspacereset_index)r;   r   r   r@   r   r   r   r    rG   Zgroups_single_keyr"   groups_double_keykeyrE   ir   groupsZgroups2r   r   r   test_observedM  s   


	

r   c                 C   s   g dg dg dd}t |}t|d g d}d|_|j|dg| d	}tj|g dgddgd
}t g dg dd|d}| sOt||jg dgddg}|	d}t
|| d S )N)rK   rK   r6   rL   rX   )rm   r      "   )C1C2C3r   )rI   rJ   rK   r   r   r   r:   r   )      @r   g      @g      @)r   g      Y@g      i@g      A@)r   r   rQ   r-   )r   r   r   rP   r=   r   r   r#   r\   r   r   r   )r;   rG   r@   r\   r   r   r   r    r   r   r   test_observed_codes_remap  s   
r   c                  C   s   t tjdjddddtjdjddddtjdjdddddd} | jtd| d	< | jg d
dd}|	 }|j
jd  | j ksNJ |j
jd  | j ks]J |j
jd  | j kslJ d S )NrJ   r      i0u  r   '  )r   int_idother_idr   categoryr   )r   r   r   Tr:   rI   )r   r   r   r   r   r   r   strr=   r&   r"   r   r0   r   r   )r@   r   r    r   r   r   test_observed_perf  s   "r   c                 C   s   t g dg dd}t|g dd}|jd| d}|j}| r0t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 )N)r   rE   r   r   r   rI   rJ   rK   r   valsr   r:   r   rJ   int64dtyperI   )r   rE   )r   r   r=   r   r   r   assert_dict_equal)r;   r   r@   r   r    r   r   r   r   test_observed_groups  s   "
r	  z,keys, expected_values, expected_index_levelsr   )rk   	   r   r  ri   rD   )	r]   r   r   r   r   r
  r   r   r   r6   rL   r   a2)	rk   r   r   r   r
  r   r   r   r   test_seriesc           
      C   s   t tg dg ddtg dg ddg dg ddddg}d	| vr,|jd	d
}|j| dd}|r9|d }| }t| dkrF|}ng ddg d g}t||| d}t d|i|d}	|re|	d }	t	||	 d S )NrI   rI   rJ   r  r  r  )r]   r   r
  )r   r  rD   rE   r   r  rD   r`   Fr:   rE   rI   	r   r   r   rI   rI   rI   rJ   rJ   rJ   rK   r   rI   rJ   )r   r   rQ   )
r   r   r   dropr=   r4   r   r   r   assert_equal)
keysexpected_valuesZexpected_index_levelsr  r@   r   r    r"   r   r   r   r   r   test_unobserved_in_index  s6   
r  c                 C   s   t tdtjdgg ddg dd}|jd| d}|j}| r*d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   )r   rD   rG   r  r  r  r   r:   r   rJ   r  r  )	r   r   r   r   r=   r   r   r   r  )r;   r@   r   r    r   r   r   r   test_observed_groups_with_nan/  s   

r  c                  C   sl   t dtjtjgg dd} tg d}t| |d}|jdddd	 d
}|d	 jd
g }t	|| d S )Nr   r   r  r  )r   serr   Fr:   r  r   )
r   r   r   r   r   r=   r/   rh   r   r   )r   r  r@   r    r   r   r   r   test_observed_nthD  s   r  c                 C   s   t tjdtjdgg dd}tg d}t||d}|jd| d  }| r8tt dgg dddgd}ntt g dg dddtjtjgd}t	|| d S )	Nr   r   r  rX   )s1s2r  r:   rJ   )
r   r   r   r   r   r=   r(   r   r   r   )r;   r  r  r@   r    r   r   r   r   #test_dataframe_categorical_with_nanO  s   r  r;   r   c           	      C   s   t g dg d| d}tg d}t||d}|jd||dd d}t|jjd	d
}t|j}|s:d|| < t||ksRd|  d| d| d| }J |d S )N)rG   r   rD   r   rG   rD   )r   rD   r   rG   r   )labelr   r  )r;   r   r   r(   rj   r  r   zDLabels and aggregation results not consistently sorted
for (ordered=z, observed=z, sort=z
)
Result:
)	r   r   r   r=   	aggregater"   arrayisnar$   )	r   r;   r   r  r   r@   r    Zaggrr   r   r   r   0test_dataframe_categorical_ordered_observed_sortc  s2   	
r   c                  C   s  t jddd} tjd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djd| tg dd }t|jddjd| d S )Nz
2014-01-01r6   )periodsrJ   r   r   r   Tr   r   Fr:   r   r   r   r   rI   )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   r   rA   r   r    r   r   r   r   r   r   r   r   r   r   r   test_datetime  s>   




r#  c                  C   s  t jd} g d}| 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g d|dddd|_t|| |jddd }|t
d
 j|jdd }ttjg d|dddd|_t|| d S )NrJ   r   r   r6   rn   r   Tr   rN   r`   rA   Fr   r:   r   rI   rJ   rK   ri   )r   r   r   r   r   r   r   r   r   Zreshaper   r   r=   r4   r   r   r"   r   r   )sr   r   rA   r@   r    r   r   r   r   test_categorical_index  s$   &r'  c                  C   sz   t g dg ddd} ttjdd| d}|g dd	  }t	|j
dd
j|  t|j
dd
jj| j d S )N)r   r   r   r   r   Tr   rJ   )rn   r6   r`   rX   rL   r   )r   r   r   r   r   r   r=   r   r   r   r   ra   assert_categorical_equalr\   )rA   r@   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 )Nrm   rZ   r[   rL   ZXYXXYrJ   )r   mediumartistr*  r   r+  Fr:   r   r   rP   r   r6   XYri   rQ   )r   r   r   r   r=   r&   unstackr   r   r   r   ra   r(  r\   r   r   r   )r@   Zgcatr    Zexp_columnsr   r   r   r   test_unstack_categorical  s   r0  c                  C   st   t tjtjddddddddg
} t|  jd}tjt	dd | 
|  W d    d S 1 s3w   Y  d S )NrI   rJ   rK   r6   z$Grouper and axis must be same lengthrs   )r   r   r   r   r   dropnar\   pytestraises
ValueErrorr=   r-   )seriesrq   r   r   r   test_bins_unequal_len  s
    "r6  r5  r   r6   rK   rI   rJ   rZ   r[   c                 C   s   | d S r   r   )r   r   r   r   re     s    re   r]   c                 C   sH   | j ttddddd}|t}t|t| d}t|| d S )NZABBAr   r  Fr:   rQ   )r=   r   r   r  r   r  r   r   )r5  r   r=   r    r   r   r   r   test_categorical_series  s   
r8  c                     s  t tg dg dg dg dd  jddgdd	d
 } t tddg jjjdddgddgdg dd}t| |  fdd}d}tjt	|d  jd|gdd	d
 } W d    n1 sdw   Y  t tddg jjjdddgddgdg dd}t| | t
g ddd}d}tjt	|d  jd|gdd	d
 } W d    n1 sw   Y  t| | ddg}t tddg jjjdddgddgdg dd}dD ]}ttd|d _ j|dd	d
 } t| | qd S )NrI   rJ   rJ   r  )rm      r:  )e   f   g   )r   rZ   r[   r   rZ   FTr   rI   rJ   r  rm   r:  r;     r`   c                    s    j | df S )NrZ   )loc)rr@   r   r   re   "  r~   ztest_as_index.<locals>.<lambda>z*A grouping .* was excluded from the resultrs   r   )r   rD   rD   ri   )Nr-  r[   r   )r   r   r=   r4   r   r   r   r   r   r   r   r   r   r"   )r    r   r   r   r&  Zgroup_columnsrP   r   rA  r   test_as_index  s^   	rB  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   rZ   baTr   r,  bacFr   )	r   r   r   r   r   r   r=   r(   r"   )r   r@   r   Znosort_indexr   r   r   test_preserve_categoriesI  s&   rE  c               	   C   s   t g dg d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
|| qDd S )N)rI   rJ   rI   rI   rJ   )rm      r      r   ZabaabrD  Fr   T)rZ   r[   r   r   r   g      ?g      9@r   )r   r   byr   r;   r^   r`   )r   r   r   r   r   r=   r-   r   r   ra   r   r   )r@   Zexp_fullcolZresult1r   r   r   r   r   test_preserve_categorical_dtypeg  s6   	

rK  zfunc, valuessecondfourththirdc                 C   s   t g ddd}tg d|d}|d}t||  }tddgt||jd	dd}t|| |dd
 }t||  }|d
 }t	|| d S )N)r(   rL  rN  rM  Tr   )r$  r$  rO  )payloadrJ  rP  rO  r$  r  rJ  )
r   r   r=   getattrr   r  r   r   r   r   )funcr\   rE   r@   r   r    r   Zsgbr   r   r   test_preserve_on_ordered_ops  s   
rS  c                  C   sV  t tjdd} tg d}tj|g ddd}| j|dd	 }| j|dd	 }t
|j|j|jd	|_t|| tg d
}tj|g ddd}| j|dd	 }| j|dd	 |j}t
|j|j|jd	|_t|| tg dg ddd	}tg d|d} | jddd	 }|d j}tdddtjg}t|| d S )NrJ   r
  r  r  Tr   Fr:   r   )	r   r   r   rI   rI   rI   rK   rK   rK   r%  rC   rF   rH   rM   rD   r   rI   r6   )r   r   r   r   r   r  r   r   r=   r-   r   r"   r   r   r   r   r   r   r\   r   assert_numpy_array_equal)r   r   rA   r    r   r   r   r   test_categorical_no_compress  s6   
rU  c                  C   sb   t d gd tg dd} | d d }ttg ddgdtg d	dd
dd}t|| d S )NrK   )trainrV  testr7  rZ   r[   rW  rV  r  rj   r  rP   r   )r   r   r=   r(   r   r   r   r@   r    r   r   r   r    test_groupby_empty_with_category  s   rZ  c                  C   s   t dtjd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valuerJ   r   r   r   c                 S   s   g | ]}| d |d  qS )z - i  r   ).0r   r   r   r   
<listcomp>  s    ztest_sort.<locals>.<listcomp>i  T)rI  Z	ascendingi)  F)rightr   Zvalue_groupr:   c                 S   s   t |  d S )Nr   )floatsplitrc   r   r   r   re     s    ztest_sort.<locals>.<lambda>)r   ri   )r   r   r   r   r   r   r   Zsort_valuesr   r   r[  r=   r&   sortedr"   r   rP   r   r   )r@   r   Z
cat_labelsresr   r   r   r   	test_sort  s   

rc  c              	   C   s   t g dg dg dg dg dg dg dgg dd	}t|d
 |d|d
< |jd
| dd }| rFddgddgddgddgg}g d}nddgddgddgddgg}g d}t |ddgt|d
|dd}t|| d S )N)	(7.5, 10]rm   rm   )rd  r   rn   )(2.5, 5]rL   ro   )(5, 7.5]r   rp   )re  r6   r   )(0, 2.5]rI   r   )rf  r]   r   )r   r   r   r`   r   r   Fr   rI   r   rL   ro   r   rp   rm   )rg  re  rf  rd  )rd  re  rf  rg  r   r   rO   ra   r"   )r   r   r=   r(   r   r   r   )r   r   r@   r    data_valuesindex_valuesr   r   r   r   
test_sort2  s0   	
rk  c                 C   sP  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g dg ddg dd	}t|d
 |d|d
< | rdd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}n$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}t |ddgt|d
|dd}|jd
| dd }t|| d S )Ni  r]   rI   rJ   rL   )rm   r   rL   r   r6   rI   r]   r   )dtr   r   r`   rl  r   r   ro   r   rp   rm   r   r   rO   rh  Fr   )r   r   r   r   r=   r(   r   r   )r   r   r@   ri  rj  r   r    r   r   r   test_sort_datetimelike  sF   






	







rm  c                  C   s  t tg dg ddg dd} tg ddd}| jddd	j }tg d
|dd}t|| | jddd	jjdd}tg d
|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 )Nr   r   rD   r   r  rI   rJ   rI   r7  rZ   ri   Fr:   )rK   rI   r   r[   r   Z	min_countrI   rK   rJ   )r   r   r   r=   r[   r4   r   r   r   r   r   r@   Zexpected_idxr    r   r   r   r   test_empty_sumC  s    rr  c                  C   s   t tg dg ddg dd} tg ddd}| jddd	j }tg d
|dd}t|| | jddd	jjdd}tg d
|dd}t|| | jddd	jjdd}tddt	j
g|dd}t|| d S )Nrn  r   r  ro  r7  rZ   ri   Fr:   )rJ   rI   rI   r[   r   rp  rI   rJ   )r   r   r   r=   r[   r1   r   r   r   r   r   rq  r   r   r   test_empty_prod_  s   rs  c                  C   s   t ttdtttjddddd tdd} | jdd	gd
d }t	j
tg d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1TrK   )freqr!  r
  )key1key2r\   ru  rv  Fr:   r   r   r\   r   r6   r   rL   r   rJ   rQ   )r   r   r   r   r"  r   r   r=   r-   r   r   r   r   r   )r@   r    r   r   r   r   r   ,test_groupby_multiindex_categorical_datetimew  s"   
	
$rw  zas_index, expectedr  r   r  r9  r   rd   )r"   r   rP   r   rD   rd   c                 C   sP   t tg dddg dg dd}|jddg| d	d
d  }t|| d S )Nr  r   r  r9  r  rx  r   rD   Tr   rd   )r   r   r=   r4   r   r  )r   r   r@   r    r   r   r   ,test_groupby_agg_observed_true_single_column  s
   ry  r   c                 C   sJ   t g dg ddd}t g dg ddd}|jd| d}t|| d S )NrF   Fr   )Nr   rD   rE   rI   r   )r   shiftr   r  )r   ctr   rb  r   r   r   
test_shift  s   r|  c                 C   sX   |   dd }|d d|d< |d d|d< tg d|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   rZ   r   r[   rX   r<   r>   rI   r{   )r   r   r   r  )r@   df_catr   r   r   r}    s   r}  	operationr   r?   c           	      C   s   t g d| d jdd}t g d| d jdd}t||g}tg d|dd }| jddgd	d
d }|dkr;dnd}tjt	|d t
||t}W d    n1 sVw   Y  t|| d S )N)r   r   r   r   rZ   rX  )onethreer  twor[   )rJ   r6   rI   rK   r<   r   r"   rP   Tr:   r?   using np.sumrr   rs   )r   r  r   r   r   r   r=   r   r   r   rQ  r4   r   )	r}  r~  Zlev_aZlev_br"   r   r   r   r    r   r   r    test_seriesgroupby_observed_true  s   r  c           	      C   s  t jtddgddtg dddgddgd \}}td	d
tjdtjdg|dd}|dkrNd}tjt	|d |j
ddd}W d    n1 sIw   Y  | jddg|dd }|dkr_dnd}tjt	|d t||t}W d    n1 szw   Y  t|| d S )Nr   r   Fr   r  r  r  rZ   r[   r   rJ   r6   rI   rK   r<   r  r   z.The 'downcast' keyword in fillna is deprecatedrs   r   Zinfer)Zdowncastr:   rr   r  )r   r   r   Z	sortlevelr   r   r   r   r   r   Zfillnar=   rQ  r4   r   )	r}  r;   r~  r"   _r   r   r   r    r   r   r   )test_seriesgroupby_observed_false_or_none  s(   r  zobserved, index, datar   r   rZ   rX  )r  r  r  r  r  r  r  r  r[   )rJ   rJ   r6   r6   rI   rI   rK   rK   r   r  )rZ   r[   Nc                 C   s>   t ||dd}| jddg|dd dd }t|| d S )Nr<   r  rZ   r[   r:   c                 S   s   |   |  dS )Nr.   r,   r  rc   r   r   r   re   4  s    z8test_seriesgroupby_observed_apply_dict.<locals>.<lambda>)r   r=   r?   r   r   )r}  r;   r"   r   r   r    r   r   r   &test_seriesgroupby_observed_apply_dict  s
   .r  c                 C   sD   | j ddgddd  }| j ddgdd d }t|| d S )NrZ   r[   Fr:   r<   )r=   r-   r   r   )r}  r   r    r   r   r   4test_groupby_categorical_series_dataframe_consistent9  s   r  code)rI   r   r   )r   r   r   c                 C   s   t g dg dg dd}tj| tdd}d}tjt|d |j|d	d
d}W d    n1 s3w   Y  | }d}tjt|d |j	j|dd
d}W d    n1 sYw   Y  | j	}t
|| d S )NrX   )r$  rO  )rL   r   r]   r   r   r   r  z+DataFrame.groupby with axis=1 is deprecatedrs   rI   F)r|   r;   z5The 'axis' keyword in DataFrame.groupby is deprecatedr   )r   r   r   r   r   r   r   r=   r-   Tr   )r  r@   r   r   r   r    Zgb2r   r   r   r   test_groupby_categorical_axis_1@  s   
r  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Gregr   rI   rJ   )NameItemr  r  r`   r:   T)Zskipna)	r   r   r   r=   r   r4   r   r   r   )r;   r   r@   r   r    r   r   r   $test_groupby_cat_preserves_structureP  s   r  c                  C   s^   t g dtdd} tjtdd | ddd  W d    d S 1 s(w   Y  d S )	NrR   r6   r5   r   z'vau'rs   r5   c                 S   s&   t | jd d g| jd d gdS )Nr$  r5   Zvaur  )r   rh   )rowsr   r   r   re   f  s     z/test_get_nonexistent_category.<locals>.<lambda>)r   r   r2  r3  KeyErrorr=   r?   rA  r   r   r   test_get_nonexistent_categorya  s   
"r  c                 C   s   | dkr	t d 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 }| dkrIt|| rGJ d S t|| }|| }t	||ksZJ d S )Nngroupngroup is not truly a reductionAABBZABCDr  r   rJ   皙?r6   cat_1cat_2r[  rF  r  r  r:   r[  r'   )
r2  skipr   r   r   r   r=   hasattrrQ  r   )reduction_funcr;   r@   r!   Zexpected_lengthseries_groupbyr   r    r   r   r   0test_series_groupby_on_2_categoricals_unobservedl  s"   


r  c                 C   s.  | dkr	t d | dkrt 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|	rxt|s~||	ks~J qg|	dkr| dkrt|jtjsJ d S d S d S )Nr  r  r'   z6TODO: implemented SeriesGroupBy.corrwith. See GH 32293reasonr  r   r  r   rJ   r  r6   r  ZACBCCAZCBCCr  r  Fr:   r[  r   r4   )r2  r  markxfailnode
add_markerr   r   r   tupler   r=   rQ  -_results_for_groupbys_with_missing_categoriesr?  r   r  r   Z
issubdtyper  integer)r  requestr  r@   Z
unobservedr!   r  r   r    Zzero_or_nanr   r   r   r   r   ?test_series_groupby_on_2_categoricals_unobserved_zeroes_or_nans  s6   
"


 r  c                 C   s   | dkr	t d tttdtddttdtddg dd	}g d
}|jddgdd}t| |}t|| | }|D ]	}||jvsGJ q>d S )Nr  2ngroup does not return the Categories on the indexr  r   r  111112r  r  r  r  r  )rZ   2)r[   r  )r<   1)r<   r  r  r  Tr:   )	r2  r  r   r   r   r=   r   rQ  r"   )r  r@   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g dd	}g d
}|jddg|d}t| |}t|| | }t|  }|t	j
u rT|j|    sRJ d S |j| |k  saJ d S )Nr  r  r  r   r  r  r  r  r  r  r  r  r:   )r2  r  r   r   r   r=   r   rQ  r  r   r   r?  Zisnullr$   )r  r;   r@   r  r  r!   rb  r   r   r   r   ?test_dataframe_groupby_on_2_categoricals_when_observed_is_false  s    	


r  c                  C   s   g dg dg dd} t | }t|d tddd}||d	< |jd	d
gdddd}|d d}|dd }t|| d S )N)rm   r   r6   rI   r   )rG   rE   rG   rE   r   r   r   rn   rL   r   r   TFr   r   r;   r-   )	r   r   r   r   r   r=   r   r   r   )rG   r@   r   r   r    r   r   r   r   3test_series_groupby_categorical_aggregation_getitem  s   r  zfunc, expected_valuesc                 C   sb   t g dg dtg ddd}|d| }t d|itg ddd	d
}t|| d S )Nr   )r   rI   rI   rJ   rJ   )r   r   r   r   rI   )idr   r[  r  r   r[  r  ri   rQ   )r   r   r   r=   r   r   r   r   )rR  r  r@   r    r   r   r   r   $test_groupby_agg_categorical_columns  s   
r  c                  C   s~   t dtg dg ddi} t dddgitddgd}| g dtj}t	|| | g d }t	|| d S )	NrZ   rn  r   r  rJ   rI   rQ   ro  )
r   r   r   r  r=   r   r   r0   r   r   r@   r   r    r   r   r   test_groupby_agg_non_numeric  s   r  rR  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  r7  rZ   r[   ri   r"   rP   r  )
r   r   r   Z
as_orderedr=   rQ  r   r  r   r   )rR  r@   Z
df_groupedr    r   r   r   r   <test_groupby_first_returned_categorical_instead_of_dataframe  s    r  c                  C   sx   t ddg} d| j_tg dtg dt| dd}tdd	d
git| ddd}|jdddd	 }t
|| d S )NrI   rJ   F)rI   rK   rL   r]   r   r  rM   r   r   g      @rD   ri   r   r   )r   r  flagsZ	writeabler   r   r   r   r=   r-   r   r   )rA   r@   r   r    r   r   r   test_read_only_category_no_sort+  s   r  c                  C   s   t g dg dd} | d djjg ddd| d< t d	d	d
d	dd
ddd
ddd
d}|jddd}tg dg ddddd|_| jddgdd 	 }t
|| d S )N)smalllarger  r  r*  r  r  r*  )r<   rZ   rZ   r<   rZ   r<   rZ   r<   )r   r   r   r   )Ztinyr  r*  r  Tr   r   )rZ   r<   rI   rK   rJ   r   r"   r{   )r   r   rP   r  Fr:   )r   r   r   Zset_categoriesZrename_axisr   ra   r=   r2   r/  r   r   r  r   r   r   #test_sorted_missing_category_values7  s6   
r  c                  C   s   t dg di} | d d| d< | dj }tg dtg dddd| d jd}t	|| | d
ddi}| }t|| d S )	NZcol_numrI   rI   rJ   rK   r   col_catr  ri   r  r(   )r   r   r=   r  r(   r   r   r  r   r   r   to_framer   rY  r   r   r   1test_agg_cython_category_not_implemented_fallbackd  s   r  c                  C   s   t g dg dddtjdgg dg d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 )N)rI   rI   rI   rI   r   r  g?g333333?)r   r   r   Zfee)rZ   r[   numerical_col
object_colcategorical_colr  r   rZ   r[   c                 S   s   |    S rb   )r  r4   rA  r   r   r   re     r   z7test_aggregate_categorical_with_isnan.<locals>.<lambda>rI   rJ   r7  r   r   )r  r  r  r   )
r   r   r   r   r=   r   r   r   r   r   r   r   r   r   %test_aggregate_categorical_with_isnanz  s&   
r  c                  C   s   t g dg dd} tjg ddd}| d || d< d}tjt|d	 | d
d t	| d< W d    n1 s=w   Y  | 
 }t g dg dg dd}|d ||d< |d ||d< t|| d S )N)rI   rI   rI   rJ   rJ   rK   )WaitingOnTheWay	Deliveredr  r  r  )
package_idstatus)r  r  r  Tr   r  zusing SeriesGroupBy.maxrs   r  last_status)r  r  r  r  r  r  )r  r  r  )r   r   CategoricalDtyper   r   r   r   r=   r   r,   r   r   )r@   Zdelivery_status_typer   r    r   r   r   r   test_categorical_transform  s.   r  c                 C   s   t g d}g d}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}||  }|rL| tj	}|j
ddg|dd	 }	t|	|  }
t|
| d S N)r   r   rI   rI   )r   rI   rI   r   r   r   rI   r   rD   r   rE   ri   )r(   r+   r:   )r   r   r   r   r   r   r   r1  r   r  r=   rQ  r   r   )rR  r;   r   r   r@   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 g d}g d}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}||   }|rN| 	tj
}|jddg|d}	t|	|  }
t|
| d S r  )r   r   r   r   r   r   r   r  r1  r   r  r=   rQ  r   r   )rR  r;   r   r   r@   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g dg ddtdd} | jd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>J | D ]}t	|| ||  qBd S )N)rD   rD   r   r   r  rK   )r   rJ  r   Fr   r   rI   Zintpr  rJ   )rD   r   rE   )
r   r   r   r=   indicesr   r  r  r   rT  )r@   r   r    r   r   r   r   r   2test_groupby_categorical_indices_unused_categories  s   r  c                 C   sj   t dg di}|d d|d< t|dd |  }ttg ddtg dddd}t|| d S )Nr   r  r   rD   ri   )rP   r"   )	r   r   rQ  r=   r   r   r   r   r   )rR  r@   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 )NrI   rJ   rm   r:  r   r   rM   r  r   rD   Tr:   rE   ri   r   )
r   r   r=   r0   r   r   r   r   r   r   rY  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   rI   rJ   grpdescriptionr`   ri   r  )
r   r  r   r   r=   r,   r   r   r   r   )r  r@   r    r   r   r   r   ,test_groupby_categorical_aggregate_functions.  s   
r  c                 C   s   t ddgg dd}tt ddgg ddddgd}|jd| |d	}| }| r4td
ddgi|d}ntg dg d}td
g di|d}d|j_t|| d S )NrI   rJ   r  r  rK   r6   )rd   rW   rd   )r;   r1  rW   rQ   )rK   r6   r   )	r   r   r=   r4   r   r"   rP   r   r   )r;   r1  r   r@   r   r    r   r"   r   r   r   test_groupby_categorical_dropna@  s   "r  
index_kind)r   singlemultic                 C   sp  |dv r|s|dkrd}| j tjj|d n |dkr,|s,d}| j tjj|d n|dkr8|s8tjdd ttg d	g d
|dtdd}|dkrRdg}	n |dkr_dg}	|	|	}n|dkrrddg}	|d |d< |	|	}t
||}
|j|	|||d}t|||
 }|r|jdj}n|d jj}tg d
}t|| |dkr|jdj}t|| d S d S )N)r)   r*   r  z1GH#10694 - idxmax/min fail with unused categoriesr  r'   zDGH#49950 - corrwith with as_index=False may not have grouping columnr   /Result doesn't have categories, nothing to testrJ   rI   rJ   rK   rI   r6   rK   rJ   r   r6   rM   r   r  r  r  )r  r  r2  r  r  r  r   r   r   r   r   r=   rQ  r"   r   r   r   r   r   r   )r  r   r   r;   r  r  r   r   r@   r  r!   r   	op_resultr    r   r   r   r   test_category_order_reducerQ  sJ   

r  r  r  c                 C   s   t tg dg d|dtdd}|dkrdg}||}n|dkr2dd	g}|d |d	< ||}t||}|j|| ||d
}	t|	|| }
|
jdj	}t
g d}t|| |dkrm|
jd	j	}t|| d S d S )Nr  r  r   r6   rM   r  r   r  r  r  )r   r   r   r   r   r=   rQ  r"   r   r   r   r   r   )r   r   r;   Ztransformation_funcr  r   r@   r  r!   r   r  r    r   r   r   r   test_category_order_transformer  s,   

r  methodheadtailc                 C   s   t tg dg d|dtdd}|dkrdg}n |dkr'dg}||}n|d	kr:dd
g}|d |d
< ||}|j|| ||d}t|| }	|dkrT|	d jj}
n|	j	dj}
t
g d}t|
| |d	krz|	j	d
j}
t|
| d S d S )Nr  r  r   r6   rM   r   r   r  r  r  r  )r   r   r   r   r=   rQ  r   r   r"   r   r   r   r   r   r   r;   r  r  r   r@   r  r   r  r    r   r   r   r   test_category_order_head_tail  s2   
r  )r?   r   r   c                 C   s0  |dkr|dks| s|dkrt d ttg dg d|dtdd}|dkr-d	g}n |d
kr:d	g}||}n|dkrMd	dg}|d	 |d< ||}|j|| ||d}t||dd }	|dkse| sp|dkrp|	d	 jj	}
n|	j
d	j	}
tg d}t|
| |dkr|	j
dj	}
t|
| d S d S )Nr   r   z(No categories in result, nothing to testr  r  r   r6   rM   r   r  r  r  r  c                 S   s   | j ddS )NTr^   )r4   rc   r   r   r   re     r   z+test_category_order_apply.<locals>.<lambda>)r2  r  r   r   r   r   r=   rQ  r   r   r"   r   r   r   r   r  r   r   r   test_category_order_apply  s<   

r  c                 C   sV  |dkr| st jdd tddd}tg d||d}t|tdd	}|dkr-d
g}n |dkr:d
g}||}n|dkrMd
dg}|d
 |d< ||}|j|| |dd}|	 }	|r`g dng d}
t
|
|j|d
d}| rtd|
i}|dkrtt||d|_n||_n|dkrtt|t||
d}n	tt||
d	}t|	| d S )Nr   r  r  i'  r$  r  r   r6   rM   r   r  r  r  Tr  )rK   rJ   rI   )rJ   rI   rK   )r   r   rP   rD   )r   r  )r   r  rD   )r2  r  r   r   r   r   r   r   r=   r4   r   r   r   Z
from_framer"   r   r   r   )r   r   r  r   r   Zgrouperr@   r  r   r    r   r"   r   r   r   r   test_many_categories  s:   

r  cat_columnsr  c                 C   s   t g dg dd}||  d|| < d}t| t|@ r tnd }tj||d || W d    d S 1 s:w   Y  d S )Nr  )r6   rL   r   r]   rM   r   z+The default of observed=False is deprecatedrs   )r   r   setr   r   r   r=   )r  r  r@   r   klassr   r   r   test_groupby_default_depr  s   "r  a1c                 C   sv  |r|dkrt tdrJ td n/|dkr%d}| jtjj|d n|dkrB|sBt|dkrB|sB|sBd}| jtjj|d t	g dg d	g d
d}|
ddd}d|vrb|jdd}|j|||d}|rp|d }t||}	|j|gg|	R  }
t|||	 }|r|s|dkr||}|stdd |jd d D d|fg |_n|s||g |_t|
| d S )Nr'   z*corrwith not implemented for SeriesGroupByz1GH#32293: attempts to call SeriesGroupBy.corrwithr  r0   rI   zGH#52848 - raises a ValueError)r   r   rI   )rJ   rK   rK   r  )r  r  rD   r   )r  r  r  r`   rH  rD   r2   c                 S   s   g | ]}|d fqS ) r   )r\  indr   r   r   r]  B  s    z!test_agg_list.<locals>.<listcomp>r$  )r  r
   r2  r  r  r  r  r  r   r   r   r  r=   r   r   rQ  r  r   from_tuplesra   r   r  )r  r   r;   r  r  r  r   r@   r   r!   r    r   r   r   r   test_agg_list  sF   

 r  )hr   numpyr   r2  Zpandasr   r   r   r   r   r   r   r	   Zpandas._testingZ_testingr   Zpandas.api.typingr
   Zpandas.tests.groupbyr   r   r#   r  rB   r   r   r   r  Zparametrizer   r   r   r   r	  r  r  r  r  r   r#  r'  r)  r0  r6  r   renamer8  rB  rE  rK  rS  rU  rZ  rc  rk  rm  rr  rs  rw  r   ry  ZNaTr|  Zfixturer}  r  r  r   r  r  r  r  r  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   r   <module>   s   $		
  %
"n" +
$

<!




	%
"
2




"
"
,	
+
!

-8
.!#
'
