a
    j=ic                     @   s   d Z ddlmZ ddlmZ ddlZddlZddlZddlm	  m
Z ddlZddlmZ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dd	 Zejd
d ZG dd dZ dS )z5 test with the TimeGrouper / grouping with datetimes     )datetime)StringION)	DataFrameDatetimeIndexIndex
MultiIndexSeries	Timestamp
date_rangeoffsets)Grouper)
BinGrouperc                  C   s`   t g dtdddddtdddddtdddd	dtddd
ddtjtdddddgd} | S )z
    DataFrame used by groupby_with_truncated_bingrouper, made into
    a separate fixture for easier re-use in
    test_groupby_apply_timegrouper_with_nat_apply_squeeze
                	   r     r   r      r   r   
      r         )QuantityDate)r   r	   pdNaT)df r   v/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/pandas/tests/groupby/test_timegrouper.pyframe_for_truncated_bingrouper   s    r!   c                 C   s:   | }t ddd}||}t|jjt|jjks6J |S )a+  
    GroupBy object such that gb.grouper is a BinGrouper and
    len(gb.grouper.result_index) < len(gb.grouper.group_keys_seq)

    Aggregations on this groupby should have

        dti = date_range("2013-09-01", "2013-10-01", freq="5D", name="Date")

    As either the index or an index level.
    r   5Dkeyfreq)r   groupbylengrouperZresult_indexZgroup_keys_seq)r!   r   tdggbr   r   r    !groupby_with_truncated_bingrouper3   s
    
r+   c                   @   s
  e Zd Zdd Zejdddgdd Zdd	 Zejd
g ddd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Ze d8d9d: Z!d;S )<TestGroupByc           
      C   s  t d g dtdddddtdddddtdd	dd
dtdd	dd	dtdddddtdddddgd}|jdd}||fD ]D}|dg}t dditddddddd}tjg ddd|jg ddf< d}t	j
t|d |d }W d    n1 s0    Y  t	|| | }t	j
t|d$ |tdd }W d    n1 s`0    Y  t	|| t	j
t|d$ |tdd }	W d    n1 s0    Y  t	|	| qd S ) NzCarl Carl Carl Carl Joe Carlr   r   r   r   r   r   r   r   r   r      r   r   Buyerr   r   r   byr   Z20130901Z20131205r"   left)r%   nameZ	inclusiveindex)      r   int64dtype)r   r7   r   !The default value of numeric_onlymatchr%   )r   splitr   sort_values	set_indexr
   nparrayiloctmassert_produces_warningFutureWarningresamplesumassert_frame_equal
sort_indexr&   r   )
selfdf_originaldf_reorderedr   expectedmsgresult1	df_sortedresult2Zresult3r   r   r    test_groupby_with_timegrouperK   sB    
 .44z)TestGroupBy.test_groupby_with_timegroupershould_sortTFc                 C   s   t d d g dtdddddtdddddtdd	dd
dtdd	dd	dtdddddtdddddgd}|r|jddd}|jddd}|tdd}|jsJ t|j	t
sJ |j}t|tsJ t|dksJ d S )NzA A A A A BzCarl Mark Carl Joe Joe Carl)r   r   r      r   r   r   r   r   r   r   r   r   r   r-   r   ZBranchr/   r   r   r   Fr1   Z	ascendingr   ZdropZ6Mr>   r   )r   r?   r   r@   rA   r&   r   
group_keys
isinstancer(   r   groupsdictr'   )rL   rU   r   gr\   r   r   r    %test_groupby_with_timegrouper_methodsz   s,    
z1TestGroupBy.test_groupby_with_timegrouper_methodsc                 C   sn  t d d g dtdddddtdddddtdd	dd
dtdd	dd	dtdd	dd
dtdd	dd	dtdddddtdddddgdd}|jddd}||fD ]V}t d g dtdddddtdddddtdddddgdddg}d}tjt|d( |t	dddg
 }W d    n1 s>0    Y  t|| t d g dtdddddtdddddtdddddtdddddgdddg}tjt|d( |t	dddg
 }W d    n1 s0    Y  t|| qt d d g dtdd	dddtdd	dddtdd	dd
