o
    d+E                     @   s  d dl mZ d dlZd dlZd dlZd dlmZmZ d dl	m
  mZ d dlmZmZmZmZmZ d dlmZ d dlmZ ejdd Zejded	d
ddejdd	dejd
g
gdeddddejdddejdg
gdeddddejdddejdg
gdeddddejdddejdg
gdeddddejdddejdg
ggddd Zejdddd d!ejd"ed#d$ejd%ed#d$gdd&d' ZG d(d) d)Z ej!"d*dgd+gfddgd,d+gfddgd+d+gfg d-g d.fg d/g d0fg d1g d2fg d3g d4fg d5g d6fg d7g d8fg	d9d: Z#ej!"d*dgd+gfddgd,d+gfddgd,d,gfg d-g d.fg d/g d;fg d1g d2fg d3g d<fg d5g d=fg d7g d8fg	d>d? Z$ej!"d*dgd+gfddgd,d+gfddgd+d+gfg d-g d.fg d/g d@fg d1g d2fg d3g dAfg d5g d6fg d7g d8fg	dBdC Z%ej!"d*dgd+gfddgd,d+gfddgdDdDgfg d-g d.fg d/g dEfg d1g d2fg d3g dFfg d5g dGfg d7g d8fg	dHdI Z&ej!"d*dgd+gfddgd,d+gfddgd,d+gfg d-g d.fg d/g d.fg d1g d2fg d3g dJfg d5g dKfg d7g d8fg	dLdM Z'ej!j(dNdO Z)dS )P    )chainN)InfinityNegInfinity)NANaTSeries	Timestamp
date_range)CategoricalDtypec                   C   s    t ddddtjdddtjdg
S )N               )r   npnan r   r   Y/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/series/methods/test_rank.pyser   s    r   averageg      ?g      @      @g      @g       @minr   r      r      maxr      r   firstdense)paramsc                 C      | j S Nparamrequestr   r   r   results   s   
r%   objectfloat64Zint64Float64ZInt64float64[pyarrow]pyarrowZmarkszint64[pyarrow]c                 C   r   r    r!   r#   r   r   r   dtype*   s   r,   c                   @   s  e Zd Zejdd Zdd Zdd Zej	
ddegd	d
 Zejej	
dddgej	
dg dej	
dg dej	
ddde e fdejejej fdeejej fejdeejej eddgdd Zdd Zejej	
dg dej	
dejdgejdgejd ggd!d" Zej	
d#d$gd$gfd%gd$gfdgd$gfd%d%gd$d$gfg d&g d&fg d'g d(fg d)g d*fg d+g d,fgd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 ZdS )7TestSeriesRankc                 C   s,  ddl m} tj|d d d< d|d dd< | }|d }t|| t|}|	tj
}t|||jdd	}tj||< t|| ttd
d}| }	|t }t|	| ttd
d }|d }|jdd}	t|	| ttdd}ttdd}|jdd}	t|	| |d}tj|d< ttdd}tj|d< |jdd}	t|	| ttd
d }tj|d< |d }|jdd}	t|	| tttjd}| }|jdd}	t|	| ttd
ddd }tj|d< |d }|jdd}	t|	| tdd
d}
ttd
|
ddd }tj|jd< |d }|jdd}	t|	| tg d}tg d}| }	t|	| tdddtgdd}tdddtjg}| }	t|	| tjg ddd}tjt|}t|| }t|d dd}| }	t|	| d S ) Nr   rankdatar         @
   r   Ots)indexnamer         ?      @Tpctr   d   g)\(?floatg@_)?r   r,   z1/1/1990)Zperiods)gJz5g0.++#B;g{Gz?gIf;g?)r   r   r   r   r         @z3 dayz	1 day 10mz-2 dayzm8[ns])ig#Bǻg}gJzr   gWw'&l7r=   g|=r   (   r'   )scipy.statsr/   r   r   rankastypetmassert_series_equalisnanZfillnainfr   r4   arangerepeatr;   copyr	   Zilocr   arrayrandomZpermutationlen)selfZdatetime_seriesr/   ranksZoranksmaskZfilledexpiseriesZiranksrngvaluesZrandom_orderr   r   r   	test_rank:   s   






