U
    >vf$                     @   s   d Z ddlmZ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	timedelta)StringION)	DataFrameDatetimeIndexIndex
MultiIndexSeries	Timestamp
date_rangeoffsets)Grouper)
BinGrouperc                  C   sh   t ddddddg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   
            )QuantityDate)r   r
   pdNaT)df r   I/tmp/pip-unpacked-wheel-vdrwu74i/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s6t|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AssertionError)r!   r   tdggbr   r   r    !groupby_with_truncated_bingrouper7   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
ddddg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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Ze d;d<d= Z!d>S )?TestGroupByc           	      C   sp  t d ddddddg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g}t d	d	dtddddddd}|dti}d|jd< d|jd< d|jd < t	j
d!d"dgd#d$|jd	d"dgdf< |d }t|| | }|tdd% }t|| |tdd% }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   )r0   r   Z20130901Z20131205r"   left)r%   nameZ	inclusiveindexr0   ZCarlCarlCarl)r   r   ZCarlCarl)   r   Joe)r   r      r7   int64dtyper%   )r   splitr   sort_values	set_indexr   astypeobjectilocnparrayresamplesumtmassert_frame_equal
sort_indexr&   r   )	selfdf_originaldf_reorderedr   expectedresult1	df_sortedresult2Zresult3r   r   r    test_groupby_with_timegrouperO   sJ        


$z)TestGroupBy.test_groupby_with_timegroupershould_sortTFc                 C   s   t d d ddddddg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stt	|j
tst|j}t	|tstt|dkstd S )NzA A A A A BzCarl Mark Carl Joe Joe Carlr   r   r      r   r   r   r   r   r   r   r.   r   ZBranchr0   r   r   r   Fr2   Z	ascendingr   ZdropZ6Mr=   )r   r>   r   r?   r@   r&   r   
group_keysr)   
isinstancer(   r   groupsdictr'   )rK   rS   r   grZ   r   r   r    %test_groupby_with_timegrouper_methods   s,    
z1TestGroupBy.test_groupby_with_timegrouper_methodsc                 C   s@  t d d ddddddddg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 dddg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dddgjdd}t	|| t d ddddg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d!ddgjdd}t	|| qt d d ddddddddg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" d#ddd$dg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}|td%ddgjdd}t	|| |td&ddgjdd}t d dddg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d&dd'dgjdd}t	|| tjtd(d)  |td&d*d'dg  W 5 Q R X |d}|td&dd+dgjdd}t	|| |td&d
d+dgjdd}t	|| tjtd,d)  |td&d*d+dg  W 5 Q R X | }|jtd |d< |td&dd'dgjdd}t d dddg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d0dg  W 5 Q R X t dggdgttdddd
d
gt dd1d2}|td&djdd}t	|| |td&dgjdd}t	|| |jd|_|jjt kst|td&dd'jdd}t	|| |td&dd'gjdd}t	|| qtd S )3NzA A A A A A A Bz$Carl Mark Carl Carl Joe Joe Joe Carlr   r   r   rT   r   r   r   r   r   r   r   r.   r   rU   r   r   FrV   zCarl Joe Markr      r/   r0   z!The default value of numeric_onlyAr=   T)Znumeric_onlyzCarl Mark Carl Joe   Z6MSzCarl Joe Mark Carl Joer7      Z1DZ1Mr%   r$   z#'The grouper name foo is not found')matchfoo)r%   levelzThe level foo is not valid      z2The Grouper cannot specify both a key and a level!)r%   r$   re   r%   r4   columnsr6   )r   r>   r   r@   r?   r&   r   rG   rH   rI   reset_indexpytestZraisesKeyError
ValueErrorcopyr6   r   ZMonthEndr   shiftr%   r)   )rK   rL   rP   r   rN   msgresultr   r   r     test_timegrouper_with_reg_groups   s2   


$
$
  z,TestGroupBy.test_timegrouper_with_reg_groupsr%   DMr_   zQ-APRc                 C   s  t tddddddddddddgddddddddd	d	d	d	gd
dddddddddddgddddddddddddg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 )$NZ20121002Z20121007Z20130130Z20130202Z20130305Z20121207r   r   r   i  il  i  i     io  Z   i8  ig  i-  i!  r.      r   r9   '   r   -   "   )dateuser_id
whole_costZcost1r|   r}   r~   )Z	min_countr:   r=   )r   r   to_datetimer@   r&   rF   rG   ZdropnaZreorder_levelsrJ   rA   r4   r   rH   assert_series_equal)rK   r%   r   rN   rO   rQ   r   r   r    %test_timegrouper_with_reg_groups_freqS  sf    #&
	z1TestGroupBy.test_timegrouper_with_reg_groups_freqc                 C   s(  t d ddddddg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d	ddg |jddg |jdg g}dddg}||fD ]H}|tddd}t||D ]&\}}t|}	|	|	}
