U
    b'Y                     @   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 d dl	m
Z d dlmZ ee ddde ddddd	ZeejeeeZeeeeeed
Zejdd Zdd Zdd Zdd Zdd Zdd Zdd Zejddgddg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(d0d1 Z)d2d3 Z*d4d5 Z+ejd6d7gd8d9gdd:id;d<d=gd>d? Z,d@dA Z-dBdC Z.dDdE Z/ejdFdGdHdIdJdKdLdMdNgdOdP Z0dQdR Z1ejdSdTdUdVd dWdXdYdZd[d\d]d^g	d_d`dd d\dadbgdcddf
dedfdgdgdh dVd`diddXdjdXdjdXdjdXdjdXg
dkdf
dTdUdVd dWdXdYdZd[d\d]d^g	d_d`dld d\dadmd^gdndjf
dTdUdVd dWdXdYdZd[d\d]d^g	d_doddWd[dpdpgdqddf
gdrds Z2dS )t    )datetimeN)	DataFrameNamedAggSeries)
date_range     
   ZMin)startendfreq)ABCc                   C   s   t  S N)_test_framecopy r   r   K/tmp/pip-unpacked-wheel-xg7vt6ln/pandas/tests/resample/test_resample_api.py
test_frame   s    r   c                  C   s<   t d} dt| kstt jddd} dt| ks8td S )NHziDatetimeIndexResampler [freq=<Hour>, axis=0, closed=left, label=left, convention=start, origin=start_day]z
2000-01-01)originzsDatetimeIndexResampler [freq=<Hour>, axis=0, closed=left, label=left, convention=start, origin=2000-01-01 00:00:00])test_seriesresamplestrAssertionError)rr   r   r   test_str   s    
r   c                  C   sh   t d} |  }t|ts tt|dks0tt  d} |  }t|tsTtt|dksdtd S )Nr      )	r   r   mean
isinstancer   r   lenZto_framer   )r   resultr   r   r   test_api)   s    
r#   c                  C   s   t tddddddddgddd	d
gdd} tdd
d tdd
d  }tjjdgd
 dgd
  |gddgd}t ddgd	 dg d	gd	  d
g i|d}| ddd dg }t	
|| d S )N
2016-01-01   W)r
   periodsr   r                  )dategroupvalr-   z
2016-01-03r'   z
2016-01-17r.   namesr/   indexc                 S   s   |  d S )N1D)r   ffillxr   r   r   <lambda>J       z+test_groupby_resample_api.<locals>.<lambda>)r   r   	set_indextolistpd
MultiIndexfrom_arraysgroupbyapplytmassert_frame_equal)dfir4   expectedr"   r   r   r   test_groupby_resample_api6   s     


(,rG   c                  C   sj   t ddgd tdddtjdd} | dd	d
 }| d	jd
dd }t	
|| d S )Nr   r   r)   r$   r	   r0   )keydatesvaluesrI   rH   Don)r   r   nprandomrandnr;   r@   r   r   rB   rC   )rD   rF   r"   r   r   r   test_groupby_resample_on_apiN   s    


rQ   c                 C   sl   t d}| |  }|dd }t|| | d}| |  }|dd }t|| d S )Nr   c                 S   s   |   |   S r   maxr   r7   r   r   r   r9   g   r:   ztest_pipe.<locals>.<lambda>c                 S   s   |   |   S r   rR   r7   r   r   r   r9   m   r:   )r   r   rS   r   piperB   assert_series_equalrC   )r   r   rF   r"   r   r   r   	test_pipea   s    

rV   c                 C   s   |  d}t|jj| j |  dd }|jj| jd ks@t|  dd }t|jj| jddg  |  dd }t|jj| jddg  d S )Nr   r   r   r   r   r   )r   rB   Zassert_index_equalZ_selected_objcolumnsnamer   r   r   r   r   r   test_getitemq   s    
r[   rH   rK   r   c              	   C   s4   | d}d}tjt|d ||   W 5 Q R X d S )Nr   z^\"Columns not found: 'D'\"$match)r   pytestraisesKeyError)rH   r   gmsgr   r   r   test_select_bad_cols   s    
rc   c                 C   s(   |  d}t|j |d   d S )Nr   r   )r   rB   rU   r   sumrZ   r   r   r   test_attribute_access   s    
re   c                  C   sX   dD ]N} t dddd}ttt||d}|d}t||  |  t||  qd S )N)groupsZngroupsindices1/1/2012d   Sr'   r   r3   Z30s)r   r   rN   aranger!   r   getattrr   )attrrngtsrsr   r   r   test_api_compat_before_use   s    

rr   c                 C   sz   | }d|d< | d}|ddg  }tj|j |j gdd}t|| |dddg  }| }t|| d S )	NZfoorK   r   r   r   r   Zaxisr   )r   rd   r=   concatr   r   rB   rC   )r   rD   r   r"   rF   r   r   r   tests_skip_nuisance   s    
ru   c                  C   sf   t dddd} ttjt| dd| d}|d }td	d
dddgt ddddd}t|| d S )Nrh   ri   rj   rk   int64dtyper3   Z20sr      (   <   P   2012-01-01 00:00:00r)   r   r'   )	r   r   rN   rl   r!   r   asfreqrB   rU   )ro   rp   r"   rF   r   r   r   'test_downsample_but_actually_upsampling   s    r   c                  C   s   t dddd} ttt| | d}|jdddd	d
ddddddg }|d  }tddddddddddddddddgt	j
dddddd d!d"d#d$d%d&d'd(d)d*gd+d,d-d}t|| d S ).Nrh   ri   rj   rk   r3   r   r   r(      r)   r+                  Z2sg      ?g      @g      @g      @g      &@g      .@g      0@g      9@g      >@r}   z2012-01-01 00:00:02z2012-01-01 00:00:04z2012-01-01 00:00:06z2012-01-01 00:00:08z2012-01-01 00:00:10z2012-01-01 00:00:12z2012-01-01 00:00:14z2012-01-01 00:00:16z2012-01-01 00:00:18z2012-01-01 00:00:20z2012-01-01 00:00:22z2012-01-01 00:00:24z2012-01-01 00:00:26z2012-01-01 00:00:28z2012-01-01 00:00:30zdatetime64[ns]2S)rx   r   )r   r   rN   rl   r!   Zilocr   r   r6   r=   ZDatetimeIndexrB   rU   )ro   rp   Zts2r"   rF   r   r   r   *test_combined_up_downsampling_of_irregular   sZ     *r   c                  C   s<   t d} t tjddd}| d}t|| d S )N20minr   r   )r   r   r@   r=   GrouperZ	transformrB   rU   )r   rF   r"   r   r   r   test_transform   s    

r   c               	   C   s   t dddd} ttjt| dd| d}|d}| }|jd	d
}t	|| |
 }|jdd
}t	|| d}tjt|d |d W 5 Q R X d S )Nrh   r	   r   rk   rv   rw   r3   sr6   )methodbfillzTInvalid fill method\. Expecting pad \(ffill\), backfill \(bfill\) or nearest\. Got 0r\   r   )r   r   rN   rl   r!   r   r6   ZfillnarB   rU   r   r^   r_   
ValueError)ro   rp   r   rF   r"   rb   r   r   r   test_fillna   s    
r   c                  C   sH   t d} t tjdd}|| fD ]}|dd }t|t  q$d S )Nr   r   c                 S   s   | S r   r   r7   r   r   r   r9     r:   z0test_apply_without_aggregation.<locals>.<lambda>)r   r   r@   r=   r   rA   rB   rU   )r   ra   tr"   r   r   r   test_apply_without_aggregation  s
    
r   c               	   C   sd   t tjddtdddddddgd	} | d
}d}tjt|d |	ddd W 5 Q R X d S )N  r   rh   rj   r~   r   r   r   r4   rX   3Tz'Column\(s\) \['r1', 'r2'\] do not existr\   r   rd   r1r2
r   rN   rO   rP   r   r   r^   r_   r`   aggrD   r   rb   r   r   r   test_agg_consistency  s    
r   c               	   C   sb   t tjddtddddddgd} | d	}d
}tjt|d |	ddd W 5 Q R X d S )Nr   r(   rh   rj   r~   r   ar   r   z#Column\(s\) \[2, 'b'\] do not existr\   r   rd   )r(   br   r   r   r   r   'test_agg_consistency_int_str_column_mix0  s    
r   c               
   C   s  t jd ttdddtddddd} d| _tt jddtd	| d
}|	 }|
 }tjjtd|jgddgd|_|d}||jddd|jddd|tjddg}|d  }|d  }|d  }|d  }	|d  }
