U
    sVcf                     @   s  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
 d dlmZ dd Zejdddgdd	 Zejd
d dgdd Zejdddgdd Zejdddgejdedddejgdeddgiedgdddfedejgdededdgiedgdddfgdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zejd%d&ge	d'd(d)d*gd+d&ge	d'd(d)d*gd+d&ge	d'd(d)d*gd+fd&d,d&ge	d-d.d)e	d'd(d)e	d/d0d)gd*d1d2gd+d&d,ge	d-d.d)e	d'd(d)gd*d1gd+d&d,ge	d/d0d)e	d'd(d)gd2d1gd+fgd3d4 Zejd5de	d6d7d)dgde	d8d7d)d9ggd:d; Zejd<ejd=d>gd?dejd*d1gd@dedAdBgej d*d1gdCdDgejdEdddFdGgdHdI Z!dJdK Z"ejdLdMdd gfdMd g fdMd*d d1gfdMdNd d*d1gfdOdd*gfdOd g fdOd*d*d1gfdOdNd d*d1gfgejdPdg d&gd,gd&d,ggejdQd=d>gdRdS Z#ejdTdMdd gfdMd g fdMd*d d1gfdMdNd d*d1gfdOdd*gfdOd g fdOd*d*d1gfdOdNd d*d1gfgdUdV Z$dWdX Z%dYdZ Z&d[d\ Z'ejd]dd^d_gd`da Z(dbdc Z)ddde Z*ejddddfgdgdh Z+ejdie,dd2d1d d*djdkgge,ddld d1dkgge,dd1e,dldgd d*d1d2djdmdNggd d*e,dldgd d*d1d2djdmdNgggdndo Z-dpdq Z.drds Z/dtdu Z0dvdw Z1dxdy Z2ejdzddd d*d1d2djgdkdkdkdmdmgfdd*d d2gdkdmgfdd{d d*d1d2djgdkdkdkdmdmgfddd d*d2gdkdkdmgfd*dd*d1djgdkdkdmgfd*dd*gdkgfddd1djgdkdmgfdd1djgdmgfgejdd|d
gd}d~ Z3dd Z4dd Z5dS )    N)	DataFrameIndex
MultiIndexSeries	Timestampisnac                 C   s  |  d}| }| jddgdddgf }tddgdd	|_| }t|| |d}t|| |	 }| jd
dgdddgf }tddgdd	|_t|| |d}t|| |d}| jddgdddgf 
 }tddgdd	|_| }t|| |d   |d 	  |d d tj| j| d dkdf< t|d  d s^tt|d 	 d sxtt|d dd sttdtjgddgd
dggddgd} |  d}| }| jddg d}t|| | jddg d}|jddd}t|| d S )NA   r   BCDbarfooname                  columnsanydropna)groupbyfirstlocr   index
sort_indextmassert_frame_equalnthlastcopynpnanr   AssertionErrorr   iloc	set_index)dfgroupedr   expectedr$   r%   gresult r1   A/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/groupby/test_nth.pytest_first_last_nth   sD    



$
r3   methodr   r%   c                 C   s   t ddddgddd|gdd}t||  }| dkrBddg}nddg}tj||d jd}tddgdd	}t d|i|d
}t|| d S )Nr	   r   r   abr6   r   r7   dtyper   r    )	r   r   getattrr'   arrayr9   r   r"   r#   )r4   nulls_fixturegroupsr0   valuesidxr.   r1   r1   r2   test_first_last_with_na_object@   s    $
rA   r    r   c                 C   s   t ddddgddd|gdd}|| }| dkr@ddg}nd|g}tj||d jd}tddgdd	}t d|i|d
}t|| d S )Nr	   r   r   r5   r6   r   r7   r8   r   r:   )	r   r   r$   r'   r<   r9   r   r"   r#   )r    r=   r>   r0   r?   r@   r.   r1   r1   r2   test_nth_with_na_objectR   s    $

rB   c                 C   s>   t dgd gd}|jddd}t||  }t|| d S )Nr6   idvaluerD   Fas_index)r   	from_dictr   r;   r"   r#   )r4   r,   r>   r0   r1   r1   r2   test_first_last_with_Noned   s    rI   zdf, expectedr6   r   rC   rE   rD   r   r:   r8   c                 C   s"   t |d|  }t|| d S )NrD   )r;   r   r"   r#   )r4   r,   r.   r0   r1   r1   r2   "test_first_last_with_None_expandedo   s    rJ   c           
      C   s^  |   }d|d< d|d< |d}| }|jddgddd	ddgf }td
