o
    d                     @   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 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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)Groupingc                   @   sL   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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 s'w   Y  tjtd	d |ddg  W d    d S 1 sEw   Y  d S )
N      ABcolumnsz"Columns not found: 'C'"matchCz^[^A]+$)r   groupbypytestraisesKeyError)selfdfg r   V/app/.heroku/python/lib/python3.10/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 s-w   Y  tjt|d	 |d
dg W d    n1 sKw   Y  |d}| }|jjdksaJ |jj	dksiJ 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   sr   | dj }| dd  }t|| d|d< | djdd}| dg d tj}t|| d S )Nr   r   g      ?meanTZnumeric_only)r   Dr.   )	r   r   sumtmassert_series_equalr.   aggnp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tjdtj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   r0   Er   r   r0   r   r!   )r   r   r0   )
r   r5   randomrandnr   r.   r   locr2   r6   r   r   r8   result2r9   r   r   r   test_getitem_list_of_columnsE   s   



 z*TestSelection.test_getitem_list_of_columnsc                 C   s   t tdd tjdtjdtj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    d S 1 sjw   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   listr5   rD   rE   r   r   r.   rF   r2   r6   r   r   r'   rG   r   r   r   !test_getitem_numeric_column_namesX   s   



 "z/TestSelection.test_getitem_numeric_column_namesc                 C   sF   t jtdd |dd   W d    d S 1 sw   Y  d S )NrL   r   r   )r   r0   )r   r   r'   r   r.   r   r   r   r   r   +test_getitem_single_tuple_of_columns_raisesn   s   "z9TestSelection.test_getitem_single_tuple_of_columns_raisesc                 C   s   t g dg dtjdtjdtjdd}|dd  }|jd d ddgf d }|jd d df }|}t	|| d S )Nr;   r>   r#   rB   r   r   r   )
r   r5   rD   rE   r   r.   rF   ilocr2   r3   )r   r   r8   Zas_frameZ	as_seriesr9   r   r   r   test_getitem_single_columns   s   



 z(TestSelection.test_getitem_single_columnc                    sN   t ddd dD i  d}  fdd}|j}|j}t|| d S )NTuplesc                 s   .    | ]}t jd ddD ]}||fV  qqdS r%      Nr5   rD   randint.0xyr   r   r   	<genexpr>      , zJTestSelection.test_indices_grouped_by_tuple_with_lambda.<locals>.<genexpr>r   r   c                        j | df S Nr   rQ   r[   r   r   r   <lambda>       zITestSelection.test_indices_grouped_by_tuple_with_lambda.<locals>.<lambda>)r   r   indicesr2   assert_dict_equalr   gbZ	gb_lambdar9   r8   r   rd   r   )test_indices_grouped_by_tuple_with_lambda   s   
z7TestSelection.test_indices_grouped_by_tuple_with_lambdaN)__name__
__module____qualname__r    r-   r:   rI   rN   rP   rR   rk   r   r   r   r   r      s    
r   c                   @   s  e Zd Zejdejejej	ej
ej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ejdg dg ddd e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ejd-d.d/gd0d1 Z d2d3 Z!ejd-d.d/gd4d5 Z"d6d7 Z#ejd8d.g d9gd/g d:ggd;d< Z$d=d> Z%d?d@ Z&ejdAdBe'dCe(j)dDfdEe'dCe(j)e*g e(j)dFdGdHfdIe'dCe(j)e*g e(j)dFdGdHfgdJdK Z+dLdM Z,dNdO Z-dPdQ Z.dRS )STestGroupingindexc                 C   s|   t tdddtdd}|t||_|jtdddd	d
  tt	|j
 |_|jtddddd
  d S )N
   rV   r   ZABr   ZabcdeFZ
group_keysc                 S      | S Nr   rc   r   r   r   re          z7TestGrouping.test_grouper_index_types.<locals>.<lambda>c                 S   rs   rt   r   rc   r   r   r   re      ru   )r   r5   arangereshaperM   lenrp   r   applyreversedtolist)r   rp   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	}|
 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=   namesr   d      rp   Wkeyfreqint64dtypelevelr   r   )r   todayr   r   r   from_productr   r5   rD   rX   reset_indexr   r   r1   r   r   r2   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|| |tddd}| }t|| |dd	 }g d
