o
    d$                     @   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   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    j/var/www/html/visualizacion-main/env/lib/python3.10/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sJ |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grouperresult_indexgroup_keys_seq)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
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   sd  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 ]o}|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
g d!d"d#|jg d$df< |d }t|| | }|tdd% }t|| |tdd% }t|| q@d S )&NzCarl Carl Carl Carl Joe Carlr   r   r   r   r   r   r   r   r   r      r   r   Buyerr   r   r   byr   )r2   r   2013090120131205r#   left)r&   name	inclusiveindexr2   CarlCarlCarl)r   r   CarlCarl)   r   Joe)r   r   )   r>   r   int64dtype)r   r>   r   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result2result3r    r    r!   test_groupby_with_timegrouperO   sD   



 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}|rB|jddd}|jddd}|tdd}|jsVJ t|j	t
s^J |j}t|tshJ t|dkspJ 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   r0   r   Branchr2   r   r   r   Fr4   	ascendingr   drop6MrD   r   )r   rE   r   rF   rG   r'   r   
group_keys
isinstancer)   r   groupsdictr(   )rR   r[   r   grf   r    r    r!   %test_groupby_with_timegrouper_methods   s,   
z1TestGroupBy.test_groupby_with_timegrouper_methodsc                 C   sX  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 ]}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dddgjdd}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d ddgjdd}t	|| qUt 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}|td#ddgjdd}t	|| |td$ddgjdd}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d$dd%dgjdd}t	|| tjtd&d' |td$d(d%dg  W d    n	1 sw   Y  |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 d    n	1 s<w   Y  | }|jtd |d< |td$dd%dgjdd}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 sw   Y  t dggdgttdd	dddgt dd/d0}|td$djdd}t	|| |td$dgjdd}t	|| |jd|_|jjt ksJ |td$dd%jdd}t	|| |td$dd%gjdd}t	|| q*d S )1NzA A A A A A A Bz$Carl Mark Carl Carl Joe Joe Joe Carl)r   r   r   r   r\   r   r   r   r   r   r   r   r   r   r   r   r0   r   r]   r   r   Fr_   zCarl Joe Mark)r   r   r      r1   r2   z!The default value of numeric_onlyArD   T)numeric_onlyzCarl Mark Carl Joe)r   r   r   r      6MSzCarl Joe Mark Carl Joe)r>   r\   r      r   1D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%   ru   r&   r8   columnsr;   )r   rE   r   rG   rF   r'   r   rN   rO   rP   reset_indexpytestraisesKeyError
ValueErrorcopyr;   r   MonthEndr   shiftr&   )rR   rS   rW   r   rU   msgresultr    r    r!    test_timegrouper_with_reg_groups   s8  








z,TestGroupBy.test_timegrouper_with_reg_groupsr&   )DMrk   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)2012100220121007201301302013020220130305r   20121207r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )i  il  i  i     io  Z   i8  g  i-  r   i!  )r0      r   r@   '   r   r   r   -   "   r   r0   )dateuser_id
whole_costcost1r   r   r   r   )	min_countrA   rD   )r   r   to_datetimerG   r'   rM   rN   dropnareorder_levelsrQ   rH   r8   r   rO   assert_series_equal)rR   r&   r   rU   rV   rX   r    r    r!   %test_timegrouper_with_reg_groups_freqS  s4   #&
	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 ]$}|tddd}t||D ]\}}t|}	|	|	}
t
|
| qgqW|jdg |jdg |jdg g}g d}||fD ]*}|dtdddg}t||D ]\\}}}t|}	|	||	f}
t
|
| qq|d}|jdd}|jg d |jddg |jdg g}||fD ]#}|tdd}t||D ]\}}t|}	|	|	}
t
|
| qqd S )NzCarl Joe Joe Carl Joe Carlr   r   r   r   r   r   r   r   r   r   r0   r   r   r1   r   r3   )r   r   r   ro   )
2013-09-30
2013-10-31
2013-12-31r   r   rr   ))r?   r   )Carlr   )r?   r   r2   rD   )r   rE   r   rF   rJ   r'   r   zipr
   	get_grouprO   rP   rG   )rR   rS   rT   expected_listdt_listr   groupedtrU   dtr   g_listbr    r    r!   test_timegrouper_get_group  sf   