dtdd	dd	dtdd	dd
dtdd	dd	dtdd	dddtdd	dddgdd}|jddd}||fD ]}t d  g d!tdd	dddtdd	dddtdd	dddtdd	dddtdd	dddgdddg}d}tjt|d( |t	d"ddg
 }W d    n1 s^0    Y  t|| tjt|d( |t	d#ddg
 }W d    n1 s0    Y  t d g dtdd	dddtdd	dddtdd	dddgdddg}t|| | }tjt|d* |t	d#dd$dg
 }W d    n1 s\0    Y  t|| tjtd%d* |t	d#d&d$dg
  W d    n1 s0    Y  |d}tjt|d* |t	d#dd'dg
 }W d    n1 s0    Y  t|| tjt|d* |t	d#dd'dg
 }W d    n1 s\0    Y  t|| tjtd(d* |t	d#d&d'dg
  W d    n1 s0    Y  | }|jtd |d< tjt|d* |t	d#dd$dg
 }W d    n1 s0    Y  t d g dtdd)d*ddtdd)d*ddtdd)d*ddgdddg}t|| d+}tjt|d, |t	d#ddd,dg
  W d    n1 s0    Y  t dggdgttdd	dddgt dd-d.}tjt|d$ |t	d#d
 }W d    n1 s40    Y  t|| tjt|d& |t	d#dg
 }W d    n1 s0    Y  t|| |jd|_|jjt ksJ tjt|d& |t	d#dd$
 }W d    n1 s0    Y  t|| tjt|d( |t	d#dd$g
 }W d    n1 sP0    Y  t|| qd S )/NzA A A A A A A Bz$Carl Mark Carl Carl Joe Joe Joe Carl)r   r   r   r   rV   r   r   r   r   r   r   r   r   r   r   r   r-   r   rW   r   r   FrX   zCarl Joe Mark)r   r   r      r.   r/   r;   r<   Ar>   zCarl Mark Carl Joe)r   r   r   r      Z6MSzCarl Joe Mark Carl Joe)r7   rV   r      r   Z1DZ1Mr%   r$   z#'The grouper name foo is not found'foo)r%   levelzThe level foo is not valid      z2The Grouper cannot specify both a key and a level!)r%   r$   rf   r%   r3   columnsr5   )r   r?   r   rA   r@   rE   rF   rG   r&   r   rI   rJ   reset_indexpytestZraisesKeyError
ValueErrorcopyr5   r   ZMonthEndr   shiftr%   )rL   rM   rR   r   rO   rP   resultZwarn_msgr   r   r     test_timegrouper_with_reg_groups   s8   
8888
::
::::
(4668z,TestGroupBy.test_timegrouper_with_reg_groupsr%   )DMra   zQ-APRc                 C   s   t tg dg dg dg ddd}|dd |jd	d
 ddg	 
d}d|_|	 t|ddgd  }t|| |t|ddgd  }t|| d S )N)20121002Z20121007201301302013020220130305rv   Z20121207rw   rx   ry   rx   ry   )r   r   r   r   r   r   r   r   r   r   r   r   )i  il  i  i     io  Z   i8  g  i-  r|   i!  )r-      r   r6   '   r   r   r{   -   "   r   r-   )dateuser_id
whole_costZcost1r   r   r   r   )Z	min_countr8   r>   )r   r   to_datetimerA   r&   rH   rI   dropnaZreorder_levelsrK   Zastyper3   r   rE   assert_series_equal)rL   r%   r   rO   rQ   rS   r   r   r    %test_timegrouper_with_reg_groups_freqU  s6    #&
	z1TestGroupBy.test_timegrouper_with_reg_groups_freqc                 C   s  t d g dtdddddtdddddtdd	dd
