U
    Mfk                     @   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Z	ddl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 G dd	 d	ZdS )
z5 test with the TimeGrouper / grouping with datetimes     )datetime)StringION)	DataFrameIndex
MultiIndexSeries	Timestamp
date_range)Grouper)
BinGrouperc                   @   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d3S )4TestGroupByc           	      C   sF  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	itddddddd}tjdddgdd|jd	ddgd	f< |	d
 }t|| | }|tjdd
 }t|| |tjdd
 }t|| qd S )NzCarl Carl Carl Carl Joe Carl            	        r   
               BuyerQuantityDater   byr   Z20130901Z20131205Z5Dleft)freqnameclosedindex      int64dtyper    )r   splitr   sort_values	set_indexr	   nparrayilocresamplesumtmassert_frame_equal
sort_indexgroupbypdr
   )	selfdf_originaldf_reordereddfexpectedresult1	df_sortedresult2Zresult3 r@   I/tmp/pip-unpacked-wheel-izj5yhnl/pandas/tests/groupby/test_timegrouper.pytest_groupby_with_timegrouper   sB        $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 j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Branchr   r   r   r   Fr   Z	ascendingr   ZdropZ6Mr*   )r7   r   r+   r   r,   r-   r6   r
   Z
group_keysAssertionError
isinstancegrouperr   groupsdictlen)r8   rC   r;   grK   r@   r@   rA   %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}|tjdddg }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jdddg }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jd"ddg }t	
|| |tjd#ddg }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jd#dd$dg }t	
|| tjtd%d&" |tjd#d'd$dg  W 5 Q R X |d}|tjd#dd(dg }t	
|| |tjd#d
d(dg }t	
|| tt" |tjd#d'd(dg  W 5 Q R X | }|jtjd |d< |tjd#dd$dg }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t$ |tjd#ddd+dg  W 5 Q R X t dgtdddd
d
gd,d}|tjd#d }t	
|| |tjd#dg }t	
|| t dgtdd)d*d
d
gd,d}|tjd#dd$ }t	
|| |tjd#dd$g }t	
|| qjd S )-NzA A A A A A A Bz$Carl Mark Carl Carl Joe Joe Joe Carlr   r   r   rD   r   r   r   r   r   r   r   r   r   rE   r   r   FrF   zCarl Joe Markr      r   r   Ar*   zCarl Mark Carl Joe   Z6MSzCarl Joe Mark Carl Joer&      Z1DZ1Mr    keyz#'The grouper name foo is not found')matchZfoo)r    level      )r    rU   rW   )r   r   )r   r+   r   r-   r,   r6   r7   r
   r2   r3   r4   reset_indexpytestZraisesKeyError
ValueErrorcopyr$   offsetsZMonthEnd)r8   r9   r>   r;   r<   resultr@   r@   rA    test_timegrouper_with_reg_groups^   s   


&
&
z,TestGroupBy.test_timegrouper_with_reg_groupsr    DMrQ   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j|d#dgd   }t|| |tj|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   r%   '   r   -   "   )dateuser_id
whole_costZcost1rj   rk   rl   )Z	min_countr'   r*   )r   r7   to_datetimer-   r6   r1   r2   ZdropnaZreorder_levelsr5   Zastyper!   r
   r3   assert_series_equal)r8   r    r;   r<   r=   r?   r@   r@   rA   %test_timegrouper_with_reg_groups_freq  sn    #&
	z1TestGroupBy.test_timegrouper_with_reg_groups_freqc                 C   s4  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 ]L}|tjddd}t||D ](\}}t	|}	|
