U
    f/eKD                     @   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
  mZ d dlmZmZmZmZ d dlmZ d dlmZ G dd dZejdd	d
dg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ddddgdddddgfg	dd  Zejdd	d
dg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ddddgdddddgfg	d#d$ Zejdd	d
dg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ddddgdddddgfg	d%d& Zejdd	d
dg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ddddgdddddgfg	d-d. Zejdd
dg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ddddgdddddgfg	d/d0 Zejjejj d1d2 Z!dS )3    )chainproductN)InfinityNegInfinity)NaTSeries	Timestamp
date_range)CategoricalDtypec                   @   sv  e Zd Zeddddejdddejdg
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dd Z	dd Z
dd Z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d$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4S )5TestSeriesRank               g      ?g      @      @g      @g       @         averageminmaxfirstdensec                 C   sL  t d t d}tj|d d 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|	| 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 }tj|d< |d }|jdd}	t|	| tdd
d}
tt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 ),Nscipy.stats.specialscipy.stats.rankdatar         @
   r   Ots)indexnamer         ?      @Tpctr   d   g)\(?g@_)?r   z1/1/1990)ZperiodsgJz5g0.++g#B;g{Gz?gIf;g?      @z3 dayz	1 day 10mz-2 dayzm8[ns]dtypeig#Bǻg}gJzr   gWw'&l7g|=(   float64)pytestimportorskipnpnanrankastypetmassert_series_equalisnanZfillnainfr   r!   arangerepeatfloatcopyr	   Zilocr   arrayrandomZpermutationlen)selfZdatetime_seriesrankdataranksZoranksmaskZfilledexpiseriesZiranksrngvaluesZrandom_order rG   I/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/series/methods/test_rank.py	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 ))Nr#   g       @g      @r   r$   r(   r   secondthirdZfourthZfifthZsixthT)
categoriesorderedF	ascendingr   r   r   r   r   r   Zseventhr   top)	na_optionbottomkeep)rQ   rO   z3na_option must be one of 'keep', 'top', or 'bottom'matchbad皙?333333?皙?皙?      ?      ?      ?)rQ   r&   )r   r3   r
   r4   r5   r2   r0   NaNr.   raises