dgdd|_| }t|| |	 }|jddgddd	ddgf }td
dgdd|_| }t|| |
d}|jddgddd	ddgf }td
dgdd|_| }t|| ttd}|d ttd|dd}|jdks:t|jdd }	|	jdksZtd S )NTEr	   Fr   r   r
   r   r   r   r   r   r   r   r   r   
   	      ZIntCol)datar    r   int64level)r&   r   r   r   r   r    r!   r"   r#   r%   r$   listrangeappendr   r9   r)   )
Zdf_mixed_floatsr,   r-   r   r.   r%   r$   r@   sfr1   r1   r2   test_first_last_nth_dtypes   s2    


rY   c                  C   s   t dgttjgtdd} | d}| dj}t	|j
 | t	|j | t	|jd| t	|jd| d S )Nr   r8   )rP   nansrP   r   r   )r   r   r'   r(   objectr   r+   rZ   r"   assert_series_equalr   r%   r$   )r,   r-   r.   r1   r1   r2   test_first_last_nth_nan_dtype   s    
r]   c               
   C   s   t tdddgtdddgdddgd	d
dgi} | d }t ddd
ggttdtdd	gtdgddd}t|| d S )Nz2012-01-01 00:00:00r6   r7   z2012-01-02 00:00:00cdr   eZaaaarX   r/   z
2012-01-01z
2012-01-02r   r   r    )r   r   r   r   r   r"   r#   )testr0   r.   r1   r1   r2   test_first_strings_timestamps   s$        
rc   c                  C   s  t dtjgddgddggddgd} | d}t|d| jdd	g d t|d| jdg d t|d	| j	g  d t|d
| jdd	g d t|d| jdg d t|d| j	g  d t
|jd| djjdd	g  t
|jd| djjdg  t|dg d| j	dd	gddgf d | d}t|jddd|jdd	g  t|jd
dd|jdd	g  tj|d< t|jddd|jdd	g  t|jd	dd|jdd	g  t ddddddddddddddddddddddddd d!d"g} | jdd#d$d	}| jd
g }t|| | jdd#d$d%}| j	g  }t|| t tjdd&d'd(d)} | d }| d }|| }||d*d+ }tj
||d#d, |jdkst|jdkst||dk jd }|jd |ks>t|jd |ksRt|j|d#d- }|j|d#d-jdd.d}t
|| tjtd/d0 |j|d#d-jdd1d W 5 Q R X t dtjgddgddggddgd} | d}|jjdd.d}|j }t
|| t dtjgdd%gddgddgddggddgd} | d}t|d| jdd%g d t|dg| jdd%g d t|ddg| jddd%dg d t|dd
g| jdd	d%dg d t|ddd	g| jddd	d%dg d t|ddd
g| jddd	d%dg d t|d	g| jd	g d t|d%dg| j	g  d tjd2d3dd4}t d|d5d6gd7} | jj| jjg}	| j|	d#d8dd%dd
g}td9d:d;d<d=d>d?d@dAdBdCdDg}
t dd5d6g|
dE}t|| d S )FNr	   r   r   r   r   r
   r   r   r   r   r   r   r   ZgreenZred)r   r	   r   r   r   ZhameggsZporkgI|?goB!gHk:!4gn2d?gC8fٓ?gW?gV,gN'r?gGĔH"g(	?)colorfoodtwoonerg   rh   F)rS   rG   r   rM   )d   r   rQ   r8   c                 S   s
   | j d S )Nr   )r*   )xr1   r1   r2   <lambda>       ztest_nth.<locals>.<lambda>)Zcheck_names)sortallzFor a DataFramematchTz4/1/2014z	6/30/2014)startendfreqr6   r7   r    r   rF   z2014/4/1z2014/4/4z	2014/4/29z	2014/4/30z2014/5/1z2014/5/6z	2014/5/29z	2014/5/30z2014/6/2z2014/6/5z	2014/6/27z	2014/6/30ra   )r   r'   r(   r   r"   r#   r$   r*   r+   r   r\   r
   randomrandintr   applyr   r)   pytestraises
ValueErrorpd
date_ranger    yearmonthto_datetime)r,   r/   expr0   r.   rW   Z	expected2vZbusiness_dateskeyZexpected_datesr1   r1   r2   test_nth   s    $
" " &$0
  
  
"$

0
"$**..""r   c                 C   s0   |  ddg}|d}| }t|| d S )Nr   r
   r   )r   r$   r   r"   r#   Zthree_groupr-   r0   r.   r1   r1   r2   test_nth_multi_indexA  s    
