o
    £D®fžD  ã                   @   sb   d dl m Z mZ d dlZd dlZd dlmZmZ d dlm	Z	m
Z
mZ d dlmZ G dd„ dƒZdS )é    )ÚdatetimeÚ	timedeltaN)ÚInfinityÚNegInfinity)Ú	DataFrameÚIndexÚSeriesc                   @   s8  e Zd Zeddddejdddejdg
ƒZeeedœƒZe 	ddd	d
ejd
ddejdg
¡e 	ddddejdddejdg
¡e 	ddddejdddejdg
¡e 	ddddejdddejdg
¡e 	ddddejdddejdg
¡dœZ
ejg d¢d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g¡ej d!g d¢¡d"d#„ ƒƒZej d$g d%¢¡d&d'„ ƒZej d(d dg¡ej d$d)eg¡d*d+„ ƒƒZej d,d-g d.¢g d/¢g d0¢gfd1g d2¢g d3¢g d4¢gfd5g d.¢g d6¢g d7¢gfd8g d9¢g d:¢g d;¢gfd<g d2¢g d=¢g d7¢gfg¡d>d?„ ƒZejjd@dA„ ƒZej dBej dCdDdEdFdGd dHdIdJddKejgdLfej dCdDdEdFdMd dHdIdJddKejgdNfe ej¡j dddOe ej¡j!gdPfe ej"¡j dQd ddRdSdTe ej"¡j!gdUfe#ƒ dVdWdXdYdZe$ƒ gd[fe%d\ddƒe%d\ddƒe%d\ddƒgd]fg¡d^d_„ ƒZ&d`da„ Z'dbdc„ Z(ej dddedfg dg¢fdedhg di¢fdjdfg dk¢fdjdhg dl¢fg¡dmdn„ ƒZ)ej dddjdfg do¢fdjdhg do¢fdedfg dp¢fdedhg dp¢fg¡dqdr„ ƒZ*ej dsg dt¢g du¢dvœedwg dx¢ie+dwgedydzfd{g dt¢iee,dƒg d|fg¡d}d~„ ƒZ-ej dd€dg¡d‚dƒ„ ƒZ.d)S )„ÚTestRanké   é   é   é   é   ©ÚAÚBç      ø?g      @ç      @ç      @g       @é   é   é   )ÚaverageÚminÚmaxÚfirstÚdense)Úparamsc                 C   s   |j S )z5
        Fixture for trying all rank methods
        )Úparam)ÚselfÚrequest© r!   ú]/home/ubuntu/webapp/venv/lib/python3.10/site-packages/pandas/tests/frame/methods/test_rank.pyÚmethod"   s   zTestRank.methodc                 C   sL  t  d¡}tj|jd d d…df< tj|jd d d…df< tj|jd d d…df< tj|jd d d…d	f< | ¡ }| d
¡}t |j¡}| tj	¡j}t 
|jd|¡}tj||< t 
|jd
|¡}tj||< t |j|¡ t |j|¡ ttj d¡jdddd d¡ƒ}	|	 ¡ }
|	 t¡ ¡ }t |
|¡ |	 d
¡}
|	 t¡ d
¡}t |
|¡ d S )Núscipy.statsr   r   r   r   r   ÚCr   ÚDr
   r   é(   )Úsize)é
   r   )ÚpytestÚimportorskipÚnpÚnanÚlocÚrankÚisnanÚvaluesÚfillnaÚinfÚapply_along_axisÚrankdataÚtmÚassert_almost_equalr   ÚrandomÚdefault_rngÚintegersÚreshapeÚastypeÚfloatÚassert_frame_equal)r   Úfloat_frameÚsp_statsÚranks0Úranks1ÚmaskÚfvalsÚexp0Úexp1ÚdfÚresultÚexpr!   r!   r"   Ú	test_rank)   s0   