|d  }tj|||	|
gdd}tjddgddgg|_|D ]X}||dd krJtnd }tj|dd |t jt jg}W 5 Q R X t|| q0tj||
gdd}|D ]}|t jt jd}tj||dd |jdt jfdt jfd}tj||dd |jtdt jtdt jd}tj||dd qtj||gdd}tjddg|_|D ]$}|dddgi}t|| qLtj||gdd}ddg|_|D ]B}|d ddg}t|| |d jddd}t|| qd}|D ]:}t j!tj"j#j$|d |ddddi W 5 Q R X qtj|||	|gdd}tjdd d!d"g|_|D ]B}t j!tj"j#j$|d" |dddddd#d W 5 Q R X qJtj|||	|
gdd}tjddd$d%g|_|D ].}|ddgddgd}tj||dd qtj|||	|gdd}tjd&d'd(d)g|_d S )*N  r   r   r	   rK   r   r-   r(   ABrX   r4   r4   r1   2DrL   levelr   r   rs   r   stdr   z)\['date'\] did not aggregate successfullyr\   rW   TZ
check_like)r   r   r   r   rd   )r   rd   nested renamer is not supportedr   rd   )r   mean2)r   sum2)r   r   r   r   r   r   )r   r   r   )r   r   rd   )r   r   r   )r   r   rd   )%rN   rO   seedr   r   rY   r   randlistreset_indexr   r=   r>   r?   ranger4   r   r@   r   r   r   rd   rt   Zfrom_productrX   FutureWarningrB   Zassert_produces_warning	aggregaterC   r   from_tuplesr^   r_   corebaseSpecificationError)r4   rD   df_coldf_multr   casesZa_meanZa_stdZa_sumZb_meanZb_stdZb_sumrF   r   warnr"   rb   r   r   r   test_aggC  s     