z&TestGroupBy.test_timegrouper_get_groupc                 C      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   )rN   )r	   rN   xr    r    r!   sumfunc_series  s   zMTestGroupBy.test_timegrouper_apply_return_type_series.<locals>.sumfunc_seriesr%   r   rr   Tra   )
r   r   r   r   r'   r   applyrO   rP   r{   )rR   r   df_dtr   rU   r   r    r    r!   )test_timegrouper_apply_return_type_series     z5TestGroupBy.test_timegrouper_apply_return_type_seriesc                 C   r   )Nr   r   r   r   r   r   c                 S   s
   | j  S N)r   rN   r   r    r    r!   sumfunc_value  s   
zKTestGroupBy.test_timegrouper_apply_return_type_value.<locals>.sumfunc_valuer   r   rr   Tra   )
r   r   r   r   r'   r   r   rO   r   r{   )rR   r   r   r   rU   r   r    r    r!   (test_timegrouper_apply_return_type_value  r   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 ]-}
||
}|j|
df |j|
df gg}t|
gddd}t|td|d}	t
||	 qcd S )Ni  z2012/1/15min)startr&   periods)highlowr:   c                 S   s   t | j| j| jS r   )r   yearmonthdayr   r    r    r!   <lambda>  s    z?TestGroupBy.test_groupby_groups_datetimeindex.<locals>.<lambda>r   z
2015/01/01r   r   )r   r8   )r   r>   rm   r\   r   )r   r   r   ro   r   rk   Bru   )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   r8   )r
   r   ).0r   r    r    r!   
<dictcomp>  s    zATestGroupBy.test_groupby_groups_datetimeindex.<locals>.<dictcomp>rk   r   r   )r8   r&   ABry   )r   r   rK   aranger'   rf   re   listkeysr   rO   assert_dict_equalr   locr   rP   )rR   r   indr   r   rf   r;   r   datesrU   r   dataexpected_indexr    r    r!   !test_groupby_groups_datetimeindex  s0   
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   r>   rA   rB   r   r   r   )labelr   value1value2r   c                 S   s   t | ddS )N
US/Pacifictz)r
   )dr    r    r!   r   #      zBTestGroupBy.test_groupby_groups_datetimeindex_tz.<locals>.<lambda>r   r   r   r   r   r   r   )r   r8   r   r   r   r   r   r   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   r;   rz   z
Asia/Tokyor   r   r   r   r   r   r   r:   r   r   r   r   r   rm   r   ro   r>   r   r   )r   rK   r   r   r   r   r   from_arraysr'   rN   rO   rP   	rR   r   r   exp_idx1exp_idx2exp_idxrU   r   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s'J d S )Nr   z
2012-07-03z
2012-07-04r   r   )rz   )r   rK   
datetime64r'   firstr
   )rR   r   r   r    r    r!   &test_frame_datetime64_handling_groupbyP  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)rd   c                 S   s   t | j| jS r   )r   r   r   tz_localizer8   r   r    r    r!   r   d  s    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   )r8   rC   )z2000-01-28 16:47:00z2000-01-29 16:48:00z2000-01-31 16:50:00)r   r   r   r;   r8   )r   read_csvr   r'   r   r   r	   r
   rI   rO   r   r   r   r   r   )rR   r   r   r   rU   r   