t
|
| qq|jdg |jdg |jdg g}dddg}||fD ]X}|dtdddg}t||D ]0\\}}}t|}	|	||	f}
t
|
| q\q8|d}|jdd}|jd	ddg |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   r1   ra   
2013-09-30
2013-10-31
2013-12-31ru   r   rb   )r8   r   )ZCarlr   )r8   r   r0   r=   )r   r>   r   r?   rC   r&   r   zipr
   	get_grouprH   rI   r@   )rK   rL   rM   expected_listZdt_listr   groupedtrN   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   )rG   )r	   rG   xr   r   r    sumfunc_series  s    zMTestGroupBy.test_timegrouper_apply_return_type_series.<locals>.sumfunc_seriesr$   ru   rb   TrW   )
r   ro   r   r   r&   r   applyrH   rI   rk   )rK   r   df_dtr   rN   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   rG   r   r   r   r    sumfunc_value  s    zKTestGroupBy.test_timegrouper_apply_return_type_value.<locals>.sumfunc_valuer   ru   rb   TrW   )
r   ro   r   r   r&   r   r   rH   r   rk   )rK   r   r   r   rN   rr   r   r   r    (test_timegrouper_apply_return_type_value  s    
 
z4TestGroupBy.test_timegrouper_apply_return_type_valuec                 C   s8  d}t dd|d}tt|t|d|d}|dd }|j}tt| d	 t	s^t
t d
ddd}tdddddgdddddgd|d}|jddj}dddddg}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lowr5   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   r4   r7   r`   rT   r   r   r   r   ra   r_   Bre   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|   r4   )r
   r   ).0r|   r   r   r    
<dictcomp>  s     zATestGroupBy.test_groupby_groups_datetimeindex.<locals>.<dictcomp>r_   r   rt   )r4   r%   ZABri   )r   r   rD   aranger&   rZ   rY   listkeysr   r)   rH   Zassert_dict_equalr   locr   rI   )rK   r   indr   r   rZ   r6   rr   datesrN   r|   dataZexpected_indexr   r   r    !test_groupby_groups_datetimeindex  s0     &
z-TestGroupBy.test_groupby_groups_datetimeindexc           	      C   sj  ddddddg}t ddddddg|tjdddd	d
gd d}|d dd |d< tddddddgddd}tddgd dd}t||g}t ddd	dd
dgd	d
d
d	d	d
gd|ddgd}|ddg	 }t
|| t|dd}t tjdddd	d
dd	d
dgd|d}tdddgdd}t dddgd
ddg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:00ar   r7   r:   r;   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   r4   r   r   r   ra   r   r   r   r   r   r6   rj   z
Asia/Tokyor   r5   r`   r   )r   rD   r   r   r   r   r   from_arraysr&   rG   rH   rI   	rK   r   r   Zexp_idx1Zexp_idx2Zexp_idxrN   rr   Zdidxr   r   r    $test_groupby_groups_datetimeindex_tz  sf    
 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sNtd S )Nr   z
2012-07-03z
2012-07-04r   r|   )rj   )r   rD   
datetime64r&   firstr
   r)   )rK   r   rr   r   r   r    &test_frame_datetime64_handling_groupbyP  s    z2TestGroupBy.test_frame_datetime64_handling_groupbyc              	   C   s   d}t jt|d dddg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dddgdddg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_Yorkr   r|   r   )headernamesF)rX   c                 S   s   t | j| jS r   )r   r   r   tz_localizer4   r   r   r   r    r   d  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_York)r4   r<   z2000-01-28 16:47:00z2000-01-29 16:48:00z2000-01-31 16:50:00r   r   r   r6   r4   )r   Zread_csvr   r&   r|   r   r	   r
   rB   rH   r   r   r   r   r   )rK   r   r   rr   rN   r   Z
res_valuesZ
exp_valuesr   r   r    test_groupby_multi_timezoneY  s4    




