o
    ҷhi                     @   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g d,e	d-d.d)e	d'd(d)e	d/d0d)gg d1d+d&d2ge	d-d.d)e	d'd(d)gd*d3gd+d&d2ge	d/d0d)e	d'd(d)gd4d3gd+fgd5d6 Zejd7de	d8d9d)dgde	d:d9d)d;ggd<d= Zejd>ejd?d@gdAdejd*d3gdBdedCdDgej d*d3gdEdFgejdGg dHdIdJ Z!dKdL Z"ejdMdNdd gfdNd g fdNd*d d3gfdNdOg dPfdQdd*gfdQd g fdQd*d*d3gfdQdOg dPfgejdRdg d&gd2gd&d2ggejdSd?d@gdTdU Z#ejdVdNdd gfdNd g fdNd*d d3gfdNdOg dPfdQdd*gfdQd g fdQd*d*d3gfdQdOg dPfgdWdX Z$dYdZ Z%d[d\ Z&d]d^ Z'ejd_g d`dadb Z(ejd_g d`dcdd Z)dedf Z*dgdh Z+ejdg didjdk Z,ejdle-dd4d3g dmge-ddng doge-dd3e-dndgg dpgd d*e-dndgg dpggdqdr Z.dsdt Z/dudv Z0dwdx Z1dydz Z2d{d| Z3d}d~ Z4ejdddg de5dfdd*d d4ge5dfddg de5dfddg de5dfd*dg de5dfd*dd*ge5d2fddd3dge5dfdd3dge5dfgejddd
gdd Z6ej7ddd Z8dd Z9ejdd;d;gd;dgfejd_g ddd Z:dS )    N)	DataFrameIndex
MultiIndexSeries	Timestampisnac                 C   s  |  d}| }| jddgg df }tddgdd|_| }t|| |d}| jddg }t|| |	 }| jdd	gg d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 sJ t|d 	 d sJ t|d dj
d sJ 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            r
         columnsanydropna)groupbyfirstlocr   index
sort_indextmassert_frame_equalnthlastilocnpnanr   r   	set_index)dfgroupedr   expectedr$   r%   gresult r/   P/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/groupby/test_nth.pytest_first_last_nth   sD   



$
r1   methodr   r%   c                 C   s   t g dddd|gdd}t||  }| dkrddg}nddg}tj||d jd	}tddgdd
}t d|i|d}t|| d S )Nr	   r	   r   r   r	   r   r   abr5   r   r6   dtyper   r    )	r   r   getattrr'   arrayr8   r   r"   r#   )r2   nulls_fixturegroupsr.   valuesidxr,   r/   r/   r0   test_first_last_with_na_object@   s    
r@   r    r   c                 C   sb   t g dddd|gd}|d}|| }| dkr"|jddg n|jddg }t|| d S )Nr3   r	   r   r   r4   r5   r   r   r   r$   r&   r"   r#   )r    r<   r*   r=   r.   r,   r/   r/   r0   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#   )r2   r*   r=   r.   r/   r/   r0   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#   )r2   r*   r,   r.   r/   r/   r0   "test_first_last_with_None_expandedg   s   rJ   c           
      C   s&  |   }d|d< d|d< |d}| }|jddgg df }tdd	gdd
|_| }t|| |	 }|jddgg d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sJ |jdd }	|	jdksJ d S )NTEr	   Fr   r   )r
   r   r   rK   rL   r   r   r   r   r   r   r   
   	      IntCol)datar    r   int64level)copyr   r   r   r   r    r!   r"   r#   r%   r$   r&   listrangeappendr   r8   )