res_values
exp_valuesr    r    r!   test_groupby_multi_timezoneY  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 )HrD   )r   Period)r   r   r    r    r!   
<listcomp>  s    z;TestGroupBy.test_groupby_groups_periods.<locals>.<listcomp>r>   rA   rB   r   r   r   )r   periodr   r   r   r   r  rx   r   r   r   r   r   r   r   r   r   r   rD   r   r:   r   r   r   r   r   )r   rK   r   r   PeriodIndexr   r   r   r'   rN   rO   rP   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sJ |jdd }|d j}t|jtjs1J |d jdd }|j}t|jtjsGJ d S )N)r        |>c )r   r  r   zM8[ns]r   r   )	r   view
issubclassrC   typerK   r   r'   r   )rR   r   r   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 )N20130101r   r   rk   c                 S   s   |   S r   )maxr   r    r    r!   r     s    z9TestGroupBy.test_groupby_max_datetime64.<locals>.<lambda>)	r   r
   rK   r   r'   r   r  rO   r   )rR   r   rU   r   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   rk   r   r   )	r   ranger
   r'   	transformminr	   rO   r   rR   r   r   rU   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  )
rK   randomseedr   randintr   r'   r  rO   r   )rR   r   df1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sJ t dg di}ttj|d< |d d jtjks5J d S )Nr   )r   r   r   r   r   r   r   r   )r   r   nowpytzutctzinfo)rR   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"  r>   T)r   r&   )r   r   r   )r   r   r   r   r   r   )	r   r   r'   r   countr	   r   rO   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   tdrk   group)r   rK   nanr   r   r   r   notnar'   rO   rP   r  r  r   last)rR   df_testdf_refgrouped_testgrouped_refr    r    r!   $test_first_last_max_min_on_time_data  s0   

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'   nuniquer  notnullr;   
_with_freqrO   r   )rR   testr)   r   rU   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)shanghaibeijingr>  )z2017-08-09 13:32:23z2017-08-11 23:23:15z2017-08-11 22:23:15zdatetime64[ns]rB   r!  )locationr  r   r  r   rD   )r	   r   rG   r   r'   r(  rO   rP   )rR   
data_framer)   r   r   rU   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-01r   Month)r   r   r&   r8   r:   r   r   r   )r   period_ranger	   r  r'   r;   r   rN   r   r8   rO   r   )rR   r   r;   period_seriesr   rU   r    r    r!   test_grouper_period_indexD  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 )Nrt   )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   rx   rt   )r   r   r   r   r   r   r   r   )r   r   r   r   r(   r	   rO   r   )rR   r.   r-   resdtimirU   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(   rJ   rK   r-  r   r    r    r!   r   h  s    zTTestGroupBy.test_groupby_apply_timegrouper_with_nat_scalar_returns.<locals>.<lambda>rG  rH  r#   r   rx   r   r   r   )r   r   r	   rK   r-  r;  rO   r   )rR   r.   r-   rI  rJ  rU   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J |j|jjdks J |dd }tg dgt	t
dgdd	t	g d
dd	d}t|| d S )Nr   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>)$   r>   r>   r   r   r   r   )r   r   r   r   r   r   r   )r   r'   ngroups_selected_obj	_get_axisaxisnlevelsr   r   r   r
   rO   rP   )rR   r"   r   r,   r-   rI  rU   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   
   t | S r   rK   nanmeanvaluesr;   r    r    r!   r        
 zITestGroupBy.test_groupby_agg_numba_timegrouper_with_nat.<locals>.<lambda>rV  )enginec                 S   rW  r   rX  rZ  r    r    r!   r     r\  )	aggregaterK   rY  rO   r   rP   )rR   r.   r-   r   rU   	result_dfexpected_dfr    r    r!   +test_groupby_agg_numba_timegrouper_with_nat  s   
z7TestGroupBy.test_groupby_agg_numba_timegrouper_with_natN)"__name__
__module____qualname__rZ   r|   markparametrizeri   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r&  r)  r4  r=  rB  rF  rL  rM  rU  r+  
skip_if_nora  r    r    r    r!   r/   N   s>    0
  4
:B?	&=	
"r/   )"__doc__r   r   ior   numpyrK   r|   r#  pandas.util._test_decoratorsutil_test_decoratorsr+  pandasr   r   r   r   r   r	   r
   r   r   pandas._testing_testingrO   pandas.core.groupby.grouperr   pandas.core.groupby.opsr   fixturer"   r.   r/   r    r    r    r!   <module>   s"    (


