U
    >vf+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dddgd-d.d+gfdddgd,d+d+gfdddgd+d.d-gfdddddgd-d-d+d+d.gfddddddgd-d-d.d.d+d+gfd/d0d1d2d3gd4d5d6d7d+gfg	d8d9 Z#ej!"d*dgd+gfddgd,d+gfddgd,d,gfdddgd-d.d+gfdddgd-d.d.gfdddgd+d.d-gfdddddgd4d4d7d7d6gfddddddgd:d:d,d,d;d;gfd/d0d1d2d3gd4d5d6d7d+g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dddgd-d.d+gfdddgd-d+d+gfdddgd+d.d-gfdddddgd5d5d+d+d6gfddddddgd-d-d.d.d+d+gfd/d0d1d2d3gd4d5d6d7d+g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dddgd-d.d+gfdddgd-d;d;gfdddgd+d.d-gfdddddgdAdAdBdBd6gfddddddgdCdCdDdDdEdEgfd/d0d1d2d3gd4d5d6d7d+gfg	dFdG Z&ej!"d*dgd+gfddgd,d+gfddgd,d+gfdddgd-d.d+gfdddgd-d.d+gfdddgd+d.d-gfdddddgd4d5d7d+d6gfddddddgd:d-d,d.d;d+gfd/d0d1d2d3gd4d5d6d7d+gfg	dHdI Z'ej!j(dJdK Z)dS )L    )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   I/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/series/methods/test_rank.pyser   s    r   averageg      ?g      @      @g      @g       @minr   r      r      maxr      r   firstdense)paramsc                 C   s   | j S Nparamrequestr   r   r   results   s    
r$   objectfloat64Zint64Float64ZInt64float64[pyarrow]pyarrowZmarkszint64[pyarrow]c                 C   s   | j S 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dddddgej	
ddddg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dddddg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d*d+d,gd*d+d,gfd-d+d*gd,d+d*gfd*d*d.d.d,gd*d*d,d,d+gfd/d0d1d2d3gd*d+d,d-d.gfgd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= ZdS )>TestSeriesRankc                 C   sN  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ddddddg}tdddd
ddg}| }	t|	| tdd d!tgd"d}tdddtjg}| }	t|	| tjd#d$d%d&d'dd(dd)dd*g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periodsgJz5g0.++g#B;g{Gz?gIf;g?      @z3 dayz	1 day 10mz-2 dayzm8[ns]ig#Bǻg}gJzgWw'&l7g|=(   r&   )scipy.statsr.   r   r   rankastypetmassert_series_equalisnanZfillnainfr   r3   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   sV  t ddddddg}t ddddddg}t ddd	d
ddgtddd	d
ddgdd}t| | t|jdd| t ddd	d
ddgtddd	d
ddgdd}t ddddddg}| }t|| t ddddddgtddddddgd}t ddddddg}| }	t|	| t ddd	d
ddtjgtddd	d
dddgd}
t dddddddg}t dddddddg}t ddddddtjg}t|
jdd| t|
jdd| t|
jdd| t dddddddg}t dddddddg}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 5 Q R X tj	t
|d |
jddd W 5 Q R X t ddd	d
tjgtddd	d
gd}
t d!d"d#dd$g}t d$d!d"d#dg}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 ))Nr5   g       @g      @r/   r6   r<   r   secondthirdZfourthZfifthZsixthT)
categoriesorderedF	ascendingr   r   r   r   r   r   Zseventhr   top)	na_optionbottomkeep)r[   rY   z3na_option must be one of 'keep', 'top', or 'bottom'matchbad皙?333333?皙?皙?      ?      ?      ?)r[   r8   )r   rA   r
   rB   rC   r@   r   NaNpytestraises
ValueError)rL   rO   Zexp_descrW   	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   sD   t ddg}|jdd d}tjt|d |d W 5 Q R X d S )Nr   r   r   methodz,No axis named average for object type Seriesr^   )r   r@   ri   rj   rk   )rL   srn   r   r   r   test_rank_signature   s
    z"TestSeriesRank.test_rank_signaturer+   Nc                 C   s>   |\}}|d kr|n| |}|j|d}t|t| d S )Nrp   )rA   r@   rB   rC   r   )rL   r   r$   r+   rq   rO   resultr   r   r   test_rank_tie_methods   s    z$TestSeriesRank.test_rank_tie_methodsrY   TFrq   r   r   r   r   r   r[   rZ   r\   r]   z!dtype, na_value, pos_inf, neg_infr%   r&   r'   r(   r)   r*   c              	   C   s  |dkr|dkrd}q d}nd}d}	|g|	 |g|	  |g|	  }
