a
    Pf&                     @   s   d Z ddlmZm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mZmZmZ ddlmZ ddlmZ G dd dZG dd	 d	ZG d
d dZG dd dZdd Zdd Zejdg ddd ZdS )zG
test where we are determining what we are grouping, or getting groups
    )date	timedeltaN)	CategoricalIndex	DataFrameGrouperIndex
MultiIndexSeries	Timestamp
date_rangeperiod_range)Groupingc                   @   sn   e Zd Z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d dd gdd Zdd ZdS )TestSelectionc                 C   s   t ddggddgd}|d}tjtdd |dg  W d    n1 sN0    Y  tjtd	d |ddg  W d    n1 s0    Y  d S )
N      ABcolumnsz"Columns not found: 'C'"matchCz^[^A]+$)r   groupbypytestraisesKeyError)selfdfg r   [/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/groupby/test_grouping.pytest_select_bad_cols    s    
(z"TestSelection.test_select_bad_colsc                 C   s   t g dtdtddtdddgd}d}tjt|d	 |d
 W d    n1 sZ0    Y  tjt|d	 |d
dg W d    n1 s0    Y  |d}| }|jjdksJ |jj	dksJ d S )N)r   r   r   r      r      r      )r   dataz!Grouper for 'A' not 1-dimensionalr   r   r   r      )
r   ranger   r   
ValueErrorr   countr   Znlevelssize)r   r   msggroupedcr   r   r    'test_groupby_duplicated_column_errormsg+   s     (,
z5TestSelection.test_groupby_duplicated_column_errormsgc                 C   sp   | dj }| dd  }t|| d|d< | djdd}| dg d d}t|| d S )Nr   r   g      ?meanTZnumeric_only)r   Dr/   )r   r   sumtmassert_series_equalr/   aggassert_frame_equalr   r   resultexpectedr   r   r    test_column_select_via_attr<   s    z)TestSelection.test_column_select_via_attrc                 C   s   t g dg dtjddtjddtjddd}|dddg  }|d|jdd	   }|jd d g d
f d }t	
|| t	
|| d S )Nfoobarr<   r=   r<   r=   r<   r<   oner?   twothreer@   r@   r?   rA   r   r$   r   r   r   r1   Er   r   r1   r"   )r   r   r1   )r   nprandomdefault_rngstandard_normalr   r/   r   locr3   r6   r   r   r8   result2r9   r   r   r    test_getitem_list_of_columnsF   s    
 z*TestSelection.test_getitem_list_of_columnsc                 C   s   t tdd tjddtjddtjddd}|d|jdd   }|dddg  }|j	d d g d	f d }t
|| t
|| tjtd
d" |dd   W d    n1 s0    Y  d S )Nabcdr   r$   )r   r   r"   r#   r   r   r&   r"   r   r   r"   "Cannot subset columns with a tupler   )r   r"   )r   listrD   rE   rF   rG   r   r   r/   rH   r3   r6   r   r   r(   rI   r   r   r    !test_getitem_numeric_column_namesY   s    
 z/TestSelection.test_getitem_numeric_column_namesc                 C   sD   t jtdd" |dd   W d    n1 s60    Y  d S )NrN   r   r   )r   r1   )r   r   r(   r   r/   r   r   r   r   r    +test_getitem_single_tuple_of_columns_raiseso   s    z9TestSelection.test_getitem_single_tuple_of_columns_raisesc                 C   s   t g dg dtjddtjddtjddd}|dd  }|jd d ddgf d }|jd d df }|}t	
|| d S )	Nr;   r>   r   r$   rB   r   r   r   )r   rD   rE   rF   rG   r   r/   rH   ilocr3   r4   )r   r   r8   Zas_frameZ	as_seriesr9   r   r   r    test_getitem_single_columnt   s    
 z(TestSelection.test_getitem_single_columnfuncc                 C   s   |   S Nr2   xr   r   r    <lambda>       zTestSelection.<lambda>c                 C   s   |  dd S )Nc                 S   s   |   S rV   rW   )yr   r   r    rZ      r[   z(TestSelection.<lambda>.<locals>.<lambda>)r5   rX   r   r   r    rZ      r[   c                 C   st   t g ddddd}|ddgddg }tjd	d
