U
    >vfZb                     @   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(ejd]dd^d_gdbdc Z)ddde Z*dfdg Z+ejddddhgdidj Z,ejdke-dd2d1d d*dldmgge-ddnd d1dmgge-dd1e-dndgd d*d1d2dldodNggd d*e-dndgd d*d1d2dldodNgggdpdq Z.drds Z/dtdu Z0dvdw Z1dxdy Z2dzd{ Z3ejd|ddd d*d1d2dlge4d}fdd*d d2ge4d~fddd d*d1d2dlge4d}fddd d*d2ge4dfd*dd*d1dlge4dfd*dd*ge4d,fddd1dlge4dfdd1dlge4dfgejddd
gdd Z5ej6ddd Z7dd Z8d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}| jddg }t|| |	 }| jd
dgdddgf }tddgdd	|_t|| |d}| j
d
dg }t|| |d}| j
ddg }t|| |d   |d 	  |d d tj| j| d dkdf< t|d  d sRtt|d 	 d sltt|d dj
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 }|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ilocnpnanr   AssertionErrorr   	set_index)dfgroupedr   expectedr$   r%   gresult r0   A/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/groupby/test_nth.pytest_first_last_nth   sD    



$
r2   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br5   r   r6   dtyper   r    )	r   r   getattrr'   arrayr8   r   r"   r#   )r3   nulls_fixturegroupsr/   valuesidxr-   r0   r0   r1   test_first_last_with_na_object@   s    $
r@   r    r   c                 C   sf   t ddddgddd|gd}|d}|| }| dkrH|jddg n|jddg }t|| d S )Nr	   r   r   r4   r5   r   r   r   r$   r&   r"   r#   )r    r<   r+   r=   r/   r-   r0   r0   r1   test_nth_with_na_objectR   s
    

$rB   c                 C   s>   t dgd gd}|jddd}t||  }t|| d S )Nr5   idvaluerD   Fas_index)r   	from_dictr   r:   r"   r#   )r3   r+   r=   r/   r0   r0   r1   test_first_last_with_None\   s    rI   zdf, expectedr5   r   rC   rE   rD   r   r9   r7   c                 C   s"   t |d|  }t|| d S )NrD   )r:   r   r"   r#   )r3   r+   r-   r/   r0   r0   r1   "test_first_last_with_None_expandedg   s    rJ   c           
      C   s6  |   }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 }t|| ttd}|d ttd|dd}|jdkst|jdd }	|	jdks2td S )NTEr	   Fr   r   r
   r   r   r   r   r   r   r   r   r   
   	      ZIntCol)datar    r   int64level)copyr   r   r   r   r    r!   r"   r#   r%   r$   r&   listrangeappendr   r8   r)   )
Zdf_mixed_floatsr+   r,   r   r-   r%   r$   r?   sfr0   r0   r1   test_first_last_nth_dtypes{   s.    


rZ   c                  C   s   t dgttjgtdd} | d}| dj}t	|j
 | t	|j | | j}t	|jd| t	|jd| d S )Nr   r7   )rP   nansrP   r   r   )r   r   r'   r(   objectr   r*   r[   r"   assert_series_equalr   r%   r$   )r+   r,   r-   r0   r0   r1   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:00r5   r6   z2012-01-02 00:00:00cdr   eZaaaarY   r.   z
2012-01-01z
2012-01-02r   r   r    )r   r   r   r   r   r"   r#   )testr/   r-   r0   r0   r1   test_first_strings_timestamps   s$        
rd   c            
      C   sh  t dtjgddgddggddgd} | d}t|d| jdd	g  t|d| jdg  t|d	| jg   t|d
| jdd	g  t|d| jdg  t|d| jg   t	|j
d| j
jdd	g  t	|j
d| j
jdg  t|dg d| dg jdd	g  t|jddd| jdd	g  t|jd
dd| jdd	g  t|jddd| jd d  t|jd	dd| jd d  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st|jdkst||dk jd }|jd |kst|jd |ksttjtd-d. |j|d#d/jdd0d 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d1d}| j
jdd	g }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  t|dg| jdd%g  t|ddg| jddd%dg  t|dd
g| jdd	d%dg  t|ddd	g| jddd	d%dg  t|ddd
g| jddd	d%dg  t|d	g| jd	g  t|d%dg| jg   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onerh   ri   F)rS   rG   r   rM   )d   r   rQ   r7   c                 S   s
   | j d S )Nr   )r&   )xr0   r0   r1   <lambda>       ztest_nth.<locals>.<lambda>)Zcheck_nameszFor a DataFramematch)sortTallz4/1/2014z	6/30/2014)startendfreqr5   r6   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/30rb   )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.   r/   r-   rX   Z	expected2vZbusiness_dateskeyZexpected_datesr0   r0   r1   test_nth   s    $
 (    
"$
0
$$((r   c                 C   s:   |  ddg}|d}| jddddg }t|| d S )Nr   r
   r   r   r   r   )r   r$   r&   r"   r#   Zthree_groupr,   r/   r-   r0   r0   r1   test_nth_multi_grouper/  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+   r/   r-   colsr0   r0   r1   test_first_last_tz8  s    6