t |
|d}dddgdddgd	d	d	gfd
d
d
gdddgdddgfdddgdddgdddgfd
ddgdddgdd	dgfd
d
d
gdddgdddgfd}|| }|dkr|d
 |d |d g}n<|dkr |d |d |d
 g}n|d tjg|	 |d
 g}|rD|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   rZ   r   r\   r=   )rq   r[   rY   )	r   r   r   listr   from_iterabler@   rB   rC   )rL   rq   r[   rY   r+   Zna_valueZpos_infZneg_infZ	exp_dtypechunkZin_arrrP   Z	exp_ranksrM   orderexpectedrt   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      FrX   r   r   r   r&   r;   )r   r   r   rE   r@   rB   rC   )rL   rP   rt   rO   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r|nd}	t	|	|dd}
t||
 d S )Nr   r-   rv   c                    s   g | ]} |d  qS r   r   .0i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     )r3   rp   r   Zordinalr&   )r?   r.   r   rJ   ZrandnZconcatenaterangeshufflerK   r   r@   rA   rB   rC   )rL   rq   opvaluer.   r3   valsr2   rt   Zsprankr{   r   r   r   test_rank_methods_series8  s     
z'TestSeriesRank.test_rank_methods_seriesser, expr   r   r   r   r   r=   c                 C   s:   t ||}|jdd}t ||j}t|| d S )Nr   rp   r   rA   r@   r+   rB   rC   )rL   r+   r   rO   rr   rt   r{   r   r   r   test_rank_dense_methodQ  s    z%TestSeriesRank.test_rank_dense_methodc           
      C   s~   |\}}d|kr|  }n
||}|jdd}| |  }t|| | | j|d}|j|dd}	t|	| d S )Nr   FrX   rp   )rq   rY   )dropnarA   r@   r   rB   rC   )
rL   r   r$   r+   rq   _rr   rm   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i8rp   )r   rA   r@   r   r3   rB   rC   )rL   r   r$   rq   rO   rr   rt   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    TrX   F)r   r   r   rA   r%   r@   )rL   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   rH   r@   rB   rC   )rL   rr   r{   rt   r   r   r   test_rank_modify_inplace  s
    z'TestSeriesRank.test_rank_modify_inplace) __name__
__module____qualname__tdZskip_if_no_scipyrS   ro   rs   ri   markparametrizer%   ru   r   r   r   r   rE   r   r!   
skip_if_nor|   r~   operatoraddmulr   r   r   r   r   r   r   r   r   r   r,   9   sj   
[X
!



	r,   r   r5   rf   gUUUUUU?gUUUUUU?r   r   r   r   r=   rd   ra   rb   rc   c                 C   s<   t || }|jddd}t ||j}t|| d S )Nr   Trq   r8   r   r+   r   rO   rr   rt   r{   r   r   r   test_rank_dense_pct  s    r   gUUUUUU?g?c                 C   s<   t || }|jddd}t ||j}t|| d S )Nr   Tr   r   r   r   r   r   test_rank_min_pct  s    r   c                 C   s<   t || }|jddd}t ||j}t|| d S )Nr   Tr   r   r   r   r   r   test_rank_max_pct  s    r   rg   g333333?g?re   g?gUUUUUU?c                 C   s<   t || }|jddd}t ||j}t|| d S )Nr   Tr   r   r   r   r   r   test_rank_average_pct  s    r   c                 C   s<   t || }|jddd}t ||j}t|| d S )Nr   Tr   r   r   r   r   r   test_rank_first_pct  s    r   c                  C   s.   t td} | jdd }|dks*td S )Ni  Tr7   r   )r   r   rF   r@   r   AssertionError)rr   rt   r   r   r   test_pct_max_many_rows  s    r   )*	itertoolsr   r   Znumpyr   ri   Zpandas._libs.algosr   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r	   Zpandas._testingZ_testingrB   Zpandas.api.typesr
   Zfixturer   rI   r   r$   r!   r   r+   r,   r   r   r   r   r   r   r   Z
single_cpur   r   r   r   r   <module>   s   
$$$$$	

  Z