zTestSeriesRank.test_rankc                 C   s  t g d}t g d}t g dtg ddd}t| | t|jdd| t g dtg ddd}t g d}| }t|| t g d	tg d	d}t g d}| }	t|	| t d
dddddtjgtg dd}
t g d}t g d}t ddddddtjg}t|
jdd| t|
jdd| t|
jdd| t g d}t g d}t ddddddtjg}t|
jddd| t|
jddd| t|
jddd| d }tj	t
|d! |
jd"dd W d    n	1 s	w   Y  tj	t
|d! |
jddd W d    n	1 s(w   Y  t d
dddtjgtg d#d}
t g d$}t g d%}t d&d'd(dtjg}t|
jddd)| t|
jddd)| t|
jddd)| d S )*N)r6          @      @r0   r7   r>   )r>   r7   r0   rW   rV   r6   )r   secondthirdfourthfifthsixthT)
categoriesorderedF	ascending)rV   r0   r>   rW   r6   r7   )r   r   r   r   r   r   r   rX   rY   rZ   r[   r\   )r   rX   rY   rZ   r[   r\   Zseventh)rV   rW   r0   r7   r>   r   r6   )r6   rV   rW   r0   r7   r>   r   r6   rV   rW   r0   r7   r>   top)	na_optionbottomkeep)r   r>   r7   r0   rW   rV   r6   )r>   r7   r0   rW   rV   r6   r   )rb   r`   z3na_option must be one of 'keep', 'top', or 'bottom'matchbad)r   rX   rY   rZ   )皙?333333?皙?r6   皙?rk   rh   ri   rj   r6         ?      ?      ?)rb   r9   )r   rC   r
   rD   rE   rB   r   NaNpytestraises
ValueError)rN   rQ   Zexp_descr^   	unorderedZexp_unorderedresZ
unordered1Zexp_unordered1Zres1Zna_serZexp_topZexp_botZexp_keepmsgr   r   r   test_rank_categorical   s   	z$TestSeriesRank.test_rank_categoricalc                 C   sZ   t ddg}|jdd d}tjt|d |d W d    d S 1 s&w   Y  d S )Nr   r   r   methodz,No axis named average for object type Seriesre   )r   rB   rq   rr   rs   )rN   srv   r   r   r   test_rank_signature   s   "z"TestSeriesRank.test_rank_signaturer,   Nc                 C   s>   |\}}|d u r
|n| |}|j|d}t|t| d S )Nrx   )rC   rB   rD   rE   r   )rN   r   r%   r,   ry   rQ   resultr   r   r   test_rank_tie_methods   s   z$TestSeriesRank.test_rank_tie_methodsr`   TFry   r   r   r   r   r   rb   )ra   rc   rd   z!dtype, na_value, pos_inf, neg_infr&   r'   r(   r)   r*   r+   c                 C   sf  |dkr|dkrd}nd}nd}d}	|g|	 |g|	  |g|	  }
t |
|d}g dg dg d	fg d
g dg dfg dg dg dfg dg dg dfg d
g dg dfd}|| }|dkrp|d |d |d g}n|dkr|d |d |d g}n|d tjg|	 |d g}|r|n|d d d }tt|}|j|||d}t|t ||d d S )Nr)   r   zuint64[pyarrow]r'   r   r<   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )	   r   r   r   r   r   )r   r   r   )r   r   r   r~   ra   r   r   r   rc   r?   )ry   rb   r`   )	r   r   r   listr   from_iterablerB   rD   rE   )rN   ry   rb   r`   r,   Zna_valueZpos_infZneg_infZ	exp_dtypechunkZin_arrrR   Z	exp_ranksrO   orderexpectedr|   r   r   r   "test_rank_tie_methods_on_infs_nans   s0   z1TestSeriesRank.test_rank_tie_methods_on_infs_nansc                 C   sN   t dtjtjtj dg}|jdd}t dtjdddgdd	}t|| d S )
Nr      Fr_   r   r   r   r'   r<   )r   r   r   rG   rB   rD   rE   )rN   rR   r|   rQ   r   r   r   test_rank_desc_mix_nans_infs0  s   z+TestSeriesRank.test_rank_desc_mix_nans_infsz	op, valuer   g    .Agư>c                    s   ddl m} tjd t fddtdddD  tj  dd tt D }| |}t	||d}|j
|d	}|||d
krF|nd}	t	|	|dd}
t||
 d S )Nr   r.   r   c                    s   g | ]} |d  qS r    r   .0iZxsr   r   