|d< |jd d ddgf }t|| 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|| tt	j
dddtjtdtdtdddgg ddd}|tddd }tdgtjtdgdddd}t|| |tdd  }|jdd  }t|| d S )!N)r   r   r   r   r   r   r   r   r%   r!   rV   r"   r   r   r   r   r   )r   axisc                 S      |   S rt   )r1   rc   r   r   r   re          z8TestGrouping.test_grouper_creation_bug.<locals>.<lambda>rK   r   )r   r   r   r   r   r   )r   r   r   r   r%   r%   r   r   r   r#   r   r   abr   20130101periods)r?   r@   rA   r   r   rA   Mr      z
2013-01-31)r   namer?   r   )r   r   r1   r   r2   r6   ry   rF   r	   r5   rv   r   r   rM   r&   r   pdDatetimeIndexr
   r3   )r   r   r   r9   r8   sr   r   r   test_grouper_creation_bug   s\   
z&TestGrouping.test_grouper_creation_bugc                 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))ar   )r   r   )r   r%   br   )r   r   )r   r%   outerinnerr"   )r?   r?   r@   r@   r?   r?   r   r   r   r   Tr/   )r   from_tuplesr   r   r5   rv   r   r   r.   r   r2   r6   )r   idxZdf_multir8   r9   Z	df_singler   r   r   test_grouper_column_and_index  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 )
Nr[   r\   )r   r   r   r   )r%   r!   )rV   r"   r      r%   r   r   )r   r   r   r5   rv   rw   r   r.   r   r   Zastyper   r2   r6   )r   Z	idx_namesr   r   Z	by_levelsZ
by_columnsr   r   r   test_groupby_levels_and_columns>  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}|jdd	|d
 }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}|jd	d	|d
 }t|j	|	d}
t||
 d S )N)r   r   r   r   r   r   )r   r   r   r   T)
categoriesZordered)r$   r   r   r   )r   r   observedr!   r   r   )r$   rp   )
r5   arrayintr   r   r   r1   r2   r6   T)r   r   r   r   r$   Zcat_columnsr   r8   Zexpected_dataZexpected_columnsr9   r   r   r   *test_groupby_categorical_index_and_columnsL  s$   "*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@   r   r   r   r   r   )   r      r   r   r   r%   )r   r   )
r   r   r   rM   r   r   r   r1   r2   r6   r7   r   r   r   #test_grouper_getting_correct_binnerc  s&   
z0TestGrouping.test_grouper_getting_correct_binnerc                 C   s    t |djddgksJ d S )Nr   r=   r<   )sortedr   grouperrO   r   r   r   test_grouper_itery  s    zTestGrouping.test_grouper_iterc                 C   s>   t jtdd |g  W d    d S 1 sw   Y  d S )NzNo group keys passed!r   )r   r   r'   r   rO   r   r   r   test_empty_groups|  s   "zTestGrouping.test_empty_groupsc                 C   s:   | d}| |jjdd}|jdd}t|| d S )Nr   Tr/   )r   r   r.   r2   r6   )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t}|dgt}t|| t g dtdd}ddddd	}|| }||tj}tj	g d
tj
d}|| }|| }t|| t|| t|| d S )NZT1rV   ZT2)      ?       @g      @g      @rJ   r   r   r   r   r   r,   d)r   r   r   r   r   )r	   r   r4   r1   r2   r3   rM   r.   r5   r   r   )r   r   r8   r9   mappingrH   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
   )rZ   ir   r   r   