dtdd	dd	dtdddddtdddddgd}|jdd}|jg d |jddg |jdg g}g d}||fD ]H}|tddd}t||D ]&\}}t|}	|	|	}
t
|
| qq|jdg |jdg |jdg g}g d}||fD ]X}|dtdddg}t||D ]0\\}}}t|}	|	||	f}
t
|
| qNq*|d}|jdd}|jg d |jddg |jdg g}||fD ]J}|tdd}t||D ](\}}t|}	|	|	}
t
|
| qqd S )NzCarl Joe Joe Carl Joe Carlr   r   r   r   r   r   r   r   r   r   r-   r   r   r.   r   r0   )r   r   r   rc   )
2013-09-30
2013-10-31
2013-12-31ru   r   rd   ))Joer   )ZCarlr   )r   r   r/   r>   )r   r?   r   r@   rD   r&   r   zipr	   	get_grouprE   rJ   rA   )rL   rM   rN   expected_listZdt_listr   groupedtrO   dtrr   Zg_listbr   r   r    test_timegrouper_get_group  s^    







z&TestGroupBy.test_timegrouper_get_groupc                 C   s   t ddgddgd}| }t|d |d< dd }|tdd	|}|td
dd|}t|j	dd|j	dd d S )N
10/10/2000
11/10/2000r   r   r   valuer   c                 S   s   t | d  gdS )Nr   )rI   )r   rI   xr   r   r    sumfunc_series  s    zMTestGroupBy.test_timegrouper_apply_return_type_series.<locals>.sumfunc_seriesr$   ru   rd   TrY   )
r   rp   r   r   r&   r   applyrE   rJ   rl   )rL   r   df_dtr   rO   rr   r   r   r    )test_timegrouper_apply_return_type_series  s    z5TestGroupBy.test_timegrouper_apply_return_type_seriesc                 C   s   t ddgddgd}| }t|d |d< dd }|tdd	|}|td
dd|}t|j	dd|j	dd d S )Nr   r   r   r   r   r   c                 S   s
   | j  S N)r   rI   r   r   r   r    sumfunc_value  s    zKTestGroupBy.test_timegrouper_apply_return_type_value.<locals>.sumfunc_valuer   ru   rd   TrY   )
r   rp   r   r   r&   r   r   rE   r   rl   )rL   r   r   r   rO   rr   r   r   r    (test_timegrouper_apply_return_type_value  s    z4TestGroupBy.test_timegrouper_apply_return_type_valuec                 C   s&  d}t dd|d}tt|t|d|d}|dd }|j}tt| d	 t	s^J t d
ddd}tg dg dd|d}|jddj}g d}dd |D }	t
||	 |jdd}|D ]Z}
||
}|j|
df |j|
df gg}t|
gddd}t|td|d}	t
||	 qd S )Ni  z2012/1/1Z5min)startr%   periods)highlowr4   c                 S   s   t | j| j| jS r   )r   yearmonthdayr   r   r   r    <lambda>      z?TestGroupBy.test_groupby_groups_datetimeindex.<locals>.<lambda>r   z
2015/01/01r   r   )r   r3   )r   r7   rb   rV   r   )r   r   r   rc   r   ra   Brf   )z
2015-01-05z
2015-01-04z
2015-01-03z
2015-01-02z
2015-01-01c                 S   s    i | ]}t |t|gd dqS )r   r3   )r	   r   ).0r   r   r   r    
<dictcomp>  s   zATestGroupBy.test_groupby_groups_datetimeindex.<locals>.<dictcomp>ra   r   rt   )r3   r%   ZABrj   )r
   r   rB   aranger&   r\   r[   listkeysr   rE   Zassert_dict_equalr   locr   rJ   )rL   r   indr   r   r\   r5   rr   datesrO   r   dataZexpected_indexr   r   r    !test_groupby_groups_datetimeindex  s.    
z-TestGroupBy.test_groupby_groups_datetimeindexc           	      C   s4  g d}t g d|tjdddddgd d	}|d
 dd |d
