o
    d                      @   s   d Z ddlmZ ddlZddlZddlZddlmZ ddl	m
Z g dZejdd Zejedd	d
 Zdd ZG dd dZdS )z
Note: for naming purposes, most tests are title with as e.g. "test_nlargest_foo"
but are implicitly also testing nsmallest_foo.
    )productN)Series)datetime
datetimetz	timedeltaint8int16int32int64float32float64uint8uint16uint32uint64c                  C   sX   t t g dt g ddt g dd} dD ]}tg d|d| |< q| S )z
    A DataFrame with many dtypes

    * datetime
    * datetimetz
    * timedelta
    * [u]int{8,16,32,64}
    * float{32,64}

    The columns are the name of the dtype.
    )Z20032002Z2001r   Z2005z
US/Eastern)Z3d2dZ1dr   Z5d)r   r   r   )
r   r   r	   r
   r   r   r   r   r   r   )         r      dtype)pdZ	DataFrameto_datetimeZtz_localizeZto_timedeltar   )Zdfr    r   ]/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/series/methods/test_nlargest.pys_main_dtypes   s   
r   )paramsc                 C   s
   || j  S )zEach series in s_main_dtypes.)param)requestr   r   r   r   s_main_dtypes_splitG   s   
r!   c                 C   sL   t | |d}t||d}|dkrg dng d}|j| }t|| d S )Nr   r   	nsmallest)r   r   r   )r   r   r   )r   getattrloctmassert_series_equal)valsr   methodserresultZexpected_idxrexpectedr   r   r   assert_check_nselect_boundaryM   s
   
r,   c                   @   s   e Zd Zejdeg dddeg dddeg dddeedeedddgd	d
 Zdd Z	dd Z
ejdedddd Zdd Zdd Zejdddgdd Zdd Zejdd d!gd gfg d"d gfgd#d$ Zd%d& Zd'd( Zd)S )*TestSeriesNLargestNSmallestr)      @r   r   r   5objectr   )r/   r   r   r   r   Z
complex128Zabcdecategoryc              	   C   sz   |j }d| }dt|ddf}|j|jf}t||D ]\}}tjt|d || W d    n1 s5w   Y  qd S )Nz3Cannot use method 'n(largest|smallest)' with dtype r   r   match)r   lennlargestr"   r   pytestraises	TypeError)selfr.   dtmsgargsmethodsr(   argr   r   r   test_nlargest_errorW   s   

z/TestSeriesNLargestNSmallest.test_nlargest_errorc                 C   s  |}t |d|jddg  t |jddd|jddg  |jdd }t |d| t |d| t |d| t |d| t |t||  t |t|d |  t |t||jg d  t |t|d |jg d  d S )	Nr   r   lastZkeepr   r   r3   )   r   r   r   r   )r%   r&   r"   ilocr7   r6   sort_values)r;   r!   r)   emptyr   r   r   test_nsmallest_nlargestl   s     (z3TestSeriesNLargestNSmallest.test_nsmallest_nlargestc                 C   sv  t dtjdddg}| }|jg d }t|| | }|jg d }t|| d}tj	t
|d |jd	d
 W d    n1 sFw   Y  tj	t
|d |jd	d
 W d    n1 scw   Y  t dgd g dd}t dgd g dd}t dgd g dd}|d}t|| |jddd
}t|| |d}t|| |jddd
}t|| d S )Nr/   r   r   r   )rD   r   r   r   r   )r   r   r   rD   r   z#keep must be either "first", "last"r4   invalidrC   )r   r   r   rD   r   indexr   )r   r   r   )r   rD   r   rB   )r   npnanr7   rE   r%   r&   r"   r8   r9   
ValueError)r;   r)   r*   r+   r=   Zexpected_firstZexpected_lastr   r   r   test_nlargest_misc   s2   

z.TestSeriesNLargestNSmallest.test_nlargest_miscnr   r   c                 C   sd   t g dg dd}||}|jdd|}t|| ||}| |}t|| d S )N)r   rD   r   r   )r   r   r   r   rJ   F)Z	ascending)r   r7   rF   headr%   r&   r"   )r;   rP   r)   r*   r+   r   r   r   test_nlargest_n   s   

z+TestSeriesNLargestNSmallest.test_nlargest_nc                 C   s<   t |}|j|j}}||d |d |g}t||| d S Nr   rL   Ziinfominmaxr,   )r;   nselect_methodZany_int_numpy_dtype
dtype_infomin_valmax_valr'   r   r   r   test_nlargest_boundary_integer   s   
z:TestSeriesNLargestNSmallest.test_nlargest_boundary_integerc           	      C   sL   t |}|j|j}}t j||gd|d\}}||||g}t||| d S )Nr   r   )rL   ZfinforU   rV   	nextafterr,   )	r;   rW   Zfloat_numpy_dtyperX   rY   rZ   Zmin_2ndZmax_2ndr'   r   r   r   test_nlargest_boundary_float   s
   
z8TestSeriesNLargestNSmallest.test_nlargest_boundary_floatr   zdatetime64[ns]ztimedelta64[ns]c                 C   sB   t d}|j|j}}|d |d |d ||g}t||| d S )Nr
   r   r   rT   )r;   rW   r   rX   rY   rZ   r'   r   r   r   #test_nlargest_boundary_datetimelike   s   
z?TestSeriesNLargestNSmallest.test_nlargest_boundary_datetimelikec                 C   sd   t g d}|jddd}t g d}t|| |jddd}t g dg dd	}t|| d S )
N)
   	         rb   rb   rb      rD   allrC   )r_   r`   ra   rb   rb   rb   rb   r   )rc   rb   rb   rb   rb   )rb   r   rD   r   rc   rJ   )r   r7   r%   r&   r"   )r;   r)   r*   r+   r   r   r   %test_nlargest_duplicate_keep_all_ties   s   zATestSeriesNLargestNSmallest.test_nlargest_duplicate_keep_all_tieszdata,expectedTF)TFTTc                 C   s*   t |}|d}t |}t|| d S rS   )r   r7   r%   r&   )r;   datar+   r)   r*   r   r   r   test_nlargest_boolean   s   
z1TestSeriesNLargestNSmallest.test_nlargest_booleanc                 C   sz   |}t jdj| dd}t| |d}tj|d< |	d}tt 
|d|j
dd	d|}t|| d S )Nr_   F)copyr   r   r   rJ   )rL   randomZrandnZastypelowerr   rh   r   ZNAr7   deleterK   r%   r&   )r;   Zany_numeric_ea_dtyper   Zarrr)   r*   r+   r   r   r   test_nlargest_nullable   s   

z2TestSeriesNLargestNSmallest.test_nlargest_nullablec                 C   sh   t g d}|jddd}t g d}t|| t g d}|jddd}t g d}t|| d S )N)r   r   r   r   r   Nr   rd   rC   )g      ?g       @r/   r/   r/   )r   r   NNN)r   r"   r%   r&   )r;   sr*   r+   r   r   r   #test_nsmallest_nan_when_keep_is_all   s   z?TestSeriesNLargestNSmallest.test_nsmallest_nan_when_keep_is_allN)__name__
__module____qualname__r8   markZparametrizer   listrA   rH   rO   rangerR   r[   r]   r^   re   rg   rl   rn   r   r   r   r   r-   V   s4    

	 

	
r-   )__doc__	itertoolsr   numpyrL   r8   Zpandasr   r   Zpandas._testingZ_testingr%   Zmain_dtypesZfixturer   r!   r,   r-   r   r   r   r   <module>   s    

'
	