<listcomp>  s    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!   r   )r   r   r   r   )r   r   )rp   r   r!   r%   )r	   r   lastrp   r   r2   Zassert_equal)r   Zframe_or_seriesrp   objgroupsr8   r9   r   r   r   $test_groupby_series_named_with_tuple  s   
z1TestGrouping.test_groupby_series_named_with_tuplec                 C   sh   t dddd}ttjd|d}d}tjt|d |dd	  W d    d S 1 s-w   Y  d S )
Nz01-Jan-2013r   ZMSr   r   r   z4Grouper result violates len\(labels\) == len\(data\)r   c                 S   s   | dd S )Nr   r"   r   r   r   r   r   re     s    zDTestGrouping.test_groupby_grouper_f_sanity_checked.<locals>.<lambda>)	r   r	   r5   rD   rE   r   r   AssertionErrorr   )r   r   tsr*   r   r   r   %test_groupby_grouper_f_sanity_checked  s   "z2TestGrouping.test_groupby_grouper_f_sanity_checkedc                 C   sL   d}t jt|d t|j|ddg  W d    d S 1 sw   Y  d S )NzEGrouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensionalr   r   )r   r   r'   r   rp   )r   r   r*   r   r   r   %test_grouping_error_on_multidim_input  s   "z2TestGrouping.test_grouping_error_on_multidim_inputc                 C   sP   t g dg dg dg}tg d|_|jdddgd }t|| d S )Nr   r   r%   )r!   rV   r"   )r   r#   	   )r_   r   )r   r   r   r   r   r   )r   r   r   r   r   firstr2   r6   )r   r   r8   r   r   r   test_multiindex_passthru  s   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   r1   r2   r6   Z
sort_index)r   mframer8   r9   r   r   r   test_multiindex_negative_level  s   z+TestGrouping.test_multiindex_negative_levelc                 C   s4   t t|j|_|jdddd dt ji d S )Nr   FZas_indexr   Q)r5   rv   rx   r   r   r4   r.   rO   r   r   r   &test_multifunc_select_col_integer_cols  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s%J |d	gj}|d dgks5J tddgd
dgg|d}|dj}|d	gj}||ksTJ 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   r   r   r   r   r2   rh   )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!   rV   r"   )r   r!   r   r%   )r   r   r   r,   )r   r   r   r   r   r   )r   r   er   r   r   ))r   r   r   )r   r   r,   )r   r   from_arraysr   r   r2   rh   r   )r   r   r9   r8   Zdf2Zdf3r   r   r   test_groupby_multiindex_tuple  s(   z*TestGrouping.test_groupby_multiindex_tuplesortTFc                 C   s  |}|  }|jd|d }|jd|d }|j|d j|d }|j|d j|d }	d|j_d|	j_|jjdks@J |jjdksHJ t|| t||	 |jj|jjd ks`J |jj|jjd kslJ |jd|d }|jd|d }t|| t||	 |j	jdd|d }|j	jdd|d }t||j	 t||	j	 d}
t
jt|
d	 |jdd
 W d    d S 1 sw   Y  d S )Nr   r   r   r   r   )r   r   )r   r   r   z2level > 0 or level < -1 only valid with MultiIndexr   r   )r   r   r1   r   rp   r   r2   r6   r   r   r   r   r'   )r   r   r   r   frameZ	deleveledZresult0result1Z	expected0Z	expected1r*   r   r   r   test_groupby_level  s4   "zTestGrouping.test_groupby_levelc                 C   s   t dgd dgd  tddd}|dv r|j}|jd|d d	|| }tjt|d
 |jd|d W d    d S 1 sDw   Y  d S )Nr   r%   r   r"   )expZvar1r   )r   r   )r   r   z&level name foo is not the name of the r   r<   )	r   r&   	set_indexr   r   Z_get_axis_namer   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       @r   r   g      @g      6@)r   r   r   r   r   r   r   r   g      2@g        r   )r   r	   r5   rv   r   r1   r2   r3   )r   r   rp   r   r8   r9   r   r   r   test_groupby_level_with_nasI  s    z(TestGrouping.test_groupby_level_with_nasc                 C   s   |}d}t jt|d |  W d    n1 sw   Y  d}t jt|d |jd d d W d    d S 1 s;w   Y  d S )Nz*You have to supply one of 'by' and 'level'r   )Zbyr   )r   r   	TypeErrorr   )r   r   r   r*   r   r   r   test_groupby_argsb  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   r5   r   intpr2   assert_almost_equalr   r   )r   r   labelsr   r+   
exp_labelsr   r   r   test_level_preserve_ordern  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   rp   Zget_level_valuesr5   r   r   r2   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  r0   r   r   ZASr   z
2011-01-01il  )r   r   r   ZNaTrQ   r   r   r
   r   rM   r&   r2   rh   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   r4   r   r   r   )r   r   rp   ry   c                 C   sB   t g g d}|jddd}t|d |dd }t|| d S )Nr   r   Frr   r   c                 S   rs   rt   r   rc   r   r   r   re     ru   z>TestGrouping.test_evaluate_with_empty_groups.<locals>.<lambda>)r   r   getattrr2   r3   )r   funcr9   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s*J 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sZJ ||j