r   z#data, expected_first, expected_lastr   z2012-02-01 14:00:00z
US/Centraltzr	   )rD   timer   r
   z2012-01-01 13:00:00zAmerica/New_Yorkz2012-03-01 12:00:00zEurope/Londonr   r   c                 C   s   t | }|jddd }t |}dddg}t|| ||  |jdddd  }t||ddg  |jddd }t |}dddg}t|| ||  |jdddd  }t||ddg  d S )NrD   FrF   r   r   )r   r   r   r"   r#   r%   )rP   Zexpected_firstZexpected_lastr,   r0   r.   colsr1   r1   r2   test_first_last_tzJ  s    6

r   zmethod, ts, alphaz
2013-01-01
US/Easternz
2013-01-02r7   c                 C   s   t tdd}tdddg|tjddddd	}t|d
|  }ttj|dg|j	d|t
dddgdtddgd
dd}t|| d S )Nabccategoryr	   r   Z20130101r   r   )Zperiodsr   )groupcategory_string
datetimetzr   r^   r8   z
2013-01-03r   )r   r   r   r:   )r   rT   astyper   r}   r~   r;   r   ZCategoricalr9   r   r   r"   r#   )r4   tsalphar   r,   r0   r.   r1   r1   r2   test_first_last_tz_multi_column  s$    	 	r   r?   TFbooleanZInt64z
2020-01-01z
2020-02-01r   )unitfunctionminmaxc           	      C   s   t ddg| d}|d}tddgdd}t| d|d}t d| i|d}t|d | }t|| |d|i}t|| d S )	Nr	   r   r5   r6   r   r7   )r   r    r:   )	r   r   r   r   r;   r"   r\   Zaggr#   )	r?   r   r,   r-   r@   Zexpected_seriesZexpected_frameZresult_seriesZresult_framer1   r1   r2   +test_first_last_extension_array_keeps_dtype  s    
r   c                  C   s   t dddddddddddgdddddddddddgdddddddddddgd} | dd	g}|d
}t dddddgitjddddgddddggdd	gdd}t|| d S )Nr   r   rj   ri   ZdullZshiny)r   r
   r   r   r
   r   r   namesr:   )r   r   r$   r   Zfrom_arraysr"   r#   r   r1   r1   r2    test_nth_multi_index_as_expected  sb    +
r   zop, n, expected_rowsheadr   tailr   rG   c           	      C   sp   t ddgddgddggddgd}|jd|d	}|j| }|d k	rR|| }|| }t|| |}t|| d S )
Nr	   r   r   r   r   r   r
   r   rF   r   r   r*   r;   r"   r#   )	opnexpected_rowsr   rG   r,   r/   r.   r0   r1   r1   r2   test_groupby_head_tail  s    "
r   zop, n, expected_colsc                 C   sv   t dddgdddgdddgddd	ggd
ddgd}|jdddgdd}|jd d |f }t|| |}t|| d S )Nr	   r   r   r   r   r   r      rN   r   r
   r   r   r   Zaxisr   )r   r   Zexpected_colsr,   r/   r.   r0   r1   r1   r2   test_groupby_head_tail_axis_1  s    " r   c                  C   s  t ddgddgddggddgd} | jd	dg d}| d}|jdd
}|d	}t||  t|| | d}|jdd
}|d	}t||  t|| | d}|d	}|jdd
}t|| t||  | d}|d	}|jdd
}t|| t||  d S )Nr	   r   r   r   r   r   r
   r   r   r   )	r   r*   r+   r   r   r$   r"   r#   r   )r,   r.   r/   Zresult1Zresult2r1   r1   r2   test_group_selection_cache7  s,    "







r   c                  C   s   t dgdddgd} | dd}t tg ddddgd}t|| | ddgd}t tg g gg g gddgddgd}t|| d S )	Nr   r6   r7   r^   rv   rM   r   r   )r   r   r$   r   r"   r#   r   r,   r0   r.   r1   r1   r2   test_nth_emptyU  s     r   c                  C   s   t dddgdddgddtjgdddgdd	d
ggdddgd} | dd}t ddgddggddgtddgddd}t|| | djddd}t ddgd	dggddgtddgddd}t|| d S )Nr	   r7   rk   r6   2   r   r^      r_      r   r   r
   r   r   g      Y@g      i@r   ra   r   r   r   g      I@g     b@)r   r'   r(   r   r$   r   r"   r#   r   r1   r1   r2   test_nth_column_orderc  s$    ,    r   r   r   rp   c                 C   s   t tjddgdddgtjddgdd	d
gtjddggtdd}|djd| d}t ddgd	d
ggtdtddgddd}t|| d S )Nr   r	   r   r   r   r   r   defr   r   r   rN   r   r6   r   Zbcr   ra   )	r   r'   r(   rT   r   r$   r   r"   r#   )r   r,   r0   r.   r1   r1   r2   test_nth_nan_in_grouperw  s    0  r   c               	   C   s   t dddddgdtdg tdddddgd	d
d} | d }t dtdg tdddgtdddgd}t	dddgdd|_
t|| d S )Nr   secondthirdr   ZNaTr6   r7   r^   r   r8   )r   r   
categoriesr   r   )r   r   r   )r   r'   Z
datetime64r   r   r   r   r}   CategoricalDtyper   r    r"   r#   r   r1   r1   r2   ,test_first_categorical_and_datetime_data_nat  s     r   c               
   C   s   t dddddgdddddgdddddgdd	d