"

r   c               
   C   s  t jd ttdddtddddd} d| _tt jddtd	| d
}|	 }|
 }tjjtd|jgddgd|_|d}||jddd|jddd|tjddg}|D ]}|t jdd d}|d dd }tj|d  |gdd}	tj||	dd |jdt jfddd fd}tj||	dd |jtdt jtddd d}tj||	dd qtj|d  |d  |d  |d  gdd}	tjddddg|	_d}
|D ]}tjt|
d " |ddg t jt jd! W 5 Q R X tjt|
d ( |ddg jd"t jfd#t jfd W 5 Q R X tjt|
d , |ddg jtd"t jtd#t jd W 5 Q R X qtj|d  |d   |d  |d   gdd}	tjd$d%d&d'g|	_|D ].}|d(d)gd*d)gd}tj||	dd q|D ]6}|ddg d(d)gd*d)gd}tj||	dd qd+}
|D ]x}tjtj!j"j#|
d  |d dd(d)gi W 5 Q R X tjtj!j"j#|
d " |d d(d)gd*d)gd W 5 Q R X q>d,}
|D ]>}tjt|
d $ |dg d(d)gd*d)gd W 5 Q R X qd S )-Nr   r   r   r	   rK   r   r-   r(   r   r   r4   r1   r   rL   r   c                 S   s   t j| ddS Nr   )ZddofrN   r   r7   r   r   r   r9     r:   ztest_agg_misc.<locals>.<lambda>rW   r   c                 S   s   t j| ddS r   r   r7   r   r   r   r9     r:   r   rs   Tr   c                 S   s   t j| ddS r   r   r7   r   r   r   r9     r:   c                 S   s   t j| ddS r   r   r7   r   r   r   r9     r:   )result1r   )r   r   )result2r   )r   r   z1Column\(s\) \['result1', 'result2'\] do not existr\   )r   r   r   r   r   r   r   r   rd   r   r   r   z Column\(s\) \['B'\] do not exist)$rN   rO   r   r   r   rY   r   r   r   r   r   r=   r>   r?   r   r4   r   r@   r   r   rd   rA   rt   rB   rC   r   r   r   rX   r^   r_   r`   r   r   r   r   )r4   rD   r   r   r   r   r   r"   ZrcustomrF   rb   r   r   r   test_agg_misc  s     

 * 
&,
 
* 
  *r   funcminr   rS   rd   prodmedianrW   c              	   C   s   t jd ttdddtddddd}d|_tt jddtd	|d
j	}|j
ddd}tjtdd ||  W 5 Q R X d S )Nr   r   r   r	   rK   r   r-   r(   r   r   Mrs   z"axis other than 0 is not supportedr\   )rN   rO   r   r   r   rY   r   r   r   Tr   r^   r_   NotImplementedErrorr   )r   r4   rD   resr   r   r   test_multi_agg_axis_1_raises  s    r   c               
   C   s  t jd ttdddtddddd} d| _tt jddtd	| d
}|	 }|
 }tjjtd|jgddgd|_|d}||jddd|jddd|tjddg}d}|D ]D}tjtjjj|d& |dddgidddgid W 5 Q R X q|D ]}tjtjjj|d. |ddg dddgidddgid W 5 Q R X tjtjjj|d& |dddgidddgid W 5 Q R X qd S )Nr   r   r   r	   rK   r   r-   r(   r   r   r4   r1   r   rL   r   r   r\   r   r   rd   r   r   rar   rbrW   )rN   rO   r   r   r   rY   r   r   r   r   r   r=   r>   r?   r   r4   r   r@   r   r^   r_   r   r   r   r   r   )r4   rD   r   r   r   r   rb   r   r   r   r   test_agg_nested_dicts  s6     
,r   c               	   C   s   t dddddddt dddddddt ddddd	d
dg} t| d}d}tjt|d$ |ddgdgdgd W 5 Q R X d S )Ni  r*   r   r   g      ?g       @)dtr8   yr(   g      @g      ?r   z Column\(s\) \['z'\] do not existr\   Z30Tr   r   rd   )r8   r   z)r   r   r;   r^   r_   r`   r   r   )datarD   rb   r   r   r   &test_try_aggregate_non_existing_column5  s    r   c               	   C   s  t tdddtddddd} tjt| tjd}t| |dtjj	|| gdd	gd
d}td|i| d}d}t
jt|d |jddd W 5 Q R X d}t
jt|d |jddd	d W 5 Q R X d}t
jt|d |jdddgd W 5 Q R X d}t
jt|d |jdddgd W 5 Q R X d}t
jt|d |jdd	d  W 5 Q R X t
jt|d |jddd  W 5 Q R X |d }d|j_t||jddd  d	|j_t||jdd	d  d S )Nr   r   r	   rK   r   rw   )r-   r   vdr1   r3   r   zaOnly valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index'r\   r   r   z2The Grouper cannot specify both a key and a level!r-   )rM   r   zunhashable type: 'list'rL   z#\"Level \['a', 'date'\] not found\"z|Upsampling from level= or on= selection is not supported, use \.set_index\(\.\.\.\) to explicitly set index to datetime-like)r   r   rN   rl   r!   rv   r   r=   r>   r?   r^   r_   	TypeErrorr   r   r`   r   rd   r4   rY   rB   rC   )r4   ro   rD   Zdf_exprb   expr   r   r   test_selection_api_validationD  s>    r   col_namet2Zt2xZt2qZT_2MZt2pZt2mZt2m1ZT2Mc                 C   s   t ttdtddddd| gd}|ddg}t d	d
dgtdddddtj| gdggdgdggdd}t	|| d S )N   z
2017-01-01Z15minzEurope/Berlin)r
   r   r'   tzr   Z1dr   g     G@g     a@g     ph@rK   r   r   )levelscodes)