ÿ
zTestRank.test_rankc                 C   sP  t g d¢g d¢gƒ}t g d¢g d¢gƒd }|jddd}t ||¡ t g d¢g d¢gƒ}| d¡d	 }|jddd}t ||¡ t g d
¢g d¢gƒ}t g d¢g d¢gƒ}|jddd}t ||¡ t g d¢g d¢gƒ}|jddd}t ||¡ t dtjdgg d¢gƒ}t d	tjdgg d¢gƒ}|jddd}t ||¡ t d	tjdgg d¢gƒ}|jddd}t ||¡ tdddƒtjtdddƒgtdddƒtdddƒtdddƒgg}t |ƒ}t d	tjdgg d¢gƒ}|jdddd}t ||¡ t dtjd	gg d¢gƒ}|jdddd}t ||¡ t dg d¢iƒ}t dg d¢iƒ}t | ¡ |¡ d S )N)r
   r   r   )r
   r   r   ©ç      ð?ç      @ç       @rM   r
   T©Úpctr   rN   )ÚbÚcÚa)rS   rR   rQ   ©rN   rM   rL   F©Únumeric_only)rN   r   rL   )r
   r   r   rQ   rS   rL   )rL   rL   rN   éÑ  r   r   iÐ  r   )rV   Ú	ascending©rN   rL   rM   )ç#B’¡œÇ;éûÿÿÿrZ   r)   gDóÂääécLg_ûðQïüŠPg ÂëþKH´9)r   rL   r   g      @g      @r   rN   )r   r/   r6   r>   r,   r-   r   )r   rG   ÚexpectedrH   ÚdatarI   r!   r!   r"   Ú
test_rank2M   sF    þzTestRank.test_rank2c                 C   s>   t tj d¡ d¡dd}| ¡ }| ¡  |}t ||¡ d S )Nr   )r)   r   Úfloat64©Údtype)	r   r,   r8   r9   Ústandard_normalÚcopyr/   r6   r>   ©r   rG   r\   rH   r!   r!   r"   Útest_rank_does_not_mutate~   s   ÿz"TestRank.test_rank_does_not_mutatec                 C   sh   t  ¡ |d< tddd|d< |jdd tjtdd |jdd	 W d   ƒ d S 1 s-w   Y  d S )
Nr   r
   )ÚdaysÚsecondsr   FrU   z"not supported between instances of©Úmatch©Úaxis)r   Únowr   r/   r*   ÚraisesÚ	TypeError)r   Úfloat_string_framer!   r!   r"   Útest_rank_mixed_frame‰   s   "ÿzTestRank.test_rank_mixed_framec                 C   sô  t  d¡}tj|jd d d…df< tj|jd d d…df< tj|jd d d…df< tj|jd d d…d	f< |jd
d}|jdd
d}| tj¡j}t 	|j
d|¡}t 	|j
d|¡}t |j|¡ t |j|¡ |jdd}|jddd}| | ¡ d  ¡ ¡j}|j}	|	 |	 ¡ d  ¡ ¡j}	|	 tj¡j}	t 	|j
d|¡}t 	|j
d|	¡}t |j|¡ t |j|¡ |jddd}|jdddd}| tj¡j}t 	|j
d| ¡}t 	|j
d| ¡}t |j|¡ t |j|¡ |jd
dd}|jdd
dd}| | ¡ d  ¡ ¡j}|j}	|	 |	 ¡ d  ¡ ¡j}	|	 tj¡j}	t 	|j
d| ¡}t 	|j
d|	 ¡}t |j|¡ t |j|¡ d}
t jt|
d |jddd W d   ƒ n	1 sSw   Y  t jt|
d |jddd W d   ƒ d S 1 ssw   Y  d S )Nr$   r   r   r   r   r   r%   r   r&   Úbottom)Ú	na_optionr
   r   ÚtopF)rr   rX   z3na_option must be one of 'keep', 'top', or 'bottom'rh   ÚbadT)r*   r+   r,   r-   r.   r/   r2   r3   r1   r4   r5   r6   r7   r   Úto_dictÚTÚassert_numpy_array_equalrm   Ú
ValueError)r   r?   r@   rA   rB   rD   rE   rF   Úfval0Úfval1Úmsgr!   r!   r"   Útest_rank_na_option‘   s\   
ÿ$ÿzTestRank.test_rank_na_optionc                 C   sP   t ddgddggƒ}t |jdd|jdd¡ t |jdd|jdd¡ d S )	Nr   r
   r   r   r   rj   ÚindexÚcolumns)r   r6   r>   r/   )r   rG   r!   r!   r"   Útest_rank_axisÝ   s    zTestRank.test_rank_axisÚaxr   Úmc                 C   sÂ   t  d¡}tj d¡ ddd¡}|d d }dd„ t|jd	 ƒD ƒ}||d
 |d fD ]3}t||d}|j	||d}t 
