U
    >v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 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   sn   t ddggddgd}|d}tjtdd |dg  W 5 Q R X tjtd	d |ddg  W 5 Q R X d S )
N      ABcolumnsz"Columns not found: 'C'"matchCz^[^A]+$)r   groupbypytestraisesKeyError)selfdfg r   F/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/groupby/test_grouping.pytest_select_bad_cols   s    
z"TestSelection.test_select_bad_colsc              	   C   s   t ddddgtdtddtdddgd	}d
}tjt|d |d W 5 Q R X tjt|d |ddg W 5 Q R X |d}| }|jjdkst	|jj
dkst	d S )Nr   r   r      r      r      )r   dataz!Grouper for 'A' not 1-dimensionalr   r      )r   ranger   r   
ValueErrorr   countr   ZnlevelsAssertionErrorsize)r   r   msggroupedcr   r   r   'test_groupby_duplicated_column_errormsg*   s    
 
z5TestSelection.test_groupby_duplicated_column_errormsgc                 C   st   | dj }| dd  }t|| d|d< | djdd}| ddddg tj}t|| d S )Nr   r   g      ?meanTZnumeric_onlyD)	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 ddddddddgddddddddgtjdtjdtjdd}|dd	d
g  }|d|jdd   }|jd d dd	d
gf d }t	|| t	|| d S )Nfoobaronetwothreer#   r   r   r   r1   Er   r   r1   r   r!   )
r   r6   randomrandnr   r/   r   locr3   r7   r   r   r9   result2r:   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 dddgf d }t	
|| t	
|| tjtd	d
 |dd   W 5 Q R X d S )Nabcdr   r#   )r   r   r!   r"   r   r   r%   r!   "Cannot subset columns with a tupler   )r   r!   )r   listr6   rC   rD   r   r   r/   rE   r3   r7   r   r   r'   rF   r   r   r   !test_getitem_numeric_column_namesX   s    



"z/TestSelection.test_getitem_numeric_column_namesc              	   C   s0   t jtdd |dd   W 5 Q R X d S )NrJ   r   r   )r   r1   )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 ddddddddgddddddddg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>   r?   r@   r#   rA   r   r   r   )
r   r6   rC   rD   r   r/   rE   ilocr3   r4   )r   r   r9   Zas_frameZ	as_seriesr:   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   s,   | ]$}t jd ddD ]}||fV  qqdS r%      Nr6   rC   randint.0xyr   r   r   	<genexpr>   s       zJTestSelection.test_indices_grouped_by_tuple_with_lambda.<locals>.<genexpr>r   r   c                    s    j | df S Nr   rO   rX   r   r   r   <lambda>       zITestSelection.test_indices_grouped_by_tuple_with_lambda.<locals>.<lambda>)r   r   indicesr3   assert_dict_equalr   gbZ	gb_lambdar:   r9   r   r_   r   )test_indices_grouped_by_tuple_with_lambda   s    
z7TestSelection.test_indices_grouped_by_tuple_with_lambdaN)__name__
__module____qualname__r    r.   r;   rH   rL   rN   rP   rf   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ddddgddddg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/d0 Zd1d2 Zejd3d4d5gd6d7 Z d8d9 Z!ejd3d4d5gd:d; Z"d<d= Z#ejd>d4ddddddddddg
gd5ddddddddddg
ggd?d@ Z$dAdB Z%dCdD Z&ejdEdFe'de(j)dGfdHe'de(j)e*g e(j)ddIdJfdKe'de(j)e*g e(j)ddIdJfgdLdM Z+dNdO Z,dPdQ Z-dRdS Z.dTS )U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
   rS   r   ZABr   ZabcdeFZ