df_mixed_floatsr*   r+   r   r,   r%   r$   r?   sfr/   r/   r0   test_first_last_nth_dtypes{   s.   


r\   c                  C   s   t dgtd gtdd} | d}| dj}t|j | t|j	 | | j}t|j
d| t|j
d| d S )Nr   r7   )rQ   nansrQ   r   r   )r   r   objectr   r)   r]   r"   assert_series_equalr   r%   r$   )r*   r+   r,   r/   r/   r0   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 g d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   eaaaar[   r-   )r5   ra   r[   z
2012-01-01z
2012-01-02r   r   r    )r   r   r   r   r   r"   r#   )testr.   r,   r/   r/   r0   test_first_strings_timestamps   s   rg   c            
   
   C   sT  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*d+ }tj	||d#d, |jdksaJ |jdksiJ ||dk jd }|jd |ks|J |jd |ksJ tjtd-d. |j|d#d/jdd0d W d    n	1 sw   Y  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g d2  t|dd
g| jg d3  t|g d4| jg d  t|g d5| jg d  t|d	g| jd	g  t|d%dg| jg   tjd6d7dd8}t d|d9d:gd;} | jj| jjg}| j|d#d<g d=}tg d>}	t dd9d:g|	d?}t|| d S )@Nr	   r   r   r   r   r
   r   r   r   r   r   r   r   greenredr   r	   r   r   r   hameggsporkgI|?goB!gHk:!4gn2d?gC8fٓ?gW?gV,gN'r?gGĔH"g(	?)colorfoodtwoonerp   rq   F)rT   rG   r   rM   )d   r   rR   r7   c                 S   s
   | j d S )Nr   )r&   )xr/   r/   r0   <lambda>   s   
 ztest_nth.<locals>.<lambda>)check_nameszFor a DataFramematch)sortTall)r   r	   r   r   )r   r   r   r   r   r	   r   )r   r	   r   z4/1/2014z	6/30/2014)startendfreqr5   r6   r    r   rF   )r   r   rh   r   )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/30re   )r   r'   r(   r   r"   r#   r$   r&   r   r_   r
   r)   randomdefault_rngintegersr   applyr   pytestraises
ValueErrorpd
date_ranger    yearmonthto_datetime)
r*   r-   r.   r,   rZ   	expected2vbusiness_dateskeyexpected_datesr/   r/   r0   test_nth   s   $
 (    

$
0
    r   c                 C   s6   |  ddg}|d}| jg d }t|| d S )Nr   r
   r   r   r   r   r   )r   r$   r&   r"   r#   three_groupr+   r.   r,   r/   r/   r0   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   r
   r   z2012-01-01 13:00:00zAmerica/New_Yorkz2012-03-01 12:00:00zEurope/Londonr	   r   r   r
   r   r   c                 C   s   t | }|jddd }t |}g d}t|| ||  |jdddd  }t||ddg  |jddd }t |}g d}t|| ||  |jdddd  }t||ddg  d S )NrD   FrF   r   r   )r   r   r   r"   r#   r%   )rQ   expected_firstexpected_lastr*   r.   r,   colsr/   r/   r0   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g d|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categoryr	   r	   r   20130101r   r   )periodsr   )groupcategory_string
datetimetzr   ra   r7   z
2013-01-03r   )r   r   r	   r   r   r9   )r   rV   astyper   r   r   r:   r   Categoricalr8   r   r   r"   r#   )r2   tsalphar   r*   r.   r,   r/   r/   r0   test_first_last_tz_multi_column  s"   	
	r   r>   TFbooleanInt64z
2020-01-01z
2020-02-01r   )unitfunction)r   r%   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_   aggr#   )	r>   r   r*   r+   r?   expected_seriesexpected_frameresult_seriesresult_framer/   r/   r0   +test_first_last_extension_array_keeps_dtype  s   
r   c                  C   sR   t g dg dg dd} | ddg}|d}| jg d }t|| d S )	N)r   r   r   r   r   r   r   r   r   r   r   )rs   rs   rs   rr   rs   rs   rs   rr   rr   rr   rs   )dullr   shinyr   r   r   r   r   r   r   r   r   r
   r   r   r
   r   r   rA   r   r/   r/   r0    test_nth_multi_index_as_expected  s   +
