o
    թZhD                     @   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ddg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!   [/var/www/html/lang_env/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integersZ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/   r6   r=   r,   r-   r   )r   rF   expectedrG   datarH   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   Zstandard_normalcopyr/   r6   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   Z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)ro   rW   z3na_option must be one of 'keep', 'top', or 'bottom'rf   badT)r*   r+   r,   r-   r.   r/   r2   r3   r1   r4   r5   r6   r7   r   to_dictTZassert_numpy_array_equalrk   
ValueError)r   r>   r?   r@   rA   rC   rD   rE   Zfval0Z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   rh   indexcolumns)r   r6   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ư>rx   )ri   r#   r   Zordinalr^   )r*   r+   r,   r8   r9   r:   rangeshaper   r/   r4   r5   r;   r^   r6   r=   )r   rz   r{   r?   ZxscolsvalsrF   rG   Z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   Zdropnar;   r/   r   r6   r=   )r   r#   r`   rF   resr[   Zres2Zres3r!   r!   r"   test_rank_descending   s   zTestRank.test_rank_descendingri   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#   ri   )r   rs   r/   r6   r=   )rF   r[   r#   ri   Zexp_dfrG   r!   r!   r"   _check2d  s   z3TestRank.test_rank_2d_tie_methods.<locals>._check2dr   )r   r   )rF   r;   results)r   r#   ri   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/   r6   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,   Zaranger/   r   all)r   rF   rG   r!   r!   r"   test_pct_max_many_rowsD  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   ZBAZ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 )NZnat)r^   r   r   r   r_   r^   rK   r   r   )r,   r-   r   arrayr   lenr8   r9   choiceinsertZpermutationr/   r6   assert_equal)r   contentsr`   frame_or_seriesZdtype_na_mapr1   Z	exp_orderZna_valueZnan_indicesZrandom_orderobjr[   rG   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\   rw   r`   r   r   )r,   r-   r3   r   r/   ra   r6   r=   )r   rw   r   r   rF   Z	df_resultZ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,   r3   r/   r6   r=   rb   r!   r!   r"   test_rank_both_inf  s   zTestRank.test_rank_both_infzna_option,ascending,expectedrp   T)rL   rK   rM   FrX   rn   rS   rJ   c                 C   s>   |t jt jt j g}|j|||d}||}t|| d S )Nr#   ro   rW   )r,   r3   r-   r/   r6   r   )r   r   r#   ro   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   sL   |g d}|j d||d}||}|rt|tr|d}t|| d S )Nfoor   Nr   r   r   Zuint64)r/   
isinstancer   r;   r6   r   )r   r   ro   rW   r[   Zusing_infer_stringr   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   r_   r   rR   )rw   rx   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 ofrf   TrT   )r   r   listkeysr   r*   rk   rl   r/   r6   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]Z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 )NZpyarrowr   r_   r   r   )r
   r   Nr   )r*   r+   r   r/   r6   Zassert_series_equal)r   r`   Z	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*   Zfixturer#   rI   r]   rc   rm   rv   ry   markZparametrizer   r   r   r   r   Z
single_cpur   r3   Z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*   Zpandas._libs.algosr   r   Zpandasr   r   r   Zpandas._testingZ_testingr6   r	   r!   r!   r!   r"   <module>   s    