|j|||dkrF|nd¡}	|	 tj¡}	t|	|d d¡}
t ||
¡ q+d S )Nr$   r   r   é   )éd   é   g      $@c                 S   s   g | ]
}t td ƒ| ƒ‘qS )Úz)ÚchrÚord)Ú.0Úir!   r!   r"   Ú
<listcomp>ê   s    z4TestRank.test_rank_methods_frame.<locals>.<listcomp>r
   g    €„.Agíµ ÷Æ°>©r~   )rk   r#   r   Úordinalr_   )r*   r+   r,   r8   r9   r:   ÚrangeÚshaper   r/   r4   r5   r<   r_   r6   r>   )r   r€   r   r@   ÚxsÚcolsÚvalsrG   rH   Úsprankr\   r!   r!   r"   Útest_rank_methods_frameã   s   
ÿ÷z TestRank.test_rank_methods_framera   )ÚOÚf8Úi8c                 C   s¦   d|v r| j  ¡  |¡}n| j  |¡}|jdd}| ¡ |  ¡ }t ||¡ | ¡ | j|d}|dkrC|j|ddd}t ||¡ |j|ddd}t ||¡ d S )Nr‰   F)rX   ©r#   r”   T)r#   rX   rV   )rG   Údropnar<   r/   r   r6   r>   )r   r#   ra   rG   Úresr\   Úres2Úres3r!   r!   r"   Útest_rank_descending÷   s   zTestRank.test_rank_descendingrk   Nc                 C   s@   | j }ddd„}|d u r|n| |¡}||| j| ||d d S )Nr   r   c                 S   s@   t ||dœƒ}|dkr| j} |j}| j||d}t ||¡ d S )Nr   r
   ©r#   rk   )r   rv   r/   r6   r>   )rG   r\   r#   rk   Úexp_dfrH   r!   r!   r"   Ú_check2d  s   z3TestRank.test_rank_2d_tie_methods.<locals>._check2dr   )r   r   )rG   r<   Úresults)r   r#   rk   ra   rG   rŸ   Úframer!   r!   r"   Útest_rank_2d_tie_methods  s   

z!TestRank.test_rank_2d_tie_methodsz
method,expr   )rL   rL   rL   )rL   ç      à?çUUUUUUå?)rL   r£   çUUUUUUÕ?r   )r¥   rL   rL   )r¥   r¥   r¤   )r¥   r¥   r¥   r   )rL   r¤   r¤   )rL   r¤   r¥   r   )r¤   rL   rL   )r¤   r£   r¤   )r¤   r£   r¥   r   )r¤   r¥   r¤   c                 C   s@   t g d¢g d¢g d¢gƒ}|j|dd}t |ƒ}t ||¡ d S )N)éÜ  éB   r   )r¦   éA   r   )r¦   r¨   r
   T)r#   rP   )r   r/   r6   r>   )r   r#   rI   rG   rH   r\   r!   r!   r"   Útest_rank_pct_true  s   !zTestRank.test_rank_pct_truec                 C   sB   t t d¡t ddd¡dœƒ}|jdd ¡ }|dk ¡ sJ ‚d S )Ni  r   éÿÿÿÿr   TrO   r
   )r   r,   Úaranger/   r   Úall)r   rG   rH   r!   r!   r"   Útest_pct_max_many_rowsD  s
   ÿzTestRank.test_pct_max_many_rowszcontents,dtypeiÎÿÿÿrª   g#B’¡œÇ»gÙ}ÚõÐò¾ºg¸ÔJzîµgœWw'&l¡7rZ   g»½×Ùß|Û=r'   r_   g¹j7­Ö–¶Úfloat32rƒ   Úuint8iœÿÿÿi'  i † g    _ BÚint64Ú1r   ÚBAÚBar%   ÚobjectrW   Ú