gddgd}t ddgddgd|d}||}t|| d S )Nr   r   r   r&   r"      abr-   dr`   ra   r-   )r   r&   )r   r&   namesr   r$   )r`   r-   index)r   r   r   from_tuplesr3   r6   )r   rU   r   gbidxr9   r8   r   r   r    test_getitem_from_grouper   s    z'TestSelection.test_getitem_from_grouperc                    sN   t ddd dD i  d}  fdd}|j}|j}t|| d S )NTuplesc                 s   s2   | ]*}t jd dddD ]}||fV  qqdS r   r&   r^   NrD   rE   rF   integers.0rY   r\   r   r   r    	<genexpr>   s   zJTestSelection.test_indices_grouped_by_tuple_with_lambda.<locals>.<genexpr>r   r   c                    s    j | df S Nr   rS   rX   r   r   r    rZ      r[   zITestSelection.test_indices_grouped_by_tuple_with_lambda.<locals>.<lambda>)r   r   indicesr3   assert_dict_equalr   rh   Z	gb_lambdar9   r8   r   ru   r    )test_indices_grouped_by_tuple_with_lambda   s    

z7TestSelection.test_indices_grouped_by_tuple_with_lambdaN)__name__
__module____qualname__r!   r.   r:   rK   rP   rR   rT   r   markparametrizerj   ry   r   r   r   r    r      s   

r   c                   @   sH  e Zd Zejdeedee	deej	de
dedddedddgdd Zd	d
 Zdd Zdd Zdd Zej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ejdg d&g d'd(d) ed*D gd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Z d5d6 Z!d7d8 Z"d9d: Z#d;d< Z$d=d> Z%ejd?ddgd@dA Z&dBdC Z'ejd?ddgdDdE Z(dFdG Z)ejdHdg dIgdg dJggdKdL Z*dMdN Z+dOdP Z,ejdQdRe-dSej.dTfdUe-dSej.eg ej.dVdWdXfdYe-dSej.eg ej.dVdWdXfgdZd[ Z/d\d] Z0d^d_ Z1d`da Z2dbS )cTestGroupingrf   abcder^   dtypez
2020-01-01periodsc                 C   sn   t tdddtd|d}|jtdddd	d
  |jd d d |_|jtddddd
  d S )N
   r^   r   ZAB)r   rf   r   FZ
group_keysc                 S   s   | S rV   r   rX   r   r   r    rZ      r[   z7TestGrouping.test_grouper_index_types.<locals>.<lambda>c                 S   s   | S rV   r   rX   r   r   r    rZ      r[   )r   rD   arangereshaperO   r   applyrf   )r   rf   r   r   r   r    test_grouper_index_types   s     z%TestGrouping.test_grouper_index_typesc                 C   s   t  tdd }t|t  }tj||gddgd}ttj	d
ddd	|d
}| tdddtdddg }tdgdd|_|tdddtdddg }t|| |tdddtdddg }t|| d S )N   )daysr<   r=   rc   r   r   d      re   Wkeyfreqint64r   levelr   r   )r   todayr   r   r   from_productr   rD   rE   rF   rn   reset_indexr   r   r2   r   r   r3   r6   )r   Zd0datesZ
date_indexr   r9   r8   r   r   r    test_grouper_multilevel_freq   s"    z)TestGrouping.test_grouper_multilevel_freqc                 C   s  t g dg dd}|d}| }|tdd}| }t|| d}tjt|d tddd	}W d    n1 s0    Y  ||}| }t|| d
}tjt|d |	dd }W d    n1 s0    Y  g d|d< |j
d d ddgf }t|| d S )N)r   r   r   r   r   r   r   r   r&   r"   r^   r#   r   r   r   r   z6Grouper axis keyword is deprecated and will be removedr   r   )r   axisz7DataFrameGroupBy.apply operated on the grouping columnsc                 S   s   |   S rV   rW   rX   r   r   r    rZ      r[   z8TestGrouping.test_grouper_creation_bug.<locals>.<lambda>rM   r   )r   r   r2   r   r3   r6   assert_produces_warningFutureWarningDeprecationWarningr   rH   )r   r   r   r9   r8   r+   Zgprr   r   r    test_grouper_creation_bug   s$    
*
,z&TestGrouping.test_grouper_creation_bugc                 C   s   t g dg dg dd}|d }|tddg}| }t|| |ddg }|tddtddg}| }t|| |dtddg}| }t|| |tdddg}| }t|| d S )N)r   r   r   r   r   r   )r   r   r   r   r&   r&   r   r   r   r   r   r   r   )r   r   r2   r   r3   r6   )r   r   r9   r   r8   r   r   r    test_grouper_creation_bug2   s"    z'TestGrouping.test_grouper_creation_bug2c                 C   s   t dd|d}tjtdtd|gg dd}ttjddd	|d
}|t	ddd
 }tjtdgddd|}tdg|d
}t|| |t	dd
 }|jdd
 }t|| d S )N20130101r   )r   unitab)r?   r@   rA   rc   r$   r   r   re   rA   MEr   z
2013-01-31)r   name   r?   r   )r   r   r   rO   r'   r	   rD   r   r   r   r2   pdDatetimeIndexr
   Zas_unitr3   r4   )r   r   ZdtimiZserr8   Zexp_dtir9   r   r   r    test_grouper_creation_bug3  s.    z'TestGrouping.test_grouper_creation_bug3rU   FTc                    s   t g dg dd}tttdddgd  |rL|j fdd	d
d}n|j d
d}tt|\}}|dksvJ ||}t	|| d S )Nr   r   r   r   )r   r"   r&   r   )XYr"   )r   r^   )r1   r#   r   c                    s    |  S rV   r   )ri   mappingr   r    rZ   7  r[   z<TestGrouping.test_grouper_returning_tuples.<locals>.<lambda>F)bysort)
r   dictzipr'   r   nextiter	get_groupr3   r6   )r   rU   r   rh   r   r9   r8   r   r   r    test_grouper_returning_tuples0  s    
z*TestGrouping.test_grouper_returning_tuplesc                 C   sJ  t g d}ddg|_ttdg dd|d}|dtdd	gjd
d}|	 ddgjd
d}t
|| |tdd	dgjd
d}|	 ddgjd
d}t
|| |	d}|dtdd	gjd
d}|	 ddgjd
d}t
|| |tdd	dgjd
d}|	 ddgjd
d}t
|| d S )N)r`   r   )r`   r   )r`   r&   ra   r   ra   r   )ra   r&   outerinnerr#   )r?   r?   r@   r@   r?   r?   r   re   r   r   Tr0   )r   rg   rd   r   rD   r   r   r   r/   r   r3   r6   )r   ri   Zdf_multir8   r9   Z	df_singler   r   r    test_grouper_column_and_indexA  s:    