r   zmethod, ts, alphaz
2013-01-01
US/Easternz
2013-01-02r6   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_   r7   z
2013-01-03r   )r   r   r   r9   )r   rU   astyper   r~   r   r:   r   ZCategoricalr8   r   r   r"   r#   )r3   tsalphar   r+   r/   r-   r0   r0   r1   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   r4   r5   r   r6   )r   r    r9   )	r   r   r   r   r:   r"   r]   Zaggr#   )	r>   r   r+   r,   r?   Zexpected_seriesZexpected_frameZresult_seriesZresult_framer0   r0   r1   +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
}| jd
dddg }t|| d S )Nr   r   rk   rj   ZdullZshiny)r   r
   r   r   r
   r   r   r   r   rA   r   r0   r0   r1    test_nth_multi_index_as_expected  sV    +
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-   r/   r0   r0   r1   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-   r/   r0   r0   r1   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}|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.   Zresult1Zresult2r0   r0   r1   test_group_selection_cache  s,    "







r   c                  C   sp   t dgdddgd} | dd}| jd d }t|| | ddgd}| jd d }t|| d S )Nr   r5   r6   r_   rw   rM   rA   r+   r/   r-   r0   r0   r1   test_nth_empty=  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}| jddg }t|| | djddd}| jddg }t|| d S )Nr	   r6   rl   r5   2   r   r_      r`      r   r   r
   r   r   r   r   r   r   r   r   r'   r(   r   r$   r&   r"   r#   r   r0   r0   r1   test_nth_column_orderI  s    ,r   r   r   rs   c                 C   sf   t tjdtjdtjgdddddgdd	d
ddgd}|djd| d}|jdd	g }t|| d S )Nr5   r6   r   r   r   r   r   r	   r   r   r   rN   )r5   r6   r_   r   r   r   r+   r/   r-   r0   r0   r1   test_nth_nan_in_grouperY  s    r   c                 C   sb   t tjdtjdtjgdddddgd}|dd jd| d	}|d jd
dg }t|| d S )Nr5   r6   r   r   r   r   r   r4   r   r	   r   )r   r'   r(   r   r$   r&   r"   r]   r   r0   r0   r1   test_nth_nan_in_grouper_seriesi  s    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NaTr5   r6   r_   r   r7   )r   r   
categoriesr   r   )r   r   r   )r   r'   Z
datetime64r   r   r   r   r~   CategoricalDtyper   r    r"   r#   r   r0   r0   r1   ,test_first_categorical_and_datetime_data_natx  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   rl   r   ZappleZorangeZmangoZjupiterZmercuryZmarsZvenus)r   r
   r   r   r   r   r   r
   )Zby)r   r   )r	   rl   )r	   r   )r   rl   )names)r   r   r   r   r   r~   r   r   from_tuplesr    r"   r#   r   r0   r0   r1   (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   r9   rR   r$   r   )r   r   r:   r"   r]   )r3   r<   r-   rP   r/   r0   r0   r1   %test_groupby_last_first_nth_with_none  s    
r   zarg, expected_rowsr   r   re   r   c                 C   s:   |j | }| |}| j| }t|| t|| d S N)r$   r&   r"   r#   )slice_test_dfslice_test_groupedargr   r/   
equivalentr-   r0   r0   r1   
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	   re   r   r   r   r   r   )r$   slicer&   r"   r#   )r   r   r/   r   r-   r0   r0   r1   test_nth_indexed  s
    r   c              	   C   s(   t jtdd | d W 5 Q R X d S )NzInvalid indexrp   gQ	@)r{   r|   	TypeErrorr$   r   r0   r0   r1   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 steprp   r   )r{   r|   r}   r$   r   r   r0   r0   r1   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   r/   r-   r0   r0   r1   test_np_ints  s    r   c                  C   sh   t dddgdddggddgdd	d
gd} | j| jd ddd}| jd d ddgf }t|| d S )Nr   r   r   r   r   zr   r   r
   r   rw   r	   r   r   r   )r   r   r&   r$   r"   r#   r   r0   r0   r1   !test_groupby_nth_with_column_axis  s    r   z.start, stop, expected_values, expected_columnsABCDEZADrN   ZABDZBCEZCErK   callc                    st   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|gd}t|| d S )Nr   r   r   r   r	   r   c                    s     t| |S r   )r$   r   rt   stopgbr0   r1   rn     ro   z2test_nth_slices_with_column_axis.<locals>.<lambda>c                    s    j | | S r   )r$   r   r   r0   r1   rn     ro   )r   r    )r   rV   rU   r   r"   r#   )rt   r   Zexpected_valuesZexpected_columnsr3   r+   r/   r-   r0   r   r1    test_nth_slices_with_column_axis  s    

 r   z<ignore:invalid value encountered in remainder:RuntimeWarningc                  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 )Nr5   r   r6   r_   XYr   r	   r   r   	r   r'   r(   r   r   r"   r#   r   r$   r+   r-   r/   r0   r0   r1   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 )Nr5   r   r6   r_   r   r   r   Fr   r	   r   r   r   r   r0   r0   r1   test_head_tail_dropna_false,  s    &&r   )9Znumpyr'   r{   Zpandasr~   r   r   r   r   r   r   Zpandas._testingZ_testingr"   r2   markZparametrizer@   rB   rI   r(   r\   rJ   rZ   r^   rd   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   rU   r   filterwarningsr   r   r0   r0   r0   r1   <module>   s8   0

	

 s	








	

1

	4







$ 	