|	}
t|
| qq|jdg |jdg |jdg g}dddg}||fD ]\}|dtjdddg}t||D ]2\\}}}t	|}	|
||	f}
t|
| qbq<|d}|jdd}|jd	ddg |jddg |jdg g}||fD ]N}|tj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   r   rS   
2013-09-30
2013-10-31
2013-12-31rc   r   rT   )Joerp   )ZCarlrq   )rs   rr   r   r*   )r   r+   r   r,   r0   r6   r7   r
   zipr   	get_groupr3   r4   r-   )r8   r9   r:   expected_listZdt_listr;   groupedtr<   dtr`   Zg_listbr@   r@   rA   test_timegrouper_get_groupC  s^    












z&TestGroupBy.test_timegrouper_get_groupc                 C   s   t ddgddgd}| }t |d |d< dd }|t jdd	|}|t jd
dd|}t|j	dd|j	dd d S )N
10/10/2000
11/10/2000r   r   rj   valuerj   c                 S   s   t | d  gdS )Nr   )r2   )r7   r   r2   xr@   r@   rA   sumfunc_series  s    zMTestGroupBy.test_timegrouper_apply_return_type_series.<locals>.sumfunc_seriesrU   rc   rT   TrG   )
r7   r   r^   rm   r6   r
   applyr3   r4   rZ   )r8   r;   df_dtr   r<   r`   r@   r@   rA   )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 jdd	|}|td
dd|}t|j	dd|j	dd d S )Nr|   r}   r   r   r~   rj   c                 S   s
   | j  S N)r   r2   r   r@   r@   rA   sumfunc_value  s    zKTestGroupBy.test_timegrouper_apply_return_type_value.<locals>.sumfunc_valuer   rc   rT   TrG   )
r7   r   r^   rm   r6   r
   r   r3   rn   rZ   )r8   r;   r   r   r<   r`   r@   r@   rA   (test_timegrouper_apply_return_type_value  s    
 
z4TestGroupBy.test_timegrouper_apply_return_type_valuec                 C   s@  d}t jdd|d}tt|t|d|d}|dd }|j}tt|	 d	 t
s`tt jd
ddd}t j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 ]\}
||
}|j|
df |j|
d f gg}t j|
gdd!}t j|td"|d#}	t||	 qd S )$Ni  z2012/1/1Z5min)startr    periods)highlowr#   c                 S   s   t | j| j| jS r   )r   yearmonthdayr   r@   r@   rA   <lambda>      z?TestGroupBy.test_groupby_groups_datetimeindex.<locals>.<lambda>r   z
2015/01/01r   rj   )r   r!   r&   rR   rD   r   r   r   r   rS   rQ   BrW   z
2015-01-05z
2015-01-04z
2015-01-03z
2015-01-02z
2015-01-01c                 S   s$   i | ]}t |t j|gd dqS )rj   r!   )r7   r   DatetimeIndex).0rj   r@   r@   rA   
<dictcomp>  s     zATestGroupBy.test_groupby_groups_datetimeindex.<locals>.<dictcomp>rQ   r   r   ZAB)columnsr$   )r7   r	   r   r.   aranger6   rK   rI   listkeysr   rH   r3   Zassert_dict_equalru   locr   r4   )r8   r   indr;   rw   rK   r$   r`   datesr<   rj   dataZexpected_indexr@   r@   rA   !test_groupby_groups_datetimeindex  s0     (
z-TestGroupBy.test_groupby_groups_datetimeindexc           	      C   sp  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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 ) N2011-07-19 07:00:002011-07-19 08:00:002011-07-19 09:00:00arz   r&   r'   r(   r   r   r   )labelr   value1value2r   c                 S   s   t | ddS )N
US/Pacifictz)r   )dr@   r@   rA   r     r   zBTestGroupBy.test_groupby_groups_datetimeindex_tz.<locals>.<lambda>r   )r   r!   r   r   r   rS   r   r   r   r   r   r$   r   z
Asia/Tokyor   r#   rR   r   )r   r.   r   r   r7   r   r   r   from_arraysr6   r2   r3   r4   	r8   r   r;   Zexp_idx1Zexp_idx2Zexp_idxr<   r`   Zdidxr@   r@   rA   $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   rj   )r   )r   r.   
datetime64r6   firstr   rH   )r8   r;   r`   r@   r@   rA   &test_frame_datetime64_handling_groupby  s    z2TestGroupBy.test_frame_datetime64_handling_groupbyc              	   C   s   d}t jt|d dddg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   rj   r   )headernamesc                 S   s   t | j| jS r   )r7   rm   ry   tz_localizer!   r   r@   r@   rA   r     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)r!   r)   z2000-01-28 16:47:00z2000-01-29 16:48:00z2000-01-31 16:50:00r   r   r   r$   r!   )r7   Zread_csvr   r6   rj   r   r   r   objectr3   rn   ru   rm   ry   r   )r8   r   r;   r`   r<   r   Z
res_valuesZ
exp_valuesr@   r@   rA   test_groupby_multi_timezone  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   rz   c                 S   s   g | ]}t j|d dqS )Hr*   )r7   ZPeriod)r   r   r@   r@   rA   
<listcomp>A  s     z;TestGroupBy.test_groupby_groups_periods.<locals>.<listcomp>r&   r'   r(   r   r   r   )r   periodr   r   r   r   )r    r!   r   r   r   rS   r   r   r   r   r   r*   r#   rR   r   )r   r.   r   r7   ZPeriodIndexr   r   r   r6   r2   r3   r4   r   r@   r@   rA   test_groupby_groups_periods5  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)   typer.   r   rH   r6   r   )r8   r;   r`   Zgot_dtr@   r@   rA   test_groupby_first_datetime64r  s    
z)TestGroupBy.test_groupby_first_datetime64c                 C   sT   t ttdtdd}|dd dd }|dd  }t	|| d S )NZ20130101r   r   rQ   c                 S   s   |   S r   )maxr   r@   r@   rA   r     r   z9TestGroupBy.test_groupby_max_datetime64.<locals>.<lambda>)
r   rL   r   r.   r   r6   r   r   r3   rn   )r8   r;   r<   r`   r@   r@   rA   test_groupby_max_datetime64  s    z'TestGroupBy.test_groupby_max_datetime64c                 C   sZ   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   rQ   r   r   )
r   ranger7   r   r6   Z	transformminr   r3   rn   r8   r;   r`   r<   r@   r@   rA   test_groupby_datetime64_32_bit  s    z*TestGroupBy.test_groupby_datetime64_32_bitc              	   C   sl   t jd tt jjddddtj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   )r.   randomseedr7   r   randintr	   r6   r   r3   rn   )r8   r;   Zdf1Zdf2r@   r@   rA   $test_groupby_with_timezone_selection  s       z0TestGroupBy.test_groupby_with_timezone_selectionc                 C   st   t dgttjgd}|d d jtjks4tt ddddgi}ttj|d< |d d jtjksptd S )Nr   )r   rz   rz   r   r   r   r   )r7   r   r   nowpytzutctzinforH   )r8   r;   r@   r@   rA   test_timezone_info  s
    zTestGroupBy.test_timezone_infoc                 C   sf   t dddgd tj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   r&   T)r   r    )r   r   r   r   r   r   )