ValueError)r?   rC   Zexp_descrM   	unorderedZexp_unorderedresZ
unordered1Zexp_unordered1Zres1Zna_serZexp_topZexp_botZexp_keepmsgrG   rG   rH   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 SeriesrT   )r   r2   r.   r_   r`   )r?   src   rG   rG   rH   test_rank_signature   s
    z"TestSeriesRank.test_rank_signaturec           	      C   sv   | j }ddd}d tg}tdfh}| j}t||D ]>\}}||f|krHq2|d krT|n||}|||| |d q2d S )Nr   c                 S   s    | j |d}t|t| d S )Nre   )r2   r4   r5   r   )rg   expectedrf   resultrG   rG   rH   _check   s    z4TestSeriesRank.test_rank_tie_methods.<locals>._checkr   re   )r   )rg   objectresultsr   r3   )	r?   rg   rk   dtypesdisabledrm   rf   r*   ZseriesrG   rG   rH   test_rank_tie_methods   s    

z$TestSeriesRank.test_rank_tie_methodsrO   TFrf   r   r   r   r   r   rQ   rP   rR   rS   c                    s   dd t  t fdtjtjtj fg}d dh} fdd}|D ]R\}}}	}
|
g  |g   |	g   }t||d}||f|krq>||||| q>d S )Nrl   r-   r   )rl   r   c           	   	      s6  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}|r|n|d d d }tt|}| j|||d}t|t|dd d S )Nr   r   r   r   r   r   r   r   	   r   rP   r   rR   r+   )rf   rQ   rO   r-   r)   )	r0   r1   listr   from_iterabler2   r4   r5   r   )	rg   rf   rQ   rO   Z	exp_ranksrA   orderri   rj   chunkrG   rH   rk      s     zATestSeriesRank.test_rank_tie_methods_on_infs_nans.<locals>._checkr)   )r   r   r0   r1   r7   r   )r?   rf   rQ   rO   rn   ro   rk   r*   Zna_valueZpos_infZneg_infZin_arrrD   rG   ru   rH   "test_rank_tie_methods_on_infs_nans   s    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      FrN   r   r   r   r-   r)   )r   r0   r1   r7   r2   r4   r5   )r?   rD   rj   rC   rG   rG   rH   test_rank_desc_mix_nans_infs  s    z+TestSeriesRank.test_rank_desc_mix_nans_infsc           	         s   t d t d}tjd t fddtdddD  tj  dd tt D }  d	  d
 fD ]Z}t	||d}dD ]D}|j
|d}|||dkr|nd}t	||dd}t|| qqtd S )Nr   r   rq   c                    s   g | ]} |d  qS )NrG   .0ixsrG   rH   
<listcomp>   s     z;TestSeriesRank.test_rank_methods_series.<locals>.<listcomp>r   r   c                 S   s   g | ]}t td | qS )a)chrordrz   rG   rG   rH   r   #  s     g    .Agư>)r!   r   re   r   Zordinalr-   )r.   r/   r0   r=   ZrandnZconcatenaterangeshuffler>   r   r2   r3   r4   r5   )	r?   r@   r!   valsr    mrj   Zsprankri   rG   r}   rH   test_rank_methods_series  s    

 z'TestSeriesRank.test_rank_methods_seriesc           	      C   s   dddg}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
ddddgddddd	gfg}|D ]H\}}|D ]:}t ||}|jdd}t ||j}t|| qqd S )Nr   f8i8r   r   r   r   r   r   r+   r   re   r   r3   r2   r*   r4   r5   )	r?   rn   Zin_outserrC   r*   rg   rj   ri   rG   rG   rH   test_rank_dense_method.  s     



z%TestSeriesRank.test_rank_dense_methodc                 C   s   dddg}t || jD ]\}}d|kr2| j }n| j|}|jdd}| |  }t|| |dkrx|dkrxq| | j|d}|j|dd	}t|| qd S )
Nr   r   r   r|   FrN   r   re   )rf   rO   )	r   rm   rg   dropnar3   r2   r   r4   r5   )r?   rn   r*   rf   rg   rb   ri   Zres2rG   rG   rH   test_rank_descendingB  s    
z#TestSeriesRank.test_rank_descendingc                 C   sT   | j  d}| j D ]4\}}|j|d}t| }|j|_t	|| qd S )Nr   re   )
rg   r   r3   rm   itemsr2   r   r!   r4   r5   )r?   rg   rf   rb   rj   ri   rG   rG   rH   test_rank_intV  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    TrN   F)r   r0   r1   r3   rl   r2   )r?   rG   rG   rH   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   r;   r2   r4   r5   )r?   rg   ri   rj   rG   rG   rH   test_rank_modify_inplacef  s
    z'TestSeriesRank.test_rank_modify_inplaceN)__name__
__module____qualname__r   r0   r1   rg   r<   rm   rI   rd   rh   rp   tdZskip_if_no_scipyr.   markparametrizerw   ry   r   r   r   r   r   r   rG   rG   rG   rH   r      s.         XX#	r   r*   r   r   r   zser, expr   r#   r   r\   r   gUUUUUU?gUUUUUU?r   r   r   r   r   r   r+   rZ   rW   rX   rY   c                 C   s<   t || }|jddd}t ||j}t|| d S )Nr   Trf   r&   r   r*   r   rC   rg   rj   ri   rG   rG   rH   test_rank_dense_pctt  s    r   gUUUUUU?g?c                 C   s<   t || }|jddd}t ||j}t|| d S )Nr   Tr   r   r   rG   rG   rH   test_rank_min_pct  s    r   c                 C   s<   t || }|jddd}t ||j}t|| d S )Nr   Tr   r   r   rG   rG   rH   test_rank_max_pct  s    r   r]   g333333?g?r[   g?gUUUUUU?c                 C   s<   t || }|jddd}t ||j}t|| d S )Nr   Tr   r   r   rG   rG   rH   test_rank_average_pct  s    r   c                 C   s<   t || }|jddd}t ||j}t|| d S )Nr   Tr   r   r   rG   rG   rH   test_rank_first_pct  s    r   c                  C   s.   t td} | jdd }|dks*td S )Ni  Tr%   r   )r   r0   r8   r2   r   AssertionError)rg   rj   rG   rG   rH   test_pct_max_many_rows  s    r   )"	itertoolsr   r   Znumpyr0   r.   Zpandas._libs.algosr   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r	   Zpandas._testingZ_testingr4   Zpandas.api.typesr
   r   r   r   r   r   r   r   r   ZsingleZhigh_memoryr   rG   rG   rG   rH   <module>   s     ]




