U
    sVc-                     @   sR  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Zm	Z	m
Z
 d dlmZ d dlmZ d dlmZ e	ejdeddd	d
Zdd Zdd Zdd Zdd Zejddejfdejfdejfddd fgdd Zdd Zdd Z ejj!d d!d"d# Z"ejd$d%i d fd%d&d id fd%d&d'iej#fd(i d'fd(d&d id'fd(d&d'iej#fgd)d* Z$ejd+d,ej#fd-ej#fd.d/d0gd1d2 Z%d3d4 Z&d5d6 Z'ejd7d%i d'd d'gfd%d&d id'd d'gfd%d&d'id'ej#d'gfd%d&d8iej#ej#ej#gfd(i d'd'd'gfd(d&d id'd'd'gfd(d&d'id'ej#d'gfd(d&d8iej#ej#ej#gfgd9d: Z(d;d< Z)dS )=    )datetime)methodcallerN)	DataFrameSeries	Timestamp)Grouper)
date_range  z1/1/2000periodsindexc                  C   sj   t dddd} t| }dd }||}tdd |}|jd|_|jd|_t|| d S )	NArightfreqlabelclosedc                 S   s   |   dd  S )N)Zsort_valuesx r   K/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/resample/test_time_grouper.pyf   s    ztest_apply.<locals>.fc                 S   s   | j S Nyearr   r   r   r   <lambda>       ztest_apply.<locals>.<lambda>r   )r   test_seriesgroupbyapplyr   Z	dropleveltmassert_series_equal)groupergroupedr   Zappliedexpectedr   r   r   
test_apply   s    

r'   c                  C   sx   t jtd d d< tdd  } tdddd}t| }|j| _t||  t	d }|j| _t||  d S )N   c                 S   s   | j S r   r   r   r   r   r   r   '   r   ztest_count.<locals>.<lambda>r   r   r   )
npnanr   r    countr   r   r"   r#   resample)r&   r$   resultr   r   r   
test_count$   s    r.   c                  C   s@   t jddd } t dd tj}| j|_t| | d S )Nr   r   )r   c                 S   s   | j S r   r   r   r   r   r   r   6   r   z&test_numpy_reduction.<locals>.<lambda>)	r   r,   prodr    Zaggr)   r   r"   r#   r-   r&   r   r   r   test_numpy_reduction3   s    r1   c            	      C   sr   d} t dd| d}tddd|d}td	d
}||\}}}|j|dd}dd }||}t|j|j d S )Nr	   
2000-01-01D)startr   r         )opencloser   Mr   F)Z
group_keysc                 S   s   | d | d  S )Nr8   r7   r   )dfr   r   r   r   H   s    ztest_apply_iteration.<locals>.f)	r   r   r   Z_get_grouperr    r!   r"   Zassert_index_equalr   )	Nindr;   tg_r$   r%   r   r-   r   r   r   test_apply_iteration<   s    

r@   z
name, funcZ
Int64IndexZIndexZFloat64Index
MultiIndexc                 C   s   t | dS )Nr6   )r"   ZmakeCustomIndex)mr   r   r   r   V   r   r   c              	   C   s^   d}||}t dtj|i|d}d|  d}tjt|d |tdd W 5 Q R X d S )	Nr6   ar   zVOnly valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of ''matchr3   r:   )	r   r)   randomrandnpytestZraises	TypeErrorr    r   )namefuncnr   r;   msgr   r   r   test_fails_on_no_datetime_indexP   s    

rO   c                  C   s.  d} t j| d}t|ddddgd}tdd	d	tdd	d
tdd	dtdd	dtdd	dgd |d< |tddd}t|	tdd	d	|d d d  t|	tdd	d
|d	d d  t|	tdd	d|d
d d  t|	tdd	d|dd d  t|	tdd	d|dd d  d S )N      r   BCr3   columns  r5   r6   r(      keyrX   r   )
r)   rG   rH   r   r   r    r   r"   assert_frame_equalZ	get_group)rM   datar;   r%   r   r   r   test_aaa_group_orderf   s"    




$$$$r\   c                 C   s   t jdd}t|ddddgd}dd	d
ddgd |d< t|ddddgd}tdddtddd	tddd
tdddtdddgd |d< |d}|tddd}t||  }t||  }tddddd|_	t
|| dS z?Check TimeGrouper's aggregation is identical as normal groupby.rP   rQ   r   rR   rS   r3   rT   r5   r6   r(   rW   rX   rV   rY   
2013-01-01r4   r   r   rK   N)r)   rG   rH   r   r   r    r   getattrr   r   r"   Zassert_equal)Zresample_methodr[   	normal_dfdt_dfnormal_grouped
dt_groupedr&   	dt_resultr   r   r   test_aggregate_normal|   s$    





rf   z7if TimeGrouper is used included, 'nth' doesn't work yet)reasonc                  C   s   t jdd} t| ddddgd}dd	d
ddgd |d< t| ddddgd}tdddtddd	tddd
tdddtdddgd |d< |d}|tddd}|d
}tddddd|_	|d
}t
|| dS r]   )r)   rG   rH   r   r   r    r   Znthr   r   r"   rZ   )r[   ra   rb   rc   rd   r&   re   r   r   r   test_aggregate_nth   s$    