group_keysc                 S   s   | S Nr   r^   r   r   r   r`      ra   z7TestGrouping.test_grouper_index_types.<locals>.<lambda>c                 S   s   | S rn   r   r^   r   r   r   r`      ra   )r   r6   arangereshaperK   lenrk   r   applyreversedtolist)r   rk   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      rk   Wkeyfreqint64dtypelevelr   r   )r   todayr   r   r   from_productr   r6   rC   rU   reset_indexr   r   r2   r   r   r3   r7   )r   Zd0datesZ
date_indexr   r:   r9   r   r   r   test_grouper_multilevel_freq   s"    z)TestGrouping.test_grouper_multilevel_freqc              	   C   sj  t ddddddgddddddgd}|d	}| }|td	d
}| }t|| |td	dd}| }t|| |dd }dddg|d	< |jd d d	dgf }t|| t ddddddgddddddgddddddg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dddg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 )!Nr   r   r   r%   r!   rS   r"   r   r   r   r   )r   axisc                 S   s   |   S rn   )r2   r^   r   r   r   r`      ra   z8TestGrouping.test_grouper_creation_bug.<locals>.<lambda>r   )r   r   r   r#   r   r   ab20130101periodsr>   r?   r@   rx   r|   Mr      z
2013-01-31)r   namer   )r   r   r2   r   r3   r7   rr   rE   r	   r6   ro   r   r   rK   r&   r   pdDatetimeIndexr
   r4   )r   r   r   r:   r9   sr   r   r   test_grouper_creation_bug   s\    &
.z&TestGrouping.test_grouper_creation_bugc                 C   sZ  t ddddddg}ddg|_ttd	d
d
ddd
d
g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   Tr0   )r   from_tuplesry   r   r6   ro   r   r   r/   r   r3   r7   )r   idxZdf_multir9   r:   Z	df_singler   r   r   test_grouper_column_and_index  s:    

z*TestGrouping.test_grouper_column_and_indexc                 C   sz   ddg}t jddddg|d}ttdd	d
|d}|j|d }| | }|j	
tj|_	t|| d S )NrX   rY   r   r   r   r   )r%   r!   )rS   r"   rx      r%   r|   r   )r   r   r   r6   ro   rp   r   r/   r   r   Zastyper   r3   r7   )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  ddddg}ddg}t ddddgddddgddddgddddgddddg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 )Nr   r   r   r   T)
categoriesZordered)r$   r   r   )r   r   observedr!   r|   )r$   rk   )
r6   arrayintr   r   r   r2   r3   r7   T)r   r   r   r   r$   Zcat_columnsr   r9   Zexpected_dataZexpected_columnsr:   r   r   r   *test_groupby_categorical_index_and_columnsL  s*    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ddddddg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?   rx   r|   r   r   r      r      r%   )r   r   )
r   r   r   rK   r   r   r   r2   r3   r7   r8   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td S )Nr   r=   r<   )sortedr   grouperr)   rM   r   r   r   test_grouper_itery  s    zTestGrouping.test_grouper_iterc              	   C   s(   t jtdd |g  W 5 Q R X d S )NzNo group keys passed!r   )r   r   r'   r   rM   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   Tr0   )r   r   r/   r3   r7   )r   r   r,   r9   r:   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 ddddgtdd	}d
d
ddd}|| }||tj}tj	d
d
ddgtj
d}|| }|| }t|| t|| t|| d S )NZT1rS   ZT2      ?       @g      @g      @rI   r|   r   r   )r   r   r-   dr   )r	   r   r5   r2   r3   r4   rK   r/   r6   r   r   )r   r   r9   r:   mappingrG   Zexp_keyZ	expected2r   r   r   test_groupby_dict_mapping  s    z&TestGrouping.test_groupby_dict_mappingr   r   r   r%   r   r   r-   r   c                 C   s   g | ]}t d dd| qS )i     r   )r
   )rW   ir   r   r   