r   zop, n, expected_rowsheadr   r|   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 ur)|| }|| }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.   r/   r/   r0   test_groupby_head_tail  s   "
r   zop, n, expected_colsc                 C   s   t g dg dg dg dgg dd}d}tjt|d |jg d	d
d}W d    n1 s1w   Y  |jd d |f }t|| |}t|| d S )Nr   )r	   r   r   )r   r   r   )r      rN   r   r   +DataFrame.groupby with axis=1 is deprecatedrx   r   r   r	   r	   axis)r   r"   assert_produces_warningFutureWarningr   r&   r:   r#   )r   r   expected_colsr*   msgr-   r,   r.   r/   r/   r0   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-   result1result2r/   r/   r0   test_group_selection_cache!  s,   "







r   c                  C   sn   t dgg dd} | dd}| jd d }t|| | ddgd}| jd d }t|| d S )Nr   r5   r6   ra   r   r5   rM   r6   rA   r*   r.   r,   r/   r/   r0   test_nth_empty?  s   r   c                  C   s   t g dg dddtjgg dg dgg dd} | d	d
}| jd
dg }t|| | d	jddd}| jddg }t|| d S )N)r	   r6   rt   )r	   r5   2   r	   r5   )r   ra      )r   rb      )r   r   r
   r   r   r   r   r   r   r   r   r   r'   r(   r   r$   r&   r"   r#   r   r/   r/   r0   test_nth_column_orderK  s   $r   r   )Nr   r{   c                 C   sZ   t tjdtjdtjgg dg dd}|djd| d}|jdd	g }t|| d S )
Nr5   r6   r   r   r   r   r   )r	   r   r   r   rN   r   r   r   r	   r   r   r   r*   r.   r,   r/   r/   r0   test_nth_nan_in_grouper[  s   r   c                 C   s\   t tjdtjdtjgg dd}|dd jd| d}|d jddg }t|| d S )	Nr5   r6   r   r4   r   r   r	   r   )r   r'   r(   r   r$   r&   r"   r_   r   r/   r/   r0   test_nth_nan_in_grouper_seriesk  s   r   c                  C   s   t g ddtdg tg dddd} | d }t d	tdg tg d
tg dd}t	g ddd|_
t|| d S )N)r   r   secondthirdr   r   NaT)r5   r6   ra   r5   r6   r   r7   )r   r   
categoriesr   r   )r5   ra   r5   r   )r   r   )r   r   r   r   )r   r'   
datetime64r   r   r   r   r   CategoricalDtyper   r    r"   r#   r   r/   r/   r0   ,test_first_categorical_and_datetime_data_natz  s    r   c                  C   s   t g dg dg dg dd} | ddi} | jdd	gd
 }t g dtg dtg dd}tjg ddd	gd|_	t
|| d S )N)r	   r	   r	   r   r   )rt   rt   r   rt   rt   )appleorangemangor   r   )jupitermercurymarsvenusr   )r   r
   r   r   r   r   r   r
   )by)r   r   r   )r   r   r   )r   r   r   r   )r   r   ))r	   rt   )r	   r   )r   rt   )names)r   r   r   r   r   r   r   r   from_tuplesr    r"   r#   r   r/   r/   r0   (test_first_multi_key_groupby_categorical  s(   r   )r   r%   r$   c                 C   s`   t dg}t |||d|gg ddjdd}| dkr"t|| d}nt||  }t|| d S )Ny)r   r   r   r   r   r9   r   rS   r$   r   )r   r   r:   r"   r_   )r2   r<   r,   rQ   r.   r/   r/   r0   %test_groupby_last_first_nth_with_none  s   
r   zarg, expected_rows)r   r	   r   r   rh   )r   r   r   r   r	   r   r   r   r   r   c                 C   s:   |j | }| |}| j| }t|| t|| d S N)r$   r&   r"   r#   )slice_test_dfslice_test_groupedargr   r.   
equivalentr,   r/   r/   r0   
test_slice  s
   