z*TestGrouping.test_grouper_column_and_indexc                 C   sv   ddg}t jg d|d}ttddd|d}|j|d	 }| | }|j	
tj|_	t|| d S )
NrY   r\   )r   r   r   r   )r&   r"   )r^   r#   rc      r   r&   re   r   )r   rg   r   rD   r   r   r   r/   r   r   Zastyper   r3   r6   )r   Z	idx_namesri   r   Z	by_levelsZ
by_columnsr   r   r    test_groupby_levels_and_columnso  s    z,TestGrouping.test_groupby_levels_and_columnsc                 C   s^  g d}ddg}t g dg dg dg dg dgt}t||dd}t||d}d}tjt|d	$ |jd
d|d	 }W d    n1 s0    Y  t ddgddgddgddgddggt}	t||dd}
t|	|
d}t
|| t|j|d}d}tjt|d	$ |jdd|d	 }W d    n1 s60    Y  t|	j|
d}t
|| d S )Nr   r   r   )r   r   r   r   T)
categoriesordered)r%   r   +DataFrame.groupby with axis=1 is deprecatedr   r   r   )r   r   observedr"   r   re   5The 'axis' keyword in DataFrame.groupby is deprecated)r%   rf   )rD   arrayintr   r   r3   r   r   r   r2   r6   T)r   r   r   r   r%   Zcat_columnsr   depr_msgr8   Zexpected_dataZexpected_columnsr9   r+   r   r   r    *test_groupby_categorical_index_and_columns}  s,    "2*4z7TestGrouping.test_groupby_categorical_index_and_columnsc              	   C   s   t dditjtdtdddgddgd	d
}|tddtdddg }t dg ditjtdtddddgddgd	d
}t	|| d S )Nr   r   r   r   P   r   r?   r@   rc   re   r   r   r   )   r      r   r   r   r&   )r   r   )
r   r   r   rO   r   r   r   r2   r3   r6   r7   r   r   r    #test_grouper_getting_correct_binner  s"    
z0TestGrouping.test_grouper_getting_correct_binnerc                 C   sb   | d}d}tjt|d |j}W d    n1 s80    Y  t|}ddg}||ks^J d S )Nr   &DataFrameGroupBy.grouper is deprecatedr   r=   r<   )r   r3   r   r   groupersorted)r   r   rh   r+   r   r8   r9   r   r   r    test_grouper_iter  s    
$zTestGrouping.test_grouper_iterc                 C   s<   t jtdd |g  W d    n1 s.0    Y  d S )NzNo group keys passed!r   )r   r   r(   r   rQ   r   r   r    test_empty_groups  s    zTestGrouping.test_empty_groupsc                 C   sp   | d}d}tjt|d |j}W d    n1 s80    Y  | |jdd}|jdd}t|| d S )Nr   r   r   Tr0   )r   r3   r   r   r   r/   r6   )r   r   r,   r+   r   r8   r9   r   r   r    test_groupby_grouper  s    
$z!TestGrouping.test_groupby_grouperc                 C   s   t ddi}|ddid}|dgd}t|| t g dtdd}ddd	d	d
}|| }||d}tjg dtj	d}|| }|| }t|| t|| t|| d S )NZT1r^   ZT2r2   )      ?       @g      @g      @rL   re   r   r   r_   r/   )r   r   r   r   r   )
r	   r   r5   r3   r4   rO   r/   rD   r   r   )r   sr8   r9   r   rJ   Zexp_keyZ	expected2r   r   r    test_groupby_dict_mapping  s    z&TestGrouping.test_groupby_dict_mappingr   r   r   r&   r_   c                 C   s   g | ]}t d dd| qS )i     r   )r
   )rp   ir   r   r    