<listcomp>  s     zTestGrouping.<listcomp>r!   c                 C   s\   |ddddg|d}t ddddg|dd}|| }|ddg}d|j_t|| d S )	Nr   r   r%   r!   r|   r   )r   r   )rk   r   )r	   r   lastrk   r   r3   Zassert_equal)r   Zframe_or_seriesrk   objgroupsr9   r:   r   r   r   $test_groupby_series_named_with_tuple  s    
z1TestGrouping.test_groupby_series_named_with_tuplec              	   C   sR   t dddd}ttjd|d}d}tjt|d |dd	  W 5 Q R X 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   r`     ra   zDTestGrouping.test_groupby_grouper_f_sanity_checked.<locals>.<lambda>)	r   r	   r6   rC   rD   r   r   r)   r   )r   r   tsr+   r   r   r   %test_groupby_grouper_f_sanity_checked  s
    z2TestGrouping.test_groupby_grouper_f_sanity_checkedc              	   C   s6   d}t jt|d t|j|ddg  W 5 Q R X d S )NzEGrouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensionalr   r   )r   r   r'   r   rk   )r   r   r+   r   r   r   %test_grouping_error_on_multidim_input  s    z2TestGrouping.test_grouping_error_on_multidim_inputc                 C   sX   t dddgdddgddd	gg}td
ddg|_|jdddgd }t|| d S )Nr   r   r%   r!   rS   r"   r   r#   	   r[   r   )r   r   r   r   r   )r   r   r   r   r   firstr3   r7   )r   r   r9   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   r2   r3   r7   Z
sort_index)r   mframer9   r:   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)r6   ro   rq   r   r   r5   r/   rM   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sJt|d	gj}|d dgksjttddgd
dgg|d}|dj}|d	gj}||kst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   r)   r3   rc   )r   lstZmidxr   r,   r:   r9   r   r   r   #test_multiindex_columns_empty_level  s    
z0TestGrouping.test_multiindex_columns_empty_levelc              	   C   s   t ddddgddddgddddggtdddd	gddddggd
}|dgj}|dj}t|| t |jtdddd	gddddggd
}|dgj}|dj}t|| t |jdddd	gd
}|dgj}|dj}t|| d S )Nr   r   r%   r!   rS   r"   r   r   r-   r   r   r   e)r   r   )r   r   )r   r   )r   r   from_arraysr   r   r3   rc   r   )r   r   r:   r9   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st|jjdkstt|| t||	 |jj|jj	d kst|jj|jj	d kst|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 5 Q R X d S )Nr   r   r   r   r   )r   r   )r   r   r   z2level > 0 or level < -1 only valid with MultiIndexr   r   )r   r   r2   r   rk   r   r)   r3   r7   ry   r   r   r   r'   )r   r   r   r   frameZ	deleveledZresult0result1Z	expected0Z	expected1r+   r   r   r   test_groupby_level  s2    zTestGrouping.test_groupby_levelc              	   C   s   t dgd dgd  tddd}|dkr6|j}|jd|d d	|| }tjt|d
 |jd|d W 5 Q R X 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ddddggddddddddgddddddddggd}ttd|d}|jd|d }td	d
gddgd}t|| t ddgddddggddddddddgddddddddggd}ttd|d}|jd|d }td	dgddgd}t|| d S )Nr   r   r   r%   )levelscodesg       @r|   r   g      @g      6@r   g      2@g        r   )r   r	   r6   ro   r   r2   r3   r4   )r   r   rk   r   r9   r:   r   r   r   test_groupby_level_with_nasI  s     &&z(TestGrouping.test_groupby_level_with_nasc              	   C   sZ   |}d}t jt|d |  W 5 Q R X d}t jt|d |jd d d W 5 Q R X 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,labelsc                 C   s4   |j d|d}t|tj}t|jjd | d S )Nr   r   )r   r6   r   intpr3   assert_almost_equalr   r   )r   r   labelsr   r,   
exp_labelsr   r   r   test_level_preserve_ordern  s    	z&TestGrouping.test_level_preserve_orderc                 C   sN   | |jd}tjddddddddddg
tjd}t|jj	d | d S )Nr   r   r   r%   r   )
r   rk   Zget_level_valuesr6   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ASr~   z
2011-01-01il  )r   r   r   ZNaTrO   r   r   r
   r   rK   r&   r3   rc   r   )r   r   r   r9   r:   r   r   r   test_list_grouper_with_nat  s    
z'TestGrouping.test_list_grouper_with_natzfunc,expectedZ	transformr   r   r5   r   r   )r   r   rk   rr   c                 C   sB   t g g d}|jddd}t|d |dd }t|| d S )Nr   r   Frm   r   c                 S   s   | S rn   r   r^   r   r   r   r`     ra   z>TestGrouping.test_evaluate_with_empty_groups.<locals>.<lambda>)r   r   getattrr3   r4   )r   funcr:   r   r   r9   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sTt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st||j
jdgkstd S )Nr   float64r   r   r   r   r   )r	   r   r/   Zset_axisr   r6   r   r3   r4   rq   r   	groupingsr)   Zassert_numpy_array_equalZ
group_infor   r   ry   )r   r   grr9   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dddg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 )NrX   rl      r   r   r   r   r   objectr   r   )r   r   ry   r   )r$   rk   r   r   )
r   r6   nanr   r   r2   r   r   r3   r7   r8   r   r   r   %test_groupby_level_index_value_all_na  s$     
z2TestGrouping.test_groupby_level_index_value_all_nac                 C   sx   t dddgdddggdddg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   idcategoryvaluer   r   r   r   )r   r   rk   )
r   r   r   r   r2   r   r6   r   r3   r7   )r   r   emptyr9   r:   r   r   r   #test_groupby_multiindex_level_empty  s     z0TestGrouping.test_groupby_multiindex_level_emptyN)/rg   rh   ri   r   markZparametrizer3   ZmakeFloatIndexZmakeStringIndexZmakeIntIndexZmakeDateIndexZmakePeriodIndexru   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	   r6   r   r   r   r   r   r   r   r   r   r   rj      s   