jdgksfJ d S )Nr   float64r   r   r   r   r   )r	   r   r.   Zset_axisr   r5   r   r2   r3   rx   r   	groupingsZassert_numpy_array_equalZ
group_infor   r   r   )r   r   grr8   r9   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 )Nr[   rq      r   r   r   r   r   objectr   r  )r   r   r   r   r   )r$   rp   r   r   )
r   r5   nanr   r   r1   r   r   r2   r6   r7   r   r   r   %test_groupby_level_index_value_all_na  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   )r  r   r   )idcategoryvaluer   r  r  r   r  r  r   )r   r   rp   )
r   r   r  r   r1   r   r5   r   r2   r6   )r   r   emptyr8   r9   r   r   r   #test_groupby_multiindex_level_empty  s   z0TestGrouping.test_groupby_multiindex_level_emptyN)/rl   rm   rn   r   markZparametrizer2   ZmakeFloatIndexZmakeStringIndexZmakeIntIndexZmakeDateIndexZmakePeriodIndexr|   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	   r5   r  r   r  r  r  r  r   r   r   r   ro      s    

E.
		
(





ro   c                   @   D   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|jd }||}|t| }|t	t|}t
|| t
|| |ddg}t|jd }||}|t|d  |d f}|t	t|d |d f}t
|| t
|| d	}tjt|d
 |d W d    n1 sw   Y  tjt|d
 |d W d    n1 sw   Y  d}tjt|d
 |d W d    d S 1 sw   Y  d S )N)10-Oct-2013r  r  11-Oct-2013r  r  )r<   r<   r=   r<   r<   r=   r   )DATElabelZVALr  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   rM   r   	get_groupr
   Zto_pydatetimestrr2   r6   r   r   r'   )r   r   r   r   r   rH   Zresult3r*   r   r   r   test_get_group  sB   