<listcomp>  r[   zTestGrouping.<listcomp>r"   c                 C   sT   |g d|d}t g d|dd}|| }|ddg}d|j_t|| d S )Nr   r   r&   r"   re   )r   r   r   r   )r`   r`   )rf   r   r"   r&   )r	   r   lastrf   r   r3   Zassert_equal)r   Zframe_or_seriesrf   objgroupsr8   r9   r   r   r    $test_groupby_series_named_with_tuple  s    
z1TestGrouping.test_groupby_series_named_with_tuplec                 C   s   t dddd}ttjdd|d}d}tjt|d |	d	d
  W d    n1 s^0    Y  |	dd
 
 }|	|j
 }d |j_t|| d S )Nz01-Jan-2013r   ZMSr   r   r   re   z''Timestamp' object is not subscriptabler   c                 S   s   | dd S )Nr   r#   r   r   r   r   r    rZ     r[   zDTestGrouping.test_groupby_grouper_f_sanity_checked.<locals>.<lambda>c                 S   s   | S rV   r   rX   r   r   r    rZ     r[   )r   r	   rD   rE   rF   rG   r   r   	TypeErrorr   r2   rf   r   r3   r4   )r   r   tsr+   r8   r9   r   r   r    %test_groupby_grouper_f_sanity_checked  s    ,z2TestGrouping.test_groupby_grouper_f_sanity_checkedc              	   C   s   t ddgd tddddd}tdd	d
}||dg}tddfddgtddfdgtddfdgtddfddgi}t|j| t|j	 dksJ d S )Nr`   ra   r&   z
2000-01-01z
2000-01-03Z9hr   )idra   r1   r   r   r   r   r   z
2000-01-02r"   r^   )
r   r   r   r   r
   r3   rw   r   lenkeys)r   r   r   rh   r9   r   r   r    test_groupby_with_datetime_key  s    
z+TestGrouping.test_groupby_with_datetime_keyc                 C   sJ   d}t jt|d$ t|j|ddg  W d    n1 s<0    Y  d S )NzEGrouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensionalr   r   )r   r   r(   r   rf   r   r   r+   r   r   r    %test_grouping_error_on_multidim_input  s    z2TestGrouping.test_grouping_error_on_multidim_inputc                 C   s   t g dg dg dg}tg d|_d}tjt|d" |jdddgd	}W d    n1 sd0    Y  | }t	|| d S )
Nr   r   r&   )r"   r^   r#   )r   r$   	   )rr   r   )r   r   r   r   r   r   r   r   )
r   r   rg   r   r3   r   r   r   firstr6   )r   r   r   rh   r8   r   r   r    test_multiindex_passthru  s    0z%TestGrouping.test_multiindex_passthruc                 C   s   |j dd }|j dd }t|| |j dd }|j dd }t|| |j ddgd }| }t|| |j ddgd }|j ddgd }t|| d S )Nr   r   secondr   )r   r2   r3   r6   Z
sort_index)r    multiindex_dataframe_random_datar8   r9   r   r   r    test_multiindex_negative_level   s    
z+TestGrouping.test_multiindex_negative_levelc                 C   sf   t t|j|_d}tjt|d. |jdddd dt j	i W d    n1 sX0    Y  d S )Nz7Passing a dictionary to SeriesGroupBy.agg is deprecatedr   r   FZas_indexr   Q)
rD   r   r   r   r3   r   r   r   r5   r/   r   r   r   r    &test_multifunc_select_col_integer_cols4  s    z3TestGrouping.test_multifunc_select_col_integer_colsc                 C   s   ddgddgg}t |}tddgg|d}|dj}|d dgksJJ |d	gj}|d dgksjJ tddgd
dgg|d}|dj}|d	gj}||ksJ tddgd
dgg|d}|dj}|d	gj}t|| d S )Nr)   values	to filter r   r   r   r   )r  r  r   r   )r   rg   r   r   r   r3   rw   )r   lstZmidxr   r,   r9   r8   r   r   r    #test_multiindex_columns_empty_level<  s    
z0TestGrouping.test_multiindex_columns_empty_levelc                 C   s   t g dg dg dgtg dg dgd}|dgj}|dj}t|| t |jtg dg dgd}|d	gj}|dj}t|| t |jg d
d}|d	gj}|dj}t|| d S )Nr   r&   r"   r^   r#   r   r"   r   r&   r`   ra   ra   r-   r   r   r   r   r   r   )rb   rb   er	  ra   rb   ))r`   rb   r
  )ra   r	  r-   )r   r   from_arraysr   r   r3   rw   r   )r   r   r9   r8   Zdf2Zdf3r   r   r    test_groupby_multiindex_tupleT  s(    z*TestGrouping.test_groupby_multiindex_tuplec                 C   s  t g dg dg dgtg dg dgd}|dgdd	g  }|dgd
  }t|| |dgdd	g  }|dgd
  }t|| |dgdd	g  }|dgd
  }t|| |dgdd	g 	 }|dgd
 	 }	t||	 |dgdd	g 
 }
|dgd
 
 }t|
| |dgdd	g j}|dgd
 j}t|| d S )Nr   r  r  r  r  r   r   r   r   ra   )r   r   r  r   r/   r3   r6   r2   r)   minmaxr   rw   )r   r   Zexpected_meanZresult_meanZexpected_sumZ
result_sumZexpected_countZresult_countZexpected_minZ
result_minZexpected_maxZ
result_maxZexpected_groupsZresult_groupsr   r   r    4test_groupby_multiindex_partial_indexing_equivalencem  s,    zATestGrouping.test_groupby_multiindex_partial_indexing_equivalencer   c                 C   s  |}|  }|jd|d }|jd|d }|j|d j|d }|j|d j|d }	d|j_d|	j_|jjdksJ |jjdksJ t|| t||	 |jj|jjd ksJ |jj|jjd ksJ |jd|d }|jd|d }t|| t||	 d}
tj	t
|
d< |jjdd|d	 }|jjdd|d	 }W d    n1 sj0    Y  t||j t||	j d
}
tjt|
d |jdd W d    n1 s0    Y  d S )Nr   r   r   r   r   )r   r   r   r   )r   r   r   z2level > 0 or level < -1 only valid with MultiIndexr   )r   r   r2   r   rf   r   r3   r6   rd   r   r   r   r   r   r(   )r   r   r   r   frameZ	deleveledZresult0result1Z	expected0Z	expected1r+   r   r   r    test_groupby_level  s6    6zTestGrouping.test_groupby_levelc              	   C   s   t dgd dgd  tddd}|dv r<|j}d}nd	}tjt|d
 |jd|d W d    n1 sr0    Y  d|| }t	j
t|d
L tjt|d
 |jd|d W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   r&   r   r#   )expZvar1r  )r   r   r   r   r   )r   r   z&level name foo is not the name of the r<   )r   r'   	set_indexr   r3   r   r   r   Z_get_axis_namer   r   r(   )r   r   r   r   r+   r   r   r    test_groupby_level_index_names  s    ",z+TestGrouping.test_groupby_level_index_namesc                 C   s   t ddgg dgg dg dgd}ttd|d}|jd|d	 }td
dgddgd}t|| t ddgg dgg dg dgd}ttd|d}|jd|d	 }td
dgddgd}t|| d S )Nr   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r&   r   r   r   r&   )levelscodesg       @re   r  g      @g      6@)r   r   r   r   r   r   r   r   g      2@g        r   )r   r	   rD   r   r   r2   r3   r4   )r   r   rf   r   r8   r9   r   r   r    test_groupby_level_with_nas  s     z(TestGrouping.test_groupby_level_with_nasc                 C   s   |}d}t jt|d |  W d    n1 s40    Y  d}t jt|d |jd d d W d    n1 st0    Y  d S )Nz*You have to supply one of 'by' and 'level'r   )r   r   )r   r   r   r   )r   r   r  r+   r   r   r    test_groupby_args  s    &zTestGrouping.test_groupby_argszsort,labels
r   r   r   r   r   r   r   r&   r&   r&   )
r   r   r   r   r   r   r   r&   r&   r&   c                 C   s4   |j d|d}t|tj}t|jjd | d S )Nr   r  )r   rD   r   intpr3   assert_almost_equal_grouperr  )r   r   labelsr   r,   
exp_labelsr   r   r    test_level_preserve_order  s    	z&TestGrouping.test_level_preserve_orderc                 C   s>   | |jd}tjg dtjd}t|jj	d | d S )Nr   r  r   )
r   rf   Zget_level_valuesrD   r   r  r3   r  r  r  )r   r   r,   r   r   r   r    test_grouping_labels  s
    
z!TestGrouping.test_grouping_labelsc                 C   s   t dtddddi}tj|jd< tddd}||g}td	tt	t
d
i}t|j| ||}td	di}t|j| d S )Nr   z1/1/2011im  r1   r   r   ZYSr   z
2011-01-01il  )r   r   r   ZNaTrS   r   r   r
   r   rO   r'   r3   rw   r   )r   r   r   r8   r9   r   r   r    test_list_grouper_with_nat   s    
z'TestGrouping.test_list_grouper_with_natzfunc,expectedZ	transformr   r   r   r5   r   r   r   )r   r   rf   r   c                 C   sB   t g g d}|jddd}t|d |dd }t|| d S )Nr   r   Fr   r   c                 S   s   | S rV   r   rX   r   r   r    rZ   ,  r[   z>TestGrouping.test_evaluate_with_empty_groups.<locals>.<lambda>)r   r   getattrr3   r4   )r   rU   r9   r   r   r8   r   r   r    test_evaluate_with_empty_groups  s    z,TestGrouping.test_evaluate_with_empty_groupsc                 C   s  t g ddd}|g }| }|tg tjd}t|| t	|j
jdksTJ t|j
jd tjg ttjd t|j
jd tjg ttjd |j
jd dksJ ||}d}tjt|d	 |j}W d    n1 s0    Y  |j}dg}||ksJ d S )
Nr   float64r$  r   r   r   r   z#SeriesGroupBy.grouper is deprecatedr   )r	   r   r/   Zset_axisr   rD   r  r3   r4   r   r  	groupingsZassert_numpy_array_equalZ
group_infor   r   r   r   r   rd   )r   r   grr8   r9   rh   r+   r   r   r   r    test_groupby_empty/  s(    

$zTestGrouping.test_groupby_emptyc                 C   s   t dtjdgd tjdggg ddddg}|jddgd }t g ttdgd	d
tg dd
gg g gddgddgdd}t	|| d S )NrY   r      r   r   r   r   r   objectr   r(  )r  r  rd   r   r   )r%   rf   r   r   )
r   rD   nanr  r   r2   r   r   r3   r6   r7   r   r   r    %test_groupby_level_index_value_all_naM  s"    
z2TestGrouping.test_groupby_level_index_value_all_nac                 C   sr   t g dg dgg dd}|ddg}||jdk  }|d }t dd	gtg tjdd
d}t	|| d S )N){   r`   r   )r0  ra   r   )r   categoryvaluer   r   r1  r   r(  r2  r%  )r   r   rf   )
r   r  r2  r   r2   r   rD   r   r3   r6   )r   r   emptyr8   r9   r   r   r    #test_groupby_multiindex_level_empty_  s    z0TestGrouping.test_groupby_multiindex_level_emptyN)3rz   r{   r|   r   r}   r~   r   rO   rD   r   floatr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r!  r"  r#  r	   r(  r'  r+  r/  r4  r   r   r   r    r      s   