r   r   r   r   r   r   r=   r>   rB   rC   )r   rD   r"   rF   r   r   r   *test_agg_with_datetime_index_list_agg_funcu  s"    	
   r   c                  C   s   t dddd} t| }|jdd t|| d}|d}ttd	td	g| d d d
 d}|d}t	
|| |d}t	
|| |d}t	
|| |d}t	
|| d S )Nz
2020-01-01z
2020-01-02Z1hr   F)writer3   r5   r      lastfirstrS   r   )r   rN   Z
zeros_likeZsetflagsr   r   r=   Z	Timestampr   rB   rU   )r4   ZarrZserrq   rF   r"   r   r   r   test_resample_agg_readonly  s    

&



r   zLstart,end,freq,data,resample_freq,origin,closed,exp_data,exp_end,exp_periodsz2000-10-01 23:30:00z2000-10-02 00:26:00Z7minr   r*   	      r         r   Z17minr      ?   z20001002 00:26:00r%   z20200101 8:26:35z20200101 9:31:58Z77s3   rightr)   z2020-01-01 09:30:45left'   z20001002 00:43:00Zend_day-   z2000-10-02 00:29:00c
                 C   sT   t | ||d}
t||
d}|j|||d }t|t |||	dd}t|| d S )Nr   r3   )r   closed)r   r   r'   )r   r   r   rd   rB   rU   )r
   r   r   r   Zresample_freqr   r   Zexp_dataZexp_endZexp_periodsro   rp   r   rF   r   r   r   test_end_and_end_day_origin  s    Ar   )3r   ZnumpyrN   r^   Zpandasr=   r   r   r   Zpandas._testingZ_testingrB   Zpandas.core.indexes.datetimesr   ZdtirO   r   r!   r   rl   r   Zfixturer   r   r#   rG   rQ   rV   r[   markZparametrizerc   re   rr   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   

	8f[ 
#1 


5