<listcomp>F  s    z;TestSeriesRank.test_rank_methods_series.<locals>.<listcomp>r   c                 S   s   g | ]
}t td | qS )a)chrordr   r   r   r   r   I  s    )r4   rx   r   Zordinalr'   )rA   r/   r   rL   ZrandnZconcatenaterangeshufflerM   r   rB   rC   rD   rE   )rN   ry   opvaluer/   r4   valsr3   r|   Zsprankr   r   r   r   test_rank_methods_series8  s    
z'TestSeriesRank.test_rank_methods_seriesser, expr   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r?   )r   r   r   r   r   c                 C   s:   t ||}|jdd}t ||j}t|| d S )Nr   rx   r   rC   rB   r,   rD   rE   )rN   r,   r   rQ   rz   r|   r   r   r   r   test_rank_dense_methodQ  s   z%TestSeriesRank.test_rank_dense_methodc           
      C   s~   |\}}d|v r|  }n||}|jdd}| |  }t|| | | j|d}|j|dd}	t|	| d S )Nr   Fr_   rx   )ry   r`   )dropnarC   rB   r   rD   rE   )
rN   r   r%   r,   ry   _rz   ru   r   Zres2r   r   r   test_rank_descendingd  s   

z#TestSeriesRank.test_rank_descendingc                 C   sF   |\}}|  d}|j|d}t|  }|j|_t|| d S )Ni8rx   )r   rC   rB   r   r4   rD   rE   )rN   r   r%   ry   rQ   rz   r|   r   r   r   r   test_rank_ints  s   zTestSeriesRank.test_rank_intc                 C   s@   t tjgd tjdd t tjgd tjdd d S )N    Tr_   F)r   r   r   rC   r&   rB   )rN   r   r   r   test_rank_object_bug|  s   "z#TestSeriesRank.test_rank_object_bugc                 C   s4   t tdtg}| }|  |}t|| d S )Nz2017-01-05 10:20:27.569000)r   r   r   rJ   rB   rD   rE   )rN   rz   r   r|   r   r   r   test_rank_modify_inplace  s
   z'TestSeriesRank.test_rank_modify_inplace) __name__
__module____qualname__tdZskip_if_no_scipyrU   rw   r{   rq   markparametrizer&   r}   r   r   r   r   rG   r   r"   
skip_if_nor   r   operatoraddmulr   r   r   r   r   r   r   r   r   r   r-   9   sl    
[X
!



	r-   r   r6   rn   r   )UUUUUU?UUUUUU?r6   )r   r   r   )rn   r6   r6   r   )r6   r   r   r   )r   r   r6   r6   r   )r   r   r   r   r   r   )r   r   r   r   r6   r6   r   rl   c                 C   <   t || }|jddd}t ||j}t|| d S )Nr   Try   r9   r   r,   r   rQ   rz   r|   r   r   r   r   test_rank_dense_pct     r   )r   r   r   )rk   rk   rj   rj   ri   )UUUUUU?r   rn   rn   竪?r   c                 C   r   )Nr   Tr   r   r   r   r   r   test_rank_min_pct  r   r   )r   r6   r6   )rh   rh   r6   r6   ri   c                 C   r   )Nr   Tr   r   r   r   r   r   test_rank_max_pct  r   r   ro   )r   r   r   )333333?r   ?r   ri   )rm   rm   竪?r   UUUUUU?r   c                 C   r   )Nr   Tr   r   r   r   r   r   test_rank_average_pct  r   r   )rk   rh   rj   r6   ri   )r   r   rn   r   r   r6   c                 C   r   )Nr   Tr   r   r   r   r   r   test_rank_first_pct  r   r   c                  C   s.   t td} | jdd }|dksJ d S )Ni  Tr8   r   )r   r   rH   rB   r   )rz   r|   r   r   r   test_pct_max_many_rows  s   r   )*	itertoolsr   r   numpyr   rq   Zpandas._libs.algosr   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r	   Zpandas._testingZ_testingrD   Zpandas.api.typesr
   Zfixturer   rK   r   r%   r"   r   r,   r-   r   r   r   r   r   r   r   Z
single_cpur   r   r   r   r   <module>   s    
$$$$$
	
  Z