rh   zmethod, method_args, unitsumZ	min_countr5   r/   c                 C   sj   t dgd tjgd  tdddd}t| f||d}t d|gtjd	d
gddd}t	|| d S )Nr   r6   2017rQ   r
   r   Z2dg        z
2017-01-01z
2017-01-03Z2Dr:   )
r   r)   r*   r   r   r,   pdDatetimeIndexr"   r#   )methodmethod_argsunitsr-   r&   r   r   r   !test_resample_entirely_nat_window   s    & rq   zfunc, fill_valueminmax)ri   r   )r/   r5   )r+   r   c                 C   s8  d}t j|dd}t|ddddgd}d	d
t jddgd |d< t|ddddgd}tdd	d	tdd	d
tjtdd	dtdd	dgd |d< |	d}|	t
ddd}t||  }t||  }	t|gd gdgddddgd}
t||
g}| }tddddd}|d |_t||	 |	jjdks4td S )NrP   rQ   int64r   rR   rS   r3   rT   r5   r6   rW   rX   rV   rY   r(   )r   rU   r^   r_   )r)   rG   rH   astyper   r*   r   rk   NaTr    r   r`   concat
sort_indexr   
_with_freqr   r"   rZ   rK   AssertionError)rL   Z
fill_valuerM   r[   ra   rb   rc   rd   normal_resultre   padr&   Zdtir   r   r   test_aggregate_with_nat   s0    	




 r}   c            
      C   s  d} t j| dd}t|ddddgd}d	d
t jddgd |d< t|ddddgd}tdd	d	tdd	d
tjtdd	dtdd	dgd |d< |	d}|	t
ddd}| }| }tdgdgd}t||g}	|	 }	tdddddd |	_t|	| |jjdkstd S )NrP   rQ   rt   r   rR   rS   r3   rT   r5   r6   rW   rX   rV   rY   r   r(   r   r^   r_   )r)   rG   rH   ru   r   r*   r   rk   rv   r    r   sizer   rw   rx   r   ry   r   r"   r#   rK   rz   )
rM   r[   ra   rb   rc   rd   r{   re   r|   r&   r   r   r   test_aggregate_with_nat_size   s<    




   r   c                  C   sF   t tddd} d}| |ks tt tdddd} d}| |ksBtd S )Nr   HrY   zTimeGrouper(key='A', freq=<Hour>, axis=0, sort=True, dropna=True, closed='left', label='left', how='mean', convention='e', origin='start_day')r2   )rX   r   originzTimeGrouper(key='A', freq=<Hour>, axis=0, sort=True, dropna=True, closed='left', label='left', how='mean', convention='e', origin=Timestamp('2000-01-01 00:00:00')))reprr   rz   r0   r   r   r   	test_repr	  s    r   z$method, method_args, expected_valuesr6   c                 C   s`   t dtddddd}|d}tjdd	d
gdd}t| f||}t ||d}t|| d S )Nr5   rj   r6   r   r   r   r   Z30Tz2017-01-01T00:00:00z2017-01-01T00:30:00z2017-01-01T01:00:00r:   )r   r   r,   rk   rl   r   r"   r#   )rm   rn   Zexpected_valuesrp   Z	resampledr   r-   r&   r   r   r   test_upsample_sum  s    
r   c                  C   sf  dddgdddgd} t | }tddd	d
|d< |dddjdd}d}tjt|d t	j
jddtdfdtdfdtdfdtdfdtdfdtdfdtdfdtdfdtdfdtdfdtdfdtdfdtdfdtd fdtdfgddgd!}W 5 Q R X t d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1gd2gd3 dg d|d4}t|| d S )5N
      	   2   <   )Zpricevolumez
01/01/2018r(   Wr   Zweek_startingr   Z1DZlinear)rm   z containing strings is deprecatedrE   )r   z
2018-01-07z
2018-01-08z
2018-01-09z
2018-01-10z
2018-01-11z
2018-01-12z
2018-01-13z
2018-01-14z
2018-01-15z
2018-01-16z
2018-01-17z
2018-01-18z
2018-01-19z
2018-01-20z
2018-01-21)namesg      $@gm۶m#@gn۶m۶#@g%I$I#@g۶m۶m#@g$I$I#@gI$I$#@g      #@gm۶m"@gn۶m۶"@g%I$I"@g۶m۶m"@g$I$I"@gI$I$"@g      "@g      &@g      I@   )r[   r   )r   r   Z	set_indexr    r,   Zinterpolater"   Zassert_produces_warningFutureWarningrk   rA   from_tuplesr   rZ   )dr;   r-   rN   Zexpected_indr&   r   r   r   !test_groupby_resample_interpolate5  sp    















r   )*r   operatorr   Znumpyr)   rI   Zpandasrk   r   r   r   Zpandas._testingZ_testingr"   Zpandas.core.groupby.grouperr   Zpandas.core.indexes.datetimesr   rG   rH   r   r'   r.   r1   r@   markZparametrizeZmakeIntIndexZmakeStringIndexZmakeFloatIndexrO   r\   rf   Zxfailrh   r*   rq   r}   r   r   r   r   r   r   r   r   <module>   st   	
	


	
" 