ddgd} | ddi} | jddgd }t dddgtdd
dgtdd
d	dgd}tjdddgddgd|_	t
|| d S )Nr	   r   rk   r   ZappleZorangeZmangoZjupiterZmercuryZmarsZvenus)r   r
   r   r   r   r   r   r
   )Zby)r   r   )r	   rk   )r	   r   )r   rk   r   )r   r   r   r   r   r}   r   r   from_tuplesr    r"   r#   r   r1   r1   r2   (test_first_multi_key_groupby_categorical  s*     r   r$   c                 C   sf   t dg}t |||d|gdddddgdjdd}| dkrJt|| d}nt||  }t|| d S )Nyr   r:   rR   r$   r   )r   r   r;   r"   r\   )r4   r=   r.   rP   r0   r1   r1   r2   %test_groupby_last_first_nth_with_none  s    
r   zarg, expected_rowsr   r   rd   r   c                 C   s:   |j | }| |}| j| }t|| t|| d S N)r$   r*   r"   r#   )slice_test_dfslice_test_groupedargr   r0   
equivalentr.   r1   r1   r2   
test_slice  s
    


r   c                 C   s^   |j dddd f }| ddtdd g}| jdddddddg }t|| t|| d S )	Nr   r	   rd   r   r   r   r   r   )r$   slicer*   r"   r#   )r   r   r0   r   r.   r1   r1   r2   test_nth_indexed  s
    r   c              	   C   s(   t jtdd | d W 5 Q R X d S )NzInvalid indexrq   gQ	@)rz   r{   	TypeErrorr$   r   r1   r1   r2   test_invalid_argument  s    r   c              	   C   s0   t jtdd | td d d W 5 Q R X d S )NzInvalid steprq   r   )rz   r{   r|   r$   r   r   r1   r1   r2   test_negative_step  s    r   c                 C   s8   | tddg}| jdddddg }t|| d S )Nr   r	   r   r   r   )r$   r'   r<   r*   r"   r#   )r   r   r0   r.   r1   r1   r2   test_np_ints  s    r   c                  C   s|   t dddgdddggddgdd	d
gd} | j| jd ddd}t ddgddggddgddgd}d|j_t|| d S )Nr   r   r   r   r   zr   r   r
   r   rv   r	   r   r   )r   r   r*   r$   r   r   r"   r#   r   r1   r1   r2   !test_groupby_nth_with_column_axis  s"    r   z.start, stop, expected_values, expected_columnsrN   callc                    sr   t tdgtdgd}|jdddddgdd  fdd fd	dd
| | |}t |g|d}t|| d S )Nr   ZABCDEr   r   r	   r   c                    s     t| |S r   )r$   r   rs   stopgbr1   r2   rm   '  rn   z2test_nth_slices_with_column_axis.<locals>.<lambda>c                    s    j | | S r   )r$   r   r   r1   r2   rm   (  rn   )r   r    )r   rU   rT   r   r"   r#   )rs   r   Zexpected_valuesZexpected_columnsr4   r,   r0   r.   r1   r   r2    test_nth_slices_with_column_axis  s    

 r   c                  C   s   t ddgdtjgdtjgdtjggddgd} t ddggddgd}| ddgjdd	}t|| | ddgjdd	}t|| | ddgjd
d		 }t|| d S )Nr6   r   r7   r^   XYr   r	   r   r   
r   r'   r(   r   r   r"   r#   r   r$   Zreset_indexr,   r.   r0   r1   r1   r2   test_head_tail_dropna_true.  s      r   c                  C   s   t ddgdtjgdtjggddgd} t ddgdtjgdtjggddgd}| jddgdd	jd
d}t|| | jddgdd	jd
d}t|| | jddgdd	jdd	 }t|| d S )Nr6   r   r7   r^   r   r   r   Fr   r	   r   r   r   r   r1   r1   r2   test_head_tail_dropna_false?  s    &&r   )6Znumpyr'   rz   Zpandasr}   r   r   r   r   r   r   Zpandas._testingZ_testingr"   r3   markZparametrizerA   rB   rI   r(   r[   rJ   rY   r]   rc   r   r   r   r   r<   r   Zto_timedeltar   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r1   r1   r2   <module>   s.   0



#|	








	

1

	:






$ 	