datetime64c                 C   sÔ   t jt jd t  d¡dœ}t j||d}t jtt|ƒƒddd }||v rE|| }t j d¡ tt|ƒƒd¡}t  	|||¡}t  	||t j¡}t j d¡ 
t|ƒ¡}	|||	 ƒ}
|||	 dd}|
 ¡ }t ||¡ d S )NÚnat)r_   r®   r´   rµ   r`   r_   rL   r   r   )r,   r-   rµ   Úarrayr   Úlenr8   r9   ÚchoiceÚinsertÚpermutationr/   r6   Úassert_equal)r   Úcontentsra   Úframe_or_seriesÚdtype_na_mapr1   Ú	exp_orderÚna_valueÚnan_indicesÚrandom_orderÚobjr\   rH   r!   r!   r"   Útest_rank_inf_and_nanM  s"   >ü
zTestRank.test_rank_inf_and_nanc              
   C   s†   g d¢}g d¢}ddt jdddt jt jdt j g
}t||dœ|dd	}| ¡ }| ¡ }|d
  ¡ |d
< |d  ¡ |d< t ||¡ d S )N)
r   r   r   r   r
   r   r   r   é	   r)   )
r   r   r   r   r   r   r   r
   r   r   r   r   r   r   )Úcol1Úcol2r•   )r]   r}   ra   rÇ   rÈ   )r,   r-   r3   r   r/   rc   r6   r>   )r   r}   rÇ   rÈ   rG   Ú	df_resultÚseries_resultr!   r!   r"   Ú"test_df_series_inf_nan_consistency£  s   "þúz+TestRank.test_df_series_inf_nan_consistencyc                 C   s@   t dtj dtjgiƒ}t dg d¢iƒ}| ¡ }t ||¡ d S )NrS   r   ©rL   rN   rM   )r   r,   r3   r/   r6   r>   rd   r!   r!   r"   Útest_rank_both_inf¸  s   zTestRank.test_rank_both_infzna_option,ascending,expectedrs   T)rM   rL   rN   FrY   rq   rT   rK   c                 C   s>   |t jt jt j gƒ}|j|||d}||ƒ}t ||¡ d S )N©r#   rr   rX   )r,   r3   r-   r/   r6   r¼   )r   r¾   r#   rr   rX   r\   rÄ   rH   r!   r!   r"   Útest_rank_inf_nans_na_option¿  s   z%TestRank.test_rank_inf_nans_na_option)rL   rN   ç      @rM   )rN   rM   rL   rÐ   c                 C   sL   |g d¢ƒ}|j d||d}||ƒ}|rt|tƒr| d¡}t ||¡ d S )N©ÚfoorÒ   NrÒ   r   rÎ   Úuint64)r/   Ú
isinstancer   r<   r6   r¼   )r   r¾   rr   rX   r\   Úusing_infer_stringrÄ   rH   r!   r!   r"   Útest_rank_object_firstÐ  s   
zTestRank.test_rank_object_firstzdata,expected)r
   r   rS   )r   r   r   )rS   rQ   rQ   rÌ   r`   r‹   rS   )r}   r~   c                 C   sn   t |tt| ¡ ƒtdd}tjtdd | ¡  W d   ƒ n1 s$w   Y  |jdd}t	 
||¡ d S )Nr`   r‹   z&'<' not supported between instances ofrh   TrU   )r   r   ÚlistÚkeysr´   r*   rm   rn   r/   r6   r>   )r   r]   r\   rG   rH   r!   r!   r"   Útest_rank_mixed_axis_zeroã  s   
ÿz"TestRank.test_rank_mixed_axis_zerozdtype, exp_dtype)zstring[pyarrow]ÚInt64)zstring[pyarrow_numpy]r_   c                 C   sF   t  d¡ tg d¢|d}|jdd}tg d¢|d}t ||¡ d S )NÚpyarrowrÑ   r`   r   r—   )r
   r   Nr   )r*   r+   r   r/   r6   Úassert_series_equal)r   ra   Ú	exp_dtyperÄ   rH   r\   r!   r!   r"   Útest_rank_string_dtypeô  s
   
zTestRank.test_rank_string_dtype)/Ú__name__Ú
__module__Ú__qualname__r   r,   r-   Úsr   rG   r·   r    r*   Úfixturer#   rJ   r^   re   rp   r|   r   ÚmarkÚparametrizer“   rœ   r´   r¢   r©   Ú
single_cpur­   r3   Úiinfor¯   r   r   r°   r   r   r   rÅ   rË   rÍ   rÏ   rÖ   r   r   rÙ   rÞ   r!   r!   r!   r"   r	      s         û
$1L
ýþ	þþýþîþ
	
óðóð$ø
õ þÌþ
<üþ
	üþ
	
þûþ

þr	   )r   r   Únumpyr,   r*   Úpandas._libs.algosr   r   Úpandasr   r   r   Úpandas._testingÚ_testingr6   r	   r!   r!   r!   r"   Ú<module>   s    