< tg ddd
d}tddgd dd}t||g}t g dg dd|ddgd}|d
dg	 }t
|| t|dd}t tjdddg dd|d}tg ddd}t g dg d d|ddgd}|jd!d"	 }t
|| d S )#N2011-07-19 07:00:002011-07-19 08:00:002011-07-19 09:00:00r   r   r   ar   r   r   r   r   r7   r8   r9   r   r   r   )labelr   value1value2r   c                 S   s   t | ddS )N
US/Pacifictz)r	   )dr   r   r    r   %  r   zBTestGroupBy.test_groupby_groups_datetimeindex_tz.<locals>.<lambda>r   r   r   r   r   r   r   )r   r3   r   r   r   r   r   r   r   rc   r   r   r   r   r   r   r   r   r   r   r   r   r5   rk   z
Asia/Tokyor   r   r   r   r   r   r   r4   r   r   r   r   r   rb   r   rc   r7   r   r   )r   rB   r   r   r   r   r   from_arraysr&   rI   rE   rJ   	rL   r   r   Zexp_idx1Zexp_idx2Zexp_idxrO   rr   Zdidxr   r   r    $test_groupby_groups_datetimeindex_tz  sN    
z0TestGroupBy.test_groupby_groups_datetimeindex_tzc                 C   sR   t dtdfdtdfgddgd}|d }|d d tdksNJ d S )Nr   z
2012-07-03z
2012-07-04r   r   )rk   )r   rB   
datetime64r&   firstr	   )rL   r   rr   r   r   r    &test_frame_datetime64_handling_groupbyR  s    z2TestGroupBy.test_frame_datetime64_handling_groupbyc              	   C   s   d}t jt|d g dd}|jdddjdd }ttd	d
dtdd
dtdddtdd
dtdddgdtd}t	
|| d
}|dj|}t |j|}tg dg ddd}t |j|}t	
|| d S )Nz0,2000-01-28 16:47:00,America/Chicago
1,2000-01-29 16:48:00,America/Chicago
2,2000-01-30 16:49:00,America/Los_Angeles
3,2000-01-31 16:50:00,America/Chicago
4,2000-01-01 16:50:00,America/New_York)r   r   r   )headernamesr   F)rZ   c                 S   s   t | j| jS r   )r   r   r   tz_localizer3   r   r   r   r    r   g  r   z9TestGroupBy.test_groupby_multi_timezone.<locals>.<lambda>z2000-01-28 16:47:00-0600zAmerica/Chicagor   z2000-01-29 16:48:00-0600z2000-01-30 16:49:00-0800zAmerica/Los_Angelesz2000-01-31 16:50:00-0600z2000-01-01 16:50:00-0500zAmerica/New_Yorkr   )r3   r:   )z2000-01-28 16:47:00z2000-01-29 16:48:00z2000-01-31 16:50:00)r   r   r   r5   r3   )r   Zread_csvr   r&   r   r   r   r	   objectrE   r   r   r   r   r   )rL   r   r   rr   rO   r   Z
res_valuesZ
exp_valuesr   r   r    test_groupby_multi_timezone[  s4    




z'TestGroupBy.test_groupby_multi_timezonec           	      C   s.  g d}t g ddd |D tjddddd	gd
 d}tjg dddd}tddgd
 dd}t||g}t g dg dd|ddgd}|ddg	 }t
|| tj|dd}t tjdddg dd|d}tjg ddd}t g dg dd|ddgd}|jd d!	 }t
|| d S )"Nr   r   c                 S   s   g | ]}t j|d dqS )Hr>   )r   ZPeriod)r   r   r   r   r    
<listcomp>  r   z;TestGroupBy.test_groupby_groups_periods.<locals>.<listcomp>r7   r8   r9   r   r   r   )r   periodr   r   r   r   r   ri   r   r   r   r   r   r   r   r   r   r   r>   r   r4   r   r   r   r   r   )r   rB   r   r   ZPeriodIndexr   r   r   r&   rI   rE   rJ   r   r   r   r    test_groupby_groups_periods  sL    
	z'TestGroupBy.test_groupby_groups_periodsc                 C   s   t ddg}|d d|d< t|d jjtjs6J |jdd }|d j}t|jtjsbJ |d jdd }|j}t|jtjsJ d S )N)r        |>c )r   r   r   zM8[ns]r   r   )	r   view
