U
    f/e9=                     @   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                   @   s  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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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^gdddgd_ed`d3dadbgifd^ddd^giee.ddcfgddde Z/d/S )f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-tiezk1ph/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   sD   t  |d< tddd|d< |d}|jddd}t|| d S )Nr   r	   )dayssecondsr   TrO   )r   nowr   r.   r4   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   Zbottom)	na_optionr	   topF)rb   rR   z3na_option must be one of 'keep', 'top', or 'bottom')match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ư>)rm   )r   r	   r   )rk   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|| |dkr\|dkr\d S | | j|d}|dkr|j|ddd}t|| |j|ddd}t|| d S )	Nrv   F)rR   r   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_descendingrk   r   Nc                 C   sZ   | j }ddd}tdfh}||f|kr*d S |d kr6|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#   rk   )r   rf   r.   r4   r:   )rC   rU   r#   rk   Zexp_dfrD   r!   r!   r"   _check2d  s    z3TestRank.test_rank_2d_tie_methods.<locals>._check2dr   r   )r   r   )rC   objectr8   results)r   r#   rk   rZ   rC   r   disabled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_rowsO  s
    zTestRank.test_pct_max_many_rowszcontents,dtypeir   g#Bǻg}gJzgWw'&l7rS   g|=r(   rX   gj7֖float32rp   uint8ii'  i g    _Bint641r   ZBAZBar&   r   rQ   
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   arrayrx   lenr6   choiceinsertZpermutationr.   r4   Zassert_equal)r   contentsrZ   Zframe_or_seriesZdtype_na_mapr0   Z	exp_orderZna_valueZnan_indicesZrandom_orderobjrU   rD   r!   r!   r"   test_rank_inf_and_nanY  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   rl   rZ   r   r   )r,   r-   r2   r   r.   r[   r4   r:   )r   rl   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data,expectedrN   )rN   rL   rL   rI   rH   )rl   c                 C   s    t |}| }t|| d S )Nr   )r   rV   rU   rC   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   rg   Zfixturer#   tdZskip_if_no_scipyrF   rW   r]   ra   rj   rn   r~   Z&skip_array_manager_not_yet_implementedmarkZparametrizefilterwarningsr   r   r   r   ZsingleZhigh_memoryr   r2   Ziinfor   r   r   r   r   r   r   r   r   r   rx   r   r!   r!   r!   r"   r      s         

#1	
M

	
	$
 <
&r   )r   r   Znumpyr,   rg   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   