U
    sVcB                     @   sp   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 d dlmZ G dd dZdS )    )datetime	timedeltaN)InfinityNegInfinity)	DataFrameSeriesc                   @   sN  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dddddgddd Zejdd Zdd Zdd Zdd Zejd d! Zd"d# Zejd$d% Zejd&d'd(d)gejd*d+d, Zejd-d.dgejd&d/egd0d1 Zejd2dd3d3d3gd3d4d5gd3d4d6ggfdd6d3d3gd6d6d5gd6d6d6ggfdd3d3d3gd3d5d5gd3d5d6ggfdd5d3d3gd5d4d5gd5d4d6ggfdd6d3d3gd5d6d5gd3d5d6ggfgd7d8 Zejjd9d: Zejd;ej  d<d=d>d?d@d.dAdBdCddDej gdEfej  d<d=d>d?dFd.dAdBdCddDej gdGfe!ej"j#dddHe!ej"j$gdIfe!ej%j#dJd.ddKdLdMe!ej%j$gdNfe& dOdPdQdRdSe' gdTfe(dUdde(dUdde(dUddgdVfgdWdX Z)dYdZ Z*d[d\ Z+ejd]d^d_d`d3dagfd^dbdad3d`gfdcd_dad`d3gfdcdbd3d`dagfgddde Z,ejd]dcd_d3dadfd`gfdcdbd3dadfd`gfd^d_dad`d3dfgfd^dbdad`d3dfgfgdgdh Z-ejdidddjgdddgdkedld3dad`gifdjdddjgiee.ddmfgdndo Z/d/S )pTestRank               AB      ?g      @      @      @g       @         averageminmaxfirstdenser   r   r   r   r   )paramsc                 C   s   |j S )z5
        Fixture for trying all rank methods
        )param)selfrequest r!   H/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/frame/methods/test_rank.pymethod"   s    zTestRank.methodc                 C   sD  dd l }ddl m} tj|d d d d< tj|d d d d< tj|d d d d< tj|d	 d d d
< | }|d}t|j}|tjj}t	|d|}tj||< t	|d|}	tj|	|< t
|j| t
|j|	 ttjjdd
ddd}
|
 }|
t }t
|| |
d}|
td}t
|| d S )Nr   rankdatar   r   r   r
   Cr   Dr   r	   (   )size)
   r   )scipy.statsr%   npnanrankisnanvaluesfillnainfapply_along_axistmassert_almost_equalr   randomrandintZreshapeastypefloatassert_frame_equal)r   float_framescipyr%   ranks0ranks1maskfvalsexp0exp1dfresultexpr!   r!   r"   	test_rank)   s.    



zTestRank.test_rankc              	   C   s  t dddgdddgg}t dddgdddggd }|jddd}t|| t dddgdddgg}|d	d }|jd	dd}t|| t d
ddgddd
gg}t dddgdddgg}|jddd}t|| t dddgdddgg}|jd	dd}t|| t d
tjdgddd
gg}t dtjdgdddgg}|jddd}t|| t dtjdgdddg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dddgg}|jdddd}t|| t dtjdgdddgg}|jdddd}t|| t ddddddddgi}t ddddddddgi}t| | d S )Nr	   r
   r         ?      @       @Tpctr   bcaFnumeric_onlyr     r   i  )rP   	ascending#B;r*   gDcLg_QPgKH9r   g      @g      @r   )r   r.   r4   r:   r,   r-   r   )r   rC   expectedrD   datarE   r!   r!   r"   
test_rank2M   sF     zTestRank.test_rank2c                 C   s:   t tjdddd}| }|  |}t|| d S )Nr*   r
   float64dtype)r   r,   r6   Zrandncopyr.   r4   r:   r   rC   rU   rD   r!   r!   r"   test_rank_does_not_mutate~   s
    z"TestRank.test_rank_does_not_mutatec              	   C   s   t  |d< tddd|d< tjtdd |jd d W 5 Q R X tjtdd |d}W 5 Q R X |jdd	d}t|| d S )
Nr   r	   )dayssecondsr   znumeric_only=NonematchrO   zDropping of nuisanceT)r   nowr   r4   assert_produces_warningFutureWarningr.   r:   )r   Zfloat_string_framerD   rU   r!   r!   r"   test_rank_mixed_frame   s    zTestRank.test_rank_mixed_framec              	   C   s  dd l }ddl m} tj|d d d d< tj|d d d d< tj|d d d d< tj|d	 d d d
< |jdd}|jddd}|tjj}t|d|}t|d|}t	
|j| t	
|j| |jdd}|jddd}|| d  j}	|j}
|
|
 d  j}
|
tjj}
t|d|	}t|d|
}t	
|j| t	
|j| |jddd}|jdddd}|tjj}t|d| }t|d| }t	
|j| t	
|j| |jddd}|jdddd}|| d  j}	|j}
|
|
 d  j}
|
tjj}
t|d|	 }t|d|
 }t	|j| t	|j| 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 d S )Nr   r$   r   r   r   r
   r&   r   r'   r   bottom)	na_optionr	   topF)rg   rR   z3na_option must be one of 'keep', 'top', or 'bottom'r`   badT)r+   r%   r,   r-   r.   r1   r2   r0   r3   r4   r5   r   Zto_dictTZassert_numpy_array_equalpytestZraises