.		
	
)





r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestGetGroupc                 C   s  t tg dg dg dd}|d}tt|j}||}|t|	 }|t
t|}t|| t|| |ddg}tt|j}||}|t|d 	 |d f}|t
t|d |d f}t|| t|| d	}tjt|d
 |d W d    n1 s.0    Y  tjt|d
 |d W d    n1 sh0    Y  d}tjt|d
 |d W d    n1 s0    Y  d S )N)10-Oct-2013r7  r7  11-Oct-2013r8  r8  )r<   r<   r=   r<   r<   r=   r   )DATElabelZVALr9  r:  r   r   z<must supply a tuple to get_group with multiple grouping keysr   r<   zHmust supply a same-length tuple to get_group with multiple grouping keys)r<   r=   baz)r   r   to_datetimer   r   r   r   r   r
   Zto_pydatetimestrr3   r6   r   r   r(   )r   r   r   r   r  rJ   Zresult3r+   r   r   r    test_get_groupt  s<    



**zTestGetGroup.test_get_groupc                 C   s   t g d}g d}|jt|d ||d}|tdd}t ddgddgd}t|| d	}tj	t
|d
" |tdd W d    n1 s0    Y  d S )N)r&   r   r   r#   )r   r^   r      r   )r   r^   r&   r   re   z"Interval\(10, 15, closed='right'\)r   r   r?  )r   r   r   cutr   ZIntervalr3   r6   r   r   r   )r   r   rb   Zbinsr   r8   r9   r+   r   r   r    test_get_group_empty_bins  s    z&TestGetGroup.test_get_group_empty_binsc                 C   s   t g dgdgdj}|d}t dddgiddgd}|d}t|| tg d}t ddd	 |D i}|d}|d
}t d|d f|d fgiddgd}t|| d S )N)r   r   rB  r   Zidsre   rB  r   r   )
2010-01-01
2010-01-02rC  rD  c                 S   s   g | ]
}|fqS r   r   )rp   rY   r   r   r    r     r[   z@TestGetGroup.test_get_group_grouped_by_tuple.<locals>.<listcomp>)rC  )r   r   r   r   r3   r6   r   r<  )r   r   r*  r9   r8   dtr   r   r    test_get_group_grouped_by_tuple  s    