r   c                 C   sT   |j dddd f }| ddtdd g}| jg d }t|| t|| d S )Nr   r	   rh   r   )r$   slicer&   r"   r#   )r   r   r.   r   r,   r/   r/   r0   test_nth_indexed  s
   r   c                 C   s>   t jtdd | d W d    d S 1 sw   Y  d S )NzInvalid indexrx   gQ	@)r   r   	TypeErrorr$   r   r/   r/   r0   test_invalid_argument  s   "r   c                 C   sF   t jtdd | td d d W d    d S 1 sw   Y  d S )NzInvalid steprx   r   )r   r   r   r$   r   r   r/   r/   r0   test_negative_step  s   "r   c                 C   s2   | tddg}| jg d }t|| d S )Nr   r	   rl   )r$   r'   r;   r&   r"   r#   )r   r   r.   r,   r/   r/   r0   test_np_ints  s   r   c                  C   s   t g dg dgddgg dd} d}tjt|d | j| jd	 d	d
}W d    n1 s/w   Y  |d}| jd d ddgf }t|| d S )N)r   r   r   )r   r   r   zr   )r   r
   r   r   r   rx   r	   r   r   r   )r   r"   r   r   r   r&   r$   r#   )r*   r   gbr.   r,   r/   r/   r0   !test_groupby_nth_with_column_axis  s   
r  c               	   C   s   t ttddtddgttddtddggg dg dg} tdtt| i| d	}|jddgd
dd}g d}t ttddtddgttddtddggg dg dg}t||dgd}t	
|| d S )Nr   r	   r   rM      )r   r   r   r	   r	   )r   r	   r	   r   r   colr9   F)rT   observedr   r	   r   r   )r   r	   r   r   )r   r   CategoricalIndexIntervalr   rW   lenr   r$   r"   r#   )
idx_result	df_resultr.   val_expectedidx_expectedr,   r/   r/   r0   test_groupby_nth_interval  s"   r  z.start, stop, expected_values, expected_columnsrl   ABCDEADrN   r  ABD)r	   r   r   BCEr   CErK   callc           	         s   t tdgtdgd}d}tjt|d |jg ddd W d    n1 s)w   Y   fd	d
 fdd
d| | |}t |g|gd}t|| d S )Nr   r  r   r   rx   )r   r   r   r   r   r	   r   c                    s     t| |S r   )r$   r   r}   stopr  r/   r0   rv   /  s    z2test_nth_slices_with_column_axis.<locals>.<lambda>c                    s    j | | S r   )r$   r  r  r/   r0   rv   0  s    )r  r    )r   rW   rV   r"   r   r   r   r#   )	r}   r  expected_valuesexpected_columnsr2   r*   r   r.   r,   r/   r  r0    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   ra   XYr   r	   r   r   	r   r'   r(   r   r   r"   r#   r   r$   r*   r,   r.   r/   r/   r0   test_head_tail_dropna_true6  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   ra   r  r  r   Fr   r	   r   r   r  r  r/   r/   r0   test_head_tail_dropna_falseJ  s   &&r   	selectionra   )r   r{   Nc                 C   s   t g dtjddgg dd}|d|  }|jd|d}|d	ks,|d
kr1| ddgkr1ddg}nddg}|j|| f }t|| d S )Nr   r   r   )r   r   r   r   r5   r   r   r   r{   r6   ra   r	   r   )r   r'   r(   r   r$   r   r"   assert_equal)r!  r   r*   r  r.   locsr,   r/   r/   r0   test_nth_after_selectionY  s   

r$  );numpyr'   r   pandasr   r   r   r   r   r   r   pandas._testing_testingr"   r1   markparametrizer@   rB   rI   r(   r^   rJ   r\   r`   rg   r   r   r   r   r;   r   to_timedeltar   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  rV   r  filterwarningsr  r   r$  r/   r/   r/   r0   <module>   sB    0

	

 s	








	


1
	4








	