z'TestGroupBy.test_groupby_multi_timezonec           	      C   sd  ddddddg}t ddddddgdd |D tjdd	d
ddgd d}tjddddddgddd}tddgd dd}t||g}t ddddddgddddddgd|ddgd}|ddg	 }t
|| tj|dd}t tjdd	d
ddddddgd|d}tjdddgdd}t dddgdddgd|ddgd}|jdd	 }t
|| d S )Nr   r   r   r   r   c                 S   s   g | ]}t j|d dqS )Hr=   )r   ZPeriod)r   r   r   r   r    
<listcomp>  s     z;TestGroupBy.test_groupby_groups_periods.<locals>.<listcomp>r7   r:   r;   r   r   r   )r   periodr   r   r   r   rh   r   r   r   ra   r   r   r   r   r   r=   r5   r`   r   )r   rD   r   r   ZPeriodIndexr   r   r   r&   rG   rH   rI   r   r   r   r    test_groupby_groups_periods  sd    
	 z'TestGroupBy.test_groupby_groups_periodsc                 C   s   t ddg}|d d|d< t|d jjtjs6t|jdd	 }|d j}t|jtjsbt|d jdd	 }|j}t|jtjstd S )N)r        |>c )r   r   r   zM8[ns]r   r   )
r   view
issubclassr<   typerD   r   r)   r&   r   )rK   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   r_   c                 S   s   |   S r   )maxr   r   r   r    r     r   z9TestGroupBy.test_groupby_max_datetime64.<locals>.<lambda>)	r   r
   rD   r   r&   r   r   rH   r   )rK   r   rN   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   r_   r   r   )	r   ranger
   r&   Z	transformminr	   rH   r   rK   r   rr   rN   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   )
rD   randomseedr   randintr   r&   r   rH   r   )rK   r   Zdf1Zdf2r   r   r    $test_groupby_with_timezone_selection  s    z0TestGroupBy.test_groupby_with_timezone_selectionc                 C   sp   t dgttjgd}|d d jtjks2tt ddddgi}ttj|d< |d d jtjksltd S )Nr   )r   r   r   r   r   r   r   )r   r   nowpytzutctzinfor)   )rK   r   r   r   r    test_timezone_info  s
    zTestGroupBy.test_timezone_infoc                 C   sd   t dddgd tddddd}|d	j }tdddgtdddgd	d
dd}t|| d S )Nr   r   r   r   r7   T)r   r%   )r   r   r   r   r   r   )	r   r   r&   r   countr	   r   rH   r   r   r   r   r    test_datetime_count  s    "zTestGroupBy.test_datetime_countc                 C   s   t tjdddtjgtjtddtddtddtjgd}t|j|_d	|d
< ||j  }|d
}|d
}t	
| |  t	
| |  t	
| |  t	
| |  d S )Nz2015-07-24 10:10z2015-07-25 11:11z2015-07-23 12:12r   )daysr   r   )r   tdr_   group)r   rD   nanr   r   r   r   Znotnar&   rH   rI   r   r   r   last)rK   Zdf_testZdf_refZgrouped_testZgrouped_refr   r   r    $test_first_last_max_min_on_time_data  s0    

z0TestGroupBy.test_first_last_max_min_on_time_datac                 C   s|   t tdtjtdgdddg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notnullr6   
_with_freqrH   r   )rK   testr(   rr   rN   r   r   r    %test_nunique_with_timegrouper_and_nat  s    z1TestGroupBy.test_nunique_with_timegrouper_and_natc                 C   st   dddgt dddgdddd	d
gd}t|d}tdd}||}| }||g}| }t|| d S )NZshanghaiZbeijingz2017-08-09 13:32:23z2017-08-11 23:23:15z2017-08-11 22:23:15zdatetime64[ns]r;   r   r   r   )locationr   r   r   rt   r=   )r	   r   r@   r   r&   r   rH   rI   )rK   Z
data_framer(   r   rr   rN   r   r   r    !test_scalar_call_versus_list_call0  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%   r4   r5   r   r   r   )r   Zperiod_ranger	   r   r&   r6   r   rG   r   r4   rH   r   )rK   r   r6   Zperiod_seriesrr   rN   r   r   r    test_grouper_period_indexD  s        z%TestGroupBy.test_grouper_period_indexc                 C   sj   |}|d  dd }tddddd}t|d	gt| g}td
ddddddg|dd}t|| d S )Nr   c                 S   s   dt | iS )Nrd   )r'   r   r   r   r    r   Z  r   zRTestGroupBy.test_groupby_apply_timegrouper_with_nat_dict_returns.<locals>.<lambda>
2013-09-01
2013-10-01r"   r   rh   rd   r   r   r   r   )r   r   r   r   r'   r	   rH   r   )rK   r,   r+   resdtimirN   r   r   r    4test_groupby_apply_timegrouper_with_nat_dict_returnsR  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'   rC   rD   r   r   r   r   r    r   h  r   zTTestGroupBy.test_groupby_apply_timegrouper_with_nat_scalar_returns.<locals>.<lambda>r   r   r"   r   rh   r   r   r   )r   r   r	   rD   r   r   rH   r   )rK   r,   r+   r   r   rN   r   r   r    6test_groupby_apply_timegrouper_with_nat_scalar_returnsa  s    zBTestGroupBy.test_groupby_apply_timegrouper_with_nat_scalar_returnsc              	   C   s   |}t ddd}||}|jdks(t|j|jjdks@t|dd }t	dddd	d
ggt
tdgddt
dddd
dgddd}t|| d S )Nr   Z100Yr#   r   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>$   r7   r   r   r   r   r   r   r   r   r   )r   r&   Zngroupsr)   Z_selected_objZ	_get_axisZaxisZnlevelsr   r   r   r
   rH   rI   )rK   r!   r   r*   r+   r   rN   r   r   r    5test_groupby_apply_timegrouper_with_nat_apply_squeezes  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   rD   nanmeanvaluesr6   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	aggregaterD   r  rH   r   rI   )rK   r,   r+   rr   rN   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__rR   rl   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-   N   s<   0
  4
:B?	&=	
"r-   )"__doc__r   r   ior   ZnumpyrD   rl   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingrH   Zpandas.core.groupby.grouperr   Zpandas.core.groupby.opsr   Zfixturer!   r,   r-   r   r   r   r    <module>   s    (