E.


		
(

    

rj   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ddddddgddddddgddddd	d
g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 5 Q R X tjt|d |d W 5 Q R X d}tjt|d |d W 5 Q R X d S )Nz10-Oct-2013z11-Oct-2013r<   r=   r   r   r%   r!   rS   r"   )DATElabelZVALr  r   r  z<must supply a tuple to get_group with multiple grouping keysr   zHmust supply a same-length tuple to get_group with multiple grouping keys)r<   r=   baz)r   r   to_datetimer   rK   r   	get_groupr
   Zto_pydatetimestrr3   r7   r   r   r'   )r   r   r   r   r   rG   Zresult3r+   r   r   r   test_get_group  sH    



zTestGetGroup.test_get_groupc              	   C   s   t ddddg}ddddg}|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 5 Q R X d S )Nr%   r   r   r"   r   rS   rl      )r   r|   z"Interval\(10, 15, closed='right'\)r   )r   r   r   Zcutr  ZIntervalr3   r7   r   r   r   )r   r   r   Zbinsr   r9   r:   r+   r   r   r   test_get_group_empty_bins  s    z&TestGetGroup.test_get_group_empty_binsc                 C   s   t ddddggdgdj}|d}t dddgiddgd}|d}t|| tddddg}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   idsr|   r   r   
2010-01-01z
2010-01-02c                 S   s   g | ]
}|fqS r   r   )rW   rX   r   r   r   r   5  s     z@TestGetGroup.test_get_group_grouped_by_tuple.<locals>.<listcomp>)r  )r   r   r   r  r3   r7   r   r  )r   r   r   r:   r9   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 )NrQ   c                 s   s,   | ]$}t jd ddD ]}||fV  qqdS rR   rT   rV   r   r   r   rZ   >  s       zKTestGetGroup.test_get_group_grouped_by_tuple_with_lambda.<locals>.<genexpr>r[   c                    s    j | df S r\   r]   r^   r_   r   r   r`   B  ra   zJTestGetGroup.test_get_group_grouped_by_tuple_with_lambda.<locals>.<lambda>r   )r   r   r  rK   r   keysr3   r7   rd   r   r_   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 ksFtd S )Nr   r   r1   r   )	r   r   r	   r   r   r   nextiterr)   )r   rk   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dddgddg d}t|d | t|d	 | |jd	d
dg }t|d
d| d S )Nr   Zabssbabr   rS   r   r   )r   )rk   r   r%   r!   r   )r   rK   r3   r7   r   r  rO   r   r(   r2   Znth)r   r   r   r   r   r   test_groupby_with_single_columnQ  s    "z,TestGetGroup.test_groupby_with_single_columnc                 C   s|   t ddddgddddgddddggd	d
ddgd}|d	d
g}|d	d
dg }|jd dksft|jd dksxtd S )Nr<   r=   r   r   r   r  r   r%   r   r   thirdr>   r   )r<   r=   r   )r<   r  r   )r   r   r   r*   rE   r)   rM   r   r   r   test_gb_key_len_equal_axis_len\  s     
z+TestGetGroup.test_gb_key_len_equal_axis_lenN)
rg   rh   ri   r  r
  r  r  r  r  r  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 )TestIterationc                 C   s   | dg}|j}||jks t|j D ]"\}}|j| d |k s*tq*| ddg}|j}||jkspt|j D ]D\}}|j| d |d k st|j| d |d k sztqzd S )Nr   r   r   r   )r   r   r)   itemsrE   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   s   |   S rn   )weekdayr^   r   r   r   r`     ra   z9TestIteration.test_grouping_is_iterable.<locals>.<lambda>c                 S   s   | j S rn   )yearr^   r   r   r   r`     ra   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ddddddg}tddddddg}|||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st||	kstt	|
| qd S )Nr"   r   r   12r   r   r   r!   r%   rS   )
r	   r6   ro   r   r   rK   	enumerater)   r3   r4   )r   r   k1k2r,   iteratedr:   r   r>   r?   r@   e1e2e3r   r   r   test_multi_iter  s    zTestIteration.test_multi_iterc                 C   s  t ddddddg}t ddddddg}tt jdt jd||dddd	d
ddg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 ]F\}	\\}
}}||	 \}}}||
kst
||kst
t|| qt ddddddg|d< t ddddddg|d< |ddg}dd |D }t|dkst
|dddg }|jjddd}|D ]
\}}qd S )Nr   r   r!  r"  r"   )Zv1Zv2r$  r%  r>   r?   r@   ZfourZfivesixr|   r$  r%  r!   r%   rS   r   r   r   c                 S   s   i | ]\}}||qS r   r   )rW   r   Zgpr   r   r   
<dictcomp>  s      z7TestIteration.test_multi_iter_frame.<locals>.<dictcomp>r   r   r   r   r   )r6   r   r   rC   rD   r   rK   rk   rE   r#  r)   r3   r7   rq   r/   r   )r   Zthree_groupr$  r%  r   r,   r&  r   r:   r   r>   r?   r@   r'  r(  r)  r   Zthree_levelsr   groupr   r   r   test_multi_iter_frame  s8    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   rM   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sJt|jdksXtt	ddf|jksntt	ddf|jkst|
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dgdddgdtdddgd}|tdd	d
g}t|jdks2t|jdksBtt	ddf|jksZtt	ddf|jksrt|
t	ddf}t||jddgd d f  |
t	ddf}t||jdgd d f  t dddgdddgdtdddgd}|tdd	d
g}t|jdks"t|jdks2tt	ddf|jksJtt	ddf|jksbtt	ddf|jkszt|
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starti  i.  )eventZchangez
2014-09-10z
2013-10-10r|   r   r  r2  r   z
2014-09-30z
2013-10-31r   r   i#  z
2014-09-15z
2014-08-05r%   z
2014-08-31)r   r   r   r   r   rq   r   r)   Zngroupsr
   r  r3   r7   rO   )r   r   r,   resr   r   r   test_groupby_with_small_elem  sT    z*TestIteration.test_groupby_with_small_elemc                 C   s\   t tdtdg}tdddgg|d}||d }|jjd  }d	}||ksXtd S )
NZAABZabar   r   r%   r   )r   r   r   zGrouping(('A', 'a')))	r   r   rK   r   r   r   r   __repr__r)   )r   mir   r   r9   r:   r   r   r   test_grouping_string_repr  s    z'TestIteration.test_grouping_string_reprN)
rg   rh   ri   r  r   r*  r.  r0  r4  r7  r   r   r   r   r  n  s   	)4r  c                  C   s   t dddgdddgdddgdd} | jtddtd	d
gdd}|jjd jrXt|jjd jsjt| }t ddgddgd}t	
|| d S )Nr   r   r%   r!   rS   )r   r   r-   r   r   r   r   Fr   r   r   )r   r-   )r   r   r   r   r   r   Zin_axisr)   r2   r3   r7   )r   re   r9   r:   r   r   r   test_grouping_by_key_is_in_axis  s    (r8  c               	   C   s
  t dddgdd} tdd}| |}d}tjt|d |j}W 5 Q R X ||jksZtd	}tjt|d |j}W 5 Q R X ||jkstd
}tjt|d |j	}W 5 Q R X ||j	kstd}tjt|d |j
 W 5 Q R X d}tjt|d |j W 5 Q R X d S )Nr   r   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   r3   Zassert_produces_warningFutureWarningr   r)   r   r   ZaxZindexer)r   Zgrperre   r+   r3  r   r   r   test_grouper_groups  s*    

r:  )__doc__datetimer   r   Znumpyr6   r   Zpandasr   r   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingr3   Zpandas.core.groupby.grouperr   r   rj   r  r  r8  r:  r   r   r   r   <module>   s&   (
{    X  