$z,TestGetGroup.test_get_group_grouped_by_tuplec                    sr   t ddd dD i  d}  fdd}|tt|j }|tt|j }t|| d S )Nrk   c                 s   s2   | ]*}t jd dddD ]}||fV  qqdS rl   rm   ro   r   r   r    rq     s   zKTestGetGroup.test_get_group_grouped_by_tuple_with_lambda.<locals>.<genexpr>rr   c                    s    j | df S rs   rt   rX   ru   r   r    rZ     r[   zJTestGetGroup.test_get_group_grouped_by_tuple_with_lambda.<locals>.<lambda>)	r   r   r   r   r   r   r   r3   r6   rx   r   ru   r    +test_get_group_grouped_by_tuple_with_lambda  s    

z8TestGetGroup.test_get_group_grouped_by_tuple_with_lambdac                 C   sJ   t d}d}t||td}tdd}||}tt|d d u sFJ d S )Nr   r   r1   r   )r   r   r	   r-  r   r   r   r   )r   rf   r%   Zseriesr   r,   r   r   r    test_groupby_with_empty  s    


z$TestGetGroup.test_groupby_with_emptyc                 C   s   t dtdi}t|dd|jddg  t tg dddg d}t|d | t|d	 | |jg d }t|d
d	| d S )
Nr`   Zabssbabr   r^   )r`   ra   r   )r   )rf   r   r&   r"   r^   r   )r   rO   r3   r6   r   r   rS   r   r)   r2   Znth)r   r   r  r   r   r    test_groupby_with_single_column  s    "z,TestGetGroup.test_groupby_with_single_columnc                 C   sj   t g dg dg dgg dd}|ddg}|g d }|jd	 d
ksTJ |jd dksfJ d S )N)r<   r=   r   r   )r<   r=   r   r   )r<   r;  r   r&   )r   r   thirdr?   r   r   r   )r   r   rK  )r<   r=   r   r   )r<   r;  r   r   )r   r  r   r*   rH   rQ   r   r   r    test_gb_key_len_equal_axis_len  s    z+TestGetGroup.test_gb_key_len_equal_axis_lenN)
rz   r{   r|   r>  rA  rF  rG  rH  rJ  rL  r   r   r   r    r6  s  s   /r6  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestIterationc                 C   s   | dg}|j}||ju s J |j D ]"\}}|j| d |k s*J q*| ddg}|j}||ju spJ |j D ]D\}}|j| d |d k sJ |j| d |d k szJ qzd S )Nr   r   r   r   )r   r   itemsrH   all)r   r   r,   r   kvr   r   r    test_groups  s    zTestIteration.test_groupsc                 C   s,   | dd dd g}|jjd D ]}q"d S )Nc                 S   s   |   S rV   )weekdayrX   r   r   r    rZ     r[   z9TestIteration.test_grouping_is_iterable.<locals>.<lambda>c                 S   s   | j S rV   )yearrX   r   r   r    rZ     r[   r   )r   r  r)  )r   Ztsframer,   r   r   r   r    test_grouping_is_iterable  s    z'TestIteration.test_grouping_is_iterablec                 C   s   t td}tg d}tg d}|||g}t|}dd|ddg fdd|d	g fd
d|dg fd
d|ddg fg}t|D ]B\}\\}}	}
|| \}}}||ksJ ||	ksJ t|
| qd S )Nr#   )r`   r`   r`   ra   ra   ra   12rW  rX  rW  rX  r`   rW  r   r   rX  r   ra   r"   r&   r^   )	r	   rD   r   r   r   rO   	enumerater3   r4   )r   r   k1k2r,   iteratedr9   r   r?   r@   rA   e1e2e3r   r   r    test_multi_iter  s    zTestIteration.test_multi_iterc                 C   s  t g d}t g d}tt jddt jdd||dg dd}|dd	g}t|}|j}d
d|j	|dg  fd
d|j	|ddg  fdd|j	|ddg  fdd|j	|dg  fg}t
|D ]D\}	\\}
}}||	 \}}}||
ksJ ||ksJ t|| qt g d|d< t g d|d	< |dd	g}dd |D }t|dksfJ |g d }d}tjt|d  |jjddd}W d    n1 s0    Y  |D ]
\}}qd S )N)ra   ra   ra   r`   r`   r`   rV  r   r#   )Zv1Zv2rZ  r[  )r?   r@   rA   fourfivesixre   rZ  r[  r`   rW  r"   rX  r&   r^   ra   r   r   )rW  rW  rW  rX  rX  rX  c                 S   s   i | ]\}}||qS r   r   )rp   r   gpr   r   r    
<dictcomp>M  r[   z7TestIteration.test_multi_iter_frame.<locals>.<dictcomp>r   r   r   r   r   )rD   r   r   rE   rF   rG   r   rO   rf   rH   rY  r3   r6   r   r/   r   r   r   )r   Zthree_grouprZ  r[  r   r,   r\  ri   r9   r   r?   r@   rA   r]  r^  r_  r   Zthree_levelsr   r   groupr   r   r    test_multi_iter_frame(  sD    
0z#TestIteration.test_multi_iter_framec                 C   s   t t|d t t|ddg t t|d |d  t t|d |d |d g t t|dd  t t|ddgd  d S )Nr   r   r   )r   r   r   rQ   r   r   r    test_dictifyX  s    "zTestIteration.test_dictifyc                 C   s  t ddgddgdtddgd}|tdd	d
g}t|jdksJJ |jdksXJ tddf|jv snJ tddf|jv sJ |	tddf}t
||jdgd d f  |	tddf}t
||jdgd d f  t g dg ddtg dd}|tdd	d
g}t|jdks,J |jdks<J tddf|jv sTJ tddf|jv slJ |	tddf}t
||jddgd d f  |	tddf}t
||jdgd d f  t g dg ddtg dd}|tdd	d
g}t|jdksJ |jdks&J tddf|jv s>J tddf|jv sVJ tddf|jv snJ |	tddf}t
||jdgd d f  |	tddf}t
||jdgd d f  |	tddf}t
||jdgd d f  d S )Nstart  .  )eventZchange
2014-09-10
2013-10-10re   r   r   rl  r   z
2014-09-30z
2013-10-31r   r   )ri  ri  ri  )rj  rk  i#  )rm  rn  z
2014-09-15)rm  rn  z
2014-08-05r&   z
2014-08-31)r   r   r   r   r   r   r   Zngroupsr
   r   r3   r6   rS   )r   r   r,   resr   r   r    test_groupby_with_small_elem`  sT    z*TestIteration.test_groupby_with_small_elemc                 C   sZ   t tdtdg}tg dg|d}||d }|jjd  }d}||ksVJ d S )NZAABZabar   r   )r   r`   r   zGrouping(('A', 'a')))r   r  rO   r   r   r  r)  __repr__)r   r   r   r*  r8   r9   r   r   r    test_grouping_string_repr  s    z'TestIteration.test_grouping_string_reprN)