r   r7   r	   r6   r   countr   r   r3   rn   r   r@   r@   rA   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   )ry   tdrQ   group)r   r   r   r.   nanr7   rm   ry   Znotnar6   r3   r4   r   r   r   last)r8   r   Zdf_testZdf_refZgrouped_testZgrouped_refr@   r@   rA   $test_first_last_max_min_on_time_data  s(    "

z0TestGroupBy.test_first_last_max_min_on_time_datac                 C   sr   t tdt jtdgdddgd}t jddd	}||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   h)rU   r    r   )r7   r   r   ZNaTr
   r6   Znuniquer   Znotnullr3   rn   )r8   testrJ   r`   r<   r@   r@   rA   %test_nunique_with_timegrouper_and_nat  s    z1TestGroupBy.test_nunique_with_timegrouper_and_natc                 C   sz   dddgt jdddgdddd	d
gd}t |d}t j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   rb   r*   )	r7   r   r   r-   r
   r6   r   r3   r4   )r8   Z
data_framerJ   rw   r`   r<   r@   r@   rA   !test_scalar_call_versus_list_call  s    
z-TestGroupBy.test_scalar_call_versus_list_callN)__name__
__module____qualname__rB   r[   markZparametrizerO   ra   ro   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r@   r@   r@   rA   r      s0   +
  )
<B?	'=	
r   )__doc__r   ior   Znumpyr.   r[   r   Zpandasr7   r   r   r   r   r   r	   Zpandas._testingZ_testingr3   Zpandas.core.groupby.grouperr
   Zpandas.core.groupby.opsr   r   r@   r@   r@   rA   <module>   s    