issubclassr:   typerB   r   r&   r   )rL   r   rr   Zgot_dtr   r   r    test_groupby_first_datetime64  s    
z)TestGroupBy.test_groupby_first_datetime64c                 C   sR   t tdtdd}|dd dd }|dd  }t|| d S )NZ20130101r   r   ra   c                 S   s   |   S r   )maxr   r   r   r    r     r   z9TestGroupBy.test_groupby_max_datetime64.<locals>.<lambda>)	r   r	   rB   r   r&   r   r   rE   r   )rL   r   rO   rr   r   r   r    test_groupby_max_datetime64  s    z'TestGroupBy.test_groupby_max_datetime64c                 C   sV   t tdtdgd d}|dd t}ttdgd dd}t|| d S )Nr   z	2000-01-1r   ra   r   r   )	r   ranger	   r&   Z	transformminr   rE   r   rL   r   rr   rO   r   r   r    test_groupby_datetime64_32_bit  s    z*TestGroupBy.test_groupby_datetime64_32_bitc                 C   sh   t jd tt jjddddtddddd	d
}|d d }|dd  }t	|| d S )N*   r   r   <   )sizez01/01/2000 00:00sUTC)r   r%   r   )factortimer   r   )
rB   randomseedr   randintr
   r&   r   rE   r   )rL   r   Zdf1Zdf2r   r   r    $test_groupby_with_timezone_selection  s    z0TestGroupBy.test_groupby_with_timezone_selectionc                 C   sn   t dgttjgd}|d d jtjks2J t dg di}ttj|d< |d d jtjksjJ d S )Nr   )r   r   r   r   r   r   r   r   )r   r   nowpytzutctzinfo)rL   r   r   r   r    test_timezone_info  s
    zTestGroupBy.test_timezone_infoc                 C   s^   t g dd tddddd}|dj }tg d	tg ddd
dd}t|| d S )Nr   r   r   r7   T)r   r%   )r   r   r   )r   r   r   r   r   r   )	r   r
   r&   r   countr   r   rE   r   r   r   r   r    test_datetime_count  s    zTestGroupBy.test_datetime_countc                 C   s   ddl m} ttjdddtjgtj|dd|dd|d	dtjgd
}t|j|_d|d< ||j  }|	d}|	d}t
| |  t
| |  t
| |  t
| |  d S )Nr   )	timedeltaz2015-07-24 10:10z2015-07-25 11:11z2015-07-23 12:12r   )daysr   r   )r   tdra   group)r   r   r   rB   nanr   r   r   Znotnar&   rE   rJ   r   r   r   last)rL   r   Zdf_testZdf_refZgrouped_testZgrouped_refr   r   r    $test_first_last_max_min_on_time_data  s(    "

z0TestGroupBy.test_first_last_max_min_on_time_datac                 C   sz   t tdtjtdgg dd}tddd}||d  }||j  |d  }|j	
d |_	t|| d S )	Nz2016-06-28 09:35:35z2016-06-28 16:46:28)123)r   r   r   hr#   r   )r   r	   r   r   r   r&   Znuniquer   Znotnullr5   
_with_freqrE   r   )rL   testr(   rr   rO   r   r   r    %test_nunique_with_timegrouper_and_nat  s    z1TestGroupBy.test_nunique_with_timegrouper_and_natc                 C   sn   g dt g dddg dd}t|d}tdd	}||}| }||g}| }t|| d S )
N)shanghaiZbeijingr  )z2017-08-09 13:32:23z2017-08-11 23:23:15z2017-08-11 22:23:15zdatetime64[ns]r9   r   )locationr   r   r   rt   r>   )r   r   rA   r   r&   r   rE   rJ   )rL   Z
data_framer(   r   rr   rO   r   r   r    !test_scalar_call_versus_list_call/  s    

z-TestGroupBy.test_scalar_call_versus_list_callc                 C   sn   d}t jd|ddd}tt||d}||jj }ttd|ttd|d |j	d	d}t
|| d S )
Nr   z2018-01ru   ZMonth)r   r   r%   r3   r4   r   r   r   )r   Zperiod_ranger   r   r&   r5   r   rI   r   r3   rE   r   )rL   r   r5   Zperiod_seriesrr   rO   r   r   r    test_grouper_period_indexC  s    z%TestGroupBy.test_grouper_period_indexc                 C   s`   |}|d  dd }tddddd}t|d	gt| g}tg d
|dd}t|| d S )Nr   c                 S   s   dt | iS )Nre   )r'   r   r   r   r    r   Y  r   zRTestGroupBy.test_groupby_apply_timegrouper_with_nat_dict_returns.<locals>.<lambda>
2013-09-01
2013-10-01r"   r   ri   re   )r   r   r   r   r   r   r   r   )r   r
   r   r   r'   r   rE   r   )rL   r+   r*   resdtimirO   r   r   r    4test_groupby_apply_timegrouper_with_nat_dict_returnsQ  s    z@TestGroupBy.test_groupby_apply_timegrouper_with_nat_dict_returnsc                 C   sb   |}|d  dd }tddddd}td	tjtjtjtjtjd
g|d dd}t|| d S )Nr   c                 S   s   t | r| jd S tjS )Nr   )r'   rD   rB   r  r   r   r   r    r   g  r   zTTestGroupBy.test_groupby_apply_timegrouper_with_nat_scalar_returns.<locals>.<lambda>r  r  r"   r   ri   r   r   r   )r   r
   r   rB   r  r	  rE   r   )rL   r+   r*   r  r  rO   r   r   r    6test_groupby_apply_timegrouper_with_nat_scalar_returns`  s    zBTestGroupBy.test_groupby_apply_timegrouper_with_nat_scalar_returnsc                 C   s   |}t ddd}tjtdd |j|dd}W d    n1 sB0    Y  |jdksZJ |j|jj	dksrJ |