ValueError)r   r;   r<   r%   r=   r>   r@   rA   rB   Zfval0Zfval1msgr!   r!   r"   test_rank_na_option   sZ    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   )axisindexcolumns)r   r4   r:   r.   )r   rC   r!   r!   r"   test_rank_axis   s    zTestRank.test_rank_axisc              
   C   s   dd l }ddl m} tjddd}|d d }dd t|jd D }||d	 |d
 fD ]x}t||d}dD ]b}dD ]X}|j||d}	t	||||dkr|nd}
|

tj}
t|
|d
d}t|	| qvqnqZd S )Nr   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ư>)rq   )r   r	   r   )ro   r#   r   ZordinalrX   )r+   r%   r,   r6   r7   rangeshaper   r.   r3   r8   rX   r4   r:   )r   r<   r%   xscolsvalsrC   ZaxmrD   ZsprankrU   r!   r!   r"   test_rank_methods_frame   s&       z TestRank.test_rank_methods_framerZ   Of8i8z(ignore:.*Select only valid:FutureWarningc                 C   s   d|kr| j  |}n| j |}|jdd}| |  }t|| | | j|d}|dkr|j|ddd}t|| |j|ddd}t|| d S )Nrz   F)rR   )r#   r   T)r#   rR   rP   )rC   Zdropnar8   r.   r   r4   r:   )r   r#   rZ   rC   resrU   Zres2Zres3r!   r!   r"   test_rank_descending   s    zTestRank.test_rank_descendingro   r   Nc                 C   s@   | j }ddd}|d k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#   ro   )r   rj   r.   r4   r:   )rC   rU   r#   ro   Zexp_dfrD   r!   r!   r"   _check2d  s    z3TestRank.test_rank_2d_tie_methods.<locals>._check2dr   )r   r   )rC   r8   results)r   r#   ro   rZ   rC   r   framer!   r!   r"   test_rank_2d_tie_methods  s    

z!TestRank.test_rank_2d_tie_methodsz
method,exprG   g      ?gUUUUUU?gUUUUUU?c                 C   sF   t dddgdddgdddgg}|j|dd}t |}t|| d S )	Ni  B   r
   A   r   r	   T)r#   rK   )r   r.   r4   r:   )r   r#   rE   rC   rD   rU   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>td S )Ni  r   r   TrJ   r	   )r   r,   Zaranger.   r   allAssertionError)r   rC   rD   r!   r!   r"   test_pct_max_many_rowsJ  s
    zTestRank.test_pct_max_many_rowszcontents,dtypeir   g#Bǻg}gJzgWw'&l7rS   g|=r(   rX   gj7֖float32rt   uint8ii'  i g    _Bint641r   ZBAZBar&   objectrQ   
datetime64c                 C   s   t jt jd t dd}t j||d}t jtt|ddd }||kr|| }t jtt|d}t |||}t ||t j}t j	t|}	|||	 }
|||	 dd}|

 }t|| d S )NZnat)rX   r   r   r   rY   rX   rG   r   )r,   r-   r   arrayr|   lenr6   choiceinsertZpermutationr.   r4   assert_equal)r   contentsrZ   frame_or_seriesZdtype_na_mapr0   Z	exp_orderZna_valueZnan_indicesZrandom_orderobjrU   rD   r!   r!   r"   test_rank_inf_and_nanS  s"    >
zTestRank.test_rank_inf_and_nanc              
   C   s   ddddddddd	d
g
}ddddddddddg
}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 )Nr   r   r
   r   r	   r   r   r   	   r*   )col1col2r   )rV   rp   rZ   r   r   )r,   r-   r2   r   r.   r[   r4   r:   )r   rp   r   r   rC   Z	df_resultZseries_resultr!   r!   r"   "test_df_series_inf_nan_consistency  s    "z+TestRank.test_df_series_inf_nan_consistencyc                 C   sB   t dtj dtjgi}t ddddgi}| }t|| d S )NrN   r   rG   rI   rH   )r   r,   r2   r.   r4   r:   r\   r!   r!   r"   test_rank_both_inf  s    zTestRank.test_rank_both_infzna_option,ascending,expectedrh   TrH   rI   Frf   c                 C   s>   |t jt jt j g}|j|||d}||}t|| d S )Nr#   rg   rR   )r,   r2   r-   r.   r4   r   )r   r   r#   rg   rR   rU   r   rD   r!   r!   r"   test_rank_inf_nans_na_option  s    z%TestRank.test_rank_inf_nans_na_optiong      @c                 C   s8   |ddd dg}|j d||d}||}t|| d S )NZfoor   r   )r.   r4   r   )r   r   rg   rR   rU   r   rD   r!   r!   r"   test_rank_object_first  s    
zTestRank.test_rank_object_firstzdata,expectedrN   )rN   rL   rL   )rp   c              	   C   s>   t |}d}tjt|d | }W 5 Q R X t|| d S )NzDropping of nuisance columnsr`   )r   r4   rc   rd   r.   r:   )r   rV   rU   rC   rm   rD   r!   r!   r"   test_rank_mixed_axis_zero  s
    z"TestRank.test_rank_mixed_axis_zero)0__name__
__module____qualname__r   r,   r-   sr   rC   r   r   rk   Zfixturer#   tdZskip_if_no_scipyrF   rW   r]   re   rn   rr   r   markZparametrizefilterwarningsr   r   r   r   Z
single_cpur   r2   Ziinfor   r   r   r   r   r   r   r   r   r   r   r   r|   r   r!   r!   r!   r"   r      s        

#1	
M

	
	
$
 <
	
	
&r   )r   r   Znumpyr,   rk   Zpandas._libs.algosr   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   Zpandas._testingZ_testingr4   r   r!   r!   r!   r"   <module>   s   