o
    ҷhC                     @   s^   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
 d dlmZ G dd dZdS )    )datetime	timedeltaN)InfinityNegInfinity)	DataFrameSeriesc                   @   s*  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fdyg dtiee+dg dzfgd{d| Z,ejd}d~dgdd 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    W/var/www/html/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
         ?      @       @rL   r	   Tpctr   rM   )bca)rR   rQ   rP   rM   rL   rK   Fnumeric_only)rM   r   rK   )r	   r   r   rP   rR   rK   )rK   rK   rM     r   r   i  r
   )rU   	ascendingrM   rK   rL   )#B;rY   r(   gDcLg_QPgKH9)r   rK   r   g      @g      @r   rM   )r   r.   r5   r=   r+   r,   r   )r   rF   expectedrG   datarH   r    r    r!   
test_rank2L   sF    zTestRank.test_rank2c                 C   s>   t tjdddd}| }|  |}t|| d S )Nr   )r(   r
   float64dtype)	r   r+   r7   r8   standard_normalcopyr.   r5   r=   r   rF   r[   rG   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   FrT   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)rq   rW   z3na_option must be one of 'keep', 'top', or 'bottom'rg   badT)r)   r*   r+   r,   r-   r.   r1   r2   r0   r3   r4   r5   r6   r   to_dictTassert_numpy_array_equalrl   
ValueError)r   r>   r?   r@   rA   rC   rD   rE   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   ri   indexcolumns)r   r5   r=   r.   )r   rF   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}   )rj   r"   r   ordinalr^   )r)   r*   r+   r7   r8   r9   rangeshaper   r.   r3   r4   r;   r^   r5   r=   )r   r   r   r?   xscolsvalsrF   rG   sprankr[   r    r    r!   test_rank_methods_frame   s   
z TestRank.test_rank_methods_framer`   )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)rW   r"   r   T)r"   rW   rU   )rF   dropnar;   r.   r   r5   r=   )r   r"   r`   rF   resr[   res2res3r    r    r!   test_rank_descending   s   zTestRank.test_rank_descendingrj   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"   rj   )r   ru   r.   r5   r=   )rF   r[   r"   rj   exp_dfrG   r    r    r!   _check2d  s   z3TestRank.test_rank_2d_tie_methods.<locals>._check2dr   )r   r   )rF   r;   results)r   r"   rj   r`   rF   r   framer    r    r!   test_rank_2d_tie_methods
  s   

z!TestRank.test_rank_2d_tie_methodsz
method,expr   )rK   rK   rK   )rK         ?UUUUUU?)rK   r   UUUUUU?r   )r   rK   rK   )r   r   r   )r   r   r   r   )rK   r   r   )rK   r   r   r   )r   rK   rK   )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"   rO   )r   r.   r5   r=   )r   r"   rH   rF   rG   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   TrN   r	   )r   r+   aranger.   r   all)r   rF   rG   r    r    r!   test_pct_max_many_rowsC  s
   zTestRank.test_pct_max_many_rowszcontents,dtypeir   g#Bǻg}gJzgWw'&l7rY   g|=r&   r^   gj7֖float32r   uint8ii'  i g    _Bint641r   BABar$   objectrV   
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^   rK   r   r   )r+   r,   r   arrayr   lenr7   r8   choiceinsertpermutationr.   r5   assert_equal)r   contentsr`   frame_or_seriesdtype_na_mapr0   	exp_orderna_valuenan_indicesrandom_orderobjr[   rG   r    r    r!   test_rank_inf_and_nanL  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|   r`   r   r   )r+   r,   r2   r   r.   rb   r5   r=   )r   r|   r   r   rF   	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 )NrR   r   rK   rM   rL   )r   r+   r2   r.   r5   r=   rc   r    r    r!   test_rank_both_inf  s   zTestRank.test_rank_both_infzna_option,ascending,expectedrr   T)rL   rK   rM   FrX   rp   rS   rJ   c                 C   s>   |t jt jt j g}|j|||d}||}t|| d S )Nr"   rq   rW   )r+   r2   r,   r.   r5   r   )r   r   r"   rq   rW   r[   r   rG   r    r    r!   test_rank_inf_nans_na_option  s   z%TestRank.test_rank_inf_nans_na_option)rK   rM         @rL   )rM   rL   rK   r   c                 C   s4   |g d}|j d||d}||}t|| d S )Nfoor   Nr   r   r   )r.   r5   r   )r   r   rq   rW   r[   r   rG   r    r    r!   test_rank_object_first  s   
zTestRank.test_rank_object_firstzdata,expected)r	   r   rR   )r   r   r   )rR   rP   rP   r   rR   )r|   r}   c                 C   sZ   t |}tjtdd |  W d    n1 sw   Y  |jdd}t|| d S )Nz&'<' not supported between instances ofrg   TrT   )r   r)   rl   rm   r.   r5   r=   )r   r\   r[   rF   rG   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.   r5   assert_series_equal)r   r`   	exp_dtyper   rG   r[   r    r    r!   test_rank_string_dtype  s
   
zTestRank.test_rank_string_dtype).__name__
__module____qualname__r   r+   r,   sr   rF   r   r   r)   fixturer"   rI   r]   rd   ro   r{   r~   markparametrizer   r   r   r   r   
single_cpur   r2   iinfor   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   pandas._testing_testingr5   r   r    r    r    r!   <module>   s    