d	d
 }td}|d   j}tj|g|gdd gd}|d |jd }	t|	|dd}
t||
 d S )Nr   Z100Yr#   z`squeeze` parameterr<   T)Zsqueezer   c                 S   s   | d d S )Nr   r   r   r   r   r   r    r     r   zSTestGroupBy.test_groupby_apply_timegrouper_with_nat_apply_squeeze.<locals>.<lambda>r   )r   r   r   r   )r   rE   rF   rG   r&   ZngroupsZ_selected_objZ	_get_axisZaxisZnlevelsr   r	   r@   r   r5   r   Zfrom_producttakevaluesr   r   )rL   r!   r   r)   r*   r  r$   Zorderingr  Z	ex_valuesrO   r   r   r    5test_groupby_apply_timegrouper_with_nat_apply_squeezer  s    ,zATestGroupBy.test_groupby_apply_timegrouper_with_nat_apply_squeezenumbac                 C   sp   |}|d j dd dd}|d  tj}t|| |dg j dd dd}|dg  tj}t|| d S )Nr   c                 S   s
   t | S r   rB   nanmeanr  r5   r   r   r    r     r   zITestGroupBy.test_groupby_agg_numba_timegrouper_with_nat.<locals>.<lambda>r  )Zenginec                 S   s
   t | S r   r  r  r   r   r    r     r   )Z	aggregaterB   r  rE   r   rJ   )rL   r+   r*   rr   rO   Z	result_dfZexpected_dfr   r   r    +test_groupby_agg_numba_timegrouper_with_nat  s    
z7TestGroupBy.test_groupby_agg_numba_timegrouper_with_natN)"__name__
__module____qualname__rT   rm   markZparametrizer_   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r   Z
skip_if_nor  r   r   r   r    r,   J   s<   /
  ;
:B?	'=	
r,   )!__doc__r   ior   numpyrB   rm   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingrE   Zpandas.core.groupby.grouperr   Zpandas.core.groupby.opsr   Zfixturer!   r+   r,   r   r   r   r    <module>   s    (