rz   r{   r|   rR  rU  r`  rg  rh  rp  rr  r   r   r   r    rM    s   	04rM  c                  C   s   t g dg dg ddd} | jtddtddgdd	}|jjd
 jrRJ |jjd jsdJ d}tjt	|d |
 }W d    n1 s0    Y  t ddgddgd}t|| d S )Nr]   rI  )r`   ra   r-   r`   r   ra   r   Fr   r   r   z*A grouping .* was excluded from the resultr   r   r   r^   )ra   r-   )r   r  r   r   r  r)  Zin_axisr3   r   r   r2   r6   )r   rh   r+   r8   r9   r   r   r    test_grouping_by_key_is_in_axis  s    "&rs  c                  C   sp  t g ddd} tdd}| |}d}tjt|d |j}W d    n1 sT0    Y  ||ju slJ d}tjt|d |j}W d    n1 s0    Y  ||ju sJ d	}tjt|d |j	}W d    n1 s0    Y  ||j	u sJ d
}tjt|d |j
 W d    n1 s(0    Y  d}tjt|d |j W d    n1 sb0    Y  d S )Nr   r   r`   ra   r`   r   zUse GroupBy.groups insteadr   zUse GroupBy.grouper insteadz-Grouper.obj is deprecated and will be removedzUse Resampler.ax insteadzGrouper.indexer is deprecated)r   r   r   r3   r   r   r   r   r  r   axZindexer)r   Zgrperrh   r+   ro  r   r   r    test_grouper_groups  s*    

$$$&rv  attr)Zgroup_indexZresult_indexZgroup_arraylikec                 C   sn   t g dg dd}|d}|  d}tjt|d" t|jjd |  W d    n1 s`0    Y  d S )Nr]   rI  rt  r`   z is deprecatedr   r   )r   r   r3   r   r   r&  r  r)  )rw  r   rh   r+   r   r   r    test_depr_grouping_attrs  s
    

rx  ) __doc__datetimer   r   numpyrD   r   Zpandasr   r   r   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingr3   Zpandas.core.groupby.grouperr   r   r   r6  rM  rs  rv  r}   r~   rx  r   r   r   r    <module>   s.   ,      J  &