"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    d S 1 sNw   Y  d S )N)r%   r   r   r"   )r   rV   rq      r   )r   rV   r%   r   r   z"Interval\(10, 15, closed='right'\)r   rq   r  )r   r   r   cutr  ZIntervalr2   r6   r   r   r   )r   r   r   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   r!  r   Zidsr   r!  r   r   )
2010-01-01
2010-01-02r"  r#  c                 S   s   g | ]}|fqS r   r   )rZ   r[   r   r   r   r   5  s    z@TestGetGroup.test_get_group_grouped_by_tuple.<locals>.<listcomp>)r"  )r   r   r   r  r2   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|j d }|t|j d }t|| d S )NrS   c                 s   rT   rU   rW   rY   r   r   r   r]   >  r^   zKTestGetGroup.test_get_group_grouped_by_tuple_with_lambda.<locals>.<genexpr>r_   c                    r`   ra   rb   rc   rd   r   r   re   B  rf   zJTestGetGroup.test_get_group_grouped_by_tuple_with_lambda.<locals>.<lambda>r   )r   r   r  rM   r   keysr2   r6   ri   r   rd   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 s#J d S )Nr   r   r0   r   )r   r   r	   r	  r   r   nextiter)r   rp   r$   Zseriesr   r+   r   r   r   test_groupby_with_emptyI  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   rV   )r   r   r   )r   )rp   r   r%   r!   rV   r   )r   rM   r2   r6   r   r  rQ   r   r(   r1   Znth)r   r   r   r   r   r   test_groupby_with_single_columnQ  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s*J |jd dks3J d S )N)r<   r=   r   r   )r<   r=   r   r   )r<   r  r   r%   )r   r   thirdr?   r   r   r   )r   r   r.  )r<   r=   r   r   )r<   r  r   r   )r   r   r   r)   rF   rO   r   r   r   test_gb_key_len_equal_axis_len\  s   z+TestGetGroup.test_gb_key_len_equal_axis_lenN)
rl   rm   rn   r  r   r%  r'  r+  r-  r/  r   r   r   r   r    s    /r  c                   @   r  )TestIterationc                 C   s   | dg}|j}||ju sJ |j D ]\}}|j| d |k s&J q| ddg}|j}||ju s8J |j D ]"\}}|j| d |d k sPJ |j| d |d k s_J q=d S )Nr   r   r   r   )r   r   itemsrF   all)r   r   r+   r   kvr   r   r   test_groupso  s    zTestIteration.test_groupsc                 C   s,   | dd dd g}|jjd D ]}qd S )Nc                 S   r   rt   )weekdayrc   r   r   r   re     r   z9TestIteration.test_grouping_is_iterable.<locals>.<lambda>c                 S   s   | j S rt   )yearrc   r   r   r   re     s    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 ]!\}\\}}	}
|| \}}}||ksYJ ||	ks_J t|
| qDd S )Nr"   )r   r   r   r   r   r   12r:  r;  r:  r;  r   r:  r   r   r;  r   r   r!   r%   rV   )	r	   r5   rv   r   r   rM   	enumerater2   r3   )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t j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 ]!\}	\\}
}}||	 \}}}||
ksvJ ||ks|J t
|| qat g d|d< t g d|d< |ddg}dd |D }t|dksJ |g d }|jjddd}|D ]\}}qd S )N)r   r   r   r   r   r   r9  r"   )Zv1Zv2r=  r>  )r?   r@   rA   fourfivesixr   r=  r>  r   r:  r!   r;  r%   rV   r   r   r   r   )r:  r:  r:  r;  r;  r;  c                 S   s   i | ]\}}||qS r   r   )rZ   r   gpr   r   r   
<dictcomp>  s    z7TestIteration.test_multi_iter_frame.<locals>.<dictcomp>r   r   r   )r5   r   r   rD   rE   r   rM   rp   rF   r<  r2   r6   rx   r.   r   )r   Zthree_groupr=  r>  r   r+   r?  r   r9   r   r?   r@   rA   r@  rA  rB  r   Zthree_levelsr   groupr   r   r   test_multi_iter_frame  s:   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   )dictr*  r   rO   r   r   r   test_dictify  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s%J |jdks,J tddf|jv s7J tddf|jv sBJ |	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sJ |jdksJ tddf|jv sJ tddf|jv sJ |	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 s'J tddf|jv s3J |	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-10r   r   r(  rP  r   z
2014-09-30z
2013-10-31r   r   )rM  rM  rM  )rN  rO  i#  )rQ  rR  z
2014-09-15)rQ  rR  z
2014-08-05r%   z
2014-08-31)r   r   r   r   r   rx   r   Zngroupsr
   r  r2   r6   rQ   )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s+J d S )NZAABZabar   r   )r   r   r   zGrouping(('A', 'a')))r   r   rM   r   r   r   r  __repr__)r   mir   r  r8   r9   r   r   r   test_grouping_string_repr  s   z'TestIteration.test_grouping_string_reprN)
rl   rm   rn   r5  r8  rC  rJ  rL  rT  rW  r   r   r   r   r0  n  s    	)4r0  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r)J |jjd js2J | }t ddgddgd}t	|| d S )N)r   r   r   r,  )r   r   r,   r   r   r   r   Fr   r   r   r   r   rV   )r   r,   )
r   r   r   r   r   r  Zin_axisr1   r2   r6   )r   rj   r8   r9   r   r   r   test_grouping_by_key_is_in_axis  s   "rX  c                  C   sn  t g ddd} tdd}| |}d}tjt|d |j}W d    n1 s*w   Y  ||ju s6J d}tjt|d |j}W d    n1 sMw   Y  ||ju sYJ d	}tjt|d |j}W d    n1 spw   Y  ||ju s|J d
}tjt|d |j	 W d    n1 sw   Y  d}tjt|d |j
 W d    d S 1 sw   Y  d S )Nr   r   )r   r   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   r2   Zassert_produces_warningFutureWarningr   r   r   axZindexer)r   Zgrperrj   r*   rS  r   r   r   test_grouper_groups  s4   

"r[  )__doc__datetimer   r   numpyr5   r   Zpandasr   r   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingr2   Zpandas.core.groupby.grouperr   r   ro   r  r0  rX  r[  r   r   r   r   <module>   s(    (
{    X  